프로그래밍(Basic)

    [바미] NestJS - 예외 필터(Exception Filters)

    예외 필터(Exception Filters)? NestJS에서 예외 처리를 커스터마이징하는 데 사용되는 기능입니다. 애플리케이션 내에서 발생하는 모든 예외를 잡아내고, 개발자가 정의한 방식으로 처리할 수 있게 해줌으로 애플리케이션 전반에 걸쳐 일관된 에러 응답 포맷을 유지할 수 있으며, 추가적인 로깅이나 에러 처리 로직을 적용할 수 있어요. 그래서 아래와 같은 상황에 자주 쓰여요. 클라이언트에게 보다 명확하고 일관된 에러 응답을 제공하고 싶을 때 특정 예외 유형에 대해 세부적인 처리 로직을 적용하고 싶을 때 애플리케이션에서 발생하는 모든 예외를 로깅하고 모니터링하고 싶을 때 예외 필터(Exception Filters)의 장점 모든 예외 처리 로직을 한 곳에서 관리할 수 있어, 코드의 가독성과 유지보수성이..

    [바미] NestJS - 가드(Guards)

    가드(Guards) NestJS의 가드(Guards)는 인증(authentication)과 권한 부여(authorization) 과정에서 주로 사용되는 기능입니다. 가드는 특정 조건 하에 요청을 처리할지 말지 결정하는 역할을 하며, NestJS의 실행 과정에서 라우트 핸들러가 실행되기 전에 동작합니다. 이를 통해 미리 정의된 조건에 따라 요청에 대한 접근을 허용하거나 거부할 수 있어 가드는 AOP(Aspect-Oriented Programming)의 개념을 활용하여 애플리케이션의 보안 관련 로직을 관리하는 데 매우 유용하죠. 그래서 가드는 보통 아래와 같은 때에 주로 사용합니다. 사용자가 요청을 수행할 권한이 있는지 확인할 때 특정 역할(role)을 가진 사용자만 특정 API 엔드포인트에 접근할 수 있도..

    [바미] NestJS - 인터셉터(Interceptors)

    인터셉터(Interceptors) NestJS에서 제공하는 강력한 기능 중 하나로, AOP(Aspect-Oriented Programming)의 개념을 활용합니다. 컨트롤러 핸들러의 실행 전후 또는 예외 발생 시점에 특정 로직을 주입할 수 있게 해주고, 이를 통해 코드의 재사용성을 높이고, 애플리케이션의 관심사를 효과적으로 분리할 수 있게 해주죠. 인터셉터는 아래와 같은 작업을 처리할 때 사용합니다. 메서드 실행 전후에 추가 로직 실행 함수 실행 결과 변환 예외 맵핑 기타 컨트롤러 레벨에서의 공통 작업 처리 어떤 상황에서 쓰면 좋은가? 메서드의 실행 시간을 로깅(Logging)하여 성능 모니터링에 활용할 수 있고, API의 응답 형태를 일관되게 맞추거나, 반환되는 데이터를 사용자에게 보여주기 전에 가공할..

    [바미] NestJS - 데코레이터(Custom decorators)

    데코레이터? 클래스, 메서드, 프로퍼티 또는 매개변수 전체에 대해 메타데이터를 정의하는 간단한 표현입니다. 이 메타데이터는 클래스나 메서드 등의 행동을 변경하거나 확장하기 위해 사용하고 있죠. 사용법 @ 기호를 사용하여 특정 요소에 적용해주는데 NestJS에서는 다양한 데코레이터를 사용하여 클래스, 메서드 등을 정의하고 구성하고 정의 하는데 사용하고 있어요. 예시 코드 클래스 데코레이터로 사용하기 function Logger(prefix: string) { return function (target: Function) { console.log(`${prefix} - ${target.name} created.`); } } @Logger('Controller') class MyController { // 클..

    [바미] NestJS를 사용하여 REST API 구현하기

    안녕하세요. 사용자 정보를 생성(Create), 읽기(Read), 수정(Update), 삭제(Delete)하는 기본적인 CURD(Create, Read, Update, Delete) 기능을 갖춘 REST API를 구현해보겠습니다. Nest.js 프로젝트 생성 먼저 Nest CLI를 사용하여 새로운 프로젝트를 생성해봅시다. nest new Nest-project 모듈 생성 API를 구현할 모듈을 생성해봅시다. nest g module app nest g module user 컨트롤러 생성 nest g controller app nest g controller user 서비스 생성 nest g service app nest g service user 코드 작성 이제 본격적으로 코드를 작성해볼까요? 먼저 sr..

    [바미] Nest 모듈(Module) 이해하기

    Nest 소개 Nest? Nest.js는 TypeScript로 작성된 프레임워크로, Node.js를 기반으로한 서버 사이드 애플리케이션을 구축하기 위한 도구입니다. Angular와 비슷한 구조와 기능을 제공하여 Angular 사용자들에게 친숙하 codesk.tistory.com 앞서 소개글에도 설명했듯이 Nest.js에서 모듈은 애플리케이션의 기능을 나타내는 단위입니다. 간단한 예제 코드를 통해 각 모듈의 컨트롤러, 서비스, 프로바이더 등이 어떻게 구성되어 있는 지 확인하는 시간을 가져보도록 하겠습니다. 예제 코드 준비 사항 예제 코드에 들어가기 전에 프로젝트를 Nest 프로젝트를 생성해봅시다. nest new Nest-project 위 명령어를 터미널 창에 입력하면 아래와 같은 구조를 가지게 됩니다. ..

    [바미] Nest 소개

    Nest? Nest.js는 TypeScript로 작성된 프레임워크로, Node.js를 기반으로한 서버 사이드 애플리케이션을 구축하기 위한 도구입니다. Angular와 비슷한 구조와 기능을 제공하여 Angular 사용자들에게 친숙하고 익숙한 느낌을 주는 특징을 가지고 있습니다. Nest.js의 주요 특징 Nest.js 애플리케이션의 기능을 나타내는 단위인 모듈은 각 모듈은 @Module() 데코레이터를 사용하여 정의되며, 해당 모듈에는 HTTP 요청을 처리하고 해당 요청에 따른 응답을 반환하는 역할을 담당하는 Controller, 애플리케이션의 비즈니스 로직을 담당하는 Service, 의존성 주입(Dependency Injection)을 위해 사용되는 객체인 Provider등의 다양한 모듈러 구조를 가지고..

    Nest - EntityMetadataNotFoundError

    EntityMetadataNotFoundError는 TypeORM이 데이터베이스 테이블과 연결될 엔티티의 메타데이터를 찾을 수 없을 때 발생하는 오류입니다. 이 문제는 대개 엔티티 파일의 위치가 잘못되었거나, TypeOrmModule에 엔티티를 잘못 등록했을 때 발생하게 되는데요. 저는 아래와 같이 entities를 지정한 상태에서 에러가 나서 import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { UsersModule } from './users/users.module'; // Other imports... @Module({ imports: [ TypeOrmModule.forRoot..

    Nest - Swagger에서 변수 optional하게 처리해야 할 때

    Controller 부분에서 아래와 같이 함수를 짜면 잘 보이지만 swagger에서는 잘 잡히지 않는 경우가 있습니다. @Query('쿼리파라미터1') 쿼리파라미터1?: string, @Query('쿼리파라미터2') 쿼리파라미터2?: string, @Query('쿼리파라미터3') 쿼리파라미터3?: string, 위와 같이 optional 하게 주려고 해도 스웨거 상에서 필수값으로 지정 되버리더라구요. 해결 방법은 아래 깃허브 링크를 클릭하면 찾을 수 있습니다. Please Add `optional: boolean` to @Query route param decorator · Issue #2169 · nestjs/nest I'm submitting a... [x] Feature request Current..