대규모 Express 코드베이스를 위한 컨트롤러 구조화 방법
Source
Evernote/Inbox/How To Organize Express Controllers For Large Codebases.md
Summary
이 문서는 대규모 Express.js 프로젝트에서 코드베이스의 가독성과 유지보수성을 높이기 위한 컨트롤러 구조화 패턴을 제안합니다. 핵심은 각 컨트롤러를 독립된 폴더로 분리하고, 라우팅 정의(.routing 파일)와 실제 비즈니스 로직(.action 파일)을 명확히 구분하는 것입니다. 이를 위해 저자가 개발한 ‘Lumie’라는 경량 로더 패키지를 사용하여 폴더 구조를 기반으로 라우트를 자동으로 등록하고, 미들웨어 및 접근 권한 레벨(level)을 정의합니다. 이 방식은 새로운 개발자의 온보딩을 용이하게 하고, 프레임워크의 과부하 없이 깔끔한 아키텍처를 유지할 수 있게 합니다.
Key Points
- 컨트롤러별 폴더 생성: 각 도메인(예: user)별로 폴더를 만들고, 해당 폴더 내에 라우팅 정의 파일과 액션 파일을 분리합니다.
- 라우팅 정의 파일(.routing.js): 경로, HTTP 메서드, 호출할 액션, 미들웨어, 접근 제한 레벨(level)을 객체 형태로 정의하여 가독성을 높입니다.
- 액션 파일(.action.js): 하나의 파일에 하나의 액션 메서드와 관련 미들웨어만 포함하여 로직을 단순화합니다.
- Lumie 로더 사용: 폴더 이름과 라우팅 파일을 읽어 자동으로 Express 라우트를 등록하는 경량 패키지를 사용합니다.
- 접근 제한 관리: 라우팅 정의 시 ‘level’ 필드를 통해 권한을 명시하고, 이를 커스텀 미들웨어 함수로 처리합니다.