Backend/Node.js (NestJS)


이제 데이터베이스를 사용하기 위해서 NestJS에 데이터베이스를 연동하고, TypeORM을 통해 연동하여 사용하는 방법을 포스팅해보려고 한다. TypeORM이란? ORM은 Object-relational-mapping의 약자로 소스코드의 클래스와 데이터베이스를 자동으로 매핑시켜주어 연결해준다. 즉 클래스 테이블 간의 연결을 자동으로 해준다. Express에서 가장 많이 사용되는 ORM들 중에는 Sequelize와 TypeORM이 있다. Sequelize의 경우에도 타입스크립트를 지원하기는 하지만, 모델의 정의와 관계형성 면에서 TypeORM가 스타일에 잘 맞아서 사용할 ORM으로 선택하려고 한다. 데이터베이스 준비 TypeORM에서 사용할 데이터베이스를 선택하여야 한다. MySQL, MariaDB, Po..


이번 포스팅에서는 중고마켓에 사용될 상품 데이터의 CRUD를 하는 REST API를 NestJS로 만들어보려고 한다. 프로젝트 구조 - products 디렉터리 안에 모듈 구조를 만들어둔다 - products 디렉터리 안에 dto와 interfaces 디렉터리를 만든다. - dto는 요청 Input으로 들어오는 데이터 타입을 정의한다. - interface는 요청 결과 등으로 쓰이는 데이터의 인터페이스를 정의한다. - app.module.ts에서는 ProductModule을 imports에 추가한다. 모듈 ▶ products.module.ts import { Module } from '@nestjs/common'; import { ProductsController } from './products.con..


이전 포스팅에서 NestJS의 의존성 주입과 제어의 역전에 대해서 다루었다. 이제 그 내용을 바탕으로 서로 다른 모듈들 간에서의 의존성을 어떻게 설정해 줄 것인가에 대해서 간단한 프로젝트를 만들며 알아보려고 한다. TODO 요리사 모듈과 웨이터 모듈을 만든다. 요리사는 직접 고기를 자르거나 잘린 고기가 있다면 스테이크를 굽는다.(없다면 굽지 못한다) 웨이터는 탁자를 닦거나 스테이크를 주문받아 서빙한다. 프로젝트 구조 다음과 같은 프로젝트 구조를 만들었다. 1. app.module.ts는 루트 모듈로 사용하며, 컨트롤러와 서비스는 지워주었다. 2. apis 디렉터리를 생성 후 chef와 waiter를 추가하였다. 3. chef와 waiter의 controller, module, service를 추가하여 모..


이전 포스팅에서 Nest의 모듈 구조에 대해서 간단하게 훑어 보았었는데, 이런 모듈간의 결합이 어떠한 방식으로 이루어지는지에 대해서 알아보려고 한다. Nest.js를 학습하면서 느끼는 것은 Spring과 유사한 면이 있다는 것인데, 아래의 특징들 때문인 것 같다. 싱글턴 패턴 (Singleton Pattern) 싱글턴 패턴은 변하지 않는 속성과 상태를 가지는 하나의 클래스는 하나의 인스턴스만 생성하여 사용하겠다는 디자인 패턴이다. 계산기 클래스를 사용할 때 마다 new 계산기()를 하지 않고 하나의 인스턴스를 필요할 때마다 사용하는 방식 데코레이터(@Module, @Injectable, @Controller 등 ..)를 통해 작성된 모듈들은 싱글톤 패턴을 따른다. 인스턴스를 매번 생성하지 않고, 필요하지..


이제 첫 프로젝트를 생성하고, Hello World를 보여지는 과정을 알아보면서 프로젝트의 대부분의 동작을 구성하는 Module 구조와 작동 방식에 대해 알아보자. ▶ main.ts import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); await app.listen(3000); } bootstrap(); 이전 장에서 main.ts가 앱의 진입점이라고 했다. 최초에 AppModule을 생성하는데, 이 때 생성된 모듈인 AppModule이, Root Module, 즉 모든..


이제 첫 NestJS 프로젝트를 생성해보자 CLI 설치 NestJS는 Angular나 React 등처럼 커멘드 라인을 통해 필요한 행동을 할 수 있도록 CLI를 지원한다. CLI를 설치하면 프로젝트 생성을 비롯한 NestJS에 필요한 명령어들을 손쉽게 사용할 수 있다. npm install --g @nestjs/cli yarn global add @nestjs.cli 2023년 1월부터 한국에서 발생한 문제 NestJS 관련 모듈들이 KT 통신망을 사용하는 클라이언트들에 한에서 설치되지 않는 문제가 발생했다고 한다. 만약 설치가 실패하는 경우 아래의 링크를 참고하여 다시 설치해보자. https://velog.io/@librarian/ts-jest-%EC%84%A4%EC%B9%98-%EC%95%88%EB%..


이번 겨울에 Nest.js를 공부하게 되면서 학습 내용을 기록해보려고 한다. 처음 시작부터, REST API, GraphQL API 만들기, 인증과 인가, DB ORM 사용, 파일 처리 등의 내용들을 포스팅하며 중고마켓 API를 만드는 것을 목표로 한다. 프론트엔드는 현재는 구현 계획이 없으나 나중에 한번 다룰 기회가 있다면 포스팅해보겠다. NestJS란? Node.js 기반의 웹 프레임워크, 기존에 많이 사용하던 프레임워크였던 Express를 기반으로 하여 업그레이드한 프레임워크이다. NestJS를 사용하는 이유 Node.js 기반의 프레임워크로 가장 널리 사용하고 있는 Express는 쉽고 빠르게 개발이 가능하지만, 너무나 자유로운 나머지 소프트웨어 품질이 일정하지 않다. 개발자들 사이에서 일관된 틀..


Apollo Server 구축 NPM에서 필요한 패키지를 설치해주자 yarn add applo-server graphql 이것이 Apollo Server Document에 서술되어있는 기본 구조이다. typeDefs에 스키마를 선언하고, Resolvers에 행동 액션을 명세한다. const { ApolloServer, gql } = require('apollo-server'); // The GraphQL schema const typeDefs = gql` type Query { hello: String } `; // A map of functions which return data for the schema. const resolvers = { Query: { hello: () => 'world', },..

GraphQL이란? 페이스북이 창시, API 구축을 위한 쿼리 언어. REST API의 단점을 보완하였으며 사용자가 많은 서비스들의 구축에 유리한 방식. REST와의 사용 방식 비교 1. GET/POST/PUT/DELETE vs QUERY/MUTATION 2. 사용방법: /memeber/1 (REST). vs member(1) (GraphQL) 오버패칭 극복 REST API를 사용하게 될 시에 클라이언트는 필요하지 않은 데이터들까지 API가 주는 그대로 받아야 하는 단점이 있음. (Over Fetching) 반면 GraphQL은 원하는 데이터만 받을 수 있다. 언더패칭 극복과 단일 엔드포인트 또한 REST API에서 필요한 정보를 제공받기 위해서는 두 번 이상 요청해야 하는 경우가 있다. (Under F..