- 발행일
상세 화면을 목업에 맞추며 하루에 세 번 뒤집었다 — 카드 표제 순서, 필드명 링크, 그래프에서 추론하던 관계
상세 화면을 목업에 맞추며 하루에 세 번 뒤집었다
표준데이터 상세 화면은 9월 3일에 목업 구성으로 한 번 크게 바뀌었습니다. 히어로·목차·속성표 구획, 핵심어 낱말마다 통합 검색 재검색 링크, 그리고 상세에서 탭 제거. 탭은 목록을 어느 축으로 볼지 고르는 장치라 상세에 서면 어느 탭도 선택 상태가 아니었거든요. 세 개가 나란히 회색으로 서서 현재 위치를 잘못 가리켰습니다.
이 글은 그 뒤 9월 7일 하루에 대한 겁니다. 그날 상세·목록 화면 커밋 중 셋이 직전 결정을 뒤집는 것이었어요. 시각은 커밋 시각 그대로이고, 절은 시각순이 아니라 뒤집은 결정별로 묶었습니다.
11:21 → 12:27 — 카드 표제 순서
목록 카드가 MSG_AEDSensorData처럼 영문 식별자만 세워서 무슨 데이터인지 안 읽혔습니다. 한글 명칭을 병기하기로 했어요. dct:title 슬롯에서 읽어 title_ko로 얹습니다 — 추가 쿼리 없이 기존 attach_card_fields에서요.
11시 21분 판은 이랬습니다.
{% set card_title = (object.display_name or object.name) ~ (" (" ~ object.title_ko ~ ")" if object.title_ko else "") %}
<span class="truncate text-base font-bold text-gray-900" title="{{ card_title }}">{{ object.display_name or object.name }}
{%- if object.title_ko %} <span class="text-sm font-normal text-gray-600">({{ object.title_ko }})</span>{% endif %}</span>
MSG_AEDSensorData (ADS 센서 수집정보). 괄호 부분은 굵기·색을 한 단계 낮췄고요.
12시 27분에 뒤집었습니다.
{# 한글 제목(title_ko)이 먼저, 영문 명칭은 괄호로 뒤에 — 목업과 같은 순서·같은 크기.
한글 제목이 없으면 영문 명칭만 #}
{% set card_name = object.display_name or object.name %}
{% set card_title = (object.title_ko ~ " (" ~ card_name ~ ")") if object.title_ko else card_name %}
<span class="truncate text-base font-bold text-gray-900" title="{{ card_title }}">{{ card_title }}</span>
ADS 센서 수집정보 (MSG_AEDSensorData). 순서를 뒤집고, 괄호 부분에 따로 주던 작은 글자·회색도 걷어냈습니다. 목업은 둘을 같은 크기로 세우고 있었어요. 첫 판은 "식별자가 주, 한글은 보조"라는 제 생각이 들어간 거였고, 목업은 그 반대였습니다. 공유 매크로라 표준데이터 목록·개념체계 목록·데이터 맵 세 화면이 같이 바뀝니다.
한 시간 사이에 뒤집힌 이유는 단순합니다. 첫 판을 목업과 나란히 놓고 안 봤어요. 목업 v108에 병기 형식이 있다는 걸 알고 "병기한다"까지만 옮겼습니다.
12:45 — 히어로 제목은 표제 우선, 그런데 히어로만
상세 히어로도 같은 문제였습니다. MSG_AEDSensorData가 h1으로 크게 서고 아래에 메시지 (kadif:Message). 목업은 ADS 센서 수집정보 (AEDSensorData)가 제목이고 식별자는 그 아래 한 줄이에요.
이건 9월 3일에 한 번 "벽이 아니었다"고 확인만 하고 미뤄 둔 항목이었습니다. dct:title에 한글 표제가 들어 있다는 건 확인했는데, 제목을 표제로 바꾸면 목록·트리·띠지까지 같이 갈리니 기획 결정이 먼저라고 봤거든요.
결정은 상세 히어로만이었습니다.
# 히어로 제목은 표제 우선 — 시안 `ADS 센서 수집정보 (AEDSensorData)` 꼴이고 식별자
# (`MSG_…`)는 그 아래 한 줄로 내린다. 식별자만 크게 서면 무슨 데이터인지 안 읽힌다.
# 목록 카드·띠지·트리는 그대로 식별자 우선이다(2026-09-07 결정 — 상세 히어로만).
# 표제가 없거나 이름과 같은 자원(카탈로그·개념체계 등)은 종전대로 식별자가 제목이다
# — 같은 글자를 두 줄로 세우지 않는다.
title_ko = literal_of("dct:title")
asn1_name = literal_of("kadif:asn1Representation")
if title_ko == instance.name:
title_ko = ""
context["hero_title"] = (
f"{title_ko} ({asn1_name})" if title_ko and asn1_name else title_ko
목록에서 누른 이름과 상세 제목이 갈리는 대신, 식별자를 제목 바로 아래 mono 한 줄로 세워 잇습니다. 카탈로그·개념체계처럼 표제가 이름과 같은 자원은 같은 글자를 두 줄로 세우지 않고 종전대로예요. 요약·표제·ASN.1 명칭을 각각 next(...)로 집던 코드는 literal_of() 하나로 묶었습니다.
12:11 — 표준 슬롯 넷을 구획 하나로, 그래프 추론 삭제
표준과의 관계는 슬롯이 넷입니다. 정의·활용·시나리오·구성 기반. 종전 화면은 슬롯마다 번호 구획을 하나씩 세웠어요. 정의 1건 / 활용 0건 / 시나리오 0건 / 구성·상호운용 1건 — 빈 구획 둘이 화면을 차지하고, 같은 표준이 두 구획에 되풀이됐습니다. 목업은 구획 하나에 표(표준 / 관계 / 관계 설명)고, 한 표준에 관계 둘이면 원천 정의 · 상호운용 기반처럼 한 칸에 겹쳐 써요.
"번호로 전부 분리하였는데 원안처럼 묶어 달라"는 요청으로 묶었습니다. 데이터 모델은 그대로고 화면만 STANDARD_SLOTS를 구획 하나가 함께 그립니다.
# 표준 슬롯 — 화면에서는 **구획 하나**(`표준 관계`)로 묶는다. 슬롯마다 구획을 세우면 번호
# 구획 넷이 줄줄이 서고(둘은 대개 비어 있다) 같은 표준이 구획마다 되풀이된다. 관계 이름은
# 슬롯의 등록 라벨(`정의 표준`·`활용 표준`…)이라 코드에 문장을 두지 않는다. 🔄 2026-09-07 —
# 종전에는 `relatedStandard` 하나를 그래프에서 정의/활용으로 갈라 읽었는데, 슬롯이 관계를
# 직접 말하니 그 추론은 걷어냈다. `relatedStandard` 는 구판 슬롯(메시지에만)이라 같은 표에
# 얹는다. 튜플 순서는 슬롯 등록 순서와 같고, 표 안 관계 순서도 등록 순서를 따른다.
STANDARD_SLOTS = (
여기서 지운 게 중요합니다. 종전에는 kadif:relatedStandard 하나에 걸린 표준을 구조 그래프를 뒤져서 "이 자원을 정의한 표준"인지 "활용한 표준"인지 추론했어요. _related_standards와 RELATION_DEFINES 외 문장 상수 둘. 슬롯이 넷으로 등록되면서 관계는 저장된 값이 됐으니, 관계 이름·설명은 그 슬롯의 label_ko·definition_ko를 그대로 씁니다. 코드에 문장이 없어요. 목업의 원천 정의와 우리의 정의 표준이 다른 건 관리 화면에서 슬롯 이름을 고치면 되는 일이지 코드 일이 아닙니다.
구획 제목은 코드 상수 STANDARD_SECTION_TITLE입니다. 슬롯 넷을 한 구획이 받으니 어느 한 슬롯의 이름을 빌릴 수 없어요. 구조 표가 첫 슬롯 이름을 쓰는 것과 다른 사정입니다. 제정연도·버전은 표에서 빼고 표준 이름 클릭 모달로 옮겼습니다 — 표에 뭉치면 어디까지가 이름인지 안 읽혀서요.
16:05 → 16:07 — 일주일 전에 단 링크를 걷어냈다
8월 31일에 구조 표의 필드 명을 필드 상세로 가는 링크로 만들었습니다. 근거는 "필드도 등록된 자원이고 구조 시각화 트리가 이미 같은 주소를 쓴다 — 표만 링크가 없으면 한 화면의 두 그림이 다른 동선을 갖는다"였어요.
9월 7일 16시 05분에 걷어냈습니다.
🔄 **2026-09-07.** 구조 표의 `필드 명` 은 **링크 없이 글자만** 선다. 2026-08-31 에 필드 상세로
가는 링크를 달았으나(트리와 같은 동선이라는 근거) 걷어냈다 — 필드는 구성 자원이 아니라 필드
정의라 그 상세가 표가 이미 보여주는 여섯 열 이상을 답하지 못한다.
링크를 눌러 가 봤자 표가 이미 보여주는 여섯 열 이상이 없었습니다. "동선이 같아야 한다"는 형식 논리였고, "가서 볼 게 있나"가 실제 기준이었어요.
2분 뒤 16시 07분, 첫 커밋에서 "그대로 필드 상세로 간다"고 남겨 둔 사용 DataFrame 표의 필드명 열도 같은 이유로 걷어냈습니다. 같은 이유가 적용되는 자리를 첫 커밋에서 하나 빠뜨린 거예요. 지금 필드 상세로 가는 건 구조 시각화 트리의 필드 노드뿐입니다.
그 밖의 작은 것 둘
상태 구획을 뺐습니다. kadif:status는 히어로가 등록 상태 · 활성 배지로 이미 답하는 슬롯이라, 구획으로 한 번 더 세우면 활성 칩 하나짜리 구획과 목차 칸만 남았어요. _generated_spec이 그 슬롯만 건너뜁니다. 메시지 13→12 구획.
데이터 표현 구획은 표현마다 1/4 폭 카드에 코드 접힘이던 걸 ASN.1·JSON·(Protobuf) 탭 하나에 고른 표현의 코드가 기본 펼침으로 바꿨습니다. 상세에서 탭을 뺀 지 나흘 만에 다시 탭이 들어온 셈인데, 이건 목록 축 탭이 아니라 구획 안의 표현 전환이라 "어느 탭도 선택 상태가 아닌" 문제가 없어요. 표현이 하나면 탭 줄 자체가 안 섭니다.
e2e에서 코드 상자를 고르는 방식을 바꿨습니다.
// 첫 코드 상자가 ASN.1 이라는 보장이 없다 — `데이터 표현` 이 JSON·XML 전문을
// `샘플` 상자로 함께 세운다. 상자의 `data-code-label` 로 ASN.1 상자만 잡는다 —
// 글자(hasText)로 고르면 복사 직후 버튼이 `복사됨` 이 되는 1.5초 동안 상자가 조건에서
// 빠져 단언이 그 뒤 되돌아온 문구를 본다.
글자로 고르면 복사 버튼이 복사됨으로 바뀌는 1.5초 동안 그 상자가 선택 조건에서 빠집니다. 속성으로 고르면 안 흔들려요.
검증
- 표준 관계 구획: 같은 표준이 슬롯 둘에 걸리면 행 하나에 관계 둘이 서는 것을 테스트로 교체(종전 그래프 추론 테스트 삭제).
- 카드 표제:
title_ko병기 테스트 1건. 한글 제목이 없는 인스턴스는 영문 명칭만. - 히어로 제목: 표제가 이름과 같은 카탈로그·개념체계에서 아랫줄이 안 서는 것 확인.
- 데이터 표현 e2e를 펼침 전제로 수정,
data-code-label선택으로복사됨전환 중 매칭이 빠지는 문제 해소. - 뒤집은 결정은 전부
docs/std-data-detail-sections.md·dataset-search-mockup-diff.md에 🔄 표기와 날짜로 남겼습니다.
남은 것 · 한계
- 히어로만 표제 우선이라 목록과 상세가 다른 이름을 크게 씁니다. 목록 카드는
한글 (영문), 히어로는한글 (ASN.1 명칭), 띠지·트리·RDF 제목은 식별자. 나머지 화면까지 갈지는 다시 결정할 일이에요. - 표준 슬롯 넷이 같은 의무 수준으로 등록돼 있어 구획 배지는 "먼저 온 슬롯 것"이라는 규칙이 지금은 드러나지 않습니다. 등록값이 갈리면 그때 보여요.
- 목업의
원천 정의와 우리의정의 표준은 문구가 다릅니다. 코드에서 안 고치기로 한 건 맞는데, 관리 화면에서 고칠 사람이 정해진 건 아니에요. - 카드 표제 첫 판을 목업과 나란히 안 놓고 만든 건 이 날의 실수입니다. 한 시간 만에 잡혔지만, 목업이 있는 항목은 옮기기 전에 목업을 옆에 띄우는 것이 규칙이어야 했어요.
- 필드명 링크를 걷은 근거("가서 볼 게 없다")를 8월 31일에 링크를 달 때는 안 물었습니다. 그때 물었으면 안 달았을 겁니다.
관련 글: Figma 44프레임을 코드와 대조하기 · 등록된 적 없는 ASN.1을 파싱하고 있었다 · 탭의 '전체'는 조건 없음이 아니라 합집합이었다