Skip to content

Repository files navigation

E-Commerce (Java Backend)

Java Spring Boot 기반 μ „μžμƒκ±°λž˜ λ°±μ—”λ“œ μ„œλΉ„μŠ€.
μ‚¬μš©μž, μƒν’ˆ, 쿠폰, μž”μ•‘, 주문을 μ€‘μ‹¬μœΌλ‘œ 도메인 주도 섀계(DDD)와 κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜λ₯Ό μ μš©ν•œ ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€.
λ™μ‹œμ„± μ œμ–΄, 이벀트 기반 처리, Redis/Kafka ν™œμš©, μ„±λŠ₯ ν…ŒμŠ€νŠΈ λ“± μ‹€λ¬΄ν˜• μ•„ν‚€ν…μ²˜ ν•™μŠ΅μ— 쀑점을 λ‘μ—ˆμŠ΅λ‹ˆλ‹€.


λͺ©μ°¨


ν”„λ‘œμ νŠΈ κ°œμš”

E-Commerce Java λ°±μ—”λ“œ μ„œλΉ„μŠ€λŠ” λ‹€μŒ κΈ°λŠ₯듀을 μ œκ³΅ν•©λ‹ˆλ‹€:

  • μ‚¬μš©μž 쑰회 및 관리
  • μž”μ•‘(Balance) 쑰회, μΆ©μ „, μ‚¬μš©
  • μƒν’ˆ(Product) 쑰회, 톡계
  • 쿠폰(Coupon) λ°œκΈ‰ / μ‚¬μš© / μ •μ±… 검증
  • μ£Όλ¬Έ(Order) 처리: μƒν’ˆ 재고 μ˜ˆμ•½, 쿠폰 할인, μž”μ•‘ μ‚¬μš©, μ£Όλ¬Έ μ™„λ£Œ 이벀트 λ°œν–‰

μ£Όμš” μš”κ΅¬μ‚¬ν•­μœΌλ‘œλŠ” 도메인 κ°„ μ±…μž„ 뢄리, 계측 κ°„ μ˜μ‘΄μ„± μ΅œμ†Œν™”, **λ³΅μž‘ν•œ 흐름(예: μ£Όλ¬Έ)**의 λͺ…ν™•ν•œ 쑰율(Facade 계측) 등이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.


μ•„ν‚€ν…μ²˜ 및 섀계

계측 ꡬ쑰 (Layered Architecture)

Controller β†’ (Facade) β†’ Service β†’ Domain / Repository
  • Controller: HTTP μš”μ²­/응닡, DTO λ³€ν™˜, API λͺ…μ„Έ
  • Facade: μ—¬λŸ¬ Serviceλ₯Ό μ‘°ν•©ν•΄ 볡합 흐름(complex business logic) 처리
  • Service: 단일 λ„λ©”μΈμ˜ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
  • Domain / Repository: Entity μ •μ˜, DB μ ‘κ·Ό (JPA 기반)

νŒ¨ν‚€μ§€ ꡬ쑰와 μ±…μž„ 뢄리

각 도메인(User, Product, Coupon, Order, Balance λ“±)에 λŒ€ν•΄ λ‹€μŒκ³Ό 같이 계측이 λΆ„λ¦¬λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€:

  • controller: μš”μ²­/응닡 μ±…μž„
  • facade: 쑰율자 μ—­ν• , μ—¬λŸ¬ Service κ°„ 흐름 μ œμ–΄
  • application (Service): 도메인 λ‹¨μœ„ κΈ°λŠ₯
  • domain: Entity, Repository, μƒνƒœ, λ‚΄λΆ€ 둜직
  • exception: 도메인/계측별 μ˜ˆμ™Έ μ •μ˜
  • dto/common, common: 곡톡 DTO, μ—λŸ¬ 핸듀링 λ“±

볡합 도메인 vs λ‹¨μˆœ 도메인 처리 흐름

도메인 μœ ν˜• 흐름 μ˜ˆμ‹œ
λ‹¨μˆœ 도메인 Product β†’ ProductController β†’ ProductService β†’ ProductRepository
볡합 도메인 Order 도메인: OrderController β†’ OrderFacade β†’ (UserService, ProductService, CouponService, BalanceService, OrderService) β†’ 각 Repository

볡합 λ„λ©”μΈμ˜ 흐름은 νŠΈλžœμž­μ…˜ 경계 및 μ˜ˆμ™Έ 처리 등이 λ³΅μž‘ν•˜λ―€λ‘œ, Facade κ³„μΈ΅μ—μ„œ μ±…μž„μ„ μ€‘μ‹¬ν™”ν•˜μ—¬ μœ μ§€λ³΄μˆ˜μ„±κ³Ό ν™•μž₯성을 ν™•λ³΄ν•˜κ³  있음.


도메인 μ£Όμš” κ°œλ…

μ•„λž˜λŠ” 각 λ„λ©”μΈμ˜ 핡심 μ—­ν• κ³Ό 였브젝트 관계/μƒν˜Έμž‘μš© μ •λ¦¬μž…λ‹ˆλ‹€.

User / Balance

  • μ‚¬μš©μž(User)λŠ” μž”μ•‘(Balance)을 가짐
  • μž”μ•‘ μΆ©μ „ 및 차감 κΈ°λŠ₯
  • μž”μ•‘ λΆ€μ‘± μ‹œ μ˜ˆμ™Έ 처리 (InsufficientBalanceException)

Product

  • μƒν’ˆ 정보(Product), 가격, 재고(stock)
  • μƒν’ˆ 쑰회, 재고 관리
  • μƒν’ˆμ΄ μ‘΄μž¬ν•˜μ§€ μ•Šκ±°λ‚˜ 재고 λΆ€μ‘± μ‹œ μ˜ˆμ™Έ 처리 (ProductNotFoundException λ“±)

Coupon

  • 쿠폰 μ •μ±…(CouponPolicy) μ •μ˜
  • 쿠폰 μ‚¬μš© μœ νš¨μ„± 체크 (κΈ°κ°„, μ†Œμ§„ μ—¬λΆ€ λ“±)
  • μ‚¬μš©μžβ€μΏ ν° μ—°κ΄€ 관리

Order

  • μ£Όλ¬Έ 생성 흐름:

    1. μ‚¬μš©μž 쑰회
    2. μƒν’ˆ 재고 μ˜ˆμ•½ (ProductService)
    3. μ£Όλ¬Έ μ•„μ΄ν…œ 생성
    4. μ£Όλ¬Έ κΈˆμ•‘ ν•©μ‚°
    5. 쿠폰 할인 계산
    6. μž”μ•‘ μ‚¬μš© 검사 및 차감
    7. μ£Όλ¬Έ λ ˆμ½”λ“œ 생성
    8. μ£Όλ¬Έ μ™„λ£Œ 이벀트 λ°œν–‰
  • OrderItem, OrderStatus λ“±μ˜ μƒνƒœ μ •μ˜

  • μ£Όλ¬Έ μ‹€νŒ¨ μ‹œ νŠΈλžœμž­μ…˜ λ‘€λ°± 보μž₯됨 (예: 재고 μ˜ˆμ•½ μ‹€νŒ¨, μž”μ•‘ λΆ€μ‘± λ“±)


디렉터리 ꡬ쑰

μ•„λž˜λŠ” μ£Όμš” 디렉터리 ꡬ쑰 (src/main/java κΈ°μ€€) μš”μ•½:

kr.hhplus.be.server
β”œβ”€β”€ balance
β”‚   β”œβ”€β”€ application / BalanceService
β”‚   β”œβ”€β”€ controller / BalanceController, DTO
β”‚   β”œβ”€β”€ domain / Balance, BalanceHistory, Repository
β”‚   └── facade / BalanceFacade
β”œβ”€β”€ coupon
β”‚   β”œβ”€β”€ application / CouponService
β”‚   β”œβ”€β”€ controller / CouponController, DTO
β”‚   β”œβ”€β”€ domain / Coupon, Policy, Repository
β”‚   └── facade / CouponFacade
β”œβ”€β”€ order
β”‚   β”œβ”€β”€ application / OrderService
β”‚   β”œβ”€β”€ controller / OrderController, DTO
β”‚   β”œβ”€β”€ domain / Order, OrderItem, Repository
β”‚   └── facade / OrderFacade + Command/Mapper
β”œβ”€β”€ product
β”‚   β”œβ”€β”€ application / ProductService
β”‚   β”œβ”€β”€ controller / ProductController, DTOs, Statistics API
β”‚   β”œβ”€β”€ domain / Product, Repository
β”‚   └── exception
β”œβ”€β”€ user
β”‚   β”œβ”€β”€ application / UserService
β”‚   β”œβ”€β”€ controller / (UserController)
β”‚   β”œβ”€β”€ domain / User, Repository
β”‚   └── exception
β”œβ”€β”€ common
β”‚   β”œβ”€β”€ dto / μ—λŸ¬ 응닡 λ“± 곡톡 DTO
β”‚   └── exception / GlobalExceptionHandler λ“±
└── config / Swagger, JPA λ“± μ„€μ •

μΆ”κ°€λ‘œ, docker-compose.yml, docker-compose-redis.yml, docker-compose-kafka.yml 등이 μžˆμ–΄ 개발/둜컬 ν™˜κ²½ ꡬ성 지원됨.


ν…ŒμŠ€νŠΈ ꡬ쑰

  • λ‹¨μœ„ ν…ŒμŠ€νŠΈ(Unit Tests): 각 Service, Domain κΈ°λŠ₯ 별 ν…ŒμŠ€νŠΈ
  • 톡합 ν…ŒμŠ€νŠΈ(Integration Tests): DB 연동, Repository λ™μž‘, Facade 흐름 등이 포함됨
  • ν…ŒμŠ€νŠΈ 컀버리지 확보가 λ‚˜μœ 뢀뢄이 μžˆλ‹€λ©΄ 보강 κ°€λŠ₯

ν…ŒμŠ€νŠΈ 예:

  • ProductServiceTest.java
  • OrderControllerTest.java
  • BalanceRepositoryIntegrationTest.java λ“±

ν™˜κ²½ μ„€μ • 및 μ‹€ν–‰ 방법

μ•„λž˜λŠ” 둜컬 개발 ν™˜κ²½μ—μ„œ ν”„λ‘œμ νŠΈλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•œ κΈ°λ³Έ μ•ˆλ‚΄μž…λ‹ˆλ‹€. μ‹€μ œ ν™˜κ²½μ— 따라 ν™˜κ²½ λ³€μˆ˜λ‚˜ 섀정이 λ‹€λ₯Ό 수 μžˆμœΌλ―€λ‘œ μ°Έκ³ μš©μž…λ‹ˆλ‹€.

μš”κ΅¬μ‚¬ν•­

  • JDK (μ΅œμ‹  버전 ꢌμž₯, 예: Java 17 이상)
  • Gradle (wrapper 제곡됨)
  • Docker & Docker Compose (Redis, Kafka λ“± 도컀 μ„œλΉ„μŠ€ ν•„μš” μ‹œ)
  • λ°μ΄ν„°λ² μ΄μŠ€ (예: MySQL, PostgreSQL λ“±), ν˜Ήμ€ λ‚΄μž₯ DB μ„€μ •

μ‹€ν–‰ 단계

  1. μ½”λ“œ 클둠:

    git clone https://github.com/hanghae-plus-anveloper/e-commerce.git
    cd e-commerce
  2. ν™˜κ²½ 파일 μ„€μ •:

    • application.yml λ˜λŠ” μ μ ˆν•œ ν™˜κ²½ μ„€μ • νŒŒμΌμ— DB 접속 정보, Redis/Kafka μ„€μ • 등을 μž…λ ₯
    • ν•„μš” μ‹œ .env 파일 λ˜λŠ” ν™˜κ²½ λ³€μˆ˜ μ‚¬μš©
  3. 도컀 μ„œλΉ„μŠ€ μ‹œμž‘ (μ˜΅μ…˜):

    docker-compose up -d
    # λ˜λŠ”
    docker-compose -f docker-compose-redis.yml -f docker-compose-kafka.yml up -d    
  4. λΉŒλ“œ & μ‹€ν–‰:

    ./gradlew clean build
    ./gradlew bootRun
  5. API λ¬Έμ„œ 확인:

    Swagger 섀정이 μžˆμœΌλ―€λ‘œ http://localhost:8080/swagger-ui.html λ˜λŠ” ν•΄λ‹Ή μ—”λ“œν¬μΈνŠΈμ—μ„œ λ¬Έμ„œ 확인 κ°€λŠ₯


μΆ”κ°€ λ¬Έμ„œ

About

πŸ›οΈ Java 기반 μ „μžμƒκ±°λž˜ λ°±μ—”λ“œ μ„œλΉ„μŠ€

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages