- ํ๋ฌ์ค ํ ํ๋ก์ ํธ๋ Spring์ ํ์ฉํ์ฌ ์์น ๊ธฐ๋ฐ ๋ง์ง ๊ฒ์ ์นํ์ด์ง๋ฅผ ๊ตฌํํ ํ ํ๋ก์ ํธ์ ๋๋ค.
- ํ์ : ์ด๋ฏผ์ , ๋ช ๋ฏผ์ค, ์ด๋ฒ์, ์ดํธ์, ์กฐ์์ธ
- ๊ธฐ๊ฐ : 2025.03.24 - 2025.03.31
Lucky7s Table์ ์ฌ์ฉ์์ ์์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง์ง์ ๊ฒ์ํ ์ ์๋ ์น ์๋น์ค์ ๋๋ค. ๊ณตํต ๊ด์ฌ์ฌ์ธ โ๋ง์งโ์ ์ฃผ์ ๋ก ์ผ์, ๋ค์ด๋์ฝ๋ ์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ ํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ตฌํํ์์ต๋๋ค:
- ๊ฑฐ๋ฆฌ, ์์ ์ข ๋ฅ, ํค์๋ ๊ธฐ๋ฐ ๋ง์ง ๊ฒ์
- ์กฐํ์๊ฐ ๋ง์ ์์ผ๋ก ์ ๋ ฌ๋ ๊ฒ์ ๊ฒฐ๊ณผ ์ ๊ณต
- ์์น ๊ธฐ๋ฐ ์ ๋ณด ์ ๊ณต์ ํตํ ์ฌ์ฉ์ ํธ์์ฑ ํฅ์
- ๋์ ์ ์ธ ๊ธฐ์ ์คํ ๋ฐ ์ฑ๋ฅ ์ต์ ํ
| ์ด๋ฆ | ์ญํ |
|---|---|
| ์ด๋ฏผ์ | Store CRUD,์ผ๋ฐ ๊ฒ์ โ Redis ์ ์ฉํ ์ฑ๋ฅ ํฅ์ ๊ฒ์ / Jmeter ์ฌ์ฉํ ์ฑ๋ฅ ํ ์คํธGeoHash์ Redis ์ ์ฉํ ์์น ๊ธฐ๋ฐ ์กฐํ |
| ๋ช ๋ฏผ์ค | ์ผ๋ฐ ๊ฒ์, ์ธ๊ธฐ ๊ฒ์์ด ๊ธฐ๋ฅ, ๊ฒ์ ์ธ๋ฑ์ฑ ๋ฐ ์ต์ ํ |
| ์ด๋ฒ์ | Kakao Map API๋ฅผ ์ด์ฉํ ์ฃผ์ โ ์ขํ ๋ณํ, ์์น ๊ธฐ๋ฐ ์กฐํ |
| ์ดํธ์ | JWT + Spring Security ์ธ์ฆ/์ธ๊ฐ, ๋ฆฌ๋ทฐ CRUD, ์๋์์ฑ, ์ธ๊ธฐ ๊ฒ์์ด ๊ธฐ๋ฅ |
| ์กฐ์์ธ | User CRUD, MySQL ๊ธฐ๋ฐ ์์น ๊ฒ์ ๊ธฐ๋ฅ |
- JWT + Spring Security ๊ธฐ๋ฐ ์ธ์ฆ/์ธ๊ฐ
- Kakao Map API๋ก ์ฃผ์ โ ์ขํ ๋ณํ
- ์นดํ ๊ณ ๋ฆฌ, ํค์๋, ๊ฑฐ๋ฆฌ ๊ธฐ์ค ๋ง์ง ๊ฒ์
- ์กฐํ์๊ฐ ๋ง์ ์์ผ๋ก ์ ๋ ฌ
- Redis๋ฅผ ํ์ฉํด ์กฐํ์ ๊ธฐ๋ฐ ์ธ๊ธฐ ๊ฒ์์ด ๋ชฉ๋ก ์ ๊ณต
- ๊ฒ์์ด ์ ๋์ฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋์์ฑ ๊ธฐ๋ฅ ์ ๊ณต
- ์ฌ์ ์ ์ ๋ ฌ๋ก ์ฌ์ฉ์ ํธ์์ฑ ํฅ์
- ๋ฆฌ๋ทฐ ๋ฑ๋ก, ์กฐํ, ์ญ์ ๊ฐ๋ฅ
๐ ์งํ ๋ฐ ํ์ ๊ธฐ๋ก : Lucky7 ๋ ธ์ ์์ ์งํ
- Language & Framework: Java, Spring Boot
- Database: MySQL
- Cache: Redis
- Security: Spring Security, JWT
- API: Kakao Map API
- Version Control: Git, GitHub
| ํญ๋ชฉ | ์ผ๋ฐ ๊ฒ์ | Redis ๊ฒ์ |
|---|---|---|
| ํ๊ท ์๋ต ์๊ฐ | 35ms | 5ms |
| ์ฑ๋ฅ ํฅ์๋ฅ | ์ฝ 87% ๊ฐ์ |
- ํ ์คํธ ํ๊ฒฝ: 100 Users / Ramp-up 60
- Redis ๊ฒ์์ ์บ์๊ฐ ๋์ ๋ ์๋ก ๋ ํฐ ์ฑ๋ฅ ํฅ์ ๊ธฐ๋ ๊ฐ๋ฅ
- ํต์ฌ ๊ธฐ๋ฅ์ธ ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ์ฑ๋ฅ ๊ฐ์ ๋์์ผ๋ก ์ ์
FULLTEXT INDEX์Ngram์ ํ์ฉํ ์ ์ฌ๋ ๊ธฐ๋ฐ ๊ฒ์- ๊ฒ์์ด์์ ์ ์ฌ๋(score)๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
- ์ ๋ ฌ ๊ธฐ์ค ์ ์ฉ ์ ํ ๋น๊ต:
ํญ๋ชฉ ์ ๋ ฌ ๋ฏธ์ ์ฉ ์ ๋ ฌ ์ ์ฉ ์๋ต ์๊ฐ 288ms 122ms ์ฑ๋ฅ ํฅ์๋ฅ ์ฝ 57% ๊ฐ์
-- Ngram ๊ธฐ๋ฐ ์ธ๋ฑ์ค ์์ DDL
ALTER TABLE store
ADD FULLTEXT(name, category)
WITH PARSER ngram;โ ์ ๊ฒ์ API์ Cache๋ฅผ ์ ์ฉํ๋๊ฐ?
-
๊ฒ์ ์์ฒญ์ด ๋ง์ ๊ฒฝ์ฐ, DB ๋ถํ๋ฅผ ์ค์ด๊ธฐ ์ํด
-
๊ฐ์ ๊ฒ์์ด์ ๋ํ ๋ฐ๋ณต์ ์ธ ์กฐํ๋ฅผ ๋น ๋ฅด๊ฒ ์๋ตํ๊ธฐ ์ํด
-
API ์๋ต ์๋๋ฅผ ๊ฐ์ ํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๊ธฐ ์ํด
โ ์ Redis๋ฅผ ์ ํํ๋๊ฐ?
-
Redis๋ ์์์ฑ ์ง์, ๋ค์ํ ์๋ฃ๊ตฌ์กฐ(Hash, List, Sorted Set ๋ฑ) ์ ๊ณต
-
Redis๋ ๋ฐ์ดํฐ ๋ง๋ฃ ์ค์ , TTL ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ์ฌ ๊ฒ์์ด ์บ์ฑ์ ์ ํฉ
โ Redis์์ ์ฌ์ฉํ ์๋ฃ๊ตฌ์กฐ
- Sorted Set (ZSET)
- ๊ฒ์์ด๋ฅผ ํค๋ก ํ๊ณ , ๊ฒ์ ํ์๋ฅผ ์ ์(Score)๋ก ์ค์ ํ์ฌ ์ธ๊ธฐ ๊ฒ์์ด ์์ ๊ด๋ฆฌ
- ZINCRBY ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์์ด ๊ฒ์ ์๋ง๋ค ์ ์ ์ฆ๊ฐ
- ZREVRANGE๋ก ์ธ๊ธฐ ๊ฒ์์ด ์์ ์กฐํ