이것이 안드로이드다 with 코틀린(고돈호 지음) 으로 공부한 내용을 정리한 글입니다.
프로토콜은 데이터 전송 방식을 표준화하여 어떤 기기와도 동일한 방식으로 데이터를 주고받을 수 있게 만들어진 통신 규약입니다.
패킷은 데이터가 전송되는 단위입니다. 데이터는 패킷 단위로 나뉘어 전송됩니다.
HTTP는 웹상의 서버와 클라이언트인 웹브라우저의 데이터 통신이 가능하도록 설계된 표준 규약입니다. 클라이언트가 서버에 데이터를 요청하는 요청 메시지를 보내면 서버는 클라이언트가 요청한 데이터를 클라이언트로 보내는 응답 메시지를 보냅니다.
프로토콜 | 서버주소 | 포트 | 리소스 경로 | 쿼리 |
---|---|---|---|---|
http:// | www.hanbit.co.kr | :80/ | store/books/look.php | ?p_code=B63 |
구분 | 예시 | 설명 |
---|---|---|
헤더 | GET ../images/myface.php...HTTP/1.1 | 명령 |
바디 | "id":24185231, "name":"kil_dong" | 실제 데이터 |
HTTP 요청 메서드 | 설명 |
---|---|
GET | 지정한 URI의 리소스를 요청 |
POST | 요청과 데이터를 담아 전송하면 해당 URI에 리소스를 생성 |
PUT | 지정한 URI의 리소스를 수정 |
DELETE | 지정한 URI의 리소스를 삭제 |
HEAD | 리소스 존재 여부 혹은 서버 상태를 확인하기 위해 헤더 정보를 요청 |
TRACE | 서버 상태를 확인하기 위해 클라이언트의 요청을 그대로 반환 |
OPTIONS | 웹서버가 지원하는 메소드의 종류를 요청 |
HTTP 응답 코드 | 설명 |
---|---|
1xx (정보 전달) | 요청을 받았고 작업을 진행 중이라는 의미 |
2xx (성공) | 요청을 받았고 이해했으며 받아들여졌다는 의미 |
3xx (리다이렉션) | 요청의 완료를 위해서는 리다이렉션해야 한다는 의미 |
4xx (클라이언트 오류) | 요청이 올바르지 않다는 의미 |
5xx (서버 오류) | 올바른 요청에 대해 서버가 응답할 수 없다는 의미 |
HttpURLConnection 클래스는 안드로이드에서 HTTP로 데이터 통신을 하기 위해서 사용하는 클래스입니다.
fun networking(urlString: String) {
thread(start=true) {
// 네트워킹 예외처리를 위한 try ~ catch 문
try {
val url = URL(urlString)
// 서버와의 연결 생성
val urlConnection = url.openConnection() as HttpURLConnection
urlConnection.requestMethod = "GET"
if (urlConnection.responseCode == HttpURLConnection.HTTP_OK) {
// 데이터 읽기
val streamReader = InputStreamReader(urlConnection.inputStream)
val buffered = BufferedReader(streamReader)
val content = StringBuilder()
while(true) {
val line = buffered.readLine() ?: break
content.append(line)
}
// 스트림과 커넥션 해제
buffered.close()
urlConnection.disconnect()
runOnUiThread {
// UI 작업
}
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
JSON은 데이터 교환에 사용하는 표준 데이터 형식입니다. 사람과 컴퓨터가 이해하기 쉬우면서 데이터 용량이 적다는 장점이 있습니다.
JSON은 JSON 오브젝트, JSON 데이터, JSON 배열의 조합으로 구성되어 있습니다.
JSON 오브젝트: {JSON 데이터}
의 형태를 가짐
JSON 데이터: "데이터1 이름": 값1, "데이터2 이름": 값2
의 형태를 가짐
데이터 형식 | 이름: 값 표현 |
---|---|
문자 | "이름": "값" |
숫자 | "이름": 123 |
불린 | "이름": true |
null | "이름": null |
JSON 객체 | "이름": {} |
JSON 배열 | "이름": [] |
[JSON 오브젝트1, JSON 오브젝트2]
의 형태를 가짐. JSON 오브젝트의 모양이 모두 같을 필요는 없지만 같은 이름을 가진 데이터의 타입은 동일해야 합니다.