π[Backend Development] DTO(Data Transfer Object) ꡬν 4λ μμΉ
DTO(Data Transfer Object)λ κ³μΈ΅ κ° λ°μ΄ν° μ μ‘μ μν΄ μ¬μ©νλ κ°μ²΄μ λλ€.
DTO ꡬν 4λ μμΉμ λν΄ μμ보기 μ μ DTOμ ν΅μ¬ κ°λ κ³Ό DTOλ₯Ό μ¬μ©νλ μ΄μ μ λν΄ κ°λ¨νκ² μμλ³Έ ν 본격μ μΌλ‘ DTO ꡬν 4λ μμΉμ λν΄ μμ보λλ‘ νκ² μ΅λλ€.
π λͺ©μ°¨
- DTO
-
- DTO ν΅μ¬ κ°λ .
-
- DTOλ₯Ό μ¬μ©νλ μ΄μ .
-
- DTO ꡬν 4λ μμΉ
-
- λ¨μν λ°μ΄ν° 컨ν μ΄λμ¬μΌ ν©λλ€.(Be a Simple Data Container)
-
- λΆλ³(Immutable) κ°μ²΄λ‘ λ§λμΈμ(Be Immutable).
-
- μν°ν°μ μ² μ ν λΆλ¦¬νμΈμ(Be Decoupled from the Entity)
-
- λͺ©μ μ λ°λΌ λΆλ¦¬ν΄μ λ§λμΈμ(Be Purpost-Specific)
-
π¦ DTO
β 1. DTO ν΅μ¬ κ°λ .
DTOλ μμ€ν
μ λ΄λΆ λ‘μ§κ³Ό μΈλΆ μΈν°νμ΄μ€λ₯Ό λΆλ¦¬νκΈ° μν βλ°μ΄ν° μμβ λλ βλ°μ΄ν° μ΄λ°μ© κ°μ²΄βμ
λλ€.
볡μ‘ν λΉμ¦λμ€ λ‘μ§ μμ΄, μ€μ§ λ°μ΄ν°λ₯Ό λ΄μ μ λ¬νλ μ©λλ‘λ§ μ¬μ©λ©λλ€.
β 2. DTOλ₯Ό μ¬μ©νλ μ΄μ .
κ°μ₯ μ€μν μ΄μ λ λ΄λΆ λ°μ΄ν° λͺ¨λΈ(Entity
)κ³Ό μΈλΆ API κ³μ½(DTO
)μ λΆλ¦¬νκΈ° μν¨μ
λλ€.
-
κ΄μ¬μ¬ λΆλ¦¬
- λ°μ΄ν°λ² μ΄μ€μ μ§μ μ°κ²°λ
Entity
λ₯Ό μΈλΆμ κ·Έλλ‘ λ ΈμΆνλ©΄ 보μμ μ·¨μ½νκ³ , λ΄λΆ κ΅¬μ‘°κ° λ³κ²½λ λλ§λ€ API λͺ μΈ μ μ²΄κ° μν₯μ λ°κ² λ©λλ€. DTOλ API λͺ μΈμ νμν λ°μ΄ν°λ§ κ³¨λΌ λ΄μ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€.
- λ°μ΄ν°λ² μ΄μ€μ μ§μ μ°κ²°λ
-
μ μ°μ± λ° μμ μ±
- λ°μ΄ν°λ² μ΄μ€
Entity
μ κ΅¬μ‘°κ° λ³κ²½λλλΌλ DTOλ₯Ό μ¬μ©νλ ν API λͺ μΈλ κ·Έλλ‘ μ μ§ν μ μμ΄, μμ€ν μ΄ ν¨μ¬ μ μ°νκ³ μμ μ μ΄κ² λ©λλ€.
- λ°μ΄ν°λ² μ΄μ€
-
보μ
-
Entity
μ ν¬ν¨λ λΉλ°λ²νΈμ κ°μ λ―Όκ°ν¨ μ 보λ, μΈλΆμ λΆνμν λ΄λΆ λ°μ΄ν°κ° ν΄λΌμ΄μΈνΈμκ² λ ΈμΆλλ κ²μ λ°©μ§ν©λλ€.
-
π¦ DTO ꡬν 4λ μμΉ
β 1. λ¨μν λ°μ΄ν° 컨ν μ΄λμ¬μΌ ν©λλ€ (Be a Simple Data Container)
DTOμ μ μΌν μνμ βλ°μ΄ν°λ₯Ό λ΄μ κ³μΈ΅(Layer) κ°μ μ λ¬νλ κ²μ
λλ€.β
κ°κ²© κ³μ°μ΄λ μ ν¨μ± κ²μ¦κ³Ό κ°μ βλΉμ¦λμ€ λ‘μ§(Business Logic)μ μ λ ν¬ν¨ν΄μλ μ λ©λλ€.β
μ΄λ¬ν λ‘μ§μ μλΉμ€ κ³μΈ΅(Service Layer)μ μ±
μμ
λλ€.
β 2. λΆλ³(Immutable) κ°μ²΄λ‘ λ§λμΈμ. (Be Immutable)
setter
λ₯Ό μ 곡νμ§ μκ³ , βμμ±μλ λΉλ(@Builder
)λ₯Ό ν΅ν΄ μμ± μμ μλ§ κ°μ ν λΉνμΈμ.β
λ°μ΄ν°κ° μ¬λ¬κ³³μΌλ‘ μ λ¬λλ λμ κ°μ΄ λ³κ²½λ μνμ μμΉμ μΌλ‘ μ°¨λ¨νμ¬ μμ€ν
μ μμ μ±μ ν¬κ² λμ
λλ€.
β 3. μν°ν°μ μ² μ ν λΆλ¦¬νμΈμ (Be Decoupled from the Entity)
βDTOλ APIμ μΈλΆ λͺ
μΈ(κ³μ½)λ₯Ό, μν°ν°λ λ΄λΆ λ°μ΄ν°λ² μ΄μ€ ꡬ쑰λ₯Ό λνλ
λλ€.β
DTOκ° μν°ν°λ₯Ό μ§μ μ°Έμ‘°νκ±°λ μμ‘΄ν΄μλ μ λ©λλ€.
μ΄ μμΉμ λ΄λΆ κ΅¬μ‘°κ° λ³κ²½λλλΌλ μΈλΆ APIμ μν₯μ μ£Όμ§ μλ μ μ°ν μμ€ν
μ λ§λλλ€.
β 4. λͺ©μ μ λ°λΌ λΆλ¦¬ν΄μ λ§λμΈμ (Be Purpost-Specific)
νλμ κ±°λν DTOλ₯Ό μ¬λ¬ κ³³μμ μ¬μ©νλ λμ , κ° APIμ λͺ©μ μ λ§λ λ³κ°μ DTOλ₯Ό λ§λμΈμ.
μλ₯Ό λ€μ΄, βμν μμ± μμ²βμλ ProductCreateRequestDto
λ₯Ό,βμν λͺ©λ‘ μ‘°ν μλ΄βμλ ProductListResponseDto
λ₯Ό μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
μ΄λ DTOλ₯Ό λͺ
ννκ³ κ°κ²°νκ² μ μ§μμΌμ€λλ€.