- 발행일
검색 화면 시안 넷을 만들었고 여덟 달 뒤 전부 지워졌다 — 시안이 남긴 것과 남기지 못한 것
검색 화면 시안 넷을 만들었고 여덟 달 뒤 전부 지워졌다
이 글은 2026년 9월에 당시 커밋 이력을 다시 보며 정리한 것입니다. 날짜는 작업한 날 기준입니다.
2025년 7월 말, 표준데이터를 찾는 화면이 필요했습니다. 어떤 모양이어야 하는지는 정해져 있지 않았어요. 검색어 하나로 찾는 건지, 분류를 타고 내려가는 건지, 조건을 여러 개 거는 건지.
정하지 못한 채로 화면을 먼저 만들기로 했습니다. 7월 29일에 search라는 앱을 새로 만들고, 그 안에 가짜 데이터로 시안을 그리기 시작했습니다.
urlpatterns = [
# 검색 가짜 데이터 진행
path("", search.search, name="search"),
]
시안 넷
| 날짜 | 파일 | 줄 | 모양 |
|---|---|---|---|
| 7/29 | chip-filter-search.html.j2 | 139 | 검색어를 치면 칩이 붙고, 칩을 눌러 조건을 빼는 형태 |
| 7/29 | cascading-data-filter-search.html.j2 | 96 | 상위 분류를 고르면 하위 목록이 바뀌는 단계식 |
| 7/31 | dropdown-search-filter-with-checkbox.html.j2 | 164 | 드롭다운 안에 체크박스를 넣어 여러 개 고르는 형태 |
| 8/5→8/8 | advanced-filter-checkbox.html.j2 | 107→452 | 고급 필터 패널을 펼쳐 전체 선택·해제하는 형태 |
전부 TemplateView 하나에 템플릿만 바꿔 끼운 구조였고, 데이터는 템플릿 안에 박아 둔 목록이었습니다. 네 번째 시안은 사흘 사이 107줄에서 452줄로 늘었는데, 검색 결과 건수 표시·전체 선택·초기화 버튼까지 그 안에서 다 그려 봤기 때문입니다.
<button id="filter-toggle-btn" type="button" class="primary w-[5rem]">
고급 필터
</button>
...
<!-- 검색 결과 카운트 표시 -->
<div class="flex justify-start items-center mb-4">
<div class="result-count">
검색 결과: <span id="result-count">0</span>개
</div>
</div>
시안을 만들면서 Search라는 모델도 만들었습니다. 이름·URL·공개 여부 필드 넷이고, 나중에는 마이그레이션까지 생겼어요. 시안 화면은 그 모델을 한 번도 읽지 않았어요. 모양을 보려고 만든 앱에 모델부터 만든 것인데, 왜 그랬는지는 커밋에 없습니다. 다른 앱의 모델 파일을 복사해 시작한 흔적으로 보입니다.
열흘 뒤 — 셋은 살고 하나는 남았다
8월 20일, 팀원이 "검색 기능 구현 initial commit"으로 실제 검색을 시작했습니다. 그날 두 번째 커밋이 제 시안 셋에 데이터를 붙였습니다.
class searchChipView(TemplateView):
template_name = "search/common/chip-filter-search.html.j2"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['dataset_titles'] = DatasetManager.get_all_titles()
return context
칩 시안에는 데이터셋 제목 목록이, 드롭다운 시안에는 카탈로그 필터 데이터가, 단계식 시안에는 분류체계 데이터가 들어갔습니다. 메뉴에도 "단어 기반 검색·필터 기반 검색·계층 기반 검색" 셋이 올라갔어요.
네 번째 시안, 사흘 동안 452줄까지 키운 고급 필터 체크박스는 끝내 데이터가 연결되지 않았습니다. 그 뒤로 그 파일을 건드린 커밋 넷은 구조 정리·문구·테두리뿐이고, 뷰에 데이터를 붙인 커밋은 없어요. 가장 공을 들인 시안이 가장 먼저 쓸모를 잃었습니다.
그 뒤 두 달은 제가 검색 화면의 테두리·정렬·아코디언을 손보고 팀원이 쿼리와 링크를 고치는 식으로 갈렸습니다. 이때부터 화면은 제 것이고 데이터는 팀원 것이라는 분업이 생겼는데, 이 분업의 대가는 한계에 적었습니다.
여덟 달 뒤 — 내가 지웠다
2026년 3월 28일, 제가 올린 커밋 하나가 search 앱을 통째로 지웠습니다.
4차년도 인프라·모델 기반 구축
- Tailwind CSS 통합, search 앱·미사용 패키지 제거
...
136 files changed, 2897 insertions(+), 4246 deletions(-)
시안 넷, 뷰 186줄, 모델, 마이그레이션이 한 줄 "search 앱 제거"로 사라졌습니다. 검색은 표준데이터 앱 안의 통합검색으로 옮겨 갔고, 그 통합검색도 다섯 달 뒤 다시 걷혔습니다. 그 이야기는 별도 글2026-08-23검색 화면 하나를 지우면서 파일 36개를 건드렸다 — 무엇을 남길지가 더 어려웠다검색 화면이 둘이었는데 하나로 수렴해서 통합검색을 걷어냈습니다. 2102줄을 지우는 건 쉬웠고, 어려운 건 무엇을 남길지였어요. 호출자가 테스트만 남은 매니저 메서드는 지웠고, 3줄짜리 껍데기 안의 알맹이는 남겼고, 폐지된 화면이 남긴 검색 기록은 집계에서 안 떨어뜨렸습니다.에 있습니다.
지우는 건 제가 했는데, 136개 파일짜리 커밋 안에서였습니다. 시안 넷 중 무엇이 최종 화면에 살아남았는지를 코드로 이을 수 없는 이유가 이겁니다. 삭제된 파일과 새로 만든 파일 사이에 이름도 구조도 다르고, 그 사이를 설명하는 커밋 메시지가 한 줄뿐이니까요.
시안이 남긴 것
지금 화면을 보면 검색어 칩은 있고, 분류를 타고 내려가는 드롭다운도 있고, 조건마다 칩 하나씩 붙어서 ×로 빼는 것도 있습니다. 2025년 7월 시안에 있던 모양들입니다. 하지만 그게 시안에서 온 건지 1년 뒤 목업에서 온 건지 저도 구분 못 합니다.
시안이 확실히 남긴 건 하나입니다. 팀원이 실제 검색을 만들 때 화면 모양을 새로 정하지 않아도 됐다는 것. 8월 20일 커밋이 뷰에 데이터 세 줄씩만 붙이고 끝난 게 그 증거입니다.
남기지 못한 건, 왜 그 넷이었는지입니다. 네 가지 모양을 비교한 기록이 없어요. 만들어 보고 눈으로 고른 겁니다.
검증
- 당시 검증은 브라우저에서 네 화면을 열어 본 것이 전부입니다. 가짜 데이터라 검색이 실제로 되는지는 볼 수 없었습니다.
- 이 글을 쓰며 확인한 것: 네 파일의 생성·수정 이력(
git log --follow), 팀원의 데이터 연결 커밋에서 뷰 diff, 삭제 커밋의 파일 목록과 저자. - 네 번째 시안에 데이터가 끝내 안 붙었다는 건, 그 파일을 건드린 커밋이 8월 8일 이후 넷이고 넷 다 뷰를 안 건드렸다는 것으로 확인했습니다.
남은 것 · 한계
- 시안 단계에서 모델과 마이그레이션을 만든 건 과했습니다. 지울 때 DB 테이블까지 따라 지워야 했습니다.
- 화면은 나, 데이터는 팀원이라는 분업은 빨랐지만, 그 결과 저는 검색이 실제로 어떤 쿼리를 도는지 여덟 달 동안 몰랐습니다. 2026년에 검색 화면을 다시 만들 때 모집단과 건수 문제를 처음부터 겪은 이유 중 하나가 이겁니다.
- 시안을 지운 커밋이 136개 파일짜리라, 다음 사람이 "검색 시안이 있었다"는 사실 자체를 알 방법이 이 글밖에 없습니다.
- 네 모양을 비교한 기준을 그때 한 줄이라도 적었다면 1년 뒤 목업 대조 때 다시 썼을 텐데, 없습니다.
관련 글: 검색 화면 하나를 지우면서 파일 36개를 건드렸다 — 무엇을 남길지가 더 어려웠다2026-08-23검색 화면 하나를 지우면서 파일 36개를 건드렸다 — 무엇을 남길지가 더 어려웠다검색 화면이 둘이었는데 하나로 수렴해서 통합검색을 걷어냈습니다. 2102줄을 지우는 건 쉬웠고, 어려운 건 무엇을 남길지였어요. 호출자가 테스트만 남은 매니저 메서드는 지웠고, 3줄짜리 껍데기 안의 알맹이는 남겼고, 폐지된 화면이 남긴 검색 기록은 집계에서 안 떨어뜨렸습니다. · Figma 44프레임을 코드와 대조하기 — "다르다"와 "틀렸다"를 나누는 일2026-05-10Figma 44프레임을 코드와 대조하기 — "다르다"와 "틀렸다"를 나누는 일디자인과 화면이 조금씩 다른데 뭐가 틀린 건지 모르겠다는 상태를 정리하려고, Figma 44프레임을 코드와 전수 대조해 리포트를 만들었습니다. 핵심은 차이를 찾는 게 아니라 "의도적 조정"과 "결함"을 가르는 규칙이었어요. 그리고 2.5개월 뒤에 확인해보니 HIGH 4건 중 2건이 아직 미반영입니다. · 분류 칩 하나를 네 번 갈아엎었다 — URL 값 0이 falsy라서 생긴 일2026-08-03분류 칩 하나를 네 번 갈아엎었다 — URL 값 0이 falsy라서 생긴 일표준데이터 목록에 분류 칩을 붙이는 데 나흘간 네 번 갈아엎었습니다. 3분류 → 4분류 → 문자 코드를 숫자로 → 미분류 칩 추가. 마지막에 "미분류"의 저장 코드가 0인데 "전체"도 0을 쓰고 있어서, 미분류를 고르면 전체가 나오는 문제를 만났어요. falsy 하나 때문에 URL 값과 저장 코드를 갈라야 했습니다. · 인기 검색어를 주석 처리했다2025-11-15인기 검색어를 주석 처리했다 — 하드코딩 단어 목록을 석 달 반 만에 내렸다홈 화면에 인기 검색어 칩 다섯 개를 달았습니다. 실제로는 템플릿에 박아 둔 단어 다섯 개였어요. 석 달 반 뒤 "명확한 기준이 있어야 한다"는 메시지와 함께 주석 처리했습니다. 실제 검색 기록으로 세는 화면은 그로부터 여덟 달 뒤에야 생겼습니다. 값의 출처를 못 답하는 채로 화면부터 그린 기록입니다. · 55개 파일의 회색을 처음 통일했다2025-09-1955개 파일의 회색을 처음 통일했다 — 그때는 대비를 재지 않았다입사 다섯 달째, 화면마다 제각각이던 표 정렬과 보조 제목과 회색을 55개 파일에서 한 번에 손봤습니다. 회색은 400을 500으로 올렸는데, 그때는 대비 수치를 재지 않고 눈으로 골랐어요. 1년 뒤 대비 감사를 하면서 같은 회색이 다시 도마에 올랐고, 그날 고른 값이 우연히 기준선과 같았다는 걸 알았습니다.