![[코드가 환경을 모르는 구조 1/7] 코드는 무엇을, 환경은 어디서 - 다시 더 깊이](/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fv31psllp%2Fproduction%2Fd7669e80f5e28954ae4a8e30b97d6d297e7f7c35-1684x1030.png%3Fauto%3Dformat%26fit%3Dmax%26w%3D1200&w=3840&q=75)
AWS에서 NCP로의 이전부터 CI 속도 최적화까지, 하나의 원리로 해결하는 5가지 엔지니어링 고통
본 아티클은 소프트웨어 설계 원칙인 헥사고날 아키텍처를 애플리케이션을 넘어 인프라, 배포, 테스트 전 영역에 적용하는 방법론을 제시합니다. '무엇을' 정의하는 코드와 '어디서'를 결정하는 환경 값을 분리하여, 변화에 유연하고 안정적인 시스템을 구축하는 실무적인 인사이트를 제공합니다.
멀티 클라우드 도입을 고려 중이거나, 환경 간 설정 차이로 인해 배포 스트레스를 겪는 시니어 엔지니어 및 DevOps 팀에게 강력히 추천합니다.
개발 환경과 운영 환경의 설정이 미세하게 달라지며 발생하는 배포 사고, 특정 클라우드 종속성으로 인한 확장성 저하, 그리고 테스트 및 디버깅 시 환경 의존성으로 인한 비효율성 문제를 해결하고자 합니다.
애플리케이션 코드의 헥사고날 아키텍처 원리를 배포(Helm, ArgoCD), 인프라(Pulumi), 테스트(Testcontainers) 등 전체 레이어로 확장하여 '무엇을(로직)'과 '어디서(환경)'를 엄격히 분리하는 구조를 도입합니다.
환경 간의 경계를 구조적으로 강제함으로써 한쪽의 수정이 다른 쪽에 영향을 주지 않는 안정성을 확보하였고, 어댑터 교체만으로 실험이 가능한 환경을 구축하여 엔지니어의 이터레이션 속도를 향상시켰습니다.
Trade-off
모든 레이어에 추상화 계층(Port/Adapter)을 도입함에 따라 초기 설계 복잡도가 증가하며, 단순한 설정 변경에도 여러 층의 오버라이드 구조를 이해해야 하는 학습 곡선이 존재할 수 있습니다.
비즈니스 로직을 외부 시스템(DB, UI, 외부 API 등)과 분리하기 위해 인터페이스(Port)와 구현체(Adapter)를 사용하는 소프트웨어 설계 방식입니다.
계약과 의도를 정의하는 포트와 이를 구체적으로 실행하는 어댑터를 분리하여 상호 의존성을 제거하는 구조적 단면입니다.
수동 프로세스가 아닌 코드를 통해 인프라를 관리하고 프로비저닝하는 방식입니다.









