---
id: P-REINFORCE-AI-DTO
category: "10_Wiki/💡 Topics/AI"
confidence_score: 0.99
tags: [SoftwareEngineering, DesignPatterns, DTO, Performance]
last_reinforced: 2026-04-20
---

# [[Data-Transfer-Object-Design]] (데이터 전송 객체 설계)

## 📌 한 줄 통찰 (The Karpathy Summary)
> "배달 박스를 효율적으로 포장하여 왕복 횟수를 줄이는 일." 프로세스 간 통신 시 데이터를 묶어서 전달함으로써 네트워크 비용을 절감하고 레이어 간의 결합도를 낮추는 순수 데이터 바구니다.

## 📖 구조화된 지식 (Synthesized Content)
- **Definition**:
    - 로직(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
- Contra: Active-Record-Pattern
