DATABASE

    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을 사용해서 특정 데이터를..

    Data Mapper 패턴, Active Record패턴

    예전에 Sequelize나 TypeORM을 사용하려 공부할 때 여러 가지 패턴으로 엔티티를 구현하는 것을 보고 많이 헷갈렸었다. 그 이후로는 습관적으로 한 가지 방식으로만 사용하고 있다가 나중에 해당 패턴인 Data Mapper 패턴이라는 것을 알았다. - Data Mapper 패턴이란? Data Mapper 패턴은 데이터베이스 모델 (엔티티) 와 쿼리가 분리된 패턴이다. (데이터베이스에 접근하는 쿼리들을 repository 계층에서 관리) 이렇게 역할에 따라서 계층을 나누게 되면 서로 독립적으로 유지될 수 있다는 장점이 있다. 아래 예시 코드를 보면 모든 쿼리는 repository 계층에 모여있고, entity는 다른 계층에 별도의 클래스로 관리되고 있다. // repository 계층 @Injecta..