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

김동민님의 프로필 이미지

작성한 질문수

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

AccessTokenGuard 적용해보기

postPost UseGuard 관련 질문

해결된 질문

24.08.06 12:42 작성

·

100

0

현 강의에서 postPost에 UserGuard를 하기 위해 posts.module.ts에 UsersModule, AuthModule을 import해주었는데 이 UsersModule은 AuthModule에서 사용하기 때문에 import를 해줘야하는건가요? 그리고 실제로 깃헙에선 AuthModule에서 AuthService를 export했는데 postPost 매서드에서 사용하는 것은 AuthService가 아닌 auth 모듈의 guard 폴더 안에 있는 ts 파일인데 왜 AuthService를 export하는건가요?

답변 1

0

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

2024. 08. 07. 09:31

안녕하세요!

질문을 정확히 이해했는지 모르겠습니다.

AuthModule에서 export하는게 왜 postPost 메서드와 '밀첩한' 관계가 있는지 모르겠습니다.

AuthModule에서 AuthService를 export 하는 이유는 AuthService를 외부에서 사용 가능하게하기 위함입니다.

꼭 postPost에서 사용하게 하기 위해서라고 말 할 수 없습니다.

예제와 함께 다시 질문 주시면 최선을 다해 답변 드리도록 하겠습니다!

감사합니다!

김동민님의 프로필 이미지
김동민
질문자

2024. 08. 07. 10:59

post.controller.ts에 있는 postPosts 함수에서 AccessTokenGuard를 사용하기 위해서 AuthModule을 posts.module.ts에서 import해주었는데 실제로 사용한 것은 auth 모듈 폴더 내에 있는 auth.service.ts 파일에 있는 AuthService가 필요한 것이 아닌 auth 모듈 폴더 내에 있는 guard 폴더 내의 bearer-token.guard.ts 파일에 있는 AccessTokenGuard가 필요한 것인데 왜 auth.module.ts에서는 AccessTokenGuard가 아닌 AuthService를 export 해준 것인가요? 실제로 현재 강의는 pagination 이전까지 들은 상태인데 여기선 결국 posts.controller에서 AuthService를 inject하지도 않았습니다.

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

2024. 08. 08. 10:44

안녕하세요!

https://github.com/codefactory-co/nestjs-lv1/blob/4f358495060a8788d1d176b998fd26f609e5a599/src/auth/guard/bearer-token.guard.ts#L10-L12

이부분 때문에 말씀하시는거 맞을까요?

Guard에서 AuthService를 사용중이라 Guard 사용하는 컨텍스트에서 AuthService 주입이 필요합니다.

감사합니다!

김동민님의 프로필 이미지
김동민
질문자

2024. 08. 08. 12:42

앗 자꾸 질문드려서 죄송합니다만 이게 제가 import, export에 대한 개념이 좀 부족한 것 같아서 이해가 애매해지는 부분이 있는 것 같습니다.. 제가 이해한 바로는 일단 'bearer-token.guard.ts 파일에 있는 AccessTokenGuard는 provider인 것은 아니고 그 Guard에선 provider인 AuthService를 주입해서 사용하기 때문에 auth폴더의 auth.module.ts에선 AuthService만 export해주면 다른 폴더에서 AccessTokenGuard를 사용하는데 문제가 없다'로 이해했는데 이게 맞을까요 ...?

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

2024. 08. 09. 10:03

안녕하세요!

서로의 관계의 입장에서 바라볼 필요는 없습니다.

프로그램은 단순합니다. IoC 컨테이너는 의존성을 주입하는 역할을 하고 있고 DI를 할때는 디펜던시가 등록 돼있어야 사용이 가능합니다.

AccessTokenGuard는 저희가 UseGuard를 통해 사용하고 있기 때문에 (코드 잘 봐보면 DI로 넣고 있지 않습니다) 따로 모듈에 엑스포트 해줄건 없습니다.

다만 AccessTokenGuard 자체에 의존성 주입이 존재합니다. 즉, AccessTokenGuard를 사용하는 모든 엔드포인트는 AccessTokenGuard가 필요로하는 의존성 주입을 받아야만 Guard 사용이 가능합니다. 그래서 export 및 import를 해주는거죠. 다른 import, export와 다르게 바라볼 필요 없습니다.

감사합니다!