자바 애너테이션 기반의 HTTP 클라이언트 라이브러리.


안드로이드 관련 프로젝트를 진행하면서 안드로이드 애플리케이션이나 SDK에서 안드로이드 SDK를 제외하고 가장 많이 공통적으로 쓰였던 부분은 HTTP Client가 아니었나 싶다.

HTTP 통신은 비교적 손이 많이 가는 편이고, 핵심 코드에 비해 주변코드가 많이 작성된다. DB를 프로그래밍 할 때와 비슷하게 주변코드는 공통적으로 처리되는 부분이 많고, 핵심 코드에 집중해서 HTTP 클라이언트를 작성하고 싶다는 생각을 항상 하고 있어서, 이를 애너테이션 기반으로 만들어보면 어떨까 하는 생각에 구상하게 되었다.


프로젝트 네이밍은 자바의 애너테이션 기호인 @을 우리말로 읽을 때 '골뱅이'라고 많이 읽는 것에서 '골뱅'으로 하고, 영어로 쓰면 'gol bang'이므로, 의미는 없지만 '#!' 을 해쉬뱅(Hash bang)으로 읽으니 'Gol!' 으로 축약하였다. (하이고 의미없다, 그치만 개인적으로는 마음에 든다 하하;)


Gol!의 목표는 HTTP 통신을 간편하게 핵심코드만으로 처리할 수 있도록 하는 것이다. 즉 핵심 로직에만 집중할 수 있도록 하여 생산성을 향상시키는데 있다. 고려해야하는 것들은 HTTP 프로토콜, 비동기 요청의 처리 및 비동기 요청 시의 콜백 처리 등이다.

Gol!의 기본적인 개념은 메서드와 HTTP 요청을 1:1로 매핑하는 것이고, 메서드 호출이 곧 HTTP 요청이며, 메서드 파라미터는 쿼리스트링이나 HTTP 메시지 본문이 되며, 리턴 타입이 응답 메시지이다. (비동기의 경우에는 리턴에 대한 처리를 콜백에서 하도록 해야한다.) 이 외에 요청에 관한 데이터(헤더, 요청 URL, 메서드 등)은 애너테이션을 통해 메타 데이터로 제공한다. 애너테이션의 경우 리터럴 상수만 인자로 받을 수 있으므로, 동적으로 요청에 대한 정보를 변경할 수 없다. 따라서 메서드 파라미터 애너테이션을 통해 요청에 대한 정보를 동적으로 제공할 수 있도록 설계하여야 한다.

개별 요청에 대한 정보는 메서드 및 메서드 애너테이션으로 제공하고, 서버에 대한 공통적인 설정은 인터페이스에서 할 수 있도록한다.


기본적으로는 위와 같은 모습으로 메서드가 작성이 되고, 자바의 동적 프록시를 통해 HTTP 요청을 공통으로 처리할 것이므로, 위 요청 메서드는 인터페이스 내에 작성하도록 한다. 따라서 Gol! 사용시에는 요청에 대한 데이터만 인터페이스로 제공하고, 요청에 대한 세부적인 로우레벨의 코드 구현은 최대한 배제할 수 있도록 한다.


예상되는 가장 큰 이슈는 메모리와 속도 이슈가 아닐까싶다. 애너테이션은 리플렉션을 통해 실제 값을 얻을 수 있으므로 여기에서 한번 속도 및 메모리 이슈가 발생하고, 사용자의 구현을 단순하게 하게 위해서 동적 프록시를 적용하게 되므로 또 한번 속도 및 메모리 이슈가 발생한다. 또한 사용자 구현은 단순화되지만, 라이브러리 자체의 복잡도가 높아져서 설계를 잘해야할 듯 하다.. ㅜㅜ


조금씩이라도 부지런하게 작성하고, 개선해봐야겠다. :)

'싹이 움트다 > GolBang(@!)' 카테고리의 다른 글

GolBang(gol!) - Annotation-based HTTP Client for Java  (0) 2015.02.23
Apache Commons HttpClient 라이브러리를 찾을 수가 없다!

자바 표준 라이브러리의 Http관련 클래스를 쓰려고 찾다보니 예제 소스가 아파치 프로젝트의 HttpClient를 사용하는게 대부분이었다.

패키지는 org.apache.commons. httpclient

그런데 아무리 찾아봐도 아파치 프로젝트 홈페이지에서는 저 패키지의 라이브러리를 찾을 수가 없다 -_ - 이곳저곳, 말도 안되는 라이브러리 받아서 내용 보고.. 한참을 돌아다니다가 HttpComponents 라이브러리 소개 내용을 보다가 눈에 걸리적 거리는게 있었는데...

HttpComponents Client is a successor of and replacement for Commons HttpClient 3.x. Users of Commons HttpClient are strongly encouraged to upgrade.


"HttpComponents Client는 Commons HttpClient 3.x 의 대체입니다. Commons HttpClient 유저들은 업그레이드 할 것을 강력히 추천합니다." 

네 그렇습니다. commons의 HttpClientHttpComponents
대체 되었습니다.

근데 왜 HttpComponents 홈페이지의 예제 코드는 아직도 commons를 사용하고 있냐고... 괜히 이것 때문이 더 헷갈렸다.


혹시나 HttpClient 라이브러리를 아파치 홈페이지에서 찾고 계신 분은
Http Components 라이브러리를 받으시면 되겠습니다.
그리고 commons를 찾고 계시는 분들을 위해 링크를 걸어둡니다.

'마음이 뛰다' 카테고리의 다른 글

인생은 재밌다.  (0) 2011.09.10
막막 룰루랄라.  (0) 2011.08.26
롬업 후 APN 설정  (0) 2011.08.23
DHD LeeDroid 롬업, 커널업 완료  (0) 2011.08.22
왜 대체 NullPointerException이 뜨는거야!  (0) 2011.08.22
아빡치 에잇퉤퉤페 Apache Http Client  (0) 2011.08.18

+ Recent posts