안드로이드에서 API를 사용하기 위한 필수 개념으로는 먼저 안드로이드에서 네트워크 통신하는 방법에 대해 알아야한다.
안드로이드에서 네트워크 통신?
안드로이드에서 서버에 데이터를 요청하고 받아온 데이터를 클라이언트 화면에 표시하는 것
클라이언트와 서버가 통신하는 방식은 주로 소켓연결, http 연결로 나뉨
소켓 연결
소켓 : 네트워크 상의 두 프로그램 사이에서 일어나는 양방향 통신 중 한 쪽의 엔드 포인트
클라이언트와 서버가 특정 포트를 통해 연결을 계속 유지 - 실시간 통신 가능
주로 스트리밍이나 온라인 게임에서 사용되는 연결방식
HTTP 연결
- HyperText Transfer Protocol의 약자
- 80번 포트를 사용하여 웹 상에서 정보를 주고받을 수 있는 프로토콜
동작 방식
- 클라이언트가 서버에 헤더와 바디로 이루어진 메시지를 요청(request)
- 서버는 이 요청을 처리하고 응답코드와 함께 음답(response)을 반환
특징
Connectionless
- 용건이 있을 때만 연동, 용건이 끝나면 연결을 끊음 -> 서버에 여유가 생겨 더 많은 처리 가능
Stateless
- 위의 Connectionless의 특징 때문에 서버가 클라이언트를 구분할 수 없음
- 서버가 클라이언트를 기억해야 할 경우 쿠키나 세션 또는 토큰을 활용하여 구분
HTTPS
HTTPS는 HTTP가 정보를 text형식으로 주고 받아 중간에 인터셉트할 경우 데이터 유출이 발생할 수 있는 문제가 있어 HTTP에 암호화를 추가한 프로토콜이다.
HTTP Method
HTTP Method란 클라이언트가 서버에 메시지를 보낼 때 어떠한 목적을 가졌는지 밝히는 것을 말함
- GET : 서버에 리소스를 요청합니다. 서버를 수정하지 않기 때문에 sate method로 분류
- HEAD : GET과 같지만 서버가 본문(body)을 포함하지 않음
- POST : 클라이언트에서 요청한 URL에 본문의 내용으로 새로운 리소스를 생성
- PUT : 클라이언트가 요청한 내용으로 서버의 리소스를 수정
- DELETE : 서버의 리소스를 삭제
- CONNECT : 요청 리소스에 대해 양방향 연결을 수립, 예로 프록시를 통한 SSL 연결수립에 사용될 수 있음
- OPTIONS : 서버가 어떤 HTTP 메소드를 지원하는지 물어봄
- TRACE : 메시지의 변조여부 확인을 위해, 서버가 수신한 클라이언트의 메시지를 반환하도록 함
- PATCH : PUT은 리소스 전체를 수정하나, PATCH는 해당 리소스의 일부만을 수정
RESTful API
많은 IT 대기업에서 자신의 서비스를 활용할 수 있도록 REST API를 제공함
REST?
REST는 HTTP기반으로 필요한 자원에 접근하는 방식을 정의해놓은 네트워크 아키텍처
REST의 기준
다음의 조건을 만족하면 RESTful하다고 함
- 클라이언트와 서버의 분리
- 무상태(Stateless)
- 캐시 처리가 가능해야 함
- 시슽쳄이 계층화 되어있어야 함
- 일관성 있는 인터페이스
HTTP Method와 RESTful API의 CRUD과 대응
- POST : Create
- GET : Read
- PUT : Update/Replace
- PATCH : Update/Modify
- DELETE : Delete
Android HTTP Client의 역사
안드로이드에는 HTTP 통신을 구현하는 여러 라이브러리가 있음
HTTPClient
- Apache에서 제작한 라이브러리
- 안드로이드 초기에 주로 사용되었으며 실제로는 HttpClient 를 래핑한 DefaultHttpClient나, 안드로이드에 맞게 개수한 AndroidHttpClient가 사용됨
- 변경점을 안드로이드 sdk에 일괄적으로 즉시 반영할 수 없었음 -> 한마디로 업데이트가 잘 안됨
- Android 5.1에서 Deprecated 되며 6.0에서는 아예 삭제되었음
- 이 시기 클라이언트의 버그는 네이버 D2 블로그 Android의 HTTP 클라이언트 라이브러리에 잘 정리되어 있음
HttpUrlConnection
- HttpClient를 삭제하면서 구글에서 제시한 대안
- 기존의 URLConnection에 HTTP를 다루는데 필요한 메서드를 추기한 클래스
다만 위와 같은 방법으로는 Application Not Responding(ANR)을 피하기 위해 백그라운드 스레드도 만들어야하고, 버퍼를 통해 입출력도 준비해야하고, 캐시나 예외처리도 해줘야함
Volley
HTTP 연결을 만들때마다 위와 같은 불편함을 없애기 위해 구글에서 발표한 라이브러리
OkHttp
square에서 발표한 HTTP 클라이언트 라이브러리
Connection pooling과 Redirection을 도입해 접속을 더 안정적이게 하면서 속도를 개선시킬 수 있는 여러가지 기술이 적용된 것
Retrofit
HttpURLConnection을 래핑 -> Volley
OkHttp를 래핑 -> Retrofit
사용법
- REST API 콜을 인터페이스 형식을 준비
- Retrofit 객체를 만들어서 인스턴스를 생성
- 인터페이스를 동기 또는 비동기적으로 구동시켜 response를 반환받음
Ktor
코틀린을 이용해 비동기 서버와 클라이언트를 구축할 수 있게 해주는 라이브러리
Volley vs Retrofit
안드로이드에서 통신 라이브러리로는 Volley나 Retrofit을 많이 활용한다. 그렇다면 둘의 차이점은 무엇인가?
속도 자체는 비슷하나 코드의 가독성이 Retrofit이 좀 더 좋다는 평이 있음
API 콜을 인터페이스로 정의해서 사용하는 Retrofit이 전체 구조를 파악하기 더 좋은듯
구글의 권장 앱 아키텍처에서는 HTTP 통신에 Volley가 아닌 Retrofit을 추천하고 있음
출처 : https://www.youtube.com/watch?v=z69FsR_-e_s
해당 내용 기술블로그 https://cliearl.github.io/posts/android/android-http-library-review/
'안드로이드 > 기본기 다지기' 카테고리의 다른 글
안드로이드 스튜디오 ImageView 둥글게 자르기 (0) | 2023.02.06 |
---|---|
안드로이드 스튜디오 imageview 크기와 실제 이미지 크기 차이 없애기 (0) | 2023.02.06 |
안드로이드 스튜디오 앱바 삭제하기 (0) | 2023.02.06 |
안드로이드 스튜디오 Splash 화면 만들기 (0) | 2023.02.06 |
싱글톤 패턴(Kotlin, java) (0) | 2023.02.03 |