이 글은 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 책을 참고하여 작성되었습니다.

1. lombok

자바 개발 시 자주 사용하는 Getter/Setter, 기본 생성자 등의 코드들을 annotation을 통해 자동으로 생성해주는 라이브러리이다.

2. Dto

앞서 작성했던 HelloController를 HelloResponseDto를 통해 lombok으로 리팩터링 해보자.

  • DTO(Data Transfer Object)
    • 계층간 데이터 교환을 위한 객체이다.
    • DB에서 데이터를 얻어 Controller나 Service로 이를 전달한다.
    • 순수 데이터 객체이며 getter와 생성자(setter 대신 사용, 데이터 임의 변경 x)를 메서드로 가진다.
    • toEntity()를 통해 필요한 데이터를 entity로 만들 수 있다.

HelloControllerDto

@Getter
@RequiredArgsConstructor
public class HelloResponseDto {

    private final String name;
    private final int amount;
}
  • @Getter: 선언된 모든 필드의 getter 메서드를 생성해준다.
  • @RequiredArgsConstructor: 선언된 모든 final 필드의 생성자를 생성해준다.

HelloController에 helloDto를 반환하는 코드를 추가하자.


HelloController

@GetMapping("/hello/dto")
public HelloResponseDto helloDto(@RequestParam("name") String name,
                                 @RequestParam("amount") int amount) {
    return new HelloResponseDto(name, amount);
}
  • @RequestParam: 외부에서 API로 넘긴 파라미터를 가져오는 어노테이션이다. 여기선 name, amount로 넘긴 파라미터를 메서드 파라미터(String name, int amount)에 저장하게된다.

  • 만약 해당 파라미터가 없다면 400 error가 발생한다. 파라미터를 받는 다른 방법으로는 @PathVariable이 있다.


이제 Dto가 추가된 Controller를 테스트해보자.


HelloControllerTest

@Test
    public void helloDto가_리턴된다() throws Exception {
        String name = "hello";
        int amount = 1000;

        mvc.perform(
                get("/hello/dto")
                        .param("name", name)
                        .param("amount", String.valueOf(amount)))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.name", is(name)))
                .andExpect(jsonPath("$.amount", is(amount)));
    }
  • .param(): @RequestParam에 넘겨줄 파라미터를 설정한다. String 이외의 다른 type의 데이터는 String으로 변경하여야한다.
  • jsonpath(): JSON필드 응답값을 $를 기준으로 필드별로 검증하는 메서드이다.
  • is(obj): is(equalTo(obj))와 같으며 기댓값인 obj와 같은지 검증한다.

새로운 API 또한 JSON을 잘 리턴하는 것을 볼 수 있다.

profile
여러가지를 시도하는 학생입니다

0개의 댓글