일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 개발자
- 실기시험예제
- 인강용노트북
- 노트북구매하기
- C언어배우기
- 프로그래밍
- 네트워크관리사
- 굿노트
- 백엔드
- C언어
- 코딩
- 행정관리사
- 저렴한노트북
- 콜오브듀티
- 가성비노트북
- 총게임
- 실기문제
- 노트북추천
- 노트북추천받기
- 심플한플래너
- 네트워크관리사2급실기문제
- 네트워크관리사2급실기
- 실기문제풀이
- 행정관리사3급공부
- 행정관리사3급
- 행정관리사합격하기
- 실기시험
- 네트워크관리사2급
- 자바스크립트
- Today
- Total
잡다한 사전
(2023.12.05) 3 Layer Architecture 본문
3 Layer architecture란?
비즈니스 로직을 분리하는 것을 목적으로 하며, Controller, Service Layer, Data Access Layer 3개의층으로 나뉘어져 있습니다.
장점 : 다른 계층에 영향을 주지 않고 특정 계층만 수정이 가능합니다.
Controller
controller 부분은 들어오는 클라이언트 요청을 받고 서비스를 전달하는 부분입니다. 또한 서비스 부분에서 작업을 마친 데이터를 클리언트에게 응답을 하는 역활을 합니다.
// controllers/posts.controller.js
postsService = new PostsService();
//게시글 조회
getPosts = async (req, res, next) => {
try {
const posts = await this.postsService.findAllPosts();
return res.status(200).json({ data: posts });
} catch (err) {
next(err);
}
};
게시글이 조회하는 Contorller 부분 코드로, getPosts를 routes부분에서 불러와서 사용하도록 작성이 되어 있습니다.
const posts = await this.postsService.findAllPosts();
try, catch 문을 이용하여 오류가 생겼을 때 확인이 가능하도록 하였으며, postsService에 있는 findAllPosts() 함수를 불러와서 posts 변수에 받아 데이터를 출력하는데 사용을 하였습니다.
Service
서비스 계층은 모든 비즈니스 로직을 캡슐화하고 추상화하는 계층을 말합니다.
특징
☑︎ 데이터 계층을 활용하여 데이터베이스와 상호 작용
☑︎ controller 계층으로 전달할 데이터를 리턴
☒ req, res,를 활용 불가
☒ 데이터베이스와 직접적인 상호 작용 불가
postsRepository = new PostsRepository();
findAllPosts = async () => {
const posts = await this.postsRepository.findAllPosts();
//생성 날짜로 부터 내림차순 정렬
posts.sort((a, b) => {
return b.createdAt - a.createdAt;
});
//password, content 를 제외한 상태로 controller에게 responsefmf 전달
return posts.map((post) => {
return {
postId: post.postId,
nickname: post.nickname,
title: post.title,
createdAt: post.createdAt,
updatedAt: post.updatedAt,
};
});
};
Controller 부분에서 Service에 있는 findAllPosts 함수를 호출하여 사용을 하며, Service 계층에서는 repository 계층을 활용하여 데이터베이스와 상호 작용을 합니다.
위 코드에서는 생성 날짜를 기준으로 내림차순 정렬을 한 뒤
//password, content 를 제외한 상태로 controller에게 response를 전달
return posts.map((post) => {
return {
postId: post.postId,
nickname: post.nickname,
title: post.title,
createdAt: post.createdAt,
updatedAt: post.updatedAt,
};
});
repository에서 불러온 데이터를 controller로 전달해줍니다.
Data Access Layer
특징
☑︎ 데이터를 불러오는 부분
☑︎ 데이터를 받아 Service 계층으로 전달해주는 역활
findAllPosts = async () => {
const posts = await prisma.posts.findMany();
return posts;
};
data 계층에서 findAllPosts 함수는 prisma를 이용하였기 때문에, 데이터를 가져오는 것을 확인할 수 있습니다.
3 Layer Architecture을 사용하면서 느낀점
3계층 아키텍쳐를 처음으로 프로젝트에 적용을 하면서 부분적인 기능 코드 수정과, 변경에는 용이하다는 것을 느꼈다. 하지만 3계층 아키텍쳐를 적용하여 작업을 하니, 소요되는 시간이 좀더 많다는 부분에서 살짝에 불편함을 느꼈다.
'프로그래밍 언어 > node.js' 카테고리의 다른 글
(2023.12.12) 백오피스 프로젝트 시작하기 (1) | 2023.12.12 |
---|---|
(2023.12.06) 테스트 코드에 대해서 알아보기 (1) | 2023.12.08 |
(2023.12.4) Prisma에 대해서 알아보자 (0) | 2023.12.05 |
(2023.11.29) 객체 지향 설계 5원칙(SOLID) (0) | 2023.11.29 |
(2023.11.28) 팀 프로젝트를 마무리하면서.. (0) | 2023.11.28 |