본문 바로가기

전체 글56

Github Actions, Nginx, Docker를 이용한 Blue-Green 무중단 배포 현재 회사 서버는 단일 EC2 인스턴스에서 하나의 Docker 컨테이너를 운영하여 작동 중인데 컨테이너 교체 방식 (In-place Deployment)으로 작동하다 보니 약간의 서비스 중단 시간이 발생한다. Github Actions 내역을 통해 매번 1분 이상의 deploy 시간 동안 서비스가 중단 되는 걸 확인했는데 본격적으로 서비스 운영에 들어가게 되면서 1분의 중단 시간도 없애는 게 안정적인 서비스 운영에 도움이 되겠다는 생각에 무중단 배포를 건의했다.물론 백엔드가 나 혼자뿐이라 내가 다 하면 되므로 현 상황에 맞는 방법을 찾아보았다. Docker를 사용한 무중단 배포 전략으로는 대표적으로 롤링 업데이트(rolling update)와 블루-그린 배포(blue-green deployment)가 존.. 2024. 5. 13.
javascript class this bind 문제 - this가 왜 undefined로 나오지? typescript로 express api 기본 세팅의 보일러 플레이트를 만들다가 이론으로만 접하던 this 문제를 제대로 겪었다. controller-service-repository의 3계층 구조(3 layer pattern)로 분리하고 있는데 this가 undefined로 뜬는 게 아닌가.. gpt에 물어보니 bind 키워드를 알려줘서 아차!했다. 문제가 된 코드는 아래와 같다. // users.route.ts import { Router } from "express"; import { UserController } from "./users.controller"; import wrapAsyncMiddleware from "../middlewares/wrapAsyncMiddleware"; const.. 2024. 2. 25.
You Don't Know JS Yet 처음 자바스크립트를 배울 때 개발자 친구 집에 갔다가 지금은 절판된 you don't know js 1, 2권을 보았었다. e북만 읽는 친구라 종이 책까지 사놓은 걸 보곤 정말 좋은 책인가보다 싶었다. js 이해하기 좋다고 읽어 보라길래 빌려 왔다가 아무래도 입문용으로 쓰인 책이 아니라 이해도 안 되고 그러다보니 손에 잡히질 않아 바로 돌려준 기억이 있다. 면접이 끝나고 js를 좀 깊이 들여다 봐야겠다는 생각에 책을 찾아보다가 you don't know js의 새로운 번역본인 you don't know js yet이 나온 걸 보고 바로 샀다! 과거와 달리 읽히기 시작하고 무엇보다 재밌다! 책은 '자바스크립트를 온전히 이해하고 있는 사람은 없습니다'로 시작되며, 자바스크립트 '정복'이 '여행'을 강조하며 .. 2024. 2. 16.
nodejs(expressjs) 환경변수 validation NestJS의 ConfigModule을 접하고 expressjs로 만들었던 프로젝트에도 환경변수 유효성 검사와 기본값 설정을 추가해 봐야겠다고 생각하고 실행해 보았다. 왠지 라이브러리가 있을 것 같아 찾아보니 환경변수 유효성 검사와 기본값 설정 등을 할 수 있는 envalid라는 라이브러리가 있었지만 추가로 라이브러리를 깔고 싶지는 않아서 기존에 데이터 검증을 위해 설치했던 joi 라이브러리를 사용하였다. [npm envalid] https://www.npmjs.com/package/envalid envalidValidation for your environment variables. Latest version: 8.0.0, last published: 5 months ago. Start using en.. 2024. 2. 14.
HTTP와 HTTPS - 비밀번호 평문 전송은 안전할까? 부트캠프 파이널 프로젝트 때 프론트엔드 레포에 이슈가 달렸었다. 어쩌다 지나가는 분이셨는진 모르겠지만(팀원 그 누구도 알지 못함) 덕분에 http 통신 과정에서의 데이터 암호화에 대해 생각해 볼 기회가 되었다. 결론은 https 통신을 하고 있으므로 평문으로 전달해도 문제가 되지 않을 것 같단 판단에 평문 전달 후 서버에서 단방향 암호화로 데이터베이스에 저장하는 방식을 취했다. https로 클라이언트-서버 통신을 하면 SSL/TLS로 암호화되어 비밀번호는 결국 일반 텍스트가 아닌 암호화된 데이터로 전송되기 때문이다.(이슈에 링크된 암호화 적용 기준은 오른쪽과 같다) ▼ HTTP (HyperText Transfer Protocol)- 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 간 통신.. 2024. 2. 14.
NestJS와 Next.js로 개인 블로그 만들기 부트캠프에서나 회사에서 모두 Express.js를 사용하였어서 NestJS를 제대로 사용해본 적이 없었다. 예전에만 해도 NestJS를 할 거면 차라리 자바 스프링을 하겠다는 단순한 생각을 갖고 있었는데 실제 서비스의 서버 개발을 해보니 가볍고 단순한 express의 매력이 단점으로 다가오는 게 느껴지고 틀 안에 좀 가둬 놓고(?) 싶어졌다. 물론 express는 여전히 좋지만 팀 프로젝트를 할 때면 폴더 구조를 어떻게 나눌지에 대한 의사결정, 그냥 한군데에 때려 넣으면 되지 왜 복잡하게 나누냐는 의견에 대한 설득 등으로 머리가 아플 때가 있었어서 틀이 갖춰진 NestJS를 사용해 보고 싶어졌다. 그리고 백엔드 개발자의 길을 걷고 있지만 javascript로 개발을 시작했다보니 풀스택에 대한 열망도 조금.. 2024. 2. 7.