배경 nestjs를 예전부터 공부해보고 싶었다. 미뤄두고 있었는데 잠깐 시간이 나서 주말동안 nestjs를 공부해봤다. 그리고 무엇보다 새로운 프로젝트를 만들것인데 써보고 싶은 기술은 모두 써야 후회가 없을 것 같다. 괜찮은 유튜브 강의가 보이길래 그걸 보고 정리해봤다. nestjs 시작하기 nestjs 설치 먼저 전역으로 nestjs cli를 설치해주자 npm i -g @nestjs/cli 그리고 다음 명령어를 통해 보일러 플레이트가 세팅된 프로젝트를 만들 수 있다. nest new project-name 새로운 폴더를 만들지 않고 지금 경로에 만들고 싶다면 다음 명령어를 입력하자 new new ./ nestjs cli 다음 명령어로 module, controller, service를 설치할 수 있다...
배경 예전부터 의존성 주입에 대해서 알아보고 싶었는데 귀찮아서 미루고 있었다. 이번 기회에 좀 제대로 알아보려고 한다. 의존성 주입(Dependency Injection)이란 의존성 주입이란 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉이다. 조금 감이 안올수도 있다. 코드로 예를 들어보자. class Animal { public hi() { console.log('hi'); } } class Player { private readonly animal: Animal; constructor() { this.animal = new Animal(); } public hi() { this.animal.hi(); } } const player = new Player(); player.hi(); 위 코드의 문..
배경 우리가 웹페이지에서 로그인을 하면 새로고침을 하더라도 로그인이 유지가 된다. 이걸 가능하게 하는 가장 대표적인 기술 두가지는 jwt와 세션 쿠키 방식이다. 물론 두가지 방식을 같이 사용하는 경우도 있다. 나는 그동안 passport를 이용한 세션 쿠키 방식을 많이 사용해왔다. 우아한테크캠프 4번째 프로젝트 때 거의 처음으로 jwt를 팀원을 통해 배웠고 그때 완벽하게 이해하지 못했다고 생각해서 조금 신경써서 이번에 공부했다. jwt란 jwt는 JsonWebToken의 약자다. 간단히 말하면 암호화된 데이터다. header, payload, signature 세부분으로 나뉘어지며 header에는 토큰 타입과 어느 알고리즘을 사용할지, payload에는 데이터, signature에는 비밀키가 있다. 프론..
배경 보통 우리들은 코딩할 대 로그를 찍는다. 개발할 때는 로그를 직접 볼 수 있지만 배포하고 나서는 그렇지 않다. 우리는 24시간 컴퓨터 앞에서 어디서 오류가 나는지 확인할 수 없다. 이걸 효율적으로 하기 위해서는 어떻게 해야할까?? 바로 기록이다. 로그를 기록하면 된다. 사실 이전에 node교과서를 보면서 공부했었지만 대충 쓰고 넘어갔던 기억이 난다. 그때 제대로 공부해놨다면 우아한테크캠프에서 프로젝트를 하면서 winston으로 로그를 기록했을 것이다. 앞으로 그런 기회가 있다면 내가 나서서 winston을 적용해야겠다. winston 무작정 사용해보기 일단 문서를 보다가 생각보다 좀 길어서 적용부터 해보기로 했다. 일단 해보고 이런거구나 먼저 알아보자 logger.js const winston = ..
배경 저번글에서 기본 jest 사용법을 알아봤다. 기본 사용법은 알았으니 뚝딱 되지 않을까?? 그럴리가... 단위 테스트 미들웨어 테스트 먼저 미들웨어 테스트를 해보자. 비교적 간단한 것부터 시작하려고 한다. is-logged-in-middleware.ts import { NextFunction, Request, Response } from 'express'; const isLoggedInMiddleware = async (req: Request, res: Response, next: NextFunction) => { if (req.user) { return next(); } res.status(403).json({ errorMessage: '로그인이 필요합니다' }); }; export default ..
배경 jest는 우아한테크캠프에서 조금 공부하고 사용해보긴 했다. 그런데 사가 테스트에만 사용을 했었고 tdd방식으로 만들어본적도 없다. 또한 백엔드가 진짜 테스트가 중요한데 백엔드에서 적용해본적이 없다. 그래서 이번에 만든 프로젝트에 테스트를 적용해보려고 한다. 이글은 www.daleseo.com) 글들을 바탕으로 적었다. 사용한 라이브러리 버전 package.json "jest": "^27.3.1", "supertest": "^6.1.6", "ts-jest": "^27.0.7", "@types/jest": "^27.0.2", jest 설정하기 jest는 jest.config.js, jest.config.ts, package.json에서 설정할 수 있다. 나는 jest.config.ts에 작성했다. 세..
배경 프로젝트를 시작할 때 가장 먼저 하는 것은 프로젝트 구조를 짜는 것이다. 특히 팀프로젝트를 하게 되면 이 부분에서 충돌이 생기기도 한다. 주니어 수준에서 무엇이 옳은지 판단하는 것은 쉽지 않다. 시니어 개발자라고 할지라도 당연히 프로젝트가 어떤 프로젝트인지에 따라서 그리고 어떤 목적을 가지고 진행하는지에 따라 구조가 달라진다. 나는 정호영님이 추천한 깃허브를 보고 참고를 많이 했다. https://github.com/santiq/bulletproof-nodejs 공통스타일 prettier 먼저 코딩 스타일을 맞춰야 한다. 혼자서 프로젝트를 하더라도 prettier정도는 적용하는 것을 추천한다. 기본 vscode에 설정할수도 있지만 여러명이서 작업할 때는 아래와같이 루트경로에 파일을 만들어준다. 아래..
개요 보통 서버에서 db를 연결해서 쿼리문을 직접적으로 사용하지 않고 orm을 사용한다. 사실 나는 지금도 쿼리문이 더 편한것같다. 하지만 orm을 많이 사용하는 추세다. 일단 orm을 사용하지 않으면 쿼리문이 굉장히 지저분하게 보인다. 효율적이고 빠른 쿼리문을 짜는 것도 중요하지만 가독성도 그만큼 중요하다. 그래서 한방쿼리보다 그냥 여러번 쿼리를 만드는 방법을 사용하기도 한다. 어쨋든... sequelize는 책을보고 사용해봤고 우아한테크캠프에서도 사용을 했다. 나름대로 사용법을 익혔다고 생각하고 다른 orm을 사용해보고 싶었다. 우아한테크캠프의 마지막 프로젝트를 보니 우리팀을 제외한 모든팀이 typeorm을 사용했다. 그리고 개발바닥의 향로님도 typeorm을 사용하는것을보고 한번 공부해봐야겠다는 생..