Conversation
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R5mXcTtT9nQdHVET2CYWNy
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
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 |
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R5mXcTtT9nQdHVET2CYWNy
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R5mXcTtT9nQdHVET2CYWNy
woneeeee
left a comment
There was a problem hiding this comment.
근데 왜 dev로 머지 안하시고 바로 main으로 머지하시는건가요...?
|
이거 핫픽스 하려고 했던 건데, 그냥 DB data 변경해서 해소했서용 ㅋㅋㅋㅋ |
배경
v3 에디터는 게시글 본문을 마크다운 원문으로 저장했고, V3 → V4 이관 시
post.content를 무가공 복사했습니다 (docs/migration/v3-to-v4/08_post_comment.sql). v4 는 Tiptap(HTML 기반) 에디터라 이관된 글에서## 제목,**굵게**같은 기호가 그대로 노출되고 줄바꿈이 뭉쳐 보입니다.슬랙에서 FE 측이 요청한 건이며, FE 가 제시한 Tiptap 태그 스펙에 맞춰 서버에서 변환합니다.
변경 내용
1.
MarkdownToTiptapHtmlConverter(신규)마크다운 → Tiptap 호환 HTML 변환기. commonmark-java + jsoup 사용.
needsConversion→restoreMarkdownSource→ commonmark 렌더 → Tiptap 스펙 후처리 → 살균<li>/<td>내부<p>래핑, 테이블colspan/rowspan명시 등 후처리가 필요합니다<p>한 덩어리로 이관된 본문,<br>혼재 데이터도 마크다운 원문을 복원해 변환합니다<br>, 연속 빈 줄 →<p></p>로 보존해 줄바꿈 뭉침을 해결합니다<p><strong>으로, 이미지는 링크로 강등합니다 (Heading levels [1,2,3] / Image 확장 부재)2. 변환 적용 범위 — 출처 기반 판정
본문 내용만으로는 사용자가 의도한
- 대시로 시작하는 문장과 마크다운 리스트 마커를 구분할 수 없습니다. 내용 기반 휴리스틱만 쓰면 v4 정상 글이 리스트로 바뀌는 등 하위호환이 깨집니다.그래서 내용이 아니라 출처로 판정합니다:
PostMapper가 상세·목록 응답 양쪽에서 이 조건을 통과한 글만 변환하고, 아니면 저장된 본문을 그대로 반환합니다.3. 기존 본문 보존
<pre><code>인 내용은 코드 펜스로 격리해 마크다운 재파싱에서 보호 (언어 클래스 유지)colwidth속성 보존설정
동아리 식별자를 설정 파일에 남기지 않기 위해 환경 변수로만 주입합니다. 두 값이 모두 있어야 변환이 동작하며, 없으면 기존과 동일하게 본문을 그대로 내려줍니다 (local/test 는 자동으로 꺼집니다).
검증
./gradlew test통과 — 변환기 33개,PostMapperTest8개(변환 적용/미적용/설정 없음/상세 경로),PostEntityTest에 판정 경계 4케이스editorExtensions로new Editor({content}).getHTML()파싱. 별도 PR 로 올립니다범위 밖
<a>의 target/rel — FE Link 확장이 렌더 시 자체 부여합니다확인 필요
2026-09-20T00:00:00으로 잡았습니다. 이보다 늦게 잡으면 v4 초기 글이 변형되고, 이르게 잡으면 v3 글 일부가 안 고쳐집니다🤖 Generated with Claude Code
https://claude.ai/code/session_01R5mXcTtT9nQdHVET2CYWNy