← 전체 글로 돌아가기

웹 개발

배포 후 갑자기 권한 에러가 나는 이유

로컬에서 완벽히 동작하던 기능이 배포 후 권한 문제로 실패하는 경우가 있다. 체계적으로 원인을 찾는 방법을 정리했다.

로컬과 배포 환경의 설정이 다르다

같은 코드인데 로컬에서는 잘 되고 배포 후에는 권한 에러가 나는 건 환경 설정 차이 때문이다. 로컬에서 테스트할 때는 admin 계정으로 시작하지만 배포 후에는 일반 사용자 권한으로 동작하는 경우가 많다.

내 경우 다음 차이점들을 발견했다:

  • 로컬: .env.local에 전체 권한을 가진 토큰
  • 배포: .env.production에 제한된 권한의 토큰
  • 파일 시스템 권한도 달라질 수 있다

실제 요청을 재현해서 확인

배포 후 가장 먼저 할 일은 로그를 보는 것이다:

# 서버 로그에서 권한 관련 에러 찾기
grep -i "permission\|forbidden\|unauthorized" /var/log/app.log

어떤 리소스에 접근하려고 했는데 거부되었는지 구체적으로 파악한다. "Access denied to resource: /api/users"라는 식의 에러면 해당 엔드포인트의 권한 설정을 확인한다.

환경 변수 이중 확인

배포 환경에 설정한 환경 변수를 확인한다:

# 도커/서버 환경에서 변수 확인
echo $API_TOKEN
echo $ADMIN_KEY

이 값들이 정말 유효한지, 만료되지 않았는지 확인해야 한다. 토큰의 경우 유효 기간이 있을 수 있다.

사용자 권한 vs 시스템 권한

데이터베이스 쿼리는 성공하지만 파일 저장이 실패하는 경우도 있다. 이는 파일 시스템 권한 문제다.

# 애플리케이션이 실행되는 사용자 확인
ps aux | grep node
# 해당 디렉토리의 권한 확인
ls -la /var/app/uploads

애플리케이션 프로세스가 그 디렉토리에 쓰기 권한을 가지고 있는지 확인한다.

체계적으로 원인을 좁혀나가기

처음 나타난 권한 에러가 전체 원인일 수도, 그저 증상일 수도 있다. 하나씩 해결하고 배포한 후 결과를 기록한다. 다음에 비슷한 문제가 나올 때 훨씬 빠르게 대응할 수 있다.