티스토리 뷰

Network

Retrofit POST, GET 을 사용해보자.

RyanGomdoriPooh 2016. 11. 14. 13:22

일단 Retrofit이 무엇인가 에 대해서 이야기를 해보겠습니다.




Retrofit은 Android/JAVA용으로 개발된 오픈 소스 Request 라이브러리입니다.


주로 API Server에 원하는 RESTful API에 맞는 요청을 할 때, 사용이 됩니다.


주된 기능은 RDBMS에서 대표적으로 요청이 오면 처리하는 CRUD 기능 요청을 할 수 있게 제공해줍니다.


1) Create

- POST Request를 통해서 이용 가능.

- 주로 새로운 데이터를 생성을 하는 경우 사용합니다.


2) Update

- PUT Request를 통해서 이용 가능.

- 주로 데이터를 수정하는 경우 사용합니다.


3) Read

- GET Request를 통해서 이용 가능.

- 주로 데이터를 읽는 경우 사용합니다.


4) Delete

- DELETE Request를 통해서 이용 가능.

- 주로 생성되어있는 데이터를 삭제하는 경우 사용합니다.



* Retrofit은 RESTful API에서 많이 사용하는 Format인 JSON/XML을 사용하기 위한 라이브러리를 지원합니다.

지원하는 라이브러리는 Gson, Jackson, Moshi, Wire, Simple XML, Scalars 등이 있습니다.


Retrofit은 좋은 퍼포먼스를 내기위해서 최적화되어있고, Gson을 사용합니다.


저같은 경우에 이 retrofit을 모를 때는 직접 안드로이드에서 사용할 수 있는 라이브러리은 HttpUrlConnection을 사용했습니다.


모듈을 만들어서 사용했지만, 일관된 디자인 패턴이 없었기 때문에 모듈 별로 다 다른 소스 코드로 재사용이 힘들었습니다.


HttpUrlConnection이 Low한 라이브러리라서 물론 잘 활용해서 원하는 모듈을 만들면 좋은 퍼포먼스를 낼 수 있지만,


대부분의 사용자들은 저처럼 좋은 모듈을 만들어 사용할 수 없는 분들이 많으실 겁니다.


그래서 좋은 라이브러리를 찾으려고 노력한 결과 Retrofit을 찾게되었습니다.



* Retrofit의 장점

1) 서버를 향해서 네트워크 통신 연결/해제에 대해서 체계적으로 다뤄줘야하는데, 이러한 관리를 해줍니다.

2) 서버로 연결이 된 후에는, 요청을 데이터 Format에 맞춰서 요청해 주고, 데이터를 parsing하여 응답을 받을 수 있습니다.

3) 데이터를 가져와서 각종 parsing 라이브러리를 통해서 원하는 요구에 맞게 사용이 가능합니다.

4) 각종 에러처리를 원활하고 쉽게 해줍니다.



지금 까지 Retrofit에 대한 설명과 장점에 대해서 이야기를 끝냈기 때문에,


실제 안드로이드에서 사용하는 방법에 대해서 설명하겠습니다.


아주 간단합니다. 일단 사용하는 방법에 대한 순서를 알려드리겠습니다.


일단 왼쪽 Project의 Android를 들어갑니다.


1) manifests에 INTERNET 퍼미션을 허락해줍니다.

2) Gbuild.gradle(Module:app) 안으로 들어가서 dependencies 안에 라이브러리를 넣어줍니다.

3) Android Studio 탭 중에서 Build로 들어가서 "Rebuild Project"를 해주면 이제 Retrofit을 사용할 준비는 마쳤습니다.


4) 지금 부터는 사용을 하면 됩니다. Retrofit은 어노테이션을 사용합니다. 쉽게 여기서는 지능형 주석을 이용해서 파라미터를 관리하는 방식으로 사용합니다.


5) 저 같은 경우에는 interface를 사용해서 API 요청부분과 URL은 따로 관리하겠습니다. 다음과 같은 ApiService interface를 만들었습니다.

- 이거 저거 형식없이 만들어 놓았지만 설명해야할 예는 다 있습니다.


- 일단 Resource Path와 Query의 구분은 "?"로 합니다. 또한 "{ }" 안에 들어가는 값은 변수라고 보시면 됩니다. 바뀔 수 있습니다.


- Path는 "[프로토콜]://[URL]/[Resource Path]" 로 구성되고, Query는 "[key]=[value]&[key]=[value]&..." 형식으로 사용됩니다.


- Path와 Query를 합쳐서 사용하는데 다음과 같습니다.

" [프로토콜]://[URL]/[Resource Path]?[key]=[value]&[key]=[value]&... "


- 이제 번호 별로 설명을 시작하겠습니다.


- 1번은 "https://www.naver.com/api/dogs?name=파라미터" 에 GET형식 Request를 하는데, "name" query에 int name 파라미터로 전달하여 요청합니다.


- 2번은 "https://www.naver.com/api/dogs" Path에 POST형식으로 Request를 하는데, 아무 요청 값 없이 요청을 하는 부분이구요.


- 3번은 "https://www.naver.com/api/dogs/name2?testquery=[testquery 파라미터]" Path에 1번과 마찬가지로 GET 요청합니다.


- 4번은 "https://www.naver.com/api/dogs/[testpath 파라미터]?query=[testquery 파라미터]" 로 GET 요청하고, {name}부분의 name은 변수로써 바뀔 수 있습니다.


- 5번은 "https://www.naver.com/api/dogs/[testpath 파라미터]" 로 PUT 요청을 합니다. 마찬가지로 {name}부분은 변수로 바뀔 수 있습니다.



6) 이제 interface를 다만들었으니까 실제 값을 넣어서 사용하는 방법에 대해서 알아보겠습니다.

- Global Variable로 Retrofit Class, ApiService Class의 object를 생성합니다.


7) onCreate 메서드 안에 retrofit의 객체에 Request를 전달할 URL을 넣어서 생성합니다. 그리고 GET,POST와 같은 service를 사용하기 위해서 생성을 합니다.


8) 그리고 위에서 만들었던 interface의 1번 메서드를 이용해서 호출합니다.

- 바로 위에서 만들었던 apiService object를 이용해서 getComment 메서드에 정수 1을 파라미터로 전달해서 호출합니다.

- 그리고 enqueue해서 onResponse 메서드를 이용해서 response object로 응답을 전달받아서 Request에 대한 결과를 돌려 받을 수 있습니다.


9) 이런식으로 호출을 하고 저같은 경우에는 개발해야하는 아키텍쳐에 따라서 함수를 만들어서 클래스를 구성해서 사용하는 것을 추천합니다.



이상으로 Retrofit POST, GET 사용에 대한 설명을 마치겠습니다.


'Network' 카테고리의 다른 글

쿠키와 세션 개념  (132) 2021.10.11
OAuth의 개념과 원리  (8) 2016.11.23
네트워크 전송 GET, POST 비교  (11) 2016.11.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
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
글 보관함