1. ์บ์ฑ
์บ์ฑ์ด ์ ํ์ํ๊ฐ?
1.1 ์บ์ฑ์ ์ฌ์ฉ์ฒ
- ๋ญํน ์์คํ ์ต์ ์ํ, ์ธ๊ธฐ ์ํ ๋ฑ
- ์ฌ์ฉ์ ์ธ์ ๋ฐ์ดํฐ ์ธ์ ์ ๋ณด ์ ์ฅ, ํ ํฐ ๊ฒ์ฆ ํ๋ก์ธ์ค ์คํต, ํ ํฐ ๋ฐด
- ๋ณํ๊ฐ ์ ์ ๋ฐ์ดํฐ ์บ์ฑ ์ํ ์์ธ๋ด์ฉ
- ์ธ๋ถ API ์บ์ฑ ์ธ๋ถ API ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํด์ ์ธ๋ถ ๋ฆฌ์์ค ์ฌ์ฉ ๋น์ฉ ์ ๊ฐ
- Rate Limiting, Throttling ์ฌ์ฉ์์ ์์ฒญ ํ์๋ฅผ ์บ์ฑํ ํ ํน์ ํ์๋ฅผ ๋์ผ๋ฉด ์๋ฌ๋ฅผ ๋ฐํ ํ ์ ์๋ค
1.2 ์บ์ฑ์ ์ฅ์
ํผํฌ๋จผ์ค ํฅ์: ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฐ์ ธ์ค๊ณ ๋ฐฑ์๋ ์๋น์ค ๊ณผ๋ถํ๋ฅผ ์ต์ํ ํ ์ ์๋คScalability: ์บ์ฑ์ ์ฌ์ฉํ์ง ์์๋๋ณด๋ค ํจ์ฌ ๋์ ํธ๋ํฝ์ ๊ฐ๋น ํ ์ ์๋ค๋น์ฉ ์ ๊ฐ: ๋น์ผ ๋ฆฌ์์ค๋ฅผ ์บ์ฑ ํด๋์ด์ ๋น์ฉ์ ๊ฐ ํจ๊ณผ๋ฅผ ๋๋ฆด ์ ์๋คUX ๊ฐ์: ํผํฌ๋จผ์ค๊ฐ ์ข์์ง๋ฉฐ ์์ฐ์ค๋ฝ๊ฒ UX ๊ฐ์ ์ด ๋๋ค
1.3 ์บ์ฑ์ ๋จ์
์คํ ์ผ (Stale) ๋ฐ์ดํฐ: ๋ฐ์ดํฐ ์ ์ ๋(?)๊ฐ ๋ถ์กฑํ๋ค. ์ฆ, ์ต์ ๋ฐ์ดํฐ๊ฐ ์๋๋ค๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ฆ๊ฐ: ์บ์๋ ๋น ๋ฅธ ์ ๊ทผ์ด ๋ชฉ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋์ด๋๋ค๋์์ธ ๋ณต์ก์ฑ: ์ํํธ์จ์ด ์ํคํ ์ฒ์ ์บ์๊ฐ ํฌํจ๋๋ฉด์ ๋์์ธ ๋ณต์ก๋๊ฐ ๋์์ง๋ค๋ณด์ ๋ฆฌ์คํฌ: ์ ํฉํ ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํ์ง ์์ผ๋ฉด ๋ณด์ ๋ฆฌ์คํฌ๊ฐ ์๊ธธ ์ ์๋ค
2. Redis๋ฅผ ํ์ฉํ ์บ์ฑ
2.1 Monolithic Architecture
Monolithic Architecture๋ ๋ชจ๋ ๊ธฐ๋ฅ์ด ํ๋์ ์ฝ๋๋ฒ ์ด์ค์ ํฌํจ๋ ๋จ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ฏธํฉ๋๋ค. ์ด ์ํคํ ์ฒ์์๋ ๋ชจ๋ ๋ชจ๋์ด ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด ์์ผ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ๋ถ๋ถ์ด ํจ๊ป ๋ฐฐํฌ๋๊ณ ํ์ฅ๋ฉ๋๋ค.
Monolithic Architecture์ ์ฅ์
๋จ์์ฑ: ๊ฐ๋ฐ, ํ ์คํธ, ๋ฐฐํฌ๊ฐ ์๋์ ์ผ๋ก ๊ฐ๋จํ๋ค.์ฑ๋ฅ: ๋ชจ๋ ๊ฐ์ ํต์ ์ด ๋์ผํ ํ๋ก์ธ์ค ๋ด์์ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ด ์ข๋ค.๋๋ฒ๊น: ๋จ์ผ ์ฝ๋๋ฒ ์ด์ค์ด๊ธฐ ๋๋ฌธ์ ๋๋ฒ๊น ์ด ์ฉ์ดํ๋ค.
Monolithic Architecture์ ๋จ์
ํ์ฅ์ฑ: ํน์ ๋ชจ๋๋ง ํ์ฅํ๊ธฐ ์ด๋ ต๋ค.์ ์ง๋ณด์: ์ฝ๋๋ฒ ์ด์ค๊ฐ ์ปค์ง์๋ก ์ ์ง๋ณด์๊ฐ ์ด๋ ต๋ค.๋ฐฐํฌ: ์์ ๋ณ๊ฒฝ ์ฌํญ๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ๋ฐฐํฌํด์ผ ํ๋ค.
2.2 Microservice Architecture
๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ(Microservice Architecture)
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๊ฐ์ ์์ ๋ ๋ฆฝ์ ์ธ ์๋น์ค๋ก ๋ถ๋ฆฌํ์ฌ ๊ฐ๋ฐ, ๋ฐฐํฌ, ํ์ฅ ๋ฐ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํ๋ ์ํํธ์จ์ด ์ํคํ ์ฒ๋ค.
- ๊ฐ ์๋น์ค๋ ํน์ ๋น์ฆ๋์ค ๊ธฐ๋ฅ์ ๋ด๋นํ๋ฉฐ, ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ๋๊ณ ํ์ฅ๋ ์ ์๋ค.
๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์ ์ฃผ์ ํน์ง
๋ ๋ฆฝ์ ์ธ ๋ฐฐํฌ: ๊ฐ ์๋น์ค๋ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ๋ ์ ์์ด, ํน์ ์๋น์ค์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฒด ์์คํ ์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.๋ ๋ฆฝ์ ์ธ ํ์ฅ: ๊ฐ ์๋น์ค๋ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅ๋ ์ ์์ด, ํน์ ์๋น์ค์ ๋ํ ์์ ์ฆ๊ฐ์ ๋ฐ๋ผ ๊ฐ๋ณ์ ์ผ๋ก ํ์ฅํ ์ ์๋ค.๋ชจ๋ํ: ๊ฐ ์๋น์ค๋ ํน์ ๋น์ฆ๋์ค ๊ธฐ๋ฅ์ ๋ด๋นํ๋ฉฐ, ๋ชจ๋ํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.๋ค์ํ ๊ธฐ์ ์คํ: ๊ฐ ์๋น์ค๋ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐ๋๊ธฐ ๋๋ฌธ์, ๊ฐ ์๋น์ค์ ์ ํฉํ ๊ธฐ์ ์คํ์ ์ฌ์ฉํ ์ ์๋ค.์์ ํ: ๊ฐ ์๋น์ค๋ ์์ ํ์ ์ํด ๊ด๋ฆฌ๋ ์ ์์ด, ํ ๊ฐ์ ์์ฌ์ํต์ด ์ํํด์ง๊ณ ๊ฐ๋ฐ ์๋๊ฐ ๋นจ๋ผ์ง๋ค.
๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์ ์ฅ์
์ ์ฐ์ฑ: ์๋ก์ด ๊ธฐ์ ์ ๋์ ํ๊ฑฐ๋ ๋ณ๊ฒฝํ๊ธฐ๊ฐ ์ฉ์ดํ๋ค.ํ์ฅ์ฑ: ํน์ ์๋น์ค๋ง ํ์ฅํ ์ ์์ด, ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.์ ๋ขฐ์ฑ: ํ ์๋น์ค์ ์ฅ์ ๊ฐ ์ ์ฒด ์์คํ ์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ๊ฒฉ๋ฆฌํ ์ ์๋ค.๋น ๋ฅธ ๋ฐฐํฌ: ๋ ๋ฆฝ์ ์ธ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ์ฌ, ์๋ก์ด ๊ธฐ๋ฅ์ ๋น ๋ฅด๊ฒ ๋ฐฐํฌํ ์ ์๋ค.
๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์ ๋จ์
๋ณต์ก์ฑ ์ฆ๊ฐ: ์๋น์ค ๊ฐ์ ํต์ , ๋ฐ์ดํฐ ์ผ๊ด์ฑ, ๋ฐฐํฌ ๊ด๋ฆฌ ๋ฑ์์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ๋ค.์ด์ ๋น์ฉ ์ฆ๊ฐ: ์ฌ๋ฌ ์๋น์ค๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์ด์๋๊ธฐ ๋๋ฌธ์, ๋ชจ๋ํฐ๋ง, ๋ก๊น , ๋ฐฐํฌ ๋ฑ์ ์ด์ ๋น์ฉ์ด ์ฆ๊ฐํ ์ ์๋ค.๋ฐ์ดํฐ ๊ด๋ฆฌ: ๋ถ์ฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ด๋ ค์ธ ์ ์๋ค.
2.3 Redis Store
1import type { RedisClientOptions } from 'redis'2import * as redisStore from 'cache-manager-redis-store'3import { Module } from '@nestjs/common'4import { CacheModule } from '@nestjs/cache-manager'5import { AppController } from './app.controller'67@Module({8imports: [9CacheModule.register<RedisClientOptions>({10store: redisStore,11host: 'localhost',12port: 6379,13}),14],15controllers: [AppController],16})17export class AppModule {}