๐ ๋ชฉ์ฐจ
SpringBoot๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด์ปค๋จธ์ค ์๋น์ค๋ฅผ ๊ตฌํํ๋ ์ค,
์ด์ปค๋จธ์ค์ ํน์ฑ์ ์กฐํํ๋ ์ผ์ด ๋ง์๋ฐ ์ฑ๋ฅ์ด ์ ๋์ค์ง ์๋๋ค๋ ๊ฒ์ ํ์ธํ๋ค.
๋จผ์ , Redis์ ์ด๋ค ํน์ง ๋๋ฌธ์ ์ฑ๋ฅ์ด ๊ฐ์ ๋๋์ง ์์๋ณด์.
๐ Redis์ ์ฃผ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์๊ฐ๋ณต์ก๋
Redis๋ ๊ณ ์ฑ๋ฅ์ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ์ฅ์๋ก, ๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ(๋ฌธ์์ด, ํด์, ๋ฆฌ์คํธ, ์ , ์ ๋ ฌ๋ ์ ๋ฑ)๋ฅผ ์ง์ํ๋ค. ๊ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ฐ๊ด๋ ๋ช ๋ น์ด๋ค์ ์๋ก ๋ค๋ฅธ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค. Redis์ ์ฃผ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ช ๋ น์ด๋ค์ ์๊ฐ๋ณต์ก๋์ ๋ํด ์์๋ณด์.
๋ฌธ์์ด(String)
- GET key: O(1) - ์ฃผ์ด์ง ํค์ ๋ํ ๊ฐ์ ๋ฐํํ๋ค.
- SET key value: O(1) - ์ฃผ์ด์ง ํค์ ๊ฐ์ ์ค์ ํ๋ค.
- INCR key: O(1) - ํค์ ์ ์ฅ๋ ์ ์ ๊ฐ์ 1 ์ฆ๊ฐํ๋ค.
- DECR key: O(1) - ํค์ ์ ์ฅ๋ ์ ์ ๊ฐ์ 1 ๊ฐ์ํ๋ค.
๋ฆฌ์คํธ(List)
- LPUSH key value: O(1) - ๋ฆฌ์คํธ์ ์ผ์ชฝ์ ๊ฐ์ ์ฝ์ ํ๋ค.
- RPUSH key value: O(1) - ๋ฆฌ์คํธ์ ์ค๋ฅธ์ชฝ์ ๊ฐ์ ์ฝ์ ํ๋ค.
- LPOP key: O(1) - ๋ฆฌ์คํธ์ ์ผ์ชฝ์์ ๊ฐ์ ์ ๊ฑฐํ๊ณ ๋ฐํํ๋ค.
- RPOP key: O(1) - ๋ฆฌ์คํธ์ ์ค๋ฅธ์ชฝ์์ ๊ฐ์ ์ ๊ฑฐํ๊ณ ๋ฐํํ๋ค.
- LINDEX key index: O(N) - ๋ฆฌ์คํธ์ ํน์ ์ธ๋ฑ์ค์ ์๋ ๊ฐ์ ๋ฐํํ๋ค.
- LLEN key: O(1) - ๋ฆฌ์คํธ์ ๊ธธ์ด๋ฅผ ๋ฐํํ๋ค.
ํด์(Hash)
- HGET key field: O(1) - ํด์์์ ํน์ ํ๋์ ๊ฐ์ ๋ฐํํ๋ค.
- HSET key field value: O(1) - ํด์์ ํน์ ํ๋์ ๊ฐ์ ์ค์ ํ๋ค.
- HDEL key field: O(1) - ํด์์์ ํน์ ํ๋๋ฅผ ์ญ์ ํ๋ค.
- HLEN key: O(1) - ํด์์ ํ๋ ๊ฐ์๋ฅผ ๋ฐํํ๋ค.
์ (Set)
- SADD key member: O(1) - ์ ์ ๋ฉค๋ฒ๋ฅผ ์ถ๊ฐํ๋ค.
- SREM key member: O(1) - ์ ์์ ๋ฉค๋ฒ๋ฅผ ์ ๊ฑฐํ๋ค.
- SISMEMBER key member: O(1) - ํน์ ๋ฉค๋ฒ๊ฐ ์ ์ ์๋์ง ํ์ธํ๋ค.
- SCARD key: O(1) - ์ ์ ๋ฉค๋ฒ ์๋ฅผ ๋ฐํํ๋ค.
- SMEMBERS key: O(N) - ์ ์ ๋ชจ๋ ๋ฉค๋ฒ๋ฅผ ๋ฐํ(N์ ์ ์ ํฌ๊ธฐ)ํ๋ค.
์ ๋ ฌ๋ ์ (Sorted Set)
- ZADD key score member: O(log(N)) - ์ ๋ ฌ๋ ์ ์ ๋ฉค๋ฒ๋ฅผ ์ถ๊ฐ(N์ ์ ์ ํฌ๊ธฐ)ํ๋ค.
- ZREM key member: O(log(N)) - ์ ๋ ฌ๋ ์ ์์ ๋ฉค๋ฒ๋ฅผ ์ ๊ฑฐํ๋ค.
- ZRANGE key start stop: O(log(N) + M) - ์ ๋ ฌ๋ ์ ์์ ํน์ ๋ฒ์์ ๋ฉค๋ฒ๋ฅผ ๋ฐํ(M์ ๋ฐํํ๋ ๋ฉค๋ฒ ์)ํ๋ค.
- ZRANK key member: O(log(N)) - ์ ๋ ฌ๋ ์ ์์ ํน์ ๋ฉค๋ฒ์ ์์๋ฅผ ๋ฐํํ๋ค.
- ZCARD key: O(1) - ์ ๋ ฌ๋ ์ ์ ๋ฉค๋ฒ ์๋ฅผ ๋ฐํํ๋ค.
์ผ๋ฐ์ ์ธ ๋ช ๋ น์ด
- DEL key: O(1) - ์ฃผ์ด์ง ํค๋ฅผ ์ญ์ ํ๋ค.
- EXISTS key: O(1) - ์ฃผ์ด์ง ํค๊ฐ ์กด์ฌํ๋์ง ํ์ธํ๋ค.
- EXPIRE key seconds: O(1) - ์ฃผ์ด์ง ํค์ ๋ง๋ฃ ์๊ฐ์ ์ค์ ํ๋ค.
- TTL key: O(1) - ์ฃผ์ด์ง ํค์ ๋จ์ ๋ง๋ฃ ์๊ฐ์ ๋ฐํํ๋ค.
Redis์ ๋๋ถ๋ถ์ ๋ช ๋ น์ด๋ค์ ์์ ์๊ฐ๋ณต์ก๋ O(1)์ ๊ฐ์ง๋ฉฐ, ์ด๋ Redis๊ฐ ๋งค์ฐ ๋น ๋ฅด๊ฒ ๋์ํ ์ ์๊ฒ ํ๋ค. ๊ทธ๋ฌ๋ ์ผ๋ถ ๋ช ๋ น์ด๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ ํ ์๊ฐ๋ณต์ก๋ O(N) ๋๋ ๋ก๊ทธ ์๊ฐ๋ณต์ก๋ O(log(N))์ ๊ฐ์ง ์ ์๋ค. ์ด๋ฌํ ์๊ฐ๋ณต์ก๋๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ํด๋น ๋ช ๋ น์ด์ ํน์ฑ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ๊ฐ ๋ช ๋ น์ด์ ์๊ฐ๋ณต์ก๋๋ฅผ ์ดํดํ๊ณ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๐ ์๊ฐ๋ณต์ก๋๋?
์๊ฐ๋ณต์ก๋(Time Complexity)๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ ์ฐ์ฐ์ด ์คํ๋๋ ๋ฐ ํ์ํ ์๊ฐ์ ์ํ์ ๋ํ๋ด๋ ์ํ์ ๊ฐ๋ ์ด๋ค. ์ด๋ ์ฃผ๋ก ์ ๋ ฅ ๋ฐ์ดํฐ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์คํ ์๊ฐ์ด ์ด๋ป๊ฒ ๋ณํ๋์ง ๋ถ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์๊ฐ๋ณต์ก๋๋ ๋น ์ค ํ๊ธฐ๋ฒ(Big-O Natation)์ ์ฌ์ฉํ์ฌ ๋ํ๋ธ๋ค.
โ๏ธ ๋น ์ค ํ๊ธฐ๋ฒ(Big-O Notation)
๋น ์ค ํ๊ธฐ๋ฒ์ ์ ๋ ฅ ํฌ๊ธฐ n์ด ์ฆ๊ฐํ ๋ ์๊ณ ๋ฆฌ์ฆ์ ์คํ ์๊ฐ์ด ์ด๋ป๊ฒ ์ฆ๊ฐํ๋์ง๋ฅผ ํํํ๋ค. ์ด๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ๋ถ์ํ๊ณ ๋น๊ตํ๋ ๋ฐ ์ค์ํ ๋๊ตฌ์ด๋ค. ์ฃผ์ ๋น ์ค ํ๊ธฐ๋ฒ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์๋ค.
- O(1): ์์ ์๊ฐ๋ณต์ก๋ - ์ ๋ ฅ ํฌ๊ธฐ์ ์๊ด์์ด ์ผ์ ํ ์๊ฐ์ด ์์๋๋ค.
// ๋ฐฐ์ด์ ํน์ ์ธ๋ฑ์ค์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ
public int getElement(int[] array, int index) {
return array[index]; // ์ด ์ฐ์ฐ์ ํญ์ ์ผ์ ํ ์๊ฐ์ ์ํ๋๋ค.
}
- O(N): ์ ํ ์๊ฐ๋ณต์ก๋ - ์ ๋ ฅ ํฌ๊ธฐ์ ๋น๋กํ์ฌ ์๊ฐ์ด ์์๋๋ค.
// ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ
public int sumElements(int[] array) {
int sum = 0;
for (int i = 0; i < array.length; i++) {
sum += array[i];
}
return sum;
}
- O(log N): ๋ก๊ทธ ์๊ฐ๋ณต์ก๋ - ์ ๋ ฅ ํฌ๊ธฐ์ ๋ก๊ทธ์ ๋น๋กํ์ฌ ์๊ฐ์ด ์์๋๋ค.
// ์ด์ง ํ์ ์๊ณ ๋ฆฌ์ฆ
public int binarySearch(int[] sortedArray, int target) {
int left = 0;
int right = sortedArray.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (sortedArray[mid] == target) {
return mid;
} else if (sortedArray[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; // ์์๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ
}
- O(N^2): ์ ๊ณฑ ์๊ฐ๋ณต์ก๋ - ์ ๋ ฅ ํฌ๊ธฐ์ ์ ๊ณฑ์ ๋น๋กํ์ฌ ์๊ฐ์ด ์์๋๋ค.
// ๋ฐฐ์ด์์ ๋ ์์์ ๋ชจ๋ ์์ ๋น๊ตํ๋ ๊ฒฝ์ฐ
public void printPairs(int[] array) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
System.out.println(array[i] + ", " + array[j]);
}
}
}
์๊ฐ๋ณต์ก๋๋ ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ํ๊ฐํ๋ ๋ฐ ์ค์ํ๋ค. ์ ๋ ฅ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก ์๊ฐ๋ณต์ก๋๊ฐ ๋์ ์๊ณ ๋ฆฌ์ฆ์ ๋นํจ์จ์ ์ผ ์ ์์ผ๋ฉฐ, ์คํ ์๊ฐ์ด ๊ธ๊ฒฉํ ์ฆ๊ฐํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ํด์(Hash)์์ ํน์ ํ๋์ ๊ฐ์ ๊ฐ์ ธ์ค๋ 'HGET' ๋ช ๋ น์ด๋ O(1)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ฏ๋ก ๋งค์ฐ ๋น ๋ฅด๊ฒ ๋์ํ๋ค. ๋ฐ๋ฉด, ๋ฆฌ์คํธ(List)์์ ํน์ ์ธ๋ฑ์ค์ ๊ฐ์ ๊ฐ์ ธ์ค๋ 'LINDEX' ๋ช ๋ น์ด๋ O(N)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ฏ๋ก ๋ฆฌ์คํธ๊ฐ ํด์๋ก ์๊ฐ์ด ๋ ๋ง์ด ์์๋ ์ ์๋ค. ์ด์ฒ๋ผ ์๊ฐ๋ณต์ก๋๋ฅผ ์ดํดํ๋ฉด, ์ ์ ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ช ๋ น์ด๋ฅผ ์ ํํ์ฌ Redis๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
๋ํ, Spring Cache ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ๋ด๋ถ์ ์ผ๋ก Redis ๋ช ๋ น์ด๋ค์ด ์ฌ์ฉ๋์ด ์บ์ฑ ์์ ์ด ํจ์จ์ ์ผ๋ก ์ํ๋๋ค. ์ด๋ฌํ ์บ์ ์์ ์ ์ฃผ๋ก ์์ ์๊ฐ๋ณต์ก๋(O(1))๋ฅผ ๊ฐ์ง๋ฏ๋ก ์ฑ๋ฅ์ด ๋งค์ฐ ์ฐ์ํ๋ค. ์บ์ฑ ์์ ์ ํ๊ธฐ ์ ์ ์บ์๊ฐ ๋ฌด์์ธ์ง์ ๋ํด ์์๋ณด์.
๐ ์บ์๋?
์บ์(Cache)๋, ๋ฐ์ดํฐ๋ ๊ฐ์ ๋ฏธ๋ฆฌ ๋ณต์ฌํด ๋๋ ์์ ์ ์ฅ์์ด๋ค. ์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ ์ฌํ์ฉํ๋ ๊ธฐ์ ์ด๋ผ๊ณ ํ ์ ์๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋๋ก ํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฉ์ปค๋์ฆ์ด๋ค. ์บ์๋ ๋ค์ํ ์์คํ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ฃผ ์ฌ์ฉ๋๋ค.
๐ ์บ์์ ๋ชฉ์
- ์ฑ๋ฅ ํฅ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค, ํ์ผ ์์คํ , ์ธ๋ถ API ๋ฑ ์๋์ ์ผ๋ก ์ ๊ทผ ์๊ฐ์ด ๊ธด ์ ์ฅ์(์๋ณธ ์คํ ๋ฆฌ์ง)์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ , ์บ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ป์ ์ ์๋ค.
- ์น ํ์ด์ง์ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ์บ์์ ์ ์ฅํด ๋๋ฉด, ์ฌ์ฉ์๊ฐ ๋ค์ ํด๋น ํ์ด์ง์ ์ ๊ทผํ ๋ ์บ์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ด์ง ๋ก๋ ์๊ฐ์ ๋จ์ถ์ํฌ ์ ์๋ค.
- ๋ถํ ๊ฐ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์๋ฒ์ ๊ฐ์ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ ๋น๋๋ฅผ ์ค์ฌ ๋ถํ๋ฅผ ๊ฐ์์ํฌ ์ ์๋ค.
- ๋์ผํ ๋ฐ์ดํฐ์ ๋ํด ์ฌ๋ฌ ๋ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๋์ , ์บ์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค.
๐ ์บ์์ ์ ํ ๋ฐ ๊ตฌ์กฐ
- ๋ ์ง์คํฐ(Register)
- CPU ๋ด๋ถ์์ ๊ฐ์ฅ ๋น ๋ฅด๊ณ ์์ ๋ฉ๋ชจ๋ฆฌ์ด๋ค.
- CPU ์บ์
- ๋งค์ฐ ๋น ๋ฅธ ์๋๋ก ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋๋ก CPU์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ ์์นํ ์์ ํฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ์ด๋ค.
- ex) L1, L2, L3 ์บ์(SRAM - Static RAM)
- ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ ์บ์
- DRAM(Dynamic RAM)์ ์ฌ์ฉํ์ฌ ์ฃผ ๋ฉ๋ชจ๋ฆฌ๋ก ๋์ํ๋ค. ์์คํ ์ ๋ฉ๋ชจ๋ฆฌ(RAM)์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉฐ, ์บ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ค.
- ๋งค์ฐ ๋น ๋ฅด์ง๋ง, ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ์ ํ์ด ์๋ค.
- ex) CPU์บ์, JVM ํ ๋ฉ๋ชจ๋ฆฌ ์บ์
- ๋์คํฌ ์บ์
- ํ๋ ๋์คํฌ ๋๋ผ์ด๋ธ(HDD) ๋๋ ์๋ฆฌ๋ ์คํ ์ดํธ ๋๋ผ์ด๋ธ(SSD)์ ๊ฐ์ ์ ์ฅ ์ฅ์น์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์บ์๋ณด๋ค ๋๋ฆฌ์ง๋ง, ์ ์ฅ ์ฉ๋์ด ํฌ๊ณ ์ง์์ฑ์ด ์๋ค.
- ex) ๋ธ๋ผ์ฐ์ ์ ์บ์, ์ด์ ์ฒด์ ์ ํ์ผ ์์คํ ์บ์
- ๋ถ์ฐ ์บ์
- ์ฌ๋ฌ ์๋ฒ์ ๊ฑธ์ณ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ ์ ์ฅํ์ฌ ์บ์์ ์ฉ๋๊ณผ ๊ฐ์ฉ์ฑ์ ๋์ธ๋ค.
- ๋คํธ์ํฌ๋ฅผ ํตํด ์ ๊ทผํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์บ์๋ณด๋ค ๋๋ฆฌ์ง๋ง, ๋ถ์ฐ ํ๊ฒฝ์์ ์ ์ฉํ๋ค.
- ex) Redis, Memcached
SRAM - DRAM - SSD - HDD๋ก ๊ฐ์๋ก ๊ฐ๊ฒฉ์ ์ธ์ง๊ณ ์ฉ๋์ ๋์ด๋์ง๋ง, ์ ๊ทผ ์๋๊ฐ ๋๋ ค์ง๋ค.
๐ ์บ์ ์ ์ค๋ฅ
์บ์ ์ ์ค๋ฅ (Cache Hit Rate)์ ์บ์์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๋ฐ ์ฑ๊ณตํ ๋น์จ์ ์๋ฏธํ๋ค. ๋ณดํต์ ์บ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ํด๋น ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ์ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ๋ก ๋๋ ์ ์๋ค. ์บ์ ์ ์ค๋ฅ ์ ๋ค์๊ณผ ๊ฐ์ ๊ณต์์ผ๋ก ๊ณ์ฐํ ์ ์๋ค.
๋์ ์บ์ ์ ์ค๋ฅ ์ ์บ์ ์์คํ ์ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ณ , ๋ฐ์ดํฐ ์ก์ธ์ค์ ์ง์ฐ์ ์ค์ฌ์ค๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋์ ์บ์ ์ ์ค๋ฅ ์ ์ ์งํ๊ธฐ ์ํด์๋ ์ ์ ํ ์บ์ ์ ๋ต์ ์ ํํ๊ณ , ์บ์์ ํฌ๊ธฐ๋ฅผ ์ ์ ํ๊ฒ ์กฐ์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค. ์บ์์ ์ฑ๋ฅ์ ์ธก์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ฉ์ด๋ฅผ ์์๋ณด์.
- Cache Hit(์บ์ ์ ์ค) : ์บ์์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๋ฐ ์ฑ๊ณตํ ๊ฒฝ์ฐ
- Cache Miss(์บ์ ๋น๋๊ฐ, ์บ์ ๋ฏธ์ค) : ์บ์์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ
- Cache Hit Rate(์บ์ ์ ์ค๋ฅ ) : ์บ์์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๋ฐ ์ฑ๊ณตํ ๋น์จ
๐ ์บ์ ์ ๋ต
์บ์ ์์คํ ์ ์ฑ๋ฅ๊ณผ ์ผ๊ด์ฑ์ ์ค์ํ ์ํฅ์ ๋ฏธ์น๋ ์์์ด๋ค. ๊ฐ ์ ๋ต์ ํน์ ํ ์ํฉ์์ ์ต์ ์ ์ฑ๋ฅ์ ๋ฐํํ๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ ์ฌํญ๊ณผ ๋ฐ์ดํฐ ์ก์ธ์ค ํจํด์ ๋ฐ๋ผ ์ ์ ํ ์บ์ ์ ๋ต์ ์ ํํ๋ ๊ฒ์ด ์ค์ํ๋ค. Redis์ ๊ฐ์ ์บ์ ์์คํ ์์๋ ์ด๋ฌํ ์ ๋ต๋ค์ ์ฝ๊ฒ ์ค์ ํ๊ณ ์ฌ์ฉํ ์ ์๋ค.
์บ์ ์ฝ๊ธฐ ์ ๋ต
- Read-Through
- ์บ์์์ ๋ฐ์ดํฐ๊ฐ ์กฐํ๋์ง ์์ผ๋ฉด, ๋ฐ์ดํฐ ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์บ์์ ์ ์ฅํ๊ณ ๋ฐํํ๋ค.
- ์บ์์ ํญ์ ์ต์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ง๋ง, ์ต์ด ์กฐํ ์์ ์ง์ฐ์ด ๋ฐ์ํ ์ ์๋ค.
- ๋ฐ์ดํฐ ์กฐํ๊ฐ ๋น๋ฒํ์ง๋ง, ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ์์ฃผ ์ผ์ด๋์ง ์๋ ๊ฒฝ์ฐ์ ์ ํฉํ๋ค.
- Look Aside(Lazy Loading)
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋จผ์ ์บ์๋ฅผ ์กฐํํ๊ณ , ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๋ฐ์ดํฐ ์์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์บ์์ ์ ์ฅํ๋ค.
- ํ์ํ ๋๋ง ๋ฐ์ดํฐ๋ฅผ ์บ์์ ์ ์ฅํ๋ฏ๋ก ๋ถํ์ํ ์บ์ ์ฌ์ฉ์ ์ค์ผ ์ ์์ง๋ง, ์บ์์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ์ด๊ธฐ ์ง์ฐ์ด ๋ฐ์ํ๋ค.
- ๋ฐ์ดํฐ ์กฐํ ํจํด์ด ์์ธก ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์ ํฉํ๋ค.
- Write-Through Cache
- ์ฐ๊ธฐ ์์ ์ ํตํด ์บ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ํญ์ ์ต์ ์ํ๋ก ์ ์ง๋๋ฉฐ, ์ฝ๊ธฐ ์์ ์ ํญ์ ์ต์ ๋ฐ์ดํฐ๊ฐ ์บ์์ ์ ์ฅ๋๋ค.
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด ๋ณด์ฅ๋์ง๋ง, ๋ชจ๋ ์ฐ๊ธฐ ์์ ์ด ์บ์์ ์๋ณธ ๋ฐ์ดํฐ ์ ์ฅ์ ๋ชจ๋์์ ์ํ๋๋ฏ๋ก ์ฐ๊ธฐ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด ๋งค์ฐ ์ค์ํ ๊ฒฝ์ฐ์ ์ ํฉํ๋ค.
์บ์ ์ฐ๊ธฐ ์ ๋ต
- Write-Through
- ๋ฐ์ดํฐ๊ฐ ์บ์์ ์ฐ์ผ ๋, ๋์์ ์๋ณธ ๋ฐ์ดํฐ ์ ์ฅ์์๋ ์ฆ์ ์ฐ์ธ๋ค.
- ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ๋ณด์ฅ๋์ง๋ง, ์ฐ๊ธฐ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
- ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ์ค์ํ ๊ธ์ต ์์คํ ์ ์ ํฉํ๋ค.
- Write-Around
- ๋ฐ์ดํฐ๊ฐ ์บ์์ ์ฐ์ด์ง ์๊ณ , ์ง์ ์๋ณธ ๋ฐ์ดํฐ ์ ์ฅ์์๋ง ์ฐ์ธ๋ค.
- ์บ์์ ๋ถํ์ํ ๋ฐ์ดํฐ๊ฐ ์์ด๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ง๋ง, ๋ฐ์ดํฐ๊ฐ ์์ฃผ ์ฝํ๊ธฐ ์ ๊น์ง๋ ์บ์ ํํธ์จ์ด ๋ฎ์ ์ ์๋ค.
- ์ฐ๊ธฐ ๋น๋๊ฐ ๋๊ณ , ์ฝ๊ธฐ ๋น๋๊ฐ ๋ฎ์ ๋ฐ์ดํฐ์ ์ ํฉํ๋ค.
- Write-Back (Write-Behind)
- ๋ฐ์ดํฐ๊ฐ ๋จผ์ ์บ์์ ์ฐ์ด๊ณ , ์ผ์ ์๊ฐ์ด ์ง๋๊ฑฐ๋ ํน์ ์กฐ๊ฑด์ด ๋ง์กฑ๋ ๋ ์๋ณธ ๋ฐ์ดํฐ ์ ์ฅ์์ ์ฐ์ธ๋ค.
- ์ฐ๊ธฐ ์ฑ๋ฅ์ด ํฅ์๋์ง๋ง, ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด ์ง์ฐ๋ ์ ์๊ณ ์บ์๊ฐ ์์ค๋๋ฉด ๋ฐ์ดํฐ ์์ค ์ํ์ด ์๋ค.
- ์ฑ๋ฅ์ด ์ค์ํ ๋ก๊ทธ ๋ฐ์ดํฐ ์ ์ฅ์ ์ ํฉํ๋ค.
์บ์๋ ์ฑ๋ฅ ์ต์ ํ์ ๋ถํ ๊ฐ์๋ฅผ ์ํด ๋งค์ฐ ์ ์ฉํ ๊ธฐ์ ์ด๋ค. ์ ์ ํ ์บ์ ์ ๋ต์ ์ฌ์ฉํ๋ฉด ์์คํ ์ ์๋ต ์๊ฐ์ ๋จ์ถํ๊ณ ์์ ์ฌ์ฉ ํจ์จ์ฑ์ ๋์ผ ์ ์๋ค.
์ฌ๊ธฐ๊น์ง Redis Cache์ ๋ํด ์์๋ณด์๋ค. ์ด์ด์ Spring Cache ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํด ์ง์ ์ ์ฉํ๋ ๋ฒ์ ๋ํด ์์๋ณด์.
๋ค์ ํฌ์คํ ์์ ํ์ธํ ์ ์๋ค.
[Redis] Redis Cache๋ฅผ ํ์ฉํด ๋ฐ์ดํฐ ์กฐํ ์๋ ๊ฐ์ ํ๊ธฐ - (2)
[Redis] Redis Cache๋ฅผ ํ์ฉํด ๋ฐ์ดํฐ ์กฐํ ์๋ ๊ฐ์ ํ๊ธฐ - (2)
๐ ๋ชฉ์ฐจ ์ง๋๋ฒ ํฌ์คํ ์์ Redis์ ์ด๋ค ํน์ง ๋๋ฌธ์ ์ฑ๋ฅ์ด ๊ฐ์ ๋๋์ง ์์๋ณด์๋ค. [Redis] Redis Cache๋ฅผ ํ์ฉํด ๋ฐ์ดํฐ ์กฐํ ์๋ ๊ฐ์ ํ๊ธฐ - (1) [Redis] Redis Cache๋ฅผ ํ์ฉํด ๋ฐ์ดํฐ ์กฐํ ์๋
zzudev.tistory.com
๐ ์ฐธ๊ณ
[REDIS] ๐ ์บ์(Cache) ์ค๊ณ ์ ๋ต ์ง์นจ ๐ฏ ์ด์ ๋ฆฌ
Redis - ์บ์(Cache) ์ ๋ต ์บ์ฑ ์ ๋ต์ ์น ์๋น์ค ํ๊ฒฝ์์ ์์คํ ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ ์ ์๋ ์ค์ํ ๊ธฐ์ ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์บ์(cache)๋ ๋ฉ๋ชจ๋ฆฌ(RAM)๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณด๋ค ํจ์ฌ ๋น
inpa.tistory.com
Spring Boot์ Redis๋ก ์บ์ฑ ๊ตฌํํ๊ธฐ | ์์ฆIT
์บ์ฑ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋น์ฉ์ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ธฐ๋ฒ์ผ๋ก ๋น์ฉ์ด ๋ง์ด ๋๋ ๋ฐ์ดํฐ ์กฐํ ์์ ์์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฒ ๊ธ์์๋ ์บ์๋ฅผ ๊ตฌํํ๊ธฐ์ ์์ ์ฌ์ ์ ์์๋๋ฉด ์ข์ ๋งํ ์บ์
yozm.wishket.com