- 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();
- 안드로이드와 자바에서 사용할 수 있는 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) { // 오류 처리 // ... } });
- 소켓(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