-
๋ถ์ฐ ์์คํ ์์ ์ฌ๋ฌ ๋์ ์๋ฒ๊ฐ ๋์ผํ ์์์ ๋์์ ์ ๊ทผํ ๋, ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ธฐ์ ์ด ๋ฐ๋ก **๋ถ์ฐ๋ฝ(Distributed Lock)**์ ๋๋ค.
๋จ์ผ ์๋ฒ ํ๊ฒฝ์์๋
synchronized๋ReentrantLock๊ฐ์ ์๋ฐ ํ์ค API๋ก ๋์์ฑ์ ์ ์ดํ ์ ์์ง๋ง, ์๋ฒ๊ฐ ์ฌ๋ฌ ๋๋ผ๋ฉด ๊ฐ ์๋ฒ์ ๋ก์ปฌ ๋ฝ์ ์๋ก๋ฅผ ์์ง ๋ชปํฉ๋๋ค. ์ด๋ ๋ชจ๋ ์๋ฒ๊ฐ ๊ณตํต์ผ๋ก ๋ฐ๋ผ๋ณด๋ ์ธ๋ถ ์ ์ฅ์๋ฅผ ํ์ฉํด “๋๊ฐ ์์์ ์ ์ ํ๋์ง"๋ฅผ ๊ธฐ๋กํ๋ ๊ฒ์ด ํต์ฌ์ ๋๋ค.
1. ๋ถ์ฐ๋ฝ์ด ํ์ํ ์ด์
๋์ผํ DB ๋ ์ฝ๋์ ๋ํด ์ฌ๋ฌ ์ธ์คํด์ค๊ฐ ๋์์ ์์ ์์ฒญ์ ๋ณด๋ผ ๋, **๋ ์ด์ค ์ปจ๋์ (Race Condition)**์ด ๋ฐ์ํ์ฌ ๋ฐ์ดํฐ๊ฐ ๊ผฌ์ผ ์ ์์ต๋๋ค.
CreatedFri, 13 Feb 2026 11:14:05 +0900 -
Redis๋ฅผ ํ์ฉํ ๋ฉ์์ง ์์คํ ์ ๋ ๊ธฐ๋ฅ์ ๋ชจ๋ “๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค"๋ ๋ชฉ์ ์ ๊ฐ์ง๋ง, **์ฒ ํ(Philosophy)**๊ณผ ๋ฐ์ดํฐ ๋ณด์กด ๋ฐฉ์์์ ๊ฒฐ์ ์ ์ธ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
ํ๋ง๋๋ก ์์ฝํ์๋ฉด: **Pub/Sub์ ‘๋ฐฉ์ก’**์ด๊ณ , **Streams๋ ‘๊ธฐ๋ก์ด ๋จ๋ ๋ก๊ทธ’**์ ๋๋ค.
1. Redis Pub/Sub (Publish/Subscribe)
๊ฐ์ฅ ์ ํต์ ์ธ ํํ์ ๋ฉ์์ง ๋ชจ๋ธ์ ๋๋ค. ๋ฐ์ ์๊ฐ ๋ฉ์์ง๋ฅผ ๋์ง๋ฉด, ๊ทธ ์๊ฐ ์ฐ๊ฒฐ๋์ด ์๋ ๋ชจ๋ ์์ ์์๊ฒ ์ค์๊ฐ์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค.
- ํ๋ฐ์ฑ (Fire and Forget): ๋ฉ์์ง๋ฅผ ๋ณด๋ธ ํ ์ด๋์๋ ์ ์ฅํ์ง ์์ต๋๋ค. ์์ ์๊ฐ ์คํ๋ผ์ธ ์ํ๋ผ๋ฉด ๊ทธ ๋ฉ์์ง๋ ์์ํ ์ฌ๋ผ์ง๋๋ค.
- ์ค์๊ฐ์ฑ: ์ง์ฐ ์๊ฐ์ด ๊ฑฐ์ ์์ด ์ค์๊ฐ ์๋ฆผ์ด๋ ์ฑํ ์ ์ ํฉํฉ๋๋ค.
- ํฌ์์(Fan-out): ํ๋์ ๋ฉ์์ง๋ฅผ ์์ฒ ๋ช ์ ๊ตฌ๋ ์์๊ฒ ๋์์ ๋ฟ๋ฆด ๋ ๋งค์ฐ ํจ์จ์ ์ ๋๋ค.
2. Redis Streams
Kafka์ ์ ์ฌํ ๊ธฐ๋ฅ์ Redis์ ๊ตฌํํ ๋ชจ๋ธ์ ๋๋ค. ๋จ์ ์ ๋ฌ์ ๋์ด ๋ฐ์ดํฐ์ ‘์ด๋ ฅ’์ ๊ด๋ฆฌํฉ๋๋ค.
CreatedThu, 12 Feb 2026 11:14:05 +0900 -
Spring Boot(๋๋ Java)์์ Future ํจํด์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ํ ํต์ฌ ๋์์ธ ํจํด์ ๋๋ค. ์ฝ๊ฒ ๋งํด, **“์ง๊ธ ๋น์ฅ ๊ฒฐ๊ณผ๋ฅผ ์ค ์๋ ์์ง๋ง, ๋ฏธ๋์ ์ด๋ ์์ ์ ์์ ์ด ์๋ฃ๋๋ฉด ๊ฒฐ๊ณผ๋ฌผ์ ๋๊ฒจ์ฃผ๊ฒ ๋ค”**๋ ์ฝ์(Promise)๊ณผ ๊ฐ์ต๋๋ค.
1. Future ํจํด์ ํต์ฌ ๊ฐ๋
์ผ๋ฐ์ ์ธ ๋๊ธฐ(Synchronous) ๋ฐฉ์์์๋ ์์ ์ด ๋๋ ๋๊น์ง ์ค๋ ๋๊ฐ ์๋ฌด๊ฒ๋ ๋ชป ํ๊ณ ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค(Blocking). ๋ฐ๋ฉด, Future ํจํด์ ์ฌ์ฉํ๋ฉด ์์ ์ ๋ณ๋์ ์ค๋ ๋์ ๋งก๊ธฐ๊ณ ๋ฉ์ธ ์ค๋ ๋๋ ์๊ธฐ ํ ์ผ์ ๊ณ์ํ ์ ์์ต๋๋ค.
์ฃผ์ ํน์ง
- ๋น์ฐจ๋จ(Non-blocking): ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์์ด ํจ์จ์ ์ ๋๋ค.
- ์ง์ฐ ์คํ: ๊ฒฐ๊ณผ๊ฐ ์ค์ ๋ก ํ์ํ ์์ ๊น์ง ๋ฐ์ดํฐ ๊ณ์ฐ์ ๋ฏธ๋ฃฐ ์ ์์ต๋๋ค.
- ๊ฒฐํฉ์ฑ: ์ฌ๋ฌ ๋น๋๊ธฐ ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ํฉ์น๊ฑฐ๋, ์์ฐจ์ ์ผ๋ก ์คํํ๋ ํ๋ฆ์ ๋ง๋ค ์ ์์ต๋๋ค.
2. Spring Boot์์์ ๊ตฌํ ๋ฐฉ์
Spring Boot์์๋ ์ฃผ๋ก
CompletableFuture์@Async์ด๋ ธํ ์ด์ ์ ์กฐํฉํ์ฌ ์ด ํจํด์ ๊ตฌํํฉ๋๋ค.CreatedTue, 27 Jan 2026 11:25:18 +0900 -
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ์์ **์ ๊ทํ(Normalization)**์ **๋ฐ์ ๊ทํ(Denormalization)**๋ ๋ฐ์ดํฐ์ **๋ฌด๊ฒฐ์ฑ(Integrity)**๊ณผ ์ฑ๋ฅ(Performance) ์ฌ์ด์ ๊ท ํ์ ๋ง์ถ๋ ํต์ฌ์ ์ธ ๊ฐ๋ ์ ๋๋ค.
์ด ๋์ ๊ด๊ณ๋ ํํ **“๋ฐ์ดํฐ ์ ํฉ์ฑ vs. ์ฝ๊ธฐ ์ฑ๋ฅ”**์ ํธ๋ ์ด๋์คํ(Trade-off)๋ก ์์ฝํ ์ ์์ต๋๋ค. ๊ฐ ๊ฐ๋ ์ ํน์ง๊ณผ ํธ๋ ์ด๋์คํ ์์๋ฅผ ์์ธํ ๋ถ์ํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.
1. ํต์ฌ ํธ๋ ์ด๋์คํ ์์ฝ
๊ฐ์ฅ ๋จผ์ ์ดํดํด์ผ ํ ํฐ ๊ทธ๋ฆผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ ๊ทํ: ๋ฐ์ดํฐ๋ฅผ ์ชผ๊ฐ์ ์ค๋ณต์ ์ ๊ฑฐํ๊ณ ๋ฌด๊ฒฐ์ฑ์ ์งํต๋๋ค. (์ฐ๊ธฐ ์ฑ๋ฅ ํฅ์, ์ฝ๊ธฐ ์ JOIN ๋น์ฉ ๋ฐ์)
- ๋ฐ์ ๊ทํ: ์ฑ๋ฅ์ ์ํด ์๋์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ค๋ณต์ํต๋๋ค. (์ฝ๊ธฐ ์ฑ๋ฅ ํฅ์, ์ฐ๊ธฐ ์ ๋๊ธฐํ ๋น์ฉ ๋ฐ์)
2. ์ ๊ทํ (Normalization)
๋ฐ์ดํฐ์ ์ค๋ณต์ ์ต์ํํ๊ณ , ์ด์ ํ์(Anomaly)์ ๋ฐฉ์งํ๊ธฐ ์ํด ํ ์ด๋ธ์ ๋ถ๋ฆฌํ๋ ๊ณผ์ ์ ๋๋ค.
CreatedWed, 21 Jan 2026 21:20:45 +0900 -
์ฅ๋จ์
์คํ๋ง๋ถํธ(Spring Boot)์ JPA(Hibernate) ํ๊ฒฝ์์ **์คํธ๋ฆฌ๋ฐ ์ฟผ๋ฆฌ(Streaming Query)**๋ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋งค์ฐ ์ค์ํ ๊ธฐ์ ์ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ
List<T>ํํ๋ก ์กฐํํ๋ฉด ๋ชจ๋ ๊ฒฐ๊ณผ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ฉ๋ชจ๋ฆฌ(RAM)์ ์ ์ฌ๋์ง๋ง, ์คํธ๋ฆฌ๋ฐ ์ฟผ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค์(Cursor)๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ๋งํผ๋ง ์กฐ๊ธ์ฉ ๊ฐ์ ธ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๋๋ค.์์ฒญํ์ ์คํธ๋ฆฌ๋ฐ ์ฟผ๋ฆฌ์ ํน์ง๊ณผ ์ฅ๋จ์ ์ ์ ๋ฆฌํด ๋๋ฆฝ๋๋ค.
1. ์คํธ๋ฆฌ๋ฐ ์ฟผ๋ฆฌ์ ์ฃผ์ ํน์ง
์คํธ๋ฆฌ๋ฐ ์ฟผ๋ฆฌ๋ Java 8์
Stream<T>API๋ฅผ ํ์ฉํ์ฌ DB ๊ฒฐ๊ณผ๋ฅผ ๋ฌผ ํ๋ฅด๋ฏ ์ฒ๋ฆฌํฉ๋๋ค.- ์ปค์(Cursor) ๊ธฐ๋ฐ ๋์: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด๋ถ์ ์ปค์๋ฅผ ์ด๋์ํค๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฝ์ด์ต๋๋ค.
- ์ง์ฐ ๋ก๋ฉ(Lazy Loading)๊ณผ ์ ์ฌ:
Stream๊ฐ์ฒด๋ฅผ ์์ฑํ ์์ ์๋ ์ฟผ๋ฆฌ๋ง ์คํ๋๊ณ , ์ค์ ๋ฐ์ดํฐ๋stream.forEach()๋next()๋ฑ์ ํธ์ถํ ๋ ๊ฐ์ ธ์ต๋๋ค. - ํธ๋์ญ์ ์์กด์ฑ: ์คํธ๋ฆผ ์ฒ๋ฆฌ๊ฐ ๋๋ ๋๊น์ง DB ์ฐ๊ฒฐ(Connection)์ ์ ์งํด์ผ ํ๋ฏ๋ก, ๋ฐ๋์ ํ์ฑํ๋ ํธ๋์ญ์ ์์์ ์ํ๋์ด์ผ ํฉ๋๋ค.
2. ์ฅ์ (Pros)
๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ(Batch ์์ , ์์ ๋ค์ด๋ก๋ ๋ฑ)์์ ๊ฐ๋ ฅํ ์ด์ ์ ๊ฐ์ง๋๋ค.
CreatedTue, 20 Jan 2026 21:20:45 +0900 -
Memcached์ Redis๋ ๋ ๋ค ๊ณ ์ฑ๋ฅ ์ธ๋ฉ๋ชจ๋ฆฌ(In-memory) ํค-๊ฐ(Key-Value) ์ ์ฅ์๋ก, ์ฃผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถํ๋ฅผ ์ค์ด๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์๋๋ฅผ ๋์ด๋ ์บ์(Cache) ์ฉ๋๋ก ์ฌ์ฉ๋๋ค๋ ๊ณตํต์ ์ด ์์ต๋๋ค.
ํ์ง๋ง “๋จ์ํจ๊ณผ ๋ฉํฐ์ค๋ ๋(Memcached)” ๋ **“๊ฐ๋ ฅํ ๊ธฐ๋ฅ๊ณผ ์ ์ฐ์ฑ(Redis)”**์ด๋ผ๋ ๋ช ํํ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
๋ ๊ธฐ์ ์ ํต์ฌ์ ์ธ ์ฐจ์ด๋ฅผ 4๊ฐ์ง ๊ด์ (๋ฐ์ดํฐ ๊ตฌ์กฐ, ์ํคํ ์ฒ, ์์์ฑ, ํ์ฅ์ฑ)์์ ์ ๋ฆฌํด ๋๋ฆฝ๋๋ค.
1. ํ๋์ ๋ณด๋ ๋น๊ต (Executive Summary)
ํน์ง Memcached Redis ์ฃผ์ ์ปจ์ ๊ณ ์ฑ๋ฅ, ๋จ์ํจ, ๋ฉํฐ์ค๋ ๋ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ, ์์์ฑ, ๊ธฐ๋ฅ ํ๋ถ ์๋ฃ ๊ตฌ์กฐ String (๋จ์ ๋ฌธ์์ด/๋ฐ์ด๋๋ฆฌ) String, List, Set, Hash, Sorted Set, Geo ๋ฑ ์ค๋ ๋ ๋ชจ๋ธ ๋ฉํฐ ์ค๋ ๋ (Multi-threaded) ์ฑ๊ธ ์ค๋ ๋ (Single-threaded) (I/O๋ ๋ฉํฐ ๊ฐ๋ฅ) ๋ฐ์ดํฐ ์์์ฑ ์ง์ ์ ํจ (์ฌ๋ถํ ์ ๋ฐ์ดํฐ ์๋ฉธ) ์ง์ (RDB, AOF) ํ์ฅ์ฑ(Clustering) ํด๋ผ์ด์ธํธ ์ธก ๋ถ์ฐ (Consistent Hashing) ์๋ฒ ์ธก ๋ถ์ฐ (Redis Cluster) ๋ณต์ (Replication) ์ง์ ์ ํจ Master-Slave ๋ณต์ ์ง์ ์ฃผ์ ์ฉ๋ ๋จ์ ์บ์ฑ (์ธ์ , HTML ์กฐ๊ฐ) ๋ณต์กํ ์บ์ฑ, ๋ฆฌ๋๋ณด๋, ๋๊ธฐ์ด, ๋ฉ์์ง ๋ธ๋ก์ปค
2. ์์ธ ์ฐจ์ด์ ๋ถ์
โ ๋ฐ์ดํฐ ๊ตฌ์กฐ (Data Structures)
- Memcached: ์ค์ง **๋ฌธ์์ด(String)**๋ง ์ ์ฅํฉ๋๋ค. ๋ฆฌ์คํธ๋ ํด์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ์ ์ฅํ๋ ค๋ฉด JSON ๋ฑ์ผ๋ก ์ง๋ ฌํ(Serialize)ํด์ ๋ฌธ์์ด๋ก ๋ง๋ ๋ค ์ ์ฅํด์ผ ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ค๋ฉด ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ์์ ํ ๋ค ๋ค์ ๋ฎ์ด์จ์ผ ํ๋ ๋จ์ ์ด ์์ต๋๋ค.
- Redis: ๋ค์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ง์ํฉ๋๋ค. ๋ฆฌ์คํธ(List)์ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋, ํด์(Hash)์ ํน์ ํ๋๋ง ์์ ํ๋ ๋ฑ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์กฐ์์ด ๊ฐ๋ฅํฉ๋๋ค.
- ํ์ฉ ์: ‘์ค์๊ฐ ๋ญํน’ ๊ตฌํ ์ Redis์
Sorted Set์ ์ฐ๋ฉด ๋งค์ฐ ์ฝ๊ฒ ๊ตฌํ ๊ฐ๋ฅํฉ๋๋ค.
โก ์ค๋ ๋ ๋ชจ๋ธ (Architecture)
๊ฐ์ฅ ํฐ ์ํคํ ์ฒ ์ฐจ์ด์ ๋๋ค.
CreatedTue, 20 Jan 2026 09:41:22 +0900