반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 크로스핏
- dml
- 월별 운동일지
- 걷기
- axios
- SQL
- node.js
- 메디패치
- 운동일지
- github
- Til
- nodejs
- 드림코딩
- git
- 활동 킬로칼로리
- 습윤밴드
- 러닝
- Udemy
- wecode
- 홈트
- express
- node
- code kata
- JavaScript
- MySQL
- 달리기
- dql
- 독서 리뷰
- 위코드
- 박스점프
Archives
- Today
- Total
RISK IT
[TIL23_23.1.31.] [Node] Layered Pattern 개념 정리 본문
반응형
1. 레이어의 종류 (일반적으로)
Presentation Layer
- 해당 시스템을 사용하는 사용자 혹은 클라이언트 시스템과 직접적으로 연결되는 부분
- 백엔드 API에서 엔드포인트 부분
- API의 엔드포인트들을 정의하고 전송된 HTTP 요청(request)들을 읽어들이는 로직까지만 담당
Business Layer
- 실제 시스템이 구현해야 하는 로직들을 이 레이어에서 구현
- (예시) 홈페이지 회원가입 엔드포인트에서 만일 비밀번호가 8자가 넘는지 확인하여 8자 미만이면 회원가입을 거부하는 로직 등
Persistence Layer
- 데이터베이스와 관련된 로직을 구현하는 부분
- Business Layer에서 필요한 데이터 생성, 수정, 읽기 등을 처리하여 실제로 데이터베이스에서 데이터를 저장, 수정, 읽어 들이기를 하는 역할
2. Layered 아키텍처의 핵심 요소
- 단방향 의존성
- 각각의 레이어는 오직 자기보다 하위에 있는 레이어에만 의존함
- 관심사 분리 (SOC)
- 관심사 분리: Seperation Of Concern
- 각 레이어 별 역할이 구분되어 명확함. 역할의 중첩이 없음
- Layered 아키텍처 적용시 장점
- 확장성
- 가독성
- 재사용성
- 테스트 가능성
3. Layered 아키텍처 적용하기
- presentation layer →
userController.js
- business layer →
userService.js
- persistence layer →
userDao.js
Dao
: Data Access Objective
Routes: endpoint 경로 라우팅
- 외부에서 들어오는 요청을 가장 먼저 맞이하여 하위 폴더로 안내하는 길잡이 역할을 하는 파일
index.js
는 향후 확장성을 고려하여 생성될 수 있는 다양한 Router들을 한 곳에 모아 관리하는 역할을 한다.
Controller (Presentation Layer)
- API의 엔드포인트들을 정의하고 전송된 HTTP 요청(request)들을 읽어 들이는 로직을 구현
- 비즈니스 로직으로 흘러들어가야 할 데이터들이 올바른 형태를 띄고 있는지 선검증 작업을 함
- (예시) 서버에서 원하는 특정 데이터의 'key'값이 요청 시 전해지지 않았을 때에는
Key Error
를 통해 사전에 에러처리로 검열
Service
- 실제 비즈니스 규칙과 로직들이 접목되는 레이어
- 어플리케이션을 직접 다루는 운영자 입장에서 기획한 비즈니스 모델들이 접목되어야 한다
- (예시) 비밀번호의 조합이 특정 형태를 띄어야 하는 규칙을 위해 정규표현식을 도입
Models
- 실질적으로 데이터베이스와 소통하는 레이어
- (예시) typeorm을 이용하여 db에 연결한 후, 앞선 레이어들을 모두 무사히 통과한 데이터들을 db에 직접 Insert
Layer dependency 순서
다음은 실제 Express를 이용한 서버 웹 개발시 Layered Pattern을 이루는 기본 구조
app.js | server.js
: Express App 으로 서버를 여는 로직입니다. 그리고 Express App 인스턴스를 만들고, 필요한 미들웨어를 붙이는 로직입니다. 경우에 따라서 app.js 와 server.js 에 각기 다른 기능을 유도하여 두가지 파일 모두를 유지할 수도 있고, 둘의 기능을 한데 모아서 한 파일만을 유지할 수도 있습니다. 개발자의 의도에 맞게 파생되어질 수 있는 다양한 경우의 수에 유의하며 코드를 작성해주시기 바랍니다.routes
: 라우팅(엔드 포인트 나누기) 로직을 담당합니다.
controllers`: 엔드포인트에 해당하는 함수 로직 - http 요청에 따른 에러 핸들링, service 로직에서 데이터를 받아와서 응답으로 내보내는 로직입니다.services
: controller 에서 넘겨받은 인자로 다양한 알고리즘(필터, 정렬 등..)을 처리해서 데이터에 접근하는 로직입니다.models
: 데이터베이스에 접근하기 위한 모델(DAO)이 정의되어 있는 폴더입니다.
아래 모듈은 의존성 없이 다양한 레이어에서 사용될 수 있지만 반복되는 로직이기에 분리해 놓은 폴더
middlewares
: 컨트롤러에 닿기 전에 반복되는 로직을 모듈화 해 놓는 폴더입니다. (ex. validateToken - 인증 / 인가)utils
: 의존성 없이 모든 레이어에서 공통적으로 자주 사용되는 로직을 모듈화 해 놓는 폴더입니다. (ex. errorGenerator).env
: 프로젝트 내에서 사용할 환경 변수를 선언해 놓는 곳이며 샘플 양식은 .env.sample에 따로 기입하여 공유합니다.node_modules
: 노드 패키지 모듈입니다..gitignore
: 위의 두 모듈을 깃이 관리하지 않도록 합니다.package.json
: 노드 모듈을 관리하는 파일입니다.
반응형
'IT > TIL' 카테고리의 다른 글
[TIL25_23.2.2.] [Node] 프론트엔드와의 첫 통신 & 유저 회원가입 오류 디버깅 (0) | 2023.02.03 |
---|---|
[TIL24_23.2.1.] [Javascript] 문법 정리 - const{}와 const 및 try {} catch (err) {} (0) | 2023.02.01 |
[TIL22_23.1.30.] [Node] "westagram" 인증 & 인가 (bcrypt, jwt 모듈) (0) | 2023.01.31 |
[TIL21_23.1.29.] [NodeJS] Node 라이프사이클, 요청 및 응답 (0) | 2023.01.29 |
[TIL20_23.1.28.] [NodeJS] Node 서버 생성 (0) | 2023.01.28 |