Repository navigation
Conversation
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configuration
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
|
||
| // 버전 문자열은 정렬 기준으로 믿을 수 없어(v1.10.0 < v1.9.0, 날짜 형식 전환 가능성) 나중에 넣은 행을 최신으로 본다 | ||
| @Transactional(readOnly = true) | ||
| public List<ConsentDocumentResponse> getLatestDocuments() { | ||
| return Arrays.stream(ConsentType.values()) | ||
| .map(type -> consentDocumentRepository.findFirstByTypeOrderByIdDesc(type) | ||
| .orElseThrow(() -> new BusinessException(ConsentErrorCode.CONSENT_DOCUMENT_NOT_FOUND))) | ||
| .map(ConsentDocumentResponse::from) | ||
| .toList(); | ||
| } |
There was a problem hiding this comment.
ConsentDocument에 isActive(또는 active) boolean 컬럼을 추가한 후, 해당 컬럼을 기준으로 판별하는 방향은 어떨까요?
단순히 findFirstByTypeOrderByIdDesc로 "최신 = id 최댓값"을 판단하는 방식은 과거 버전으로 롤백하거나, 수동으로 활성 버전을 지정해야 하는 케이스 등에서 대응이 꼬이는 이슈가 발생할 수 있을 것 같아요 ..!
활성화 여부 컬럼 추가와 함께
- 활성 문서 교체 로직(새 문서 활성화 + 기존 문서 비활성화를 같은 트랜잭션에서 처리)
- DB에서 type당 is_active=true가 최대 1건이도록 보장하는 partial unique index
를 적용하여 도입하는 방향성이 좀 더 적절하다고 생각합니다!
기현님 의견도 여쭤봅니당 ~~
There was a problem hiding this comment.
좋은 의견 같습니다!
id 방식은 롤백하려면 새 버전 행을 지워야 해서, 그 버전에 동의한 본문 근거가 사라지는 문제는 놓쳤네요ㅠㅠ
반영해뒀습니다~
There was a problem hiding this comment.
반영 감사합니다 ~!
배포 후에 dev, prod DB에 partial unique index 설정해주시면 좋을 것 같아요!
지금 active 교체를 DB에서 직접 하다보니, 실수로 active 문서를 2건 이상 등록하는 상황을 막기 위해 제약을 걸어둬야 할 것 같습니당
CREATE UNIQUE INDEX uk_consent_document_active_type
ON consent_document (type)
WHERE is_active = true;
이런 수동 DDL이 앞으로도 종종 생길 것 같아서, 추후에 마이그레이션 도구 도입도 같이 얘기해보면 좋을 것 같아요 ㅎㅎ
고생하셨습니다 ~~
📌 개요 (why, what)
🛠️ 구현 방법 (how)
GET /api/v1/consent-documents: 약관 유형별 활성 문서 1건씩 본문(마크다운)과 버전을 배열로 반환합니다.CONSENT_003)를 반환합니다.consent_document에is_active컬럼을 추가해 유형별로 지금 내려줄 문서를 지정합니다.consents[].version)과 같은v1.0.0형식이며, Swagger 설명에도 명시했습니다.consent_document.content를 NOT NULL로 변경했습니다.배포 후(
is_active컬럼 생성 확인 후) 실행합니다. 배포 전consent_document테이블이 비어 있어야ddl-auto: update가 NOT NULL 컬럼을 추가할 수 있습니다.약관 개정 / 롤백 시 (끄기를 먼저 해야 인덱스에 걸리지 않음)
🤔 검토한 대안과 선택 이유 (trade-off)
v1.10.0 < v1.9.0문자 비교 오류, 날짜 형식 전환 시 깨짐is_active컬럼으로 활성 문서 지정💭 리뷰 포인트
ConsentDocument.versionv1.0.0📚 Reference (Optional)