본문 바로가기

Server/SpringBoot

[SpringBoot] 레이어드 아키텍처를 적용하여 API 만들기

레이어드 아키텍처로 User를 저장하는 API를 만들겠습니다.

 

* 레이어드 아키텍처

[ Controller ] : http 요청을 받습니다. 클라이언트 및 Service와 데이터를 주고받기 위해 주로 [DTO] 객체를 사용합니다.

[ Service ] : 비즈니스 로직을 처리합니다. Repository와 데이터를 주고받기 위해 주로 [Entity] 객체를 사용합니다.

[ Repository ] : CRUD 작업을 수행합니다. DB와 데이터를 주고받기 위해 주로 [Entity] 또는 [DAO] 객체를 사용합니다.

 

 

1. 패키지 분리

레이어드 아키텍처를 구현하기 위한 구조로 패키지를 분리합니다.

controller : 클라이언트로부터 GET, POST 등의 API 요청을 받기 위한 진입점입니다.

service : 비즈니스 로직을 처리합니다.

repository : entity를 DB에 CRUD 합니다.

dto : request, response 응답용 데이터를 담는 객체입니다.

entity : DB <> java 간 데이터 맵핑 객체입니다.

 

2. Entity 생성

entity 패키지에 User 엔티티를 생성합니다.

지난 포스트에서 만든 클래스에 name을 추가했습니다.

@NoArgsConstructor : JPA에서 기본생성자가 필수

@Builder : 엔티티를 빌더패턴으로 편리하게 생성할 수 있도록 하기 위함

@AllArgsConstructor : @Builder는 모든 필드를 초기화 할 수 있는 생성자가 필요함

@Getter : 필드를 편리하게 조회하기 위함

 

3. Repository 생성

repository 패키지에 UserRepository interface를 생성합니다.

JpaRepository를 확장하며, Long 타입의 키값을 갖는 User 엔티티임을 명시합니다.

* JpaRepository란, Spring Data JPA에서 제공하는 인터페이스입니다. CRUD, 페이징, 정렬 등을 기본으로 제공합니다.

* JPA란, entity와 DB의 테이블 매핑해줍니다. SQL 없이 자바 코드로 DB에 쉽게 접근할 수 있습니다.

 

4. Service 생성

service 패키지에 비즈니스 로직 처리를 담당할 UserService를 추가합니다.

비즈니스 로직 처리 이후 변경된 내용을 반영하기 위해, 또는 필요한 데이터를 조회하기 위해 Repository와 통신하기 때문에 UserRepository를 주입받습니다.


@RequiredArgsConstructor : final이나 @NonNull이 붙은 필드를 초기화하는 생성자 자동으로 만들어줍니다.

@Service : Spring이 자동으로 Bean으로 등록하고 자동으로 생성자를 주입합니다.

> UserService는 UserRepository를 final로 선언했기 때문에, Spring이 UserRepository를 자동으로 생성자에 주입합니다.

 

5. Controller 생성

controller 패키지에 UserController를 추가합니다.

UserController는 클라이언트의 요청을 받아 UserService에서 요청에 해당하는 기능을 호출합니다.
@RequiredArgsConstructor를 통해 final로 선언된 UserService를 자동으로 주입받습니다.
@RestController를 사용하여 HTTP 요청을 처리하고 JSON 형태로 응답합니다.

 

6. UserDto 생성

dto 패키지에 UserDto를 추가합니다.

추후 수정, 조회 등에 필요한 클래스를 구현하기 위해 inner class로 구현하였습니다.

 

7. 기능 구현

- UserController.java

[POST] /users 로 들어오는 요청을 처리합니다.

{ name: "" } 형태의 데이터를 파라미터로 받습니다.

 

- UserService.java

DTO를 통해 받은 데이터를 기반으로 새로운 User 엔티티를 생성합니다.

UserRepository에 엔티티를 전달하여 저장합니다.

 

8. 테스트

Postman으로 요청하고, MySQLWorkbench로 user가 정상적으로 저장된걸 확인합니다.

'Server > SpringBoot' 카테고리의 다른 글

[SpringBoot] 조회 API 만들기  (1) 2025.04.26
[SpringBoot] JPA, MySQL 설정  (0) 2025.04.26
[SpringBoot] 프로젝트 만들기  (1) 2025.04.26