docs(TechLog): 얇은 Case 열 편과 Question 셋을 저장소 실물로 채운다
SSOT 를 저장소에서 확인해 더 보강하고 그것으로 다시 썼다.
§7.2 참조 검사 SQL 을 문자열로 조립하는 실제 코드 — 컴파일러가 표 이름도
컬럼 이름도 보지 않는다는 것이 그 모양에서 드러난다
§11.2 section-heading-rank 가 미디어 쿼리 값을 먼저 걷어내는 이유(테스트 주석)
§16.1 질문 삭제는 참조가 둘뿐이라 같은 문제가 덜하다는 대조
Case 열 편과 Question 셋을 다시 썼다. Question 은 사실·가정·미지수·제약을 갈라
채우고 선택지마다 무엇을 감수하는지 적었다 — 오류 코드를 나누면 계약과 반입한 두
저장소가 함께 움직인다는 것처럼.
SSOT 62,643 → 68,319 자. 검사 넷 전부 통과한다.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
6917ce2420
commit
fd221353a3
@@ -548,6 +548,19 @@ refresh 에 실패해 **파드가 CrashLoopBackOff** 로 들어갔습니다.
|
||||
|
||||
> 그 쿼리의 여섯 컬럼 중 다섯은 마이그레이션과 대조했다. 이 하나만 가정했고, 그것이 틀렸다.
|
||||
|
||||
그 어댑터는 SQL 을 문자열로 이어 붙여 만듭니다. 컴파일러가 확인하는 것은 이 식이 문자열이라는
|
||||
것까지이고, 표 이름도 컬럼 이름도 실행해야 검증됩니다.
|
||||
|
||||
```java
|
||||
"SELECT EXISTS ("
|
||||
+ " SELECT 1 FROM document_relation WHERE target_document_id = :id"
|
||||
+ " UNION ALL SELECT 1 FROM question_document_link WHERE document_id = :id"
|
||||
+ " UNION ALL SELECT 1 FROM project_document_link WHERE document_id = :id"
|
||||
+ " UNION ALL SELECT 1 FROM topic_featured_document WHERE document_id = :id"
|
||||
+ " UNION ALL SELECT 1 FROM project_decision WHERE source_case_id = :id"
|
||||
+ ")"
|
||||
```
|
||||
|
||||
**진짜 실패는 이 SQL 이 한 번도 실행된 적이 없다는 것이었습니다.** 표준 `check` 는
|
||||
Testcontainers 를 띄우지 않으므로 **persistence SQL 은 한 번도 실행되지 않은 채 빌드가
|
||||
통과합니다.** 컴파일도 단위 테스트도 컬럼 이름을 검증하지 못합니다.
|
||||
@@ -915,6 +928,11 @@ Studio 에 주제 설명을 쓸 칸조차 없었기 때문입니다.
|
||||
`font-size`/`font-weight` 를 쓰는지 CSS 를 파싱해 확인합니다. 굵기를 빼 보고 실제로 멈추는
|
||||
것을 확인했습니다.
|
||||
|
||||
이 검사는 미디어 쿼리 안의 값을 먼저 걷어냅니다. 그 이유가 테스트 안에 적혀 있습니다:
|
||||
|
||||
> 좁은 화면용 값은 뺀다. 화면 폭마다 급이 달라지는 것은 의도이고, 여기서 보려는 것은 같은
|
||||
> 폭에서 나란히 설 때의 급이다.
|
||||
|
||||
> **이때 제가 저지른 판단 오류:** 처음에 grid/columns 만 측정하고 "정상"이라고 답했습니다.
|
||||
> 사용자가 다시 지적한 뒤 **전체 페이지 스크린샷**을 찍어서야 26px/400 을 봤습니다.
|
||||
> **프록시 지표가 아니라 보이는 것을 측정해야 합니다.**
|
||||
@@ -1358,6 +1376,10 @@ UNION ALL SELECT 1 FROM topic_featured_document WHERE document_id = :id
|
||||
UNION ALL SELECT 1 FROM project_decision WHERE source_case_id = :id
|
||||
```
|
||||
|
||||
같은 어댑터의 질문 삭제는 참조가 둘뿐이라 같은 문제가 덜합니다 — `project_question_link` 와
|
||||
`home_focus_config.open_question_id` 입니다. 다섯을 하나로 묶은 쪽에서만 어느 것이 막았는지가
|
||||
사라집니다.
|
||||
|
||||
실제 사례: 「DTO 변환 과정에서 발생한 Highlight 컬렉션 N+1」(CASE, DRAFT/PRIVATE)을 지우려는데
|
||||
관계를 다 지워도 삭제가 안 됐습니다. 남아 있던 것은 `project_document_link` 의 **PRIMARY 링크
|
||||
1행**(프로젝트 「Liner N + 1문제」)이었습니다. **프로젝트 연결은 「관계」 편집기가 아니라 문서의
|
||||
|
||||
Reference in New Issue
Block a user