스파르타코딩클럽 내일배움캠프 Node.js 심화주차 강의를 들으며 공부한 것을 적은 것입니다.
도메인
- 프로세스가 지원하는 활동을 의미
- 한 도메인은 다시 하위 도메인으로 나눌 수 있다
- 한 도메인은 다른 하위 도메인과 연동하여 완전한 기능을 제공
도메인 모델
- 특성을 포함하는 프로세스나 지도
- 특정 도메인을 개념적으로 정리한 모델
종류
- Entity
실제 DB 테이블과 연관되어 있는 핵심 클래스
Entity를 기준으로 테이블이 생성되고 스키마가 변경
- Value Object
- Domain Service
아키텍처 패턴
- 소프트웨어의 구조를 구성하기 위한 가장 기본적인 토대
- 시스템들과 역할이 정의되어 있고, 관계와 규칙 등이 포함
대표적인 패턴
- 저장소 패턴
- 서비스 계층 패턴
- 작업 단위 패턴
- 애그리게이트 패턴
고민해야 할 것
- 아키텍처 패턴이 주는 이익과 비용에 대한 이유
- 장단점 파악
- 노력과 시간을 투자할 만한 가치가 있을 정도로 도메인이 복잡한 경우에 도입
계층형 아키텍처 패턴
- 계층을 분리해서 관리하는 아키텍처 패턴
- 단순하고 대중적, 비용도 적게 듦
- 각 계층이 자신의 바로 아래 계층에만 의존
- 각 계층은 응집도가 높으면서, 다른 계칭과는 결합도가 낮아야함
- 상위 계층은 하위 계층을 사용할 수 있지만, 하위 계층은 상위 계층에 누가있는지 알 수 없다
3계층 아키텍처
- 프레젠테이션 계층
- 비즈니스 로직 계층
- 데이터 엑세스 계층
3계층 아키텍처 구현
- Controller : 요청/응답 처리
- 클라이언트의 요청을 처리 후, 결과를 반환해주는 역할
- Service : 중요한 동작을 많이 하는 부분
- 가장 핵심적인 비즈니스 로직이 수행
- Repository : DB와 연관된 부분
- 실제 DB의 데이터를 사용하는 부분
장점
- 관심사를 분리, 코드를 명확하게 인지
- 계층별로 읜존성이 낮아 수정에 용이
- 계층별로 유닛 테스트
Controller
- 클라이언트의 요청을 수신
- 서버에서 수행된 결과를 클라이언트에게 반환
- 하위 계층에서 발생하는 예외를 처리
- 데이터에 대해 유효성 검증
Service
- 핵심적인 비즈니스 로직을 수행
- 클라이언트의 요구사항을 구현하는 계층
- 서비스 계층에 너무 많은 기능을 넣으면 빈약한 도메인 모델과 같은 안티 패턴이 생길 수 있다
Repository
- 데이터 엑세스 계층
- 데이터 접근과 관련된 세부 사항을 감춘다
- 데이터 저장소를 간단히 추상화한 것이므로, 모델 계층과 데이터 계층을 분리할 수 있다