DTO(Data Transfer Object)는 데이터 전송을 목적으로 설계된 객체이다.
- 데이터 캡슐화 DTO는 특정 데이터와 그에 대한 메서드(예: getter, setter)를 포함하여 데이터를 캡슐화한다. 이를 통해 데이터의 구조를 명확하게 정의한다.
- 네트워크 효율성 DTO를 사용하면 네트워크를 통해 전송할 데이터의 크기를 줄일 수 있다. 필요한 데이터만 포함시켜 전송할 수 있기 때문에, 불필요한 정보를 제외하고 필요한 데이터만 클라이언트와 서버 간에 주고받을 수 있다.
- 데이터 구조 변경 용이 DTO를 사용하면 내부 데이터 구조가 변경되더라도 외부에 노출되는 데이터 형태는 일정하게 유지할 수 있다. 이는 코드의 유지보수성을 높이고, 클라이언트와의 호환성을 유지하는 데 도움이 된다.
- 보안 DTO를 사용하여 특정 민감한 데이터를 숨길 수 있다. 예를 들어, 사용자 정보를 전송할 때 비밀번호와 같은 민감한 정보를 DTO에서 제외할 수 있다.
- 유효성 검사 DTO는 데이터가 유효한지 검사하는 데 유용하다. 입력된 데이터가 특정 규칙을 충족하는지 확인할 수 있는 메서드를 추가할 수 있다.
- API 문서화 용이 DTO를 사용하면 API의 데이터 구조를 명확하게 문서화할 수 있습니다. 클라이언트가 어떤 데이터를 기대할 수 있는지 쉽게 이해할 수 있다.
BoardResponse
//static으로 시작 시 띄운다
// getter,setter알아서 생성
@Data
public static class DTO{
private int id;
private String title;
// 생성자로 Board객체에 있는 걸 옮긴다
public DTO(Board board) {
this.id = board.getId();
this.title = board.getTitle();
}
}
BoardService
public List<BoardResponse.DTO> 게시글목록보기() {
List<Board> boardList = boardRepository.findAll();
// 빈 객체 생성 후 데이터를 저장해서 옮긴다.
List<BoardResponse.DTO> dtos = new ArrayList<>();
for (Board board : boardList) {
BoardResponse.DTO dto = new BoardResponse.DTO(board);
dtos.add(dto);
}
return dtos;
}
Controller
@GetMapping("/")
public String list(Model model) {
//DS(request객체를 model이라는 객체로 랩핑해서 전달해준다)
List<BoardResponse.DTO> boardList = boardService.게시글목록보기();
model.addAttribute("models", boardList);
return "list";
}
Share article