Framework/NestJS(10)
-
NestJS Guards Authentication with Passport
이번글에서는 NestJs의 Guards를 사용해서 '인증'을 구현하는 방법에 대해 정리해보려고 합니다. 가드에 대한 개념적 설명이나 NestJs의 Request Cycle에 대한 이해가 필요하신 분은 NestJs Request Cycle 해당 포스트를 참고해 주세요. Passport(Authentication) 저는 인증을 구현하기 위해서 Passport를 사용하기로 결정했습니다. Passport는 보다 구조화된 방식으로 인증을 처리하기 위한 추상화와 전략을 제공하는 인증 미들웨어입니다. (Guards는 넓은 개념에서 미들웨어에 포함됩니다.) Passport를 굳이 사용하지 않고 인증 서비스를 구현하는 것도 물론 가능합니다. 다만, 개발 조직 내에서 Passport를 사용한 인증 구현 전략에 익숙해있을..
2025.03.02 -
NestJS Request lifecycle
이번 포스팅에서는 NestJs 프레임워크에서 Client로부터 Request가 들어오고 Response가 나가기까지의 전체 Request Cycle에 대해 작성해보려고 합니다. 해당 내용은 전부 NestJS 공식문서를 참고할 수 있지만, 일부 디테일한 설명을 추가했습니다. 추가적으로 해당 포스트는 NestJs의 Request lifecycle에 대한 개념적 이해와 철학에 대한 내용을 중심으로 작성했기에 구체적인 소스코드는 포함하지 않았음을 미리 말씀드립니다. Request lifecycleNestJs에서 client의 request가 들어오고 server의 response가 나가기까지 전체 과정은 다음과 같습니다. Client Request: 클라이언트가 HTTP 요청을 보냅니다. NestJs 서버가 요..
2025.03.02 -
실시간 로그와 메트릭 모니터링: Grafana, Loki, Promtail, Prometheus 통합하기
최근 사내에서 진행한 결제 프로젝트는 NestJS라는 새로운 프레임워크를 도입해서 진행했습니다. 현재 가장 큰 문제점은 오류가 발생했을 때 그 오류를 로컬 환경에서 재현하지 않으면 오류의 원인을 명확히 알 수 없는 상황이었습니다. 물론 현재는 Sentry Report를 통해서 오류가 발생했을 때 원인을 알 수 있도록 시니어 개발자분께서 환경세팅을 해주셨지만 Sentry는 메트릭과 관련된 데이터를 모니터링하는 것에는 한계가 있었습니다. 그래서 이번 포스팅에서는 Grafana, Loki, Promtail, Prometheus를 사용해서 실시간 로그 수집과 메트릭을 모니터링해 본 경험을 공유해보려고 합니다. 아직 사내에서 정식 채택되어 사용하지는 못했지만, 지속적인 공유와 디벨롭을 통해서 가까운 미래에 사용..
2025.01.12 -
TypeORM QueryRunner vs @Transactional
최근 사내에서 도입한 NestJS 프레임워크의 ORM인 TypeORM을 사용하며, 트랜잭션 관리에 대한 솔직한 피드백을 공유하고자 합니다.TypeORM을 선택한 이유TypeORM의 트랜잭션 관리에 대한 이야기를 하기 전에 간단히 현 개발 조직에서 다른 ORM을 두고 TypeORM을 선택하게 된 이유에 대해 주관적인 생각을 정리해보려고 합니다. 현재 개발조직에서 Prisma와 같은 다른 ORM이 있음에도 TypeORM을 선택한 이유는 TypeORM이 좀 더 SQL 친화적(?)일기 때문이라고 생각합니다. Prisma의 경우 아래 예시 처럼 간단 한 CRUD 작업을 하는 것에는 문제가 없지만, 복잡한 쿼리가 필요한 경우는 raw query기능을 사용해야하는것 말고는 좋은 대안이 없다는게 결론이 었습니다. c..
2025.01.05