[ 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에서 주로 구현한다고 한다.
'Backend' 카테고리의 다른 글
클라우드 1 : EC2 인스턴스에 Docker 설치 후, Nginx 컨테이너 띄우기 (0) | 2025.03.13 |
---|---|
백엔드 4. User Domain 구현하며 흐름 잡기 (0) | 2025.02.13 |
백엔드 2.ERD 그리기 (0) | 2025.02.07 |
백엔드 : 1. Spring Initializer (0) | 2025.02.04 |
MongoDB 연결과 CRUD (0) | 2024.03.22 |