728x90
1. 미들웨어 동작 및 토큰 검증 관련 문제
- 문제 상황:
- 토큰이 전달되지 않거나 "Bearer" 형식이 아닌 경우
- 토큰이 만료되었거나 위조된 경우
- 환경 변수로 전달된 시크릿 키가 올바르지 않거나 누락된 경우
- 점검 항목 및 해결책:
- 헤더 형식 확인:
요청 시 헤더에 Authorization: Bearer <토큰> 형식으로 전달되고 있는지 확인. - 환경 변수 검증:
.env 파일이나 환경 설정에서 JWT_SECRET_KEY, ACCESS_TOKEN_EXPIRY, REFRESH_TOKEN_EXPIRY 등이 올바르게 설정되었는지 확인. - 토큰 검증 로직 디버깅:
jwtService.verify 메서드 사용 시 시크릿 키가 올바르게 전달되고 있는지, 토큰 생성 시 payload와 일치하는지 로그를 통해 확인. - 예외 처리:
미들웨어에서 발생한 예외 메시지를 통해 문제가 발생하는 구체적인 원인을 파악.
- 헤더 형식 확인:
2. 모듈 및 미들웨어 구성 문제
- 문제 상황:
- 인증이 필요한 경로와 예외 처리 대상 경로가 올바르게 설정되지 않은 경우
- 특정 라우트에서 인증 미들웨어가 적용되지 않거나 불필요하게 적용되는 경우
- 점검 항목 및 해결책:
- 미들웨어 적용 범위:
MiddlewareConsumer를 사용해 특정 라우트 혹은 컨트롤러에만 미들웨어가 적용되도록 올바르게 구성되어 있는지 확인. - 예외 처리 경로:
로그인, 회원가입, 토큰 재발행 등 인증이 필요하지 않은 경로가 .exclude 옵션에 포함되어 있는지 점검. - 라우터 우선순위:
라우터의 우선순위나 중복 선언으로 인해 미들웨어 적용 순서가 꼬이지 않았는지 검토.
- 미들웨어 적용 범위:
3. JWT 토큰 발행 및 재발행 문제
- 문제 상황:
- 액세스 토큰 또는 리프레시 토큰 생성 시 유효 기간, 시크릿 키 문제로 토큰이 올바르게 발행되지 않는 경우
- 토큰 재발행 로직에서 리프레시 토큰의 유효성을 제대로 검증하지 않는 경우
- 점검 항목 및 해결책:
- 토큰 생성 로직 확인:
jwtService.sign 호출 시 올바른 secret과 expiresIn 값이 전달되고 있는지 로그로 확인. - 토큰 재발행 기준:
리프레시 토큰의 유효성 검사 및 만료 여부 확인. 필요한 경우, 재발행 시 payload 내용과 유효 기간이 일치하는지 점검. - 토큰 블랙리스트 처리:
로그아웃 시 Redis 등을 활용해 블랙리스트에 추가하는 경우, 블랙리스트 로직이 올바르게 동작하는지 테스트.
- 토큰 생성 로직 확인:
4. 비밀번호 암호화 및 검증 문제
- 문제 상황:
- 비밀번호 해싱 시 salt 값이 잘못되었거나 해싱 결과가 저장되지 않는 경우
- 로그인 시 bcrypt.compare를 통한 비밀번호 비교 오류 발생
- 점검 항목 및 해결책:
- Salt 값 확인:
.env 파일의 BCRYPT_SALT_ROUNDS 값이 올바르게 숫자로 변환되고 있는지 확인. - 해싱 및 비교 로직:
비밀번호 생성 시 bcrypt.hash, 로그인 시 bcrypt.compare 호출 순서와 전달되는 값(원본 비밀번호, 해싱된 비밀번호)을 검증. - 로그 활용:
콘솔 로그나 디버깅 도구를 활용해 salt 값, 해시된 결과, 비교 결과를 확인하고 문제를 추적.
- Salt 값 확인:
5. 일반적인 디버깅 팁
- 단계별 로그 추가:
각 중요한 단계(토큰 추출, 검증, 해싱 등)마다 로그를 추가해 어떤 단계에서 실패가 발생하는지 확인. - 유닛 테스트 및 통합 테스트:
기능별 유닛 테스트를 작성해 각각의 기능이 의도한 대로 동작하는지 검증. - 에러 메시지 분석:
발생한 에러 메시지와 스택 트레이스를 분석하여 문제의 근본 원인을 파악. - 환경 재설정:
로컬 및 개발 환경의 설정이 올바르게 적용되었는지, 특히 환경 변수 파일의 위치와 내용이 정확한지 확인.
'게임서버-스파르타코딩NodeJs_7기 > CH5 트렐로' 카테고리의 다른 글
Jest 테스트 트러블슈팅 (0) | 2025.03.20 |
---|---|
jest 테스트 추가하기 (0) | 2025.02.05 |
nestjs jwt 인증, 비번 해싱 및 검증 , 로그아웃, 마이그레이션 (0) | 2025.02.04 |
user CRUD API 구현하기 (0) | 2025.01.24 |
2차회의 (0) | 2025.01.23 |