- 발행일
인기 검색어를 주석 처리했다 — 하드코딩 단어 목록을 석 달 반 만에 내렸다
인기 검색어를 주석 처리했다
이 글은 2026년 9월에 당시 커밋 이력을 다시 보며 정리한 것입니다. 날짜는 작업한 날 기준입니다.
2025년 8월 1일, 홈 화면 검색창 아래에 인기 검색어 칩을 달았습니다. #인공지능 같은 알약 모양 링크가 다섯 개 늘어서고, 누르면 그 단어로 검색이 되는 흔한 형태입니다.
그 다섯 단어의 출처가 이랬습니다.
{% set popular_keywords = ["인공지능", "데이터셋", "디지털 트윈", "교통", "기후"] %}
템플릿 안에 박아 둔 목록입니다. 누가 무엇을 검색했는지 세는 코드는 없었고, 검색 기록을 남기는 테이블도 없었습니다. 홈 화면 시안을 채우려고 그럴듯한 단어를 고른 거예요.
석 달 반 뒤
11월 15일 토요일 저녁, 이 블록을 주석으로 감쌌습니다. 그 사이 목록은 "표준데이터", "메타데이터", "데이터셋" 같은 일곱 단어로 바뀌어 있었는데, 출처가 템플릿 안이라는 건 그대로였어요.
- <div class="mt-[.75rem] flex flex-wrap gap-[.5rem]">
- <p class="text-white mt-[.5rem]">인기검색어: </p>
- {% for keyword in popular_keywords %}
+{# <div class="mt-[.75rem] flex flex-wrap gap-[.5rem]">#}
+{# <p class="text-white mt-[.5rem]">인기검색어: </p>#}
+{# {% for keyword in popular_keywords %}#}
커밋 메시지는 이렇습니다.
1. 인기 검색어 주석 처리 : 나중에 인기 검색어에 대한 명확한 기준이 있어야 함
"명확한 기준"이 무엇인지는 적지 않았습니다. 지금 읽으면 두 가지로 나뉩니다. 하나는 무엇을 세어 인기라고 부를 것인가(검색 횟수인지, 결과를 클릭한 횟수인지, 기간은 얼마인지). 다른 하나는 셀 데이터가 아직 없다는 것. 어느 쪽이 더 컸는지는 커밋에 없습니다.
그날 저녁에 번호를 매겨 커밋 여섯 개를 올렸는데, 다 같은 종류였습니다. 홈 화면 분류 타일이 다섯 개였는데 실제 분류가 셋뿐이라 둘을 지웠고(9815dca4), 표준데이터 등록 절차를 여섯 단계 글로 써 둔 것을 순서도 이미지 한 장으로 바꿨습니다(a526ce57). 전부 화면에 먼저 그려 놓고 나중에 "이거 진짜인가"를 물은 것들이에요.
{% set category_list = [
- {"title": _("차량융합"), "img": "img/icn_vehicle_white_64px.svg"},
- {"title": _("ICT 융합"), "img": "img/icn_ict_white_64px.svg"},
{"title": _("도로교통 융합"), "img": "img/icn_traffic_white_64px.svg"},
지우지 않고 주석 처리한 이유
삭제하지 않고 {# … #}로 감싼 건, 다시 켤 생각이었기 때문입니다. 마크업과 링크 구조는 맞다고 봤고, 값만 진짜로 바꾸면 된다고 생각했어요. 그 판단 자체는 틀리지 않았습니다. 여덟 달 뒤에 실제로 그 자리에 검색어 랭킹이 돌아왔으니까요.
다만 주석 블록은 그 여덟 달 동안 아무 일도 하지 않았고, 2026년 3월 말 홈 화면 전면 정비 때 주석째 사라졌습니다. 되살릴 때 이 주석을 참고한 흔적은 없습니다. "나중에 쓰려고 남긴 코드"는 나중에 안 쓰였습니다.
여덟 달 뒤
2026년 7월 20일, 통합검색 빈 화면에 검색어 상위 랭킹을 붙였습니다. 이번에는 값의 출처가 있었어요. 방문 로그에 남은 search_keyword 파라미터를 세서 상위 10개를 보여 주는 방식입니다. 오타를 거르려고 두 번 이상 검색된 것만 세고, 데이터 통계 화면의 워드클라우드도 같은 집계를 씁니다. 8월에는 팀원이 검색어 수집 테이블을 따로 만들었고요.
그 글에서 "이 화면이 없으면 못 아는 게 뭔가"로 화면의 성격을 다시 정했다고 썼습니다. 2025년 8월의 인기 검색어 칩은 그 질문에 답이 없는 화면이었습니다. 없어도 아무도 못 아는 게 없었어요. 그래서 내렸고, 답이 생긴 뒤에 다시 올렸습니다.
검증
- 주석 처리 뒤 홈 화면에서 칩이 사라진 것을 눈으로 봤습니다. 그게 전부입니다.
- 이 글을 쓰며 확인한 것: 8월 1일 커밋의 하드코딩 목록, 11월 15일 커밋 6개의 순서와 내용,
-S '인기 검색어'로 이 문자열이 저장소에서 늘고 준 커밋 일곱 개. - 2026년 7월 랭킹 화면이 방문 로그를 세는 방식이라는 건 그 커밋의 매니저 코드에서 확인했습니다.
남은 것 · 한계
- 8월 1일에 하드코딩으로 올린 것 자체가 문제였습니다. 석 달 반 동안 운영 홈 화면에 가짜 인기 검색어가 떠 있었습니다. 그 사이 누가 그걸 눌렀는지는 로그가 없어 모릅니다.
- "명확한 기준"을 커밋에 한 줄이라도 적었다면 여덟 달 뒤 랭킹을 만들 때 그 기준에서 시작했을 텐데, 그때 기준을 처음부터 다시 정했습니다.
- 주석 처리는 삭제를 미룬 것이었고, 결국 참고되지 않은 채 지워졌습니다. 다음에 같은 상황이면 지우고 커밋 메시지에 이유를 남기는 쪽이 낫습니다.
- 같은 날 지운 분류 타일 둘("차량융합", "ICT 융합")은 왜 실제 분류에 없었는지 확인하지 않았습니다. 시안 단계의 이름이 그대로 남아 있던 것으로 보이지만 근거는 없습니다.
관련 글: 아무도 안 묻는 질문에 답하던 화면 — 워드클라우드를 검색어 빈도로2026-07-21아무도 안 묻는 질문에 답하던 화면 — 워드클라우드를 검색어 빈도로ASN.1 노드 단어를 세어 서버에서 PNG로 그려주던 워드클라우드를, 통합검색 검색어를 세어 클라이언트에서 그리는 화면으로 바꿨습니다. 화면의 성격을 "무엇이 등록됐나"에서 "무엇을 찾았나"로 옮긴 결정과, 같은 집계를 두 군데 두는 바람에 같은 검색어가 화면마다 다른 비율로 보이게 된 이야기입니다. · 홈 화면의 "준비 중" 타일을 지웠다 — 세는 대상이 처음부터 틀려 있었다2026-08-05홈 화면의 "준비 중" 타일을 지웠다 — 세는 대상이 처음부터 틀려 있었다홈 "데이터 현황"에 물리 아키텍처만 "준비 중"으로 있었습니다. 데이터를 붙이려고 기존 집계 함수를 열어보니 ASN.1 데이터셋을 세고 있었어요. 화면이 말하는 것과 다른 것을 세고 있었던 겁니다. 같이 정리한 퀵메뉴에서는 카드 폭을 flex-1로 두면 안 되는 이유를 만났습니다. · 화면이 없어진 기능을 설명하고 있었다 — 소개·가이드 전면 현행화2026-08-03화면이 없어진 기능을 설명하고 있었다 — 소개·가이드 전면 현행화서비스 소개 페이지가 "상세검색·기관·유형·태그 필터"를 설명하고 있었는데, 그 필터는 진작 없어졌습니다. 도입 배경은 4차 산업혁명·D.N.A·ICBM 같은 몇 년 지난 문구였고요. RFP와 연차보고서를 근거로 다시 썼습니다. 같은 축에서 읽기 전용 화면의 "필수 *" 표기도 걷어냈는데, 그건 이틀 전 제가 적은 규칙을 뒤집는 일이었습니다. · 검색 화면 시안 넷을 만들었고 여덟 달 뒤 전부 지워졌다2025-08-08검색 화면 시안 넷을 만들었고 여덟 달 뒤 전부 지워졌다 — 시안이 남긴 것과 남기지 못한 것입사 넉 달째, 검색 화면이 어떤 모양이어야 할지 정해진 게 없어서 가짜 데이터로 시안 넷을 만들었습니다. 열흘 뒤 팀원이 그중 셋에 실제 데이터를 연결했고, 하나는 끝내 연결되지 않았어요. 여덟 달 뒤 제가 그 앱을 통째로 지웠습니다. 시안이 최종 화면에 무엇을 남겼는지는 코드로 이을 수 없었습니다.