[안드로이드] 안드로이드 통신 방법

변준영·2023년 3월 30일
0

1. HTTP 통신

  • HTTP(Hypertext Transfer Protocol)는 월드 와이드 웹(WWW)에서 사용되는 인터넷 프로토콜 중 하나
  • 서버 간에 요청(request)과 응답(response)을 주고받아 서버에서 제공하는 웹 리소스(HTML 문서, 이미지, 동영상 등)를 가져오는 데 사용
  • 주로 HttpURLConnection 또는 OkHttp 라이브러리를 사용

1) HttpURLConnection

  • 안드로이드에서 기본으로 제공하는 HTTP 라이브러리

  • URL을 통해 HTTP 요청을 보내고 응답을 받을 수 있음

     /*
      - GET 메서드를 사용하여 http://www.jybyun.com 요청을 보내고 응답 받음
      - URL 객체를 생성한 후, HttpURLConnection 객체를 생성하여 요청을 보내고, 응답을 받음
       응답 코드를 확인하여 성공적인 응답이면 응답 데이터를 가져와서 처리하고, 오류 발생 시에는 오류 처리
      - 연결 종료
    */
    URL url = new URL("ttp://www.jybyun.com");
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    con.setRequestMethod("GET");
    // 응답 코드 확인
    int responseCode = con.getResponseCode();
    if (responseCode == HttpURLConnection.HTTP_OK) {
       // 응답 데이터 가져오기
       InputStream inputStream = con.getInputStream();
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
       String line;
       StringBuffer response = new StringBuffer();
       while ((line = bufferedReader.readLine()) != null) {
           response.append(line);
       }
       bufferedReader.close();
       // 응답 데이터 처리
       String responseData = response.toString();
       // ...
    } else {
       // 오류 처리
       // ...
    }
    // 연결 종료
    con.disconnect();

    2) OkHttp

  • Square사에서 만든 HTTP 클라이언트 라이브러리

  • HttpURLConnection보다 좀 더 사용하기 쉽고 성능이 우수

     /*
      - OkHttp를 사용하여 http://www.jybyun.com로 GET 요청을 보내고, 응답을 받는 코드
      - OkHttpClient 객체를 생성
      - Request 객체를 생성하여 요청을 보내고, 응답을 받음
      - 응답 데이터를 처리하고, 연결을 종료
       */  
    OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder()
           .url("http://www.jybyun.com")
           .build();
    Response response = client.newCall(request).execute();
    // 응답 데이터 처리
    String responseData = response.body().string();
    // ..
    // 연결 종료
    response.close();

2. Retrofit

  • 안드로이드와 자바에서 사용할 수 있는 RESTful API 클라이언트 라이브러리
  • HTTP API 요청을 쉽게 작성하고 관리할 수 있음

1) build.gradle 파일에 Retrofit 라이브러리를 추가

  dependencies {
      implementation 'com.squareup.retrofit2:retrofit:2.9.0'
      implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
  }

2) API 요청을 위한 인터페이스를 정의

  • GET 요청을 위한 인터페이스를 정의
  • @GET 어노테이션으로 API 경로를 지정
  • @Query 어노테이션으로 요청 파라미터 설정
  • DataResponse 클래스 : 데이터 응답을 위한 클래스
  public interface ApiService {
    @GET("/api/data")
    Call<DataResponse> getData(@Query("param1") String param1, @Query("param2") String param2);
}

3) Retrofit 객체 생성

/*
 - baseUrl() 메서드로 API 서버의 기본 URL을 설정
 - addConverterFactory() 메서드로 JSON 데이터를 처리하기 위한 GsonConverter를 설정
 - create() 메서드를 사용하여 ApiService 인터페이스를 구현한 객체를 생성
*/
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("http://www.jybyun.com")
        .addConverterFactory(GsonConverterFactory.create())
        .build();

ApiService apiService = retrofit.create(ApiService.class);

4) API 요청

/*
 - API 요청을 보내기 위해 ApiService의 메서드를 호출
 - 요청 파라미터는 인자로 전달하고, 요청 결과를 처리하기 위해 Callback을 구현
 - onResponse() 메서드에서는 성공적인 응답일 경우 응답 데이터를 처리, 실패한 경우에는 오류 처리
 - onFailure() 메서드에서는 요청 실패 시에 대한 처리
*/
Call<DataResponse> call = apiService.getData("value1", "value2");
call.enqueue(new Callback<DataResponse>() {
    @Override
    public void onResponse(Call<DataResponse> call, Response<DataResponse> response) {
        if (response.isSuccessful()) {
            DataResponse dataResponse = response.body();
            // 응답 데이터 처리
            // ...
        } else {
            // 오류 처리
            // ...
        }
    }

    @Override
    public void onFailure(Call<DataResponse> call, Throwable t) {
        // 오류 처리
        // ...
    }
});

3. 소켓통신

  • 소켓(Socket)은 TCP/IP 기반 네트워크 통신에서 데이터 송수신의 마지막 접점
  • 소켓통신은 이러한 소켓을 통해 서버-클라이언트간 데이터를 주고받는 양방향 연결 지향성 통신
  • 소켓통신은 보통 지속적으로 연결을 유지하면서 실시간으로 데이터를 주고받아야 하는 경우에는 사용
  • 소켓은 클라이언트 소켓과 서버 소켓으로 구분
  • 소켓간 통신을 위해서는 네트워크상에서 클라이언트와 서버에 해당되는 컴퓨터를 식별하기 위한 IP주소와 해당 컴퓨터내에서 현재 통신에 사용되는 응용프로그램을 식별하기 위한 포트번호가 사용됨

참고

[1] https://velog.io/@jxlhe46/Android-Network-Programming
[2] https://taewooblog.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-retrofit-2-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%98%88%EC%A0%9C-%EB%A0%88%ED%8A%B8%EB%A1%9C%ED%95%8F-2-Java
[3] https://cjw-awdsd.tistory.com/16
[4] https://kadosholy.tistory.com/125
[5] https://chat.openai.com/chat

0개의 댓글

관련 채용 정보