-
테스트 44개가 다 초록인데, 가렸어야 할 게 새고 있었어요AI Agent 2026. 6. 24. 21:00728x90반응형

올리기 직전에, 그냥 눈으로 한 번만 보려고 진짜 데이터로 화면을 켰어요.
그 칸을 보는데 손이 멈췄어요.
분명 "이 사람한테는 내 실시간 정보 가리기"가 켜져 있는 계정이었거든요.
특정 뷰어한테는 사용자의 실시간 상태가 안 보여야 하는 화면이었어요.
그게 제가 작업한 거였고요.
그런데 가렸어야 할 그 한 줄이, 그 칸에 그냥 떠 있더라고요.테스트는 44개가 전부 초록이었어요.
화면은 아니라고 말하고 있는데.처음엔 제 눈을 의심했어요.
새로고침도 해보고, 계정도 다시 확인했어요.
가리기 켜진 거 맞고, 안 보여야 하는 정보 맞고.
근데 보여요.
44개가 다 초록인데 어떻게 이게 새지, 하면서 한참을 멍하니 봤어요.한 줄 막았더니, 더 큰 게 보였어요
원인은 허무했어요.
가리는 로직이 어떤 한 부류는 그냥 무조건 통과시키고 있었거든요.
가리기 켰는지 껐는지 보지도 않고요.
그 경로 하나가 필터를 통째로 비껴가 있었던 거예요.그 한 줄을 막고 다시 화면을 켰어요.
사라졌더라고요.
됐다 싶었죠.근데 등 뒤가 좀 서늘해서, 올리기 전에 응답을 통째로 한 번 펼쳐봤어요.
화면 위쪽 한 줄 말고, 그 사람 데이터 묶음 전체를요.
그제야 알았어요.
제가 막은 건 아까 화면에서 눈으로 본 딱 그 한 줄이었고, 같은 묶음 안에 비슷하게 민감한 항목이 네다섯 개나 더 멀쩡히 실려 나가고 있었어요.
누적 수치 같은 거요.
화면 위쪽에 안 떠서 제가 못 봤을 뿐이지, 응답에는 다 있었어요.그러니까 제 첫 픽스는 "보이는 누수"만 막은 거였어요.
안 보이는 나머지는 그대로 흘리면서.여기서 진짜 식은땀이 났어요.
그럼 테스트 44개는 그동안 대체 뭘 보고 초록불을 켜준 거지.시험 범위를 내가 아는 한 문제로 좁혀놓고 만점 받은 거였어요
테스트를 다시 열었는데, 답이 거기 있더라고요.
테스트가 쓰는 가짜 데이터에는, 제가 처음에 누수를 본 바로 그 항목 하나만 값이 채워져 있었어요.
나머지 민감 항목들은 아예 비어 있었고요.
그러니 테스트는 "그 한 항목이 응답에서 빠졌나?"만 보고 초록을 줬던 거예요.
빈 항목은 빠지든 말든 어차피 빈 값이니까, 검사에 걸릴 일이 없었고요.쉽게 말하면 시험 범위를 제가 아는 한 문제로 좁혀놓고 만점 받은 거랑 같아요.
나머지 문제는 시험지에 실리지도 않았으니까요.44개가 다 초록이었던 건, 그 44개가 전부 제가 본 그 한 필드를 중심으로 짜여 있어서였어요.
픽스처도 그 한 필드만 채웠고, 단언도 그 한 필드만 봤고.
저는 "민감 정보가 안 샌다"를 검사하고 있다고 믿었는데, 실제로 검사하던 건 "내가 이미 발견한 그 누수가 재발 안 한다"였던 거예요.
둘이 완전히 다른 말이더라고요.
픽스처가 통과를 줬지, 가려야 한다는 약속이 지켜졌다는 걸 증명한 게 아니었어요.그래서 검사 기준을 통째로 바꿨어요
진짜 픽스는 새는 줄 하나 더 막는 게 아니었어요.
뭘 검사하느냐를 바꾸는 거였어요.가려야 할 항목을 다시 적었는데, 이번엔 화면에서 눈으로 본 필드 말고 모델 정의를 직접 펴서 거기 적힌 민감 카테고리 전부로요.
그렇게 빼야 할 세트를 코드에 명시적으로 박아두니까, 거기서 빠진 게 곧 누수라는 게 눈에 드러났어요.
그다음이 진짜였는데, 테스트 픽스처가 그 카테고리의 모든 필드를 다 채우도록 고쳤어요.
한 칸이라도 응답에 새어 나가면 픽스처에 값이 있으니까 단언이 깨지게요.
빈 값으로 통과를 도둑맞는 일이 더는 안 일어나도록.이게 쇼핑몰 영수증 가리기랑 비슷하더라고요.
카드번호 한 칸만 별표로 가려놓고 "민감정보 가림 완료" 한 거예요.
정작 같은 영수증에 주소랑 전화번호는 그대로 찍혀 나가는데.
가린 칸 하나만 보고 다 가렸다고 믿은 거죠.지금 남은 것
이제 "안 보여야 하는" 기능을 짤 때는 픽스처부터 의심해요.
빼는 단언을 짜기 전에 "이 픽스처가 카테고리 전체를 채우고 있나?"부터 보고요.
한 칸만 채워진 픽스처는 그 위에 검사를 백 개 쌓아도 결국 한 칸짜리 검사거든요.
개수는 안심을 주는데, 정작 보고 있는 면적은 안 넓혀주더라고요.근데 솔직히 그날 저를 살린 건 검사가 아니라, 그냥 진짜 데이터로 화면을 한 번 켜본 거였어요.
그게 좀 마음에 안 들어요.
운이었잖아요.
44개 초록불을 다 믿었으면 그대로 올렸을 거고, 누군가의 가려놓은 정보가 남한테 보였을 거예요.아직 못 푼 게 하나 있어요.
카테고리에 새 필드가 추가되면, 픽스처랑 빼는 세트가 자동으로 같이 늘어나게는 못 만들었거든요.
지금은 사람이 모델 정의 보고 손으로 맞춰 적는 구조라, 누가 필드 하나 추가하면서 픽스처를 안 건드리면 그 필드는 또 조용히 검사 밖으로 빠질 거예요.
그날 저를 살린 그 한 줄이 결국 운이었던 것처럼요.
다음엔 그 목록을 한 곳에 묶어두고 거기서 같이 끌려오게 만들 생각인데, 오늘은 일단 가리는 화면 손댈 때마다 진짜 데이터로 한 번 켜보는 걸로 버티는 중이에요.728x90반응형'AI Agent' 카테고리의 다른 글
줄 번호 대보라니까, 스무 개 중에 한 개도 못 대더라고요 (0) 2026.06.25 동료가 PR에 "이거 그냥 부탁이잖아요" 한 줄을 달았어요 (0) 2026.06.25 4.3만 건을 기억하는데, 언제 무슨 일이 있었는지는 몰랐어요 (0) 2026.06.24 한 달 전에 만든 기록 폴더를 열었더니, 안에 .gitkeep 하나뿐이었어요 (0) 2026.06.23 빠르겠다고 동시에 던졌더니, 에이전트들이 서로를 밟고 있었어요 (1) 2026.06.23