Layered Pattern & Simple API

전민식·2022년 12월 22일
0

2022

목록 보기
1/4
post-thumbnail

뭐가 많고 복잡하다.


간단하게 보자.

Layered Pattern

app.js 처럼 한개의 자바스크립트 파일 안에 모든 작업, 또는 코드를 작성 할 수 있지만
그러면 가독성 hell 이겠죠?

그래서 등장하는 LAYERED PATTERN

  • Layered architecture patterns are n-tiered patterns where the components are organized in horizontal layers. This is the traditional method for designing most software and is meant to be self-independent. This means that all the components are interconnected but do not depend on each other.
  • 단방향 의존성과 관심사 분리 (Seperation of Concern)

왜 사용해?

  • 가독성
  • 확장성
  • 재사용성
  • 테스트 가능성

"사용자" 에 관한 API 를 설계할때, 아래처럼 나뉘어진다

  • userRouter
  • userController
  • userService
  • userDao

app.js / server.js

app.js
API 경로를 안내하고 사용을 위한 module을 가져온다.

server.js
서버를 켜준다


SRC (api folder)

Routes

routes 폴더 안에 index.js 파일이 들어간다.
index.js 파일은 같은 폴더 안에 존재하는 다른 라우터.js 파일들을 카리킨다.

위 사진 참고
express framework를 불러와서 변수에 선정한 다음,
같은 routes 폴더 안에 있는 각 로직에 맞는 라우터.js 파일들을 변수 선정을 하여 불러온다.

불러온 파일들, 그 안에 있을 모듈을 사용하기 위해, framework의 built-in method "use"를 사용하고, 비즈니스 로직에 맞을 각각의 첫 url도 같이 만들어서 맞는 라우터.js 파일로 가리킨다.

다음으로 router 파일들 중에 productRouter.js 파일을 열어본다

index.js 랑 동일하게 express framework를 사용하기 위해 불러오고,
layered pattern의 라우터 다음 단계에 있을 컨트롤러 파일도 불러옵니다.

RESTful method('get')를 사용해서 추가 url 설정을 해줍니다.

이제 라우터 layer를 떠나 컨트롤러 layer로 가보자


Controllers

API의 엔드포인트들을 정의하고 전송된 HTTP 요청(request)들을 읽어 들이는 로직을 구현하는 Controller 입니다.

위에 보이는것은 productController.js 파일의 한 부분입니다.

  • req.query
  • req.params
  • req.body

다양한 방법으로 데이터가 포함된 요청을 받습니다. 각자 사용법도 다릅니다.
ex) 제품 3번 정보를 받고 싶을때 요청에 데이터 "3"이 같이 옵니다.

요청에 클라이언트한테 받는 데이터가 없을 수 도 있습니다. 클라이언트가 모든 제품정보를 조회만 하고 싶을 경우에는 서버에 method랑 url만 보내면 됩니다.
ex) GET http://ip:port/products/all/of/them/I/need

controller 파일도 역시 layered pattern의 다음 단계에 있는 서비스 파일을 불러오고,
서비스를 가리킴과 기능 작동 성공 시 클라이언트한테 보내줄 대답도 적어줍니다.

바로 서비스로 가보자.


Services

비즈니스 규칙(Rule)과 로직(Logic)들이 접목되는 Service 레이어의 코드 입니다.

productService.js가 아닌 userService.js 파일입니다. 서비스적인 코드가 더 들어있어서 대신 보여드립니다.

회원 정보 암호화를 시키기 위한 모듈을 불러오고, 이메일과 비민번호 정규표현식을 확인하는 코드, 그리고 비번 암호화하는 코드까지 service 단에서 구현하는게 보입니다. 비즈니스 로직을 서비스단에서 표현해내는거죠.

서비스는 layered pattern 다음 단계 모델을 가리킵니다. 모델에서 작성한 코드, 또는 모듈들을 불러와서 사용합니다.

모델 layer로 가볼게요


Models

실질적으로 데이터베이스와 소통하는 Model 레이어 입니다.

모델에 들어가는 javascript 파일 convention:

  • userDao.js
  • productDao.js

"Data Access Object" DAO 입니다. 데이터를 접근하기때문.

위에 보이는건 productDao.js 파일입니다.
데이터를 접근하는 dataSource.js 파일을 불러옵니다.
MySQL query를 사용하여 클라이언트에게 전해줄 정보를 데이터베이스에서 뽑아옵니다.

위에 보이는건 dataSource.js 파일입니다.
데이터베이스를 접근하고 상태를 확인하는 코드입니다.

TYPEORM_CONNECTION??
TYPEORM_HOST??

뭐지...?

환경변수입니다.
아래에는 .env 파일입니다.

환경변수를 관리하는 dotenv 라이브러리를 설치해서 사용합니다.
환경변수를 사용해 원하는 데이터베이스로 연결시킬 수 있습니다.



profile
hi im minsik

0개의 댓글