TypeScript Architecture

프로젝트 구조가 드러내는 의존 방향과 공개 API

폴더 구조는 파일 정리가 아니라 도메인, UI, 인프라, 테스트가 서로 어떤 방향으로 의존하는지 드러내는 설계 문서다.

01

도메인 축 찾기

기술 종류보다 비즈니스 기능과 변경 이유가 같은 파일을 가까이 둔다.

cohesion
02

공개 경계 지정

패키지나 모듈 외부에서 가져갈 수 있는 API를 index 파일로 제한한다.

public API
03

의존 방향 고정

UI가 domain을 사용하되 domain이 UI 프레임워크를 알지 않게 만든다.

one way
04

규칙 자동화

import lint, project references, path alias로 구조 규칙을 검사한다.

enforced
By type
components, hooks, utils만 나누면 기능 흐름이 멀어진다. 작은 앱에서는 단순하지만 커질수록 변경 범위가 퍼진다.
early simple
By feature
기능 단위로 UI, hook, service, test를 함께 둔다. 기능 삭제와 이동이 쉬워지고 소유권이 분명해진다.
scale fit
Shared
공유 폴더는 정말 여러 기능에서 안정적으로 쓰는 것만 둔다. shared가 빨리 커지면 의존 방향이 다시 흐려진다.
avoid dumping ground

구조 설계 점검

순환 import 기능과 계층 사이 cycle이 검사로 막힌다.
공개 API 외부 모듈이 internal 파일을 직접 import하지 않는다.
테스트 위치 단위 테스트는 대상 근처, 통합 테스트는 경계 근처에 있다.

의존 방향

ui -> application -> domain
infrastructure -> application
domain -> no framework imports