https://developer.mozilla.org/ko/docs/Web/HTTP/Overview
https://developer.android.com/training/basics/network-ops/connecting.html
Hyper Text Translation Protocol의 약자로 인터넷 상에 데이터를 송수신할 수 있는 국제 표준 규격.
웹서버는 HTTP 요청을 받아 처리할 수 있다.
웹브라우저와 같은 클라이언트는 웹서버에 연결을 만든 후 요청을 보내고 응답을 받아 화면에 보여주게된다.
이 때 요청을 받거나 응담을 줄 때 HTTP라는 국제 표준에 맞는 포맷으로 주고받는다.
장점
1.클라이언트의 요청이 발생하면 서버가 데이터를 보내주는 방식으로 한번의 송수신이 끝나면 연결이 해제된다.
2. 온라인으로 유지되지 않기 때문에 서버의 부담을 덜 수 있고 이미 잘 만들어진 서버를 이용하기 때문에 구현이 어렵지 않다.
단점
1.Socket 네트워크 처럼 온라인으로 유지되지 않기 때문에 자유로운 통신 기능을 구현하기 어렵다.
2. JSP, ASP, PHP 등 웹 애플리켕리션 개발 기술이 있어야 한다.
기본적으로 클라이언트-서버간의 소켓 연결이지만, 소켓 연결을 통해 데이터를 주고받는 과정에서 데이터를 Http 프로토콜, Http형태로 보낸다는것이다.
Http 포맷은 헤더/바디로 구분되고, 바디안에 우리가 원하는 정보를 넣을 수 있다.
요청을 보내거나 응답을 받을 때 보통 라이브러리를 쓰는데, 안드로이드앱에서는 volley라는 HTTP 라이브러리를 많이 쓴다.
앱에서 웹서버에 요청하는 방식은 표준 자바와 같지만, 스레드를 사용해야 한다.
갓 volley
volley를 쓰면 스레드를 신경쓰지 않아도 된다.
보통 스레드를 사용하면 뭐가 메인이고 뭐가 아닌지, ui는 따로 처리해줘야하니까 신경써야할것이 많은데
volley는 응답 받으면 다 구분지어서 처리해준다.
어떻게?!
1. 네트워크 요청(Request) 우선 순위를 자동으로 관리한다.
2. 동시에 여러 네트워크 요청을 할 수 있다.
3. 요청을 할 때 Cache 적용 여부를 의식하지 않아도 된다.
요청 큐가 내부에서 스레드를 만들고 웹서버에 요청을하고 응답을 받고나면 메인 스레드에서 결과를 처리할 수 있도록 만든 후 내가 설정한 리스너의 메소드를 호출해준다.
따라서 화면에 결과를 표시할 때 핸들러를 사용하지 않아도 된다.
volley쓰는법
1. RequestQueue를 만든다.
2. RequestQueue에 Request 객체를 만들어서 넣어주면 자동으로 요청이 날아간다.
3.
JSON
웹서버로부터 응답을 받았을 때 응답 데이터의 포맷이 JSON 포맷으로 되어있는 경우가 많다.
데이터가 왔다갔다할 때 HTTP라는 포맷으로 왔다갔다하는데 거기에 우리가 대상으로 하는 데이터의 포맷이 XML인지 JSON인지에 대해 또 달라진다.
JSON은 자바스크립트의 객체 포맷.
대부분의 웹서버가 자바스크립트를 사용하기 때문에 JSON파일로 많이 날린다.
따라서 클라이언트(앱)이 자바/코틀린이라도 받은 JSON파일을 자바 객체로 바꿔서 바로 쓸 수 있으면 훨씬 편하게 쓸 수 있다.
따라서 JSON 문자열이 넘어오면 그 문자열 데이터를 자바 객체로 바꿔주는 라이브러리가 여러가지 있는데,
구글에서 만든것이 Gson 라이브러리.
Gson
JSON으로 받은 응답 데티어는 문자열로 되어 있으므로 그 응답 데이터 중에서 특정 속성의 값을 찾아내려면 문자열 처리를 해줘야 한다.
어떤 객체 안에 들어있는 속성을 찾아내기 위해 중괄호, 콜론, 콤마 등을 이용해야 한다.
따라서 indexOf나 substring 같은 메소드들이 사용되고 아주 복잡하고 많은 양의 코드가 만들어진다.
하지만 Gson을 사용하면 한줄의 코드만으로 JSON문자열을 자바 객체로 바꿀 수 있다.
https://www.youtube.com/watch?v=VjB9zjcWXFs
이미지 다운로드하기
응답으로 받을 데이터가 이미지 파일인 경우 조금 다른 방식으로 처리해야 한다.
왜냐면 이미지 파일 하나의 크기가 1메가바이트가 넘는 경우가 많아지면서 이미지 파일을 다른 데이터와 구분하여 받는 방식이 더 효율적이기 때문이다.
따라서 이미지 파일에 대한 정보만 응답 데이터에 넣어두고 이미지 파일은 별도로 다운로드하게 한다.
volley라이브러리의 이미지 다운로드는 좀 구리다. 그래서 Universal Image Loader라이브러리/Glide 등을 쓴다.
https://youngest-programming.tistory.com/25