- 발행일
탭 이름을 이틀 만에 되돌렸다 — 화면에 뜨는 낱말은 UI 문구가 아니라 도메인 계약이다
탭 이름을 이틀 만에 되돌렸다
표준데이터 검색 화면의 셋째 탭 이름은 9월 7일에 개념체계에서 개념 탐색으로 바뀌었습니다. 당시 코드 주석에 적힌 근거는 이랬어요 — 개념체계는 클래스 이름(skos:ConceptScheme)이라 탭이 무엇을 하는 자리인지 말해 주지 못한다, 개념 계층을 따라 내려가며 좁히는 자리니 개념 탐색이 맞다.
이틀 뒤인 9월 9일에 되돌렸습니다(b3e016e9).
되돌린 이유는 이름 자체가 아니었다
같은 날 필터줄의 칸 이름도 정보 주제에서 개념체계로 돌아왔습니다. 이 두 이름은 원래 하나였는데, 9월 7일에 일부러 다른 이름을 줬어요. 탭은 하는 일을 따라 개념 탐색, 그 탭 안의 필터 칸은 목업의 필터 이름이자 그 칸에서 고르는 값(dcat:theme)의 뜻을 따라 정보 주제. 사용자가 보기에는 같은 축인데 부르는 말이 셋(데이터 모델의 개념체계까지)이 된 상태였습니다.
되돌린 뒤 코드에 남긴 주석입니다.
# 2026-09-07 `개념 탐색` 으로 바꿨다가 2026-09-09 `개념체계` 로 되돌림 — 필터줄의
# `정보 주제` 칸도 같은 날 `개념체계` 가 돼 탭·칸 이름이 다시 하나다.
"title": _("개념체계"),
9월 7일에도 데이터 맵 소스 탭과 이용안내 슬라이드 제목까지 한 커밋에서 같이 바꿨습니다. 탭 이름과 칸 이름도 하나씩 보면 각자 근거가 있었고요. 놓친 건 둘을 합쳐 보면 한 축을 세 이름으로 부르게 된다는 것이었고, 되돌린 커밋에 적힌 사유도 그 하나입니다. 뒤집힌 경위를 지우지 않고 주석과 문서에 날짜째 남겼어요. 두 달 뒤에 이 자리를 여는 사람이 "왜 클래스 이름을 그대로 탭 이름으로 쓰지?"라고 물을 때, 이미 한 번 바꿔 봤고 무엇 때문에 돌아왔는지가 답이 됩니다.
이름만 돌아온 게 아니다 — 선택지도 한 단으로 폈다
같은 커밋에서 개념체계 드롭다운의 구조가 바뀌었습니다. 이 칸의 선택지는 일주일 사이 세 번째 모양이에요.
| 시점 | 뿌리 | 하위 |
|---|---|---|
| ~9/6 | 개념체계(그릇) | 체계 아래 개념 |
| 9/7 | 모든 체계의 최상위 개념 | ▸ 로 펼침 |
| 9/9 | 상위개념이 없는 개념만, 평평하게 | 없음 |
9월 9일 결정은 기획 쪽입니다 — 관리 화면에서 상위개념(skos:broader) 값이 빈 개념이 곧 이 칸의 목록이라는 것. 하위 개념을 화면에서 고를 수 없게 됐지만 검색 결과가 좁아지지는 않습니다. 뿌리를 고르면 서버가 하위를 늘 함께 걸거든요.
구현은 카탈로그 칸과 공유하는 트리 도구를 그대로 쓰되, 가지가 없는 것처럼 만들어 넘깁니다.
(data.root_concepts || []).forEach(function (concept) {
roots.push(Object.assign({}, concept, { has_children: false }));
});
return { roots: roots, children: {} };
has_children을 눌러 두면 ▸ 표시가 안 서고, children이 비어 있으니 펼칠 것도 없습니다. 같은 렌더러를 쓰는 카탈로그 칸은 그대로 계층으로 남아요. 드롭다운 코드를 갈래로 나누는 대신 데이터를 평평하게 만들어 넘기는 쪽을 골랐습니다.
이 커밋에서 조용히 빠진 것
9월 7일 버전에는 값이 달린 개념(count > 0)을 앞에 세우는 정렬이 있었습니다. 이번 커밋에서 그 정렬이 같이 빠졌어요.
- roots.sort(function (a, b) {
- return (b.count > 0) - (a.count > 0);
- });
커밋 메시지에는 이 이야기가 없습니다. 지금 선택지 순서는 체계 순서대로 이어 붙인 서버 응답 그대로예요. 0건 개념이 목록 위쪽에 섞여 있을 수 있고, 그게 의도된 것인지 평평하게 펴면서 딸려 나간 것인지는 커밋만 봐서는 알 수 없습니다. "평평하게 편다"는 변경 안에 "정렬을 뺀다"가 숨어 들어간 셈이고, 이런 건 커밋 메시지에 한 줄이 있어야 했습니다.
첫 줄의 '전체 …'
드롭다운 맨 위에 전체 개념체계 줄을 세웠습니다(카탈로그 드롭다운도 같이). 체크박스 목록에는 원래 "아무것도 안 고른 상태"를 가리키는 자리가 없어서, 고른 걸 다 풀려면 하나씩 눌러 꺼야 했거든요.
동작은 셀렉트 칸의 첫 선택지를 흉내 냅니다 — 누르면 전부 해제되고, 고른 것이 없으면 이 줄이 체크된 것처럼 보이고, 그 상태에서 다시 눌러도 풀리지 않습니다. 빈 조건이 곧 전체라서요.
"전체"라는 낱말이 이 화면에서 무엇을 뜻하는지는 며칠 전에 한 번 정리한 적이 있습니다. 조건 없음이 아니라 뿌리 전부의 합집합이에요. 그 뜻 그대로 이 줄을 세웠습니다.
같은 주의 다른 두 자리
서비스 소개 카드 문구를 고쳤습니다(fb761343). "탐색 범위를 좁힙니다"가 "주제별 그룹을 만듭니다"로요. 분류 축이 하는 일은 묶는 것이고, 좁히는 건 그 결과로 사용자가 하는 일입니다. 카드가 축의 역할을 결과 쪽으로 설명하고 있었어요.
홈 목록의 표제도 바꿨습니다(e31cc998). 자주 찾는·최근 등록 표준데이터 행이 영문 식별자를 세우고 있었는데, 그 자리에 dct:title 한글 제목을 넣고 영문명은 툴팁으로 물렸습니다.
# 표제는 한글 제목(dct:title) 하나만 — 홈 행은 한 줄이라 목록 카드처럼
# `한글 (영문명)` 을 병기하면 잘린다. 영문명은 툴팁으로 물러나고, 제목이 없는
# 건만 이름을 세운다. 동명 인스턴스는 그룹값으로 갈린다.
목록 카드가 쓰는 한글 (영문명) 병기를 그대로 못 쓴 이유가 저 주석에 있습니다. 홈 행은 날짜 칸까지 한 줄에 들어가야 해서 병기하면 잘려요. 제목이 없는 건은 전처럼 영문명을 세웁니다.
조회는 행마다 붙지 않게 했습니다. OID 카드 목록이 이미 쓰던 title_map이 pk 목록을 받아 슬롯 값을 한 번에 가져오거든요. 새로 만들 게 아니라 이미 있는 묶음 조회를 얹는 일이었습니다.
검증
- e2e 스펙 3개(
std-data-tab-names·dataset-list-scope-filter·std-data-axis-tabs)의 기대값을 되돌린 이름으로 갱신하고,dataset-list-scope-filter에는 평평해진 선택지와전체 개념체계줄 테스트를 새로 넣었습니다. 이름이 하드코딩돼 있어서 되돌릴 때 같이 빨개지는 자리예요 — 이게 이름 변경의 실제 비용입니다. - 홈은 테스트를 한 건 추가했습니다. 슬롯에 한글 제목을 넣은 인스턴스가 표제로 그 제목을, 툴팁으로 영문명을 갖는지 확인해요.
남은 것 · 한계
- 이틀 만에 뒤집었습니다. 탭과 칸에 하나씩은 근거 있는 이름을 줬는데, 한 축이 세 이름으로 불리게 된다는 걸 합쳐서 보지 않은 게 원인입니다.
정보 주제는 아직 화면에 남아 있습니다. 되돌린 건 검색 화면의 탭과 필터 칸이고, 되돌린 커밋 시점에도 관계도의 2차 그룹·범례와 OID 화면의 정보 행·이용안내에는 같은 축이정보 주제로 적혀 있었어요. 이름은 한 곳에 있는 게 아니라서, 이번에 손댄 범위 밖에서는 두 이름이 같이 삽니다.- 정렬이 말없이 빠졌습니다. 위에 적은 대로입니다. 0건 개념의 위치를 어떻게 할지는 아직 정하지 않았어요.
- 옛 주소와 새 주소가 같이 삽니다. 칸이 만드는 조건은
concept_ids하나지만 서버는scheme_ids도 계속 받습니다. 옛 링크를 살려 두려는 것인데, 받는 쪽이 둘인 상태가 언제까지인지는 정해 두지 않았습니다. - 홈의 영문명은 툴팁에만 있습니다. 마우스를 올려야 보이니 터치 환경에서는 영문 식별자로 찾을 방법이 홈에 없어요. 그 자리는 목록 화면이 담당한다고 보고 넘어갔습니다.
- 세 자리 모두 크지 않은 정리입니다. 다만 같은 주에 화면의 낱말이 가리키는 대상과 어긋난 자리를 세 번 마주쳤고, 그때마다 낱말을 대상에 맞추는 선택을 했습니다.
관련 글: 탭의 '전체'는 조건 없음이 아니라 합집합이었다2026-09-04탭의 '전체'는 조건 없음이 아니라 합집합이었다 — 한 낱말의 세 가지 뜻과 11분 만에 뒤집은 결정카탈로그 탭과 개념체계 탭이 하루 사이에 카탈로그 카드 목록에서 다시 표준데이터 목록으로 돌아왔습니다. 그러자 첫 칸의 "전체"가 무슨 뜻인지가 문제가 됐어요. 조건 없음이면 카탈로그 밖 데이터까지 세고, 첫 뿌리 하나면 나머지 뿌리가 안 보입니다. 뿌리 전부의 합집합으로 정했는데, 그 결정을 내리기 11분 전에는 첫 뿌리 하나로 커밋해 둔 상태였습니다. · 용어 하나를 96개 파일 667곳에서 바꿨다2026-08-13용어 하나를 96개 파일 667곳에서 바꿨다 — 그리고 일부러 안 바꾼 세 경계화면에서 쓰는 용어가 분류체계에서 개념체계로 바뀌었습니다. 템플릿·뷰·매니저·폼·JS·e2e·문서까지 96개 파일 667곳을 치환했는데, 정작 중요한 판단은 어디서 멈출지였어요. 코드 식별자·URL·DB 데이터 값 세 곳은 일부러 안 건드렸고, 그 대가로 코드와 화면이 서로 다른 말을 하게 됐습니다. · 홈 화면의 준비 중 타일을 지웠다2026-08-05홈 화면의 "준비 중" 타일을 지웠다 — 세는 대상이 처음부터 틀려 있었다홈 "데이터 현황"에 물리 아키텍처만 "준비 중"으로 있었습니다. 데이터를 붙이려고 기존 집계 함수를 열어보니 ASN.1 데이터셋을 세고 있었어요. 화면이 말하는 것과 다른 것을 세고 있었던 겁니다. 같이 정리한 퀵메뉴에서는 카드 폭을 flex-1로 두면 안 되는 이유를 만났습니다. · 필터 선택지 옆 건수를 어느 모집단으로 셀 것인가2026-09-04필터 선택지 옆 건수를 어느 모집단으로 셀 것인가 — 걸린 조건에서 세면 나머지가 전부 0건통합 검색의 카탈로그·개념체계 칸을 셀렉트에서 접이식 트리 드롭다운으로 바꾸고 선택지마다 건수를 붙였습니다. 건수는 "고르면 몇 건이 나오나"인데, 지금 걸린 조건 안에서 세면 고른 항목만 남고 나머지는 전부 0건이 돼요. 세는 모집단에서 범위 조건을 뺐고, 체크 즉시 조회하던 걸 같은 날 패널을 닫을 때 한 번으로 바꿨습니다.