package tobyspring.hello;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(String name) {
return "Hello " + name;
}
}
앞서 작성한 Hello 컨트롤러를 브라우저에서 간단하게 테스트 해봤다.
Hell 라는 URL 로 시작하는 경로 뒤에 Query String 으로 name 이라는 파라미터를 주고 파라미터 값이 Hello 라는 문자열 뒤에 붙어 리턴 되어 화면 상에 보이는 것을 확인함으로써 우리가 만든 컨트롤러의 기능이 기대한 대로 정상적으로 동작한다와 같은 테스트를 하긴 했는데, 과연 우리가 만드는 웹 컨트롤러의 기능을 이렇게 브라우저 화면을 통해서만 테스트 가능한지와 이걸로 충분한지 생각해봐야 할 것.
API 테스트를 하는 방법이 브라우저를 이용하는 방법도 있지만, 이보다는 사실 좀 더 세밀하게 테스트 해야 될 경우가 있다.
웹 애플리케이션은 기본적으로 웹 클라이언트에서 전달하는 HTTP 요청, 리퀘스트를 받아서 다이나믹한 컨텐츠를 생성하고 그걸 HTTP Response 응답으로 리턴하는 그런 기능을 수행하는데 이 요청과 응답이 우리가 생각한대로 바르게 전달되고 기능을 수행한 뒤에 응답이 만들어지는가 하는 이 모든 과정을 다 살펴봐야만 API 의 모든 기능을 테스트했다고 볼 수 있다.
HTTP API 를 테스트하는데 우리가 사용하는 도구들이 많이 있는데 흔히 사용할 수 있는 것 중 하나가 웹 브라우저에서 웹 브라우저 도구를 이용하는 것. 크롬의 개발자 도구를 열어보면 여기서 어떤 요청을 보내고 화면에 출력하는 작업을 수행할 때 실제로 어떤 요청을 갖고 어떤 헤더값이 전달되고 헤더값을 받았는지 바디가 어떻게 오고 그 타입이 무엇인지와 같은 추가적인 정보들을 확인할 수 있다. Chrome DevTools 참고
웹브라우저 도구를 통해 API 테스트 하는 법
헤더를 먼저 체크
요청하는 헤더로 어떤 정보가 날라가는지, 왜냐면 헤더 정보도 중요한 요청의 구성 요소이기 때문. 이 헤더가 어떻게 구성되느냐에 따라서 웹 애플리케이션이 동작하는 방식이 달라지기도.
요청 타입 체크
특별한 form 이나 api, 자바스크립트 코드 같은 것이 동작해서 요청이 간 게 아니라면 url 넘어가는 건 Request Method, http method 라고 하는 메소드 타입 체크
응답 타입 체크
응답으로 상태코드 200 이 리턴이 되었는지 체크함으로써 문제없이 결과를 처리했고 응답을 만들었다는 것을 확인.
응답에도 헤더가 많이 붙는데 이 중 Content-Type 을 눈여겨봐야한다. 화면에 뿌려진게 HTML 인지, JSON 인지 아니면 단순 텍스트인지 등을 알아야 하는데 이는 응답 헤더의 컨텐츠 타입을 보면 된다.
이런 상세한 정보들이 우리가 애플리케이션을 만들 때 이 컨틀로러 API 를 호출할 때 기대했던 것인지, 그 기대했던 대로 동작하는지까지 확인하는게 필요하다.
물론 크롬브라우저로 테스트도 가능하지만 생각보다 사용에 불편할 수 있다. 그래서 보통 많이 사용하는 것들 중 하나가 커맨드 라인에서 쓸 수 있는 도구들을 이용한다.
curl
윈도우나 맥 환경에서 지원되는 curl 명령어를 통해 원하는 http 요청을 만들고 응답이 어떻게 돌아왔는지 눈으로 확인할 수 있다.
간단한 명령으로 HTTP 요청과 응답을 확인해볼 수 있기에 선호하면 강의에서 주로 사용할 예정