인프런 커뮤니티 질문&답변
gaurd 에서 reflector가 undefined나옵니다...
작성
·
158
·
수정됨
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) 시스템에서 의존성을 올바르게 주입하지 못하는 경우에 발생합니다. 이러한 문제는 다음과 같은 이유로 발생할 수 있습니다:
Module 설정 오류:
App.module.ts또는 관련 모듈에서Reflector,AuthService,MemberService를 올바르게 등록하지 않았을 경우 발생할 수 있습니다. 각각의 서비스와Guard가 속한 모듈을 확인해보고 필요한 경우 모듈에 서비스를 제공해야 합니다.순환 참조:
AuthService,MemberService또는 이들이 의존하고 있는 다른 서비스 간에 순환 참조가 있는 경우에도 이와 같은 문제가 발생할 수 있습니다. 이 경우, 의존성 주입 시점에 서비스가 아직 완전히 초기화되지 않아 undefined로 나올 수 있습니다.Custom Provider 문제:
APP_GUARD와 같이 NestJS에서 제공하는 Global Scope Provider를 사용할 때, 의존성 주입 순서에 문제가 있을 수 있습니다. 특히,Reflector가 NestJS 프레임워크에 의해 자동으로 주입되는 것이 아니라, 직접 제공해야 하는 경우가 있습니다. 이때는Reflector를 명시적으로 모듈에 제공해야 할 수 있습니다.Decorator의 오용:
@Injectable()데코레이터가 적절히 사용되었는지도 확인해주세요. 경우에 따라 클래스나 의존성에@Injectable()이 누락되어 의존성 주입이 수행되지 않을 수 있습니다.
해결 방법은 다음과 같이 시도해볼 수 있습니다:
- 모듈 설정을 다시 한번 꼼꼼히 확인하세요. 특히
AppModule뿐만 아니라AuthService,MemberService가 선언되어 있는 모듈의 설정도 확인해보세요.
- 순환 참조가 의심되는 경우, 하나의 서비스를
forwardRef(() => AnotherService)를 사용하여 순환 참조 문제를 해결해보세요.
Reflector가 필요한 경우,CoreModule이나 Guard를 사용하는 모듈에서Reflector를 명시적으로 제공하는 것을 고려하세요.
이러한 해결 방안을 적용해도 문제가 해결되지 않는다면, 모듈 및 서비스 구성을 더 상세히 점검해보는 것이 필요할 수 있습니다.





