문제
api별로 req,res DTO들을 사용하다 보니 너무 많은 DTO를 생성하게 된다.
향후 프로젝트를 더 진행하게 되면 관리가 더 어려울 것이라 판단하여 이를 해결하고자 한다.
해결방법
Inner Class로 바꾸어 관리한다. 도메인의 이너 클래스로 관리하여 DTO 관리 편의성을 높인다.
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
public class User {
@Getter
@AllArgsConstructor
@Builder
public static class Info {
private int id;
private String name;
private int age;
}
@Getter
@Setter
public static class Request {
private String name;
private int age;
}
@Getter
@AllArgsConstructor
public static class Response {
private Info info;
private int returnCode;
private String returnMessage;
}
}
import com.parksh.demo.dto.DefaultResponse;
import com.parksh.demo.dto.user.User;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping(“user”)
public class UserController {
@GetMapping(“/{user_id}”)
public User.Response getUser(@PathVariable(“user_id”) String userId) {
return new User.Response(new User.Info(), 200, “success”);
}
@PostMapping
public DefaultResponse addUser(@RequestBody User.Info info) {
return new DefaultResponse();
}
}
고려해볼 사항
- 도메인이 DTO의 형태를 알고 있게 되는건 아닌가?
- ⇒ DTO가 도메인의 로직에는 영향을 미치지 않아서 괜찮다.
- 결합도가 높아지는게 아닌가?
- ⇒ 위와 동일, 단 여러개의 도메인이 합쳐진 Inner Class는 지양해야한다.
래퍼런스
https://velog.io/@p4rksh/Spring-Boot에서-깔끔하게-DTO-관리하기
https://unluckyjung.github.io/dev/2022/02/20/Dto-InnerClass/
'스프링 부트 REST API 개발일지' 카테고리의 다른 글
[Redis] 조회수를 캐시를 적용했지만 속도가 느린 문제 해결 (0) | 2022.05.27 |
---|---|
[스프링] spring MVC life cycle (0) | 2022.04.25 |
JWT (Json Web Token) (0) | 2022.04.05 |
[고민] public repository에 application.properties(.yml)의 정보를 어떻게 관리해야할까? (0) | 2022.03.11 |