Node.js 심화 - 6
__________________________________________________
1-16 아키텍처 패턴 (Architecture Pattern)
=> < 3.4 Layered Architecture Pattern 02 >
3.4 Layered Architecture Pattern Goal : 아키텍처 패턴에 대해 이해하고 계층형 아키텍처 패턴을 도입해 express를 구현할 수 있다.
아키텍처 패턴은 소프트웨어의 구조를 구성하기위한 가장 기본적인 토대를 제시한다.
=> 우리가 프로그램에나 소프트웨어를 구현하려 할 때,
이를 구현하기 위해서 어떤 구조로 만들어야 될지에 대해서 대략적인 패턴을 만들어 보는 것.
아키텍처 패턴은 각각의 시스템들과 그 역할이 정의되어 있고, 여러 시스템 사이의 관계와 규칙 등이 포함되어 있어.
=> 따라서 우리는 기존이 미리 지정되어 있는 토대를 바탕으로 개발을 진행할 수 있어.
아키텍처 패턴을 도입할 경우 도메인이 복잡할수록 모델이나 코드를 더 쉽게 변경할 수 있다는 측면에서 큰 이익을 얻을 수 있어.
이렇게 되면 유지 및 보수, 수정 및 확장이 매우 용이해 지고 편리해 져. 협업도 당연히 더 수월해지고. 왜? 구조가 잡혀 있으니까.
— 대표적인 아키텍처 패턴 —
1.
저장소 패턴 (Repository pattern)
=> 영속적인 저장소에 대한 추상화
2.
서비스 계층 패턴 (Service layer pattern)
=> 유스 케이스(Usecase)의 시작과 끝을 명확하게 정의하기 위한 패턴
3.
작업 단위 패턴 (Unit of work pattern)
=> 원자적 연산을 제공합니다.
4.
애그리게이트 패턴 (Aggregate pattern)
=> 데이터 정합성을 강화하기 위한 패턴
=> 우리가 가장 많이 사용하는 패턴은 1번과 2번.
— 아키텍처 패턴을 도입하기 전에 고민해봐야 하는 것들 —
아키텍처 패턴이 우리에게 주는 이익은 어떠한 것들이며, 그 이익 덕에 실제로 얼마만큼 실질적인 이득을 얻을 수 있는지에 대한 효율적인 측면.
실제로 해당 패턴을 도입하는데에 자원을 들일 만한 가치가 있는지에 대한 고찰.
그러한 확신들이 생겼을 때에만 아키텍처 패턴을 도입해야 해.
즉 해당 패턴이 지니는 장단점을 확실하게 인지하고, 그러한 내용들이 우리에게 정말로 도움이 되는가에 대한 고민이 필요해.
__________________________________________________
1-17 계층형 아키텍처 패턴 (Layered Architecture Pattern)
=> < 3.4 Layered Architecture Pattern 03 >
3.4 Layered Architecture Pattern Goal : 아키텍처 패턴에 대해 이해하고 계층형 아키텍처 패턴을 도입해 express를 구현할 수 있다.
계층형 아키텍처 패턴(Layered Architecture Pattern)은 계층을 분리해서 관리하는 아키텍처 패턴이고,
현재 가장 흔하게 사용되고 있는 아키텍처 패턴 중 하나이다.
단순하고 대중적이며 비용도 적게 들어 모든 어플리케이션의 사실상 표준 아키텍처.
=> 즉 해당 패턴에 대해서 정형화된 자료들은 이미 많이 나와있기 때문에 그런 자료들을 참고하며 패턴을 짤 수 있어서 비용도 적게 든다.
계층형 아키텍처 패턴은 어떤 경우든 계층을 분리해서 유지하고, 각 계층이 자신의 바로 아래 계층에만 의존하게 만드는 것이 목표이다.
계층화의 핵심은, 각 계층은 응집도가 높으면서, 다른 계층과의 낮은 결합도를 가지고 있어야 한다는 것.
상위 계층은 하위 계층을 사용할 수 있지만, 하위 계층은 자신의 상위 계층에 누가 있는지 알 수 없고, 사용할 수 조차 없도록 구성해야 한다.
일반적으로 계층형 아키텍처 패턴의 경우 규모가 작은 어플리케이션의 경우 3개, 크고 복잡한 경우는 그 이상의 계층으로 구성된다.
우리가 교제에서 알아볼 아키텍처 패턴은 3계층 아키텍처(3-Layered Architecture) 이다.
3계층 아키텍처에서 구성되는 각각의 **계층(Layer)**는 아래와 같다.
- 프레젠테이션 계층 (Presentation Layer)
- 비즈니스 로직 계층 (Business Logic Layer)
- 데이터 엑세스 계층 (Data Access Layer)
— 계층형 아키텍처 패턴의 장점 —
1.
관심사를 분리하여 현재 구현 하려는 코드를 명확하게 인지할 수 있다.
2.
각 계층별로 의존성이 낮아 모듈을 교체 하더라도 코드 수정이 용이하다.
3.
각 계층별로 단위 테스트를 작성할 수 있어 테스트 코드를 조금 더 용이하게 구성할 수 있다.
*************************************************
— 3계층 아키텍처 (3-Layered Architecture) —
=> 3-Layered Architecture는 아래의 3가지의 처리과정을 이용해서 구현한다.
1.
Controller : 어플리케이션의 가장 바깥 부분, 요청/응답을 처리함.
=> 클라이언트의 요청을 처리 한 후 서버에서 처리된 결과를 반환해주는 역할을 한다.
2.
Service : 어플리케이션의 중간 부분, 실제 중요한 작동이 많이 일어나는 부분
=> 아키텍처의 가장 핵심적인 비즈니스 로직이 수행되는 부분이다.
3.
Repository : 어플리케이션의 가장 안쪽 부분, DB와 맞닿아 있음.
=> 실제 데이터베이스의 데이터를 사용하는 계층이다.
——
3-Layered Architecture에서는 아래의 플로우를 기반으로 로직이 수행된다.
클라이언트(Client)가 요청(Request)을 보낸다.
-> 요청(Request)을 URL에 알맞은 컨트롤러(Controller)가 수신 받는다.
-> 컨트롤러(Controller)는 넘어온 요청을 처리하기 위해 서비스(Service)를 호출한다.
-> 서비스(Service)는 필요한 데이터를 가져오기위해 저장소(Repository)에게 데이터를 요청합니다.
-> 서비스(Service)는 저장소(Repository)에서 가져온 데이터를 가공하여 컨트롤러(Controller)에게 데이터를 넘긴다.
-> 컨트롤러(Controller)는 서비스(Service)의 결과물(Response)을 클라이언트(Client)에게 전달해줍니다.
— Express로 구현하는 3계층 아키텍처 —
폴더 : kimminsoo -> sparta -> node_js -> learning -> third_step -> layered-architecture-pattern-prac
1.
교제에서 제공하는 프로젝트 다운받기.
2.
다운받은 파일을 third_step -> layered-architecture-pattern-prac 폴더 안에 넣어주기.
3.
config/config.json 에서 DB 속성 변경.
4.
# npm 패키지 설치
npm install
# Sequelize를 이용하여 DB 생성
npx sequelize db:create
# Sequelize를 이용하여 테이블 및 데이터 마이그레이션
npx sequelize db:migrate
5.
현재 폴더구조는 다음과 같다.
——
layered-architecture-pattern
├── app.js
├── config
│ └── config.json
├── controllers
│ └── posts.controller.js
├── migrations
│ └── 20220731133318-create-posts.js
├── models
│ ├── index.js
│ └── posts.js
├── repositories
│ └── posts.repository.js
├── routes
│ ├── index.js
│ └── posts.routes.js
├── services
│ └── posts.service.js
├── package.json
└── package-lock.json
——
이제부터 각 계층별 역할에 맞게끔 3계층 아키텍처 프로젝트를 구성해보도록 하자.