Home > Backend Development > πŸ“š[Backend Development] πŸ—ΊοΈ 핡심 μ„€κ³„λ„μ˜ μž‘μ„±κ³Ό μž‘μ—… 흐름.

πŸ“š[Backend Development] πŸ—ΊοΈ 핡심 μ„€κ³„λ„μ˜ μž‘μ„±κ³Ό μž‘μ—… 흐름.
Backend Ddevelopment κΈ°νšμ„œ μš”κ΅¬μ‚¬ν•­ λͺ…μ„Έμ„œ μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜ μ„€κ³„μ„œ λ°μ΄ν„°λ² μ΄μŠ€ μ„€κ³„μ„œ μ„€κ³„μ„œ

πŸ—ΊοΈ 핡심 μ„€κ³„λ„μ˜ μž‘μ„±κ³Ό μž‘μ—… 흐름.

μ‹€μ œ μ§„ν–‰ 쀑인 ν”„λ‘œμ νŠΈλ₯Ό 기반으둜 ν•˜μ—¬ μ• μžμΌ(Agile)ν•œ μ ‘κ·Ό λ°©μ‹μœΌλ‘œ μ„Έ κ°€μ§€ 섀계λ₯Ό 해보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.

μ²˜μŒλΆ€ν„° λͺ¨λ“  κΈ°λŠ₯을 μ™„λ²½ν•˜κ²Œ μ„€κ³„ν•˜λŠ” λŒ€μ‹ , κ°€μž₯ 핡심적인 1단계(Iteration 1) λ₯Ό λ¨Όμ € μ •μ˜ν•˜κ³ , 이λ₯Ό λ°”νƒ•μœΌλ‘œ μ μ§„μ μœΌλ‘œ ν™•μž₯ν•΄ λ‚˜κ°€λŠ” λ°©μ‹μœΌλ‘œ μ„€κ³„ν•˜κ² μŠ΅λ‹ˆλ‹€.

πŸ“Œ 1단계 (Iteration 1): 핡심 κΈ°λŠ₯ - μ£Όλ¬Έ λͺ©λ‘ 쑰회 및 μƒνƒœ λ³€κ²½

κ°€μž₯ λ¨Όμ € ν•„μš”ν•œ μ΅œμ†Œ κΈ°λŠ₯은 β€œλ“€μ–΄μ˜¨ 주문을 ν™•μΈν•˜κ³ , 배솑 μƒνƒœλ₯Ό β€˜κ²°μ œμ™„λ£Œβ€™μ—μ„œ β€˜λ°°μ†‘μ€‘β€™μœΌλ‘œ λ°”κΎΈλŠ” 것” μž…λ‹ˆλ‹€.

  • μš”κ΅¬μ‚¬ν•­ (MVP) :
    • κ΄€λ¦¬μžλŠ” μ‹œμŠ€ν…œμ— λ“€μ–΄μ˜¨ λͺ¨λ“  주문의 λͺ©λ‘μ„ μ΅œμ‹ μˆœμœΌλ‘œ μ‘°νšŒν•  수 μžˆλ‹€.
    • κ΄€λ¦¬μžλŠ” νŠΉμ • 주문의 배솑 μƒνƒœλ₯Ό λ³€κ²½ν•  수 μžˆλ‹€. (예: κ²°μ œμ™„λ£Œ -> 배솑쀑)
  • μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜ (λ‹¨μˆœν•˜κ³  λͺ…ν™•ν•˜κ²Œ) :
    • μƒˆλ‘œμš΄ Controller/Service μΆ”κ°€ :
      • κΈ°μ‘΄ μ•„ν‚€ν…μ²˜λ₯Ό κ·ΈλŒ€λ‘œ ν™œμš©ν•˜μ—¬ OrderAdminController와 OrderServiceλ₯Ό μƒˆλ‘œ μΆ”κ°€ν•©λ‹ˆλ‹€.
      • λ³΅μž‘ν•œ μ™ΈλΆ€ μ‹œμŠ€ν…œ 연동 없이, λ‚΄λΆ€μ μœΌλ‘œ 처리 κ°€λŠ₯ν•œ κ°„λ‹¨ν•œ CRUD ꡬ쑰둜 μ‹œμž‘ν•©λ‹ˆλ‹€.
    • API Endpoints μ •μ˜ :
      • GET /api/admin/orders : 전체 μ£Όλ¬Έ λͺ©λ‘ 쑰회
      • PATCH /api/admin/orders/{orderId}/status : νŠΉμ • 주문의 μƒνƒœ λ³€κ²½
  • λ°μ΄ν„°λ² μ΄μŠ€ 섀계 (핡심 데이터뢀터) :
    • μƒˆλ‘œμš΄ ORDERS 와 ORDER_ITEM 두 개의 ν…Œμ΄λΈ”μ„ μ„€κ³„ν•©λ‹ˆλ‹€.
      • ORDERS ν…Œμ΄λΈ” : νšŒμ›(MEMBER) 이 μ–Έμ œ μ£Όλ¬Έν–ˆλŠ”μ§€, ν˜„μž¬ 배솑 μƒνƒœλŠ” 무엇인지λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
      • ORDER_ITEM ν…Œμ΄λΈ” : ν•΄λ‹Ή 주문에 μ–΄λ–€ μƒν’ˆ(PRODUCT) 이 λͺ‡ 개, μ–Όλ§ˆμ— ν¬ν•¨λ˜μ—ˆλŠ”μ§€λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.(ORDER와 PRODUCT의 M:N 관계λ₯Ό ν•΄μ†Œν•˜λŠ” 쀑간 ν…Œμ΄λΈ”)

πŸ“Œ 2단계 (Iteration 2): κΈ°λŠ₯ ν™•μž₯ - 검색 및 상세 쑰회

핡심 κΈ°λŠ₯이 μ™„μ„±λ˜λ©΄, 이제 κ΄€λ¦¬μ˜ νŽΈμ˜μ„±μ„ λ†’μ΄λŠ” κΈ°λŠ₯을 μΆ”κ°€ν•©λ‹ˆλ‹€.

  • μš”κ΅¬μ‚¬ν•­ (κΈ°λŠ₯ ν™•μž₯) :
    • μ£Όλ¬Έ λͺ©λ‘μ—μ„œ νŠΉμ • 쑰건(μ£Όλ¬Έ μƒνƒœ, νšŒμ› 이름, μ£Όλ¬Έ λ‚ μ§œ λ“±)으둜 κ²€μƒ‰ν•˜λŠ” κΈ°λŠ₯을 μΆ”κ°€ν•©λ‹ˆλ‹€.
    • μ£Όλ¬Έ λͺ©λ‘μ˜ 각 ν•­λͺ©μ„ ν΄λ¦­ν•˜λ©΄, ν•΄λ‹Ή 주문에 ν¬ν•¨λœ μƒν’ˆ λͺ©λ‘κ³Ό 배솑지 정보 λ“± 상세 내역을 μ‘°νšŒν•˜λŠ” κΈ°λŠ₯을 μΆ”κ°€ν•©λ‹ˆλ‹€.
  • μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜ (κΈ°μ‘΄ ꡬ쑰 κ°•ν™”) :
    • GET /api/admin/orders APIκ°€ Query Parameter λ₯Ό 받을 수 μžˆλ„λ‘ ν™•μž₯ν•©λ‹ˆλ‹€.
      • 예: ?status=SHIPPING&memberName=홍길동
    • Service 계측에 JPA의 Specification μ΄λ‚˜ QueryDSL을 λ„μž…ν•˜μ—¬ 동적 쿼리 생성 λ‘œμ§μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.
  • λ°μ΄ν„°λ² μ΄μŠ€ 섀계 (μ„±λŠ₯ μ΅œμ ν™”) :
    • 검색 쑰건으둜 자주 μ‚¬μš©λ  ORDERS ν…Œμ΄λΈ”μ˜ status, order_date μ»¬λŸΌμ— 인덱슀(Index) λ₯Ό μΆ”κ°€ν•˜μ—¬ 쑰회 μ„±λŠ₯을 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.

πŸ“‹ μ£Όλ¬Έ 관리 μš”κ΅¬μ‚¬ν•­ λͺ…μ„Έμ„œ.

μœ„μ˜ μ• μžμΌ 섀계λ₯Ό λ°”νƒ•μœΌλ‘œ 1단계(Iteration 1) MVP에 ν•΄λ‹Ήν•˜λŠ” μš”κ΅¬μ‚¬ν•­ λͺ…μ„Έμ„œλ₯Ό μž‘μ„±ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

  • [μš”κ΅¬μ‚¬ν•­ λͺ…μ„Έμ„œ]
    • UC-002: κ΄€λ¦¬μž μ£Όλ¬Έ 관리
    • μ„€λͺ…: κ΄€λ¦¬μžλŠ” 고객이 μ£Όλ¬Έν•œ 내역을 ν™•μΈν•˜κ³ , 배솑 μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜μ—¬ μ›ν™œν•œ μƒν’ˆ 배솑 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.
  • 1. κΈ°λŠ₯ μš”κ΅¬μ‚¬ν•­ (Features)
    • OM-01: μ£Όλ¬Έ λͺ©λ‘ 쑰회
      • κΈ°λ³Έ κ·œμΉ™:
        • κ΄€λ¦¬μžλŠ” 전체 μ£Όλ¬Έ λͺ©λ‘μ„ μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
        • λͺ©λ‘μ€ κ°€μž₯ μ΅œκ·Όμ— 주문된 μˆœμ„œ(λ‚΄λ¦Όμ°¨μˆœ)둜 μ •λ ¬λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
        • 각 λͺ©λ‘ ν•­λͺ©μ—λŠ” μ£Όλ¬Έ ID, 주문자 이름, μ£Όλ¬ΈμΌμ‹œ, 총 μ£Όλ¬Έ κΈˆμ•‘, μ£Όλ¬Έ μƒνƒœκ°€ ν‘œμ‹œλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
      • μ˜ˆμ™Έ 처리:
        • μ‘°νšŒν•  주문이 ν•˜λ‚˜λ„ 없을 경우, 빈 λͺ©λ‘κ³Ό ν•¨κ»˜ β€œμ£Όλ¬Έ 내역이 μ—†μŠ΅λ‹ˆλ‹€.β€λΌλŠ” λ©”μ‹œμ§€λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
    • OM-02: μ£Όλ¬Έ 배솑 μƒνƒœ λ³€κ²½
      • κΈ°λ³Έ κ·œμΉ™:
        • κ΄€λ¦¬μžλŠ” νŠΉμ • 주문의 배솑 μƒνƒœλ₯Ό λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
        • λ³€κ²½ κ°€λŠ₯ν•œ μƒνƒœ 흐름은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:
          • κ²°μ œμ™„λ£Œ ➞ 배솑쀀비쀑 ➞ 배솑쀑 ➞ λ°°μ†‘μ™„λ£Œ
        • μƒνƒœ 변경이 μ„±κ³΅ν•˜λ©΄, λ³€κ²½λœ 주문의 상세 정보λ₯Ό μ¦‰μ‹œ λ°˜ν™˜ν•©λ‹ˆλ‹€.
      • μ˜ˆμ™Έ 처리:
        • μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ£Όλ¬Έ ID둜 μš”μ²­ μ‹œ, β€œμ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ£Όλ¬Έμž…λ‹ˆλ‹€.β€λΌλŠ” 였λ₯˜ λ©”μ‹œμ§€λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.(HTTP 404 Not Found)
        • 이미 λ°°μ†‘μ™„λ£Œ λ˜λŠ” μ£Όλ¬Έμ·¨μ†Œ 된 주문의 μƒνƒœλ₯Ό λ³€κ²½ν•˜λ €κ³  ν•  경우, β€œμ΄λ―Έ 처리 μ™„λ£Œλœ 주문은 μƒνƒœλ₯Ό λ³€κ²½ν•  수 μ—†μŠ΅λ‹ˆλ‹€.β€λΌλŠ” 였λ₯˜ λ©”μ‹œμ§€λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.(HTTP 400 Bad Request)
        • μœ νš¨ν•˜μ§€ μ•Šμ€ μƒνƒœ κ°’(예: SHIPPED λŒ€μ‹  SHIPPING)으둜 μš”μ²­ μ‹œ, β€œμœ νš¨ν•˜μ§€ μ•Šμ€ μ£Όλ¬Έ μƒνƒœμž…λ‹ˆλ‹€.β€λΌλŠ” 였λ₯˜ λ©”μ‹œμ§€λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.(HTTP 400 Bad Request)
  • 2. 데이터 μ •μ±…
    • λͺ¨λ“  μ£Όλ¬Έ μƒνƒœμ˜ λ³€κ²½ 이λ ₯(μ–Έμ œ, μ–΄λ–€ μƒνƒœμ—μ„œ μ–΄λ–€ μƒνƒœλ‘œ λ³€κ²½λ˜μ—ˆλŠ”μ§€)은 λ³„λ„μ˜ 둜그 ν…Œμ΄λΈ”μ— κΈ°λ‘λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.(ν–₯ν›„ ν™•μž₯을 μœ„ν•œ μ •μ±…)
    • μ£Όλ¬Έ λ°μ΄ν„°λŠ” 고객의 재주문 및 톡계 뢄석을 μœ„ν•΄ 영ꡬ적으둜 λ³΄κ΄€ν•˜λŠ” 것을 μ›μΉ™μœΌλ‘œ ν•©λ‹ˆλ‹€.