Skip to content

wl2258/early-bird

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Early Bird

์–ผ๋ฆฌ๋ฒ„๋“œ(Early-Bird)๋Š” ์‚ฌ์šฉ์ž๋“ค์ด ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์ƒํ’ˆ์„ ํŒ๋งคํ•˜๊ณ  ๊ตฌ๋งคํ•  ์ˆ˜ ์žˆ๋Š” e-commerce ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ํŒ๋งค์ž๋Š” ํŒ๋งค์ž๊ฐ€ ํŠน์ • ์‹œ๊ฐ„์— ๊ตฌ๋งค ๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™”๋˜๋„๋ก ํŒ๋งค ์‹œ๊ฐ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹œ๊ฐ„ ๋™์•ˆ ๊ตฌ๋งค์ž๋“ค์€ ํ•œ์ • ์ˆ˜๋Ÿ‰ ์ƒํ’ˆ์„ ๊ตฌ๋งคํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„: 2024.04.17 - 2024.05.14


์‹œ์Šคํ…œ ๊ตฌ์กฐ

image


๊ฐœ๋ฐœ ํ™˜๊ฒฝ

  • Java 21
  • Gradle
  • Spring Boot 3.2.5
  • MariaDB

๐Ÿ›  ๊ธฐ์ˆ  ์Šคํƒ

ํ”„๋ ˆ์ž„์›Œํฌ & ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

DB

๋ฉ”์‹œ์ง€ ํ ์‹œ์Šคํ…œ

์ธํ”„๋ผ


๐Ÿ“Œ ERD


๐Ÿ“œ API ๋ฌธ์„œ

API ๋ฌธ์„œ ๋ฐ”๋กœ๊ฐ€๊ธฐ


๐ŸŒŸ ์ฃผ์š” ๊ธฐ๋Šฅ

  • Redis Caching์„ ํ†ตํ•œ ์ƒํ’ˆ ์žฌ๊ณ  ๊ด€๋ฆฌ
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ€ํ•˜ ๊ฐ์†Œ ๋ฐ ์žฌ๊ณ  ๊ด€๋ฆฌ ์„ฑ๋Šฅ ํ–ฅ์ƒ
  • Api Gateway๋ฅผ ํ†ตํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ•
    • ๋‹จ์ผ ์—”๋“œํฌ์ธํ„ฐ ์ œ๊ณต ๋ฐ ํ™•์žฅ์„ฑ ํ–ฅ์ƒ, ์ธ๊ฐ€ ๋ฐ ๊ถŒํ•œ ๊ด€๋ฆฌ
  • Kafka๋ฅผ ํ†ตํ•œ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ•
    • Kafka๋ฅผ ํ†ตํ•ด ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ๋น„๋™๊ธฐ ํ†ต์‹  ๊ตฌํ˜„(๋ฐ์ดํ„ฐ ์กฐ์ž‘ ์ž‘์—…)
  • Redis Replication์„ ํ†ตํ•œ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ
    • ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐœ์„  ๋ฐ ๊ฐ€์šฉ์„ฑ ํ–ฅ์ƒ
  • Open Feign์„ ํ™œ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ 
    • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ๋™๊ธฐ ํ†ต์‹  ๊ตฌํ˜„(๋‹จ์ˆœ ์กฐํšŒ)
  • ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ํ†ตํ•œ ์ฃผ๋ฌธ ๋ฐ ๋ฐฐ์†ก ์ƒํƒœ ๊ด€๋ฆฌ
    • ์ฃผ๊ธฐ์ ์ธ ์ฃผ๋ฌธ ๋ฐ ๋ฐฐ์†ก ์ƒํƒœ ๋ณ€๊ฒฝ
  • ํ•œ์ • ์ˆ˜๋Ÿ‰ ์ƒํ’ˆ ๊ตฌ๋งค ๊ธฐ๋Šฅ
  • JWT๋ฅผ ์‚ฌ์šฉํ•œ ๋กœ๊ทธ์ธ
  • Google SMTP๋ฅผ ์‚ฌ์šฉํ•œ ์ด๋ฉ”์ผ ์ธ์ฆ
  • Spring Security๋ฅผ ์‚ฌ์šฉํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ

๐Ÿ“ˆ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

Redis ์บ์‹œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ƒํ’ˆ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ ๊ฐœ์„ : write-back & Lua script ์‚ฌ์šฉ (โ†—๏ธclick)

  • ์“ฐ๊ธฐ ์ „๋žต: Write-Throw -> Write-Back
  • TPS: 153.1/sec -> 648.1/sec

Kafka ํŠธ๋žœ์žญ์…˜๊ณผ Spring ํŠธ๋žœ์žญ์…˜ ์‹œ์  ์ฐจ์ด๋กœ ์ธํ•œ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ (โ†—๏ธclick)

  • ๋ฌธ์ œ ์ƒํ™ฉ: ํŠธ๋žœ์žญ์…˜ ์„ฑ๊ณต ์—ฌ๋ถ€์™€ ๊ด€๊ณ„์—†์ด ์นดํ”„์นด ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•จ. ์ด๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ๋ฌธ์ œ ์šฐ๋ ค
  • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: Spring์˜ย @TransactionalEventListener์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹ ์ดํ›„์— ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๋„๋ก ๊ตฌํ˜„

Kafka Consumer ๊ทธ๋ฃน ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•œ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์ตœ์ ํ™” (โ†—๏ธclick)

  • ๋ฌธ์ œ ์ƒํ™ฉ: Kafka์—์„œ ๋™์ผํ•œ ๊ทธ๋ฃน ID๋ฅผ ์‚ฌ์šฉํ•˜๋Š” 2๊ฐœ์˜ Consumer๊ฐ€ ํ•˜๋‚˜์˜ ํ† ํ”ฝ์„ ๊ตฌ๋…ํ•  ๋•Œ, ํ•œ ์ปจ์Šˆ๋จธ์—์„œ๋งŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ
  • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: Consumer๋งˆ๋‹ค ๊ณ ์œ ํ•œ ๊ทธ๋ฃน ID๋ฅผ ์ง€์ •ํ•ด ๋…๋ฆฝ์ ์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ตฌํ˜„

Resilience4j๋ฅผ ํ™œ์šฉํ•œ ํšŒ๋ณตํƒ„๋ ฅ์„ฑ ํ–ฅ์ƒ

  • ๋ฌธ์ œ ์ƒํ™ฉ: OpenFeign ํ†ต์‹  ์ค‘ ์žฅ์•  ๋ฐœ์ƒ ์‹œ, ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ์žฅ์• ๊ฐ€ ์ „ํŒŒ๋จ
  • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: Resilience4J์˜ Circuit Breaker ์™€ TimeLimiter ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด ์„œ๋น„์Šค ๊ฐ„ ์žฅ์•  ์ „ํŒŒ ๋ฌธ์ œ ํ•ด๊ฒฐ

Redis Replication์„ ํ†ตํ•œ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ (โ†—๏ธclick)

  • ๋ฌธ์ œ ์ƒํ™ฉ: ๋‹จ์ผ Redis ์ธ์Šคํ„ด์Šค์— ๊ณผ๋„ํ•œ ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐ ๊ฐ€์šฉ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
  • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: Redis Replication์„ ํ†ตํ•ด ๋งˆ์Šคํ„ฐ-์Šฌ๋ ˆ์ด๋ธŒ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ผ์‹œํ‚ด
    • ๋งˆ์Šคํ„ฐ: ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ ์ž‘์—… ๋‹ด๋‹น
    • ์Šฌ๋ ˆ์ด๋ธŒ: ๋งˆ์Šคํ„ฐ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œ๋ฐ›์•„ ์ฝ๊ธฐ ์ž‘์—… ๋‹ด๋‹น

About

๐Ÿฅ Early bird buys quickly.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages