1. ν μ€νΈμ λν΄μ 곡λΆνκ² λ κ³κΈ°
κΈ°μ‘΄μλ ν
μ€νΈλ₯Ό API ꡬν μλ£ ν PostmanμΌλ‘ ꡬλ νμΈ μμ£Όλ‘ νμλ€.
ν
μ€νΈμ½λλ₯Ό μμ±νλ λ°©λ²λ λͺ°λκ³ μ€μμ±λ ν¬κ² λͺ°λμλ€.
νμ§λ§ μ΄λ²μλ μ€μ μλΉμ€ ν΄μΌνλ μ ν리μΌμ΄μ μ΄κ³ μλΉμ€νμλ κ³μ μμ μ¬νμ΄ λ°μν κ²μ΄κΈ° λλ¬Έμ ν μ€νΈμ½λλ₯Ό μμ±ν΄λμ§ μλλ€λ©΄ μ λ§ νλ€μ΄μ§ κ² κ°λ€λ μκ°μ΄ λ€μλ€.
νμ§λ§ λ¨μ ν
μ€νΈλ μ΄λ»κ² νλ κ²μΈμ§? λ¨μ ν
μ€νΈμ ν΅ν© ν
μ€νΈμ μ°¨μ΄κ° 무μμΈμ§? μ ν λͺ°λλ€.
λ°λΌμ λ¨μ ν
μ€νΈ λΌλ μ±
μ μ½κ³ μμ μν©μ μ 리ν΄λ³΄λ©° μκ°μ μ 리ν΄λ΄€λ€.
2. λ¨μ ν μ€νΈλ?
μ μ
λͺ¨λμ΄λ μ ν리μΌμ΄μ
λ΄λΆμ μλ μμ μ½λ μ‘°κ°μ΄ μμκ³Ό λκ°μ΄ λμνλμ§ κ²μ¦νλ λ°λ³΅μ μΈ νμ
μμ±
- νλ‘κ·Έλ¨μ μμ μ½λ μ‘°κ° λ¨μλ₯Ό κ²μ¦
- λΉ λ₯΄κ³ μ μνκ² μν
- 격리λ λ°©μμΌλ‘ μ²λ¦¬
μ¬μ©ν μ μλ λꡬ
Junit5, Mockito( BDDMockito !! )
μμ§κΉμ§λ λ¨μν
μ€νΈκ° λμ§ μ΄ν΄κ° μ μκ°λ€.
μ΄λ»κ² μμ μ½λ μ‘°κ°μΌλ‘ λλμ΄μΌ νκ³ κ²©λ¦¬μμΌμΌ νλ κ²μΈμ§..
3. λ¨μ ν μ€νΈμ λν ν΄μ μ°¨μ΄
μμλ μ μλ§ λ³΄λ©΄ ν΄μμ μ°¨μ΄κ° μκΈΈ μ λ°μ μλ€.
λ¨μ ν
μ€νΈμ λν ν΄μμ μ°¨μ΄λ₯Ό λκ³ λ°λνμ κ³ μ νκ° λλκ² λλ€.
βοΈ λ°λνμ κ³ μ ν - "μμμ½λμ‘°κ°"μ κΈ°μ€ μ°¨μ΄
λ¨μ ν μ€νΈλ νλ‘κ·Έλ¨μ μμ μ½λ μ‘°κ° λ¨μλ‘ κ²μ¦νλ κ²μ΄λΌκ³ νλ€. μ΄μ λν μκ²¬μ΄ λλλ€.
λ°λνλ μμ μ½λμ‘°κ°μ ν
μ€νΈ λμ λ¨μΌ ν΄λμ€ λλ ν΄λΉ ν΄λμ€ λ΄μ λ©μλ λ‘ λ³Έλ€.
ν΄λμ€λ λ©μλλΌλ λ¨μμ μ§μ€νλ€λ κ²μ μ μ μλ€.
κ³ μ νλ μμ μ½λ μ‘°κ°μ ν
μ€νΈ λμμ 곡μ μμ‘΄μ±μ κ°μ§μ§ μμ νλ ₯μλ₯Ό ν¬ν¨ν μ¬λ¬ ν΄λμ€ λ‘ λ³Έλ€.
λμ λ¨μμ μ§μ€νλ€λ κ²μ μ μ μλ€.
곡μ μμ‘΄μ±μ DBλ File Systemκ³Ό κ°μ΄ ν μ€νΈκ°μ μν₯μ λ―ΈμΉ μ μλ μλ¨μ μ 곡νλ μμ‘΄μ±μ μλ―Ένλ€.
μ¬κΈ°κΉμ§λ§ 보λλΌλ λ°λνκ° λ κΌΌκΌΌν ν μ€νΈνλκ² μ²λΌ 보μ΄μ§λ§ λ무 λ±λ±ν λ°©μμ΄λ€λκ²μ μ μ μλ€.
βοΈ λ°λνμ κ³ μ ν μμ½
1. λ°λν
- ν
μ€νΈ λμ ν΄λμ€λ₯Ό νλ ₯μλ‘λΆν° 격리
- λΆλ³ μμ‘΄μ± μΈμ λͺ¨λ μμ‘΄μ±μ λμμΌλ‘ λ체
2. κ³ μ ν
- κ°κ°μ ν
μ€νΈ λ©μλλ₯Ό μλ‘ κ°μμκ² κ²©λ¦¬
- 곡μ μμ‘΄μ±λ§ λμμΌλ‘ λ체
4. OrderServiceλ₯Ό λ°λνμ κ³ μ νκ° ν μ€νΈνλ€λ©΄?
EX) μμ μν©μΌλ‘ μλμ κ°μ΄ OrderServiceμμ OrderRepositoryλ₯Ό μ°Έμ‘°νκ³ Orderμ μμ‘΄νκ³ μλ€κ³ κ°μ ν΄λ³΄μ.
Orderλ λ΄λΆμ μΌλ‘ OrderItemλ₯Ό μ°Έμ‘°νκ³ , OrderItemμ Itemμ μ°Έμ‘°νκ³ μλ€.
Case1. λ΄κ° λ°λνμΈ κ²½μ°
곡μ μμ‘΄μ±μΈ OrderRepositoryμ λ³κ²½ κ°λ₯ μμ‘΄μ±μΈ Order ν΄λμ€λ₯Ό MockμΌλ‘ λ체νμ¬ ν μ€νΈνλ€.
μ΄λ κ² λλ©΄ OrderRepositoryλ λ¬Όλ‘ , Order ν΄λμ€ λ΄λΆλ₯Ό μ ν ν μ€νΈν μ μκ³ λ°λ‘ ν μ€νΈ μ½λλ₯Ό μμ±ν΄μΌ νλ€.
Case2. λ΄κ° κ³ μ νμΈ κ²½μ°
곡μ μμ‘΄μ±μΈ OrderRepositoryλ₯Ό MockμΌλ‘ λ체ν κ²μ λ°λνμ λμΌνλ€.
νμ§λ§, λ³κ²½ κ°λ₯ μμ‘΄μ±μΈ Orderμ κ²½μ°μλ λ체 νμ§ μκ³ κ·Έλλ‘ μ°κ²°νμ¬ ν μ€νΈνλ€λ μ μ΄ λ€λ₯΄λ€.
5. λλ κ³ μ νμ΄λ€!
λ°λν μ£Όμ₯ 1. ν
μ€νΈκ° λ§€μ° μμ λ¨μλ‘ λλμ΄ μμ΄ ν ν΄λμ€μλ§ μ§μ€ν μ μλ€.
-> λ°λ°: ν
μ€νΈλ μ½λμ λ¨μκ° μλ λμμ λ¨μμ Focus νλκ² μ΄μμ μ΄λΌκ³ μκ°νλ€.
λ°λν μ£Όμ₯ 2. κ°μ²΄ κ·Έλνκ° λ³΅μ‘ν΄μ Έλ λμμΌλ‘ λ체λκΈ° λλ¬Έμ μκ΄μ΄ μλ€.
-> λ°λ°: κ³ μ νλ₯Ό λ°λ₯Έλ€λ©΄ ν
μ€νΈ λμμ νλ ₯μμΈ κ°μ²΄ κ·Έλνλ₯Ό λͺ¨λ μμ±ν΄μΌ νλ―λ‘ μμ
μ΄ λ§λ€κ³ μκ°ν μ μλ€.
νμ§λ§, μ΄κ±Έ μκ°νκΈ° μ κ°μ²΄ κ·Έλνκ° λ무 볡μ‘ν΄μ§λ κ²½μ°μλ μ€κ³ λ¬Έμ λ₯Ό μμ¬ν΄μΌ νλ€κ³ μκ°νλ€.
λ°λν μ£Όμ₯ 3. ν
μ€νΈ μ€ν¨μ λμ ν΄λμ€λ§ νμΈνλ©΄ λλ―λ‘ μμΈ νμ
μ΄ μ½λ€.
-> λ°λ°: κ³ μ νλ₯Ό λ°λ₯Έλ€λ©΄ λ²κ·Έκ° μλ ν΄λμ€λ₯Ό μ°Έμ‘°νλ λͺ¨λ ν
μ€νΈκ° μ€ν¨ν μλ μκΈ΄ νλ€.
νμ§λ§, μ΄ κ²½μ°μλ μλ μ±κ³΅νλ ν
μ€νΈκ° μμκ³ κ°μκΈ° μ€ν¨νλ€λ©΄ λ°©κΈ λ΄κ° κ³ μ³€λ μ½λμ μν κ²μ΄λ―λ‘ μμΈ νμ
μ΄ μ΄λ ΅μ§ μλ€.
μμ μ΄μ μ ν¨κ» νλ‘κ·Έλλ°μ ν¨μ¨μ μΈ λΆλΆλ μ±κ²¨μΌ νλ€κ³ μκ°νκΈ°μ λλ κ³ μ νλ₯Ό λ°λ₯΄κΈ°λ‘ νλ€.
λ¬Όλ‘ , μ λ§ μ€μν λλ©μΈμ΄κ³ λλ©μΈ λ‘μ§μ΄ νλΆνλ©΄ Orderλ₯Ό λ°λ‘ ν
μ€νΈν μλ μλ€κ³ μκ°νλ€. (λ°λνλ₯Ό μ‘΄μ€)
6. λ¨μ ν μ€νΈλ μκ² κ³ , ν΅ν© ν μ€νΈλ λμ§?
λ¨μν
μ€νΈλ§μΌλ‘λ μ ν리μΌμ΄μ
μ΄ μ λλ‘ λμνλμ§ μ μ μλ λ°©λ²μ΄ μλ€.
μλνλ©΄ λ΄κ° MockμΌλ‘ 곡μ μμ‘΄μ±μ λμ΄λκΈ° λλ¬Έμ΄λ€.
λ¨μ ν μ€νΈλ₯Ό ν΅ν΄ λ΄ λλ©μΈκ³Ό μλΉμ€λ₯Ό νλΆνκ² ν μ€νΈνμλ€λ©΄ μ΄μ λ DBλ νμΌ μμ€ν κ³Ό κ°μ 곡μ μμ‘΄μ±μ μ°κ²°νμ¬ ν΅ν©μ μΈ ν μ€νΈλ₯Ό νλκ²μ΄ μ€μνλ€.
Presentation λλ Service Layerλ₯Ό λμμΌλ‘ 곡μ μμ‘΄μ±μ μ°κ²°νμ¬ ν΅ν© ν
μ€νΈλ₯Ό ν μ μλ€.
μΌλ°μ μΌλ‘ κ°μ₯ κΈ΄ μ£Όμ νλ¦κ³Ό λ¨μ ν
μ€νΈμμλ κ²μ¦νμ§ λͺ»ν μμΈ μν©μ λͺ¨λ λ€λ£¨λ©΄ λλ€.
(λ¬Όλ‘ Repositoryλ§μ λ°λ‘ ν
μ€νΈν μλ μλ€.)
ν΅ν©ν μ€νΈλ κΈ°μ€μ΄ λͺ¨νΈνλ€κ³ μκ°ν μ μλ€. νμ§λ§ μλμ κ°μ΄ λ¨μν μ€νΈμ λΉκ΅ν μ μλ€.
λ¨μν
μ€νΈλ λ¨μΌ λμμ κ²μ¦νκ³ , λΉ λ₯΄κ² μννκ³ , λ€λ₯Έ ν
μ€νΈμ 격리λμ΄ μ€ννλ€λ μꡬμ¬νμ΄ μμλ€.
ν΅ν©ν
μ€νΈλ λ¨μ ν
μ€νΈμ μꡬμ¬νμ νλλΌλ λ§μ‘±νμ§ λͺ»νλ©΄ ν΅ν©ν
μ€νΈλΌκ³ μκ°ν μ μλ€.
λ¬Όλ‘ ν΅ν© ν
μ€νΈλ μμ±ν΄μΌνμ§λ§ μΈλΆ νλ‘μΈμ€λ₯Ό λͺ¨λ μ°κ²°νκ³ ν
μ€νΈνλκ²μ λΉμ©μ΄ λ§μ΄ λ€κ³ λ리λ€.
λ°λΌμ, ν΅ν©ν
μ€νΈλ³΄λ€ λΉμ©μ΄ μ λ ΄ν λ¨μ ν
μ€νΈλ₯Ό λ λ§μ΄ μμ±νλ €κ³ ν΄μΌνλ€.
7. ν΅ν© ν μ€νΈ μΈλΆ μμ‘΄μ± μ’ λ₯
κ΄λ¦¬ μμ‘΄μ±
- λνμ μΌλ‘ λ°μ΄ν°λ² μ΄μ€κ° μμΌλ©°, κ΄λ¦¬ μμ‘΄μ±μ μ ν리μΌμ΄μ
μ ν΅ν΄μλ§ μ κ·Όν μ μμΌλ©°, ν΄λΉ μμ‘΄μ±κ³Όμ μνΈ μμ©μ μΈλΆ νκ²½μμ λ³Ό μ μλ€.
λΉκ΄λ¦¬ μμ‘΄μ±
- λνμ μΌλ‘ SMTPκ° μμΌλ©°, ν΄λΉ μμ‘΄μ±κ³Όμ μνΈ μμ©μ μΈλΆμμ λ³Ό μ μλ€.
κ΄λ¦¬ μμ‘΄μ±μ μ€μ μΈμ€ν΄μ€λ₯Ό μ¬μ©νλ©΄ λκ³ , λΉκ΄λ¦¬ μμ‘΄μ±μ MockμΌλ‘ λ체νμ¬ ν΅ν©ν μ€νΈνλ€.
νμ¬ κ°λ°νκ³ μλ νλ«νΌμλ λ€μ΄λ² SMTPλ₯Ό μ΄μ©ν μ΄λ©μΌ μΈμ¦κ³Ό κ°μ κΈ°λ₯μ΄ μλ€. μ΄λ¬ν λΆλΆμ λν΄μλ μ΄λ»κ² ν
μ€νΈ ν΄μΌν μ§ λ§λ§νλ€.
μ΄ λΆλΆμ λν΄μλ MockμΌλ‘ λ체νκ³ End To End ν
μ€νΈμμ νμΈ νλ©΄ μΆ©λΆνλ€κ³ μκ°νλ€.
βοΈ νκΈ°
ν μ€νΈλ₯Ό μ΄λ»κ² ν΄μΌν μ§ μ ν κ°μ λͺ»μ‘κ³ μμλλ° μ± μ΄λ μ¬λ¬ κ°μ μλ£λ₯Ό λ³΄κ³ λ°©ν₯μ μ‘κ² λμλ€.
ν΅ν© ν μ€νΈλ§ νλ©΄ λλκ±°μ§ μ λ¨μ ν μ€νΈλ₯Ό μμ±νλκ±°μ§? λΌκ³ μκ°νμ§λ§ μ€μ°μ΄μλ€.
μ€μ νλ‘μ νΈμμ νΉμ λΆλΆ μ½λλ₯Ό κ³ μΉκ±°λ μΆκ°ν μμ ν΅ν© ν μ€νΈλ§ μ‘΄μ¬νλ€λ©΄ DBμ κ΄λ ¨λ λΆλΆμ΄ μλλλΌλ ν μ€νΈν λ DBλ₯Ό μ°κ²°ν΄μΌ νλ©° λ§μ 리μμ€κ° μΆκ°λ‘ λ°μνλ€.
λ¨μ ν μ€νΈλ μλκ° ν¨μ¬ λΉ λ₯΄κ³ DBμ κ΄λ ¨λ μ½λλ₯Ό μ μΈνκ³ ν μ€νΈν μ μμ΄μ λ΄ μ΄ν리μΌμ΄μ μ½λλ§ μμ λ¨μλ‘ κ²μ¦ν μ μκΈ° λλ¬Έμ κΌ νμν ν μ€νΈλΌλκ±Έ μκ² λμλ€.