인프런 커뮤니티 질문&답변

kwa9010님의 프로필 이미지
kwa9010

작성한 질문수

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

필독!!

gaurd 에서 reflector가 undefined나옵니다...

작성

·

97

·

수정됨

0

안녕하세요.

 

강의대로 Guard에 대해 같이 진행하였지만, App.module.ts에

 

{
      provide: APP_GUARD,
      useClass: AccessTokenGuard,
    },

를 넣으면,

bearertokengaurd에서 isPublic이 항상 undefined로 나와서 exception이 나옵니다...dependency 오류는 안나오는걸로 보아 다른 문제인 것 같은데 도저히 못 찾겠습니다..

@Injectable()
export class BearerTokenGuard implements CanActivate {
  constructor(
    private readonly reflector: Reflector,
    private readonly authService: AuthService,
    private readonly memberService: MemberService,
  ) {}

여기 디버깅 했을 때 reflector, authService, memberService 모두가 undefined으로 나옵니다.

정확히

this.reflector.getAllAndOverride

 가 터지고 있습니다...

뭐가 문제 일까요?

답변 2

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

제 레포지토리랑 비교했을때 다른점을 찾지 못하셨나요!?

확인 후 다시 질문 부탁드립니다!

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다.
kwa9010님, 문제 상황에 대해 잘 설명해주셨네요.

BearerTokenGuard에서 reflector, authService, memberService가 undefined로 나오는 문제는 대개의 경우 NestJS의 Dependency Injection (DI) 시스템에서 의존성을 올바르게 주입하지 못하는 경우에 발생합니다. 이러한 문제는 다음과 같은 이유로 발생할 수 있습니다:

  1. Module 설정 오류: App.module.ts 또는 관련 모듈에서 Reflector, AuthService, MemberService를 올바르게 등록하지 않았을 경우 발생할 수 있습니다. 각각의 서비스와 Guard가 속한 모듈을 확인해보고 필요한 경우 모듈에 서비스를 제공해야 합니다.

  2. 순환 참조: AuthService, MemberService 또는 이들이 의존하고 있는 다른 서비스 간에 순환 참조가 있는 경우에도 이와 같은 문제가 발생할 수 있습니다. 이 경우, 의존성 주입 시점에 서비스가 아직 완전히 초기화되지 않아 undefined로 나올 수 있습니다.

  3. Custom Provider 문제: APP_GUARD와 같이 NestJS에서 제공하는 Global Scope Provider를 사용할 때, 의존성 주입 순서에 문제가 있을 수 있습니다. 특히, Reflector가 NestJS 프레임워크에 의해 자동으로 주입되는 것이 아니라, 직접 제공해야 하는 경우가 있습니다. 이때는 Reflector를 명시적으로 모듈에 제공해야 할 수 있습니다.

  4. Decorator의 오용: @Injectable() 데코레이터가 적절히 사용되었는지도 확인해주세요. 경우에 따라 클래스나 의존성에 @Injectable()이 누락되어 의존성 주입이 수행되지 않을 수 있습니다.

해결 방법은 다음과 같이 시도해볼 수 있습니다:

  • 모듈 설정을 다시 한번 꼼꼼히 확인하세요. 특히 AppModule뿐만 아니라 AuthService, MemberService가 선언되어 있는 모듈의 설정도 확인해보세요.
  • 순환 참조가 의심되는 경우, 하나의 서비스를 forwardRef(() => AnotherService)를 사용하여 순환 참조 문제를 해결해보세요.
  • Reflector가 필요한 경우, CoreModule이나 Guard를 사용하는 모듈에서 Reflector를 명시적으로 제공하는 것을 고려하세요.

이러한 해결 방안을 적용해도 문제가 해결되지 않는다면, 모듈 및 서비스 구성을 더 상세히 점검해보는 것이 필요할 수 있습니다.

kwa9010님의 프로필 이미지
kwa9010

작성한 질문수

질문하기