이 글은 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 책을 참고하여 작성되었습니다.
프로젝트의 메인 클래스이다. @SpringBootApplication
annotation을 통해 설정, bean 읽기 및 생성 등을 자동으로 설정한다. 현재 위치부터 하위 파일로 설정을 읽기 때문에 항상 최상단에 위치하여야한다.
내장 WAS를 사용하는데, 이러면 언제 어디서나 같은 환경에서 스프링 부트 배포가 가능하다고한다. 톰캣과 유사한 코드를 사용해 성능상 이슈는 거의 없다고 본다.
처음으로 작성해보는 API이다. 첫 코드니깐 구석구석 살펴 보겠다.
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
@RestController
: 해당 Controller가 JSON을 반환하도록 만들어준다.@GetMapping
: HTTP method인 Get의 요청을 받을 수 있는 API를 만들어 준다.마찬가지로 처음으로 작성해보는 테스트 코드이다. 해당 클래스 이름 뒤에 Test를 붙인다고한다. 마찬가지로 구석구석 살펴 보겠다.
@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void hello가_리턴된다() throws Exception {
String hello = "hello";
mvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string(hello));
}
}
@ExtendWith(SpringExtension.class)
: Junit5에서 바뀐 annotation이다. 테스트 진행 시에 내장된 실행자 대신 지정된 실행자(SpringExtension)을 실행시켜 진행한다. 스프링부트 테스트와 JUnit사이의 중간자 역할을 한다.@WebMvcTest
: Web(Spring Mvc)에만 집중하는 테스트 annotation이다. 보통 컨트롤러 사용 시에 선언된다.@Autowired
: 스프링이 관리하는 bean을 주입받는다.private MockMvc mvc
: 웹 API 테스트 시 사용하는 클래스이며 HTTP GET, POST 등에 대한 테스트가 가능하다.mvc.perform(get("/hello"))
: /hello주소로 HTTP GET 요청을 보내며, 체이닝으로 여러 검증기능을 이어서 선언 가능하다..andExpect()
: mvc.perform()
의 결과를 검증하며 status(), content() 등을 사용해 각각 응답코드와 본문내용을 검증한다.