← 전체 글로 돌아가기

웹 개발

배포 후 권한 문제로 데이터가 사라진 상황 대처

웹 애플리케이션 배포 후 권한 설정 미스로 인한 데이터 접근 불가 문제를 해결하는 과정.

운영 중에 작은 이상 신호를 빨리 분리해서 봐야 한다. 배포 후 일부 사용자의 데이터가 안 보인다면 권한 설정이나 캐시 문제일 가능성이 높다.

첫 번째 단서: 사용자 영향 범위

문제가 전체 사용자에게인지, 특정 사용자만 영향 받는지 빠르게 파악한다.

  • 모든 사용자: 데이터베이스나 서버 문제일 가능성
  • 특정 사용자: 권한이나 계정 관련 문제
  • 배포 직후: 코드 변경이나 마이그레이션 실패 가능성

이 정보만으로도 조사 방향이 크게 달라진다.

로그 확인

애플리케이션 로그와 데이터베이스 로그를 동시에 본다.

npm run build  # 빌드 과정에서 에러가 있었는지 확인

# 데이터베이스 권한 확인
psql "$DATABASE_URL" -c "\du+"

로그에서 다음을 주목한다:

  • Permission denied 에러
  • 데이터베이스 연결 실패
  • NULL 또는 빈 응답
  • 타임아웃

설정 확인

배포 시 환경 변수나 설정이 제대로 적용됐는지 확인한다.

# 배포된 환경 변수 확인 (서버에서)
env | grep DATABASE
env | grep API

배포 도구(Docker, Kubernetes 등)에서 환경 변수를 제대로 주입했는지, 기존 설정과 새 설정이 충돌하지 않는지 검토한다.

브라우저에서 직접 확인

Network 탭에서 API 응답을 본다.

  1. 개발자 도구 → Network 탭
  2. 데이터를 요청하는 API 호출 찾기
  3. 응답 코드 확인 (200 vs 403 vs 500)
  4. 응답 본문에 데이터가 있는지 확인

응답 코드가 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');"

코드 수준에서도 권한 체크 로직을 검토해야 한다. 마이그레이션이나 배포 과정에서 권한 칼럼의 기본값이 변경되었을 수도 있다.

재발 방지

문제를 해결한 후에는 다음을 정리한다:

  • 정확히 어떤 설정이 잘못되었는가?
  • 어떻게 다시 발생을 방지할 것인가?
  • 비슷한 문제가 생기면 어떤 순서로 확인할 것인가?

배포 직전에 권한 설정 체크리스트를 만들어두면 다음 번에는 더 빠르게 대응할 수 있다.