일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- C++
- loop
- leetcode
- scss
- 보안
- vue.js
- nginx
- npm
- condition
- bash
- type
- AI
- JavaScript
- vuetify
- property
- BOJ
- Python
- webpack
- git
- dotenv
- security
- TypeScript
- machine learning
- 앙상블
- generic
- Clone
- VUE
- C#
- var
- docker
- Today
- Total
ice rabbit programming
[Groovy] Groovy(build.gradle)에서 HTTP 통신하기 본문
아마 build.gradle 파일은 안드로이드 쪽에서 많이 봤을 것이다. 본인이 안드로이드를 했던 시점은 2017~2018년 쯤이라 지금은 달라졌을 수도 있지만, 자바 관련된 빌드를 할 때 build.gradle을 이용한다. 이 파일은 Groovy라는 언어로 작성되는데, Groovy는 자바를 베이스로 파이썬, 루비 등의 특징을 더한 동적 OOP 언어이다. 자바를 베이스로 만들었기 때문에 자바의 라이브러리 등을 가져다 쓸 수 있으며, 자바 개발자들은 시간을 많이 들이지 않고 사용할 정도로 익힐 수 있다. 다만 본인은 자바를 학부 수업 한 개와 안드로이드 조금 외에는 다루어본 적이 없기에...
좌우간 빌드를 할 때 이걸 사용하는데, 자바가 아닌 C# 클라이언트 프로그램임에도 bat 파일들과의 조화를 통해 build.gradle로 빌드가 가능함을 알게 되었다.
오늘 중점적으로 볼 부분은 빌드 자체는 아니고, build.gradle 즉 Groovy에서 HTTP 통신을 하는 방법에 대해서 포스팅하고자 한다.
내장함수 사용하기
def result = new URL("www.mydomain.com").json()
가장 간단하게는 인증이나 헤더 설정 등이 필요 없고, GET으로만 접근해서 받아올 수 있다면 위와 같이 사용할 수 있다. 결과값이 JSON 형태로 result에 담기게 된다.
HTTPBuilder 패키지 사용하기
사실 위처럼 부를 수 있는 경우가 많지는 않고 또 저렇게 부른다 해도 다른 method 등으로 불러야하는 경우가 많을 것이다. 그 때 주로 사용하는 패키지가 HTTPBuilder이다.
import groovyx.net.http.HTTPBuilder
import static groovyx.net.http.ContentType.JSON
import static groovyx.net.http.Method.GET
import static groovyx.net.Method.POST
def getHttp() {
// HTTPBuilder 객체 생성
def httpBuilder = new HTTPBuilder("www.mydomain.com")
// 실제 request 호출
httpBuilder.request(GET) {
// request config 설정
uri.path = '/my/path'
headers.'myOption' = 'option'
uri.query = ['param': 'hi']
// 실패했을 경우(2xx 이외)
response.failure = { resp, json ->
println("API error respone (${resp.statusLine.statusCode}): ${json}")
System.exit(1)
}
// 성공했을 경우(2xx)
response.success = { resp, json ->
println("API Response : ${json}")
result = json
}
}
return result
}
위와 같이 import를 하고, 호출 함수 내부에서 request/response 설정을 하면 된다.
가끔 import 할 수 없다는 에러가 발생하는데, 버전에 따라서 둘 중 하나를 써주면 되겠다.
dependencies {
classpath "org.codehaus.groovy.modules.http-builder:http-builder:0.7.1"
}
compile "org.codehaus.groovy.modules.http-builder:http-builder:0.7.1"
본인은 위의 버전이었는데, 실제로 사용자들은 아래가 많은 것 같다. stackoverflow 등에서 아래 방법이 많이 나와서 import하는 데에 꽤나 헤맸었다. 본인 코드에서 dependencies를 어떻게 걸고있는지에 따라서 유동적으로 해주면 되겠다.
* 추가 : 마크다운에서 코드 블럭에 Groovy 하이라이트를 적용했는데, 티스토리에서 지원하지 않는 것 같다. plain text로 나오고 있다...