![[인프런 워밍업 클럽 3기] 백엔드 발자국 1주차](https://cdn.inflearn.com/public/files/blogs/8c95fa53-7e33-4d54-86fc-363e9c6b6244/워밍업클럽 3기.png)
[인프런 워밍업 클럽 3기] 백엔드 발자국 1주차
스프링 의존성 주입
### 1. 생성자
```kotlin
@Service
Class PresentaionService(
private val presentaionRepository: PresentaionRepository
){
// 생략
}
```
> 생성자 주입 방식을 권장하는 3가지 이유
> 1. 런타임에 수정자를 호출해서 의존성이 바뀌는 것을 방지할 수 있다.
> 2. 순환참조 시 컴파일 오류가 발생해서 런타임 단계에서 메소드가 서로 호출하는 스택오버플로우 에러를 방지할 수 있다.
> 3. 의존하는 Bean 이 누락되면 컴파일 오류가 발생하기 때문에 런타임에서 NullPointerException 을 방지할 수 있다.
### 2. 수정자
```kotlin
@Service
Class PresentaionService {
private lateinit var presentaionRepository: PresentaionRepository
@Autowired
fun setPresentationRepository(presentaionRepository: PresentaionRepository){
this.presentaionRepository = presentaionRepository
}
}
```
### 필드주입
```kotlin
@Service
Class PresentaionService {
@Autowired
private lateinit val presentaionRepository: PresentaionRepository
}
```
HTTP와 REST API
### HTTP 정의
> [!tip] HTTP 정의
> * Hyper Text Transfer Protocol
> * 네트워크로 통신하는 두 컴포넌트 간의 통신 규약
### HTTP 요청/응답
> Request
> * Start Line: HTTP 메서드, URL, HTTP 버전을 표시한다.
> * Header: 컨텐츠의 길이나 유형, 클라이언트 (브라우저) 의 정보 등을 표현한다.
> * Body: 서버에서 작업을 처리하기 위해 필요한 실질적인 데이터를 담는다. 최근에는 JSON 포맷을 주로 사용한다.
> Resposne
> * Start Line : HTTP 버전, 상태 코드, 상태 메세지를 표현한다.
> * Header: 컨텐츠의 길이나 유형, 서버의 정보 등을 표현한다.
> * Body : 응답의 결과 데이터를 담는다. 서버 사이드 렌더링 방식일 경우 HTML 을 사용한다.
> 클라이언트 사이드 렌더링 방식이거나 서버 간의 통신일 경우 주로 JSON 을 사용한다.
### HTTP 요청 메서드
> GET
> * READ 작업을 요청할 때 사용한다.
> * 브라우저의 주소창은 항상 GET 메서드로 요청한다.
> * GET 요청을 할 경우 일부 HTTP 라이브러리에서는 Body 에 데이터를 담을 수 없다.
> * 따라서 데이터를 보내야 할 경우 쿼리 파라미터를 주로 사용한다.
> POST
> * Creat 작업을 요청할 때 사용
> * 브라우저에서는 사용할 수 없고, Postman 과 같은 별도의 툴을 사용해야 한다.
> PUT
> * Update 작업을 요청할 때 사용
> PATCH
> * Update 작업을 요청할 때 사용
> DELETE
> * Delete 작업을 요청할 때 사용
## 데이터베이스
### 데이터베이스 정의
> 📌 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합
### DBMS (DataBase Management System)
> 📌 데이터의 집합(데이터베이스)을 저장하고 관리할 수 있는 응용 프로그램.
### 관계형 데이터베이스
> 📌 가장 널리 쓰이는 데이터베이스. 데이터를 행과 열로 이루어진 표의 형태로 저장함.
> 각 테이블 들은 관계를 가지기 때문에 관계형 데이터베이스라고 함.
#### 대표적인 관계형 데이터베이스
> 📒 오라클
,`Mysql`, PostgreSQl
### 비관계형 Database
> 📒 mongoDB
, ... Redis
### JPA
> 📌 Java Persistance API
약어, 자바 ORM 기술의 표준 인터페이스
### ORM
> 📌 Objecte Relational Mapping
약어 , 객체 관계 매핑 -> 객체 지향 프로그래밍의 인스턴스와 관계형 데이터베이스를 매핑해주는 기술을 의미.
### 트랜잭션
> 📌 여러개의 데이터베이스 작업을 하나로 묶어주는 논리적인 단위.
궁금했던 점
엔티티 생성 시, 생성자 선언방식을 사용해도 되는가?
> 예시 -> @Entity
class Achievement(
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "achievement_id")
val id: Long? = null,
var title: String,
var description: String,
var achievedDate: LocalDate? = null,
var host: String,
var isActive: Boolean,
): BaseEntity()
위와 같이 엔티티를 생성방식은 중복되는 코드를 줄일 수 있어서 개인적으로 선호하는 방식인데,
이런 방식을 사용해도 되는지 궁금증이 생겼다.
[입문자를 위한 Spring Boot with Kotlin](https://www.inflearn.com/course/%EC%9E%85%EB%AC%B8%EC%9E%90-spring-boot-kotlin-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4/dashboard)
댓글을 작성해보세요.