본문 바로가기

Backend

백엔드 3. Spring Boot 아키텍쳐

[ Spring Boot 서비스 데이터 흐름 ] 

웹 서비스는 다음과 같은 흐름으로 요청을 처리한다. 

클라이언트 요청 -> Controller -> Service -> Repository -> Service -> Controller -> 클라이언트 응답

 

이를 위해서 동작을 계층적인 구조 ( Layered Architecture)로 나눈다. 

 

[ Layered Architecture ] 

일반적인 레이어드 아키텍쳐

Controller가 프레젠테이션 계층, Service가 비즈니스 계층, Repository가 데이터 접근 계층

 

 

Spring Boot 레이어드 아키텍쳐 

src/main/java/com/example/project
 ├── user
 │    ├── UserController.java   → 컨트롤러
 │    ├── UserService.java      → 서비스
 │    ├── UserRepository.java   → DAO (데이터 접근 계층)
 │    ├── UserEntity.java       → 엔티티 (DB 테이블과 매핑)
 │    ├── UserDto.java          → DTO (데이터 전송 객체)

 

 

[ 서비스 설계 철학 ] 

엔티티를 설계할 때는 두가지 접근 방식이 존재한다. 

1) 도미엔(기능) 기반 구조 -> DDD (Domain Driven Development ) 

6월 말까지 협업으로 진행할 프로젝트이고, 기능을 계속 추가하는 확장성이 중요하므로 본 방법을 채택한다. 

src/main/java/com/example/project
 ├── user
 │    ├── UserController.java
 │    ├── UserService.java
 │    ├── UserRepository.java
 │    ├── UserEntity.java
 │    ├── UserDto.java
 │
 ├── team
 │    ├── TeamController.java
 │    ├── TeamService.java
 │    ├── TeamRepository.java
 │    ├── TeamEntity.java
 │    ├── TeamDto.java
 │
 ├── file
 │    ├── FileController.java
 │    ├── FileService.java
 │    ├── FileRepository.java
 │    ├── FileEntity.java
 │    ├── FileDto.java

 

2) 계층(레이어) 기반 구조 

src/main/java/com/example/project
 ├── controller
 │    ├── UserController.java
 │    ├── TeamController.java
 │    ├── FileController.java
 │
 ├── service
 │    ├── UserService.java
 │    ├── TeamService.java
 │    ├── FileService.java
 │
 ├── repository
 │    ├── UserRepository.java
 │    ├── TeamRepository.java
 │    ├── FileRepository.java
 │
 ├── entity
 │    ├── UserEntity.java
 │    ├── TeamEntity.java
 │    ├── FileEntity.java
 │
 ├── dto
 │    ├── UserDto.java
 │    ├── TeamDto.java
 │    ├── FileDto.java

 

[ REST API 방식의 설계 ] 

백엔드와 프론트엔드를 구분하여 설계하기 위해 채택하는 방식이다. 

Controller에서 주로 구현한다고 한다.