본문 바로가기

Back-end61

Nest.js : Nest.js로 Redis와 연동하여 세션 로그인 구현하기 (1) 왜 구글에 nest.js 레디스 세션 로그인을 치면 레디스를 캐시모듈로만 활용하는 글들만 나올까... 나의 구글링 실력의 부족일지도 모르겠다. (뭐 결국 삽질하다보면 나오긴 하는데...) (물론, 캐시 모듈을 사용해서 세션을 직접 구현해도... 될거 같긴 하지만... 나는 말하는 감자니까 쉬운 길을 택해보자) 그래서 혹시 나의 글이 다른 분들에게 도움이 될까 싶어 글을 적어본다. 일단, JWT에 대한 글은 천지삐까리로 널려있다. 세션 글도 좀 써주세요 제발.... 오죽하면, nestjs 세션을 검색해도 jwt글들만 나올까 ㅋㅋㅋ 짧게 말하자면, 결론은 express-session을 사용해서 저장소만 redis로 연결해주면 끝이다. 너무 간단하다. 나는 바보였다. 처음에는 그냥 redis를 캐시 저장소로 .. 2023. 2. 19.
Nest.js : Ports and Adapters Architecture 구현하기 (2) Ports and Adapters 방식을 사용하다보니 문득 문제가 생겼다. 그것은 바로 CustomRepository를 사용하면, Nest가 Repository를 모듈에 주입하지 못한다는 문제점이다. 보통 CustomRepository를 사용하면 다음과 같이 코드를 짤 수 있다. // 물론, 여기서 CutomeTypeOrmModule은 직접 만든 것이다. @Module({ imports: [CustomTypeOrmModule.forCustomRepository([UserRepository]), ], providiers: [ { provider: USER_REPOSITORY_OUTBOUND_PORT, useClass: UserRepository, } ], }) export class CatModule {}.. 2023. 2. 16.
Nest.js : Session 로그인을 위한 Redis 연동, 그리고 Ports and Adapters Architecture에 적용하기 처음으로 nest.js에 Redis라는 것을 사용해보기 위해 이리저리 구글링을 해보았다. 캐시용으로 말고, 세션용으로! 진짜 굉장히 삽질 많이했다. 그냥 쓰라고하면 쓰겠는데, Ports and Adapters 아키텍쳐에 맞게 무언가 만들려고 하니까... 머리가 더욱 복잡했다. 결국 최적의 방법은 찾지 못한듯 하다 ㅠㅠ 나는 CacheModule의 인터셉터와 데코레이터를 사용하지 않고, cacheManager 만을 이용해서 redis를 이용한 세션 로그인을 구현하고 싶었다. (그리고 저걸로 해도 아마 안될 것이다. 딥하게 건드리지 않는 이상) 그래서 생각한 첫 번째 방법이 RedisModule과 RedisService를 만들어서 필요한 모듈마다 import하는 것이다. // redis.module.ts i.. 2023. 2. 16.
Nest.js : Test시 Controller의 Decorator정보를 얻는 법 Controller의 테스트 코드를 작성 중에 문득, @UseGuards(LocalAuthGuard) 데코레이터를 검증하고 싶었다. 그래서 방법을 찾아본 결과 다음 방법을 사용해서 검증을 해볼 수 있었다. 하지만, 쓸모가 있는지는 아직 잘 모르겠다. 혹시 참고하실 분들은 참고하시길 바랍니다. // 컨트롤러의 logIn 함수로 부터 Decorator들의 key값들을 얻는다. const keys = Reflect.getMetadataKeys(AuthController.prototype.logIn); // key값을 이용해서 Decorator data를 뽑아낸다. // 아직 어떤식으로 활용해야할지는 잘 모르겠다. keys.forEach((el) => { const value = Reflect.getMetada.. 2023. 2. 7.