λ°μ΄λΈμ½λ© μ½λ κ΄λ¦¬λ°©λ²: κ°(ζ)μ μ μ§νλ©΄μλ νλ€λ¦¬μ§ μλ κ°λ° 체κ³
λ°μ΄λΈμ½λ© μ½λ κ΄λ¦¬λ°©λ²: κ°(ζ)μ μ μ§νλ©΄μλ νλ€λ¦¬μ§ μλ κ°λ° μ²΄κ³ λ°μ΄λΈμ½λ©μ νλ¦μ νλ©΄ 무μκ² λΉ λ¦ λλ€. λ€λ§ βμ€λμ μ λ...
λ°μ΄λΈμ½λ© μ½λ κ΄λ¦¬λ°©λ²: κ°(ζ)μ μ μ§νλ©΄μλ νλ€λ¦¬μ§ μλ κ°λ° 체κ³
λ°μ΄λΈμ½λ©μ νλ¦μ νλ©΄ 무μκ² λΉ λ¦ λλ€. λ€λ§ βμ€λμ μ λλλ° λ΄μΌμ μ μ λμ§?βκ° λ°λ³΅λλ©΄ νλ, λ³ΈμΈλ μ§μΉ©λλ€. νΉν μλμ΄ κ°λ°μμκ² μ€μν 건 μλ μμ²΄κ° μλλΌ μ¬ν κ°λ₯ν μλμ λλ€. κ°μΌλ‘ μ§ μ½λλ₯Ό κ΄λ¦¬ κ°λ₯ν μμ°μΌλ‘ λ°κΎΈλ λ°©λ²μ μ 리ν΄λ³΄κ² μ΅λλ€.
1) λ°μ΄λΈμ½λ©μ ν΅μ¬ μν: βλ§₯λ½ μ μ€βκ³Ό βμλ λΆλͺ β
λ°μ΄λΈμ½λ©μ΄ μ€ν¨νλ ν¨ν΄μ λκ° λ κ°μ§μ λλ€.
- λ§₯λ½ μ μ€: μ μ΄λ κ² νλμ§, μ΄λ€ μ μ½μ΄ μμλμ§ κΈ°λ‘μ΄ μμ΄ λ€μ λ³κ²½μ΄ λλ €μμ§
- μλ λΆλͺ : λμμ λμ§λ§, κ²½κ³μ‘°κ±΄Β·μμΈΒ·μ±λ₯ ν¬μΈνΈκ° μ½λμ λλ¬λμ§ μμ ν΄κ²°μ± μ κ±°μ°½ν λ¬Έμκ° μλλΌ, μμ κ·μ¨μ λλ€.
2) λΈλμΉ/μ»€λ° κ·μ¨: βμκ², μλ―Έ μκ², λλ릴 μ μκ²β
2-1. 컀λ°μ βνλ λ¨μβλ‘ μͺΌκ°κΈ°
λ°μ΄λΈμ½λ©μ ν λ²μ ν¬κ² λ°κΎΈκΈ° μ½μ΅λλ€. νμ§λ§ μ΄μκ³Ό νμ μ μκ°νλ©΄ λλ리기 μ¬μ΄ ν¬κΈ°κ° μλͺ μ λλ€.
- μ»€λ° λ©μμ§λ 무μμλ³΄λ€ μλ₯Ό λ¨κΉλλ€.
- μ:
fix: μΊμ ν€μ μ¬μ©μ μ§μ ν¬ν¨(μ€λ³΅ μλ΅ λ°©μ§) - ν 컀λ°μλ ν κ°μ§ μλλ§ λ΄μ΅λλ€. (리ν©ν°λ§+κΈ°λ₯μΆκ° μμ§ μκΈ°)
2-2. βμ€ν λΈλμΉβλ₯Ό κΈ°λ³Έκ°μΌλ‘
κ°μΌλ‘ λ°μ΄λΆμΌμλ‘ μ€ν 곡κ°μ΄ νμν©λλ€.
exp/(experiment) λΈλμΉμμ λ§μκ» νλ€κ³- μ ν¨ν΄μ§λ©΄
feature/λ‘ μ λ¦¬ν΄ ν©μΉ©λλ€. - λ¨κ²¨λ κ°μΉκ° μμΌλ©΄ κ³Όκ°ν νκΈ°ν©λλ€. λ²λ¦¬λ κΈ°μ μ΄ μμ°μ±μ μ§ν΅λλ€.
3) μ½λμ βλ°μ΄λΈβλ₯Ό 보쑴νλ λ¬Έμν: μ£Όμμ΄ μλλΌ μμ¬κ²°μ κΈ°λ‘
λ¬Έμλ κΈΈκ² μ°λ©΄ μ μ½νλλ€. μλμ΄λ€μ΄ λ°©μμ μ§§κ³ ν΅μ¬λ§ λ¨κΈ°λ κ²λλ€.
3-1. ADR(Architecture Decision Record) ν μ₯ κ·μΉ
ν κ²°μ λ§λ€ νμΌ νλλ©΄ μΆ©λΆν©λλ€.
- κ²°μ : 무μμ μ ννλκ°
- μ΄μ : 무μμ ν¬κΈ°νκ³ λ¬΄μμ μ»μλκ°
- μν₯: μ΄λ€ μ½λκ° μν₯μ λ°λκ°
- 보λ₯: μμ§ λͺ¨λ₯΄λ 리μ€ν¬λ 무μμΈκ° (λ¨μ κΈμ§) μ΄λ κ² ν΄λλ©΄ βκ·Έλ μ μ΄λ κ² νλλΌ?βλ₯Ό κ±°μ μ κ±°ν μ μμ΅λλ€.
3-2. μ£Όμμ βμλμ κ²½κ³μ‘°κ±΄βλ§
μ½λκ° λ§νλ κ²μ ΠΏΠΎΠ²ΡΠΎΡνμ§ λ§κ³ , μ½λκ° λ§νμ§ λͺ»νλ κ²μ μλλ€. μ: βμ΄ ν¨μλ λ°°μΉ μμ μμλ§ νΈμΆ, μμ² μ€λ λμμ μ¬μ© κΈμ§(μ§μ° λ°μ)β
4) νμ§ κ²μ΄νΈ: ν μ€νΈλ βμμ μ₯μΉβ, λ¦°νΈλ βκ΅ν΅λ²κ·β
λ°μ΄λΈμ½λ©μ μ§μνλ €λ©΄ μλνλ μ λμ₯μΉκ° νμμ λλ€.
4-1. ν μ€νΈλ βμ€μ νλ¦β μμ£Όλ‘ μκ²
λͺ¨λ κ±Έ ν μ€νΈνλ €λ€ μ§μΉ©λλ€. λμ λ€μ 3κ°μ§λ§ μ‘μ΅λλ€.
- λ/κΆν/λ°μ΄ν° μμ μ²λΌ λλ릴 μ μλ μμ
- μ₯μ κ° μ¦μ κ²½κ³μ‘°κ±΄(null, λΉ κ°, νμμμ)
- μΈλΆ μ°λ(κ²°μ /λ©μΌ/νμΌ)μ²λΌ λ³λμ±μ΄ ν° μμ μλλ νμ΄μ¬ μμμ λλ€. μΈλΆ μ°λμ κ²©λ¦¬ν΄ λ°μ΄λΈμ½λ©μ μλλ₯Ό μ§ν€λ©΄μλ μμ μ±μ ν보ν©λλ€.
from dataclasses import dataclass
@dataclass
class PaymentResult:
ok: bool
reason: str = ""
class PaymentGateway:
def charge(self, user_id: str, amount: int) -> PaymentResult:
raise NotImplementedError
def purchase(user_id: str, amount: int, gw: PaymentGateway) -> PaymentResult:
if amount <= 0:
return PaymentResult(False, "invalid_amount")
result = gw.charge(user_id, amount)
return result
# ν
μ€νΈμμ μΈλΆ κ²°μ λμ κ°μ§ ꡬν μ¬μ©
class FakeGateway(PaymentGateway):
def __init__(self, ok=True):
self._ok = ok
def charge(self, user_id: str, amount: int) -> PaymentResult:
return PaymentResult(self._ok, "" if self._ok else "denied")
def test_purchase_denied():
gw = FakeGateway(ok=)
r = purchase(, , gw)
r.ok
r.reason ==
4-2. ν¬λ§·ν°/λ¦°νΈλ βλ Όμ μ’ κ²° μ₯μΉβ
μ½λ μ€νμΌ λ Όμμ μμ°μ±μ κ°μλ¨Ήμ΅λλ€. μλ λκ΅¬λ‘ ν΅μΌνκ³ , μ¬λμ μ€κ³μ λ¬Έμ ν΄κ²°μ μ§μ€ν©λλ€.
5) 리ν©ν°λ§ μ΄μλ²: βκΈ°λ₯ μΆκ° ν 30λΆ μ 리βλ₯Ό μ무ν
λ°μ΄λΈμ½λ©μ μ§μ§ κΈ°μ μ μ 리 νμ΄λ°μ λλ€.
- κΈ°λ₯μ΄ βλμβνλ©΄ λλ΄μ§ λ§κ³
- λ± 30λΆλ§: μ΄λ¦, ν¨μ κΈΈμ΄, μ€λ³΅ μ κ±°, μμΈ μ²λ¦¬ μ 리
- κ·Έλ¦¬κ³ μ»€λ°μ 리ν©ν°λ§ μ /νλ‘ λΆλ¦¬ν©λλ€. μ΄ μ΅κ΄μ μκ°μ΄ μμΌμλ‘ μλμ μΈ μ°¨μ΄λ₯Ό λ§λλλ€.
6) μ€μ μ¬λ‘: βμ λλ κΈ°λ₯μ΄ κ°μκΈ° λλ €μ‘λ€βλ₯Ό μλ°©νλ κ΄λ¦¬
ν νμμ μμ£Ό 보λ λ¬Έμ λ μΊμ μ μ©μ΄μμ΅λλ€. λ°μ΄λΈμ½λ©μΌλ‘ μΊμλ₯Ό λΆμ΄λ©΄ μ΄λ°μ λΉ¨λΌμ§μ§λ§, μ¬μ©μΒ·μ§μΒ·κΆν κ°μ μΆμ΄ μΆκ°λλ©΄ μΊμ ν€ μΆ©λλ‘ μ€λμμ΄ λ©λλ€.
ν΄κ²°μ λ¨μνμ΅λλ€.
- ADRλ‘ βμΊμ ν€ κ΅¬μ± κ·μΉβμ 1μ₯μΌλ‘ κ³ μ
- ν μ€νΈλ‘ βκΆνμ΄ λ€λ₯Έ μ¬μ©μκ° κ°μ μλ΅μ λ°μ§ μλμ§βλ§ κ²μ¦
- μ»€λ° λ©μμ§μ μ ν€λ₯Ό λ°κΏ¨λμ§ λ¨κΉ κ·Έ λ€λ‘λ λΉμ·ν μ₯μ κ° μ¬λ°νμ§ μμμ΅λλ€. κ°μΌλ‘ μμνλ, κ·μ¨λ‘ λ§λ¬΄λ¦¬ν κ²°κ³Όμ λλ€.
7) μλμ΄λ₯Ό μν λ§λ¬΄λ¦¬ 체ν¬λ¦¬μ€νΈ
컀λ°μ΄ λλ리기 μ¬μ΄ ν¬κΈ°μΈκ°
βμβκ° λ¨μ μλκ°(μ§§μ κΈ°λ‘μ΄λΌλ)
μ€μν νλ¦μ μ΅μ ν μ€νΈκ° μλκ°
μ€νμ μ€ν λΈλμΉμμ λλ¬λκ°
κΈ°λ₯ μΆκ° ν μ 리 컀λ°μ λ¨κ²Όλκ°
λ°μ΄λΈμ½λ©μ μλμ κΈ°μ μ΄μ§λ§, μ½λ κ΄λ¦¬λ μ§μμ κΈ°μ μ λλ€. λ κ°μ§κ° ν¨κ» κ° λ, κ°λ°μ λ§€λ² μλ‘ μμνλ λ Έλμ΄ μλλΌ μΆμ λλ μμ°μ΄ λ©λλ€.
β¬οΈ μ΄ κΈμ΄ λμμ΄ λμ ¨λ€λ©΄, μλ κ΄κ³ λ₯Ό ν λ²λ§ ν΄λ¦ν΄μ£ΌμΈμ! μ μκ² ν° νμ΄ λ©λλ€ πββοΈ β¬οΈ