개발하는 두더지

[Django] Django REST Framework ( DRF ) 와 안드로이드 연동하기 - 2 본문

Django

[Django] Django REST Framework ( DRF ) 와 안드로이드 연동하기 - 2

덜지 2017. 6. 8. 15:45

지난 시간에 이어 안드로이드에서 REST를 받을 수 있는 라이브러리와 적용방법에 대해서 알아보겠습니다.




Django 서버를 외부에서 접속하려면 0.0.0.0 으로 서버를 실행해야합니다.




그리고 접속허용할 외부 IP를 설정해야합니다.


settings.py


' * ' 은 어떤 IP든 전부 접속허용을 해주겠다는 의미입니다.


ALLOWED_HOSTS = [ '111.222.333.444' , '222.666.777.888' ] 는


IP 주소가 111.222.333.444 , 222.666.777.888 만 Django 웹서버로 접근을 허용하겠다라는 의미입니다.




6-2. ngrok 세팅 방법


ngrok는 도메인 할당하는 것처럼 localhost를 외부에서 접근할 수 있게 해주는 툴입니다.


고정아이피를 사용하고 외부접근 포트를 바인딩해주고, Django runserver 0.0.0.0 와 외부접근 바인딩된 포트를 사용하면 


외부에서 쉽게 접근하겠지만 유동아이피를 사용한다면 외부에서 접근하기 쉽지 않습니다. 


이때 ngrok를 사용한다면 외부에서 쉽게 접근할 수 있습니다. 다만 다른 서버를 거쳤다가 오기때문에 속도면에서 느리므로 


테스트용으로만 사용해야 합니다.


그림으로 보면 쉽게 이해가 갑니다.





1. 아래의 링크에 들어가서 설치를 합니다.


다운로드 링크 ( https://ngrok.com/ )


저는 윈도우를 쓰기때문에 윈도우 버전으로 설치했습니다




2. ngrok 를 실행합니다



그리고 ngrok http 포트번호( django runserver할때 사용하는 포트번호) 를 입력하고 엔터를 눌러줍니다.


3. 동작확인


http://df3c2dde.ngrok.io 가 외부 접속할 수 있는 URL 입니다.

http://df3c2dde.ngrok.io 가 localhost:8000 과 매핑이된다고 상세하게 써져있습니다.


참고로 URL은 ngrok를 다시 켤때마다 새로운 URL을 주기때문에 항상 확인해야 합니다.,




브라우저 또는 다른 네트워크 대역에 있는 장치에서 위의 URL을 입력해봅니다.


지금은 제 PC의 브라우저에서 스크린샷을 찍었지만 스마트폰에서 접근하면 페이지가 잘열립니다.




ngrok에서 Http Requests 를 보여주고 오른쪽에 Http Response Code도 함께 보여주기 때문에

로그를 확인하면서 테스트를 할 수 있습니다.






7. 안드로이드 RETROFIT 설정




우선 RETROFIT이 무엇인지 살펴보겠습니다.


Retrofit은 Square에서 만든 REST Api를 손쉽게 사용하기 위한 Java, Android 라이브러리 입니다.


그리고 CURD 기능을 모두 제공합니다.


Create : POST

Update : PUT, PATCH

Read : GET

Delete : DELETE


또한 JSON 데이터를 클래스로 변환시켜주는 라이브러리들도 지원합니다.

  • Gsoncom.squareup.retrofit2:converter-gson
  • Jacksoncom.squareup.retrofit2:converter-jackson
  • Moshicom.squareup.retrofit2:converter-moshi
  • Protobufcom.squareup.retrofit2:converter-protobuf
  • Wirecom.squareup.retrofit2:converter-wire
  • Simple XMLcom.squareup.retrofit2:converter-simplexml
  • Scalars (primitives, boxed, and String): com.squareup.retrofit2:converter-scalars




안드로이드 프로젝트를 만들고 Gradle 파일을 열어 아래 코드를 추가합니다.


retrofit 과 Gson을 사용할 것이므로 아래 2개를 추가해야합니다.

compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
build.gradle




네트워크 코드 만들기


- Application을 상속받은 ApplicationController 클래스 생성


안드로이드에서 Application 클래스는 애플리케이션 컴포넌트 사이에서 공유할수 있게 해줍니다.


어디서든 context를 이용한 접근이 가능하게 됩니다.


[사용방법]

1) Application 클래스 상속 

ApplicationController.java




2) AndroidManifest.xml 에 Application 클래스 Name 추가



애플리케이션에서 인터넷을 사용하므로 인터넷 퍼미션 추가해야 합니다.

<uses-permission android:name="android.permission.INTERNET"/>



8. Call 인터페이스 만들기


여기서 만든 Call은 동기 또는 비동기하는 HTTP 요청을 원격 웹서버로 보낼수 있습니다.


HTTP 요청은 어노테이션을 사용하여 명시합니다.

  • URL 파라미터 치환과 쿼리 파라미터가 지원됨
  • 객체를 요청 body로 변환 ( JSON 형태)
  • 멀티파트 요청 body와 파일 업로드가 가능함
Retrofit 한글 번역 사이트 ( http://devflow.github.io/retrofit-kr/ )

NetworkService.java
 


9. REST GET, POST, PUT(PATCH) , DELETE 결과 확인

activity_main.xml


MainActivity.java




VERSION GET 과  RESTAURANT GET을 클릭했을 때 결과물






브라우저에서 결과물













Comments