✅ 클라이언트와 서버 간 데이터를 주고받을 때 사용되는 객체
✅ 엔티티(Entity)와 분리하여 비즈니스 로직과 요청/응답 데이터를 명확히 구분
✅ API에서 Request와 Response를 분리하여 유지보수성을 높일 수 있음
@RestController
@RequestMapping("/api")
public class UserApiController {
@PutMapping("users/{id}")
public UsersUpdateResponseDto updateUser(@PathVariable("id") Long id,
@RequestBody @Valid UsersUpdateRequestDto request) {
...
}
// DTO
public static class UsersUpdateRequestDto {
private String name;
private String email;
}
public static class UsersUpdateResponseDto {
private Long id;
private String name;
private String email;
}
}
src/main/java/com/example/project/
├── controller/
│ ├── UserApiController.java
│ ├── PostApiController.java
├── dto/
│ ├── user/
│ │ ├── UsersUpdateRequestDto.java
│ │ ├── UsersUpdateResponseDto.java
│ ├── post/
│ │ ├── PostCreateRequestDto.java
│ │ ├── PostResponseDto.java
├── entity/
│ ├── User.java
│ ├── Post.java
@RestController
@RequestMapping("/api")
public class UserApiController {
@PutMapping("users/{id}") // 사용자 수정
public UsersUpdateResponseDto updateUser(@PathVariable("id") Long id,
@RequestBody @Valid UsersUpdateRequestDto request) {
...
}
}
package com.example.project.dto.user;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@NoArgsConstructor
public class UsersUpdateRequestDto {
private String name;
private String email;
}
package com.example.project.dto.user;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@NoArgsConstructor
public class UsersUpdateResponseDto {
private Long id;
private String name;
private String email;
}