JEY'S BUILDLOG
NowLogProjectsAboutUses

JEY'S BUILDLOG

끊임없이 짓고 기록하는 공간, 제이의 빌드로그

개인정보처리방침 (Privacy Policy)

© 2026 JEY'S BUILDLOG. All rights reserved.

←Log 목록
보안🔬 AX 케이스 스터디2026. 07. 06.

편법 2건을 걷어내고 정석으로 다시 세운 보안 구조

🔴 Before (문제 상황)

①②의 편법(무단 계정 생성, 서비스 롤 우회)이 발견된 뒤, 정식 오픈 전 보안 구조 전체를 재검토해야 했다. 어드민 세션이 퍼블릭 페이지에서 새어나갈 가능성, ISR(revalidate=60)이 동적 렌더링에 의해 무력화되는 문제 등 겉으로는 드러나지 않는 리스크가 남아있었다.

🟢 After (해결/결과)

createPublicClient(쿠키 미포함 anon)로 전환해 어드민 세션 노출과 ISR 무력화 문제를 동시에 해결했다. RLS 정책을 모든 CRUD(문의 삭제 포함)에 대해 dev/prod 양쪽에 동일하게 적용했고, 서비스 롤은 프로젝트에서 완전히 제거했다. 이 모든 변경을 docs/SECURITY_CHECKLIST.md에 기록한 뒤 develop→main 머지, Vercel Production 배포까지 완료했다.

보안을 다시 설계하고 정식 오픈까지

🧐 재설계 근거 (Why)

보안 문제 하나를 고치다 보면 다른 문제가 같이 풀리는 경우가 있다. createPublicClient 전환이 그 예시였다 — 세션 노출과 ISR 문제가 사실은 같은 원인(쿠키 포함 클라이언트 사용)에서 나온 것이었다. 개별 증상을 하나씩 패치하기보다, 근본 원인을 찾아 구조를 바꾸는 것이 더 적은 코드로 더 많은 문제를 해결했다.

💡 재현 가능성 (Replicability)

"증상이 여러 개면 원인이 하나일 수 있다"는 이 패턴은 보안 이슈뿐 아니라 일반적인 디버깅에도 적용 가능하다. 여러 버그를 개별적으로 패치하기 전에, 공통 원인이 있는지 먼저 확인하는 습관이 이번 프로젝트에서 재사용 가능한 자산이 되었다.

← 이전 글서비스 롤 키, 빠른 길이었지만 잘못된 길이었다