본문 바로가기

Back-end/nest.js16

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.
Nest.js : Ports and Adapters Architecture 구현하기 (1) 이 글은 작성자(개발초보)의 뇌피셜일 뿐이며 참고만 하시되, 잘못된 부분이 있다면 지적해 주시기 바랍니다. Nest.js를 배우면서 우연히 ports and adapter architecture에 대해서 알게 되었다. ports and adapter architecture란, 비즈니스 로직과 외부 요소들(예를들어, DB)을 port와 adapter를 이용해서 구분하는 아키텍쳐이다. 우리가 일반적으로 사용하는(나만 이렇게 사용했을 지도 모르지만) service 만을 이용해서 코드를 작성시, service 안에 온갖 코드가 다 들어갈 것이다. 예를들면, DB를 건드리는 코드도 들어갈 수 있고, 검색엔진, email 혹은 외부 라이브러리 등 많은 것들에 관한 코드가 들어갈 수 있을 것이다. 하지만 서비스 로직.. 2023. 2. 3.