Back-end
-
이번 포스팅은 Interceptor의 개념을 알고 있는 상태여야 이해하기가 쉬운 내용이 포함되어 있습니다. Interceptor에 대한 설명은 다음 링크를 참고해주세요. [NestJS] Interceptor 개념정리 (+간단한 Logger)1. Interceptors란? 통상적으로 interceptor는 요청과 응답을 가로채서 중간에 로직에 변화를 줄 수 있도록 하는 컴포넌트를 말합니다. Nest에서는 이를 @Injectable() 데코레이터가 붙은 클래스를 통해 만들cdragon.tistory.com 1. Logging1-1. LoggerNest는 내장된 텍스트 기반의 logger를 가지고 있는데, 이는 애플리케이션 부팅 중에 사용되며 잡은 예외를 보여주는 일부 다른 환경들에서..
[NestJS] Logging 알아보기 (feat. winston)이번 포스팅은 Interceptor의 개념을 알고 있는 상태여야 이해하기가 쉬운 내용이 포함되어 있습니다. Interceptor에 대한 설명은 다음 링크를 참고해주세요. [NestJS] Interceptor 개념정리 (+간단한 Logger)1. Interceptors란? 통상적으로 interceptor는 요청과 응답을 가로채서 중간에 로직에 변화를 줄 수 있도록 하는 컴포넌트를 말합니다. Nest에서는 이를 @Injectable() 데코레이터가 붙은 클래스를 통해 만들cdragon.tistory.com 1. Logging1-1. LoggerNest는 내장된 텍스트 기반의 logger를 가지고 있는데, 이는 애플리케이션 부팅 중에 사용되며 잡은 예외를 보여주는 일부 다른 환경들에서..
2024.02.16 -
1. Guardsguard는 NestJS에서 @Injectable() 데코레이터가 붙은 클래스로 CanActivate 인터페이스를 구현합니다. 이 친구도 역시 단일 책임을 갖는데요. 런타임에 존재하는 특정 조건(permissions, roles, ACL 등)에 따라 특정 요청이 라우트 핸들러에 의해 처리될지 여부를 결정하는 책임을 갖습니다. 이는 일반적으로 authorization을 처리하기 위해 사용합니다. 권한부여-authorization(그리고 일반적으로 함께 사용되는 사촌격인 authentication)는 일반적으로 기존 Express 애플리케이션의 미들웨어가 처리해 왔습니다. 토큰 유효성 검사(token validation) 및 요청 객체에 속성을 추가하는 작업은 특정 route 컨..
[NestJS | Docs] Guard 알아보기 (feat. athentication & athorization: 인증과 인가)1. Guardsguard는 NestJS에서 @Injectable() 데코레이터가 붙은 클래스로 CanActivate 인터페이스를 구현합니다. 이 친구도 역시 단일 책임을 갖는데요. 런타임에 존재하는 특정 조건(permissions, roles, ACL 등)에 따라 특정 요청이 라우트 핸들러에 의해 처리될지 여부를 결정하는 책임을 갖습니다. 이는 일반적으로 authorization을 처리하기 위해 사용합니다. 권한부여-authorization(그리고 일반적으로 함께 사용되는 사촌격인 authentication)는 일반적으로 기존 Express 애플리케이션의 미들웨어가 처리해 왔습니다. 토큰 유효성 검사(token validation) 및 요청 객체에 속성을 추가하는 작업은 특정 route 컨..
2024.02.14 -
Nest는 데이터베이스에 구애받지 않기 때문에 모든 SQL 혹은 NoSQL 데이터베이스들과 쉽게 통합할 수 있습니다. 개인 선호도에 따라 다양한 선택지를 선택할 수 있지만 저는 이 포스팅에서 MySQL을 Nest에서 어떻게 구성하는지에 대해서 글을 써보도록 할 것입니다. 가장 일반적인 경우에 Nest를 데이터베이스와 연결시키기 위해선 Express나 Fastify를 사용할 때와 마찬가지로 단순히 그 데이터베이스에 적합한 Node.js 드라이버를 불러와야 합니다. 혹은 더 높은 수준의 추상화로 동작하기 위해서 MikroORM, Sequalize, Knex.s, TypeORM, Prisma 등의 범용 Node.js 통합 라이브러리나 ORM을 직접 사용할 수도 있는데 이 중에서 TypeORM을 사용해볼 것입니..
[NestJS] TypeORM으로 MySQL 데이터베이스 연결하기(TypeORM 기능 다 알아보기)Nest는 데이터베이스에 구애받지 않기 때문에 모든 SQL 혹은 NoSQL 데이터베이스들과 쉽게 통합할 수 있습니다. 개인 선호도에 따라 다양한 선택지를 선택할 수 있지만 저는 이 포스팅에서 MySQL을 Nest에서 어떻게 구성하는지에 대해서 글을 써보도록 할 것입니다. 가장 일반적인 경우에 Nest를 데이터베이스와 연결시키기 위해선 Express나 Fastify를 사용할 때와 마찬가지로 단순히 그 데이터베이스에 적합한 Node.js 드라이버를 불러와야 합니다. 혹은 더 높은 수준의 추상화로 동작하기 위해서 MikroORM, Sequalize, Knex.s, TypeORM, Prisma 등의 범용 Node.js 통합 라이브러리나 ORM을 직접 사용할 수도 있는데 이 중에서 TypeORM을 사용해볼 것입니..
2024.02.13 -
1. Validation (검증) 웹 애플리케이션에서는 전달되는 모든 데이터의 정확성을 검증하는 것이 가장 좋은 시나리오일 것입니다. 그래서 들어오는 요청이 유효한지를 자동으로 검사하기 위해 Nest는 바로 사용할 수 있는 몇 가지의 내장 기본 pipes를 제공하고 있습니다. ValidationPipe ParseIntPipe ParseBoolPipe ParseArrayPipe ParseUUIDPipe 이러한 ValidationPipe는 강력한 class-validiator 패키지와 선언적인 validation 데코레이터를 사용합니다. ValidationPipe는 모든 들어오는 클라이언트의 페이로드(payload)에 대한 검증 규칙을 강화하기 위해 간편한 접근을 제공합니다. 그 구체적인 규칙은 local ..
[NestJS] Validation과 Transformation (검증과 변환) (feat. Serialization-직렬화)1. Validation (검증) 웹 애플리케이션에서는 전달되는 모든 데이터의 정확성을 검증하는 것이 가장 좋은 시나리오일 것입니다. 그래서 들어오는 요청이 유효한지를 자동으로 검사하기 위해 Nest는 바로 사용할 수 있는 몇 가지의 내장 기본 pipes를 제공하고 있습니다. ValidationPipe ParseIntPipe ParseBoolPipe ParseArrayPipe ParseUUIDPipe 이러한 ValidationPipe는 강력한 class-validiator 패키지와 선언적인 validation 데코레이터를 사용합니다. ValidationPipe는 모든 들어오는 클라이언트의 페이로드(payload)에 대한 검증 규칙을 강화하기 위해 간편한 접근을 제공합니다. 그 구체적인 규칙은 local ..
2024.02.12 -
1. Pipes란?Pipe는 Nest에서 PipeTransform 인터페이스를 구현하는 클래스이며 이 클래스 역시 @Injectable() 데코레이터가 붙습니다. pipe는 두 가지의 전형적인 사용 사례를 갖습니다.transformation(변환): 입력 데이터를 원하는 형태로 변환합니다. (e.g., 문자열에서 정수형 변환)validation(검증): 입력 데이터를 검증하고 만약 통과되면 그 값을 바꾸지 않고 그대로 보내고, 검증에 실패하면 예외를 발생시킵니다. 두 경우 모두에서 Pipe는 컨트롤러 라우트 핸들러가 처리 중인 인수를 대상으로 작동합니다. Nest는 메서드(핸들러)가 호출되기 직전에 pipe를 삽입하고, pipe는 메서드로 전달되는 인수를 받아 이를 대상으로..
[NestJS | Docs] Pipes 알아보기 (feat. 변환과 검증)1. Pipes란?Pipe는 Nest에서 PipeTransform 인터페이스를 구현하는 클래스이며 이 클래스 역시 @Injectable() 데코레이터가 붙습니다. pipe는 두 가지의 전형적인 사용 사례를 갖습니다.transformation(변환): 입력 데이터를 원하는 형태로 변환합니다. (e.g., 문자열에서 정수형 변환)validation(검증): 입력 데이터를 검증하고 만약 통과되면 그 값을 바꾸지 않고 그대로 보내고, 검증에 실패하면 예외를 발생시킵니다. 두 경우 모두에서 Pipe는 컨트롤러 라우트 핸들러가 처리 중인 인수를 대상으로 작동합니다. Nest는 메서드(핸들러)가 호출되기 직전에 pipe를 삽입하고, pipe는 메서드로 전달되는 인수를 받아 이를 대상으로..
2024.02.09 -
1. Interceptors란?통상적으로 interceptor는 요청과 응답을 가로채서 중간에 로직에 변화를 줄 수 있도록 하는 컴포넌트를 말합니다. Nest에서는 이를 @Injectable() 데코레이터가 붙은 클래스를 통해 만들 수 있고, Nest에서 제공하는 NestInterceptor 인터페이스를 상속받아 구현할 수 있습니다. interceptor는 AOP 기법으로부터 영감을 받아 그와 관련된 몇 가지 유용한 기능들을 할 수 있습니다.부가적인 로직을 메서드 실행 전 후에 바인딩함수의 반환 결과를 변환함수의 에러를 변환함수의 기본 동작을 확장특정 조건에 의존하는 함수를 완전히 override(e.g., 캐싱 목적) interceptor는 그 개념만 보면 middleware..
[NestJS | Docs] Interceptor 개념정리 (+간단한 Logger)1. Interceptors란?통상적으로 interceptor는 요청과 응답을 가로채서 중간에 로직에 변화를 줄 수 있도록 하는 컴포넌트를 말합니다. Nest에서는 이를 @Injectable() 데코레이터가 붙은 클래스를 통해 만들 수 있고, Nest에서 제공하는 NestInterceptor 인터페이스를 상속받아 구현할 수 있습니다. interceptor는 AOP 기법으로부터 영감을 받아 그와 관련된 몇 가지 유용한 기능들을 할 수 있습니다.부가적인 로직을 메서드 실행 전 후에 바인딩함수의 반환 결과를 변환함수의 에러를 변환함수의 기본 동작을 확장특정 조건에 의존하는 함수를 완전히 override(e.g., 캐싱 목적) interceptor는 그 개념만 보면 middleware..
2024.02.07 -
1. Module 이란?소프트웨어 설계에서 module이란 '애플리케이션을 기능 단위로 분해하고 추상화하여 재사용 및 공유 가능한 수준으로 만들어진 단위'를 의미합니다. 이를 통해 나온 '모듈화'의 의미는 소프트웨어의 성능을 향상시키거나 시스템의 디버깅, 테스팅, 통합 및 수정을 용이하도록 하는 작업입니다. Nest에서의 module도 이러한 개념에서 크게 벗어나지 않습니다. Nest에서 module이란 @Module() 데코레이터가 붙은 클래스를 의미합니다. @Module() 데코레이터는 Nest가 애플리케이션 구조를 조직할 때 보다 더 용이하게 만들어주는 메타데이터를 제공하는 역할을 합니다. 각 애플리케이션은 적어도 하나의 module을 가지게 되는데, 그 module은 root m..
[NestJS | Docs] Module 알아보기 (+동적 모듈/Dynamic modules)1. Module 이란?소프트웨어 설계에서 module이란 '애플리케이션을 기능 단위로 분해하고 추상화하여 재사용 및 공유 가능한 수준으로 만들어진 단위'를 의미합니다. 이를 통해 나온 '모듈화'의 의미는 소프트웨어의 성능을 향상시키거나 시스템의 디버깅, 테스팅, 통합 및 수정을 용이하도록 하는 작업입니다. Nest에서의 module도 이러한 개념에서 크게 벗어나지 않습니다. Nest에서 module이란 @Module() 데코레이터가 붙은 클래스를 의미합니다. @Module() 데코레이터는 Nest가 애플리케이션 구조를 조직할 때 보다 더 용이하게 만들어주는 메타데이터를 제공하는 역할을 합니다. 각 애플리케이션은 적어도 하나의 module을 가지게 되는데, 그 module은 root m..
2024.02.05 -
1. Provider란?Providers는 Nest에서 기본을 구성하는 요소 중 하나입니다. Nest에서는 사용되는 대부분의 기본 클래스를 Provider로 취급합니다.Nest에서 클래스는 services, repositories, factories, helpers, 등의 요소로 활용됩니다. Provider의 핵심 아이디어는 그러한 클래스들이 의존성 주입이 가능하다는 점입니다. 이는 객체들이 서로서로 다양한 관계의 형성과 그러한 객체들 간의 연결을 맺어주는 기능을 Nest 런타임 시스템에게 온전히 맡겨지기 때문에 가능한 것입니다. 위 사진에서 component가 객체 하나라고 보면 되고, 그들이 서로 의존하는 관계가 화살표로 표시되어 있는데 이러한 component의 생성과 각 연결을..
[NestJS | Docs] Provider 개념 정리 (+ Custom Provider)1. Provider란?Providers는 Nest에서 기본을 구성하는 요소 중 하나입니다. Nest에서는 사용되는 대부분의 기본 클래스를 Provider로 취급합니다.Nest에서 클래스는 services, repositories, factories, helpers, 등의 요소로 활용됩니다. Provider의 핵심 아이디어는 그러한 클래스들이 의존성 주입이 가능하다는 점입니다. 이는 객체들이 서로서로 다양한 관계의 형성과 그러한 객체들 간의 연결을 맺어주는 기능을 Nest 런타임 시스템에게 온전히 맡겨지기 때문에 가능한 것입니다. 위 사진에서 component가 객체 하나라고 보면 되고, 그들이 서로 의존하는 관계가 화살표로 표시되어 있는데 이러한 component의 생성과 각 연결을..
2024.02.02