
Node.js뿐 아닌, 개발을 공부하며 구조에 대한 고민을 하지 않을 수 없었습니다.
어떻게 프로젝트의 구조를 설계해야 하는 것인가? 최선의 방법은 무엇인가?
위 같은 궁금증은 항상 존재했었던 것 같습니다.

신기하게도 Node.js 모범 사례 문서에서는 권장하지 않는 설계 방법입니다.
Github 내 3만개 이상의 Star를 받은 보일러 플레이트에서도 위와 같은 설계를 사용하고 있었기 때문에 모범 사례 문서의 권장 사항이 조금 더 어색하게 다가온 것 같습니다.
물론 틀린 방법이 아니지만, 위 구조는
'서비스가 커짐에 따라 확장성이 떨어진다.' 라는 것이 핵심이고
따라서 파일을 기술별로 나누는 대신 자족적인 컴포넌트를 기반으로 설계해야 한다고 말합니다.

처음 이 폴더 구조를 보았을 때 전혀 매력적이지 않았습니다.
일정 규모 이상 큰 프로젝트를 진행해보지 않아서 MVC 패턴의 한계를 느껴보지 못했기 때문인 것 같습니다.
권장하는 방법이 와닿지 않으니 이해가 잘 되지 않아, 컴포넌트 기반으로 설계해야 하는 이유에 대해 여러 곳에 여쭤보았습니다.
OKKY - yjj8353님
오픈채팅 ZeroCho(조현영)님
오픈채팅 Bo님
간단한 답변인 만큼 생각보다 간단한 이유 때문이었습니다.
컴포넌트 기반으로 설계(도메인 주도 설계)할 시 같은 서비스끼리 묶어 코드의 재사용성이 높아지고 유지보수성이 높아진다.
파일의 기술별로 나눠 설계했을 경우 관심사(서비스)끼리 묶지 않았기 때문에 서비스가 커질 수록 각 MVC에 해당하는 폴더에 파일이 끝 없이 많아질 수 있다는 단점도 생길 수 있다.
마지막 DTO에 대한 내용은 잘 이해되지 않아 DTO 사용 범위에 관한 글을 찾아보았는데, Java 언어였지만 많은 도움이 된 것 같습니다.
하지만 완벽히 이해하지 못해서 이후 공부하며 여러 번 들여다 볼 자료 같습니다.
처음 글을 정확히 이해하지 못한 상태에서는 지금까지 진행했던 모든 토이 프로젝트들의 구조 설계가 잘못되었다고 생각했습니다.
하지만 대부분의 토이 프로젝트는 하나의 서비스를 목표로 만들었고
다양한 서비스를 추가하며 확장할 생각이 없었기 때문에 오히려 MVC 패턴의 구조 설계가 맞지 않았을까 생각합니다.
이후 Node.js 모범 사례 문서 중
"컴포넌트를 계층화(layer)하고, Express를 그 경계 안에 둬라"
에 대한 내용을 이해하기 위해 위 구조 설계에 대한 이해가 꼭 필요할 것 같아 정리합니다.