AI 에이전트가 Issue 도메인 수정 시 전체 인프라 초기화 없이 도메인 슬라이스만 독립 실행 가능한 standalone-app 모듈 구조를 소개한다. 헥사고날 아키텍처의 Port/Adapter로 프로덕션 Adapter를 테스트용으로 교체해 빠른 피드백 루프를 제공하는 방법을 다룬다.
핵심 포인트- **standalone-app 모듈**: Issue 도메인만 독립 실행 — `:issue:standalone-app:bootRun` 한 줄로 전체 인프라 불필요
- **헥사고날 Port/Adapter 교체**: OAuth2 → 테스트용 Header 인증(X-Flex-Scope, X-Flex-Actor)으로 Adapter만 스왑
- **IssueDataSeeder**: Repository 직접 호출 아닌 UseCases 통해 데이터 적재 — 도메인 로직 우회 방지
- **AI 에이전트 최적화**: Claude·Cursor 등이 Issue 슬라이스만 집중 수정 가능, 컨텍스트 낭비 없음
- **E2E 스택 통합**: Vite+React 프론트엔드 + Playwright E2E + springdoc-openapi Swagger UI 내장
- **의존성 방향 보존**: standalone에서도 Domain → Application → Adapter 방향 엄수
상세 정리- flex.team "의존성의 방향을 따라" 시리즈 마지막 편 — 실제 운영 도메인에 적용한 사례
- 기존 문제: AI 에이전트가 Issue 하나 수정하려면 전체 서비스 컨텍스트·인증·DB 초기화 필요
- 해결: `apps/issue/standalone-app` 모듈 — 테스트용 H2 + 가짜 Adapter로 자급자족 실행
- Port 인터페이스 (domain layer): `IssueRepository`, `NotificationPort` 등 추상화 정의
- Adapter 교체 예시: `OAuth2ActorResolver` → `HeaderActorResolver(X-Flex-Scope, X-Flex-Actor)`
- `IssueDataSeeder`: `CreateIssueUseCase`, `AssignIssueUseCase` 호출로 도메인 불변식 통과한 데이터 생성
- Playwright 시나리오: 이슈 생성→할당→댓글→완료 전체 흐름을 UI 레벨에서 검증
- springdoc-openapi 내장: standalone에서 Swagger UI로 API 탐색 및 수동 테스트 가능
- 빌드 격리: standalone-app은 루트 Gradle 빌드에 포함 안 되어 CI 속도 영향 없음
- 실제 AI 사용 패턴: Claude가 요구사항 받아 UseCase → E2E 시나리오 자동 생성 후 `bootRun`으로 검증
- 한계: 외부 이벤트(Kafka, WebSocket) 의존 기능은 별도 목킹 필요
왜 읽나AI 에이전트와 헥사고날 아키텍처를 결합해 도메인 슬라이스 단위 독립 실행 환경을 구축하는 실전 패턴을 찾는다면 flex.team의 이 사례가 가장 구체적인 레퍼런스다.