개발
NestJS 기초 (6) 모듈
모듈의 개념 모듈은 여러 컴포넌트를 조합하여 작업을 수행하는 단위를 의미합니다. 말이 조금 어려울 수 있는데요. 예를 들어, 배달 앱을 만든다고 해보겠습니다. 이 경우 사용자, 사장님, 배달원 등의 작업을 별도로 처리하는 구조와 설계가 필요할 것입니다. 이때 모듈은 UsersModule, OwnersModule, RidersModule과 같이 구성될 수 있고, 각 모듈에는 해당하는 컨트롤러와 서비스 등이 포함됩니다. 이러한 모듈을 모두 모으면 배달 서비스를 제공하는 DeliveryModule이 될 수 있습니다. 모듈을 사용하는 이유는 컴포넌트를 효과적으로 구조화할 수 있습니다. 서비스를 작은 단위로 나누고 유사한 기능끼리 모음으로써 응집도를 높이는 것이 모듈을 사용하는 이유입니다. Nest에서 각 애플리..
NestJS 기초 (5) 프로바이더
프로바이더(Provider)는 Nest의 핵심 개념 중 하나입니다. 컨트롤러가 요청과 응답을 처리하는 역할을 한다면, 프로바이더는 로직을 따라 업무를 수행하는 역할을 합니다. 프로바이더는 모듈 내에 providers로 선언된 자바스크립트 클래스입니다. 서비스, 리포지토리, 팩토리, 헬퍼 등과 같은 Nest 클래스 대부분이 프로바이더로 간주됩니다. 프로바이더의 핵심 개념은 디펜던시로 삽입(injected)될 수 있다는 것입니다. 이는 객체가 다른 객체와 다양한 관계를 맺을 수 있으며, 객체 인스턴스의 연결 함수가 Nest 런타임 시스템에 할당될 수 있다는 의미입니다. 이전 글에서 CatsController를 생성했습니다. 이를 통해 컨트롤러가 HTTP 요청을 처리하고 보다 복잡한 일을 프로바이더에게 할당하..
NestJS 기초 (4) 데이터베이스 연동
Nest에는 SQL과 NoSQL 데이터베이스를 자유롭게 연결할 수 있습니다. 일반적으로 Nest에 데이터베이스를 연결하는 과정은 Express나 Fastify에 데이터베이스를 연결하기 위해 적절한 Node.js 설정을 하는 것과 동일합니다. Nest는 TypeORM(@nestjs/typeorm)과 Sequelize(@nestjs/sequelize), Mongoose(@nestjs/mongoose)를 제공합니다. 이를 통해 모델/리포지토리 인젝션, 테스트, 비동기 설정을 보다 간편하게 진행할 수 있습니다. TypeORM 사용하기 SQL 또는 NoSQL 데이터베이스 조합을 위해 Nest는 @nestjs/typeorm 패키지를 제공합니다. TypeORM은 타입스크립트를 위한 가장 완성도 높은 ORM으로 간주되..
NestJS 기초 (3) 컨트롤러
Nest의 컨트롤러는 클라이언트의 요청을 처리하고 응답하는 역할을 합니다. 라우팅 메커니즘은 특정 요청을 처리할 컨트롤러를 지정합니다. 보통 각 컨트롤러는 하나 이상의 라우트를 갖고 있으며, 서로 다른 라우트는 각기 다른 역할을 수행할 수 있습니다. 기본 컨트롤러를 생성하려면 클래스와 데코레이터를 사용합니다. 데코레이터는 클래스를 메타데이터와 묶어주며 Nest를 통해 라우팅 맵(요청을 해당하는 컨트롤러와 묶는 역할)을 만드는 데 사용됩니다. 컨트롤러는 직접 소스 코드를 작성해도 되지만 다음 CLI를 통해 간편하게 생성할 수도 있습니다. $ nest g controller [name] 이 외에도 다음과 같은 명령어를 통해 Nest 모듈, 서비스, 파이프 등을 설치할 수 있습니다. 라우팅 이어지는 예시에서 ..
NestJS 기초 (2) 프로젝트 시작하기
NestJS는 타입스크립트 및 자바스크립트와 완벽하게 호환됩니다. Nest를 사용하려면 Node.js가 설치되어 있어야 합니다. 이번 글에서는 NestJS 프로젝트를 시작하는 방법과 자동으로 설치되는 기본 파일의 역할에 대해 알아보도록 하겠습니다. Nest 시작하기 터미널에 다음 명령어를 입력하여 새로운 프로젝트를 시작할 수 있습니다. $ npm i -g @nestjs/cli $ nest new project-name project-name 디렉토리가 생성되며 노드 모듈과 몇 가지 보일러플레이트 파일이 설치됩니다. src/ 디렉토리를 열어보면 서버의 핵심 파일들이 있습니다. 각 파일의 역할은 다음과 같습니다. 파일 이름 설명 app.controller.ts 외부 요청을 처리하는 컨트롤러 app.contr..
Heroku로 테스트 애플리케이션 배포하기
Heroku는 웹 애플리케이션을 간편하게 배포할 수 있게 도와주는 무료 PaaS(Platform as a Service)입니다. 이번 포스팅에서는 Heroku로 온라인 상에 웹 앱을 배포하는 방법에 대해 알아보도록 하겠습니다. 1. Heroku 계정 생성 먼저, Heroku 홈페이지로 접속하여 계정을 생성합니다. https://www.heroku.com/ 2. Heroku 설치 및 로그인 Heroku를 설치합니다. brew tap heroku/brew && brew install heroku 또는 npm으로도 설치할 수 있습니다. sudo npm install -g heroku 설치가 잘 되었는지 확인해봅니다. heroku --version Heroku에 로그인합니다. heroku login 3. Nod..
NestJS 기초 (1) NestJS란?
Nest (NestJS)는 확장 가능한 Node.js 서버사이드 애플리케이션을 구축하기 위한 효율적인 프레임워크입니다. 이는 최신 자바스크립트를 사용하며 타입스크립트를 완전히 지원합니다. 또한 OOP(객체 지향 프로그래밍)과 FP(함수형 프로그래밍), FRP(함수형 반응형 프로그래밍)의 요소들을 포함하고 있습니다. Nest는 Express와 마찬가지로 강력한 HTTP 서버 프레임워크를 사용할 수 있으며 Fastify를 사용하여 설정을 진행할 수도 있습니다. Nest는 일반적인 Node.js 프레임워크인 Express/Fastify에 대한 추상화 레벨을 제공함과 동시에 개발자들이 직접 API에 접근할 수 있게 합니다. 개발자들은 이를 통해 플랫폼의 기반이 되는 타사 모듈을 자유롭게 사용할 수 있습니다. N..
Express (3) API 사용하기
이번 포스팅에서는 Express를 통해 외부 API를 호출하고, 응답을 전달 받아 표시하는 방법에 대해 알아보도록 하겠습니다. Express에서 API를 사용하는 여러 방법이 있지만 node에서 기본적으로 제공하는 https를 사용할 수 있습니다. API 호출하기 (비트코인 가격 조회) 이번 예시에서는 바이낸스 거래소 API를 사용하여 비트코인(BTC) 가격을 가져와보도록 하겠습니다. 아래처럼 코드를 작성하고 하고 로그를 찍어보면 요청한 API에 대한 모든 응답을 확인할 수 있습니다. const express = require("express"); const https = require("https"); const app = express(); app.get("/", function(req, res){ ..