728x90
반응형

nodejs 12

[NestJS] 사이드 프로젝트 Q&A, 디스코드 웹훅(Webhook)으로 실시간 알림 받기

사이드 프로젝트를 혼자 혹은 소규모 팀으로 운영하다 보면 가장 곤란한 순간이 언제인가요?저는 "사용자가 문의를 남겼는데, 며칠 뒤에야 발견했을 때" 였습니다.하루 종일 Admin 페이지를 새로고침하며 보고 있을 수도 없고, 그렇다고 별도의 알림 앱을 만들자니 배보다 배꼽이 더 큰 상황이 발생하죠.저도 최근 진행 중인 프로젝트에서 같은 고민을 하다가, 우리가 가장 익숙하고 자주 사용하는 디스코드(Discord) 로 알림을 쏘아주면 어떨까? 하는 생각이 들었습니다.오늘은 Prisma와 NestJS 환경에서 Q&A 게시글이 등록되면, 자동으로 디스코드 채널에 예쁜 Embed 메시지를 보내주는 기능을 구현한 과정을 공유하려 해요.아주 간단하지만 운영 퀄리티는 확실히 높여주는 꿀팁입니다! 구현 목표는 단순합니다...

Backend/NestJs 2026.01.26

회원가입하고 글 쓰고 삭제까지 한 번에? 백엔드 'E2E' 테스트 작성법

지난 글에서 Supertest를 이용해 API 하나하나가 잘 동작하는지 확인하는 '통합 테스트'를 다뤘습니다.그런데 실무에서 사용자는 API를 하나만 딱 쓰고 나가지 않습니다."회원가입을 하고 → 로그인을 해서 토큰을 받고 → 그 토큰으로 글을 쓰고 → 다시 조회한다."API 하나하나는 멀쩡한데, 이 순서대로 실행했을 때 데이터가 꼬이거나 인증이 풀리는 경우가 종종 있습니다.오늘은 개별 API 검증을 넘어, 사용자 시나리오 전체를 관통하는 백엔드 E2E(시나리오) 테스트를 작성해 보겠습니다.1. 시나리오 테스트가 왜 필요한가요?단위 테스트와 통합 테스트가 '점'을 검사한다면, 시나리오 테스트는 점들을 잇는 '선'을 검사합니다.가장 흔한 버그는 상태 유지(Stateful) 과정에서 발생합니다.로그인 응답으..

Mocking만으로는 불안하다면? DB까지 뚫어보는 '통합 테스트' 입문

지난 글까지 우리는 Mocking을 통해 외부 의존성을 완벽하게 격리하고 테스트하고 CI 자동화 구축까지 하였습니다.논리적으로는 완벽하죠.그런데 실무에서는 이런 등골 서늘한 상황이 종종 발생합니다."어? 단위 테스트는 전부 초록불(Pass)인데, 왜 서버 띄우니까 500 에러가 나지?"알고 보니 SQL 문법이 틀렸거나, API URL 경로가 미세하게 달랐던 겁니다.Mocking은 "DB가 이렇게 응답할 거야"라고 가정했을 뿐, "진짜 DB가 그렇게 응답하는지"는 확인해주지 않기 때문입니다.오늘은 가짜(Mock)를 걷어내고, 진짜 모듈끼리 조립했을 때 잘 돌아가는지 확인하는 통합 테스트(Integration Test)에 대해 알아보겠습니다.1. 통합 테스트, 왜 필요한가요?자동차 부품 검사(단위 테스트)를..

[NestJS] Redis 가이드: ioredis와 CacheManager의 효율적인 공존

NestJS에서 Redis를 연동하려고 할 때 가장 고민되는 점은 무엇인가요? "공식 문서대로 @nestjs/cache-manager를 쓰자니 INCR 같은 원자적(Atomic) 연산이 안 되고, 그렇다고 ioredis만 쓰자니 단순 캐싱 로직까지 일일이 짜는 게 너무 번거롭다"는 점일 겁니다.게다가 무턱대고 두 라이브러리를 다 쓰면 Redis 커넥션이 두 배로 늘어나는 리소스 낭비까지 발생하죠.오늘은 이 모든 문제를 한 번에 해결하는 '실무형 하이브리드 아키텍처'를 소개합니다.단 하나의 Redis 연결을 재사용하여, 편리한 캐싱과 강력한 성능 제어를 동시에 잡는 방법을 단계별로 알아봅시다.1. 왜 이 조합이어야 할까요?우리는 세 가지 라이브러리를 조합해서 사용할 겁니다.@nestjs/cache-mana..

Backend/NestJs 2026.01.14

[NestJS] Refresh Token Rotation(RTR) 구현 (Prisma + Passport)

지난 포스팅까지 우리는 JWT Access Token을 발급하고 검증하는 기초적인 인증 시스템을 만들었습니다.하지만 실무에서는 Access Token 하나만으로는 부족합니다.유효기간이 짧으면 사용자가 불편하고, 길면 보안이 취약해지기 때문이죠.오늘은 이 딜레마를 해결하는 Refresh Token, 그중에서도 가장 보안 강도가 높은 RTR(Refresh Token Rotation) 방식을 구현해 보겠습니다.단순히 유저 테이블에 토큰 문자열 하나를 저장하는 방식이 아닙니다.별도의 토큰 관리 테이블을 두고, 사용된 토큰을 isRevoked (무효화) 처리하여 재사용 공격까지 완벽하게 방어하는 실무 레벨의 코드를 공개합니다.1. RTR(Refresh Token Rotation)이란?일반적인 Refresh Tok..

Backend/NestJs 2025.12.31

[Redis] 도대체 왜 쓰는 걸까? (실무 도입 전 미리보는 핵심 정리)

개발자로 일하다 보면 "이 부분은 Redis로 성능을 개선했습니다"라는 기술 블로그 글을 수없이 마주합니다.면접에서도 "Redis를 왜 사용하나요?"는 단골 질문이죠.사실 고백하자면, 현재 제가 몸담은 실무 환경에는 아직 Redis가 적용되어 있지 않습니다.하지만 내년부터 진행될 대규모 리팩토링 과정에서 Redis 도입이 예정되어있습니다.실무에 바로 투입되어 허둥대지 않으려면 철저한 준비가 필요하겠죠.그래서 저는 요즘 퇴근 후, 제 사이드 프로젝트에 Redis를 먼저 적용해 보며 '선행 학습'을 진행 중입니다.이 시리즈는 단순한 이론 정리가 아닙니다. "왜 이 기술을 써야 하는가?"에 대한 시니어 개발자의 고민과, 실무 도입을 준비하며 사이드 프로젝트에서 직접 검증한 아키텍처를 기록한 '실전 대비 노트'..

Backend/Redis 2025.12.30

[NestJS] Prisma + Passport 조합으로 로그인/회원가입 구현하기

웹 애플리케이션 개발의 시작은 언제나 '인증(Authentication)'입니다.하지만 NestJS를 처음 접하시는 분들에게 인증은 꽤나 높은 진입 장벽입니다.모듈(Module), 가드(Guard), 전략(Strategy) 같은 낯선 용어들이 쏟아지기 때문이죠.오늘은 보안의 기본인 비밀번호 암호화(Bcrypt)를 포함한 회원가입부터, Passport의 Local Strategy를 활용한 로그인까지의 과정을 하나의 흐름으로 정리해 드립니다.1. 사전 준비 (패키지 설치)인증 기능을 구현하기 위해 필요한 라이브러리들을 설치합니다.우리는 보안을 위해 비밀번호를 암호화할 것이고, 인증 구조를 잡기 위해 Passport를 사용합니다.# Passport 관련 패키지npm install --save @nestjs/p..

Backend/NestJs 2025.12.17

[NestJS] 데코레이터 완벽 이해 (Feat. Spring 어노테이션과 무엇이 다를까?)

NestJS를 처음 접하는 개발자들, 특히 Java Spring Boot 배경을 가진 분들이라면 코드를 보자마자 묘한 기시감을 느끼실 겁니다.클래스 위에 붙어 있는 수많은 '@' 들 때문이죠."어? 이거 스프링의 어노테이션이랑 똑같은 거 아니야?"맞습니다. NestJS는 Spring의 아키텍처와 디자인 패턴에 깊은 영감을 받아 만들어진 프레임워크입니다.오늘은 NestJS의 핵심인 데코레이터(Decorator)가 무엇인지, Spring의 어노테이션과 어떤 점이 비슷하고 다른지, 그리고 직접 커스텀 데코레이터를 만드는 법까지 확실하게 정리해 드립니다.1. 데코레이터(Decorator)란?데코레이터는 이름 그대로 '장식해 주는 역할'을 합니다.프로그래밍적으로는 클래스, 메서드, 프로퍼티 등을 감싸서새로운 기능..

Backend/NestJs 2025.12.09

[NestJS] 실전 적용 2편 - Prisma ORM 시작하기 및 DB 연동하기

지난 포스팅에서 우리는 NestJS 프로젝트를 생성하고 로컬 서버를 띄우는 것까지 성공했습니다.[이전 글 보기] [NestJS] 실전 적용 1편 - NestJS 시작하기 하지만 데이터를 저장하지 못하는 서버는 껍데기에 불과하죠.이제 데이터베이스(DB)를 연결할 차례입니다.NestJS를 처음 접하시는 분들은 보통 TypeORM과 Prisma 사이에서 고민하게 됩니다.공식 문서는 TypeORM을 많이 언급하지만, 최근 트렌드는 확실히 Prisma로 기울고 있죠.오늘은 두 기술의 차이점을 명확히 짚어보고, 최신 트렌드인 Prisma를 연동하는 방법을 알아보겠습니다.1. TypeORM vs Prisma: 무엇을 선택해야 할까?NestJS에서 가장 대중적인 두 ORM의 특징을 비교해 보았습니다.TypeORM (전..

Backend/NestJs 2025.12.05

[NestJS] 실전 적용 1편 - NestJS 시작하기

지난 포스팅에서 우리는 NestJS의 장단점과 Spring Boot의 안정적인 아키텍처를 비교해 보았습니다.혹시 아직 "왜 NestJS인가?"에 대한 의문이 남아있다면, 아래 글을 먼저 읽고 오시는 것을 추천해 드려요.개념이 잡혀야 코드가 더 잘 보이니까요.[이전 글 보기] Node.js와 SpringBoot의 장점을 합치다, NestJS란? (링크)이제 이론적인 준비는 끝났습니다.오늘은 거두절미하고 바로 NestJS 개발 환경을 세팅하고, 첫 서버를 실행해 보겠습니다.1. 개발 환경 준비 (Prerequisites)NestJS를 시작하기 위해서는 딱 하나, Node.js만 준비되어 있으면 됩니다.터미널을 열어 설치된 버전을 확인해 주세요.아직 NodeJS를 설치하지 않았다면 NodeJS를 설치하고 와주..

Backend/NestJs 2025.12.04