Application 클래스는 앞으로 만들 프로젝트의 메인클래스가 된다.
@SpringBootApplication
: 스프링 부트의 자동 설정, 스프링 Bean 읽기와 생성을 모두 자동으로 설정할 수 있다. 특히 이 위치부터 설정을 읽기 때문에 항상 프로젝트의 최상단에 위치해야만 한다.
SpringApplication.run
: 별도로 외부의 WAS를 두지 않고 애플리케이션을 실행할 때 내부에서 WAS를 실행한다. 항상 서버에 톰캣을 설치할 필요가 없게 되고, 스프링 부트로 만들어진 Jar파일로 실행한다.
🔑 내장 WAS를 사용하는 이유는, 언제 어디서나 같은 환경에서 스프링 부트를 배포 할 수 있기 때문이다. 외장 WAS를 사용하면 종류와 버전을 일치 시켜야 하고, 새로운 서버가 추가되면 모든 서버가 같은 환경을 구축해야만 하기 때문입니다. (팀원들과 프로젝트를 진행하면서 서버때문에 고생을 했었다..)
@RestController
: 컨트롤러를 JSON을 반환하는 컨트롤러로 만들어 줍니다. 프로젝트에서 사용했지만 더 공부가 필요할 것 같다.
@RunWith(SpringRunner.class)
: 테스트를 진행할 때 Junit에 내장된 실행자 외에 다른 실행자를 실행, 스프링부트 테스트와 Junit 사이에 연결자 역할
@WebMvcTest
: spring MVC에 집중할 수 있는 어노테이션이다.
MockMvc
: 웹 API를 테스트할 때 사용한다. 스프링 MVC 테스트의 시작이다.
mvc.perform(get("/hello"))
: HTTP GET 요청을 한다.
andExpect(status().isOK())
: HTTP Headers의 Status를 검증한다. 흔히 알고 있는 200, 400, 500 등의 상태를 검증한다.
andExpect(content().string(hello))
: 결과를 검증한다. 응답 본문의 내용을 검증한다. Controller 에서 hello를 리턴하기 때문에 이 값이 맞는지 검증합니다.
param
: API 테스트할 때 사용도리 요청 파라미터를 설정한다. 단 값은 String만 허용하기 때문에 숫자/날짜 등의 데이터도 등록할 때 문자열로 변경해야만 가능하다.
jsonPath
: JSON 응답값을 필드별로 검증할 수 있다. $를 기준으로 필드명을 명시한다. $ root를 명시하고 .을 통해 원하는 필드명을 검증할 수 있다.