전체 글

전체 글

    Nest.js 라이프사이클

    Nest.js 라이프사이클

    최근에 Nest.js 라이프사이클에 대한 질문을 받은 적이 있었다. 런타임 때나 통신이 일어날 때 타이밍에 맞는 라이프사이클이 있다는 것은 알고 있었지만 제대로 정리해 본 적이 없어 정리된 대답을 하지 못했다. 그래서 개념을 다시 정리하려고 한다. 1. Lifecycle 먼저 Nest.js documentation 을 보면 아래와 같은 그림이 나와있다. 제일 위부터 보면 Bootstrapping starts에서 런타임이 시작되고 아래 여러 가지 이벤트를 지나서 Application is running에 도달해서 서비스가 돌아가기 시작한다. onModuleDestroy부터는 서비스를 종료한다는 신호를 보냈을 때 일어나는 이벤트 들이다. 1-1. Lifecycle Events 위 그림에서 검은색 바로 되어있..

    TypeORM에서 불필요한 SELECT 실행

    현재 회사에서 데이터베이스를 다룰 일이 있으면 TypeORM + MySQL으로 조합해서 사용하고 있다. ORM 특성상 객체지향적으로 데이터베이스를 다룰 수 있기 때문에 좀 더 직관적이고 쿼리 짜는 게 편리한 장점이 있다. 하지만 작성되어 있는 ORM 쿼리 실행문을 보다 보면 불필요한 SELECT 쿼리가 실행되는 문제가 있었다. 1. 불필요한 SELECT 문 실행 문제 아래는 불필요한 SELECT 문이 실행되는 부분의 코드이다. const result = await this.hashTagsRepository.findOne({ name: 'test1' }); result.name = 'test2'; await this.hashTagsRepository.save(result); ORM을 사용해서 특정 데이터를..

    비즈니스 로직(Service layer)의 역할

    비즈니스 로직(Service layer)의 역할

    개발자로 일을 하다 보면 개발에 관련된 모든 것들은 추상화로 이루어져 있다는 생각이 들 때가 있다. 결국 개발 언어나 라이브러리, 프레임워크 전부 다 내부적으로 어떻게 구동되는지는 몰라도 결과값을 유추할 수 있고 해당 결과값들의 집합으로 완성된 서비스를 만들 수 있다. 서비스를 구현할 때 좋은 구조의 설계를 하기 위해 역할과 책임에 따라서 계층을 나누게 된다. 보통 3계층 아키텍처를 많이 사용하는데 구조는 아래와 같다. 1. 비즈니스 로직 비즈니스 로직은 서비스의 핵심 로직이라고 생각하기 때문에 Service 계층에서 구현하고 다른 계층의 문제가 전파되지 않게 아키텍처 설계를 하고 있다. 1-1. Service 계층에서의 의존성 회사에서 개발할 때 Service 계층에선 Repository 계층을 의존..