λ€μ΄κ°λ©°
μ΄λ² 2μ£Ό μ°¨ νν΄λ 무μ¬ν λ§μ³€λ€. μ΄λ² κ³Όμ μμλ μν€ν μ² κ΅¬μ‘° μ€κ³μ λν λ΄μ©μ μ€μ μ μΌλ‘ 곡λΆνμλ€.
κ·Έλμ μ£Όλ‘ 3-tier μν€ν μ²λ₯Ό μ£Όλ‘ μ¬μ©ν΄ μμλλ°, μ΄λ²μλν΄λ¦° μν€ν μ²μ λ μ΄μ΄λ μν€ν μ²μ νΉμ§, μ₯λ¨μ λΆμμ ν΅ν΄ κ°μ²΄μ§ν₯μ κ΄μ¬μ¬ λΆλ¦¬μ λν΄ κΉμ΄ κ³ λ―Όν΄ λ³Ό μ μλ μκ°μ΄μλ€.
ν΄λ¦° μν€ν μ² & λ μ΄μ΄λ μν€ν μ²
ν΄λ¦° μν€ν μ²
ν΄λ¦° μν€ν μ²λ κ΄μ¬μ¬μ λΆλ¦¬λ₯Ό λͺ νν νκ³ , λΉμ¦λμ€ λ‘μ§μ μΈλΆ μμ‘΄μ±μΌλ‘λΆν° μμ ν λΆλ¦¬νλ κ²μ λͺ©νλ‘ νλ€. μ΄λ₯Ό ν΅ν΄ μμ€ν μ μ μ§λ³΄μμ±μ λμ΄κ³ , μΈλΆ λ³νμ λν μν₯μ μ΅μννλ€.
1. μν°ν° (Entities)
μν°ν°λ μμ€ν
μ μ μ¬μ λΉμ¦λμ€ κ·μΉμ μΊ‘μνν κ°μ²΄λ‘, μΈλΆλ‘λΆν°μ λ³νμ μμ‘΄νμ§ μλλ€. μ΄λ κ°μ₯ ν΅μ¬μ μΈ λλ©μΈ λͺ¨λΈλ‘, μ ν리μΌμ΄μ
λ΄μμ μ΄λ€ μμ‘΄μ±μλ μν₯μ λ°μ§ μμμΌ νλ€.
2. μ μ¦ μΌμ΄μ€ (Use Cases)
μ μ¦ μΌμ΄μ€λ μ ν리μΌμ΄μ
μ λΉμ¦λμ€ κ·μΉμ ꡬνν λ μ΄μ΄λ‘, νΉμ λλ©μΈ λμμ μννλ€. μ μ¦ μΌμ΄μ€λ μν°ν°μ λ°μ΄ν° νλ¦μ μ‘°μ νλ©°, λΉμ¦λμ€ λ‘μ§μ μΈλΆ μ
μΆλ ₯μ΄λ νλ μ ν
μ΄μ
κ³μΈ΅κ³Ό λΆλ¦¬νλ€.
3. μΈν°νμ΄μ€ μ΄λν° (Interface Adapters)
μ΄ λ μ΄μ΄λ μ μ¦ μΌμ΄μ€μ μΈλΆ μμ€ν
(λ°μ΄ν°λ² μ΄μ€, UI, API λ±) μ¬μ΄μμ λ°μ΄ν°λ₯Ό λ³ννλ μν μ νλ€. μλ₯Ό λ€μ΄, DTO(Data Transfer Object)λ₯Ό μ¬μ©ν΄ μν°ν°μμ μΈλΆλ‘ μ λ¬ν λ°μ΄ν° κ΅¬μ‘°λ‘ λ³ννκ±°λ, λ°λλ‘ μΈλΆ λ°μ΄ν°λ₯Ό μν°ν°λ‘ λ³ννλ μμ
μ λ΄λΉνλ€. μ΄λ‘ μΈν΄, λΉμ¦λμ€ λ‘μ§μ΄ μΈλΆμ λ³νλ‘λΆν° 보νΈλλ€.
4. νλ μμν¬ & λλΌμ΄λ² (Frameworks & Drivers)
μ΄ λ μ΄μ΄λ μΈλΆ μμ€ν
(μΉ νλ μμν¬, λ°μ΄ν°λ² μ΄μ€, λ©μμ§ μμ€ν
λ±)κ³Ό μνΈμμ©νλ μ½λκ° μμΉνλ€. μ ν리μΌμ΄μ
μ΄ νλ«νΌ, λΌμ΄λΈλ¬λ¦¬, μΈλΆ APIμ μμ‘΄νμ§ μκ³ , λΉμ¦λμ€ λ‘μ§μ μ΄ λ μ΄μ΄μ λΆλ¦¬λμ΄ λ
립μ μΌλ‘ λμν μ μκ² νλ€.
λ μ΄μ΄λ μν€ν μ²
λ μ΄μ΄λ μν€ν μ²λ μμ€ν μ κ³μΈ΅λ³λ‘ λΆλ¦¬νμ¬ κ° κ³μΈ΅μ΄ μμ μ μν μλ§ μ§μ€ν μ μλλ‘ μ€κ³νλ€. μΌλ°μ μΌλ‘ νλ μ ν μ΄μ , λΉμ¦λμ€ λ‘μ§, λ°μ΄ν° μ κ·Ό κ³μΈ΅μΌλ‘ ꡬμ±λλ©°, κ° κ³μΈ΅μ μμ κ³μΈ΅μμ νμ κ³μΈ΅μΌλ‘ μμ‘΄μ±μ΄ νλ₯Έλ€.
λͺ©ν
μ΄λ² κ³Όμ μ μ£Όμ λ μκ° μ μ² API μμ±μ΄μλ€. κΈ°μ μ μΌλ‘λ λμμ± μ²λ¦¬μ μν€ν μ² μ€κ³λ₯Ό κ³ λ €νμ¬ κ°λ°νλ κ²μ΄ ν΅μ¬μ΄μλ€. νΉν, λ€μ€ μλ² νκ²½μμ λμμ κ³ λ €ν΄μΌ νκΈ° λλ¬Έμ, μ ν리μΌμ΄μ λ 벨μ λ½ λμ DB λ 벨μμμ λ½μ μ€μ νλ κ²μ΄ νμνλ€. λν, μν€ν μ²λ ν΄λ¦° μν€ν μ²μ λ μ΄μ΄λ μν€ν μ²μ μ€κ° μ§μ μΈ ν΄λ¦° λ μ΄μ΄λ μν€ν μ²λ₯Ό κΈ°λ°μΌλ‘ μ€κ³νλ€.
μλ‘ μκ² λ κ²
1. Repository μΈν°νμ΄μ€μ μμ‘΄μ± λΆλ¦¬
μ§κΈκΉμ§λ Repository μΈν°νμ΄μ€λ₯Ό νμ μΈλΆ μμ‘΄μ±μ λμκΈ° λλ¬Έμ, μΈλΆ λ³νκ° μκΈ°λ©΄ λλ©μΈ κ³μΈ΅μλ μν₯μ λ―Έμ³€λ€. νμ§λ§, λλ©μΈμ΄ νμλ‘ νλ λ©μλλ§ λλ©μΈ κ³μΈ΅μμ μΈν°νμ΄μ€λ‘ μ μνκ³ , Infrastructure κ³μΈ΅μμ μ΄μ λν ꡬν체λ₯Ό λ§λ¦μΌλ‘μ¨ λλ©μΈμ΄ μΈλΆ λ³νμ μν₯μ λ°μ§ μλλ‘ μ€κ³ν μ μμλ€.
2. Application κ³μΈ΅
μ΄λ² κ³Όμ μμ Controllerμ Service κ°μ Application κ³μΈ΅μ μλ‘κ² μΆκ°νλ€. μ΄ κ³μΈ΅μ Facade ν¨ν΄μ μ μ©νμ¬ μ¬λ¬ μλΉμ€ λ‘μ§μ λ¨μνλ μΈν°νμ΄μ€λ‘ μ 곡νκ³ , 볡μ‘ν λΉμ¦λμ€ λ‘μ§μ νλλ‘ λ¬Άμ΄ μ²λ¦¬ν μ μκ² νλ€.
3. λκ΄μ λ½ & λΉκ΄μ λ½
λκ΄μ λ½ (Optimistic Lock)
- λκ΄μ λ½μ κΈ°λ³Έμ μΌλ‘ λ°μ΄ν°μ λ½μ κ±Έμ§ μκ³ , νΈλμμ μ΄ μλ£λ λκΉμ§ λ€λ₯Έ νΈλμμ μ΄ ν΄λΉ λ°μ΄ν°λ₯Ό μμ νμ§ μμ κ²μ΄λΌκ³ κ°μ νλ€.
- versionμ μ΄μ©νμ¬ μ½μ λμ μΈ λμ μ ν©μ±μ νμΈνκ³ λ§λ€λ©΄ μ λ°μ΄νΈλ₯Ό μννλ€.
- λ§μ½ versionμ΄ λ§μ§ μλ€λ©΄ μμΈκ° λ°μνμ¬ νΈλμμ μ΄ μ€ν¨νκ² λλ€.
λΉκ΄μ λ½ (Pessimistic Lock)
- λΉκ΄μ λ½μ λ°μ΄ν°μ λν μ κ·Όμ΄ μ΄λ£¨μ΄μ§ λ νμ λ½μ κ±Έκ³ , λ€λ₯Έ νΈλμμ μ΄ ν΄λΉ λ°μ΄ν°λ₯Ό μ κ·Όνμ§ λͺ»νλλ‘ λ§λλ€.
- λ€λ₯Έ μ¬μ©μλ λ¨Όμ μ κ·Όν μ¬μ©μκ° λ³κ²½ μ¬νμ 컀λ°νκ³ λ μ½λ μ κΈμ ν΄μ ν λκΉμ§ κΈ°λ€λ €μΌ νλ€.
μ΄λ² κ³Όμ μμλ λΉκ΄μ λ½μ μ ννλ€. μ΄μ λ λκ΄μ λ½μ΄ μ μ°©μμ λν 보μ₯μ μ 곡νμ§ λͺ»νκΈ° λλ¬Έμ΄λ€. λκ΄μ λ½μ λ μ½λ λ½μ κ±Έμ§ μμμΌλ‘μ¨ μ€λ²ν€λλ₯Ό μ€μΌ μ μλ μ₯μ μ΄ μμΌλ, μ λ°μ΄νΈ μ λ²μ μ΄ λ§μ§ μμΌλ©΄ νΈλμμ μ΄ μ€ν¨νκ³ λ€μ μλν΄μΌ νλ©°, μ΄λ‘ μΈν΄ μμ°¨μ μΈ λ³΄μ₯μ΄ μ΄λ €μμ§λ€. λ°λ©΄, λΉκ΄μ λ½μ λκΈ°μ΄μμ μμ°¨ 보μ₯μ μ 곡νλ―λ‘, μ¬λ¬ μ¬μ©μκ° λμμ μμ²ν κ²½μ°μλ λ°μ΄ν°μ μΌκ΄μ±μ μ μ§ν μ μλ€.
μμΌλ‘ κ°μ ν΄μΌ ν κ²
1. μ½νλ¦° μ€νλ§μμ JPA μν°ν°μ λν μ μ
JPA μν°ν°λ₯Ό μ μν λ μ½νλ¦°μμλ varμ valμ μ¬μ©νμ¬ νλλ₯Ό μ μΈνκ² λλ€. νμ§λ§ μ¬κΈ°μ μ€μν μ€κ³ κ³ λ―Όμ΄ νμνλ€.
varλ‘ νλλ₯Ό μ μν κ²½μ° νλ κ°μ΄ λ³κ²½ κ°λ₯ν΄μ Έ, 무λΆλ³ν λ³κ²½μ νμ©ν μ μλ€. μ΄λ νΉν λλ©μΈ λͺ¨λΈμμλ μΉλͺ
μ μΌ μ μλλ°, λΉμ¦λμ€ λ‘μ§ μμμ κ°μ²΄μ λΆλ³μ±μ΄ μ€μν κ²½μ° μκΈ°μΉ λͺ»ν μ€λ₯λ₯Ό μ΄λν μ μλ€.
λ°λ©΄, valλ‘ μ μν κ²½μ° νλκ° λΆλ³μ΄ λμ΄ κ°μ²΄μ μν λ³κ²½μ λ°©μ§ν μ μλ€. νμ§λ§ JPAμμλ μν°ν°λ₯Ό μμνν λ νλ κ°μ λ³κ²½ν΄μΌ νλ κ²½μ°κ° λ°μν μ μλλ°, μ΄λλ λ¬Έμ κ° λ μ μλ€. μλ₯Ό λ€μ΄, μ
λ°μ΄νΈ μ λΆλ³ νλλ₯Ό λ³κ²½νμ§ λͺ»ν΄ μμμ± μ»¨ν
μ€νΈμμ λκΈ°νκ° μ΄λ €μμ§λ€.
Javaμμλ λ³΄ν΅ private νλμ getter, setter λ©μλλ‘ νλλ₯Ό 보νΈνκ³ , μ κ·Όμ μ ννλ λ°©μμ΄ μΌλ°μ μ΄μλ€. νμ§λ§ μ½νλ¦°μμλ getterμ setterλ₯Ό μλμΌλ‘ μ 곡νκΈ° λλ¬Έμ, μ΄λ₯Ό λμ ν΄ valλ‘ λΆλ³μ±μ ν보νκ±°λ, νμν κ²½μ°μλ§ varλ₯Ό μ¬μ©ν΄ νΉμ μν©μμλ§ κ°μ λ³κ²½ν μ μλλ‘ ν΄μΌ νλ€.
μ΄λ° μ€κ³ κ΄μ μμ JPA μν°ν°λ λ³κ²½ κ°λ₯ν νλμ λΆλ³ νλλ₯Ό λͺ ννκ² λΆλ¦¬νκ³ , λλ©μΈ λ‘μ§μ μμ μ±μ κ³ λ €ν΄ μ€κ³ν΄μΌ νλ€. λΆνμν λ³κ²½μ λ°©μ§νλ €λ©΄, μ€μν λΉμ¦λμ€ λ‘μ§μ΄ λ΄κΈ΄ νλλ κ°κΈμ valλ‘ μ μΈνκ³ , νμν κ²½μ°μλ§ varλ‘ λ³κ²½ κ°λ₯μ±μ μ΄μ΄λλ κ²μ΄ λ°λμ§νλ€.
λ§μΉλ©°
μ΄λ² 2μ£Ό μ°¨ κ³Όμ μμλ 1μ£Ό μ°¨ λμ κ°μ΄ μ λ§ λ§μ λΆλΆμ κ³ λ―Όν΄ λ³΄κ³ , λ―μ΄κ³ μ³λ³΄κ³ κ·Έλ¬λ κ² κ°λ€. κ·Έ κ³Όμ μμ λͺ°λλ κ²μ κΉ¨λ«κ³ , κ°ν μμλ μκ°μ μ’ λ κΉ¨μΈ μ μλ μκ°μ΄ λμλ€.
μ΄μ 3μ£Ό μ°¨λΆν°λ νλμ μ£Όμ λ‘ λ§μ§λ§ 10μ£Ό μ°¨κΉμ§ λ벨λ‘νλ κ³Όμ λ‘ μκ³ μλ€. μ΄λ² 1,2μ£Όλ μ΄ κ³Όμ λ₯Ό μν μ€λΉ κ³Όμ μ΄μλ€ μκ°νκ³ λ¨μ κ³Όμ λ μ΄μ¬ν μ§νν μμ μ΄λ€.