29 lines
1.9 KiB
Markdown
29 lines
1.9 KiB
Markdown
---
|
|
id: [[P-Reinforce|P-Reinforce]]-AI-DTO
|
|
category: Dev
|
|
confidence_score: 0.99
|
|
tags: [SoftwareEngineering, DesignPatterns, DTO, Performance]
|
|
last_reinforced: 2026-04-20
|
|
---
|
|
|
|
# [[Data-Transfer-Object-Design|Data-Transfer-Object-Design]] (데이터 전송 객체 설계)
|
|
|
|
## 📌 한 줄 통찰 (The Karpathy Summary)
|
|
> "배달 박스를 효율적으로 포장하여 왕복 횟수를 줄이는 일." 프로세스 간 통신 시 데이터를 묶어서 전달함으로써 네트워크 비용을 절감하고 레이어 간의 결합도를 낮추는 순수 데이터 바구니다.
|
|
|
|
## 📖 구조화된 지식 (Synthesized Content)
|
|
- **Definition**:
|
|
- 로직([[Behavior|Behavior]])을 가지지 않고 데이터(Properties)만 담고 있는 객체.
|
|
- 주로 클라이언트와 서버, 또는 서비스 레이어와 컨트롤러 사이에서 데이터를 주고받을 때 사용한다.
|
|
- **Role**:
|
|
- **Contract Separation**: DB 엔티티(Entity)를 외부에 노출하지 않고, 필요한 정보만 골라 담아 보안 및 구조적 유연성 확보.
|
|
- **Performance**: 여러 번의 호출(Fine-grained)을 한 번의 뭉텅이 호출(Coarse-grained)로 바꿔 네트워크 지연 최소화.
|
|
- **Comparison**: **Entity**(DB와 1:1 매칭, 로직 포함 가능) vs **DTO**(전송용, 직렬화 필수).
|
|
|
|
## ⚠️ 모순 및 업데이트 (RL Update)
|
|
- 엔티티와 DTO가 거의 동일한 경우가 많아 '중복 코드'라는 비판을 받기도 한다. 하지만 시스템이 커질수록 엔티티의 변경이 API 스펙을 강제로 바꾸는 대참사를 막기 위해 이 분리는 필수적인 보험이다. 최근에는 AutoMapper 같은 도구로 이 변환 과정을 자동화하거나, Java의 `record` 같은 간결한 문법을 활용한다.
|
|
|
|
## 🔗 지식 연결 (Graph)
|
|
- Related: Domain-Driven-Design (DDD) , Software-[[Architecture|Architecture]]
|
|
- Contra: Active-Record-Pattern
|