package com.ewok.study.springbook;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
// @SpringBootApplication 스프링부트의 자동설정, 스프링 Bean 읽기와 생성을 모두 자동으로 설정
@SpringBootApplication // @SpringBootApplication이 있는 위치부터 설정을 읽기 때문에 항상 프로젝트의 최상단에 위치 해야함
public class Application { // 프로젝트의 메인 클래스
public static void main(String[] args) {
// 내장 WAS를 실행
SpringApplication.run(Application.class, args);
}
}
스프링부트에서는 내장 WAS를 사용하는 것을 권장한다. 왜냐하면 언제 어디서나 같은 환경에서 스프링 부트를 배포할 수 있기 때문이다.
테스트를 위한 Controller 생성
컨트롤러와 관련된 클래스들을 모두 담을 것이다.
package com.ewok.study.springbook.web;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController //JSON을 반환하는 컨트롤러로 만듦
public class HomeController {
@GetMapping("/hello") // Get의 요청을 받을 수 있는 API를 만들어줌
public String hello() {
return "hello";
}
}
package com.ewok.study.springboot.web;
import org.junit.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = HomeController.class)
public class HomeControllerTest {
@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)
- JUnit에 내장된 실행자 외에 다른 실행자를 실행
- 여기서는 SpringExtension이라는 스프링 실행자를 사용
- 스프링 부트 테스트와 JUnit 사이에 연결자 역할
@WebMvcTest(controllers = HomeController.class)
- 여러 스프링 테스트 어노테이션 중, Web(Spring MVC)에 집중할 수 있는 어노테이션
- 선언할 경우 @ Controller, @ControllerAdvice 등을 사용할 수 있음
- @Service, @Component, @Repository 등은 사용할 수 없음
- 여기서는 컨트롤러만 사용하기 때문에 선언함
@Autowired
- 스프링이 관리하는 빈(Bean)을 주입받는다.
private MockMvc mvc;
- 웹 API를 테스트할 때 사용한다.
- 스프링 MVC 테스트의 시작점
- 이 클래스를 통해 HTTP GET, POST 등에 대한 API 테스트를 할 수 있다.
mvc.perform(get("/hello"))
- MockMvc를 통해 /hello 주소로 HTTP GET 요청을 한다.
- 체이닝이 지원되어 아래와 같은 여러 검증 기능을 이어서 선언할 수 있다.
.andExpect(status().isOk())
- mvc.perform의 결과를 검증한다.
- HTTP Header의 Status를 검증한다.
- 200, 400, 500 등의 상태를 검증한다.
- 여기서는 OK 즉, 200인지 아닌지를 검증한다.
.andExpect(content().string(hello));
- mvc.perform의 결과를 검증
- 응답 본문의 내용을 검증
- Controller에서 "hello"를 리턴하기 때문에 이 값이 맞는지 검증
이제 수동으로 한번 실행해서 정상적으로 값이 출력되는지 확인해 보자
테스트 코드로 먼저 검증 후, 정말 못 믿겠다고 생각되면 프로젝트를 실행해 확인한다.
이후 과정은
https://github.com/hong-sing/springboot-webservice/wiki
Home
스프링 부트와 AWS로 혼자 구현하는 웹 서비스. Contribute to hong-sing/springboot-webservice development by creating an account on GitHub.
github.com
위키에다 메모를 해놓았다.
'SpringBoot > AWS' 카테고리의 다른 글
무중단 배포를 진행하며 겪은 에러 (0) | 2023.03.19 |
---|---|
무중단 배포 (0) | 2023.03.19 |
CodeDeploy 로그 확인 (0) | 2023.03.18 |
Github Actions 배포 자동화 (0) | 2023.03.18 |
스프링 부트 시작하기 (0) | 2023.03.14 |