프로그래밍(Basic)

    [바미] Nest - 마이크로서비스(Microservices)

    마이크로서비스(Microservices)? 마이크로서비스는 애플리케이션을 작고, 독립적으로 배포 가능한 서비스로 나누는 아키텍처 스타일을 말하는데 이 모듈을 사용하여, 독립적으로 배포 가능한 작은 서비스들을 구축하고, 이 서비스들 간의 효율적인 통신을 관리할 수 있게 해줍니다. 대표적으로 TCP, Redis, MQTT, NATS, 드의 다양한 메시지 전달 매커니즘을 지원하여, 마이크로 서비스 간의 비동기 통신을 쉽게 구현 할 수 있게 해줍니다. 그래서 애플리케이션의 각 기능을 독립된 서비스로 분리하고 싶을 때, 서비스를 개별적으로 업데이트 하거나 확장하고 싶을 때, 서비스마다 가장 적합한 기술 스택을 사용하고 싶을 때 자주 사용합니다. 마이크로 서비스의 장점 시스템의 특정 부분만 확장할 수 있기 떄문에 ..

    [바미] Nest - 파이프(Pipes)

    파이프(Pipes)? NestJS에서 파이프는 요청의 데이터 처리 과정에서 핵심적인 역할을 담당합니다. 파이프는 요청 처리 파이프라인의 일환으로 작동하며, 주로 데이터 변환(transform)과 유효성 검사(validation) 이 두 가지 주요 작업에 사용되는데요. 데이터 변환은 입력 데이터를 애플리케이션이 요구하는 특정 형식으로 변환하는 과정을 의미합니다. 반면, 유효성 검사는 입력 데이터가 설정된 조건이나 규칙을 만족하는지 확인하는 절차이죠. 파이프(Pipes)는 어떤상황에 쓰면 좋은가? 그래서 파이프는 NestJS 개발 과정에서 매우 유용한 도구로, 여러 상황에서 그 가치를 발휘하는데요. 개발자가 입력 데이터를 효과적으로 관리하고, 데이터의 무결성을 유지하며, 잠재적인 오류를 사전에 방지할 수 있..

    [바미] 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등의 다양한 모듈러 구조를 가지고..