스프링부트/나도코딩 스프링부트 코딩자율학습단 6기

[나도코딩 스프링부트 코딩자율학습단 6기] 학습 정리

CuckooBird 2024. 2. 4. 22:47

나도코딩 스프링부트3 책을 통해 배운 내용을 간단히 정리해보겠습니다.

 

1. MVC 패턴

Model(모델), View(뷰), Controller(컨트롤러) 이 세가지의 요소의 역할을 나누는 기법을 MVC 패턴(Model-View-Controller Pattern) 이라고 합니다. 모델은 웹 페이지를 화면에 보여 주고, 컨트롤러는 클라이언트의 요청을 받아 처리하고, 모델은 데이터를 관리하는 역할을 맡습니다.

 

 

 

2. DTO와 컨트롤러

HTML 요소 중 <form>태그에 데이터를 실어 전송하면 전송되는 데이터는 폼 데이터(form data) 라고 합니다. <form> 태그는 데이터를 전송할 때 어디로, 어떻게 보낼지 등을 적어서 보냅니다.

폼 데이터는 서버의 컨트롤러가 객체에 담아 받습니다. 이 객체를 DTO(Data Tranfer Object)라고 합니다.

컨트롤러는 @Controller 어노테이션이 필요합니다.

 

3. 엔티티와 레포지토리

JPA(Java Persistence API)란 자바 언어로 DB에 명령을 내리는 도구로, 데이터를 객체 지향적으로 관리할 수 있게 해 줍니다. JPA의 핵심 도구로는 엔티티(entity)와 레포지토리(repository)가 있습니다.

엔티티는 자바 객체를 DB가 이해할 수 있게 만든 것으로, 이를 기반으로 테이블이 만들어집니다.

레포지토리는 엔티티가 DB 속 테이블에 저장 및 관리될 수 있게 하는 인터페이스입니다.

엔티티에는 @Entity 어노테이션이 필요합니다. 레포지토리는 사용자가 직접 구현할 수도 있지만, JPA에서 제공하는 레포지토리 인터페이스(CrudRepository<T, ID> 혹은 JpaRepository<T, ID> 등을 사용할 수 있음)를 활용해 만들 수도 있습니다.

 

4. 롬복(lombok)

롬복(lombok)이란 코드를 간소화해 주는 라이브러리입니다. 롬복을 사용하면 필수 코드를 간편하게 작성할 수 있습니다. 로깅(logging) 기능(log.info();)을 통해 println() 문을 개선할 수 있습니다. 롬복을 통해 코드를 리팩터링(refactoring) 할 수 있습니다.

롬복을 사용하기 위해서는 build.gradle에서 dependencies에

compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

위 코드를 추가해야 합니다.

롬복을 통해 @AllArgsConstructor(클래스의 모든 필드를 담은 생성자 추가), @NoArgsConstructor(클래스의 모든 필드를 담지 않는 생성자 추가), @ToString(toString() 메서드 추가), @Slf4j(로깅 기능 추가) 등의 어노테이션을 사용할 수 있으며, 코드 리팩터링을 할 수 있습니다.

 

5. CRUD

클라이언트와 서버 간에 데이터를 전송할 때는 다양한 통신 규약, 즉 프로토콜을 따릅니다. 프로토콜은 컴퓨터 간에 원활하게 통신하기 위해 사용하는 전 세계 표준입니다. HTTP는 그 중에서도 웹 서비스에 사용하는 프로토콜입니다. HTTP는 클라이언트의 다양한 요청을, 메서드를 통해 서버로 보내는 역할을 합니다. HTTP의 대표적인 메서드로는 POST, GET, PATCH(PUT), DELETE가 있습니다. 데이터의 생성, 조회, 수정, 삭제는 데이터 관리에서 가장 기본이 되는 동작입니다. 이를 간단히 CRUD(Create Read Update Delete)라고 합니다. 이러한 CRUD는 SQL 무능로 적용할 수 있는데, 이 개념이 HTTP의 메서드에도 그대로 적용됩니다.

데이터 관리 SQL HTTP
Create INSERT POST
Read SELECT GET
Update UPDATE PATCH(PUT)
Delete DELETE DELETE

 

6. REST API

REST API(Representational State Transfer API)는 서버의 자원을 클라이언트에 구애받지 않고 사용할 수 있게 하는 설계 방식입니다. REST API 방식에서는 HTTP 요청에 대한 응답으로 서버의 자원을 반환합니다. 서버에서 보내는 응답이 특정 기기에 종속되지 않도록 모든 기기에서 통용될 수 있는 데이터를 반환합니다.

서버는 클라이언트의 요청에 대한 응답으로 화면이 아닌 데이터를 전송합니다. 이때 사용하는 응답 데이터는 JSON(JavaScript Object Notation)입니다.

REST API를 구현할 때는 @Controller(일반 컨트롤러) 대신 @RestController(REST 컨트롤러)를 사용합니다.

 

7. 서비스

서비스(service)란 컨트롤러와 레포지토리 사이에 위치하는 계층으로, 서버의 핵심 기능(비즈니스 로직)을 처리하는 순서를 총괄합니다. 서비스 파일(@Service 어노테이션 사용)에서는 레포지토리에 데이터를 가져오도록 명령하는 코드를 짭니다.

 

8. 트랜잭션

트랜잭션(transaction)이란 모두 성공해야 하는 일련의 과정을 뜻합니다. 그리고 트랜잭션이 실패로 돌아갈 경우 진행 초기 단계로 돌리는 것을 롤백(rollback)이라고 합니다.

 

9. 테스트

테스트(test)란 프로그램의 품질을 검증하는 것으로, 의도대로 프로그램이 잘 동작하는지 확인하는 과정입니다. 테스트 코드는 다양한 경우를 대비해 작성하는데, 이를 테스트 케이스(test case)라고 합니다. 테스트 케이스는 성공할 경우뿐만 아니라 실패할 경우도 고려해야합니다. @SpringBootTest 어노테이션을 이용하여 새로운 테스트 코드 파일에 테스트를 진행할 수 있습니다.