TypeORM ์์ฒด ์บ์ ๊ธฐ๋ฅ ํ์ฉ ๊ฐ์ด๋ (feat. Redis)
- #typeorm
- #cache
- #redis
๋ค์ด๊ฐ๋ฉฐ
์ ์ ํ ๊ณณ์ ์บ์๋ฅผ ํ์ฉํ๋ ์ผ์ ์ค์ํ ์ผ์ด๋ฉฐ ์ด๋ ค์ด ์ผ์ด๊ธฐ๋ ํฉ๋๋ค. ์ด๋ฒ์๋ TypeORM์ ๋ด์ฅ๋ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ Redis์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ๋ ๋ฐฉ๋ฒ์ ๊ณต์ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ฉด ์ฝ๋ ์์์์ ํฐ ๋ณ๊ฒฝ ์์ด ๊ฐํธํ๊ฒ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ํ๋ ๋ฐฉ์์ผ๋ก ์บ์ฑํ ์ ์์ด ์ ํฌ ํ์์๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
TypeORM์ Redis ์ค์ ํ๊ธฐ
๊ธฐ๋ณธ์ ์ผ๋ก TypeORM์ db์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด ์บ์ฑํ๋ default ์ค์ ๊ฐ์ ๊ฐ๊ณ ์์ต๋๋ค. ์ ํฌ๋ ๋น ๋ฅธ ์ฑ๋ฅ์ ์ํ์ฌ Redis์ ์บ์๋ฅผ ์ ์ฅํ๋ ์ค์ ๊ฐ์ ์ฌ์ฉํ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Redis ์ค์ ์ TypeORM ์ค์ ์์ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ๋ฉด ๋ฉ๋๋ค. ์ด์ธ์๋ ioredis๋ฅผ ํ์ฉํด cluster ์ค์ ๋ ์ง์ํฉ๋๋ค.
cache: {
type: 'redis',
options: {
host: 'localhost',
port: 6379
}
}
Cache ์ค์ ํ๊ธฐ
์บ์ ์ค์ ์ createQueryBuilder๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ find, count ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๋๊ฐ์ง ๊ฒฝ์ฐ ๋ชจ๋ ๊ฐ๋ฅํฉ๋๋ค.
๋จผ์ createQueryBuilder๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ๋๋ค. ์ด 3๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
// ๊ธฐ๋ณธ ์ค์ (๊ธฐ๋ณธ ๋ง๋ฃ ์๊ฐ: 1s)
const posts = await dataSource
.createQueryBuilder(Post, "post")
.where("post.isPublic = :isPublic", { isPublic: true })
.cache(true)
.getMany();
// ๋ง๋ฃ ์๊ฐ ์ค์ (5000ms)
const posts = await dataSource
.createQueryBuilder(Post, "post")
.where("post.isPublic = :isPublic", { isPublic: true })
.cache(5000)
.getMany();
// id, ๋ง๋ฃ ์๊ฐ ์ค์ (5000ms)
const posts = await dataSource
.createQueryBuilder(Post, "post")
.where("post.isPublic = :isPublic", { isPublic: true })
.cache("posts_public", 5000)
.getMany();
find, count ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ค์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
// ๊ธฐ๋ณธ ์ค์ (๊ธฐ๋ณธ ๋ง๋ฃ ์๊ฐ: 1s)
const posts = await dataSource.getRepository(Post).find({
where: { isPublic: true },
cache: true,
});
// id, ๋ง๋ฃ ์๊ฐ ์ค์ (5000ms)
const posts = await dataSource.getRepository(Post).find({
where: { isPublic: true },
cache: {
id: "posts_public",
milliseconds: 5000,
},
});
์บ์ ๋ง๋ฃ ์๊ฐ ์ค์
์๊ธฐ ์ค๋ช ๋๋ก TypeORM์์ ์ง์ํ๋ ์บ์๋ ๋ง๋ฃ ์๊ฐ์ ์์ ๋กญ๊ฒ ์ง์ ํ ์ ์์ต๋๋ค. ํด๋น ์๊ฐ์ ์บ์ฑํ๋ ค๋ ๋ฐ์ดํฐ์ ์ฑ๊ฒฉ ๋ฑ์ ๊ณ ๋ คํ์ฌ ์ค์ ํ ์ ์์ต๋๋ค. ์ ํฌ๋ ์บ์ ์๊ฐ์ 1์ด๋ก ์ค์ ํ์ฌ ์บ์ ๋ง๋ฃ์ ๋ํ ๊ด๋ฆฌํฌ์ธํธ๋ฅผ ์ค์ด๋ฉฐ, ๋์์ 1์ด ์์ ์ ์ํ๋ ์คํ์ดํฌ ํธ๋ํฝ์ ๋๋นํ ์ ์๋๋ก ๋ง๋ฃ ์๊ฐ์ ์ค์ ํ์์ต๋๋ค.
๋ง์น๋ฉฐ
์ง๊ธ๊น์ง TypeORM ์์ฒด ์บ์ ๊ธฐ๋ฅ์ ์ด์ฉํ์ฌ ์บ์ฑ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์์ต๋๋ค. TypeORM์ ์บ์๋ฅผ ๋์ ํ์๋ ค๋ ๋ถ๋ค๊ฒ ๋์์ด ๋์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.