Spring/이론

Spring DTO에 대해

JuNo_12 2025. 5. 8. 19:15

DTOData Transfer Object의 줄임말로,
"데이터 전송을 위한 객체", 말 그대로 데이터만 담아서 전달하는 용도의 객체이다.

 

DTO데이터 전달용 전용 클래스로,
비즈니스 로직 없이, 필요한 데이터만 담아서 계층 간 또는 클라이언트와 서버 간 전송할 때 사용한다.

 

Spring이 아니더라도 객체지향 프로그래밍(OOP)에서 데이터를 나누어 클래스로 표현하고 getter로 데이터를 꺼내 쓰는 건 매우 일반적인 패턴이다.

DTO도 그런 객체 중 하나의 역할을 수행하는 특화된 형태라고 보면 된다.

 

둘의 차이점 중에는 일반 클래스에는 비즈니스 로직을 가질 수도 있지만, DTO는 로직을 갖지 않고 getter/setter 정도만 존재한다.

항목 설명
목적 계층 간 데이터 전달 (Controller ↔ Service ↔ Repository)
역할 로직 없이 데이터만 가짐 (Getter/Setter, 생성자 등만 포함)
사용처 주로 요청(Request) 또는 응답(Response) 시 사용
구성 필드 + 생성자 + Getter/Setter (가끔 @Builder, @AllArgsConstructor도 사용)

 

왜 DTO를 써야 할까?

  1. 엔티티 직접 노출 방지
    • DB와 연결된 Entity를 그대로 외부에 노출하면 보안, 유지보수에 문제가 생긴다.
    • DTO를 통해 필요한 데이터만 추려서 전달 가능.
  2. 입출력 명확화
    • 어떤 요청에는 어떤 데이터가 필요하고, 어떤 응답을 줄지 명확하게 구조화된다.
  3. 유연한 필드 제어
    • 예: 클라이언트에는 id, title만 보내고 internalFlag 같은 민감한 정보는 숨길 수 있다.