[인프런 워밍업 클럽 3기] 백엔드 발자국 1주차

[인프런 워밍업 클럽 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)

댓글을 작성해보세요.


채널톡 아이콘