![[코드가 환경을 모르는 구조 7/7] Variant와 스냅샷 캐시, 그리고 다섯 축의 총합](https://cdn.sanity.io/images/v31psllp/production/05ffda096002d40620c7bc75e64174185b7d8a1d-1684x1030.png)

[코드가 환경을 모르는 구조 7/7] Variant와 스냅샷 캐시, 그리고 다섯 축의 총합
테스트 인프라에서 variant와 스냅샷 캐시로 프로덕션의 분리를 그대로 재현하는 구조를 설명했습니다. 경계를 명확히 하면 교체 가능성이 높아지고 실험 속도도 빨라진다고 정리했습니다.
![[코드가 환경을 모르는 구조 7/7] Variant와 스냅샷 캐시, 그리고 다섯 축의 총합](https://cdn.sanity.io/images/v31psllp/production/05ffda096002d40620c7bc75e64174185b7d8a1d-1684x1030.png)

테스트 인프라에서 variant와 스냅샷 캐시로 프로덕션의 분리를 그대로 재현하는 구조를 설명했습니다. 경계를 명확히 하면 교체 가능성이 높아지고 실험 속도도 빨라진다고 정리했습니다.

Spring Data JDBC의 Composite ID 적용을 계기로 Spring Boot 4와 Spring Batch 6 업그레이드를 진행했습니다. 복합키 매핑, 배치 메타데이터 변경, Kotlin·Jackson·Gradle 호환성까지 함께 정리했습니다.
![[코드가 환경을 모르는 구조 4/7] 타임머신 — 시간 축을 교체한다](https://flex.team/blog/og/main.jpg)

HR SaaS에서 시간을 비즈니스 입력으로 보고, 요청 헤더와 `Clock` Adapter로 현재 시점을 교체하는 타임머신 구조를 설명했습니다. 비동기 경계 전파와 환경별 활성화, 서드파티 시계 호출의 한계도 함께 다뤘습니다.
![[코드가 환경을 모르는 구조 4/7] 타임머신 — 시간 축을 교체한다](https://cdn.sanity.io/images/v31psllp/production/6a70f8e2c090762cbd4b1a9d470f573cbc0fc038-1684x1030.png)

HR SaaS에서는 시간이 급여와 연차 결과를 바꾸는 입력이므로 요청 단위로 교체 가능하게 만들었습니다. Clock 포트와 헤더 기반 Adapter, 비동기 컨텍스트 전파, 환경별 활성화로 타임머신을 구현했습니다.
![[코드가 환경을 모르는 구조 3/7] IaC에도 헥사고날이 관통한다](https://flex.team/blog/og/main.jpg)

IaC를 헥사고날 구조로 재해석해 spec과 클라우드 구현을 분리하는 방식을 소개했습니다. Kotlin 타입 검증과 스택 분리로 오류를 줄이고 멀티클라우드 확장성을 높였습니다.
![[코드가 환경을 모르는 구조 3/7] IaC에도 헥사고날이 관통한다](https://cdn.sanity.io/images/v31psllp/production/b2a8cb4606e7b21da6b7f074f0c8238e9d02de14-1684x1030.png)

IaC에서도 헥사고날 구조를 적용해 `spec`를 Port, 클라우드 모듈을 Adapter로 분리했습니다. 컴파일 타임 검증과 스택 분리로 경계 오류와 블라스트 반경을 줄였습니다.
![[코드가 환경을 모르는 구조 1/7] 코드는 무엇을, 환경은 어디서 - 다시 더 깊이](https://flex.team/blog/og/main.jpg)

코드가 무엇을 정의하고 환경은 어디서 주입할지 분리하는 원리를 설명했습니다. 이를 배포, 클라우드, 시간, 테스트 전반에 반복 적용하는 관점을 제시했습니다.
![[코드가 환경을 모르는 구조 1/7] 코드는 무엇을, 환경은 어디서 - 다시 더 깊이](https://cdn.sanity.io/images/v31psllp/production/d7669e80f5e28954ae4a8e30b97d6d297e7f7c35-1684x1030.png)

코드가 무엇을 정의하고 환경은 어디서 주입하는지라는 원리를 배포, 인프라, 테스트 전반에 걸쳐 설명했습니다. 경계를 구조에 새겨 교체 가능성과 안정성을 높이는 시리즈의 출발점입니다.

Jib에서 Buildpacks로 옮긴 뒤 GraalVM Native Image까지 적용해 기동 시간을 11배 단축했습니다. AI로 메타데이터 반복 보완을 자동화해 운영 적용 가능성까지 높였습니다.
![[미래를 담아낸 뼈대 7/7] 의존성의 방향을 따라](https://flex.team/blog/og/main.jpg)

의존성 그래프를 따라 레포 간 마이그레이션을 자동화하는 Evergreen 구조를 소개했습니다. 빌드 검증과 AI 보조로 버전업과 패치 전파를 빠르게 만드는 방식입니다.
![[미래를 담아낸 뼈대 7/7] 의존성의 방향을 따라](https://cdn.sanity.io/images/v31psllp/production/85a2456afffb0f96fb7c09ce89e31b7ad3400ab7-1684x1030.png)

의존성 그래프를 따라 마이그레이션을 자동 전파하는 Evergreen 구조를 소개했습니다. 표준화된 빌드 규칙과 AI 보조로 대규모 버전업을 빠르게 처리했습니다.
![[미래를 담아낸 뼈대 6/7] AI가 읽을 수 있는 코드베이스](https://flex.team/blog/og/main.jpg)

AI 코딩 에이전트 시대에는 빌드와 컴파일이 아키텍처를 지키는 가장 강한 가드레일이었습니다.\nStandalone 검증과 E2E 증명으로 코드리뷰는 동작 확인에서 설계 판단 중심으로 바뀌었습니다.