nodejs 아키텍쳐 관리

·2020년 10월 21일
0

좌충우돌

목록 보기
19/26

https://scoutapm.com/blog/nodejs-architecture-and-12-best-practices-for-nodejs-development#practice2
참고하면서 글 작성 더 세심하게 하기
unit test에 대해 더 알아보기

3 layer 아키텍쳐
위 캡쳐(출처는 참고 2 링크)와 같이 controller - service layer - data access layer로 나눈다.

  • controller에서는 req, res 등을 관리(router/가 여기에 해당)
  • service layer에서는 로직을 관리(그냥 함수에 req.body를 보내버리고 거기서 모든 걸 다 처리한 후 res에 필요한 정보 return하기, 해당 함수 call 하는 건 controller에서)
  • data access layer에서는 말 그대로 db에 access하는 함수들 모아놓는 것.

Folder Structure

/scripts: store workflow automation scripts for building pipelines(아직 모르겠음)
/test: store test cases
/config: dotenv가 전역변수 느낌이라면, 여기는 store objects that are programmer familiar using dotenv's variables
/subscriber: publisher/subscriber models 참고
나머지는 앞서 설명한 controller - service - data access layers에 해당하는 디렉토리.

사진 및 글 출처

publisher/subscriber models

event module이란?

https://www.youtube.com/watch?v=8aGhZQkoFbQ
보면서 event가 뭔지 알아내기.

data access layer

참고 1: https://bezkoder.com/node-js-rest-api-express-mysql/
참고 2: https://bezkoder.com/node-js-express-sequelize-mysql/

sql 연동관련 및 db 관련 사항은 참고 1 url에서 보고 배우기.
여기랑 달리, 위 아키텍쳐 관련 정책을 세우고 controller랑 service layer를 분리해야 함.
여기서는 mysql에서 table을 sql구문으로 만들고 insert delete select 등을 express에서 구현함.
개발할 때 게시글 좀 더 분석할 필요 있음

Test your code

Mocha 이용해서 test해보기
아래 사진 출처

https://mochajs.org/ 에서 더 자세한 사항 확인

dependency injection at js

require로 부르는 데 단점
1. 특정한 repository의 코드와 얽혀 있어서 어디를 수정하면 나머지를 다 고쳐야 함.
2. unit test에 불리함: test code가 너무 복잡해짐.

따라서 require로 불러오지 않고, parameter로 직접 전달해 준다(service layer 부분 코드에서).

// 예시 코드
const User = require('./User');

function UsersService(usersRepository) {
  async function getUsers() {
    return usersRepository.findAll();
  }
  
  async function addUser(userData) {
    const user = new User(userData);
  
    return usersRepository.addUser(user);
  }
  
  return {
    getUsers,
    addUser
  };
}

module.exports = UsersService

참고 1: https://softwareontheroad.com/ideal-nodejs-project-structure/?utm_source=github&utm_medium=readme
(sample code 언어 = ts로 적혀 있음)

참고 2: https://mannhowie.com/clean-architecture-node

profile
이것저것 개발하는 것 좋아하지만 서버 개발이 제일 좋더라구요..

0개의 댓글