Android에서 네트워크 통신을 수행하는 방법에는 여러 가지가 있으며, 주로 HTTP/HTTPS 프로토콜을 사용합니다. 두 가지 인기 있는 네트워크 라이브러리는 Volley와 Retrofit입니다. JSON 파싱을 통해 서버와 데이터를 주고받는 예제도 함께 설명합니다.
1. HTTP/HTTPS 네트워크 통신 개요
HTTP (HyperText Transfer Protocol)와 HTTPS (HTTP Secure)는 웹 서버와 클라이언트 간의 데이터를 주고받는 프로토콜입니다. HTTPS는 HTTP에 보안을 더한 프로토콜로, 데이터를 암호화하여 전송합니다.
2. Volley를 사용한 네트워크 통신
Volley는 Google이 제공하는 네트워크 라이브러리로, 빠르고 간편하게 네트워크 요청을 수행할 수 있습니다.
Volley 의존성 추가
build.gradle
파일에 Volley 라이브러리 종속성을 추가합니다.
dependencies { implementation 'com.android.volley:volley:1.2.1' }
GET 요청 예제
RequestQueue queue = Volley.newRequestQueue(this); String url = "https://jsonplaceholder.typicode.com/todos/1"; JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { // Response handling try { String title = response.getString("title"); Log.d("Volley", "Title: " + title); } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // Error handling error.printStackTrace(); } }); queue.add(jsonObjectRequest);
POST 요청 예제
String url = "https://jsonplaceholder.typicode.com/posts"; JSONObject postData = new JSONObject(); try { postData.put("title", "foo"); postData.put("body", "bar"); postData.put("userId", 1); } catch (JSONException e) { e.printStackTrace(); } JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, postData, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { // Response handling Log.d("Volley", "Response: " + response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // Error handling error.printStackTrace(); } }); queue.add(jsonObjectRequest);
3. Retrofit을 사용한 네트워크 통신
Retrofit은 Square에서 만든 HTTP 클라이언트 라이브러리로, RESTful API와 쉽게 통신할 수 있도록 설계되었습니다.
Retrofit 의존성 추가
build.gradle
파일에 Retrofit 및 GSON Converter 종속성을 추가합니다.
dependencies { implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' }
API 인터페이스 정의
import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Path; public interface ApiService { @GET("todos/{id}") Call<Todo> getTodoById(@Path("id") int id); }
모델 클래스 정의
public class Todo { public int userId; public int id; public String title; public boolean completed; }
Retrofit 인스턴스 생성 및 API 호출
import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://jsonplaceholder.typicode.com/") .addConverterFactory(GsonConverterFactory.create()) .build(); ApiService apiService = retrofit.create(ApiService.class); Call<Todo> call = apiService.getTodoById(1); call.enqueue(new Callback<Todo>() { @Override public void onResponse(Call<Todo> call, Response<Todo> response) { if (response.isSuccessful()) { Todo todo = response.body(); Log.d("Retrofit", "Title: " + todo.title); } } @Override public void onFailure(Call<Todo> call, Throwable t) { t.printStackTrace(); } });
POST 요청 예제
public interface ApiService { @POST("posts") Call<Post> createPost(@Body Post post); } public class Post { public int userId; public String title; public String body; public Post(int userId, String title, String body) { this.userId = userId; this.title = title; this.body = body; } } Call<Post> call = apiService.createPost(new Post(1, "foo", "bar")); call.enqueue(new Callback<Post>() { @Override public void onResponse(Call<Post> call, Response<Post> response) { if (response.isSuccessful()) { Post post = response.body(); Log.d("Retrofit", "Post ID: " + post.id); } } @Override public void onFailure(Call<Post> call, Throwable t) { t.printStackTrace(); } });
4. JSON 파싱
JSON 데이터를 파싱하는 방법은 여러 가지가 있으며, 여기서는 Gson 라이브러리를 사용한 예제를 소개합니다.
Gson 의존성 추가
build.gradle
파일에 Gson 라이브러리 종속성을 추가합니다.
dependencies { implementation 'com.google.code.gson:gson:2.8.8' }
Gson을 사용한 JSON 파싱
import com.google.gson.Gson; String json = "{ \"userId\": 1, \"id\": 1, \"title\": \"delectus aut autem\", \"completed\": false }"; Gson gson = new Gson(); Todo todo = gson.fromJson(json, Todo.class); Log.d("Gson", "Title: " + todo.title);
종합
위의 내용은 Android에서 네트워크 통신을 수행하고 JSON 데이터를 파싱하는 기본적인 방법을 설명합니다. Volley와 Retrofit은 각각의 장점이 있으며, 요구 사항에 따라 적절한 라이브러리를 선택하여 사용하면 됩니다. JSON 파싱은 Gson 라이브러리를 통해 쉽게 수행할 수 있습니다. 이 예제들을 통해 네트워크 통신 및 데이터 처리를 쉽게 구현할 수 있을 것입니다.