본문 바로가기
반응형

nodejs14

NodeJS에서 데이터베이스 통합 테스트 성능 개선하기 (TypeORM, Jest, PostgreSQL) 보통 통합 테스트는 SQLite, H2와 같은 InMemory 데이터베이스를 사용한다. 메모리상에만 존재하기 때문에 실제 ORM (SQL) 을 검증이 가능하면서도 병렬로 테스트를 수행할 수 있고, 고속의 쿼리 수행이 가능하기 때문이다. 대부분의 데이터베이스 쿼리는 InMemory 데이터베이스에 대해 실행할 수 있지만 많은 엔터프라이즈 시스템은 실제 Production과 같은 데이터베이스에 대해서만 테스트할 수 있는 복잡한 쿼리를 사용한다. 그래서 운영 환경에서 사용하는 데이터베이스(MySQL, PostgreSQL 등) 에서 지원하는 여러 기능(Windows함수, 프로시저, 트리거 등) 들을 적극적으로 사용하는 환경에서는 InMemory DB로 검증하는데 한계가 있다. 이를 위해 보통은 로컬 PC에서는 D.. 2022. 12. 25.
다른 언어로 성장하기 썸네일 이미지는 데브경수님의 인스타툰에서 가져왔습니다. 작년 4월까지 JVM 언어 / Spring 을 사용하면서 커리어를 쌓다가, 최근 이직을 하면서 Node.js (JS / TS) 에서 개발경험을 쌓고 있다. 처음 Node.js를 만났을때는 2016년이였는데, 당시엔 "Node.js와 Express를 활용한 블로그 API 2시간 만에 만들기" 같은 류의 컨텐츠가 유행이였다. Express가 주력으로 선택될때의 Node.js 코드 스타일과 아키텍처, 컨벤션등은 기존의 프레임워크와는 꽤나 많이 달랐다. 그래서 당시 스프링 프레임워크가 주력이였던 내 입장에서는 여기에서 추구하는 아키텍처나 패턴은 무엇일까? 궁금하기도 했다. 그리고 이후에 어떤 방향성으로 발전할까도 궁금했다. 시간이 흘러 최근에 Node.js.. 2022. 12. 16.
5. 테스트하기 좋은 코드 - SQL 지난 시간까지 애플리케이션 코드를 어떻게 개선하면 좋을지에 대해 이야기를 나눴다. 1. 테스트하기 어려운 코드 2. 제어할 수 없는 코드 개선 3. 외부에 의존하는 코드 개선 4. 검증이 필요한 비공개 함수 개선 이번 편에서는 애플리케이션 코드가 아닌 Query (비단 RDBMS뿐만 아니라 NoSQL도 해당) 에 대해서 이야기를 해본다. 최근엔 ORM (혹은 ODM) 사용이 대중화되었지만, 여전히 많은 프로젝트에서는 SQL Builder를 통해서 Native Query를 작성한다. SQL Builder를 통해서 Native Query를 작성하는 것은 복잡한 조회 조건이 필요한 환경에서는 굉장히 효율적인 방법이다. 예를 들어, 통계/정산/물류 등 복잡한 조회 Query가 필요하거나, Bulk Insert등.. 2022. 10. 18.
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.
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
반응형