본문 바로가기
Develop/Spring

Spring MVC - API 계층

by jaeyoungb 2022. 10. 30.

Controller 클래스


  • 클라이언트 요청을 처리할 서버 애플리케이션의 기능들을 구현한 클래스
  • @RestController
    • Spring MVC에서는 특정 클래스에 @RestController를 추가하면 해당 클래스가 REST API의 리소스를 처리하기 위한 API 엔드포인트로 동작함을 정의
    • @RestController가 추가된 클래스는 애플리케이션 로딩 시, Spring Bean으로 등록
  • @RequestMapping
    • 클라이언트의 요청과 클라이언트 요청을 처리하는 핸들러 메서드를 매핑해주는 역할
    • 클래스 레벨에 추가하여, 클래스 전체에 사용되는 공통 URL(Base URL)을 설정 가능
    • produces : 응답 데이터를 어떤 미디어 타입으로 클라이언트에게 전송할지 설정 (Attribute)
  • @GetMapping
    • 클라이언트가 서버에 리소스를 조회할 때 사용
  • @PostMapping
    • 클라이언트의 요청 데이터(Request Body)를 서버에 생성할 때 사용
  • @PathVariable
    • 핸들러 메서드의 파라미터 종류 중 하나
    • 매핑 URI의 문자열과 동일해야 함
  • @RequestParam
    • 핸들러 메서드의 파라미터 종류 중 하나
    • 지정한 파라미터 값을 Request Body에 실어서 요청할 수 있게 함
  • 핸들러 메서드의 리턴 값으로 Map 객체를 이용하면, Spring MVC 내부적으로 JSON 형식의 데이터를 생성
  • ResponseEntity를 이용하면 응답 데이터를 좀 더 세련된 형태로 만들어줌 (HttpStatus 이용 가능)

 

 

  •  

DTO(Data Transfer Object) 클래스


  • 핸들러 메서드에 파라미터로 추가되는 @RequestParam의 개수가 늘어나는 것을 DTO 클래스가 요청 데이터를 하나의 객체로 전달 받는 역할을 해줌으로써, 간결함을 유지할 수 있다.
  • 핸들러 메서드 내부에 있는 유효성 검사 로직을 DTO 클래스에 구현함으로써, 간결함을 유지할 수 있다.
  • DTO 클래스를 적용함으로써, Controller에 적어주는 애너테이션
    • @RequestBody
      • JSON 형식의 Request Body를 DTO 클래스의 객체로 변환시켜주는 역할 (역직렬화)
    • @ResponseBody
      • DTO 클래스의 객체를 Response Body로 변환시켜주는 역할 (직렬화)
      • 핸들러 메서드의 리턴 값이 ResponseEntity일 경우 또한 직렬화해줌 (둘 중 하나 사용하면 됨)
  • 단점
    • Controller 클래스가 늘어남에 따라, DTO 클래스가 2배씩 늘어남(postDto, patchDto)
  • 유효성 검증(Validation)
    • DTO 클래스에 적용
    • @NotBlank
      • null 값, 공백(""), 스페이스(" ") 같은 값들을 모두 허용하지 않음
    • @Pattern
      • 정규 표현식에 매치되는 유효한 문자인지 검증
    • @Range
      • 범위 내의 수인지 검증
    • @PathVariable에 대한 유효성 검증
      • 클래스 레벨에 @Validated 애너테이션 반드시 추가
      • @Min
      • @Max
      • @Positive
    • Custom Vaildator

 

 

심화