Skip to content
@Backend-System-Design-Lab

Backend System Design Lab

System Design Lab

ใ€Ž๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆใ€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ
๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ๊ณผ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ์ฃผ์š” ์„ค๊ณ„ ๋ฌธ์ œ๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ณ ,
๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ์™€ ๋ฉ”ํŠธ๋ฆญ์„ ํ†ตํ•ด ์„ค๊ณ„ ์„ ํƒ์„ ๊ฒ€์ฆํ•˜๋Š” ํ”„๋กœ์ ํŠธ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค.

๋‹จ์ˆœํžˆ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฐ์„œ ๋๋‚ด์ง€ ์•Š๊ณ , ์ดˆ๊ธฐ ๊ตฌ์กฐ์˜ ๋ณ‘๋ชฉ์„ ์ธก์ •ํ•œ ๋’ค
์บ์‹œ, ๋ฉ”์‹œ์ง€ ํ, ๋ฐ์ดํ„ฐ ๋ถ„ํ• , ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋“ฑ์˜ ์„ค๊ณ„๋ฅผ ์ ์šฉํ•ด ์ „ํ›„ ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

Goals

  • ์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ์„ ํŠธ๋ž˜ํ”ฝ๊ณผ ๋ฐ์ดํ„ฐ ๊ทœ๋ชจ๋กœ ๊ตฌ์ฒดํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์„ค๊ณ„ ์„ ํƒ์˜ ๊ทผ๊ฑฐ์™€ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋ฅผ ๋ฌธ์„œ๋กœ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
  • k6 ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์„ฑ๋Šฅ ๋ณ‘๋ชฉ์„ ์žฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • Prometheus์™€ Grafana๋ฅผ ํ™œ์šฉํ•ด ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ๊ด€์ฐฐํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ์„  ์ „ํ›„์˜ RPS, p95, p99, ์˜ค๋ฅ˜์œจ๊ณผ ์ž์› ์‚ฌ์šฉ๋Ÿ‰์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฉด์ ‘์—์„œ ์„ค๊ณ„ ๊ณผ์ •๊ณผ ์ˆ˜์น˜๋ฅผ ๊ทผ๊ฑฐ๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Projects

Project ํ•ต์‹ฌ ์ฃผ์ œ ์ƒํƒœ Repository
System Design Template ๊ณตํ†ต ์‹คํ–‰ยท๋ถ€ํ•˜ ํ…Œ์ŠคํŠธยท๋ชจ๋‹ˆํ„ฐ๋ง ํ™˜๊ฒฝ ์™„๋ฃŒ Repository
URL Shortener ID ์ƒ์„ฑ, ์บ์‹œ, ์ฝ๊ธฐ ํ™•์žฅ, ๋ฐ์ดํ„ฐ ๋ถ„ํ•  ์˜ˆ์ • -
Notification System ๋ฉ”์‹œ์ง€ ํ, ์žฌ์‹œ๋„, ๋ฉฑ๋“ฑ์„ฑ, ์žฅ์•  ๋ณต๊ตฌ ์˜ˆ์ • -

Common Experiment Process

๋ชจ๋“  ํ”„๋กœ์ ํŠธ๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๋™์ผํ•œ ๊ณผ์ •์œผ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ฌธ์ œ์™€ ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜
  2. ํŠธ๋ž˜ํ”ฝ ๋ฐ ์ €์žฅ ์šฉ๋Ÿ‰ ์‚ฐ์ •
  3. API์™€ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์„ค๊ณ„
  4. ์ดˆ๊ธฐ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„
  5. Baseline ๊ตฌํ˜„
  6. k6 ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ
  7. Prometheus์™€ Grafana๋ฅผ ํ†ตํ•œ ๋ณ‘๋ชฉ ๋ถ„์„
  8. ๊ตฌ์กฐ ๊ฐœ์„ 
  9. ๋™์ผํ•œ ์กฐ๊ฑด์œผ๋กœ ์žฌ์ธก์ •
  10. ๊ฒฐ๊ณผ์™€ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„ ์ •๋ฆฌ

Common Environment

๊ตฌ๋ถ„ ๊ธฐ์ˆ 
Language Java 25
Framework Spring Boot 4
Build Gradle
Container Docker, Docker Compose
Load Test k6
Metrics Spring Boot Actuator, Micrometer
Monitoring Prometheus, Grafana
Automation GitHub Actions

ํ”„๋กœ์ ํŠธ๋ณ„๋กœ ํ•„์š”ํ•œ ๊ธฐ์ˆ ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

MySQL
Redis
Kafka
RabbitMQ
Elasticsearch
Spring Batch

Experiment Metrics

๊ฐ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋‹ค์Œ ์ง€ํ‘œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ฐœ์„  ํšจ๊ณผ๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

  • Requests Per Second
  • p95 ๋ฐ p99 ์‘๋‹ต ์‹œ๊ฐ„
  • HTTP ์˜ค๋ฅ˜์œจ
  • CPU ์‚ฌ์šฉ๋ฅ 
  • JVM Heap ์‚ฌ์šฉ๋Ÿ‰
  • ํ™œ์„ฑ ์Šค๋ ˆ๋“œ ์ˆ˜
  • DB Connection Pool ๋Œ€๊ธฐ ์‹œ๊ฐ„
  • ์บ์‹œ ์ ์ค‘๋ฅ 
  • ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋Ÿ‰๊ณผ ์ง€์—ฐ ์‹œ๊ฐ„

Documentation

๊ฐ Repository์—๋Š” ๋‹ค์Œ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

docs/
โ”œโ”€โ”€ 01-requirements.md
โ”œโ”€โ”€ 02-capacity-estimation.md
โ”œโ”€โ”€ 03-architecture.md
โ”œโ”€โ”€ 04-experiment.md
โ””โ”€โ”€ 05-retrospective.md
๋ฌธ์„œ ๋‚ด์šฉ
Requirements ๊ธฐ๋Šฅยท๋น„๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ํ”„๋กœ์ ํŠธ ๋ฒ”์œ„
Capacity Estimation ํŠธ๋ž˜ํ”ฝ, ์ €์žฅ๋Ÿ‰, ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ๋Ÿ‰ ์‚ฐ์ •
Architecture ๊ตฌ์„ฑ ์š”์†Œ, ๋ฐ์ดํ„ฐ ํ๋ฆ„, ์„ค๊ณ„ ๊ฒฐ์ •
Experiment ๊ฐ€์„ค, ํ…Œ์ŠคํŠธ ์กฐ๊ฑด, ๊ฐœ์„  ์ „ํ›„ ๊ฒฐ๊ณผ
Retrospective ํ•œ๊ณ„, ํŠธ๋ ˆ์ด๋“œ์˜คํ”„, ๋ฉด์ ‘ ์˜ˆ์ƒ ์งˆ๋ฌธ

Project Principles

  • ๊ธฐ์ˆ ์„ ๋จผ์ € ์„ ํƒํ•˜์ง€ ์•Š๊ณ  ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ๋ณ‘๋ชฉ์„ ๊ธฐ์ค€์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ์„  ์ „ํ›„์—๋Š” ๋™์ผํ•œ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„๋งŒ์ด ์•„๋‹ˆ๋ผ p95์™€ p99๋ฅผ ํ•จ๊ป˜ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์„ฑ๋Šฅ ํ–ฅ์ƒ๋ฟ ์•„๋‹ˆ๋ผ ์ •ํ•ฉ์„ฑ, ์žฅ์•  ๋ณต๊ตฌ, ์šด์˜ ๋ณต์žก๋„๋ฅผ ํ•จ๊ป˜ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.
  • ๋กœ์ปฌ ์‹คํ—˜ ๊ฒฐ๊ณผ์™€ ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์˜ ์ฐจ์ด๋ฅผ ๋ช…ํ™•ํžˆ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

Popular repositories Loading

  1. .github .github Public

  2. System-Design-Template System-Design-Template Public template

    Shell

  3. 01-URL-Shortener 01-URL-Shortener Public

    URL ๋‹จ์ถ•๊ธฐ์˜ ์ฝ”๋“œ ์ƒ์„ฑ, ์บ์‹œ, ํ™•์žฅ ์ „๋žต์„ ๊ตฌํ˜„ํ•˜๊ณ  ๋™์ผํ•œ ๋ถ€ํ•˜ ์กฐ๊ฑด์—์„œ ๋น„๊ตํ•˜๋Š” ์‹œ์Šคํ…œ ์„ค๊ณ„ ์‹คํ—˜

    Java

Repositories

Showing 3 of 3 repositories

Top languages

Loadingโ€ฆ

Most used topics

Loadingโ€ฆ