[TypeORM] 캐싱

강준혁·2021년 3월 11일
0

TypeORM

목록 보기
1/1

TypeORM 으로 개발을 진행하면서 알게된 캐싱 기능에 대해 간단히 소개하고자 한다.

이번에 메시징 API 서버를 만들면서 자주 쿼리하게 되는 데이터에 대한 캐싱의 니즈가 있었다.
이전에 이런 니즈가 있을 때에는 별도의 캐싱 함수를 구현하여 쿼리를 해당 함수를 통해 진행하게 하였는데,
TypeORM 에서 제공해주는 캐싱 기능을 사용하면 별도의 함수를 구현하지 않아도 간편하게 캐싱이 가능하다.

일단 캐싱을 사용하려면 커넥션 설정 부분에서 명시적으로 이를 선언해주어야 한다.

{
    type: "mysql",
    host: "localhost",
    username: "test",
    ...
    cache: true
}

위 처럼 선언을 하게되면, TypeORM 은 기본적으로 Cache 테이블을 생성하고 캐싱된 데이터를 해당 테이블에서 조회하여 가져오는 방식으로 구동하게된다.
따라서 처음 캐싱 선언을 할 때에는 sync, 즉 위 설정을 한뒤에 엔티티와 DB간의 마이그레이션이 필수적이다.

그 이후에 아래와 같이 간단하게 캐싱이 가능하다.

const users = await connection
    .getRepository(User)
    .find({
        where: { isAdmin: true },
        cache: true
    });

디폴트 캐싱 기간은 1000ms 이며, 이를 변경하고 싶다면 아래와 같이 작성한다.

const users = await connection
    .getRepository(User)
    .find({
        where: { isAdmin: true },
        cache: 60000 // 1 minute
    });

디폴트 방식인 테이블 캐싱 외에 Redis 를 통한 캐싱도 지원을 하고 있다.
본인은 이 방식이 퍼포먼스 적으로나, 관리적으로나 좋다고 판단하여 이를 사용하고 있다.
Redis 를 통해 캐싱을 하고 싶다면 아래와 같이 커넥션 설정을 하면 된다.

{
    type: "mysql",
    host: "localhost",
    username: "test",
    ...
    cache: {
        type: "redis",
        options: {
            host: "localhost",
            port: 6379
        }
    }
}

언급한 기능 외에도 캐싱 키 설정, redis-cluster 연동 또한 지원하므로 자세한 내용은
https://typeorm.io/#/caching 를 참고하길 바란다.

profile
백엔드 개발자

0개의 댓글