π― λ°±μλ κ°λ°μλ₯Ό μν μꡬμ¬ν λͺ μΈμ μμ± κ°μ΄λ
λ°±μλ κ°λ°μκ° λ¨μν μ½λλ₯Ό μμ±νλ κ²μ λμ΄, λΉμ¦λμ€μ μ±κ³΅μ κΈ°μ¬νλ μμ€ν μ λ§λ€κΈ° μν΄ λ°λμ μ΄ν΄ν΄μΌ ν ν΅μ¬ κ°λ λ€μ λλ€.
μꡬμ¬ν λͺ μΈμμ λΉμ¦λμ€ κ·μΉ, μμΈ μν© μ²λ¦¬, λ°μ΄ν° μλͺ μ£ΌκΈ° μ μ± μ λν΄ λ² μ€νΈ νλν°μ€μ βμ¨λΌμΈ μνΌλ§μΌβ νλ‘μ νΈμ λ°λ‘ μ μ©ν μ μλ μ€λ¬΄ μμλ₯Ό μ€μ¬μΌλ‘ λͺ ννκ² μ€λͺ ν©λλ€.
1. λΉμ¦λμ€ κ·μΉ (Business Rules)
κ°λ μ μ
λΉμ¦λμ€ κ·μΉμ βνΉμ 쑰건μμ μμ€ν μ΄ λ°λΌμΌ νλ λͺ μμ μΈ μ§μΉ¨μ΄λ μ μ½μ¬νβμ μλ―Έν©λλ€.
β무μμβ κ°λ°ν μ§ μ μνλ κΈ°λ₯ μꡬμ¬νκ³Ό λ¬λ¦¬, λΉμ¦λμ€ κ·μΉμ βμ΄λ»κ²β λλ βμ΄λ€ 쑰건μμβ κΈ°λ₯μ΄ λμν΄μΌ νλμ§λ₯Ό ꡬ체μ μΌλ‘ μ μν©λλ€.
ν΅μ¬ μν :
- λ°μ΄ν°μ λ¬΄κ²°μ± λ³΄μ₯
- μ μ± κ°μ μ μ©
- λΉμ¦λμ€ μμ¬κ²°μ μλν
λ² μ€νΈ νλν°μ€
λͺ ννκ³ μμμ μμ±
- νλμ κ·μΉμλ νλμ 쑰건과 κ²°κ³Όλ§ ν¬ν¨
- λ³΅ν© μ‘°κ±΄μ κ°λ³ κ·μΉμΌλ‘ λΆλ¦¬
β μλͺ»λ μμ:
"14μΈ μ΄μμ΄κ³ , λ§μΌν
μμ μ λμν νμμκ²λ§ ν μΈ μΏ ν°μ λ°κΈνλ€"
β
μ¬λ°λ₯Έ μμ:
- [BR-001] λ§ 14μΈ μ΄μλ§ νμκ°μ
κ°λ₯
- [BR-002] λ§μΌν
μμ λμ νμμκ²λ§ μΏ ν° λ°κΈ
κ³ μ ID λΆμ¬
κ° κ·μΉμ BR-001
, BR-002
μ κ°μ κ³ μ μλ³μλ₯Ό λΆμ¬νμ¬:
- κΈ°νμμμ μ½λκΉμ§ μΆμ κ°λ₯
- ν κ° μν΅ μ λͺ νν μ°Έμ‘°
- ν μ€νΈ μΌμ΄μ€μ μ°κ²°
μ€μ μ§μ€μ κ΄λ¦¬
- μ€μ νμΌ(configuration)
- λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈ
- Rule Engine λꡬ νμ©
- μ½λ μ¬λ¬ κ³³μ λΆμ° κΈμ§
λΉμ¦λμ€ μΈμ΄ μ¬μ©
β κ°λ°μ κ΄μ :
"User ν
μ΄λΈμ age μ»¬λΌ κ°μ΄ 14 λ―Έλ§μ΄λ©΄ INSERTλ₯Ό λ§λλ€"
β
λΉμ¦λμ€ κ΄μ :
"λ§ 14μΈ λ―Έλ§ μ¬μ©μλ νμμΌλ‘ κ°μ
ν μ μλ€"
μ€λ¬΄ μμ: μ¨λΌμΈ μνΌλ§μΌ νλ‘μ νΈ
νμ κ΄λ¦¬ κ·μΉ
[BR-SIGNUP-001] νμκ°μ
μ°λ Ή μ ν
- 쑰건: μ¬μ©μμ λμ΄κ° λ§ 14μΈ λ―Έλ§
- κ²°κ³Ό: νμκ°μ
μ μ°¨λ₯Ό μ€λ¨νκ³ "λ§ 14μΈ μ΄μλ§ κ°μ
κ°λ₯ν©λλ€." λ©μμ§ λ°ν
μ£Όλ¬Έ κ΄λ¦¬ κ·μΉ
[BR-ORDER-002] μ΅μ μ£Όλ¬Έ κΈμ‘
- 쑰건: μ₯λ°κ΅¬λ μ΄ μν κΈμ‘(ν μΈ μ μ© μ )μ΄ 15,000μ λ―Έλ§
- κ²°κ³Ό: μ£Όλ¬Έ μ§ν λΆκ°, "μ΅μ μ£Όλ¬Έ κΈμ‘μ 15,000μμ
λλ€." μλ΄ νμ
νλ‘λͺ¨μ κ·μΉ
[BR-PROMO-003] μ κ·κ°μ
μΏ ν° μ€λ³΅ λ°©μ§
- 쑰건: μ κ·κ°μ
μ°μ»΄ μΏ ν° λ°κΈ μμ²
- κ²°κ³Ό: κ³μ μμ± ν 1νλ§ λ°κΈ, ν μΏ ν°κ³Ό μ€λ³΅ μ¬μ© λΆκ°
리뷰 κ΄λ¦¬ κ·μΉ
[BR-REVIEW-004] 리뷰 μμ± μ격
- 쑰건: μν 리뷰 μμ± μμ²
- κ²°κ³Ό: ν΄λΉ μνμ 'ꡬ맀 νμ ' μνμΈ νμλ§ μμ± κ°λ₯
2. μμΈ μν© μ²λ¦¬ λ°©μ (Exception Handling)
κ°λ μ μ
μμΈ μν© μ²λ¦¬λ μννΈμ¨μ΄κ° μ μμ μΈ νλ¦μ λ²μ΄λλ μκΈ°μΉ λͺ»ν λ¬Έμ κ° λ°μνμ λ, μμ€ν μ΄ μ€λ¨λμ§ μκ³ μν©μ μ μ νκ² μ²λ¦¬νκ³ λ³΅κ΅¬νλ λ©μ»€λμ¦μ λλ€.
λνμ μΈ μμΈ μν©:
- μ‘΄μ¬νμ§ μλ 리μμ€ μ κ·Ό
- λ€νΈμν¬ μ°κ²° μ₯μ
- μΈλΆ μλΉμ€ μλ΅ μ§μ°
- λ°μ΄ν° κ²μ¦ μ€ν¨
λ² μ€νΈ νλν°μ€
ꡬ체μ μΈ μλ¬ μ½λ μ μ
β μΌλ°μ μΈ μλ΅:
500 Internal Server Error
β
ꡬ체μ μΈ μλ΅:
{
"errorCode": "ITEM_OUT_OF_STOCK",
"message": "μμ²νμ μνμ μ¬κ³ κ° λΆμ‘±ν©λλ€.",
"timestamp": "2024-03-15T10:30:00Z"
}
μ¬μ©μ μΉνμ λ©μμ§
- μμ€ν
λ΄λΆ μ€λ₯(
NullPointerException
λ±) λ ΈμΆ κΈμ§ - μ¬μ©μκ° μ΄ν΄ν μ μλ λͺ νν μλ΄
- ν΄κ²° λ°©λ² λλ λμ μ μ
μμΈν λ‘κΉ
μ¬μ©μμκ²λ κ°λ¨ν λ©μμ§, μλ² λ‘κ·Έμλ μμΈ μ 보 κΈ°λ‘:
- μ¬μ©μ μλ³ μ 보
- μμ² λ΄μ© (Request Body, Parameters)
- λ°μ μμΉ (Stack Trace)
- λ°μ μκ° λ° νκ²½ μ 보
νΈλμμ μμ μ±
- λΆλΆμ μ€ν μν λ°©μ§
- μ€ν¨ μ λͺ¨λ μμ λ‘€λ°±
- λ°μ΄ν° μΌκ΄μ± μ μ§
μ€λ¬΄ μμ: μ¨λΌμΈ μνΌλ§μΌ νλ‘μ νΈ
μ£Όλ¬Έ νλ‘μΈμ€ μμΈ μ²λ¦¬
[EH-ORDER-001] μ£Όλ¬Έ μ μ¬κ³ λΆμ‘±
μν©: κ²°μ μμ² μκ° μ₯λ°κ΅¬λ μνμ΄ νμ λ κ²½μ°
μ²λ¦¬ λ°©λ²:
- HTTP μν: 409 Conflict
- μλ΅ νμ:
{
"errorCode": "ITEM_OUT_OF_STOCK",
"message": "'[μνλͺ
]'μ μ¬κ³ κ° λΆμ‘±νμ¬ μ£Όλ¬Έν μ μμ΅λλ€.",
"data": {
"productId": "PROD_12345",
"requestedQuantity": 3,
"availableQuantity": 0
}
}
- νμ μ‘°μΉ: κ²°μ νλ‘μΈμ€ μ¦μ μ€λ¨, μ₯λ°κ΅¬λ μν μ
λ°μ΄νΈ
κ²°μ μμ€ν μμΈ μ²λ¦¬
[EH-PAYMENT-002] PGμ¬ μ°λ μ€ν¨
μν©: Payment Gateway μλ² μ₯μ λ‘ κ²°μ μΉμΈ μμ² μ€ν¨
μ²λ¦¬ λ°©λ²:
- μ£Όλ¬Έ μν: 'κ²°μ μ€ν¨'λ‘ κΈ°λ‘
- μ¬μ©μ λ©μμ§: "κ²°μ μλΉμ€ μ₯μ λ‘ μ£Όλ¬Έμ μ€ν¨νμ΅λλ€. μ μ ν λ€μ μλν΄μ£ΌμΈμ."
- μλ² λ‘κ·Έ: PGμ¬ μλ³Έ μλ¬ λ©μμ§ μ 체 κΈ°λ‘
- 볡ꡬ μ λ΅: μλ μ¬μλ (μ΅λ 3ν), κ΄λ¦¬μ μλ¦Ό λ°μ‘
μΈμ¦/μΈκ° μμΈ μ²λ¦¬
[EH-AUTH-003] μ ν¨νμ§ μμ μΏ ν° μ¬μ©
μν©: μ΄λ―Έ μ¬μ©νκ±°λ λ§λ£λ μΏ ν° μ½λ μ μ© μλ
μ²λ¦¬ λ°©λ²:
- HTTP μν: 400 Bad Request
- μλ΅ νμ:
{
"errorCode": "INVALID_COUPON",
"message": "μ¬μ©ν μ μλ μΏ ν°μ
λλ€.",
"details": {
"couponCode": "WELCOME2024",
"reason": "ALREADY_USED",
"usedDate": "2024-03-10T14:20:00Z"
}
}
3. λ°μ΄ν° μλͺ μ£ΌκΈ° μ μ± (Data Lifecycle Policy)
κ°λ μ μ
λ°μ΄ν° μλͺ μ£ΌκΈ° μ μ± μ λ°μ΄ν°κ° μμ±(Creation)λκ³ , μ¬μ©(Usage)λλ©°, 보κ΄(Archive)λκ³ , μ΅μ’ μ μΌλ‘ νκΈ°(Destruction)λκΈ°κΉμ§μ μ κ³Όμ μ κ΄λ¦¬νλ κ·μ μ λλ€.
μ μ± μ립 μ΄μ :
- λ²μ κ·μ μ€μ (κ°μΈμ 보보νΈλ², GDPR λ±)
- μ€ν λ¦¬μ§ λΉμ© μ΅μ ν
- λ°μ΄ν° 보μ μ μ§
- λΉμ¦λμ€ μ°μμ± λ³΄μ₯
λ² μ€νΈ νλν°μ€
λ°μ΄ν° λΆλ₯ 체κ³
| λΆλ₯ | μ€λͺ
| λ³΄κ΄ κΈ°κ° | μ²λ¦¬ λ°©λ² |
|ββ|ββ|βββ|βββ-|
| κ°μΈ μλ³ μ 보 (PII) | μ΄λ¦, μ£Όμ, μ°λ½μ² λ± | λ²μ κΈ°κ° | μνΈν μ μ₯, μ격ν μ κ·Ό μ μ΄ |
| κ±°λ μ 보 | μ£Όλ¬Έ, κ²°μ , λ°°μ‘ κΈ°λ‘ | 5λ
(μ μμκ±°λλ²) | λ°±μ
보κ΄, κ°μ¬ λ‘κ·Έ |
| μλΉμ€ λ‘κ·Έ | μ μ, νλ ν¨ν΄ λΆμ | 1λ
| ν΅κ³ μ²λ¦¬ ν μ΅λͺ
ν |
| λ§μΌν
λ°μ΄ν° | μ νΈλ, μΏ ν° μ¬μ© μ΄λ ₯ | λμ μ² ν μκΉμ§ | λμ λ²μ λ΄ νμ© |
λͺ νν λ³΄κ΄ κΈ°κ°
β λͺ¨νΈν μ μ±
:
"μ€λλ λ°μ΄ν°λ μμ νλ€"
β
λͺ
νν μ μ±
:
"μ£Όλ¬Έ λ°μ΄ν°λ μ μμκ±°λλ² μ 6μ‘°μ λ°λΌ 5λ
κ° λ³΄κ΄ ν νκΈ°νλ€"
νκΈ° λ°©λ² μ μ
- Soft Delete: λ Όλ¦¬μ μμ (볡ꡬ κ°λ₯)
- Hard Delete: 물리μ μμ (볡ꡬ λΆκ°λ₯)
- μνΈν ν€ νκΈ°: λ°μ΄ν° μ κ·Ό λΆκ°λ₯νκ² λ§λ¦
ν΄λ©΄ μ μ± μ립
μ 보ν΅μ λ§λ²μ βκ°μΈμ 보 μ ν¨κΈ°κ°μ β μ€μ:
- 1λ μ΄μ λ―Έμ μ μ ν΄λ©΄ μ ν
- μ¬μ ν΅μ§ (30μΌ μ )
- λ³λ λΆλ¦¬ 보κ΄
μ€λ¬΄ μμ: μ¨λΌμΈ μνΌλ§μΌ νλ‘μ νΈ
νμ λ°μ΄ν° κ΄λ¦¬
[DLP-USER-001] ν΄λ©΄ νμ μ²λ¦¬ μ μ±
λμ: μ΅μ’
λ‘κ·ΈμΈ ν 1λ
μ΄μ μ μ κΈ°λ‘μ΄ μλ νμ
νλ‘μΈμ€:
1. μ¬μ ν΅μ§: μ ν 30μΌ μ μ΄λ©μΌ λ°μ‘
2. ν΄λ©΄ μ ν: κ°μΈμ 보λ₯Ό λ³λ λΆλ¦¬λ DB ν
μ΄λΈλ‘ μ΄κ΄
3. λ°μ΄ν° μ²λ¦¬:
- μ΄λ¦, μ£Όμ, μ°λ½μ² β μνΈν ν λΆλ¦¬ 보κ΄
- μ£Όλ¬Έ μ΄λ ₯ β κ°μΈμ 보 μ κ±° ν ν΅κ³ λͺ©μ μΌλ‘ 보κ΄
4. 볡ꡬ μ μ°¨: λ³ΈμΈμΈμ¦ μλ£ μ ν΄λ©΄ ν΄μ λ° λ°μ΄ν° 볡μ
νμ νν΄ μ²λ¦¬
[DLP-USER-002] νμ νν΄ μ λ°μ΄ν° μ²λ¦¬
μ¦μ νκΈ° λμ:
- κ°μΈ μλ³ μ 보 (μ΄λ¦, μ£Όμ, μ°λ½μ²)
- λ§μΌν
κ΄λ ¨ λ°μ΄ν° (μ νΈλ, μΏ ν° μ΄λ ₯)
λ³΄κ΄ λμ (5λ
κ°):
- μ£Όλ¬Έ/κ²°μ κΈ°λ‘ (μ μμκ±°λλ² μ€μ)
- λΆμ ν΄κ²° κ΄λ ¨ λ°μ΄ν°
νΉλ³ μ²λ¦¬:
- μ΄λ©μΌ/ID: μ¬κ°μ
λ°©μ§λ₯Ό μν΄ ν΄μννμ¬ λ³΄κ΄
- 리뷰 λ°μ΄ν°: "νν΄ν νμ"μΌλ‘ μ΅λͺ
ν μ²λ¦¬
λΉνμ λ°μ΄ν° κ΄λ¦¬
[DLP-CART-003] λΉνμ μ₯λ°κ΅¬λ λ°μ΄ν°
λ³΄κ΄ κΈ°κ°: λ§μ§λ§ νλ ν 24μκ°
μλ μμ 쑰건:
- μΈμ
μ’
λ£ μ
- 24μκ° λΉνμ± μν
- λΈλΌμ°μ μΏ ν€ λ§λ£ μ
λ°μ΄ν° μ²λ¦¬:
- κ°μΈμ 보 μμ§ μ΅μν
- μνΈνλμ§ μμ νλ¬Έ μ μ₯ κΈμ§
- μ κΈ°μ λ°°μΉ μμ
μΌλ‘ λ§λ£ λ°μ΄ν° μ 리
μ μ© μ²΄ν¬λ¦¬μ€νΈ
λΉμ¦λμ€ κ·μΉ κ²μ¦
- κ° κ·μΉμ΄ λͺ ννκ³ μμμ μΌλ‘ μ μλμλκ°?
- κ³ μ IDκ° λΆμ¬λμ΄ μΆμ κ°λ₯νκ°?
- λΉμ¦λμ€ μΈμ΄λ‘ μμ±λμ΄ μ΄ν΄νκΈ° μ¬μ΄κ°?
- μ€μμμ κ΄λ¦¬ κ°λ₯ν ꡬ쑰μΈκ°?
μμΈ μ²λ¦¬ κ²μ¦
- ꡬ체μ μΈ μλ¬ μ½λκ° μ μλμλκ°?
- μ¬μ©μ μΉνμ μΈ λ©μμ§λ₯Ό μ 곡νλκ°?
- μμΈν λ‘κ·Έκ° κΈ°λ‘λλκ°?
- νΈλμμ μμ μ±μ΄ 보μ₯λλκ°?
λ°μ΄ν° μλͺ μ£ΌκΈ° κ²μ¦
- λ°μ΄ν°κ° λ―Όκ°λλ³λ‘ λΆλ₯λμλκ°?
- λ²μ κ·Όκ±°μ κΈ°λ°ν λ³΄κ΄ κΈ°κ°μ΄ λͺ μλμλκ°?
- νκΈ° λ°©λ²μ΄ ꡬ체μ μΌλ‘ μ μλμλκ°?
- ν΄λ©΄ μ μ± μ΄ μ립λμλκ°?
κ²°λ‘
μ±κ³΅μ μΈ λ°±μλ μμ€ν ꡬμΆμ μν΄μλ κΈ°λ₯ ꡬνλΏλ§ μλλΌ λΉμ¦λμ€ κ·μΉ, μμΈ μ²λ¦¬, λ°μ΄ν° κ΄λ¦¬ μ μ± μ 체κ³μ μΌλ‘ μ€κ³ν΄μΌ ν©λλ€.
μ΄λ¬ν μμλ€μ΄ μ λλ‘ μ μλκ³ κ΅¬νλμμ λ, μμ μ μ΄κ³ νμ₯ κ°λ₯νλ©° λ²μ μꡬμ¬νμ λ§μ‘±νλ μμ€ν μ λ§λ€ μ μμ΅λλ€.