프로그래밍(Basic)

    [바미] 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..

    [바미] SSR과 CSR

    브라우저 렌더링 먼저 브라우저 랜더링이란 브라우저가 서버로부터 요청해 받은 내용을 브라우저 화면에 표시해주는 작업을 말합니다. 브라우저가 서버로부터 HTML, CSS, JS 문서를 전달받아 브라우저 엔진이 각 문서를 해석해 브라우저 화면을 그려주는 것이죠. 예를 들어, 아무 브라우저에 접속해서 주소창에 https://www.naver.com/ 을 입력한다면 브라우저는 네이버 서버로부터 네이버 웹사이트에 대한 정보를 받아 브라우저 화면에 네이버 홈페이지를 그려 주게 되는 것이죠. 그리고 이러한 브라우저 렌더링은 크게 ' 서버 사이드 렌더링'과 ' 클라이언트 사이드 렌더링' 방식으로 나누어 지죠. 서버 사이드 렌더링 서버 사이드 렌더링은 클라이언트(브라우저)가 서버에 매번 데이터를 요청하여 서버에서 처리하는..