스프링 부트 REST API 개발일지

[SpringBoot] DTO를 어떻게 관리해야할까?

https://github.com/Dev-Guccin 2022. 4. 5. 09:28

문제

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();
    }
}

고려해볼 사항

  1. 도메인이 DTO의 형태를 알고 있게 되는건 아닌가?
  2. ⇒ DTO가 도메인의 로직에는 영향을 미치지 않아서 괜찮다.
  3. 결합도가 높아지는게 아닌가?
  4. ⇒ 위와 동일, 단 여러개의 도메인이 합쳐진 Inner Class는 지양해야한다.

래퍼런스

https://velog.io/@p4rksh/Spring-Boot에서-깔끔하게-DTO-관리하기

https://unluckyjung.github.io/dev/2022/02/20/Dto-InnerClass/