본문 바로가기

전체 글156

TypeScript ESLint 적용하기 (+ Airbnb) (2019-10-09에 작성된 글입니다) 토이 프로젝트 같은 경우 혼자 작업하기 때문에 코드 스타일이 거의 일관되지만 협업을 하면 모두 각자의 코딩 취향이 있기 때문에 코드 스타일이 정해지지 않았다면, 코드에 개발자의 개성이 가득 남을 것이다. 개인적으로 팀 프로젝트엔 개발자의 개성이 적게 들어가고, 일관화되는 편이 좋다고 생각하기 때문에 linting tool을 사용하는 것이 좋다고 생각한다. 그런 의미로 이번에 Typescript에 lint를 적용하기 위해 TypeScript ESLint를 설정하는 법에 대해 알아보겠다. 굳이 ESLint를 사용하지 않고 TSLint라는 선택지도 있지만 TSLint는 곧 deprecated 될 예정이기 때문에 TSLint는 고려하지 않았다. (https://githu.. 2021. 1. 5.
BCrypt로 Password Hashing 하기 (2020-04-30에 작성된 글입니다) 사용자의 비밀번호와 같은 credential한 값은 hashing을 통해 관리자 조차도 원래 값을 알 수 없도록 암호화하여 저장해야한다. 이번 포스팅은 비밀번호 암호화 관련하여 BCrypt를 적용한 것과 관련하여 알아본 바를 정리한다. (* update 2021-01-02: 요즘은 Argon2라는 알고리즘이 떠오르는 것 같다.) SHA는 사용하지 마라 일반적으로 Hashing에 사용되는 SHA 방식의 경우 비밀번호와 같은 보안과 관련되서는 사용되지 않는다. 왜냐하면 SHA 방식은 빠르기 때문에 해커들이 반복 연산을 보다 빠르게 할 수 있기 때문이다. 이는 해커가 비밀번호를 얻어내기 좀 더 수월하다는 위험성을 갖는다. 왜 BCrypt를 사용하는가 BCrypt 같은 .. 2021. 1. 2.
Sync & Async / Blocking & Non-Blocking (2019-10-06에 작성된 글입니다.) 나는 원래 Java를 사용하여 개발을 했는데, 이제는 Node.js 기반으로 개발을 하는 입장으로서 Non-Blocking에 대한 개념이 중요하게 됐고, 이에 더해서 Sync와 Blocking에 대한 차이도 이해하는 것이 필요하다고 느꼈는데, 최근 Slipp에서 주최한 세미나에서 자바지기님의 발표를 통해서 이러한 점이 명쾌하게 이해가 되었다. 이번 글은 그 기반으로 Sync & Async / Blocking & Non-Blocking 에 대해서 알아보고 정리한 것이다. Sync & Async / Blocking & Non-Blocking Sync와 Blocking, Async와 Non-Blocking 서로 비슷한 개념이라고 생각할 수 있다. 나 역시 이 점에 대.. 2021. 1. 2.
Nest.js Docker image 만들기 (2020-03-23에 작성한 글입니다.) Nest.js 기본 프로젝트를 Docker image로 만들어보고 해당 image를 container로 실행시키는 과정을 알아보자 코드 예제는 여기에 있다. 1. 프로젝트 생성 먼저 Nest.js CLI를 통해 프로젝트를 생성한다. $ nest new nestjs-docker 2. Docker image 생성을 위한 세팅 다음 Docker image를 만들기 위해 프로젝트 디렉토리에 다음과 같이 Dockerfile을 생성한다. # Step 1 ## base image for Step 1: Node 10 FROM node:10 AS builder WORKDIR /app ## 프로젝트의 모든 파일을 WORKDIR(/app)로 복사한다 COPY . . ## Nest... 2021. 1. 2.
DI with Nest.js (2020-05-23에 작성한 글입니다.) 코드는 여기에서 확인할 수 있다. Nest.js는 기본적으로 DI를 지원하기 때문에 별도의 library를 설치하지 않아도 DI를 적극적으로 사용할 수 있게 도와준다. Hexagonal architecture와 같이 특정 인프라 스트럭쳐에 의존하지 않는 코드를 작성한다면 Repository와 같이 특정 인프라 스트럭쳐를 사용하는 기능은 interface로 추상화하고 이에 대한 구현은 클래스에 할 것이다. 사용자 기능을 구현하는 Nest.js application을 만든다면 아래와 같이 시작할 수 있을 것이다. // src/user/UserService.ts import { Injectable } from '@nestjs/common'; @Injectable() .. 2021. 1. 2.
logrotate 사용법 (2018-11-18에 작성된 글입니다.) logrotate를 사용하여 로그를 관리할 수 있다. 로그 파일에 대해 아무 설정을 하지 않으면 시간이 지나 로그가 쌓이면서 용량이 계속 커지게 될 것이고 로그를 보는 것도 편하지 않을 것이다. 그럴때는 리눅스에서 제공하는 logrotate 기능을 사용하면 큰 어려움 없이 로그를 관리할 수 있다. 예제 $ vi /etc/logrotate.d/[rotate_name] /path/to/log/somelog.out { copytruncate daily rotate 30 missingok notifempty dateext } # log 실행 [루트 권한] logrotate -f /etc/logrotate.d/[rotate_name] 옵션 설명 Option Descrip.. 2021. 1. 2.