본문 바로가기

Node.js9

[NestJS] 파일 업로드(File upload) Multer ✔ 필요한 종속성 설치 Nest는 Express용 multer 미들웨어 패키지를 기반으로 하는 내장 모듈을 제공한다. $ npm i -D @types/multer ✔ 단일 파일 업로드 단일 파일을 업로드하려면 FileInterceptor()를 @UseInterceptors에 연결하고 @UploadedFile() 데코레이터를 사용하여 요청에서 file를 추출하면 된다. @Post('upload') @UseInterceptors(FileInterceptor('file')) uploadFile(@UploadedFile() file: Express.Multer.File) { console.log(file); } FileInterceptor()는 2개의 인수를 가진다. fieldName : multipart/fo.. 2023. 7. 25.
[NestJS] Jest 단위 테스트 Mock ✔ 필요한 종속성 설치 $ npm i --save-dev @nestjs/testing ✔ Mock Repository Repository를 Mocking 하는 이유는 서비스 계층에서 비즈니스 로직을 검증해야 하는데 Repository를 의존하고 있다. 그래서 의존하는 것에 따라 테스트가 실패할 수도 있고 성공할 수도 있다. 그러므로 비즈니스 로직에 실패하거나 성공하는 게 아닌 다른 요소로 인해 실패할 수도 있기 때문에 의존하는 것들을 가짜로 Mock으로 만들어서 의존성을 배제하여 비즈니스 로직만 테스트하게 만든다. // users/users.service.ts import { Injectable } from '@nestjs/common'; import { Repository } from 'typeorm'.. 2023. 7. 22.
[NestJS] Passport JWT 토큰 인증 구현 & 에러 핸들링 JWT(JSON Web Token)에 대한 내용은 아래의 글을 참조 JWT(JSON Web Token) 이 글은 NestJS에서 JWT, Passport-jwt를 사용하여 토큰 인증을 구현하다가 겪은 내용을 정리한 글이다. ✔ 필요한 종속성 설치 NestJS에서 JWT 토큰과 Passport-Jwt를 사용하기 위해서 먼저 필요한 종속성을 설치해야 한다. $ npm install --save @nestjs/passport passport @nestjs/jwt passport-jwt $ npm install --save-dev @types/passport-jwt ✔ 동작 흐름 로그인에 발급받은 토큰 값을 HTTP 헤더에 "Authorization: Bearer 토큰 값" 추가하고 요청 AuthGuard JW.. 2023. 7. 6.
[NestJS] Configuration 설정 & TypeORM 연결 ✔ 필요한 종속성 설치 Configuration과 TypeORM을 사용하기 위해서 Dependency를 설치해야 한다. $ npm i --save @nestjs/config $ npm i --save @nestjs/typeorm typeorm mysql2 @nestjs/config 패키지는 내부적으로 dotenv를 사용한다. @nestjs/config 패키지를 사용하기 위해선 TypeScript 4.1 이상이 필요하다. ✔ TypeORM 연결 NestJS에서 TypeORM을 연결하는 방법은 여러 방법이 존재한다. AppModule의 TypeOrmModule.forRoot에 직접 주입 json 파일 설정 ts 파일 객체에 설정 후 Root 인수에 객체 주입 ConfigService 사용 1. 직접 주입 A.. 2023. 5. 31.
Node.js 구조 & 동작 원리 최근에 Node.js 공부하고 개발은 하지만, 구조나 동작 원리? 등에 대해서 자세히 알지 못하고 Expressjs 공식문서 혹은 구글에 찾아보면서 개발을 했었다. 그러다 문득 생각한 게 좋은? 잘하는 개발자가 되려면 내가 쓰는 것에 대해서 알아야 하지 않을까 생각이 들어서 이 글을 쓰게 됐다. 이전 글 Node.js 교과서 1주차에서도 Node.js에 대해서 아주 간략하게 설명을 했지만 다시 한번 얘기하자면, Node.js는 크롬 V8 자바스크립트 엔진 기반으로 자바스크립트 런타임 실행환경이다. Node.js의 특징은 싱글 스레드(Single Thread), 이벤트 기반(Event Driven), 논 블로킹 I/O(Non Blocking I/O) 모델 특징들이 있다. 특징들을 얘기하기 전에 먼저 Nod.. 2022. 8. 17.
Node.js 교과서 4주차 ✔ Sequelize Sequelize는 DB 작업을 편리하게 사용할 수 있도록 도와주는 ORM 라이브러리이다. MySQL, PostgreSQL, MariaDB 등 많은 RDBMS를 지원하고 Promise 기반으로 구현되었기 때문에 비동기 로직을 편리하게 작성할 수 있다. "$ npm i sequelize mysql2" "$ npm i -D sequelize-cli" "$ npx sequelize init" (디렉터리 구조 초기화) 위의 명령어로 sequelize와 mysql 드라이버를 설치하고 sequelize-cli는 sequelize 명령 실행에 필요하기에 개발용에 설치해준다. 디렉터리 구조는 config, migrations, models, seeders 4개의 디렉터리가 생성된다. config/.. 2022. 6. 9.
Node.js 교과서 3주차 ✔ Express Node.js 웹 애플리케이션 프레임워크 HTTP 유틸리티 메서드와 미들웨어를 사용하여 빠르고 쉽게 API를 작성 ✔ 라우팅(Routing) 라우팅은 URI(path) 및 특정한 HTTP 요청 메서드(GET, POST 등)인 특정 엔드포인트에 대한 클라이언트 요청에 응답하는 방식을 말한다. express는 라우터를 미들웨어로서 제공하고 있고, 각 라우터는 하나 이상의 핸들러 함수를 가질 수 있다. // 라우터 객체 참조 const express = require('express') const router = express.Router() // 라우팅 핸들러 등록 router.route('/api/login').post() // 체인 라우터 핸들러 router.route('/api/tes.. 2022. 6. 1.
Node.js 교과서 2주차 ✔ NPM(Node Package Manager) 노드의 패키지 매니저 다른 사람들이 만든 소스 코드들을 모아둔 저장소 ✔ package.json "$ npm init" 명령어로 package.json 파일을 만들어 프로젝트의 설정 등을 기록해주는 파일 scripts : 별칭을 사용하여 명령어를 사용(ex. "start": "node index" - "$ npm run(생략 가능) start") dependencies : "$ npm i 패키지명"으로 설치한 의존 패키지(배포용 패키지) devDependencies : "$ npm i -D(--save-dev 동일) 패키지명"으로 설치한 의존 패키지(개발용 패키지) "$ npm i -g(--global 동일) 패키지명"은 글로벌 설치로 전역 설치(사용자가.. 2022. 5. 25.
Node.js 교과서 1주차 첫 Node.js를 공부하면서 개인적으로 정리를 해보고자 작성... 인프런 강의 : [리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지 ✔ Node.js Node.js는 크롬의 V8 자바스크립트 엔진을 기반으로 하는 자바스크립트 런타임이다. 노드는 단일 스레드(Single Thread)와 이벤트 기반이고, 비동기 I/O 처리(Non-Blocking I/O) 모델이다. 그리고 NPM을 통해 방대한 모듈을 제공하고 있다. ✔ 호출 스택 동작 function oneMore() { console.log('one more'); } function run() { console.log('run run'); setTimeout(() => console.log('wow'), 0); new Promise(res.. 2022. 5. 14.