밤빵's 개발일지
[TIL]20240711 Dto 사용의 중요성 본문
솔직히 과제하면서 만들라니까 만들지... 하는 생각으로 만들면서 entity나 dto에 대해서 설명하라고 하면 어버버 하게되서 그냥 데이터 전송하고 이동하는거!! 정도로만 알고있어도 될 거 같았는데, 컨트롤러에 대해 개발일지를 쓰고나서 하나씩 쓰는것도 좋겠다는 생각이들어서 dto에대해서도 공부를 하게됐다. 사실 entity에 대해서 물었던 질문에 대답을 하지 못해서가 가장 큰 이유이긴하다. 노트북 이슈로 레벨2과제를 손으로 하게되면서 시간이 너무 부족해서 일단 dto만 정리를 먼저 하기로 했다.
▶ DTO (Data Transfer Object) 란?
→ DTO (Data Transfer Object)는 애플리케이션의 서로 다른 계층 간에 데이터를 주고받기 위한 객체이다. Entity와는 별도로 정의되고, 서비스 계층에서 컨트롤러 계층으로 데이터를 전달하거나, 반대로 컨트롤러에서 서비스 계층으로 데이터를 전달할 때 사용된다. DTO는 데이터를 전송하는데 중점을 두고, 비즈니스 로직과는 분리되어 코드의 명확성을 높이고 유지보수성을 향상시킨다.
▶ DTO를 사용하는 이유
DTO 사용하는 이유는 다음과 같다.
→ 데이터보호 :
엔티티는 데이터베이스와 직접 연결된 객체이기 때문에 민감한 데이터가 노출 될 위험이 있다. DTO를 사용하면 필요한 데티만 전송하여 이러한 위험을 줄일 수 있다.
→ 역할 분리 :
엔티티는 데이터베이스와의 매핑을 담당하고, DTO는 데이터를 이동시키는 역할을 하기 때문에 각자의 역할이 명확히 분리된다.
→ 유연성 :
DTO는 엔티티와 독립적으로 설계되기 때문에 데이터 전송 요구 사항에 따라 DTO구조를 자유롭게 변경할 수 있다.
→ Validation :
DTO를 통해 입력값을 검증하여 잘못된 데이터의 유입을 방지할 수 있다.
▶ DTO의 장점
→ 간결한 데이터 전송 :
필요한 데이터만 포함하여 네트워크 전송 효율을 높인다.
→ 유지보수성 향상 :
도메인 모델 변경에 독립적이기 때문에 코드의 유지보수성이 향상된다.
→ 보안성 강화 :
불필요한 데이터나 민감한 데이터를 숨길 수 있어 보안이 강화된다.
▶ DTO 사용예시
지금 하고있는 과제를 예시로 들고싶었는데.... 손으로 써내려간걸 보자니 너무 지저분해서 과제1 때 DTO를 예시로..!
과제 1 게시판 기능에서 MemoRequestDto와 MemoResponseDto를 사용하여 데이터를 주고받는 DTO인데, MemoRequestDto는 클라이언트로부터 데이터를 수신할 때 사용되고, MemoResponseDto는 클라이언트에게 데이터를 반환할 때 사용된다.
package com.sparta.memo.dto;
import lombok.Getter;
@Getter
public class MemoRequestDto {
private String username;
private String contents;
}
→ MemoRequestDto는 사용자가 메모를 작성할 때 필요한 username과 contents만을 포함한다. 이를 통해 클라이언트로부터 불필요한 데이터가 서버로 전달되지 않도록 한다.
package com.sparta.memo.dto;
import com.sparta.memo.entity.Memo;
import lombok.Getter;
import java.time.LocalDateTime;
@Getter
public class MemoResponseDto {
private Long id;
private String username;
private String contents;
private LocalDateTime createdAt;
private LocalDateTime modifiedAt;
public MemoResponseDto(Memo memo) {
this.id = memo.getId();
this.username = memo.getUsername();
this.contents = memo.getContents();
this.createdAt = memo.getCreatedAt();
this.modifiedAt = memo.getModifiedAt();
}
}
→ MemoResponseDto는 메모 엔티티(Memo)의 정보를 클라이언트에게 반환할 때 사용된다. 엔티티의 모든 필드를 노출하지 않고, 클라이언트에게 필요한 정보만을 포함한다. 이를 통해 민감한 데이터를 보호하고, 클라이언트에게 필요한 정보만을 제공할 수 있다.
▶ 정리
→ DTO는 애플리케이션의 계층 간 데이터 전송을 위해 사용되며, 클라이언트와 서버 간의 데이터 교환에서 매우 중요한 역할을 한다. DTO를 사용함으로써 애플리케이션의 계층 간 데이터 전송을 효율적이고 안전하게 관리할 수 있다. 코드의 명확성과 유지보수성이 크게 향상 되었고, DTO를 적극 활용하면 클린 코드와 확장 가능한 구조를 유지할 수 있다고 한다.
또한 DB와의 소통을 담당하는 JAVA클래스를 그대로 Client에 반환하는 것이아니라 DTO로 한번 변환한 후 반환할 때도 사용된다.
🤓오늘의 소감
엔티티 물어보는데 말문이 막혀서 대답을 못하는 내가, 과제 1 해놓고도 정확히 어떤 역할을 하는지 모르고 있는게 조금 멍청한 느낌이라 꼭 알아둬야 겠다는생각을 하게됐다. 어차피 계속 써야할거같은데 잘 알고있는게 좋은거니까. 과제 2 예시를 쓰고싶었는데 gpt가 해준 걸 수정하느라 너무 지저분해져서 올릴수가 없었다... 인텔리제이의 자동완성 기능이 자꾸 생각나는데.. 빨간줄 확인을 못해서 그렇지 공부가 되는거 같아서 나름 만족하는 중!!
추가 +)
'개발Article' 카테고리의 다른 글
[TIL]20240713 Entity에 @Setter어노테이션을 사용하지 않는 이유? (0) | 2024.07.14 |
---|---|
[TIL]20240712 Entity (0) | 2024.07.12 |
[TIL]20240710 Controller를 이해해보자! (0) | 2024.07.12 |
[TIL]20240709 DispatcherServlet..? (0) | 2024.07.11 |
[TIL]20240708 MVC패턴 (0) | 2024.07.09 |