1. 롬복 소개
1) 롬복이란?
- 자바 개발할 때 자주 사용하는 코드 Getter, Setter, 기본 생성자, toString등을 어노테이션으로 자동 생성해주는 라이브러리
2) 롬복의 장단점
(1) 장점
- Lombok은 복잡하고 반복되는 코드를 어노테이션 기반의 코드 자동생성으로 생산성 향상되고 코드가 축소되어 가독성 및 유지보수성을 높일 수 있습니다.
(2) 단점
- 코드가 직접 눈에 보이는 것이 아니라 직관성이 떨어질 수 있다.
2. 롬복 설치
IntelliJ 2020.03 버전 이후로는 Lombok 라이브러리가 기본 Plugin으로 설치되어 있기 때문에 dependencies와 설정만 바꿔주면 된다.
1) dependencies 변경
* Gradle 버전이 올라가면서 Lombok 의존성을 추가하는 방법이 바뀜
- Gradle 5.x 버전 이상
dependencies{
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
}
- Gradle 5.x 미만
dependencies{
implementation 'org.projectlombok:lombok'
}
2) 설정 변경
Setting > Build, Execution, Deployment > Compiler > Annotation Processor에서 Enable annotation processing 체크
3. HelloController 코드 Lombok으로 전환
1) HelloResponseDto
@Getter
@RequiredArgsConstructor
public class HelloResponseDto {
private final String name;
private final int amount;
}
(1) @Getter
- 선언된 모든 필드의 get 메소드를 생성
(2) @RequiredArgsConstructor
- 선언된 모든 final 필드가 포함된 생성자를 생성
- final이 없는 필드는 생성자에 포함되지 않음
2) HelloResponseDtoTest
package com.freitag.admin.dto;
import com.freitag.admin.web.dto.HelloResponseDto;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
public class HelloResponseDtoTest {
@Test
public void lom_test(){
// given
String name = "test";
int amount = 1000;
// when
HelloResponseDto dto = new HelloResponseDto(name, amount);
// then
assertThat(dto.getName()).isEqualTo(name);
assertThat(dto.getAmount()).isEqualTo(amount);
}
}
(1) Given - When - Then
Given : 테스트에서 구체화하고자 하는 행동을 시작하기 전에 테스트 상태를 설명하는 부분
When : 구체화하고자 하는 행동
Then : 어떤 특정한 행동 때문에 발생할거라고 예상되는 변화에 대한 설명
(2) assertThat
- assertj라는 테스트 검증 라이브러리 검증 메소드
- 검증하고 싶은 대상을 메소드 인자로 받음.
- 메소드 체이닝이 지원되어 isEqualTo와 같이 메소드를 이어서 사용할 수 있음.
(3) isEqualTo
- assertj의 동등 비교 메소드
- assertThat에 있는 값과 isEqualTo의 값을 비교해서 같을 때만 성공
=> HelloResponseDtoTest가 정상 수행 되어 Lombok의 @Getter로 get 메소드가, @RequiredArgsConstrutor로 생성자가 자동으로 생성되는 것이 증명
4. HelloController에서 ResponseDto 적용 코드
@GetMapping("/hello/dto")
public HelloResponseDto helloDto(@RequestParam("name") String name, @RequestParam("amount") int amount){
return new HelloResponseDto(name, amount);
}
(1) @RequestParm
- 외부에서 API로 넘긴 파라미터를 가져오는 어노테이션
- 외부에서 name(@RequestParam("name"))이란 이름으로 넘긴 파라미터를 메소드 파라미터 name(String name)에 저장
1) 테스트
@Test
public void hdt() throws Exception{
String name = "hello";
int amount = 1000;
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/hello/dto");
mvc.perform(builder
.param("name",name)
.param("amount", String.valueOf(amount)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name", is(name)))
.andExpect(jsonPath("$.amount", is(amount)));
}
(1) param
- API 테스트할 때 사용될 요청 파라미터를 설정.
- 단, 값은 String만 허용 -> 숫자/날짜 등의 데이터 등록시 문자열로 변경해야 함
(2) jsonPath
- JSON 응답값을 필드별로 검증할 수 있는 메소드
- $를 기준으로 필드명을 명시
'스프링부트와 AWS로 혼자 구현하는 웹서비스' 카테고리의 다른 글
Part 6. 등록/수정/조회 API 만들기 (0) | 2023.12.17 |
---|---|
Part5. 프로젝트에 Spring Data JPA 적용 (0) | 2023.12.14 |
Part 4. JPA (0) | 2023.12.08 |
Part 2. 테스트 코드 작성 (0) | 2023.12.06 |
Part 1. 그레이들 프로젝트를 스프링 부트 프로젝트로 변경하기 (0) | 2023.12.06 |