본문 바로가기

nestjs

(5)
[nestjs] transaction 라이브러리 분석하기 - 3 이번 글에서는 아래의 목적을 달성하기 위해 typeorm-transacional이 해둔 작업을 보겠습니다. 트랜잭션을 위한 코드를 wrapper에게 완전히 위임하고, 서비스 계층에선 비지니스 로직에만 집중하고 싶다. 아래 3개의 화두가 중요합니다. typeorm-transactional은 트랜잭션을 위한 코드를 넣어둔 wrapper를 어떻게 구현했는지? myEntityManager은 어디서 어떻게 얻어왔는지? typeorm-transactional에서 트랜잭션 안에서 또 다른 트랜잭션(=nested transaction)을 어떻게 생성하는지? 아래 예시코드를 보면 메서드에 @Transacional 데코레이터가 붙어 있습니다. export class UserService { constructor( @Inj..
[nestjs] transaction 라이브러리 분석하기 - 부록 이 부록은 typeorm의 repository.extend() 메서드를 분석, 수정하여 typeorm에 PR 날린 과정을 담고 있습니다. typeorm 깃허브 예제를 보면, 아래와 같이 repository.extend 메서드를 이용하여 customRepository를 만듭니다. const Sample33CustomRepositoryConnection = new DataSource({ type: "sqlite", database: "./temp/sqlitedb-1.db", logging: true, synchronize: true, }) export const PostRepository = Sample33CustomRepositoryConnection.getRepository( Post, ).extend(..
[nestjs] transaction 라이브러리 분석하기 - 2 이 시리즈는 typeorm-transactional 라이브러리를 분석하게 된 계기와 분석한 내용이 담겨있습니다. 이전 글에서는 '중복을 제거 하겠다'는 목적을 좀 더 아래와 같이 구체화 하였습니다. wrapper에게 트랜잭션을 위한 코드를 완전히 위임하고, Service 계층에선 비지니스 로직에만 집중하고 싶다. Service 계층에서 dataSource나 repository 객체들을 DI 받아서 사용하고 싶다. 이렇게 DI 받은 객체들이 실질적으로 사용하는 queryRunner는 모두 동일했으면 좋겠다. 또한, 이러한 목적을 이룰 수단인 wrapper와 cls에 대한 개념을 배경지식으로 알게 되었습니다. 이번 글에서는 typeorm-transactional에서 이러한 배경지식을 이용하여 우리의 목적을 ..
[nestjs] transaction 라이브러리 분석하기 - 1 이 시리즈는 typeorm-transactional 라이브러리를 분석하게 된 계기와 분석한 내용이 담겨있습니다. 이전 글에서는 typeorm에서 트랜잭션을 관리하는 방법을 간단히 설명하였습니다. 그리고 typeorm에서 트랜잭션을 관리할 때 단점으로 중복이 많이 발생함을 지적하였습니다. 마지막으로 그에 대한 해결책 설계와 구현 실패, 그리고 typeorm-transactional 라이브러리를 소개했습니다. 이번 글에서는 중복을 제거하겠다는 우리의 목적을 구체화하고, 이 목적을 달성할 수 있는 방법에 대해 알아보겠습니다. typeorm에서 트랜잭션을 관리할 때의 단점으로 2가지를 제시했었습니다. 비지니스 로직을 위한 코드가 아닌, 트랜잭션을 위한 코드가 추가됩니다. 그리고 여러 군데에 걸쳐서 중복이 발생하..
[nestjs] transaction 라이브러리 분석하기 - 0 이 시리즈는 typeorm-transactional 라이브러리를 분석하게 된 계기와 분석한 내용이 담겨있습니다. typeorm은 javascript, typescript 언어를 사용하는 환경에서 사용할 수 있는 ORM 라이브러리 입니다. TypeORM is an ORM that can run in NodeJS, Browser, Cordova, PhoneGap, Ionic, React Native, NativeScript, Expo, and Electron platforms and can be used with TypeScript and JavaScript (ES5, ES6, ES7, ES8). Its goal is to always support the latest JavaScript features a..