목록전체 글 (35)
유동
최근 개인프로젝트 핵심기능이 완료되어서 추가 기능을 넣기 전에, 배포단계를 거치고 있습니다배포 환경에서는 서버의 확장성과 고가용성 확보를 위해 여러 서버 인스턴스가 클라우드에서 함께 동작하기 위하여 서버 클러스터링을 이용하여 nginx와 같은 리버스 프록시를 앞단에 두고 로드밸런싱을 할 계획이었죠하지만 클러스터링을 위해서는 몇가지 문제가 존재했습니다. 바로 여러 서버에서 단 한번만 실행되어야 하는 작업들이 존재했었기 때문이죠문제 인식우리 서비스는 아래와 같이 클러스터 환경에서 여러 인스턴스가 동시에 실행되면 심각한 문제를 일으키는 두 가지 작업이 있었습니다.외부 WebSocket연결: 실시간 환율 데이터를 받기 위해 서버에서 외부 환율을 제공해주는 외부 API와 소켓연결을 통해 지속적인 연결을 유지하고 ..
이전 글 [Jest/NestJS] 단위 / 통합 테스트 분리 및 실행하기 [1]에서 기본적인 유닛/통합 테스트 구조를 작성하고 실행하는 과정에 대해 적었었다. 근데 여기서 또 문제가 발생했으니..내가 생각했던 통합 테스트 전략통합 테스트 시작 전/후로 작업을 나누려고 했었다통합 테스트 시작 전 딱 한번 setup.ts에서ORM(Prisma) 커넥션 연결Redis 커넥션 연결이 생성된 커넥션들을 모든 통합 테스트에서 돌려서 사용하려고 했다. 이유는 사실 정말 별 생각 없이 단순히, 시작 => 연결, 종료 => 해제. 이런 구조가 빠르고 효율적일줄 알았다.예를들어 통합 테스트가 N개라면, 커넥션 N번 열었다 닫았다 하는 작업을 반복해야되니 시간이 오래걸리고, 리소스도 엄청나게 먹고, 한 컨텍스트를 공유하면 ..
NestJS 테스트 구조 설계 - 단위 테스트와 통합 테스트 분리하기NestJS를 기반으로 프로젝트를 진행하고 있는데, 핵심기능 테스트를 하기 위해 테스트에 잘못 발을 딛었다가 호되게 혼나고 거의 1달 동안 밤낮을 새가며 어느 정도 테스트 구조에 대해 갈피를 잡았다. 테스트를 효율적으로 운영하기 위해서는 단위(Unit) 테스트와 통합(Integration) 테스트를 명확하게 분리하는 것은 당연히 중요하고, Jest를 이용해서 얼마나 똑똑하게 실행할 것인지가 사실 관건이다. 공식문서에 가보면 Jest는 다양한 CLI 기능을 제공한다. Jest 공식문서이 글에서는 실제 프로젝트에서 어떻게 테스트 환경을 분리하고, 실행 구조를 구성했는지에 대해 정리해 볼 것이다.(문제 해결과 관련된 이야기는 다음 글에서 시리..
OAuth 플로우와 모바일 앱의 소셜 로그인 연동 구현하기현재 백엔드 핵심 기능을 구현한 후, 슬슬 프론트엔드(RN)를 구현하여 Expo를 이용한 모바일 개발환경을 구축 중이다.하나하나 배우면서 진행하다 보니 속도가 많이 느리긴 하지만, Github에서 대규모 Expo 프로젝트들을 염탐하며 코드 하나하나 자세히 살펴보는 과정이 정말 유익한것같다. 핵심 기능 구현 전에, 웜업으로 미리 만들어둔 Google 소셜 로그인을 연결하면서 백엔드만 개발했을 때는 몰랐던 한 가지를 공유하고자 한다.소셜 로그인의 두 가지 방식소셜 로그인에는 **서버 측 인증(Server-side Flow)**과 클라이언트 측 인증(Client-side Flow), 두 가지 방식이 존재한다서버 측 인증 (Authorization Cod..