우산 의존성 계약
최신 안정판 Bluetape4k 1.11.0 릴리스 기준
두 줄이 전체 공개 계약이다
섹션 제목: “두 줄이 전체 공개 계약이다”1.11.0의 infra/redis/build.gradle.kts는 다음 두 의존성만 선언합니다.
dependencies { api(project(":bluetape4k-lettuce")) api(project(":bluetape4k-redisson"))}Gradle의 api 의존성이므로 bluetape4k-redis를 사용하는 module은 Lettuce와 Redisson의 공개 type을 compile classpath에서 볼 수 있고, 두 artifact는 runtime classpath에도 들어옵니다. 우산 artifact는 두 하위 artifact의 버전을 별도로 고르는 기능이 아닙니다. 중앙 bluetape4k-dependencies BOM이 같은 배포 묶음으로 정렬합니다.
우산 모듈에 없는 것
섹션 제목: “우산 모듈에 없는 것”infra/redis에는 src/main과 src/test의 Kotlin·Java 파일이 없습니다. 따라서 다음 기능을 우산 모듈의 API로 설명하면 안 됩니다.
- 공통
RedisClientfacade나 client 자동 선택 - Lettuce와 Redisson 사이의 failover
- 공통 Codec 또는 key migration
- Spring bean·property·auto-configuration
- Spring Cache provider나 database loader/writer
- 우산 계층을 검증하는 전용 테스트 suite
실제 client API와 실패 계약은 Lettuce 매뉴얼과 Redisson 매뉴얼에 있습니다.
언제 한 좌표가 유용한가
섹션 제목: “언제 한 좌표가 유용한가”두 client 계열을 이미 함께 사용하는 애플리케이션은 의존성 좌표를 당장 바꾸지 않고 기존 코드를 유지할 수 있습니다. Redisson에서 Lettuce로, 또는 반대 방향으로 이전할 때도 전환 기간에는 두 API를 compile할 수 있습니다.
반대로 새 서비스가 Lettuce command API만 쓴다면 우산 좌표는 사용하지 않는 Redisson과 transitive dependency까지 가져옵니다. 이 경우 처음부터 작은 좌표를 선택하는 편이 build와 운영 책임을 더 정확히 드러냅니다.
build에서 확인할 항목
섹션 제목: “build에서 확인할 항목”./gradlew :application:dependencies --configuration runtimeClasspathdependency report에서 bluetape4k-lettuce와 bluetape4k-redisson이 함께 들어오는지 확인합니다. 클래스가 보인다는 사실과 runtime에서 client instance를 생성한다는 사실은 다릅니다. source 사용처와 Spring bean 구성을 따로 조사해야 합니다.