끊임없이 검증하라

나에게 당연할지라도

Project

P1_클론 프로젝트(feat. 스프링부트와 AWS로 혼자 구현하는 웹 서비스)_2

fadet 2022. 3. 25. 16:38

* 이 포스트는 전 배달의민족, 현재 인프런에 계시고 유튜브 개발바닥의 크리에이터이신 개발자 이동욱님의 '스프링부트와 AWS로 혼자 구현하는 웹 서비스'를 기반으로 작성되었음을 알립니다. 포스트 맨 아래에 관련 링크가 있습니다. 책의 내용을 기반으로 작성되기에 실습 중이라면 책을 main 해당 포스트를 sub로 참고해주세요. 책의 설명이 부족한 부분 위주로 포스트가 구성됩니다.


 

포스트를 시작하기에 앞서 책의 처음에도 언급된 인텔리제이 얘기를 좀 해볼텐데 필자는 이클립스를 사용해보지 않고  개발 입문에 이거저거 해볼땐 vscode에 플러그인을 추가해서 사용했고 이후 JAVA를 공부할땐 인텔리제이를, 파이썬은 파이참(인텔리제이의 파이썬 버전이라고 생각하면 됨)을 사용했기에 IDE는 총 3개(사실상 두개)를 사용해보았습니다. 이 중  vscode는 무료니 넘어가고 나머지는 둘다 community버전을 사용했음에도 불구하고 매우 주관적이지만 vscode보다 여러 의미로 편했습니다. 하지만 개발도구에 정석이란 없고 IDE는 사용하기 시작하면 다른것으로 안 바꾸게되니 개발 입문자의 시선에서 IDE를 살펴본다면 살짝 무겁지만 한 번 깔면 설정이 더 쉽고 특정 언어에 특화된 인텔리제이, 파이참을 사용하고 가볍고 여러 언어를 공부 중인데다 자신이 플러그인 등의 설정이 어색하지 않다면 vscode를 사용하는 것을 추천합니다. 물론 이 책을 진행하는데 있어 인텔리제이를 안쓰면 선행 지식이 좀 있지 않은 이상 힘들 것 같기에 이 책 만큼은 인텔리제이를 사용해보시길 바랍니다.

 

앞선 포스트에서 언급했었지만 책에 소개된 사항 중 dependency를 받는 원격저장소인 jCenter가 2022년 2월부로 지원 중단되었습니다. 악성코드 이슈때문으로 대충 알고있지만 필자도 자세한 이유는 모릅니다. 이를 제외하고 책의 1장에선 큰 어려움은 없을 것이므로 바로 2장으로 넘어가겠습니다.

 

2.1 테스트코드

 

- 책에도 테스트에 대한 중요성이 크게 언급되고 필자 역시 스프링을 배우며 항상 테스트를 함께 배우기에 당연하다고 여기고 넘어갈 수 있지만 책의 내용대로 다른 내용을 리팩토링 했을때 그대로 통과되는 테스트가 얼마나 개발자들의 할 일을 줄여주는지 다시 한 번 명심하길 바랍니다.

 

이 책의 테스트는 단위 테스트(Unit Test)에 대한 학습을 하며 통합 테스트(Integration Test)에 대한 내용은 다루지 않습니다. 하지만 TDD와 통합 테스트에 대한 내용은 다른 포스트들을 보고서라도 숙지하길 바랍니다. 각설하고 포스트는 테스트 라이브러리인 jUnit5를 사용합니다. 책은 jUnit4를 사용했으니 이미 4로 작성한 사람은 아래에 있는 저자의 블로그를 보고 고치도록 합시다. 

 

2.2 HelloControllerTest 작성

 

# HelloControllerTest

저자의 블로그를 참고해서 수정했으면 @Runwith가 @ExtendWith로 바뀐 것을 알 것입니다. 그리고 팁을 하나 드리자면 HelloController에 위치하고 윈도우기준 Ctrl+Shift+T 커맨드를 입력하면 해당클래스명+Test를 test 패키지에 생성하는 창이 뜹니다. 해당 테스트가 존재하면 그 테스트로 바로 이동합니다. 

@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {

    @Autowired
    private MockMvc mvc;

이때, @WebMvcTest는 mvc 기능을 테스트하기 위해 붙였으니 MockMvc를 주입받아 테스트코드를 완성합니다. 주입에 대해선 스프링을 공부한 사람은 다 알 것이라 생각하지만 해당 코드의 mvc는 스프링 컨테이너를 통해 관리되는 객체를 주입받은 것입니다. 또한 숙련자 중에 @WebMvcTest가 어색한 사람이 있을 수도 있으나 추후 설명하므로 일단 넘어가겠습니다.

 

2.3 Lombok 소개 및 설치

2.4 Lombok으로 HelloControllerTest 전환

 

# HelloControllerTest

책과 조금 다른 점은 최신 인텔리제이 버전에선 롬복 플러그인은 자동으로 installed되므로 dependency추가와 annotation processing만 켜주면 됩니다. 최근 롬복을 사용하지 않는 코드들은 드무니 이에 대한 설명은 책에 있는 내용이면 충분하다 생각하지만 혹시나 해서 기본적인 부분을 체크하자면

public class HelloResponseDto {
    private final String name; // final을 제거하면 @RequiredArgsConstructor 작동 x
    private final int amount;
    
    // @RequiredArgsConstructor로 리팩토링
  	public HelloResponseDto(String name, int amount) {
        this.name = name;
        this.amount = amount;
    }
    
    // @Getter로 리팩토링
    public String getName() {
        return name;
    }
    public int getAmount() {
        return amount;
    }

이 귀찮은 코드를 롬복으로 리팩토링한 것입다. 다음으로 assertThat 관련인데 책의 assertThat은 assertj라는 검증 라이브러리의 검증 메소드로 static import를 통해 코드가 줄어든 것입니다. 

 import static org.assertj.core.api.Assertions.assertThat;
 
 	//then
        assertThat(dto.getName()).isEqualTo(name);
        assertThat(dto.getAmount()).isEqualTo(amount);

한마디로 원래는 Assertions.assertThat이었던 코드였던걸 줄인 것이고 여기서 주의할 점은 책에도 나왔듯 import시 두 개가 추천될텐데 jUnit5의 assertThat이 아닌 assertj의 assertThat을 쓸 것을 자동완성, 확장성 면에서 추천합니다. 마지막으로 HelloControllerTest에서 json이 리턴되는 것을 콘솔에서 확인하면 2장이 마무리됩니다.


refer

이동욱님 블로그의 관련 포스트 : https://jojoldu.tistory.com/539?category=717427

개발바닥 유튜브 :https://www.youtube.com/channel/UCSEOUzkGNCT_29EU_vnBYjg

 

개발바닥

본격 세계최초 DEV 엔터테인먼트 토크쇼 두 스타트업 개발자의 요절복통 이야기 구독 안하면 장애남!!

www.youtube.com

이동욱님 github의 해당 repository : https://github.com/jojoldu/freelec-springboot2-webservice