01. 아키텍처 패턴 (Architecture Pattern)
아키텍처 패턴은 소프트웨어의 구조를 구성하기위한 가장 기본적인 토대를 제시
- 아키텍처 패턴은 각각의 시스템들과 그 역할이 정의되어 있고, 여러 시스템 사이의 관계와 규칙 등이 포함되어 있다.
- 검증된 구조로 개발을 진행하기 때문에 안정적인 개발이 가능.
- 아키텍처 패턴을 도입할 경우 도메인이 복잡할수록 모델이나 코드를 더 쉽게 변경할 수 있다는 측면에서 큰 이익을 얻을 수 있다.
대표적인 아키텍처 패턴
- 저장소 패턴 (Repository pattern)
- 서비스 계층 패턴 (Service layer pattern)
- 유스 케이스(Usecase)의 시작과 끝을 명확하게 정의하기 위한 패턴
- 작업 단위 패턴 (Unit of work pattern)
- 애그리게이트 패턴 (Aggregate pattern)
02. 계층형 아키텍처 패턴 (Layered Architecture Pattern)
계층형 아키텍처 패턴(Layered Architecture Pattern)은 계층을 분리해서
관리하는 아키텍처 패턴이고, 현재 가장 흔하게 사용되고 있는 아키텍처 패턴 중 하나
단순, 대중적, 비용도 적게들어서 사실상 표준 아키텍처라고 봐도 무방하다.
계층형 아키텍처 패턴은 어떤 경우든 계층을 분리해서 유지하고, 각 계층이 자신의
바로 아래 계층에만 의존하게 만드는 것이 목표.
일반적으로 계층형 아키텍처 패턴의 경우 규모가 작은 어플리케이션의 경우 3개, 크고 복잡한 경우는 그 이상의 계층으로 구성
일단 3계층 아키텍처(3-Layered Architecture)에 대해 알아보자
3계층 아키텍처에서 구성되는 각각의 계층(Layer)는 아래와 같다.
- 프레젠테이션 계층 (Presentation Layer)
- 비즈니스 로직 계층 (Business Logic Layer)
- 데이터 엑세스 계층 (Data Access Layer)

3-Layered Architecture는 아래의 3가지의 처리과정을 이용해서 구현한다.
- Controller : 어플리케이션의 가장 바깥 부분, 요청/응답을 처리함.
- 클라이언트의 요청을 처리 한 후 서버에서 처리된 결과를 반환해주는 역할을 한다.
- Service : 어플리케이션의 중간 부분, 실제 중요한 작동이 많이 일어나는 부분
- 아키텍처의 가장 핵심적인 비즈니스 로직이 수행되는 부분
- Repository : 어플리케이션의 가장 안쪽 부분, DB와 맞닿아 있음.
03. 컨트롤러 (Controller)
컨트롤러(Controller)란 클라이언트의 요청을 처리 한 후 서버에서 처리된 결과를 반환해주는 역할을 함.
컨트롤러(Controller)는 추가적으로 아래의 역할을 가지고 있다.
- 클라이언트의 요청(Request)을 수신.
- 요청(Request)에 들어온 데이터 및 내용을 검증.
- 서버에서 수행된 결과를 클라이언트에게 반환(Response).
3계층 아키텍처 패턴에서는 프레젠테이션 계층(Presentation Layer)이라고 표현되며, 대표적으로는 컨트롤러(Controller)로 사용

라우터에서

컨트롤러

04. 서비스 (Service)
서비스 계층(Service Layer)이란 비즈니스 로직 계층(Business logic layer)이라고도 불리는데 아키텍처의 가장 핵심적인 비즈니스 로직을 수행하고 실제 사용자(클라이언트)가 원하는 요구사항을 구현하는 계층


05. 저장소 (Repository)
저장소 계층(Repository Layer)이란 데이터 엑세스 계층(Data Access Layer)이라고도 불리는데 대표적으로 Database와 관련된 작업을 수행하는 계층
- 대표적인 저장소 계층의 메소드
- add() : 새 원소를 저장소에 추가.
- get() : 이전에 추가한 원소를 저장소에서 가져옴.

