본문 바로가기

Spring Boot

2022 GDSC Spring Study 입문 - 1주차

728x90

Chapter 01. 인텔리제이로 스프링 부트 시작하기

인텔리제이로 스프링 부트를 다룬 적이 있어 넘어가도록 하겠다

 

Chapter 02. 스프링 부트에서 테스트 코드를 작성하자

1. 테스트 코드 소개

TDD vs Unit Test

TDD: 테스트가 주도하는 개발

         테스트 코드를 먼저 작성하는 것부터 시작한다

Unit Test: 기능 단위의 테스트 코드를 작성한다

 

Unit Test의 장점

개발 단계 초기에 문제를 발견하게 도와준다

코드를 리팩토링하거나 라이브러리 업그레이드 등에서 기존 기능이 올바르게 작동하는지 확인할 수 있다

기능에 대한 불확실성을 감소시킬 수 있다

시스템에 대한 실제 문서를 제공한다 -> 단위 테스트 자체를 문서로 사용할 수 있다

 

Java에서 테스트 코드 작성을 도와주는 프레임워크는 JUnit이다

DB - DBUnit

C++ - CppUnit

.net - NUnit

2. Hello Controller 테스트 코드 작성하기

- 일반적으로 패키지명은 웹 사이트 주소의 역순으로 한다

(1) @SpringBootApplication

     스프링 부트의 자동 설정, 스프링 Bean 읽기와 생성을 모두 자동으로 설정한다

    존재하는 위치부터 설정을 읽기 때문에 이 클래스는 항상 프로젝트 최상단에 있어야 한다

(2) SpringApplication.run

     내장 WAS*(Web Application Server)를 실행한다

      -> 항상 서버에 톰캣을 설치할 필요가 없게 되고, 스프링 부트로 만들어진 Jar 파일로 실행하면 된다

      내장 WAS: 별도로 외부에 WAS를 두지 않고 애플리케이션을 실행할 때 내부에서 WAS를 실행하는 것

 

(1) @RestController

     컨트롤러를 JSON을 반환하는 컨트롤러로 만들어 준다
    예전에는 @ResponseBody로 각 메소드마다 선언되었다
(2) @GetMapping

     HTTP Method인 Get 요청을 받을 수 있는 API를 만들어 준다
    예전에는 @RequestMapping으로 사용되었다

 

(1) @RunWith(SpringRunner.class)

     테스트를 진행할 때 JUnit에 내장된 실행자 외 다른 실행자를 실행시킨다
     여기서는 SpringRunner라는 스프링 실행자를 사용했다
     => 스프링 부트 테스트와 JUnit 사이에 연결자 역할
(2) @WebMvcTest

     Web(Spring MVC)에 집중할 수 어노테이션
     선언 시 @Controller, @ControllerAdvice 등을 사용할 수 있다
     단, @Service, @Component, @Repository 등은 사용할 수 없다
(3) @Autowired

     스프링이 관리하는 Bean을 주입받는다
(4) private MockMvc mvc

     웹 API를 테스트할 때 사용한다
     스프링 MVCdml 시작점이다
     HTTP GET, POST 등에 대한 API 테스트를 할 수 있다
(5) mvc.perform(get("/hello"))

     MockMvc를 통해 /hello 주소로 HTTP GET 요청을 한다
     체이닝이 지원되어 아래((6), (7))와 같이 여러 검증 기능을 이어서 선언할 수 있다
(6) .andExpect(status().isOk())

     mvc.perform의 결과를 검증한다
     HTTP Header의 Status를 검증한다
     200, 404, 500 등의 상태를 검증한다
     여기에선 OK 즉, 200인지 아닌지를 검증한다
(7) .andExpect(content().string(hello))

     mvc.perform의 결과를 검증한다
     응답 본문의 내용을 검증한다
     Controller에서 "hello"를 리턴하기 때문에 이 값이 맞는지 검증한다

 

3. 롬복 소개 및 설치하기

롬복: 자바 개발 시 자주 사용하는 Getter, Setter, 기본 생성자, toString 등을 어노테이션으로 자동 생성해 준다설치도 이미 되어있으므로 넘어가도록 하겠다

 

4. Hello Controller 코드를 롬복으로 전환하기

(1) @Getter

     선언된 모든 필드의 get 메소드를 생성해 준다

(2) @RequiredArgsConstructor

     선언된 모든 final 필드가 포함된 생성자를 생성해 준다

     final이 없는 필드는 생성자에 포함되지 않는다

 

(1) assertThat

     assertj라는 테스트 검증 라이브러리의 검증 메소드

     검증하고 싶은 대상을 메소드 인자로 받는다

     메소드 체이닝이 지원되어 isEqualTo와 같이 메소드를 이어서 사용할 수 있다

(2) isEqualTo

     assertj의 동등 비교 메소드

     assertThat에 있는 값과 isEqualTo의 값을 비교해서 같을 때만 성공이다

 

(1) @RequestParam

     외부에서 API로 넘긴 파라미터를 가져오는 어노테이션

     여기에서는 외부에서 name(@RequestParam("name"))이란 이름으로 넘긴 파라미터를

    메소드 파라미터 name(String name)에 저장하게 된다

 

(1) param

     API 테스트할 때 사용될 요청 파라미터를 설정한다

     단, 값은 String만 허용한다

     그래서 숫자/날짜 등의 데이터도 문자열로 변경해야 한다

(2) jsonPath

     JSON 응답값을 필드별로 검증할 수 있는 메소드

     $를 기준으로 필드명을 명시한다

     여기서는 name과 amount를 검증하니 $.name, $.amount로 검증한다

 

 

 

 

 

이전에 혼자 공부할 때에는 테스트 코드의 존재만 알고 넘어갔는데, 이번에는 테스트 코드로 시작을 하기 때문에 그 중요성이 와닿는 것 같아 좋았다

 

 

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 교보문고

인텔리제이, JPA, JUnit 테스트, 그레이들 | 이 책은 제목 그대로 스프링 부트와 AWS로 웹 서비스를 구현합니다. JPA와 JUnit 테스트, 그레이들, 머스테치, 스프링 시큐리티를 활용한 소셜 로그인 등으

www.kyobobook.co.kr