[NestJS 테스트코드] Postgres, MongoDB 환경에서 유닛 & E2E 테스트 제대로 해보기
·
Nest.js
NestJS를 쓰면서 테스트 코드를 생각한다면 자연스럽게 jest 기반 테스트 환경이 따라온다.이번엔 뜨도록 프로젝트가 어느정도 안정되어 미루고 미뤄뒀던 테스트 코드 작성을 끝낸 기념으로 이 글을 작성한다.근데 생각보다 복잡하다. 내경우에 postgres, mongoDB를 사용중인데,- SQLite 썼다가 타입 오류에 머리 싸매고- Mongo는 또 Mongo대로 memory-server 세팅이 다르고... 그래서 정리했다. 의존성 설치부터 pg-mem + mongodb-memory-server까지.기본 테스트 환경 구성설치npm install --save-dev jest @nestjs/testing ts-jest @types/jest- jest: 테스트 실행기- @nestjs/testing: NestJS..
[NestJS - 트러블 슈팅] 몽고 DB replicaSet 없이는 트랜잭션 불가능
·
Nest.js
1. MongoDB 트랜잭션을 NestJS에서 써보자!뜨도록 프로젝트 진행 중 사용자 프로젝트와 차트를 동시에 생성하는 기능을 만들고 있었다.여러 컬렉션(chart_parts, user_projects)에 데이터를 쓰는 구조였기 때문에, 당연히 트랜잭션이 필요했다.const session = await this.chartPartModel.db.startSession();session.startTransaction();try { await this.chartPartModel.create([{ ... }], { session }); await this.projectModel.create([{ ... }], { session }); await session.commitTransaction();} catc..
NestJS 엔티티, 왜 다 public이야? – Spring 개발자의 궁금증 해결
·
Nest.js
NestJS로 프로젝트를 진행하면서 대부분의 코드를 GPT의 도움을 받아 빠르게 작성해왔다. 구조도 깔끔하고 실행도 잘 되니 별다른 주의 없이 넘어갔는데, 어느 순간 문득 엔티티나 서비스 클래스의 필드가 전부 public이라는 걸 뒤늦게 알아차렸다."어? 이거 괜찮은 건가?" 라는 생각이 들었고, Spring에서는 무조건 private에 getter/setter를 붙이던 습관 때문인지 더더욱 낯설게 느껴졌다.이번 글에선 궁금증을 기반으로 학습한 내용을 java 와 비교해가며 작성한다.1. NestJS와 Spring의 접근 제어자 차이: 캡슐화의 기본 철학이 다르다Java(Spring)에서는 객체지향 원칙에 따라 엔티티의 모든 필드를 private으로 선언하고, 필드에 직접 접근하지 못하도록 getter/..
[NestJS 인증 흐름] Jwt 토큰 기반 인증 요청 흐름 정리
·
Nest.js
[NestJS 인증 흐름] Jwt 토큰 기반 인증 요청 흐름 정리NestJS는 Spring Security처럼 정교한 요청 처리 체인을 갖고 있으며,Middleware → Guard → Interceptor → Pipe → Controller → Service → Response의 구조를 통해 요청을 세밀하게 통제할 수 있다. 이 글에서는 Spring Security의 구성요소들과 NestJS의 흐름이 어떻게 대응되는지를 정리하고, JWT 기반 인증 요청이 들어왔을 때 NestJS 내부에서 어떤 순서로 로직이 실행되는지를 Spring 경험자의 시선에서 상세히 정리해본다.Spring Security와 NestJS의 대응 표Spring Security 구성NestJS 대응주요 역할FilterMiddlewar..
[NestJS 응답/요청 변환기] 내부 camelCase, 외부 snake_case 통일하기
·
Nest.js
✅ 목적NestJS 서버에서는 내부 코드를 camelCase, 외부 응답/요청은 snake_case로 통일하기 위해 다음과 같은 구조를 적용하였다.요청(Request): snake_case → camelCase 자동 변환응답(Response): camelCase → snake_case 자동 변환모든 변환은 Interceptor, Pipe 기반으로 구성📌 요청 변환: SnakeToCamelPipe클라이언트에서 snake_case로 요청을 보냈을 때, 서버 내부에서는 이를 camelCase로 받아야 한다.이를 위해 camelcase-keys를 사용한 커스텀 Pipe를 구현하였다.import { PipeTransform, Injectable, ArgumentMetadata } from '@nestjs/com..
[Nest.js] 제로베이스에서 1주일, 실전까지 반나절
·
Nest.js
AI가 바꾼 개발 학습과 생산성의 흐름Nest.js는 본인에게 완전히 새로운 기술이었다.Node.js 자체도 경험이 없었고, TypeScript 환경 역시 익숙하지 않았다.즉, 완전한 제로베이스에서 출발했다.Nest 생태계에 대한 정보도 부족했다.Nest 프로젝트가 보통 어떤 디렉토리 구조를 가지는지,다른 개발자들은 어떤 코딩 스타일과 설계 방식을 택하는지조차 알 수 없었다.지금도 Nest.js 커뮤니티에서 "보편적으로 통용되는 관습"에 대한 이해는 부족하다.그럼에도 불구하고 실제 기능 구현에는 큰 어려움이 없다.ChatGPT와 같은 AI 도구를 적극적으로 활용함으로써,Nest.js의 기본 구조를 익히는 데까지 1주일,그리고 실제 서비스에 필요한 기능을 구성하는 데 반나절 수준의 시간만이 소요되었다.🧭..