본문 바로가기

Node.js6

Github Action으로 NPM 라이브러리 버전 관리하기 npm 라이브러리를 개발하던 도중 버전 관리에서 약간의 불편함을 느꼈다. 개발을 한 후 npm에 배포하기 위해 매번 package.json에 들어가 버전을 올려주어야 했기 때문이다. 단체로 작업하는 큰 라이브러리가 아니였기 때문에 이런 부분에는 신경을 덜 쓰고 싶었고, github action을 활용해 npm 버전을 배포할 때 자동으로 올려주게끔 하였다. NPM Access Token 발급 https://www.npmjs.com/ 에 들어가 로그인한 후 프로필은 누르면 아래에서 Access Tkoens이라는 탭을 찾을 수 있다. 들어가서 Classic Token으로 만들어주자. 만약 github package로 배포한다면 npm 말고 github에서 access token을 받아주자. 그럼 아래처럼 Ac.. 2023. 5. 26.
Prisma는 Type-Safety를 어떻게 보장하는가(Feat. VS TypeORM) 오늘은 Nest에서 ORM 라이브러리로 많이 거론되는 둘을 비교해보고자 한다. Nest를 공부하면서 공식문서에 많이 소개 되어있던 TypeORM(이하 타입오름)을 자연스럽게 사용하게 되었었지만, 이름이 무색하게도 TypeORM은 Typescript와 함께 사용할 때 종종 불편한 상황들을 많이 만들어냈던 것 같다. TypeORM이 무엇인지, 어떤 불편한 점이 있는지 간단히 살펴보고 그 대항마로 점점 유명해지고 있는 Prisma는 어떻게 이런 불편한 부분을 해결해 인기를 끌고 있는 것인지 간단하게 알아보도록 하자. ORM(Object Relational Mapping) 먼저 ORM이란 객체와 데이터베이스의 관계를 매핑해주는 도구이다. ORM을 사용하면 직접 쿼리를 작성하지 않기에 데이터베이스와의 연결이 느슨.. 2023. 4. 17.
NestJS - Decorator를 활용한 Discord봇 개발환경 개선 IT동아리 Mash-up에서 서버팀 사이드 프로젝트로 Nest를 사용해 Discord 봇을 만들고 있었습니다. 디스코드 봇에 내릴 수 있는 커맨드들을 정의하고 그에 대한 응답을 보내주는 로직을 작성하는데, 이런 커맨드 하나를 추가하기 위해 최소 4개의 파일을 수정해야하는 상황이였습니다. 아래는 각 파일의 수정이 필요한 부분들입니다. 1. 커맨드들에 대한 정보를 정의해야했습니다. 2. 각 커맨드들에 대한 응답을 매핑해서 리턴해주는 Factory Provider에서 각각의 Reply Provider 들을 주입받아 처리했어야했습니다. 3. Nest의 DI를 사용하기 위해 Module에 각 Reply Provider들을 넣어주어야 했습니다. 4. 각 응답에 대한 Reply Provider 파일을 작성해야했습니다.. 2023. 3. 16.
[TypeORM] Active Recore & Data Mapper Pattern 이번에 Nest JS 프로젝트를 새로 시작하게 되었다. 그러면서 둘 중 어느 패턴을 선택하여 적용할지에 대해 고민하게 되었는데 그 과정에서 공부한 것을 간단히 적고자 한다. Active Record Pattern Active Record 패턴은 모델 안에 모든 쿼리들을 정의해두고 CRUD 작업들을 모델의 메소드를 통해 실행하게 된다. 즉, Active Record 패턴은 모델 안에서 데이터베이스에 접근하는 패턴이라고 볼 수 있을 거 같다. import {BaseEntity, Entity, PrimaryGeneratedColumn, Column} from "typeorm"; @Entity() export class User extends BaseEntity { @PrimaryGeneratedColumn().. 2021. 8. 30.
NestJS Provider(프로바이더) Providers Service, Repository, Factory, Helper 등등, 대부분의 Nest클래스는 프로바이더로 취급 가능하다. 프로바이더는 Nest에서 종속성 주입(Dependency Injection)이 가능한데, 이로 인해 Nest에서는 다양한 관계를 지닌 객체 인스턴스의 연결을 Nest의 런타임 시스템에 위임할 수 있다. Nest에는 프로바이더 간의 관계를 담당하는 내장 IoC(Inversion of Control)컨테이너가 존재하는데 @Injectable 데코레이터를 사용하여 Nest IoC 컨테이너에서 관리할 수 있는 클래스임을 선언하는 메타데이터를 첨부할 수 있다. Nest는 기본적으로 싱글톤 패턴을 따르는 프레임워크이다. Nest는 Bootstrap될 때 Module에 등록.. 2021. 8. 19.
NestJS Lazy-loading Modules 간단 소개 Nest 버전 8에서 나온 최신 방법! 7미만이면 LazyModuleLoader를 불러오지도 못한다.. lazyModuleLoader를 찾을 수 없다면 NestCLI의 버전을 체크하고 업데이트 해주길 바란다! 기존의 Module Load → Bootstrap과 동시에 모든 모듈 로드 Lazy-loading Modules 기법 → 필요한 모듈만 로드하여 부트스트랩 시간 단축 사용 방법 // cats.service.ts @Injectable() export class CatsService { constructor(private lazyModuleLoader: LazyModuleLoader) {} } Or // main.ts import { LazyModuleLoader, NestFactory } .. 2021. 8. 8.