- 패키지 명은 웹사이트 주소의 역순
com.jojoldu.book.springboot 패키지를 만든다.
- Application 클래스를 만든다.
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@SpringBootApplication은 스프링 부트의 자동설정, 스프링 bean읽기와 생성을 모두 자동으로 설정해준다.
@SpringBootApplication의 위치부터 설정을 읽어 나가기 때문에 프로젝트의 최상단에 위치하는 것이 좋다.
-내장 WAS의 장점 : 외장 WAS를 쓰면 WAS의 종류와 버전, 설정을 일치시켜야만 한다. 새로운 서버가 추가되면 모든 서버가 같은 WAS환경을 구축해야한다.
controller 작성
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
@RestController
- 컨트롤러를 json을 반환하는 객체로 만들어줍니다.
- 예전에는 @ResponseBody를 각 메소드마다 선언했던 것을 한 번에 사용할 수 있게 해준다.
@GetMapping
- HTTP Method인 Get의 요청을 받을 수 있는 API를 만들어줍니다.
- 예전에는 @RequestMapping(method = RequestMethod.GET)으로 사용되었음
ControllerTest작성
@RunWith(SpringRunner.class)
@WebMvcTest
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));
}
@Runwith(SpringRunner.class)
- 테스트를 진행할 때 junit에 내장된 실행자 외에 다른 실행자를 실행시킨다.
- 여기서는 springRunner라는 스프링 실행자를 사용한다.
- 즉, 스프링 부트 테스트와 junit 사이에 연결자 역할.
- junit 4에서 동작한다. junit5에서는 동작하지 않는다.
@webmvcTest
-여러 스프링 테스트 어노테이션중, web에 집중할 수 있는 어노테이션이다.
- 선언할 경우 @Controller, @ControlerAdvice를 사용할 수 있다.
- 단, @Service, @Conponent, @Repoditory등은 사용할 수 없다.
- 이것도 junit5에서는 동작하지 않는다.
@Autowired
-스프링이 관리하는 빈을 주입받는다.
@private MockMvc mvc
- 웹 API를 테스트할 대 사용합니다.
- 스프링 MVC테스트의 시작점입니다.
-이 클래스를 통해 HTTP GET, POST 등에 대한 API를 테스트 할 수 있다.
@mvc.perform(get("/hello"))
- MockMvc를 통해 /hello 주소로 HTTP GET 요청을 한다.
- 체이닝이 지원되어 아래와 같이 여러 검증 기능을 이어서 선언 할 수 있다.
☞ 체이닝이란? 예를 들어 메소드에서 this를 반환하여 메소드를 이어 붙여서 쓸 수 있도록 하는 것이다. (https://dreamcoding.tistory.com/60)
@.andExpect(status().isOk())
- mvc.perform의 결과를 검증
- HTTP Header의 Status를 검증
- 우리가 흔히 알고 있는 200,404,500 등의 상태를 검증한다.
- 여기선 OK 즉, 200인지 아닌지 검증
@.andExpect(content().string(hello))
- mvc.performd의 결과를 검증
- 응답 본문의 내용을 검증
- "hello"를 리턴하는 지 검증
HelloReponseDto
@Getter
@RequiredArgsConstructor
public class HelloResponseDto {
private final String name;
private final int amount;
}
롬복사용
ReponseDto를 사용하도록 HelloController에 아래를 추가
@GetMapping("/hello/dto")
public HelloResponseDto helloDto(@RequestParam("name") String name,
@RequestParam("amount") int amount) {
return new HelloResponseDto(name, amount);
}
@RequestParam
- 외부에서 API로 넘긴 파라미터를 가져오는 어노테이션.
Hellocontroller에는 아래를 추가
@Test
public void hellodto가_리턴된다() throws Exception{
String name = "name";
int amount = 1000;
mvc.perform(
get("/hello/dto")
.param("name", name)
.param("amount", String.valueOf(amount))
)
.andExpect(status().isOk())
.andExpect(jsonPath("$.name", is(name)))
.andExpect(jsonPath("$.amount", is(amount)));
}
@param
- API테스트할 때 사용될 요청 파라미터를 설정.
- 값은 string만 허용
@jsonPath
- json응답값을 필드별로 검증할 수 있는 메소드.
- $를 기준으로 필드명을 명시.
'프로젝트 > 스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 카테고리의 다른 글
전체 조회 화면 만들기 (0) | 2022.09.06 |
---|---|
게시글 등록화면 만들기 (0) | 2022.09.05 |
머스테치로 화면 구성 (0) | 2022.09.05 |
인텔리제이에서 깃허브 연결 (0) | 2022.09.01 |
build.gradle에서 스프링 부트 설정 (0) | 2022.09.01 |