시스템 서비스 규모가 커지고 마이크로서비스 개념이 확산되어가면서 많은 프로젝트에서 서비스간에 통신 방식으로 REST API를 선호 하고 있다.
이 페이지에서는 REST API 사용자 입장(Client)에서 활용할 수 있는 JAVA Library를 알아보고자 한다.
REST API Client에 JAVA Library로는 HttpURLConnection, HttpClient, OkHttp, Retrofit, RestTemplate를 대표적으로 들 수 있다. 이것 이외에도 수많은 Library가 존재하지만 많은 개발자가 선택하고 사용하고 있는 4가지 Library에 대해 간략하게 알아보자.
1. HttpURLConnection
- 기본 JDK에 포함되어 있음. (jdk1.2부터 내장되어 있으며 java.net 패키지에 있다.)
- 상대적으로 가벼우며 핵심적인 API만 지원하고 있음.
- HttpClient 보다 성능이 좋다고 함. (유사 사례 확인 결과 HttpClient에서 Server와 Client연결에 속도 이슈가 있어 HttpURLConnection으로 수정한 사례가 확인됨.)
- 서버로부터 전달 받은 Response 결과를 Stream으로 직접 처리해야 하는 등.. 개발 생산성이 떨어지는 요소가 다소 있음.
- 참고 : http://digitalbourgeois.tistory.com/57
2. HttpClient
- Apache에서 제공
- HttpClient는 3버전과 4버전이 있으며 4버전부터는 HttpComponents로 불리고 있음.(단, 3버전과 4버전은 둘간 직접적인 호환은 되지 않음)
- HttpComponents(4버전) 부터는 Thread에 안정적인 기능들을 많이 제공함.
- 상대적으로 무거움
- HttpURLConnection 대비 다양한 API를 지원함.
3. OKHttp
- Square의 오픈소스 프로젝트
- OKHttp는 통신을 동기화로 할지 비동기로 처리 할지 선택하여 사용할 수 있음.
- 단 스레드를 넘나들 수 없음. (스레드간에 데이터를 공유하기 위해서는 Handler를 활용해야함)
4. Retrofit
- Square의 오픈소스 프로젝트
- 어노테이션을 사용하여 개발할 수 있으므로 개발의 생산성 및 가독성이 올라감.
- 어노테이션을 사용하여 코드를 생성하기 때문에 인터페이스를 적용하여 주로 개발함.
- 사용법 및 샘플 소스 : https://dev-juyoung.github.io/2017/11/10/android-retrofit-basic/
5. RestTemplate
- Spring3부터 지원함.
- Boilerplate code를 줄여줌.(Spring의 Template이 제공하는 장점 중 하나)
String result = restTemplate.getForObject( "http://example.com/hotels/{hotel}/bookings/{booking}" , String. class , "42" , "21" ); 출처 : http: //spring.io/blog/2009/03/27/rest-in-spring-3-resttemplate |
- 사용법 및 샘플 소스 : http://blog.saltfactory.net/using-resttemplate-in-spring/
<추가 Library소개>
*Volley : 사용법이 복잡한 HttpUrlConnection 대안으로 구글이 제공하는 라이브러리로 안드로이드에서 사용함.
어떤 Library를 사용하는 것이 좋을까?
정답은 개발자만이 안다. 자신이 개발하고자 하는 서비스에 적합한 Library를 검토후 적용하는 것을 추천한다. 가볍고 빠른 속도의 성능을 원한다면 개발 생산성이 다소 떨어지지만 HttpURLConnection를 사용하는 것이 좋을 것이며 개발 생산성 및 안정성을 더욱 우선시 한다면 Retrofit or RestTemplate(Spring 프로젝트)을 추천한다.
'JAVA' 카테고리의 다른 글
[JAVA] OkHttp로 REST API 호출하기 (0) | 2019.01.18 |
---|---|
[JAVA] HttpClient로 REST API 호출하기 (0) | 2019.01.18 |
[JAVA] HttpURLConnection로 REST API 호출하기 (0) | 2019.01.18 |
[JAVA 8] 메서드 레퍼런스 알아보기! (0) | 2018.09.21 |
[JAVA 8] 형식 검사, 형식 추론, 제약 (0) | 2018.09.18 |