본문 바로가기
  • optimuslee

nestJS19

[Nestjs]7-1. Guard 기본적인 구현 방법 안녕하세요~!! 오늘은 저번 시간에 알아본 가드에 대해서 직접 구현해보는 시간을 갖도록 하겠습니다. 🥊Authorization guard 사용자 인증은 가드의 예시 중 가장 대표적인 예시입니다. 우리가 구현할 AuthGuard는 사용자의 헤더에 특정 토큰이 제대로 들어있는 지 확인하는 것입니다. import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common'; import { Observable } from 'rxjs'; @Injectable() export class AuthGuard implements CanActivate { canActivate( context: ExecutionContext ): boolean | Promise.. 2022. 6. 25.
[Nestjs] 7. Guard 🥊🥊 안녕하세요~! 오늘은 가드의 개념에 대해서 간단히 알아보도록 하겠습니다. 권투에서 가드는 우리의 몸을 보호하는 아주 중요한 동작입니다. 서버에서도 가드는 보호 및 보안을 담당하는 중요한 요소입니다. Guard는 허용된 유저가 아니면 접근을 막아버립니다. 만약 모든 유저가 모든 요청을 할 수 있게되면, 보안적인 부분에서 문제가 발생할 수 있기에 접근이 허용된 사람에 대하여 요청을 받고 응답을 전달하는 것입니다. 🥊Guard 개념 가드는 @Injectable() 데코레이터로 주석이 달린 클래스이며 CanActivate 인터페이스를 구현해야합니다. 특정한 조건에 따라 요청을 처리할 지 거부할 지를 결정합니다. express.js에서는 이를 미들웨서에서 처리했었습니다. 미들웨어는 함수를 호출한 후에 다음 핸들러.. 2022. 6. 25.
[Nestjs] 6-2. 미들웨어의 여러 기능들 ✨안녕하세요!? 오늘은 지난 시간에 이어서 미들웨어 다른 기능들에 대해 알아보는 시간을 갖도록 하겠습니다. 코드는 저번 시간에 사용했던 내용과 크게 다르지 않습니다. 변형되는 부분들만 수정해주시면 됩니다~!! 위의 코드를 기준으로 하나씩 변형하면 새롭게 접하는 기능들에 대해 알아보도록 하겠습니다. 🎉Roue Wildcards export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer.apply(LoggerMiddleware).forRoutes('c*ts'); } } 위 코드는 "cts", "cats", "c_ts" 와 같은 경로로 요청을 받을 수 있습니다. *외에도 ?, +, () 문자들도.. 2022. 6. 5.
[Nestjs] 6-1. Nestjs의 미들웨어(middleware) 안녕하세요~!!. 오늘은 지난 시간에 이어서 Nestjs의 미들웨어(middleware)에 대해 알아보는 시간을 갖도록 하겠습니다. 미들웨어는 클라이언트로부터 들어온 요청을 핸들러가 처리하기 이전에 코드를 실행할 수 있는 기능을 뜻합니다. (지난 시간에 비해 훨씬 구체적인 정의죠? ㅎ...) 또한 미들웨어 함수는 애플리케이션의 요청, 응답 주기에서 요청 및 응답 객체에 접근할 수 있으며 next()라는 미들웨어 함수를 사용할 수도 있습니다. Nest 미들웨어는 지난 시간에 언급했던 express의 미들웨어와 거의 동의합니다. 한 가지 차이점이 있다면 Nest에서는 @Injectable() 데코레이터가 있는 클래스로도 구현할 수 있다는 것입니다. 그리고 이러한 클래스로 구현하려면 NestMiddleware.. 2022. 5. 15.
[Nestjs] 6. 미들웨어 (middleware) 안녕하세요? 오늘은 ✨미들웨어(middleware)에 대해서 배워보는 시간을 가져보도록 하겠습니다. 서버 개발을 한번이라도 해본 사람이라면 한번쯤은 들어보셨을 것 같습니다. (아! 물론 처음 들어봤어도 상관없어요) 📢미들웨어란? 미들웨어는 운영 체제에서 제공하지 않는 일반적인 서비스와 기능을 애플리케이션에 제공하는 소프트웨어입니다. 데이터 관리, 애플리케이션 서비스, 메시징, 인증 및 API 관리는 주로 미들웨어를 통해 처리됩니다. 쉽게 말해서 번거로운 일련의 과정을 중간에서 손쉽게 처리해주는 절차라고 생각하시면 됩니다. 사실 미들웨어(middleware)라는 말이 굉장히 추상적인 말이라서 어떻게 쓰냐에 따라서 설명이 달라질 수 있지만 제가 Nestjs에서 설명하려는 미들웨어(middleware)는 서버.. 2022. 5. 13.
[Nestjs] 5-1. 공유 모듈 (shared modules) Nest 프레임워크에서 모듈은 기본적으로 싱글톤입니다. 여기서 싱글톤이란 어플리케이션이 시작될 때 어떤 클래스가 최초에 한번만 메모리를 할당하고 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴입니다. 이런 특성 덕분에 Nest는 인스턴스를 매번 만들지 않고, 모듈에서 DI(의존성 주입)를 통해 가져옵니다. 모든 모듈은 자동으로 공유 모듈이며 생성되면 재사용할 수 있습니다. 모듈에서 프로바이더를 export하면 다른 곳에서 해당 모듈을 import하면 export한 프로바이더에 접근할 수 있습니다. 사용 예시는 아래와 같습니다. import { Module } from '@nestjs/common'; import { CatsController } from './cats.controller'; impor.. 2022. 4. 27.
[Nestjs] 5. 모듈(Module)에 대하여... 모듈은 클래스나 함수처럼 한가지 일만 수행하는 컴포넌트는 아닙니다. ✨여러 컴포넌트를 합쳐서 더 큰 작업을 수행하는 단위를 일컫는 말입니다. @Module() 데코레이터를 사용하며 이에 대한 인자로 메타데이터를 받습니다. 아래의 그림을 예시로 모듈을 설명하도록 하겠습니다. Application Module은 루트 모듈이며 기본적으로 Nestjs 프레임워크에 자동으로 생성되는 모듈입니다. 루트 모듈은 다른 모듈들을 사용하기 위한 일종의 시작점입니다. 그리고 각각의 모듈들은 맡은 고유의 기능들이 있습니다. 물론 이 기능들은 개발자가 정의하며 유지/보수하는 과정에서 더 세밀하게 재정의되거나 변경될 수 있습니다. User Module은 사용자와 관련된 기능들( 회원가입, 정보 수정 등)을 내포하고 있으며 Ord.. 2022. 4. 24.
[Nestjs] 4-3. 속성 기반 주입(property based injection) 우리가 이전에 배웠던 의존성 주입은 생성자 기반의 주입방식입니다. contructor를 통해서 주입을 하기 때문입니다. 하지만 이번 장에서는 ✨속성 기반 주입(property based injection)에 대해 같이 알아보도록 하겠습니다. //propertyBase.catparentService.ts export class catParentService{ constructor(private readonly testServiceA: TestServiceA){ } testHello(): string{ return "hello world" } parentTest(): string{ return this.testServiceA.testHello(); } } // propertyBase.catchildServi.. 2022. 4. 23.
[Nestjs] 4-2. DI(Dependency Injection)?? 의존성 주입?? 오늘은 의존성 주입에 대해 한번 자세히 알아보도록 하겠습니다. 간단히 언급을 하며 넘어간 적은 있었지만 구체적으로 설명한 적은 없었습니다. (이번에 설명하려고 그랬어요 ㅎ...) 의존성이라는 단어도 알고 주입이라는 단어도 알고 있지만 두 단어를 합쳐놓이니 무슨 말인지 모르겠습니다 ㅎ. 📢의존성 주입이란 하나의 객체가 다른 객체의 의존성을 제공하는 기술을 일컫는 말입니다. 더 쉽게 말하면 미리 만들어 놓은 객체를 불러와서 사용하는 것입니다. 아래 코드를 예시로 설명하겠습니다. class Animal{ private cat: Cat; getCrying():string{ this.cat=new Cat() return this.cat.Meow() } } class Cat{ crying(): string{ ret.. 2022. 4. 21.
[Nestjs] 4. 프로바이더 3장에서 우리는 컨트롤러에 대해 배웠습니다. 컨트롤러는 요청과 응답을 가공하고 처리하는 역할 맡는다고 배웠습니다. 프로바이더는 어플리케이션이 제공하고자는 기능을 수행하는 역할을 합니다. 프로바이더의 주요 개념은 의존성을 지입할 수 있다는 것입니다. 각각의 개체들이 서로 관계를 만들어 기능을 할 수 있도록 해줍니다. 프로바이더는 @Injectable() 데코레이터로 주석이 달린 클래스입니다. 📢프로바이더는 서비스, 레포지토리, 팩토리, 헬퍼 등 여러가지 형태로 구현이 가능합니다. 위에서 언급했다시피 Nestjs에서 제공하는 프로바이더의 핵심은 의존성을 주입할 수 있다는 점입니다. 이를 위해선 라이브러리를 사용할 수도 있지만 Nestjs에서 기본적으로 제공하기 때문에 손쉽게 사용할 수 있습니다. 💡 의존성 .. 2022. 4. 10.
[Nestjs] 3-4. payload 다뤄보기 post, put, patch는 보통 데이터를 같이 서버로 보냅니다. 이때 서버로 보내는 데이터를 우리는 페이로드라고 합니다. 그리고 이러한 데이터는 body에 들어있으며 Nestjs는 DTO(Data Transfer Object)을 정의하여 쉽게 다룹니다. DTO(Data Transfer Object)란 계층간 데이터 교환을 위해 사용하는 객체(Java Beans)입니다. 데이터가 정해진 주소로 들어오면 createCatDto로 데이터를 받고 그 중에서 name과 email 정보를 추출하여 응답으로 반환합니다. 위의 코드가 제대로 실행되는지 cat 생성 api를 요청하고 데이터가 잘 들어가는지 확인해보도록 하겠습니다. 📤요청 📥응답 이름과 이메일을 작성하여 데이터를 서버로 전송하였습니다. 응답도 우리가.. 2022. 4. 3.
[Nestjs] 3-2. CRUD 시스템 서버를 공부하다보면 CRUD라는 단어를 많이 접하시게 될 것입니다. 저도 처음에는 "이..이건 뭐지"라며 당황했었습니다. 하지만 지금부터 알면 되니까 너무 걱정하지 마세요~! CRUD는 데이터 처리 기능인 Create, Read, Update, Delete를 묶어서 일컫는 말입니다. Create는 생성, Read는 데이터 읽기, Update는 데이터 갱신, Delete는 삭제를 뜻하는 기능입니다. 이름 기능 Create 생성 Read 읽기 Update 갱신 Delete 삭제 실제로 데코레이터를 이용하여 코드를 작성하면 아래와 같이 작성할 수 있습니다. 기존의 코드에서는 @Get() 데코레이터를 통해 브라우저에서 바로 데이터를 읽어올 수 있었지만 이번에는 @Res()를 통해 반환되는 값을 읽어보겠습니다. .. 2022. 4. 2.