FE - BE (controller - service & entity.service - model) 의 구조
3 Layer Architecture 구조는 아래와 같이 나눠지며, 각 layer마다 주요 역할이 존재한다.
- Presentation & Controller layer 역할 : Request parameter의 유효성 처리 / Service layer 호출
- Business layer 역할 : 핵심적인 비즈니스 로직 / 대부분의 주요 코드들이 위치 / DB에 접근하는 Model layer 호출
- Persistence layer 역할 : DB에 접근하여 데이터를 조작 / 데이터에 영속성(Persistence)을 부여하는 계층
예시) 회원가입을 하는 상황이라면?
Front-End
- 유저가 회원가입에 필요한 요소들(이메일, 비밀번호, 이름, 전화번호 등)을 회원가입 창에서 입력한다.
- BE에 /signup 이라는 endpoint의 API를 호출하며, 이 입력 데이터들을 인자로 전달한다.
Back-End
Controller layer
- /signup이라는 endpoint의 API 호출을 받는 곳에서 이메일, 비밀번호, 이름, 전화번호의 정보를 매개변수로 받는다.
- 입력한 정보들의 유효성을 검사한다.
- 이메일의 형식(xxxx@xxx.com)을 지켰는지
- 비밀번호의 형식(영문, 특수기호 포함 8 ~ 16글자)을 지켰는지
- 기타 형식(빈 값은 없는지 등)을 지켰는지
- 유효성 검사에 통과했을 시, Service layer에 정보들을 인수로 담아 호출한다.
Service layer
- 유저 데이터베이스에 입력받은 이메일이 존재하는지 확인 (존재하면 회원가입 불가)
- Entity.service layer에 정보들을 전달하며 함수 호출
Entity.Service layer (Entity의 CRUD 작업을 담당하는 layer)
- Model layer에 정보들을 전달하며 함수 호출 (유저를 생성하는 기능을 담당하는, 데이터베이스에 직접 접근하여 데이터를 저장하는 함수)
Model layer
- 받은 유저 정보들을 데이터베이스에 저장
Controller와 Service의 의존성이 낮다?
- 각자의 업무가 섞이지 않고, 각자의 Layer에서 잘 분리하여 처리한다는 의미!
- Controller Layer에서는 Request parameter의 유효성 검사와 Service layer를 호출하는 역할(건물의 1층 로비 안내원의 역할)을,
- Service Layer에서는 비즈니스 로직의 처리(회사 임직원들의 역할)를 잘 수행해내는 것!
Entity.service 의 역할
- Model Layer에서 예측하기 어려운 응답값이나 예외처리들을 핸들링하는 부분
- Entity를 DTO로 변경하는 부분 (Service에서 Controller로 반환하는 값은 DTO를 이용하기 때문에)
- Entity의 CRUD 작업을 처리하는 부분