이 글은 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 책을 참고하여 작성되었습니다.

1. Application.java

프로젝트의 메인 클래스이다. @SpringBootApplication annotation을 통해 설정, bean 읽기 및 생성 등을 자동으로 설정한다. 현재 위치부터 하위 파일로 설정을 읽기 때문에 항상 최상단에 위치하여야한다.
내장 WAS를 사용하는데, 이러면 언제 어디서나 같은 환경에서 스프링 부트 배포가 가능하다고한다. 톰캣과 유사한 코드를 사용해 성능상 이슈는 거의 없다고 본다.

2. HelloController.java

처음으로 작성해보는 API이다. 첫 코드니깐 구석구석 살펴 보겠다.


@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }
}
  • @RestController: 해당 Controller가 JSON을 반환하도록 만들어준다.
  • @GetMapping: HTTP methodGet의 요청을 받을 수 있는 API를 만들어 준다.
  • hello(): 위의 annotation으로인해 /hello 주소로 요청이 오면 hello라는 문자열을 반환한다.

3. HelloControllerTest.java

마찬가지로 처음으로 작성해보는 테스트 코드이다. 해당 클래스 이름 뒤에 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() 등을 사용해 각각 응답코드와 본문내용을 검증한다.

profile
여러가지를 시도하는 학생입니다

0개의 댓글