[코드가 환경을 모르는 구조 4/7] 타임머신 — 시간 축을 교체한다
HR SaaS에서는 시간이 급여와 연차 결과를 바꾸는 입력이므로 요청 단위로 교체 가능하게 만들었습니다. Clock 포트와 헤더 기반 Adapter, 비동기 컨텍스트 전파, 환경별 활성화로 타임머신을 구현했습니다.
![[코드가 환경을 모르는 구조 4/7] 타임머신 — 시간 축을 교체한다](https://cdn.sanity.io/images/v31psllp/production/6a70f8e2c090762cbd4b1a9d470f573cbc0fc038-1684x1030.png)

HR SaaS에서는 시간이 급여와 연차 결과를 바꾸는 입력이므로 요청 단위로 교체 가능하게 만들었습니다. Clock 포트와 헤더 기반 Adapter, 비동기 컨텍스트 전파, 환경별 활성화로 타임머신을 구현했습니다.
![[코드가 환경을 모르는 구조 4/7] 타임머신 — 시간 축을 교체한다](https://cdn.sanity.io/images/v31psllp/production/6a70f8e2c090762cbd4b1a9d470f573cbc0fc038-1684x1030.png)
IaC를 헥사고날 구조로 재해석해 spec과 클라우드 구현을 분리하는 방식을 소개했습니다. Kotlin 타입 검증과 스택 분리로 오류를 줄이고 멀티클라우드 확장성을 높였습니다.
![[코드가 환경을 모르는 구조 3/7] IaC에도 헥사고날이 관통한다](https://flex.team/blog/og/main.jpg)
IaC에서도 헥사고날 구조를 적용해 `spec`를 Port, 클라우드 모듈을 Adapter로 분리했습니다. 컴파일 타임 검증과 스택 분리로 경계 오류와 블라스트 반경을 줄였습니다.
![[코드가 환경을 모르는 구조 3/7] IaC에도 헥사고날이 관통한다](https://cdn.sanity.io/images/v31psllp/production/b2a8cb4606e7b21da6b7f074f0c8238e9d02de14-1684x1030.png)
코드가 무엇을 정의하고 환경은 어디서 주입할지 분리하는 원리를 설명했습니다. 이를 배포, 클라우드, 시간, 테스트 전반에 반복 적용하는 관점을 제시했습니다.
![[코드가 환경을 모르는 구조 1/7] 코드는 무엇을, 환경은 어디서 - 다시 더 깊이](https://flex.team/blog/og/main.jpg)
코드가 무엇을 정의하고 환경은 어디서 주입하는지라는 원리를 배포, 인프라, 테스트 전반에 걸쳐 설명했습니다. 경계를 구조에 새겨 교체 가능성과 안정성을 높이는 시리즈의 출발점입니다.
![[코드가 환경을 모르는 구조 1/7] 코드는 무엇을, 환경은 어디서 - 다시 더 깊이](https://cdn.sanity.io/images/v31psllp/production/d7669e80f5e28954ae4a8e30b97d6d297e7f7c35-1684x1030.png)
AI 코딩 에이전트 시대에 빌드와 구조가 아키텍처 가드레일로 작동하는 방식을 설명했습니다. Standalone E2E와 Acceptance 증명으로 코드 리뷰의 무게 중심을 바꾸는 사례를 다뤘습니다.
![[미래를 담아낸 뼈대 6/7] AI가 읽을 수 있는 코드베이스](https://cdn.sanity.io/images/v31psllp/production/7501b9f19ba077678e03fbf57779dfded072b60e-1684x1030.png)
코드와 환경을 분리하는 Hexagonal 원칙을 배포, 인프라, 디버깅, 테스트까지 확장한 사례를 다뤘습니다. 부분 교체와 외부 주입으로 이터레이션 속도를 높이는 방법을 설명했습니다.
![[미래를 담아낸 뼈대 5/7] 코드가 환경을 모르는 구조](https://flex.team/blog/og/main.jpg)
애플리케이션과 인프라 전반에 Hexagonal 원칙을 적용해 환경 의존성을 분리하는 방법을 설명했습니다. 부분 교체와 주입으로 빠른 검증과 이터레이션을 가능하게 만든 사례를 다뤘습니다.
![[미래를 담아낸 뼈대 5/7] 코드가 환경을 모르는 구조](https://cdn.sanity.io/images/v31psllp/production/626db41a03292c4b57863b75c7bc5e755e395184-1684x1030.png)
Hexagonal Architecture 기반의 일관된 구조가 멀티클라우드, AI 백엔드, Observability 전환의 기반이 되었다고 설명했습니다. 표준 인터페이스와 경계 분리가 이후 변경 비용을 크게 낮춘 사례를 다루었습니다.
![[미래를 담아낸 뼈대 4/7] 기반이 열어준 다음 문제](https://flex.team/blog/og/main.jpg)
Hexagonal Architecture와 표준화된 인프라에 투자해 멀티클라우드, AI 백엔드, Observability 전환 비용을 낮춘 사례를 다뤘습니다. 벤더가 바뀌어도 코드와 운영을 크게 흔들지 않는 구조의 효과를 설명했습니다.
![[미래를 담아낸 뼈대 4/7] 기반이 열어준 다음 문제](https://cdn.sanity.io/images/v31psllp/production/1ef0397273a55d5bcb29d4af10cb45caabdb533f-1684x1030.png)
HR 권한 문제를 역할이 아닌 관계로 풀어낸 ReBAC 기반 인가 아키텍처를 소개했습니다. 기존 이벤트 파이프라인과 OpenFGA를 활용해 복잡한 조직 구조와 권한 변화를 유연하게 반영했습니다.
![[미래를 담아낸 뼈대 3/7] 관계로 풀어낸 권한](https://flex.team/blog/og/main.jpg)
Hexagonal Modular Monolith 구조 위에서 Outbox와 CDC로 도메인 간 이벤트 일관성을 보장하는 방식을 설명했습니다. 멱등 컨슈머와 공통 라이브러리로 신뢰성 있는 이벤트 레일을 만든 사례를 다뤘습니다.
![[미래를 담아낸 뼈대 2/7] 모듈 경계를 넘는 이벤트](https://cdn.sanity.io/images/v31psllp/production/1a44cf6f463c5690a413e9454bd7747d831f131f-1684x1030.png)
HR 권한 문제를 역할이 아닌 관계로 풀어낸 ReBAC 기반 인가 아키텍처를 소개했습니다. 기존 이벤트 파이프라인을 활용해 조직 변경을 권한에 즉시 반영한 방식도 설명했습니다.
![[미래를 담아낸 뼈대 3/7] 관계로 풀어낸 권한](https://cdn.sanity.io/images/v31psllp/production/28bb6a8def7808ade8a7cd15280737842abc1b18-1684x1030.png)
HR SaaS에서 트래픽보다 중요한 아키텍처 일관성과 도메인 경계를 다루는 방식을 소개했습니다. 빌드 도구로 규칙을 강제해 구조를 유지하는 접근을 설명했습니다.
![[미래를 담아낸 뼈대 1/7] 컴파일이 지키는 아키텍처](https://cdn.sanity.io/images/v31psllp/production/1f5ee4bdfd63e6846d79a6a0a9787e84e6e74208-1684x1030.png)
멀티클라우드와 AI 통합을 위해 LLM 비종속 아키텍처와 권한 자동화 체계를 구축했습니다. 또한 호출 로그를 모아 비용을 추적하고 FinOps 인사이트를 확보했습니다.

플렉스팀은 고객 요구를 그대로 받기보다 숨은 문제를 정의해 제품의 주관을 세우는 방식을 소개했습니다. 또한 스쿼드 자율성과 가설 기반 협업으로 지속 가능한 B2B SaaS 성장을 추구했습니다.

모노레포 확장으로 생긴 충돌과 복잡도를 줄이기 위해 14개 레포로 분리한 과정을 정리했습니다. 패키지 정리와 체계 재설계로 빌드 성능과 CI 속도를 개선했습니다.

인가 로직을 도메인 밖의 통합 플랫폼으로 분리한 사례를 소개했습니다. OpenFGA와 Kafka로 권한을 동기화해 재사용성과 확장성을 높였습니다.
