Dev

    NestJS Request Lifecycle

    NestJS Request Lifecycle

    참고자료 : https://docs.nestjs.com/faq/request-lifecycle 00. 들어가기 전이번 포스트는 NestJS에서 Request를 받아서 Response 할 때까지 어떻게 흘러가는 지인, NestJS Request Lifecycle에 대해 정리한 글이다. 해당 부분에 대해서는 공식 문서만 참고하였다. 01. NestJS Lifecycle아래의 이미지는 NestJS의 생명 주기를 도식화한 것이다. HTTP Request가 들어오면 Middleware, Guard, Interceptor, Pipes, Controller, Interceptor 순으로 거쳐서 Response가 된다. 여기에서 특이한 건 Filter 부분인데, 타 프레임워크와 다르게 NestJS에서의 Filter는 ..

    Express를 이용하여 Custom Router Decorator를 만들어보자.

    Express를 이용하여 Custom Router Decorator를 만들어보자.

    참고글 : https://javascript.plainenglish.io/how-to-write-simple-router-decorators-for-expressjs-with-typescript-3b8340b4d453 How to Create Express Router Decorators with TypeScriptMake Express server routers cleaner with TypeScript decoratorsjavascript.plainenglish.io 00. 들어가기 전다른 글에서도 이야기한 적이 있지만 필자는 NodeJS -> Spring Boot -> NestJS 순서로 백엔드를 학습하여 현재는 Controller - Service - Repository - Domain 레이어 계..

    NestJS에서 typeorm-transactional를 사용하여 트랜잭션 관리

    NestJS에서 typeorm-transactional를 사용하여 트랜잭션 관리

    00. 들어가기 전필자는 백엔드 개발을 Node(Express)로 시작하였지만, 동아리 활동으로 인해 Spring Boot를 그 후에 접하고 Node에서 Spring Boot처럼 구현할 수 있는 NestJS에 매력을 느껴 지속적으로 사용 중이다. 사실 NestJS를 가장 좋아하지만 Spring boot로 개발해야하는 경우도 어쩔 수 없이 있기에 둘 다 사용하는 편이라 그런 지 NestJS를 사용할 땐 Spring boot의 특정 기능이 부럽고, Spring boot를 사용할 땐 NestJS의 특정 기능이 부러워질 때가 많은 데, 그 중 NestJS를 사용 중에 가장 Spring Boot에서 부러웠던 건 @Transactional 데코레이더였다.  너무나 쉽게 트랜잭션을 관리하게 해주는 기능이라고 생각했는..

    Turborepo로 프로젝트 구성하기

    Turborepo로 프로젝트 구성하기

    Getting Started with Turborepo – TurborepoCreate your first monorepo or add Turborepo to an existing project.turbo.build  00. 들어가기 전 Turborepo는 Javascript, Typescript 코드 베이스를 위한 고성능 빌드 시스템으로 Monorepo 구성이 가능합니다. 오늘은 Turborepo 프로젝트를 생성하는 법에 대해 포스팅 합니다. 본 포스팅에 들어가기 전에 Turborepo로 진행하기 위해 라이브러리를 global로 설치를 해야합니다. pnpm install turbo --global 01. 프로젝트 생성  아래의 명령어를 터미널에 입력하면, 프로젝트의 이름을 입력하고, 패키지 관리자로 사..

    상대 패턴(State Pattern)

    상대 패턴(State Pattern)

    상태 패턴(State Pattern) 상태 패턴은 객체의 상태에 따라 행동을 해야하는 상황에서 객체 스스로 자신의 상태에 따른 행동을 하지 않고, 상태를 객체화하여 상태가 행동을 할 수 있게 위임한 패턴이다. 쉽게 말하면 상태를 Class에서 값으로 가지고 있는 것이 아니라, Class로 선언하고 해당 상태의 Class가 해야하는 행동을 메서드로 정의하고 이를 인터페이스로 캡슐화 후 호출하는 Class가 인터페이스를 호출하는 방식이다. 사용 예시 자 그러면 Person Class를 이용해서 예시를 들어보자. 사람은 나이에 따라 상태를 child(어린이), Adult(청년), Senior(노년)으로 구별된다. 해당 상태에 따라서 움직인다라는 메서드를 사용 가능하고 움직이면 나이가 들다가 다시 어린이로 돌아..

    NestJs Event 처리(@nestjs/event-emitter)

    NestJs Event 처리(@nestjs/event-emitter)

    NestJS에서는 Spring boot의 Events의 기능과 마찬가지로 이벤트를 발행하고 구독하는 기능을 @nestjs/event-emiiter를 이용하여 기본적으로 제공한다. 해당 기능을 이용하면 여러가지 기능을 로직에서 분리하여 개발할 수 있다는 장점이 있다. 오늘은 Nestjs에서 이벤트를 발행하고 구독하는 기능을 정리하고자한다! 00. 들어가기 전(프로젝트 셋팅) 해당 포스팅을 위해 새로운 프로젝트를 생성한다. 아래의 명령어를 이용하면 패키지 관리자로 npm, yarn, pnpm을 선택하라고 나올텐데 필자는 pnpm을 사용한다. npx nest new [project name] Project가 생성되면 아래와 같이 나오면 성공이다. 01. Event-Emiiter 설정 먼저 @nestjs/eve..

    Minio에 파일 업로드하기(with aws-sdk)

    Minio에 파일 업로드하기(with aws-sdk)

    MinIO | High Performance, Kubernetes Native Object Storage MinIO's High Performance Object Storage is Open Source, Amazon S3 compatible, Kubernetes Native and is designed for cloud native workloads like AI. min.io 0. 들어가기 전 Minio는 AWS S3와 호완되는 Object Storage인데 회사에서는 AWS S3 등의 스토리지를 사용했겠지만 개인 프로젝트의 경우에는 비용을 고려해야하기에 진행하고 있는 프로젝트에선 Minio를 채택하여 파일 서버로 구성하였다. 다른 파일 서버도 존재하지만 Minio를 선택한 이유는 총 3가지가 존재한..

    React에서 axios 응용하기.

    React에서 axios 응용하기.

    Axios 브라우저와 node.js를 위한 Promise 기반 HTTP 클라이언트 라이브러리 Axios는 브라우저와 node.js를 위한 간단한 Promise 기반 HTTP 클라이언트입니다. Axios는 확장 가능한 인터페이스를 가진 작은 패키지로 axios-http.com 0. axios란? axios는 node.js와 브라우저를 위한 Promise 기반의 HTTP 클라이언트다. 즉 브라우저 뿐만 아니라 NodeJS 위에서도 동작한다는 것이며, 브라우저에서는 XMLHttpRequests를 사용하고 NodeJS에서는 http 모듈을 사용한다. axios는 Promise를 기반으로 JSON으로 데이터가 자동 변환된다는 점이 있어 기본으로 제공해주는 fetch에 비하여 편리한 점이 많아서 가장 많이 사용되는..

    window의 location에 대해 알아보자

    window의 location에 대해 알아보자

    0. 들어가기 전 최근 회사에서 업무를 보면서 History에 대한 부분에 이슈가 있었다. 브라우저에서 이동을 하는 과정에서 기록을 남기지 않고 가야하는 이슈가 있었는 데, 이에 대해 window.location.href를 이용하여 이동하는 것이 아니라 window.location.replace를 이용하여 해결을 했지만 해당 객체에 대한 정리가 필요할 거 같아서 작성을 한다. 1. Location 객체 window.location은 Location 객체를 가르킨다. 우리는 Location 객체를 이용하여 현재 웹 페이지의 URL 정보를 얻거나, 변경할 수 있다. Location 객체에는 데이터에 대한 정보를 받아올 수 있는 인스턴스의 속성과 메서드로 구성되어있다. Location은 읽기 전용의 프로퍼티지..

    Minikube에서 간단하게 배포하기.

    Minikube에서 간단하게 배포하기.

    Minikube 쿠버네티스는 본래 마스터 노드와 1개 이상의 워커 노드로 구성되어 있지만, 단순 테스트를 위하여 개인이 2개의 노드를 구성한 플랫폼을 만드는 것은 쉽지 않다. Minikube는 마스터 노드의 일부 기능과 개발 및 배포를 위한 단일 워커 노드를 제공하여 간단한 쿠버네티스 플랫폼 환경을 개인 PC에서도 만들 수 있게 도와준다. 오늘은 M2 맥북에서 Minikube를 사용하는 방법에 대해서 학습할 것이다. Minikube와 kubectl 설치 먼저 homebrew를 이용하여 minikube를 설치해준다. brew install minikube 설치를 마치고, 아래 명령어를 이용하여 설치가 잘 되었는 지 확인한다. minikube version 이제 Kubectl을 설치해보자. kubectl은 ..