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로 나눈다.
/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에 해당하는 디렉토리.
https://www.youtube.com/watch?v=8aGhZQkoFbQ
보면서 event가 뭔지 알아내기.
참고 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에서 구현함.
개발할 때 게시글 좀 더 분석할 필요 있음
Mocha 이용해서 test해보기
아래 사진 출처
https://mochajs.org/ 에서 더 자세한 사항 확인
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로 적혀 있음)