IntelliJ의 Http Client 사용하기
IntelliJ에서 제공하는 Http Client가 생각보다 편리해서 간단하게 사용하는 법만 정리해놓는다. 더 자세한 내용은 https://www.jetbrains.com/help/idea/http-client-in-product-code-editor.html 를 참고하면 될 것 같다.
1. actuator 추가하기
IntelliJ 2018.1 버전부터 추가된 기능인데, Controller의 @RequestMapping 기반으로 http 테스트를 자동으로 실행해주는 기능이 있다.
이 기능을 사용하기 위해서는 Spring Boot의 Actuator를 추가해주어야 한다.(Http Client 사용 자체는 Actuator를 추가하지 않아도 사용할 수 있다.)
gradle 기반으로 프로젝트를 생성했기 때문에 아래와 같이 build.gradle에 추가해주었다.
dependencies {
...
compile('org.springframework.boot:spring-boot-starter-actuator')
}
그리고 Spring Boot 애플리케이션을 실행시키고 Controller에 들어가면 아래와 같이 왼쪽에 Run icon들이 생긴 것을 볼 수 있다.
2. Http Client 사용하기
사용하는 방법은 간단하다. 위에 생긴 초록색 Run icon을 클릭하면, 위의 이미지와 같이 3가지를 사용할 수 있다.
-
Run HTTP Request : 바로 실행이 되고, 결과는 아래와 같이 바로 볼 수 있다.
-
Open in HTTP Request Editor : 아래와 같이 HTTP Request Editor를 열어서 필요한 부분들을 추가, 수정하여 사용할 수 있다. 여기서는 새로운 Account를 저장하는 부분을 테스트하기 위해서 Content-Type하고, Request Body를 추가해서 실행하였고, 결과는 바로 아래에 보는 것과 같이 정상적으로 추가되었음을 알 수 있다.
-
Open in Browser : 브라우저에서 바로 실행한다.
-
File > New > HTTP Request 파일을 선택해서 .http 파일을 생성해서 직접 작성해 줄 수도 있다.
3. Http Client에 environment variables 사용하기
local, dev, st 환경에서 번갈아가면서 테스트할 때 꽤나 유용했다. http-client.env.json
파일을 생성하고, 아래와 같이 local, dev, st, production 등에서 사용할 정보들을 입력해준다
{
"local": {
"apiAddress" : "http://localhost",
"username" : "localUser01",
"password" : "password01"
},
"dev": {
"apiAddress" : "http://dev.xxxxx.com",
"username" : "devUser01",
"password" : "password01"
},
...
}
그리고 Request Editor에서 아래와 같이 변경해주고 실행하게 되면, 사용할 environment를 선택할 수 있다.
그리고 응답을 받은 데이터를 .http
의 변수에 저장하고, 다른 테스트에서 변수에 저장된 값을 사용할 수 있다. 예를 들면, 위의 /authorizationKey
요청을 통해서 아래와 같은 응답을 받는다고 가정해보자
{
"returnCode": "200",
"returnData": {
"authorizationKey": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}
}
이 응답에 존재하는 authorizationKey를 아래와 같이 변수에 저장할 수 있다.
authorizationKey 변수를 사용해서 다른 요청을 하는 방법은 아래와 같다.
4. file upload(2019.02.18 추가)
### file upload POST http://localhost:8080/upload Content-Type: multipart/form-data; boundary=WebAppBoundary --WebAppBoundary Content-Disposition: form-data; name="file"; filename="test.png" < /Users/eomdev/Desktop/test.png --WebAppBoundary--