웹 개발
배포 후 권한 문제로 데이터가 사라진 상황 대처
웹 애플리케이션 배포 후 권한 설정 미스로 인한 데이터 접근 불가 문제를 해결하는 과정.
운영 중에 작은 이상 신호를 빨리 분리해서 봐야 한다. 배포 후 일부 사용자의 데이터가 안 보인다면 권한 설정이나 캐시 문제일 가능성이 높다.
첫 번째 단서: 사용자 영향 범위
문제가 전체 사용자에게인지, 특정 사용자만 영향 받는지 빠르게 파악한다.
- 모든 사용자: 데이터베이스나 서버 문제일 가능성
- 특정 사용자: 권한이나 계정 관련 문제
- 배포 직후: 코드 변경이나 마이그레이션 실패 가능성
이 정보만으로도 조사 방향이 크게 달라진다.
로그 확인
애플리케이션 로그와 데이터베이스 로그를 동시에 본다.
npm run build # 빌드 과정에서 에러가 있었는지 확인
# 데이터베이스 권한 확인
psql "$DATABASE_URL" -c "\du+"
로그에서 다음을 주목한다:
- Permission denied 에러
- 데이터베이스 연결 실패
- NULL 또는 빈 응답
- 타임아웃
설정 확인
배포 시 환경 변수나 설정이 제대로 적용됐는지 확인한다.
# 배포된 환경 변수 확인 (서버에서)
env | grep DATABASE
env | grep API
배포 도구(Docker, Kubernetes 등)에서 환경 변수를 제대로 주입했는지, 기존 설정과 새 설정이 충돌하지 않는지 검토한다.
브라우저에서 직접 확인
Network 탭에서 API 응답을 본다.
- 개발자 도구 → Network 탭
- 데이터를 요청하는 API 호출 찾기
- 응답 코드 확인 (200 vs 403 vs 500)
- 응답 본문에 데이터가 있는지 확인
응답 코드가 403이면 권한 문제고, 200인데 데이터가 없으면 쿼리 문제다.
캐시 문제 배제
배포 후 구 버전이 캐시에 남아 있을 수 있다.
# 브라우저 캐시 비우기
# Ctrl+Shift+Delete (또는 개발자 도구에서)
# 서버 캐시 확인 (Redis 등)
redis-cli keys "*" | wc -l
redis-cli FLUSHDB # 필요시만
권한 복구
데이터는 있지만 권한이 없다면 접근 권한을 복구해야 한다.
# 사용자의 역할 확인
psql "$DATABASE_URL" -c "SELECT * FROM user_roles WHERE user_id = 'problem_user';"
# 필요시 권한 추가
psql "$DATABASE_URL" -c "INSERT INTO user_roles VALUES ('problem_user', 'admin');"
코드 수준에서도 권한 체크 로직을 검토해야 한다. 마이그레이션이나 배포 과정에서 권한 칼럼의 기본값이 변경되었을 수도 있다.
재발 방지
문제를 해결한 후에는 다음을 정리한다:
- 정확히 어떤 설정이 잘못되었는가?
- 어떻게 다시 발생을 방지할 것인가?
- 비슷한 문제가 생기면 어떤 순서로 확인할 것인가?
배포 직전에 권한 설정 체크리스트를 만들어두면 다음 번에는 더 빠르게 대응할 수 있다.