
책소개
가장 진보한 프레임워크로 우아하게 백엔드 입문하기. NestJS는 Express를 기반으로 DB, ORM, 유효성 검사 등의 라이브러리를 내장한 차세대 백엔드 프레임워크다. 제어 반전, 의존성 주입, AOP 등 객체 지향 개념을 도입했고 타입스크립트로 모듈/컴포넌트 기반의 프로그래밍을 할 수 있다.
이 책은 저자가 모두싸인에 몸담으며 익힌 노하우와 인사이트를 바탕으로 NestJS를 활용해 회원 가입, 이메일 인증, 로그인, 회원 정보 조회 기능을 갖춘 REST API 유저 서비스를 만들어본다. 프로젝트에 점차 살을 붙여나가며 백엔드 개발에 필요한 환경 변수 설정, 요청 유효성 검사, 인증(JWT), 로깅, 헬스 체크, CQRS, 클린 아키텍처, 단위 테스트 등 지식과 기술을 제대로 익힐 수 있게 집필했다.
출판사소개
목차
베타리더 후기 x 머리말 xii 이 책에 대하여 xiii
CHAPTER 1 Hello NestJS 1
1.1 NestJS의 장점 1
1.2 Express가 좋을까, NestJS가 좋을까 2
1.3 NestJS 설치 6
__1.3.1 Node.js 설치 6 / 1.3.2 NestJS 프로젝트 생성 7
1.4 책에서 만들 애플리케이션: 유저 서비스 9
CHAPTER 2 웹 개발 기초 지식 13
2.1 웹 프레임워크 13
2.2 Node.js 16
2.3 이벤트 루프 18
2.4 패키지 의존성 관리 21
__2.4.1 package.json 21 / 2.4.2 package-lock.json 23 / 2.4.3 package.json 파일 분석 23
2.5 타입스크립트 25
__2.5.1 변수 선언 26 / 2.5.2 타입스크립트에서 지원하는 타입 27
__2.5.3 타입 정의하기 29 / 2.5.4 타입 구성하기 30
2.6 데커레이터 32
__2.6.1 데커레이터 합성 34 / 2.6.2 클래스 데커레이터 35 / 2.6.3 메서드 데커레이터 36
__2.6.4 접근자 데커레이터 38 / 2.6.5 속성 데커레이터 39 / 2.6.6 매개변수 데커레이터 40
__2.6.7 데커레이터 요약 42
쉬어 가는 페이지 백엔드 로드맵 43
CHAPTER 3 애플리케이션의 관문: 인터페이스 45
3.1 컨트롤러 45
__3.1.1 라우팅 47 / 3.1.2 와일드 카드 사용 48 / 3.1.3 요청 객체 48 / 3.1.4 응답 49
__3.1.5 헤더 52 / 3.1.6 리디렉션 54 / 3.1.7 라우트 매개변수 55
__3.1.8 하위 도메인 라우팅 56 / 3.1.9 페이로드 다루기 58
3.2 유저 서비스의 인터페이스 59
쉬어 가는 페이지 관점 지향 프로그래밍 64
CHAPTER 4 핵심 도메인 로직을 포함하는 프로바이더 65
4.1 프로바이더 65
4.2 프로바이더 등록과 사용 67
__4.2.1 프로바이더 등록 67 / 4.2.2 속성 기반 주입 67
4.3 유저 서비스에 회원 가입 로직 구현하기 70
__4.3.1 UsersService 프로바이더 생성 70 / 4.3.2 회원 가입 71
__4.3.3 회원 가입 이메일 발송 73 / 4.3.4 이메일 인증 77
__4.3.5 로그인 77 / 4.3.6 유저 정보 조회 78
쉬어 가는 페이지 스코프 79
심화 학습 1 커스텀 프로바이더 82
CHAPTER 5 SW 복잡도를 낮추기 위한 모듈 설계 91
5.1 모듈: 응집성 있는 설계 91
__5.1.1 모듈 다시 내보내기 92 / 5.1.2 전역 모듈 94
5.2 유저 서비스의 모듈 분리 95
__5.2.1 UsersModule 분리 95 / 5.2.2 EmailModule 분리 96
CHAPTER 6 동적 모듈을 활용한 환경 변수 구성 99
6.1 동적 모듈 99
6.2 dotenv를 이용한 Config 설정 99
6.3 Nest에서 제공하는 Config 패키지 102
6.4 유저 서비스에 환경 변수 구성하기 105
__6.4.1 커스텀 Config 파일 작성 105 / 6.4.2 동적 ConfigModule 등록 106
쉬어 가는 페이지 의존성 주입과 제어 반전 110
CHAPTER 7 파이프와 유효성 검사: 요청이 제대로 전달되었는가 113
7.1 파이프 113
7.2 파이프의 내부 구현 이해하기 116
7.3 유효성 검사 파이프 만들기 117
7.4 유저 서비스에 유효성 검사 적용하기 120
__7.4.1 유저 생성 본문의 유효성 검사 120 / 7.4.2 class-transformer 활용 121
__7.4.3 커스텀 유효성 검사기 작성 124
쉬어 가는 페이지 인증 vs 인가 127
CHAPTER 8 영속화: 데이터를 기록하고 다루기 131
8.1 MySQL 데이터베이스 설정 131
8.2 TypeORM으로 데이터베이스 연결 134
8.3 회원 가입을 요청한 유저의 정보 저장하기 138
8.4 트랜잭션 적용 141
__8.4.1 QueryRunner를 사용하는 방법 142
__8.4.2 transaction 함수를 직접 이용하는 방법 143
8.5 마이그레이션 144
쉬어 가는 페이지 저장소 패턴 151
CHAPTER 9 요청 처리 전에 부가 기능을 수행하기 위한 미들웨어 153
9.1 미들웨어 153
9.2 Logger 미들웨어 154
9.3 MiddlewareConsumer 155
9.4 전역으로 적용하기 157
CHAPTER 10 권한 확인을 위한 가드: JWT 인증/인가 159
10.1 가드 159
10.2 가드를 이용한 인가 160
__10.2.1 실행 콘텍스트 160 / 10.2.2 가드 적용 161
10.3 인증 162
__10.3.1 세션 기반 인증 163 / 10.3.2 토큰 기반 인증 164
10.4 JWT 165
__10.4.1 헤더 166 / 10.4.2 페이로드 166 / 10.4.3 시그너처 167
10.5 유저 서비스의 이메일 인증 처리와 JWT 발급 169
__10.5.1 회원 가입 이메일 인증 169 / 10.5.2 로그인 172
__10.5.3 JWT 인증: 회원 정보 조회 173 / 10.5.4 가드를 이용한 인가 처리 175
쉬어 가는 페이지 슬라이딩 세션과 리프레시 토큰 178
심화 학습 2 커스텀 매개변수 데커레이터 181
심화 학습 3 메타데이터(Reflection 클래스) 186
CHAPTER 11 로깅: 애플리케이션의 동작 기록 193
11.1 내장 로거 194
__11.1.1 로깅 비활성화 195 / 11.1.2 로그 레벨 지정 195
11.2 커스텀 로거 196
__11.2.1 커스텀 로거 주입해서 사용하기 197 / 11.2.2 커스텀 로거를 전역으로 사용하기 198
__11.2.3 외부 로거 사용하기 198
11.3 유저 서비스에 winston 로거 적용하기 199
__11.3.1 nest-winston 적용 199 / 11.3.2 내장 로거 대체하기 202
__11.3.3 부트스트래핑까지 포함하여 내장 로거 대체하기 204
__11.3.4 로그 전송을 다양하게 206
CHAPTER 12 모든 것은 항상 실패한다: 예외 필터 209
12.1 예외 처리 209
12.2 예외 필터 214
12.3 유저 서비스에 예외 필터 적용하기 217
CHAPTER 13 인터셉터로 요청과 응답을 입맛에 맞게 바꾸기 219
13.1 인터셉터 219
13.2 응답과 예외 매핑 222
13.3 유저 서비스에 인터셉터 적용하기 224
쉬어 가는 페이지 요청 생명주기 226
CHAPTER 14 태스크 스케줄링 229
14.1 @nestjs/schedule 패키지 229
14.2 태스크 스케줄링을 선언하는 3가지 방식 230
__14.2.1 크론 잡 선언 방식 230 / 14.2.2 인터벌 선언 방식 232 / 14.2.3 타임아웃 선언 방식 233
14.3 동적 태스크 스케줄링 233
CHAPTER 15 헬스 체크: 댁의 서버는 건강하신가요 237
15.1 Terminus 적용 238
15.2 헬스 체크 238
15.3 TypeOrm 헬스 체크 240
15.4 커스텀 상태 표시기 241
CHAPTER 16 CQRS를 이용한 관심사 분리 247
16.1 CQRS 패턴 247
16.2 유저 서비스에 CQRS 적용하기 249
__16.2.1 커맨드 249 / 16.2.2 이벤트 251 / 16.2.3 쿼리 254
CHAPTER 17 클린 아키텍처 257
17.1 클린 아키텍처 259
17.2 SOLID 객체 지향 설계 원칙 261
17.3 유저 서비스에 클린 아키텍처 적용하기 262
CHAPTER 18 테스트 자동화 273
18.1 소프트웨어 테스트 273
18.2 Nest의 기본 테스트 프레임워크: Jest와 SuperTest 276
18.3 Jest를 이용한 단위 테스트 예시 276
18.4 유저 서비스 테스트 279
18.5 테스트 커버리지 측정 287
APPENDIX ormconfig.json 동적 생성 291
찾아보기 295
배송
- 배송비, 무료배송비는 업체 사정에 따라 달라질 수 있습니다.
- 배송은 결제 확인 후 다음날부터 2~3일 이내에 배송됩니다. (단 도서 산간지역은 1~2일정도 더 소요됩니다.)
- 공휴일은 배송기간에 포함되지 않습니다.
- 주문하신 상품이 여러개인 경우 동일한 업체의 상품만 묶음 배송 가능합니다. (업체 사정에 따라 달라질 수 있습니다.)
- 배송정보는 상단 주문조회나 마이페이지 주문목록에서 가능합니다.
상품 품절
- 공급사(출판사) 재고 사정에 의해 품절/지연될 수 있으며, 품절 시 관련 사항에 대해서는 이메일과 문자로 안내드립니다.
주문취소/변경
- 주문 상품에 대한 변경사항(품절,가격변동)이 발생하면 전화나 메일을 통해 변경내용을 알려드립니다.
- 주문 상품의 변경/취소/환불은 배송 시작전 마이페이지에서 직접 신청이 가능합니다.
- 주문 상품이 발송된 시점에서는 변경/취소/환불이 모두 불가능합니다.
반품/교환
- 기간 : 배송받으신 후 7일 이내에 가능합니다.
- 방법 : 홈페이지 마이페이지 > 반품/ 교환 신청 및 조회에서 가능합니다.
- 배송비 부담 : 상품에 이상이 있을시에는 무료, 고객의 단순변심 및 착오구매일 경우 상품 반송비용은 고객 부담입니다.
- 포장 개봉 후 재판매가 불가능한 상품은 반품/교환이 불가능합니다.
- 전자상거래 등에서의 소비자보호에 관한 법률이 정하는 소비자 청약철회 제한 내용에 해당되는 경우, 반품/교환이 불가능합니다.
반품/교환 불가 사유
- 소비자의 책임 있는 사유로 상품 등이 손실 또는 훼손된 경우 (단지 확인을 위한 포장 훼손은 제외)
- 소비자의 사용, 포장 개봉에 의해 상품 등의 가치가 현저히 감소한 경우
- 복제가 가능한 상품 등의 포장을 훼손한 경우
- 소비자의 요청에 따라 개별적으로 주문 제작되는 상품의 경우
- 디지털 컨텐츠인 eBook, 오디오북 등을 1회 이상 다운로드를 받았을 경우
- 시간의 경과에 의해 재판매가 곤란한 정도로 가치가 현저히 감소한 경우
- 전자상거래 등에서의 소비자보호에 관한 법률이 정하는 소비자 청약철회 제한 내용에 해당되는 경우
소비자 피해보상 환불 지연에 따른 배상
- 상품의 불량에 의한 반품, 교환, A/S, 환불, 품질보증 및 피해보상 등에 관한 사항은 소비자분쟁해결기준(공정거래위원회 고시)에 준하여 처리합니다.
- 대금 환불 및 환불 지연에 따른 배상금 지급 조건, 절차 등은 전자상거래 등에서의 소비자 보호에 관한 법률에 따라 처리합니다.