Skip to content

NohYeongO/e-commerce

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

88 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“¦ e-commerce ν”„λ‘œμ νŠΈ

ν•­ν•΄ ν”ŒλŸ¬μŠ€ λ°±μ—”λ“œ κ³Όμ • 쀑 μ§„ν–‰ν•œ 1인 λ°±μ—”λ“œ ν”„λ‘œμ νŠΈλ‘œ, μ „μžμƒκ±°λž˜ μ‹œμŠ€ν…œ(e-commerce)μ—μ„œ 자주 μ‚¬μš©λ˜λŠ” κΈ°λŠ₯듀을 κ΅¬ν˜„ν•œ ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€.
μ„±λŠ₯ μ΅œμ ν™”μ™€ λ™μ‹œμ„± μ œμ–΄μ— λŒ€ν•œ μ•ˆμ •μ„± 확보λ₯Ό λͺ©ν‘œλ‘œ 섀계 및 κ°œλ°œν–ˆμœΌλ©°, λ°±μ—”λ“œ μ „λ°˜μ— λŒ€ν•œ 이해λ₯Ό 깊이 있게 λ‹€μ§€λŠ” 데 쀑점을 λ‘μ—ˆμŠ΅λ‹ˆλ‹€.


πŸ“Œ μ£Όμš” λͺ©ν‘œ

  • Redis 기반 캐싱과 락 λ©”μ»€λ‹ˆμ¦˜μ„ ν™œμš©ν•΄ λ™μ‹œμ„± 문제 ν•΄κ²°.
  • K6, Grafana, InfluxDBλ₯Ό μ‚¬μš©ν•œ μ„±λŠ₯ ν…ŒμŠ€νŠΈ 및 μ‹€μ‹œκ°„ 뢄석.
  • Testcontainersλ₯Ό ν™œμš©ν•œ μ»¨ν…Œμ΄λ„ˆ 기반 ν…ŒμŠ€νŠΈ ν™˜κ²½ ꡬ좕.

πŸ›  μ‚¬μš© 도ꡬ (Tools)

Language & Framework Database & Cache Monitoring & Metrics Testing Build Tools API Documentation
Java Spring Boot MySQL Redis Grafana InfluxDB JUnit Testcontainers Gradle Spring Swagger

✨ μ£Όμš” ν™œμš© 기술

  1. Swaggerλ₯Ό μ‚¬μš©ν•œ Mock API κ΅¬ν˜„

    • Swagger UI 기반 API λ¬Έμ„œν™”λ₯Ό μžλ™ν™”ν•˜κ³ , Mock APIλ₯Ό μ œκ³΅ν•˜μ—¬ λΉ λ₯Έ 개발 및 ν…ŒμŠ€νŠΈ 지원.
  2. JUnit을 ν™œμš©ν•œ λ‹¨μœ„ 및 톡합 ν…ŒμŠ€νŠΈ

    • JUnit 5λ₯Ό μ‚¬μš©ν•΄ μ£Όμš” λΉ„μ¦ˆλ‹ˆμŠ€ 둜직의 λ‹¨μœ„ ν…ŒμŠ€νŠΈ(Unit Test)와 μ‹œμŠ€ν…œ μ „λ°˜μ˜ 톡합 ν…ŒμŠ€νŠΈ(Integration Test)λ₯Ό κ΅¬ν˜„.
    • Testcontainers둜 MySQLκ³Ό Redis의 μ‹€μ œ μ»¨ν…Œμ΄λ„ˆ ν™˜κ²½μ„ κ΅¬μ„±ν•˜μ—¬ 높은 신뒰성을 보μž₯.
  3. Redisλ₯Ό ν™œμš©ν•œ 캐싱과 λΆ„μ‚° 락 적용

    • Redisλ₯Ό ν™œμš©ν•˜μ—¬ μ£Όλ¬Έ λ‚΄μ—­κ³Ό μž₯λ°”κ΅¬λ‹ˆ 데이터λ₯Ό 캐싱해 쑰회 μ„±λŠ₯을 μ•½ 50% 이상 κ°œμ„ .
  4. K6, Grafana, InfluxDBλ₯Ό ν™œμš©ν•œ μ„±λŠ₯ μ‹œκ°ν™”

    • API의 λΆ€ν•˜ ν…ŒμŠ€νŠΈλ₯Ό 톡해 처리 속도와 νŠΈλž˜ν”½ ν•œκ³„λ₯Ό νŒŒμ•…ν•˜κ³ , 병λͺ© ꡬ간을 ν•΄κ²°.
    • λΆ€ν•˜ ν…ŒμŠ€νŠΈ κ²°κ³Όλ₯Ό Grafana둜 μ‹œκ°ν™”ν•˜μ—¬ TPS, 응닡 μ‹œκ°„, μ‹œμŠ€ν…œμ˜ μ•ˆμ •μ„±μ„ μ§€μ†μ μœΌλ‘œ λͺ¨λ‹ˆν„°λ§.

πŸ“ ν”„λ‘œμ νŠΈλ₯Ό 톡해 μ‹œλ„ν•œ 것과 배운 점

πŸ”§ 섀계

μ΄ˆκΈ°μ—λŠ” ERD와 API λͺ…μ„Έμ„œλ₯Ό 직접 μ„€κ³„ν•˜λ©° λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ κ΅¬μ‘°ν™”ν•˜λ €κ³  ν–ˆμŠ΅λ‹ˆλ‹€.
데이터 κ°„ 관계와 API 호좜 ꡬ쑰λ₯Ό λͺ…ν™•νžˆ μ •μ˜ν•¨μœΌλ‘œμ¨ μ‹€μ œ ν˜‘μ—… 상황을 κ°€μ •ν•œ 섀계 μ—­λŸ‰μ„ ν‚€μš°λŠ” 데 μ§‘μ€‘ν•˜κ³ μž ν–ˆμŠ΅λ‹ˆλ‹€.
μ§„ν–‰ κ³Όμ •μ—μ„œ λ™μ‹œμ„± μ œμ–΄, 락 λ©”μ»€λ‹ˆμ¦˜ λ“± λ―Έμˆ™ν•œ 뢀뢄이 λ§Žμ•˜κ³ , 그둜 인해 μ΄ˆκΈ°μ— 섀계해둔 μ‹œν€€μŠ€ λ‹€μ΄μ–΄κ·Έλž¨κ³Ό ERDλ₯Ό μˆ˜μ •ν•΄μ•Όν•˜λŠ” κ²½μš°κ°€ λ§Žμ•˜μ§€λ§Œ, 이 κ²½ν—˜μ„ 톡해 초기 기획의 μ€‘μš”μ„±κ³Ό 개발자의 도메인 지식과 기술적인 지식이 μ–Όλ§ˆλ‚˜ μ€‘μš”ν•œμ§€λ₯Ό 깨달을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

πŸ”— 초기 μ‹œν€€μŠ€ λ‹€μ΄μ–΄κ·Έλž¨ 보기

πŸ”— 초기 ERD 섀계 보기


βš™οΈ λ™μ‹œμ„± μ œμ–΄

μƒν’ˆ μ£Όλ¬Έ μ‹œ 재고 차감과 같이 λ™μ‹œμ„±μ΄ μ€‘μš”ν•œ μ˜μ—­μ—μ„œ 데이터 정합성을 보μž₯ν•˜κΈ° μœ„ν•΄ 비관적 락(Pessimistic Lock)을 λ„μž…ν–ˆμŠ΅λ‹ˆλ‹€.
낙관적 락도 κ³ λ €ν–ˆμ§€λ§Œ, 좩돌 κ°€λŠ₯성이 높은 κΈ°λŠ₯이라고 νŒλ‹¨ν•˜μ—¬ 더 μ•ˆμ •μ μΈ 처리λ₯Ό μœ„ν•΄ 비관적 락을 μ„ νƒν–ˆμŠ΅λ‹ˆλ‹€. 이 κ³Όμ •μ—μ„œ 락 μ’…λ₯˜μ— λŒ€ν•œ 이해뿐 μ•„λ‹ˆλΌ, λ°λ“œλ½ ν…ŒμŠ€νŠΈμ™€ ν•΄κ²° κ²½ν—˜μ„ 톡해 싀무적인 λ™μ‹œμ„± 섀계 μ—­λŸ‰μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

πŸ”— λ™μ‹œμ„± μ œμ–΄ 방식 ν•™μŠ΅

πŸ”— λ°λ“œλ½ ν…ŒμŠ€νŠΈ 및 λΆ„μ‚° 락 κ΅¬ν˜„


πŸ§ͺ ν…ŒμŠ€νŠΈ ν™˜κ²½ ꡬ성

μ΄ˆκΈ°μ—λŠ” 둜컬 ν™˜κ²½μ— 맞좰 ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν–ˆκΈ° λ•Œλ¬Έμ—,
κΉƒν—ˆλΈŒμ—μ„œ μ½”λ“œλ₯Ό ν΄λ‘ ν•œ λ’€ ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λ©΄ ν™˜κ²½ 차이둜 인해 ν…ŒμŠ€νŠΈμ˜ 신뒰성을 ν™•λ³΄ν•˜κΈ° μ–΄λ €μš΄ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.
이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄, λ‹€μ–‘ν•œ ν™˜κ²½μ—μ„œλ„ μΌκ΄€λœ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•  수 μžˆλ„λ‘ Testcontainersλ₯Ό λ„μž…ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
JUnit 기반의 λ‹¨μœ„ ν…ŒμŠ€νŠΈ 및 톡합 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κ³ , MySQLκ³Ό Redisλ₯Ό Docker μ»¨ν…Œμ΄λ„ˆλ‘œ κ΅¬μ„±ν•˜μ—¬ 운영 ν™˜κ²½κ³Ό μœ μ‚¬ν•œ μ‘°κ±΄μ—μ„œ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•  수 μžˆλ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

κ·Έ κ²°κ³Ό,

  • ν…ŒμŠ€νŠΈ κ°„ ν™˜κ²½ μ˜μ‘΄μ„±μ„ μ œκ±°ν•˜κ³ ,
  • μ„€μ • λˆ„λ½ 및 ν™˜κ²½ 차이둜 μΈν•œ 였λ₯˜λ₯Ό λ°©μ§€ν•  수 μžˆμ—ˆμœΌλ©°,
  • κΈ°λŠ₯ λ‹¨μœ„μ˜ ν…ŒμŠ€νŠΈλ₯Ό 톡해 λ³€κ²½ 사항이 κΈ°μ‘΄ λ‘œμ§μ— λ―ΈμΉ˜λŠ” 영ν–₯을 μ¦‰μ‹œ 검증할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
    μ΄λŸ¬ν•œ ν…ŒμŠ€νŠΈ ν™˜κ²½μ„ 기반으둜, 보닀 신뒰도 높은 ν…ŒμŠ€νŠΈ μˆ˜ν–‰κ³Ό μ•ˆμ •μ μΈ 개발 ν”„λ‘œμ„ΈμŠ€λ₯Ό μœ μ§€ν•  수 μžˆλŠ” ν™˜κ²½μ„ ꡬ좕 ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

πŸ”— ν…ŒμŠ€νŠΈ μ»¨ν…Œμ΄λ„ˆ μ„€μ • 및 회고


πŸ“Š μ„±λŠ₯ ν…ŒμŠ€νŠΈμ™€ μ‹œκ°ν™”

K6λ₯Ό ν™œμš©ν•˜μ—¬ μ‹œλ‚˜λ¦¬μ˜€ 기반의 API λΆ€ν•˜ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κ³ ,
InfluxDB와 Grafanaλ₯Ό μ—°λ™ν•˜μ—¬ μ‹€μ‹œκ°„ μ„±λŠ₯ μ§€ν‘œλ₯Ό μ‹œκ°ν™”ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
이λ₯Ό 톡해 μ‹€μ œ μ‚¬μš©μžκ°€ μ—†λŠ” μƒν™©μ—μ„œλ„ λŒ€λŸ‰μ˜ νŠΈλž˜ν”½ μœ μž…μ„ κ°€μ •ν•œ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•  수 μžˆμ—ˆκ³ ,
API 병λͺ© ꡬ간을 μ‹œκ°μ μœΌλ‘œ νŒŒμ•…ν•˜κ³ , μ •λŸ‰μ μΈ μ§€ν‘œλ₯Ό 기반으둜 뢄석할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
λ˜ν•œ, ν…ŒμŠ€νŠΈ κ²°κ³Όλ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ λͺ¨λ‹ˆν„°λ§ν•˜λ©΄μ„œ
μ •μƒμ μœΌλ‘œ μ²˜λ¦¬λ˜λŠ” μš”μ²­κ³Ό μ§€μ—°/μ‹€νŒ¨ ꡬ간을 κ΅¬λΆ„ν•˜μ—¬ 뢄석할 수 μžˆλŠ” ν™˜κ²½μ„ κ΅¬μΆ•ν•˜μ˜€κ³ ,
이λ₯Ό 톡해 ν–₯ν›„ μ‹€ μ„œλΉ„μŠ€μ—μ„œλ„ λͺ¨λ‹ˆν„°λ§ μ‹œμŠ€ν…œμ„ 직접 ꡬ좕할 수 μžˆλ‹€λŠ” μžμ‹ κ°μ„ μ–»λŠ” 계기가 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

πŸ”— 캐싱 μ „λž΅ κ΅¬ν˜„

πŸ”— λΆ€ν•˜ ν…ŒμŠ€νŠΈ μ‹œλ‚˜λ¦¬μ˜€

πŸ”— λΆ€ν•˜ ν…ŒμŠ€νŠΈ μ‹œκ°ν™”


🎯 ν”„λ‘œμ νŠΈ 마무리

  • 섀계 초기 λ‹¨κ³„μ˜ 미흑함이 μ–Όλ§ˆλ‚˜ λ§Žμ€ μˆ˜μ • λΉ„μš©μ„ λ°œμƒμ‹œν‚€λŠ”μ§€λ₯Ό μ²΄κ°ν–ˆκ³ , 기획과 μ„€κ³„μ˜ μ€‘μš”μ„±μ„ λ‹€μ‹œ ν•œ 번 확인할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
  • λ™μ‹œμ„±κ³Ό 락 λ©”μ»€λ‹ˆμ¦˜ λ“± μ‹€λ¬΄μ—μ„œ 자주 마주칠 수 μžˆλŠ” 상황에 λŒ€ν•œ κ²½ν—˜κ³Ό ν•™μŠ΅μ„ ν•  수 μžˆμ—ˆκ³ , Redis, μ„±λŠ₯ ν…ŒμŠ€νŠΈ λͺ¨λ‹ˆν„°λ§ 도ꡬ듀에 λŒ€ν•œ μ‹€μ „ 감각도 ν‚€μšΈ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
  • λ‹¨μˆœνžˆ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” μˆ˜μ€€μ„ λ„˜μ–΄, 전체 μ‹œμŠ€ν…œ ꡬ쑰λ₯Ό μ΄ν•΄ν•˜κ³  섀계할 수 μžˆλŠ” μ‹œμ•Όλ₯Ό λ„“νžˆλŠ” 데 큰 도움이 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

About

πŸ€ 1인 λ°±μ—”λ“œ ν”„λ‘œμ νŠΈ (e-commerce)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published