1️⃣ Spring Boot API 만들기 - 계층 구조 설명
- 프레임워크 사용해 API 서버 만들시에, 프레임워크 구조를 지키며 만들어야 함
- 계층 구조 (Layered Architecture) 의 핵심 = “관심사 분리”
- 각 계층은 담당하는 책임을 지키며 하위 계층에 의존함
💚 계층구조의 개념
- Presentation Layer (프레젠테이션 계층)
- HTTP 요청을 처리
- 파라미터와 JSON 매개변수를 처리
- 인증에 관련된 로직을 처리
- Business Layer (비즈니스 계층)
- 프레젠테이션 계층에서 전달 받은 데이터 유효성 검사
- 비즈니스 로직을 구성
- Persistence Layer (지속성 계층)
- 데이터베이스에 대한 논리 모델을 나타냄
- 비즈니스 로직에서 생성된 개체를 데이터베이스 개체로 변환
- 데이터베이스 접근을 위한 계층
- Database Layer (데이터베이스 계층)
- 여러 데이터베이스에 대한 전반적인 CRUD 작업을 수행
💚 Spring Boot 계층 구조
- Controller(컨트롤러)
- HTTP 요청과 요청된 정보를 체크, 인증을 담당
- 기본적인 계층 구조 → 비즈니스 계층이 유효성 검사 but
- Spring Boot 에서는 Validation 라이브러리를 활용하여 요청 정보를 바로 체크 가능
- Service(서비스)
- 비즈니스 로직(핵심기능, 실제 기능을 수행하는 로직)을 담당하는 계층, 기본 개념과 동일
- Domain(도메인)
- 실제 데이터베이스 테이블 정보를 가지는 하나의 Entity 클래스 생성
- 해당 Entity 컨트롤
- Repository(리포지토리)
- 실제 데이터베이스에 쿼리문을 실행하는 로직 담당
프레임워크를 사용해서 API 서버를 만들 때, 해당 프레임워크 구조를 지켜야 함
2️⃣ DispatcherServlet 요청 흐름
💚 DispatcherServlet
→ 서블릿 컨테이너의 가장 앞단에서 들어오는 모든 요청을 먼저 받아, 적합한 컨트롤러에 위임해주는 프론트 컨트롤러
이 요청이 어떤 컨트롤러에 적합할까?
- 클라이언트로부터 요청이 오면, 서블릿 컨테이너가 요청을 받음
- 이 요청을 프론트 컨트롤러인 DispatcherServlet이 받아옴
- 해당 요청을 처리할 컨트롤러(Bean)을 getBean() 메서드로 받아옴
- 요청에 적합한 컨트롤러 매서드를 실행시킴
💚 DispatcherServlet 요청 처리 흐름
- DispatcherServlet은 적합한 컨트롤러와 메서드를 찾아 요청을 위임해야함
- 클라이언트에서 요청이 오면 DispatcherServlet이 해당 요청을 받음
- HandlerMapping을 통해 요청에 맞는 Controller을 매핑함
- 찾아낸 Controller에게 처리 요청
- 컨트롤러는 클라이언트의 요청을 처리한 후, 결과&결과를 출력할 View의 이름을 리턴
- DispatcherServlet이 viewResolver을 통해 컨트롤러가 보내온 view 이름으로 view를 찾음
- 처리 결과를 view에 송신
- 처리 결과가 포함된 view를 다시 dispatcherServlet에 송신
- 서버 응답 클라이언트에게 반환
💚 요청 처리순서 도식화
1. Client의 요청은 서블릿 컨텍스트 (Web Context)에서 Filter를 지남
2. Filter을 거친 요청은 Spring Context의 Dispatcher Servlet이 가장 먼저 요청 받음
3. Dispatcher Servlet의 요청은 Interceptor을 거침
4. Interceptor을 거친후 다시 Dispatcher Servlet이 Controller에게 요청 위임
💻 reference
'Server > Spring Boot' 카테고리의 다른 글
[Chapter 06] AWS 서버 환경을 만들어보자 - AWS EC2 (1) | 2023.12.17 |
---|---|
[Chapter 03] 스프링 부트에서 JPA로 데이터베이스 다뤄보자 (2) - 수정/조회 (1) | 2023.12.17 |
[Spring Boot] 게시판 만들기 (1) - ERD 설계, MySQL 연결 (0) | 2023.11.13 |
[Chapter 05] 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기 (0) | 2023.10.16 |
[Chapter 04] 머스테치로 화면 구성하기 (0) | 2023.10.16 |