본문 바로가기
반응형

전체글587

Promise.all 과 Transactions (feat. Node.js) 최근 팀에서 코드리뷰를 진행하던 중에 promise.all 과 트랜잭션에 대해 오해하고 있는 부분들을 발견하게 되어 정리하게 되었습니다. Promise.all (혹은 allSettled)을 사용하면 트랜잭션 내에서도 비동기로 여러 작업들이 동시에 이루어질 수 있다고 오해하는 것인데요. 실험을 해보면 그게 아니라는 것을 알 수 있습니다. 실제 코드를 가지고 검증해보겠습니다. 모든 실험 결과에 대해서 틀린 내용이 있다면 바로 댓글로 지적해주세요! 모든 지적은 저의 성장에 많은 도움이 되기 때문에 감사한 마음으로 수정하겠습니다 :) 0. 테스트 환경 테스트할 환경은 다음과 같습니다. Node.js 16.3.1 PostgreSQL 13.2 모든 코드는 Github 에 있습니다. 1. Promise.all 먼저 .. 2022. 2. 28.
jest.mock 보다 ts-mockito 사용하기 (feat. Node.js) NodeJS 기반의 백엔드에서는 NestJS, RoutingControllers 등 최근 대세가 되는 MVC 프레임워크들이 모두 Class를 기반으로 한 DI (Dependency Injection) 방식을 사용하고 있다. 그러다보니 Jest의 Mocking 방식은 백엔드 NodeJS 환경에서 적합한 도구는 아닐 수 있다. 특히, Mock/Stub 객체 생성에 불편한 점이 많다. 그래서 Test Runner로서 Jest는 사용하더라도, Mock 라이브러리는 다른 것을 사용하는 것을 추천하는데, 그 중 대표적인 것들은 다음과 같다. ts-mockito sinonjs jest-mock-extended 이번 글에서는 그 중 ts-mockito 를 통한 테스트 더블 (Mock, Stub 등) 활용법을 알아본다... 2022. 2. 21.
Stub 을 이용한 Service 계층 단위 테스트 하기 간혹 Service 계층을 항상 통합 테스트로만 작성하는 경우를 보게됩니다. 모든 Service를 통합 테스트 혹은 E2E 테스트로만 검증하기 보다는 상황에 따라 적절한 Stub을 사용하여 단위 테스트로 작성한다면 전체 테스트 속도 향상에 도움이 됩니다. 몇가지 예제를 통해 Stub을 사용하는 단위 테스트 코드를 보겠습니다. 모든 코드는 Github 에 있습니다.. 예제 1. 첫번째 예제로 다음과 같은 서비스 로직에 대한 단위 테스트입니다. export class OrderService { constructor(private readonly orderRepository: OrderRepository) { } validateCompletedOrder(orderId: number): void { const .. 2022. 2. 12.
루비콘 프로젝트 완료 메일 아래 모든 내용은 이번에 신규 오픈한 랠릿의 프로젝트 종료와 함께 TF 멤버분들께 전달한 메일 내용입니다. 루비콘은 랠릿 런칭 프로젝트명입니다 :) 안녕하세요 여러분 향로입니다. 다들 프로젝트 오픈하고 가벼운 마음으로 저녁 보내고 계신가요? 1월은 인프런 서비스 역대급 장애와 함께 랠릿 QA가 겹치니 정말 정신없는 1월을 보낸것 같아요. 그러면서 루비콘 TF 멤버들과 나눴던 수많은 대화들이 떠올랐는데요. 파트별 혹은 개인별 대화들을 복기해보면서 TF 회고와 별개로 이런 이야기는 꼭 해드리면 좋겠다 싶어 메일을 작성하게 되었습니다. 저는 루비콘 프로젝트가 대단한 성과라고 생각 하지만, 오픈하는 과정에서의 많은 일들로 인해서 자괴감을 느낀 분들에게는 “대단해요!” 라는 이야기는 그냥 겉치례로 들릴거라 생각해.. 2022. 1. 29.
Mac에서 코틀린 개발환경 구성하기 간단하게 코틀린을 테스트해볼 일이 있어 개인 PC에 코틀린을 설치해봤습니다. 모든 과정은 Homebrew를 통해 진행합니다. 1. JDK 구성 아직 코틀린은 JVM이 있어야 하기 때문에 JDK를 꼭 설치해야 합니다. 물론 kotlin native 의 시도가 계속 되고 있습니다. JDK가 미설치라면 다음과 같이 설치를 진행합니다. 저는 OpenJDK 11을 설치했는데, 최근엔 17까지 나왔기 때문에 본인 환경에 맞게 설치하시면 됩니다. brew tap AdoptOpenJDK/openjdk brew install --cask adoptopenjdk11 설치가 끝나면 아래와 같이 버전을 확인할 수 있습니다. java -version 2. 코틀린 구성 Java 버전을 확인했다면 코틀린을 바로 설치합니다. bre.. 2022. 1. 24.
NodeJS 와 PostgreSQL Connection Pool Database에 관해 기본적인 id/pw 외에 해야할 설정들이 여러개 있는데요. 그 중 실제 서비스 운영에 가장 중요한 설정 중 하나가 이전 글인 쿼리 타임아웃 과 함께 커넥션 풀 (Connection Pool) 설정입니다. 이 커넥션풀 설정이 왜 필요한지, 어떻게 해야할지 등등을 알아보겠습니다. 1. 실험 환경 실험의 경우 아래 환경에서 진행합니다. Node 16 PostgreSQL 14 (by Docker) 간단하게 아래와 같이 Node와 PG를 사용한 코드를 하나 만들어둡니다. 실험을 위해 lint 등을 빼고 빠르게 구성했습니다. app.js const express = require('express'); const pg = require('pg'); const app = express() con.. 2022. 1. 21.

728x90
반응형