[NestJs] Custom Repository와 함께 춤을 (feat. 인터페이스)

개발/NestJS 2023. 11. 22. 08:20

NestJs와 TypeORM을 같이 사용할 때, 대부분 TypeORM에서 기본 제공하는 Repository 구현체에 제네릭으로 해당 레포지토리를 통해 접근하려는 엔티티 클래스를 주입해서 Service 클래스의 생성자에 추가하여 사용하였었다. TypeORM에서 제공하는 해당 방식을 사용하면 Repository를 따로 구성하지 않고, 엔티티, 서비스 클래스 만으로 간결하게 구현할 수 있다는 장점이 있었지만, 추후 TypeORM에서 다른 라이브러리로의 전환시, 리팩토링 비용이 많이 들어갈 가능성을 배제할 수 없다. ORM 마다 제공하는 API가 다르기 때문에 interface에 필요한 스펙을 명시해두고, 구현체를 따로 구현하는 방식을 도입했다. 1. 인터페이스 기반 Custom Repository 구현 인터페..

Article Thumbnail
[NestJS] 동시 접속 방지 구현

개발/NestJS 2023. 8. 12. 08:20

블로그를 정리하던 중 과거의 아카이브된 글에서 해당 글을 발견하였다. 그래서 이번에 구현 방식까지 한번에 정리해두려고 한다. [NestJS & React] 유저 동접 방지 구현 유저 동시 접속 방지 기능을 개발이 완료된 서비스에 추가하는 방식으로 구현해야될 일이 생겼다. 해당 서비스의 경우, 로그인, 유저 관리를 세션/쿠키 방식이 아닌 JWT 방식으로 관리하고 있었 eight20.tistory.com 왜 세션/쿠키 방식으로 구현을 하지 않았는지에 대해 의문을 가질 수도 있다. 기존에 이미 JWT로 사용자 인증이 구현되어있는 상황에서 인증 방식의 수정없이 유저의 동시 접속을 막는 것이 요구사항이라 JWT 인증 기반 위에 웹소켓으로 동시 접속 방지를 구현하게되었다. 동시 접속 방지 로직 플로우은 아래와 같다..

Article Thumbnail
[Redis] NestJs에 Redis 캐시를 적용해보자 (feat. cache-manager)

개발/NestJS 2023. 7. 10. 08:20

가상계좌 관련 결제 시스템의 결제 관련 필요 정보들을 저장하는 현재 로직 플로우로는 해결이 불가능한 품절/적립금 적립 관련 이슈가 있었는데 프론트엔드 전역변수로의 처리에 대해 이야기하다 Redis를 사용하면 가능할 거 같다라는 생각에 NestJS에 Redis 캐싱을 적용시키게 되었다. Redis의 경우, AWS ElasticCache를 사용할 수 있지만, 기본적으로 메모리 용량 = 돈이기 때문에 docker 공식 redis 이미지를 기존 ec2 인스턴스 내에 docker 컨테이너로 standalone 모드로 띄워두는 방식을 사용하였다. Redis 관련 의존성 추가 Redis 캐시를 사용하기 위한 의존성을 추가해준다. yarn add cache-manager@4.1.0 cache-manager-redis-..

Article Thumbnail
[Prisma] prisma.$transction api 성능 이슈

개발/NestJS 2023. 6. 12. 08:20

NestJs + Prisma 조합으로 신규 프로젝트를 진행하던 중 매일 새벽 1시마다 해당 날짜의 유가/최저가 주유소 관련 정보를 각각 Opinet의 API로 조회해서 저장하는 독립된 배치 2개를 구현하였었다. 유가 정보 조회/저장 배치가 스테이지 환경에서 정상적으로 동작하는 것을 확인하고, 최저가 주유소 관련 배치를 스테이지 환경에 배포해둔 상황이었다. DB 최저가 주유소 관련 테이블에 row들이 정상적으로 저장된 것을 확인하고, 해당 배치 기능은 완료된 것으로 생각하고 있었다. 유가 정보를 저장하고 있는 테이블과 최저가 주유소 정보를 저장하고 있는 테이블이 서로 연관이 없고, 독립된 배치에서 실행되고 있는 상황이라 insert 관련 락이나 PK 관련 이슈가 없을 거라고 생각하면서 DB와 서버 로그를 ..

Article Thumbnail