![[코드가 환경을 모르는 구조 3/7] IaC에도 헥사고날이 관통한다](https://cdn.sanity.io/images/v31psllp/production/b2a8cb4606e7b21da6b7f074f0c8238e9d02de14-1684x1030.png)
아키텍처
[코드가 환경을 모르는 구조 3/7] IaC에도 헥사고날이 관통한다
두줄요약
IaC에서도 헥사고날 구조를 적용해 `spec`를 Port, 클라우드 모듈을 Adapter로 분리했습니다. 컴파일 타임 검증과 스택 분리로 경계 오류와 블라스트 반경을 줄였습니다.
핵심 내용
- IaC 코드에서
무엇을과어디서를 분리하는 헥사고날 구조 제안 spec모듈을 Port, 클라우드 모듈을 Adapter로 두는 멀티모듈 설계- Kotlin 인터페이스와 컴파일 타임 검증으로 경계 오류를 조기 차단
- 라이프사이클이 다른 인프라를 네트워크·클러스터·아이덴티티 스택으로 분리
구조와 흐름
- 제품 모듈은
spec에만 의존하고 구체 클라우드는 주입받는 구조 - 환경 스택이 dev·qa·prod별 클라우드 조합과 파라미터를 결정
- StackReference로 스택 간 출력 연결, 단방향 흐름과 얇은 공통 아웃풋 스택 정리
주의할 점
- 스택 간 양방향 참조로 인한 순환참조 위험
- 출력 계약 변경 시 타입 버전 불일치와 런타임 캐스팅 실패 가능성
- 클라우드별 이름 길이 제한 같은 특수 제약은 Adapter 내부 검증 필요
적용해볼 점
- 클라우드별 추상화를 한 인터페이스로 모으는 방식 검토
- 변경 주기가 다른 리소스를 스택 단위로 분리해 블라스트 반경 축소
- 새 클라우드 추가 시 기존 제품 모듈을 건드리지 않는 경계 설계
