효율적이고 확장 가능한 Node.js 서버 사이드 애플리케이션을 만들기 위한 프레임워크최신 자바스크립트를 사용하고, TypeScript(및 JS)를 지원OOP, FP, FRP 요소를 결합Node.js: 서버 사이드 자바스크립트 실행 환경TypeScript: 자바스크립트
최신 언어 기능을 사용하기 때문에, 순수 자바스크립트로 사용하려면 Babel 컴파일러가 필요TypeScript: 자바스크립트에 타입을 추가한 언어로 타입은 코드가 더 안전하고 오류가 적게 만들어줌Babel: 최신 자바스크립트 코드를 구형 브라우저에서도 실행할 수 있게
Controllers는 들어오는 요청을 처리하고 클라이언트에 응답을 반환하는 역할라우팅 메커니즘어떤 controller 가 어떤 요청을 받는지 제어단일 controller 에 여러 경로가 있더라도 각자 다른 작업 수행 가능클래스와 데코레이터를 통해 만들 수 있음데코레이
Services, Repositories, Factories, Helpers 등과 같은 클래스들이 포함Object 가 다양한 관계를 맺을 수 있고, Nest 런타임에 이를 위임하는 것Controllers 에서 복잡한 작업을 위임모듈 에 providers 에 명시되는 단
@Module() 데코레이터로 연결되며Application 구조를 정의하기 위한 메타데이터를 가지고 있음Root 모듈(최상단) 을 통해 Nest 구조를 그림Module 과 Provider 의 관계와 의존성을 해결하기 위한 데이터임Module 을 통해 구성 요소 구현연관
Route 핸들러 이전에 호출되는 함수request(https://expressjs.com/en/4x/api.html- next() 미들웨어 함수에 접근 가능Express 미들웨어와 거의 동일미들웨어 기능은 다음 작업을 수행할 수 있습니다. \- 어떤 코드라도
내장된 예외 처리 레이어가 존재 모든 예외에 적용 다뤄지지 않은 예외는 해당 레이어로 가며, 사용자 친화적인 메시지 응답 HttpException 을 내장된 전역 예외 처리 필터에서 처리됨 해당되는 예외 혹은 하위 예외가 아닐 경우 unrecognized 로 해당 응
Pipes 파이프(Pipe)는 @Injectable() 데코레이터가 달린 클래스이며, PipeTransform 인터페이스를 구현합니다. 파이프는 두 가지 주요 용도로 사용됩니다: 변환: 입력 데이터를 원하는 형태로 변환 (예: 문자열을 정수로 변환) 검증: 입력
@Injectable() 데코레이터가 달린 클래스CanActivate 인터페이스를 구현단일 책임 원칙인증특정 조건(권한, 역할, ACL 등)에 따라 주어진 요청이 라우트 핸들러에 의한 처리 여부를 결정인증/권한은 전통적인 Express 애플리케이션에서 종종 미들웨어에
NestInterceptor 인터페이스를 구현해야 함AOP 에 영향을 받아메서드 실행 전/후에 추가 로직 바인딩함수에서 반환된 결과 변환함수에서 발생한 예외 변환기본 함수 동작 확장특정 조건에 따라 함수를 완전히 재정의 (예: 캐싱 목적)두 가지 인수를 받는데:1\.
애초에 데코레이터라는 언어 기능을 중심으로 구축ES2016 데코레이터는 함수(타겟, 이름, 속성 기술자)를 인수로 받아서 반환하는 표현식입니다. 데코레이터 앞에 @ 문자를 붙이고 데코레이터할 대상의 맨 위에 배치하여 적용합니다. 데코레이터는 클래스, 메서드 또는 속성에
providers 에서 IoC 하는 과정은 실제로 구체적으로 보면 이렇게 됌토큰(service 클래스 명) 과 실제 클래스를 연결하는 것기본 provider 의 기능 범위를 넘어서는 일에 custom provider 동작Nest가 클래스를 인스턴스화하는 대신 사용자 정
하나 이상의 비동기 작업이 완료될 때까지 지연하는 경우:provider를 주입하는 클래스의 인스턴스를 생성하기 전에 promise의 해결을 기다림
일반적으로는 정적 모듈을 사용함동작 모듈은 플러그인 개념런타임에 생성된 모듈로, module이라는 추가 속성만 가짐다른 속성은 필수가 아닐 수 있으나 module 속성은 필수직접 생성이 어려우므로 ConfigurableModuleBuilder 제공
라이프사이클 훅을 제공중요한 라이프사이클 이벤트에 대한 가시성을 제공이벤트가 발생할 때 모듈, providers 또는 컨트롤러에서 등록된 코드를 실행애플리케이션 bootstrap 및 종료 동안 발생각 라이플사이클 이벤트에서 등록된 라이프사이클 훅 메서드 호출onMod
플랫폼 독립적인 프레임워크재사용 가능한 논리적 부분을 개발하여 여러 유형에서 사용Express/FastifyHttp/WebSocket/Microetc한 번 빌드해서 어디서나 사용하게 하는 걸 목표로 함
Jest 가 기본 테스트 프레임워크로 제공됨테스트 파일은 테스트 하려는 클래스와 가까운 위치에 두고, .spec, .test 접미사를 가짐기본적으로 테스트에 의존성 주입을 적용하지는 않음격리된 테스트 환경Test 클래스를 통해 mocking 한 애플리케이션 실행 컨텍스
서버리스 환경(등에서) cold start 가 중요한 병목 현상의 원인이 될 수 있음특정 서버리스 함수 호출에 필요한 모듈만 로드하여 부트스트랩 시간을 단축lazyModule 임을 명시하여 지연 로딩 처리 가능class 내에서app 인스턴스에서lazymoduleload
dd
라이프사이클 훅을 제공중요한 라이프사이클 이벤트에 대한 가시성을 제공이벤트가 발생할 때 모듈, providers 또는 컨트롤러에서 등록된 코드를 실행애플리케이션 bootstrap 및 종료 동안 발생각 라이플사이클 이벤트에서 등록된 라이프사이클 훅 메서드 호출onMod
플랫폼 독립적인 프레임워크재사용 가능한 논리적 부분을 개발하여 여러 유형에서 사용Express/FastifyHttp/WebSocket/Microetc한 번 빌드해서 어디서나 사용하게 하는 걸 목표로 함
Jest 가 기본 테스트 프레임워크로 제공됨테스트 파일은 테스트 하려는 클래스와 가까운 위치에 두고, .spec, .test 접미사를 가짐기본적으로 테스트에 의존성 주입을 적용하지는 않음격리된 테스트 환경Test 클래스를 통해 mocking 한 애플리케이션 실행 컨텍스
환경 변수를 해당 환경에 저장하는 것이 제일 중요일반적으로는 각 환경에 맞는 .env 파일에 따라 정의.env 파일을 로드하는 ConfigService를 노출하는 ConfigModule을 만드는 것기본적으로는 forRoot() 메서드 활용.env 파일에 대한 경로는 e
적절한 Node.js 드라이버를 로드하여 Nest를 데이터베이스에 연결일반적인 Node.js 데이터베이스 통합 라이브러리 또는 ORM을 직접 사용NestJS 에서는 TypeormModule 을 예로 드나,실 사용 환경과는 맞지 않아 정리하지 않음테스트는 모의 레포지토리