Files
2nd/10_Wiki/Topics_GD/Data-Transfer-Object-Design.md
T

1.9 KiB


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