2월 26일 자 학습 내용 정리입니다.
✅설계
프로그래밍에서의 코드 설계란 코드와 파일, 폴더 구조를 설계하는 것을 말한다.
하나의 파일에 모든 코드를 작성하는 것과 같이 적절한 설계 과정이 이루어 지지 않은 경우 다음과 같은 문제가 발생할 수 있다.
- 수정할 사항을 찾기 힘들다. (유지보수가 어렵다.)
- 코드와 코드 사이의 관계를 파악하기 힘들다.
- 각 코드의 역할과 기능이 명확히 구분되어 있지 않아 기능별로 테스트(유닛테스트)를 진행하는 것이 어렵다.
- 하나의 파일을 여러 사람이 동시에 수정하기는 힘들기 때문에 분업이 어렵다.
- 새로운 기능을 추가하고자 할 때 기존 코드의 어느 부분에 수정, 추가할지 알아내기 힘들기 때문에 확장성이 부족하다.
따라서 위의 문제들을 해결하기 위해 코드 설계 구조가 만들어진 것이다.
다양한 설계 구조 중 백엔드 API 구현에 자주 사용되는 설계 구조로 3계층 구조가 있다.
✅ 3계층 설계
3계층 설계(3-Layer Architecture)란 백엔드 코드를 Control Layer, Service Layer, Model Layer의 3개 구조로 나누어 구현하는 것을 말한다.
3계층 설계를 도식화하면 다음과 같은 모양이 된다.
✔️ Control Layer
Control Layer는 사용자의 요청(request)을 분석한 후 Service Layer의 알맞은 서비스로 해당 요청을 전달해 준다.
이후 Service Layer에서 서비스의 결과가 오면 이를 다시 사용자에게 응답(response)한다.
즉, Control Layer는 라우팅(routing)이 이루어지는 층이다.
그렇기에 Control Layer를 API Layer라고 하기도 한다.
express를 사용하는 경우 Control Layer에서는 req.body
, req.params
, req.query
등으로 사용자의 입력(요청)을 받아오고 res.status
, res.send
, res.json
등으로 사용자에게 응답을 보낸다.
✔️ Service Layer
Service Layer는 Control Layer로부터 전달된 요청에 로직을 적용한다.
이때 로직이라는 것은 어떤 것을 처리하는 과정이다.
예를 들어 로그인에 대한 요청에 로직을 적용할 경우 이는 다음의 로직을 적용할 수 있다.
Service Layer에는 이러한 로직을 작성하고 로직을 따라가며 얻은 결과를 Control Layer에게 보내준다.
✔️ Model Layer
Model Layer는 데이터베이스 관련 코드가 작성되는 층이다.Service Layer에서 데이터베이스 접근이 필요한 경우 해당 작업에 대해 Model Layer에서 데이터베이스에 대한 직접적인 접근이 이루어지고 그 결과를 다시 Service Layer로 보낸다.
mongoose를 사용하는 경우 Model.create()
, Model.find({})
등으로 데이터베이스에 접근한다.
✅ 3계층 설계의 장점과 폴더구조
코드를 역할별로 분리하여 각 층에 구현하는 경우 다음과 같은 장점이 존재한다.
- 각 역할별로 개발 업무를 분담할 수 있어 분업이 용이하다.
- 역할이 아닌 계층으로 업무를 나누었을 때도 각 계층이 어떤 흐름으로 구현되는지 코드 구조를 보고 이해하기 쉽다.
- 필요한 코드는 해당 계층을 구현한 폴더에서 찾을 수 있으므로 유지보수가 용이하다.
- 웹 서비스 구현 방식을 변경하고자 할 때 관련 계층만 수정하면 된다.
- 코드가 기능별로 구분되어 있어 유닛테스트를 진행하기 좋다.
3계층 구조의 폴더 구조는 다음과 같이 구성할 수 있다.
무조건 위와 같이 구성해야 한다! 는 아니지만 어느정도 이러한 틀 안에서 구조를 형성하는 것이 좋다.
'엘리스 AI 트랙 4기 > elice AI track' 카테고리의 다른 글
[7주차] JSX와 Component (0) | 2022.03.02 |
---|---|
[7주차] React와 Create React App (0) | 2022.03.02 |
[6주차] OAuth와 Nginx (0) | 2022.02.25 |
[6주차] JSON Web Token (0) | 2022.02.25 |
[6주차] Session과 Session Store (0) | 2022.02.23 |
댓글