안드로이드

Retrofit 공부

조쿼카 2022. 3. 30. 17:53

네트워크 : 2대 이상의 컴퓨터가 연결되어 데이터를 주고받는 통신 체계

 

HTTP = 프로토콜

 

프로토콜 : 컴퓨터 간의 데이터를 전송하는 방식이 서로 다르면 데이터를 주고받을 때마다 각 컴퓨터의 전송 방식에 맞게 코드를 수정해야함

프로토콜은 이런 전송 방식을 표준화한 통신 규약이다.

TCP/IP가 프로토콜이다.

웹은 HTTP라는 프로토콜을 사용하는 것

 

패킷 : 데이터가 전송되는 실제 단위

 

URL

프로토콜http://

서버 주소www.hanbit.co.kr

포트:80/

리소스 경로store/books/look.php

쿼리스트링?p_code=B6382321674

 

쿼리스트링 : 요청 주소의 뒤에 옵션 데이터를 붙여서 전달하는 방식

 

HTTP : 헤더와 바디로 구성

HTTP 메서드 : GET, POST, PUT, DELETE

 

GET : 서버의 정보 조회

헤더 - 주소, 정보 입력

바디 - 값X

 

DELETE : GET과 유사함

 

POST, PUT : 서버에 데이터를 저장하거나 수정하기 위한 용도로 사용

바디 - 데이터를 담아서 요청

 

 

HTTP 응답 코드 (서버에서 반환한 응답 코드)

1xx : 조건부 응답

2xx : 성공

3xx : 리다이렉션 완료

4xx : 클라이언트 요청 에러

5xx : 서버 에러

 

HttpURLConnection

안드로이드는 HTTP로 데이터 통신을 하기 위해서 HttpURLConnection 클래스와 HTTPS 사양으로 확장한 HttpsURLConnection 클래스를 지원한다.

 

[실습 - 서버에 요청을 보내면 해당 서버의 내용을 TextView로 출력]

binding.buttonRequest.setOnClickListener {
    CoroutineScope(Dispatchers.IO).launch {      //코루틴
        try {
            var urlText = binding.editUrl.text.toString() //입력 받은 값 저장해놓기
            if (!urlText.startsWith("https")) {  //https붙어있지 않은 경우에는 앞에 https 붙여주기
                urlText = "https://${urlText}"
            }
            val url = URL(urlText)  // 주소를 URL 객체로 변환 후 url이라는 변수에 저장
            val urlConnection =
                url.openConnection() as HttpsURLConnection // openConnection()함수를 통해 서버와의 연결을 생성
            urlConnection.requestMethod = "GET" //연결된 커넥션에 요청 방식을 설정, 대문자로 입력
            if (urlConnection.responseCode == HttpURLConnection.HTTP_OK) {  // 응답이 정상일 때
                val streamReader =
                    InputStreamReader(urlConnection.inputStream)  //입력 스트림(데이터를 읽어오는 스트림) 연결
                val buffered = BufferedReader(streamReader) //버퍼에 담아서 데이터를 읽은 준비
                val content = StringBuilder()  //StirngBuilder
                while (true) {
                    val line = buffered.readLine()
                        ?: break   //반복문 돌면서 한 줄씩 읽은 데이터를 content 변수에 저장
                    content.append(line)
                }
                //사용한 스트림과 커넥션 해제
                buffered.close()
                urlConnection.disconnect()
                launch(Dispatchers.Main) {
                    binding.textContent.text = content.toString()
                }
            }
            } catch (e: Exception){
                e.printStackTrace()
            }
        }
}

 

 

 


 

Retrofit 라이브러리

HttpUrlConnection보다 편하게 적은 양의 코드로 데이터 통신을 할 수 있게 도와준다.

 

레트로핏 공식 사이트 : https://square.github.io/retrofit/

 

어떤 데이터 형식을 사용할 것인지가 중요 !! -> 프로토콜이 정해지면 해당 프로토콜에 대한 공부가 선행되어야 한다.

 

사용자 정보 API를 무료로 제공하는 Github API

데이터 형식 : 주로 JSON을 많이 사용한다.

 

 

JSON의 구조

- 세 가지 형태의 조합으로 구성되어 있다.

1. JSON 오브젝트

2. JSON 데이터

3. JSON 배열

 

 

JSON 오브젝트

JSON 객체는 {}안에 담긴다.

 

JSON 데이터

{ "데이터 이름": "값", "데이터2 이름": "값2" }

 

문자 - "데이터 이름": "값"

숫자 - "데이터 이름": 123

불린 - "데이터 이름": true

null - "데이터 이름": null

JSON 객체 - "데이터 이름": { }

JSON 배열 - "데이터 이름": [ ]

 

JSON 배열

[ {"데이터1 이름", "값"}, {"데이터1 이름": "두 번째 값", "데이터2 이름": 123} ]