[Android Studio] Network (통신)

김진호·2023년 8월 13일
0

Android

목록 보기
4/5

자세한 JSON 관련 내용은 다음 게시글 참고 : JSON

1. JSON parsing

  • JSON을 Kotlin/Java가 이해할 수 있는 형태로 변환시켜주는 과정
  • 직렬화(Serialization) 과정을 거친다.
    : JSON 형식을 사용하여 데이터를 일련의 바이트로 변환하는 과정
    이를 통해 객체나 데이터 구조를 JSON 형식으로 표현하고, 이를 파일에 저장하거나 네트워크를 통해 전송할 수 있게 된다.
  • 직렬화된 데이터를 가져와서 Kotlin/Java가 이해할 수 있는 객체 (class)에 넣어준다.

  • 다음 예시의 JSON 파일이 있다고 해보자.
[
	{
    	"id": 1,
        "name": "jinho",
        "age": 25
        "intro": "hello?",
	},
	{
    	"id": 2,
        "name": "Lee Sin",
        "age": 35
        "intro": "EEE~Ku",
	}
]
  • 아래와 같은 객체 (class) / 틀만 만들어준다면 직렬화된 데이터를 넣어주기만 하면 된다.
Class Person(
	var id : Int? = null
    var name : String? = null
    var age : Int? = null
    var intro : String? = null

2. Network (Request/Response)

- 인터넷 권한 추가 (AndroidManifest.xml에 권한 추가)

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

🤔 안드로이드 앱에서 서버와 클라이언트의 네트워킹 코드를 액티비티(Activity)에 직접 넣지 않도록 한다.
시스템의 리소스 상황에 따라 액티비티가 언제라도 종료될수 있는데, 이때 서버가 함께 죽어버리게 된다.

이를 해결하기 위해 서버를 스레드보다 서비스로 실행하는 것을 더 지향한다.

startService(intent);

1) Request

Request Method (요청의 종류)

  • GET
    • 리소스를 검색하고, 반환받기 위해 사용되는 메소드
    • 주로 URL을 통해 데이터를 요청하고, 요청 파라미터를 쿼리 문자열(Query String)에 포함시켜 전달한다.
    • 요청한 데이터를 URL의 일부로 전달하므로 RequestBody가 필요하지 않다.
  • POST
    • 서버로 데이터를 보내는 데 사용된다.
    • 이 데이터는 요청의 본문(RequestBody)에 담겨서 전달된다.
  • DELETE
    • 요청된 자원을 삭제하기 위해 사용되는 메소드
    • 클라이언트에서 서버의 자원을 삭제할 수 있도록 허가하는 것은 매우 위험하다.
    • delete flag를 수정하는 방법을 사용
  • PUT
    • 요청된 자원을 수정하기 위해 사용되는 메소드
  • PATCH (일부 수정), OPTION 등의 여러 메소드들이 더 있다.

2) Response

Status Code (상태 코드)

  • 2xx (Successful - 성공 상태 코드) : 클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며, 성공적으로 처리했음을 가리킨다.

    • 200 (OK): 요청이 성공적으로 처리되었음을 나타냅니다.
    • 201 (Created): 요청이 성공적으로 처리되어 새로운 리소스가 생성되었음을 나타냅니다.
  • 4xx (Client Error - 클라이언트 오류 상태 코드) : 클라이언트에 오류가 있음을 나타낸다.

    • 400 (Bad Request): 잘못된 요청으로 서버가 요청을 이해하지 못함.
    • 401 (Unauthorized): 요청에 대한 인증이 필요함.
    • 404 (Not Found): 요청한 리소스를 서버에서 찾을 수 없음.
  • 1xx (Informational - 정보성 상태 코드) : 요청을 받았으며 작업을 계속한다.
    3xx (Redirection - 리다이렉션 상태 코드) : 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다.
    5xx (Server Error - 서버 오류 상태 코드) : 서버가 유요한 요청을 명백하게 수행하지 못했음을 나타낸다.

네트워크 관련 작업

🤔 메인(UI) 스레드에서 네트워크 관련 작업을 수행하는 경우, NetworkOnMainThreadException 에러가 발생한다.

  • 안드로이드에서는 메인 스레드는 절대 정지시킬 수 없다.
  • Request / Response 과정에서 정지되게 된다.
  • 네트워크 작업과 같이 시간이 오래 걸리는 작업은 메인 스레드가 아닌 백그라운드 스레드에서 처리해야 한다.

AsyncTask를 사용하여 백그라운드에서 비동기로 실행하거나,
Retrofit 또는 Volley 등의 라이브러리 사용한다.

profile
멋쟁이

1개의 댓글

comment-user-thumbnail
2023년 8월 13일

많은 것을 배웠습니다, 감사합니다.

답글 달기