나는 처음 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 폴더의 각 파일에 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라는 파일에 의하여 처리가 된다는 것을 쉽게 알 수 있다.
데이터베이스 관련 코드를 관리하는 폴더로 데이터베이스에 연결하는 등 접근과 연관된 코드를 위주로 파일을 넣음.


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



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


이런 식으로 각 로직을 export하고, routes가 import하여 각 경로에 부여시킨다.
사실, 이거 말고도 많긴하지만 현재 공부한 건 여기까지이다. 프로젝트할 때 수월하게 할 수 있도록 폴더 구조를 잘 활용할 수 있도록 되어야겠다.