nodejs 프로젝트 백엔드의 디렉토리 구조

·2022년 9월 29일
1

nodejs/express

목록 보기
2/2

서론

나는 처음 nodejs를 배울 때 app.js 또는 server.js에 코드를 쑤셔 넣는 식으로 배웠다. 기초였기 때문에 처음부터 프로젝트 시의 폴더 구조를 잘 구성하는 걸 중요하게 생각하지 않았기 때문이다.

실제로는 이렇게 controllers, db, routes, models 등으로 폴더를 나눠 주어야 프로젝트하기 수월해진다.

안 그럼 위의 코드처럼 db 코드.. api 코드.. 라우팅.. 미들웨어.... 전부 app.js에 들어가게 되고, 이러면 가독성, 관리, 오류 등의 측면에서 불편이 있을 수 있다.

다른 사람이랑 프로젝트를 하다보면 디렉토리 구조가 꽤 중요하게 되고, 혼자 진행할 때에도 편하게 하려면 디렉토리를 잘 설정하는 게 좋다. 물론, 이건 nodejs에만 해당되는 게 아니라 모든 웹개발 프레임워크 또는 언어에 해당하는 거다.

사실, 여기 가서 따라해보면 다 알 수 있긴 하다. 영상이 길어서 그렇지..
https://www.youtube.com/watch?v=qwfE7fSVaZM
개인적으로 node.js 프로젝트 기초 쌓기 좋은 유튜브 영상인 것 같다.

프로젝트 시 자주 쓰이는 디렉토리 구조

나중에 큰 기업이든 스타트업이든 그들은 보안, 편의 등의 이유로 그들만의 특별한 폴더구조 아니면 다른 유명한 폴더구조를 사용하겠지만, 단순한 프로젝트를 진행할 때는 몇 가지만 알면 좋은 것 같다.

routes-controllers-db-models

routes

일반적으로 routes 폴더의 각 파일에 express.Router()를 정의해서 각 앱에 대한 경로를 지정하게 된다. 이렇게 하는 이유는 한 프로젝트에 여러 앱들이 있을 수 있는데, 예를 들어 dog, cat, bird라는 앱이 있다고 치자.

dog라는 앱을 실행하려는데, app.js를 실행시키면 main app 자체를 실행시키는 것이므로 하나의 파일에 부담이 너무 크게 간다.

이 때문에 dog, cat, bird로 나누어 각각의 mini app을 실행시키도록 express.Router()로 경로를 나눠주는거다.

자세한 정보는 잘 찾아보면 나올테니, 간략하게 설명하자면

이런 식으로 routes 폴더 안에 tasks.js라는 mini app용 파일이 있다.

main app용 파일인 app.js 안에 아래와 같이 미들웨어, 즉, app.use() 로 tasks라는 파일의 route를 지정해주면

localhost:3000/api/v1/tasks/
위의 경로 이후에 예를 들어 tasks/comment, tasks/login 이런 식의 경로에 사용자가 접근하게 되면, main app이 아닌 tasks의 mini app이 실행되면서 해당 경로 관련 코드가 tasks라는 파일에서 관리되며 실행되게 된다.

위의 /와 /:id는, localhost:3000/이 아니라, localhost:3000/api/v1/tasks/로 지정된다. 이로써 해당 경로는 tasks라는 파일에 의하여 처리가 된다는 것을 쉽게 알 수 있다.

db

데이터베이스 관련 코드를 관리하는 폴더로 데이터베이스에 연결하는 등 접근과 연관된 코드를 위주로 파일을 넣음.

models

데이터베이스 스키마를 저장하는 곳으로, 스키마를 정의할 각 앱에 사용될 스키마를 models 폴더에 구분해주면 더 직관적이고 편리하게 사용할 수 있음

controllers

db에서 파일을 불러오는 등의 api 로직을 하나의 폴더에 정리하는 용도이다. 이도 결국 routes 폴더와 연동이 되는데, routes에서 controllers에 정의한 모든 로직을 import해서 해당하는 경로와 연결시켜 사용한다.

routes.js
controllers.js

이런 식으로 각 로직을 export하고, routes가 import하여 각 경로에 부여시킨다.


사실, 이거 말고도 많긴하지만 현재 공부한 건 여기까지이다. 프로젝트할 때 수월하게 할 수 있도록 폴더 구조를 잘 활용할 수 있도록 되어야겠다.

0개의 댓글