모듈화 : 역할에 따라 코드를 분리하는 행위
한 파일에 모든 코드를 다 넣어도 노드 서버는 문제 없이 동작한다. 간단한 규모의 어플리케이션이라면 굳이 모듈화가 필요없지만, 우리는 실제 서비스에서 사용할 수 있는 어플리케이션을 구현하는 것이 목표다. 즉, 혼자서 개발하는 것은 극히 드물다.
결국 좋은 코드(협업 가능한 코드)를 작성하는 것이 좋은 개발자의 역할이다. 좋은 코드를 나누는 기준은 크게 다섯가지로 분류할 수 있다.
확장성을 고려하지 않은 코드는 시스템의 규모가 커질수록 문제가 생길 확률이 높다.
반복되는 로직을 함수로 분리하는 코드상의 재사용성 뿐만 아니라, 우리가 설계한 구조가 재사용 되어야 한다.
여러 로직이 뒤엉켜 있는 코드는 유지 보수가 안 된다.
어려운 로직 일수록 더 가독성이 높아야 한다. 어려운 로직을 쉽고 간단하게 구현하는 것이 좋은 코드다. 프로젝트의 구조 또한 한 눈에 그려져야 한다.
테스트를 하기 쉬운 코드는 모듈화가 잘 되어 있고, 한 가지 역할만 하는 함수 단위의 코드를 의미한다. 프로젝트의 구조도 추상화가 잘 되어 있고, 역할이 잘 나뉘어 있는 구조가 테스트하기 쉬운 구조다.
server.js: Express App 으로 서버를 여는 로직
routes: 라우팅(엔드 포인트 나누기) 로직
controllers: 엔드포인트에 해당하는 함수 로직 - Http 요청에 따른 에러 핸들링, service 로직에서 데이터를 받아와서 응답으로 내보내는 로직
services: controller 에서 넘겨받은 인자로 다양한 알고리즘(필터, 정렬 등..)을 처리해서 데이터에 접근하는 로직
prisma (=model): 데이터베이스에 접근하기 위한 모델이 정의되어 있는 폴더
*주의사항
.env: 프로젝트 내에서 사용할 환경 변수를 선언해 놓는 곳
node_modules: 노드 패키지 모듈
.gitignore: 위의 두 모듈을 깃이 관리하지 않도록 함
package.json: 노드 모듈을 관리하는 파일