Open kihyuk-sung opened 1 year ago
일정 규모 이상의 프로젝트에서는 갈수록 아키텍처가 무너진다. 계층 간의 경계가 약화되고, 코드는 점점 더 테스트하기 어려워지고, 새로운 기능 구현에 많은 시간이 든다. 따라서 이를 막기 위한 방법이 몇 가지 제시된다.
아키텍처 경계를 강제한다는 의미는 경계가 명확한 헥사고날 아키텍처를 이용해서 의존성이 올바른 방향을 향하도록 하는 것이다. 즉, 잘못된 방향으로의 의존성을 없게 만드는 것이다.
빌드 아티팩트는 빌드 프로세스의 결과물이다. 메이블과 그레이들과 같은 빌드 도구가 있으며, 주요 기능 중 하나는 의존성 해결이다. 즉, 코드베이스가 의존하고 있는 모든 아티팩트가 사용 가능한지 확인하는 것이다.
이를 활용해서 모듈과 아키텍처의 계층 간의 의존성을 강제할 수 있다. 별도의 빌드 모듈인 JAR파일을 만들어서 컴파일 에러가 없을 때까지 의존성을 분리시킬 수 있다.
하지만 이 방법은 너무 극단적인 방법이 아닌가 하는 생각이 든다. 물론 잘 설계되어있고 이를 잘 지켜나간다면 훌륭한 방법임은 틀림없다.
지름길을 방지하기 위해서는 먼저 지름길 자체를 파악해야 한다. 지름길은 깨진 창문
과 같아서 클린 아키텍처의 반대 방향으로 가기 쉽다.
복잡한 아키텍처에서 단순한 아키텍처로 바꾸는 것은 비교적 쉽다. 하지만 단순한 아키텍처에서 코드와 로직을 복잡해진 상태로 복잡한 아키텍처로 변환하기는 매우 어렵다. 그래서 초반에는 최대한 추상화 시켜서 작성하는게 좋겠다는 생각이 든다. 지름길은 최대한 피하도록 하자.
외부의 영향을 받지 않고 도메인 코드를 자유롭게 발전시킬 수 있다는 것은 헥사고날 아키텍처 스타일이 내세우는 가장 중요한 가치다.
DDD에서 헥사고날 아키텍처는 매우 유용하다. 반대로 도메인이 애플리케이션에서 중요한 가치가 아니라면 헥사고날 아키텍처를 굳이 사용할 필요는 없다.
습관 = 편함 = 익숙함
은 새로운 아키텍처 스타일을 적용하는 것을 거부하게 만든다. 최대한 객관적인 선택을 하려면 먼저 작은 프로젝트에 적용 및 활용해보는 것이 좋다.
ch 10 아키텍처 경계 강제하기
ch 11 의식적으로 지름길 사용하기
지름길의 종류
유스케이스 간 모델 공유하기
도메인 엔티티를 입출력 모델로 사용하기
인커밍 포트 건너뛰기
애플리케이션 서비스 건너뛰기
결론
12. 아키텍처 스타일 정하기