본문 바로가기

추천 검색어

실시간 인기 검색어

NestJS로 배우는 백엔드 프로그래밍

한용재 지음
제이펍

2023년 03월 10일 출간

종이책 : 2022년 12월 20일 출간

(개의 리뷰)
( 0% 의 구매자)
eBook 상품 정보
파일 정보 pdf (20.61MB)
ISBN 9791192469898
듣기(TTS) 가능
TTS 란?
텍스트를 음성으로 읽어주는 기술입니다.
  • 전자책의 편집 상태에 따라 본문의 흐름과 다르게 텍스트를​ 읽을 수 있습니다.
  • 전자책 화면에 표기된 주석 등을 모두 읽어 줍니다.
  • 이미지 형태로 제작된 전자책 (예 : ZIP 파일)은 TTS 기능을 지원하지 않습니다.
  • '교보 ebook' 앱을 최신 버전으로 설치해야 이용 가능합니다. (Android v3.0.26, iOS v3.0.09,PC v1.2 버전 이상)
소득공제
소장
정가 : 18,900원

쿠폰적용가 17,010

10% 할인 | 5%P 적립

이 상품은 배송되지 않는 디지털 상품이며,
교보eBook앱이나 웹뷰어에서 바로 이용가능합니다.

카드&결제 혜택

  • 5만원 이상 구매 시 추가 2,000P
  • 3만원 이상 구매 시, 등급별 2~4% 추가 최대 416P
  • 리뷰 작성 시, e교환권 추가 최대 300원

작품소개

이 상품이 속한 분야

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

서버에서 제공하는 기능을 API로 외부에 공개하기로 했다고 가정합시다. 현재 회사가 사용하고 있는 도메인은 example.com이고, API 요청은 api.example.com으로 받기로 했습니다. 즉, http://example.com, http://api.example.com로 들어온 요청을 서로 다르게 처리하고 싶다고 합시다. 또한 하위 도메인에서 처리하지 못하는 요청은 원래의 도메인에서 처리되도록 하고 싶다고 합시다. 이런 경우 하위 도메인 라우팅 기법을 쓸 수 있습니다. (56쪽)

앞서 인증authentication을 미들웨어로 구현하는 것이 좋은 사례라고 했습니다. 애플리케이션은 사용자의 권한을 확인하기 위해 인증과 인가를 수행해야 합니다. 인증은 요청자가 자신이 누구인지 증명하는 과정입니다. 최근에는 매 요청마다 헤더에 JWT 토큰을 실어 보내고 이 토큰을 통해 요청자가 라우터에 접근 가능한지 확인하는 방식을 많이 사용합니다. 쉽게 이야기해서 현재 요청자가 해당 서비스의 올바른 유저인지 검증합니다. (159쪽)

서비스에 기능이 늘어나고 사이즈가 커지게 되면 동작 과정을 남기고 추적하는 일이 중요하게 됩니다. 이슈가 발생했을 경우 이슈 증상만으로 원인을 파악하는 데에는 시간과 노력이 많이 들고 코드를 다시 역추적하면서 이해하는 데에 어려움이 따릅니다. 이슈가 발생한 지점과 콜 스택이 함께 제공된다면 빨리 해결이 가능할 것입니다. 또 어떤 기능이 많이 사용되는지와 같이 유저의 사용패턴을 분석하는 데에도 로그log를 활용할 수 있습니다. (193쪽)

이렇게 작은 서비스에는 로직이 단순하고 변경이 생겨도 크게 영향을 끼치지 않습니다. 하지만 서비스가 커질수록 변경 영향도는 점차 커지게 되고, 컨트롤러와 서비스, 영속화 및 도메인 레이어에서 주고받는 데이터가 복잡해질 뿐 아니라, 콘텍스트가 상이한 곳에서 모델을 그대로 전달하고 사용하는 경우가 발생합니다. 당장은 CQRS를 적용하지 않아도 충분하지만 Nest에서 제공하는 간단한 CQRS 모듈을 한번 적용해보겠습니다. @netstjs/cqrs 패키지부터 설치합니다. (249쪽)

자바스크립트에는 많은 테스트 프레임워크가 존재합니다. 테스트 프레임워크의 구성 요소로서 테스트가 실행되는 환경을 제공하는 테스트 러너test runner, 테스트의 상황을 가정하는 어서션assertion, 테스트의 기대 결과를 비교하는 매처matcher, 그리고 테스트 과정에서 현재 테스트 대상 모듈이 의존하는 다른 모듈을 임의의 것으로 대체하는 테스트 더블 등이 있습니다. Nest는 기본 테스트 프레임워크로 Jest와 SuperTest를 제공합니다. (276쪽)

차세대 프레임워크와 함께 더 강력한 Node.js 서버 사이드 애플리케이션 구축하기

Express.js가 전부는 아니다. 백엔드 프레임워크도 진화하고 있다. 국내에서도 모두싸인과 당근마켓 등에서 사용하는 NestJS는 ‘효율적이고 신뢰할 수 있으며 확장 가능한 서버 사이드 애플리케이션 구축’을 내세운 차세대 프레임워크다. Fastify 또는 Express 위에 DB, ORM, 유효성 검사 등을 내장했고, 제어 반전, 의존성 주입, AOP 같은 객체 지향 개념을 도입했으며, 무엇보다 타입스크립트를 사용해 우아하게 모듈/컴포넌트 기반의 프로그래밍을 할 수 있다.

이 책은 NestJS 예제 프로젝트로 회원 가입, 이메일 인증, 로그인, 회원 정보 조회 기능을 갖춘 REST API 유저 서비스를 처음부터 끝까지 만들어본다. 이런 단순한 프로젝트라도 제대로 만들려면 환경 변수 설정, 요청 유효성 검사, 인증/인가, 로깅, 헬스 체크, CQRS, 클린 아키텍처, 단위 테스트 등 알아야 할 지식과 기술이 많다. 이에 프로젝트에 차근차근 살을 붙여나가며, 이러한 백엔드 개발에 필요한 지식과 기술을 코드로 익힐 수 있게 집필했다.

저자가 모두싸인에 몸담으며 익힌 노하우와 인사이트를 바탕으로, NestJS의 핵심 기능과 원리를 충실히 설명하는 동시에 가용성, 복원성, 확장성을 갖춘 시스템을 구축하기 위한 단단한 초석을 제공한다.

주요 내용
● Node.js, 이벤트 루프, 타입스크립트 데커레이터 등 웹 개발 기초 지식
● 프로젝트에 적용하며 배우는 인터페이스, 프로바이더, 파이프, 미들웨어/인터셉터, 모듈
● 환경 변수 구성, 파이프와 유효성 검사, JWT 인증/인가, 영속화 등 백엔드 필수 기술
● 안정적인 서비스 제공을 위한 로깅, 예외 필터, 태스크 스케줄링, 헬스 체크
● CQRS, 클린 아키텍처, 테스트 자동화로 확장 가능한 모델 구축

작가정보

저자(글) 한용재

오랜 기간 휴대폰에 탑재되는 소프트웨어를 만들다 현재는 모두싸인에서 백엔드 엔지니어로 활동 중이다. 모토는 일신우일신(日新又日新)이고 영화와 교양 과학 서적을 좋아한다.

이 상품의 총서

Klover리뷰 (0)

Klover리뷰 안내
Klover(Kyobo-lover)는 교보를 애용해 주시는 고객님들이 남겨주신 평점과 감상을 바탕으로, 다양한 정보를 전달하는 교보문고의 리뷰 서비스입니다.
1. 리워드 안내
구매 후 90일 이내에 평점 작성 시 e교환권 100원을 적립해 드립니다.
  • - e교환권은 적립일로부터 180일 동안 사용 가능합니다.
  • - 리워드는 1,000원 이상 eBook, 오디오북, 동영상에 한해 다운로드 완료 후 리뷰 작성 시 익일 제공됩니다.
  • - 리워드는 한 상품에 최초 1회만 제공됩니다.
  • - sam 이용권 구매 상품 / 선물받은 eBook은 리워드 대상에서 제외됩니다.
2. 운영 원칙 안내
Klover리뷰를 통한 리뷰를 작성해 주셔서 감사합니다. 자유로운 의사 표현의 공간인 만큼 타인에 대한 배려를 부탁합니다. 일부 타인의 권리를 침해하거나 불편을 끼치는 것을 방지하기 위해 아래에 해당하는 Klover 리뷰는 별도의 통보 없이 삭제될 수 있습니다.
  • 도서나 타인에 대해 근거 없이 비방을 하거나 타인의 명예를 훼손할 수 있는 리뷰
  • 도서와 무관한 내용의 리뷰
  • 인신공격이나 욕설, 비속어, 혐오 발언이 개재된 리뷰
  • 의성어나 의태어 등 내용의 의미가 없는 리뷰

구매 후 리뷰 작성 시, e교환권 100원 적립

문장수집

문장수집 안내
문장수집은 고객님들이 직접 선정한 책의 좋은 문장을 보여 주는 교보문고의 새로운 서비스 입니다. 교보eBook 앱에서 도서 열람 후 문장 하이라이트 하시면 직접 타이핑 하실 필요 없이 보다 편하게 남길 수 있습니다. 마음을 두드린 문장들을 기록하고 좋은 글귀들은 ‘좋아요’ 하여 모아보세요. 도서 문장과 무관한 내용 등록 시 별도 통보없이 삭제될 수 있습니다.
리워드 안내
  • 구매 후 90일 이내에 문장 수집 등록 시 e교환권 100원을 적립해 드립니다.
  • e교환권은 적립일로부터 180일 동안 사용 가능합니다.
  • 리워드는 1,000원 이상 eBook에 한해 다운로드 완료 후 문장수집 등록 시 제공됩니다.
  • 리워드는 한 상품에 최초 1회만 제공됩니다.
  • sam 이용권 구매 상품/오디오북·동영상 상품/주문취소/환불 시 리워드 대상에서 제외됩니다.

구매 후 문장수집 작성 시, e교환권 100원 적립

    교보eBook 첫 방문을 환영 합니다!

    신규가입 혜택 지급이 완료 되었습니다.

    바로 사용 가능한 교보e캐시 1,000원 (유효기간 7일)
    지금 바로 교보eBook의 다양한 콘텐츠를 이용해 보세요!

    교보e캐시 1,000원
    TOP
    신간 알림 안내
    NestJS로 배우는 백엔드 프로그래밍 웹툰 신간 알림이 신청되었습니다.
    신간 알림 안내
    NestJS로 배우는 백엔드 프로그래밍 웹툰 신간 알림이 취소되었습니다.
    리뷰작성
    • 구매 후 90일 이내 작성 시, e교환권 100원 (최초1회)
    • 리워드 제외 상품 : 마이 > 라이브러리 > Klover리뷰 > 리워드 안내 참고
    • 콘텐츠 다운로드 또는 바로보기 완료 후 리뷰 작성 시 익일 제공
    감성 태그

    가장 와 닿는 하나의 키워드를 선택해주세요.

    사진 첨부(선택) 0 / 5

    총 5MB 이하로 jpg,jpeg,png 파일만 업로드 가능합니다.

    신고/차단

    신고 사유를 선택해주세요.
    신고 내용은 이용약관 및 정책에 의해 처리됩니다.

    허위 신고일 경우, 신고자의 서비스 활동이 제한될 수
    있으니 유의하시어 신중하게 신고해주세요.


    이 글을 작성한 작성자의 모든 글은 블라인드 처리 됩니다.

    문장수집 작성

    구매 후 90일 이내 작성 시, e교환권 100원 적립

    eBook 문장수집은 웹에서 직접 타이핑 가능하나, 모바일 앱에서 도서를 열람하여 문장을 드래그하시면 직접 타이핑 하실 필요 없이 보다 편하게 남길 수 있습니다.

    P.
    NestJS로 배우는 백엔드 프로그래밍
    저자 모두보기
    저자(글)
    낭독자 모두보기
    sam 이용권 선택
    님이 보유하신 이용권입니다.
    차감하실 sam이용권을 선택하세요.
    sam 이용권 선택
    님이 보유하신 이용권입니다.
    차감하실 sam이용권을 선택하세요.
    sam 이용권 선택
    님이 보유하신 프리미엄 이용권입니다.
    선물하실 sam이용권을 선택하세요.
    결제완료
    e캐시 원 결제 계속 하시겠습니까?
    교보 e캐시 간편 결제
    sam 열람권 선물하기
    • 보유 권수 / 선물할 권수
      0권 / 1
    • 받는사람 이름
      받는사람 휴대전화
    • 구매한 이용권의 대한 잔여권수를 선물할 수 있습니다.
    • 열람권은 1인당 1권씩 선물 가능합니다.
    • 선물한 열람권이 ‘미등록’ 상태일 경우에만 ‘열람권 선물내역’화면에서 선물취소 가능합니다.
    • 선물한 열람권의 등록유효기간은 14일 입니다.
      (상대방이 기한내에 등록하지 않을 경우 소멸됩니다.)
    • 무제한 이용권일 경우 열람권 선물이 불가합니다.
    이 상품의 총서 전체보기
    네이버 책을 통해서 교보eBook 첫 구매 시
    교보e캐시 지급해 드립니다.
    교보e캐시 1,000원
    • 첫 구매 후 3일 이내 다운로드 시 익일 자동 지급
    • 한 ID당 최초 1회 지급 / sam 이용권 제외
    • 네이버 책을 통해 교보eBook 구매 이력이 없는 회원 대상
    • 교보e캐시 1,000원 지급 (유효기간 지급일로부터 7일)
    구글북액션을 통해서 교보eBook
    첫 구매 시 교보e캐시 지급해 드립니다.
    교보e캐시 1,000원
    • 첫 구매 후 3일 이내 다운로드 시 익일 자동 지급
    • 한 ID당 최초 1회 지급 / sam 이용권 제외
    • 구글북액션을 통해 교보eBook 구매 이력이 없는 회원 대상
    • 교보e캐시 1,000원 지급 (유효기간 지급일로부터 7일)