안녕하세요.
|
백엔드 개발자 김정현입니다.

thumbnail
NestJS + TypeORM 트랜잭션을 다룰 때 반드시 피해야 할 패턴

✍️ Today I Learned 현재 사내 프레임워크는 NestJS를 사용하고 있으며 클라이언트에게 요청을 받고 응답을 반환하는 Controller 클래스와 비즈니스 로직을 담당하는 Service 클래스 그리고 최종적으로 데이터베이스에 CRUD 작업을 담당하는 Repository 클래스를 사용하는 계층형 아키텍처로 구성하여 사용하고 있다. 단순한 단일 INSERT, UPDATE를 넘어서, “모든 작업이 성공해야만 커밋하고, 하나라도 실패하면 전부 롤백” 되어야 하는 비즈니스 구조는 빈번히 일어난다. (이러한 상황은 실무에서 꽤나 자주 마주친다. 🥲) 이런 경우 Service 클래스의 하나의 메서드 안에서 여러 개의 DB 작업을 처리해야 할 때 을 활용해서 트랜잭션을 사용하고 있다. 꼭 이렇게 사용해야만 한다는건 아니지만, 이 점은 꼭 주의해야할 패턴에 대해 느낀점이 있다. 오늘은 이를 간략하게 기록으로 남겨보려한다. 1. 트랜잭션이란? 사실, 우리가 흔히 말하는 트랜잭션(Trans…

April 10, 2025
TIL
EC2에서 NAS로, 개인 서버 CI/CD 자동화

왜 EC2에서 NAS로 옮기게 되었는가? 사용 중인 NAS의 사용성이 DSM 7.2+ (Synology사의 DS920+ 기준) 부터 많이 달라졌다. 단순히 UI/UX만 변경된것이 아니라 (구)Docker 패키지에서 변경된 Container Manager 패키지는 다중 컨테이너 환경을 지원한다. EC2 t2.micro 인스턴스로 사용 중이던 서버에 올려둔 컨테이너 기반의 프로젝트 (LOTTERY 🍀)를 비용 효율적인 측면에서 마이그레이션하기 좋은 기회라 생각했다. EC2에서 NAS로 마이그레이션하는 과정과 Github Action + Docker Hub를 사용한 CI / CD 구축한 과정 또한 간략히 남겨 보려한다. 1. CI/CD 파이프라인 구성 전반적인 CI/CD는 Github Action + Docker Hub 를 활용하였으며, CI / CD 나누어 Github 저장소의 브런치를 활용해서 파이프라인을 구성하였다. (CI/CD 모두를 자동화는 아래와 같은 무중단 배포 전략까지 도…

March 31, 2025
Project
Nest CLI 뜯어보기 (nest start)

✍️ Today I Learned 파일을 작성할 때 습관처럼 큰 의심없이 아래와 같이 작성하곤한다. 에 별다른 설정을 안해두었다면 아래와 같을꺼라 npm run start:prod 명령과 같은 명령어이지만 습관(?)처럼 을 작성할 땐 “./dist/main.js”를 직접 실행시키고 있다. 프레임워크에서 기본으로 제공하는 nest start CLI 명령어 또한 서버를 구동시키는 명령어인데, 빌드된 .js 파일을 직접 실행시키는 것과 어떤 차이가 있을지 궁금해서 찾아본 결과를 간략히 남기려한다. 1. 눈에 띄는 차이점은? 사실 입사 초기에 로컬 환경에서 쓰던 파일이 그대로 운영 환경(심지어 —watch 옵션까지)까지 이어진 경험이 있어서 Nest CLI 명령어는 어떤 사이드 이펙트를 발생시키는지 이미 몸소 체험해본적이 있다. 🥲 간단히 같은 코드 베이스로 Nest CLI 명령어와 빌드된 .js 파일을 직접 실행한 환경으로 나누어서 컨테이너를 실행해보면 아래와 같이 눈으로도 확인이 가…

March 19, 2025
TIL
Docker Compose와 Traefik을 활용한 Blue/Green 배포 전략

✍️ Today I Learned 사내 인프라는 비교적 성능이 좋은 서버를 사용하고 있다. (수평적 확장이 힘들어서.. 🥲) 그렇기에 초기 인프라를 구성할 땐 리소스 부족에 허덕이진 않고있다. (다만, 요청이 급증할꺼라 예상될 때 수평적으로 확장하기는 쉽지 않다.) 이러한 바탕을 토대로 온프레미스 환경에서 Docker Compose로 Blue/Green 배포 전략을 구현한 과정을 간략히 포스팅으로 남기려한다. 1. Blue/Green 배포란? 간단히 소개하자면, 여러 무중단 배포 기법 중 하나이며 두 개의 독립적인 환경 Blue(구버전) 환경과 Green(신버전) 환경을 가지고 진행되는 배포 전략이다. blue/green 구버전이 운영되는 동안 신버전의 인스턴스를 구성한 후 로드밸런서를 통해 신버전으로 모든 트래픽을 일시에 전환하는 배포 방식이다. 신버전에 문제가 생기는 경우 로드밸런서의 라우팅만 구버전으로 변경해주면 손 쉽게 롤백이 가능한 장점 또한 있지만 그 만큼 리소스를 많이 …

March 16, 2025
TIL