Android Network

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 라이브러리를 통해 쉽게 수행할 수 있습니다. 이 예제들을 통해 네트워크 통신 및 데이터 처리를 쉽게 구현할 수 있을 것입니다.

Leave a Reply

Your email address will not be published. Required fields are marked *