37 lines
1.6 KiB
Markdown
37 lines
1.6 KiB
Markdown
# PRD: CDN URL 변환 공통화
|
|
|
|
## 1. Overview
|
|
v2 서비스에서 중복 선언된 `String?.toCdnUrl()` 확장 함수를 공통 유틸로 분리한다.
|
|
|
|
## 2. Problem
|
|
- `CreatorChannelHomeQueryService`, `CreatorChannelLiveQueryService`, `CreatorChannelAudioQueryService`,
|
|
`CreatorRankingQueryService`에 유사한 CDN URL 변환 로직이 private 함수로 중복되어 있다.
|
|
- ranking 구현은 절대 URL을 그대로 유지하지 않아 다른 3곳과 동작이 다르다.
|
|
|
|
## 3. Goals
|
|
- 4개 서비스가 하나의 공통 `toCdnUrl` 함수를 사용한다.
|
|
- `null` 또는 blank 입력은 `null`을 반환한다.
|
|
- `http://`, `https://` 절대 URL은 그대로 반환한다.
|
|
- 상대 path는 `cloudFrontHost/path` 형식으로 반환한다.
|
|
|
|
## 4. Non-Goals
|
|
- QueryDSL 조회 로직이나 공개 API 스키마는 변경하지 않는다.
|
|
- 기존 CDN host 설정 방식은 변경하지 않는다.
|
|
- 다른 레거시 CDN URL 조합 코드는 이번 범위에서 정리하지 않는다.
|
|
|
|
## 5. Core Features
|
|
|
|
### Feature A: 공통 CDN URL 변환
|
|
#### Requirements
|
|
- `kr.co.vividnext.sodalive.v2` 하위 공통 패키지에 재사용 가능한 함수를 둔다.
|
|
- 기존 서비스 매핑 흐름은 유지하고 private 중복 함수만 제거한다.
|
|
|
|
#### Edge Cases
|
|
- `null`, `""`, `" "` 입력은 `null`이어야 한다.
|
|
- `https://...`, `http://...` 입력은 host를 덧붙이지 않아야 한다.
|
|
- `"profile/a.png"` 입력은 `"https://cdn.test/profile/a.png"`가 되어야 한다.
|
|
|
|
## 6. Technical Constraints
|
|
- Kotlin 확장 함수로 구현한다.
|
|
- 테스트는 JUnit 5로 작성한다.
|