개요

현대의 모바일 애플리케이션 개발에서 Android 애플리케이션과 웹 서버 간의 데이터 통신은 필수적인 부분이다

Kotlin으로 개발된 Android 애플리케이션과 PHP 서버 간의 데이터를 주고받는 방법에 대해 알아보자

근래에는 PHP를 잘 쓰지 않지만 레거시 코드 수정 시 필요할 때가 가끔 있었다

 

방법

1. Android에서 PHP로 데이터 보내기

Android 애플리케이션에서 PHP 서버로 데이터를 보내는 것은 사용자 인증, 서버에 데이터 저장 등 다양한 목적으로 사용된다

다음 예제는 Android에서 PHP 서버로 HTTP POST 요청을 통해 데이터를 보내는 방법이다

Kotlin 코드 예시 (Android)

// HTTP 요청을 보내기 위한 함수
fun sendPostRequest(username: String, password: String) {
    val url = URL("https://domain.com/login.php")
    val postData = JSONObject()
    postData.put("username", username)
    postData.put("password", password)

    with(url.openConnection() as HttpURLConnection) {
        requestMethod = "POST"
        doOutput = true

        val outputStream = BufferedOutputStream(outputStream)
        BufferedWriter(OutputStreamWriter(outputStream, "UTF-8")).use { writer ->
            writer.write(postData.toString())
            writer.flush()
        }

	// URL 연결과 데이터 전송 후 서버로부터의 응답을 받는 부분
        if (responseCode == HttpURLConnection.HTTP_OK) {
            BufferedReader(InputStreamReader(inputStream)).use { reader ->
                val response = StringBuilder()
                var line: String?
                while (reader.readLine().also { line = it } != null) {
                    response.append(line)
                }
                // 응답 처리
                Log.d("HTTP_POST", "Response: $response")
            }
        } else {
            Log.e("HTTP_POST", "Error: $responseCode")
        }
    }
}

sendPostRequest

사용자 이름(username)과 비밀번호(password)를 인자로 받아, HTTP POST 요청을 통해 이를 PHP 서버로 전송하는 함수


HttpURLConnection

서버와의 연결을 설정하고, POST 요청을 보내기 위한 준비를 한다

doOutput = true는 요청 본문에 데이터를 포함시킬 것임을 나타낸다


BufferedWriter

JSON 데이터를 서버로 전송하기 위해 사용된다

데이터는 UTF-8 인코딩으로 전송된다


if (responseCode == HttpURLConnection.HTTP_OK)

서버로부터의 응답 코드를 확인하여, 요청이 성공적으로 처리되었는지 확인한다

이후 서버에서 보낸 데이터를 StringBuilder객체로 받아서 활용할 수 있다

 

PHP 코드 예시 (서버)

<?php
// login.php
$username = $_POST['username'];
$password = $_POST['password'];

// 데이터베이스에서 사용자 인증 처리
// 예시이므로 실제 데이터베이스 연결과 쿼리 실행은 생략됩니다.

if (/* 사용자 인증 성공 */) {
    echo json_encode(array("status" => "success", "message" => "로그인 성공"));
} else {
    echo json_encode(array("status" => "fail", "message" => "로그인 실패"));
}
?>

$username = $_POST['username']

Android 클라이언트로부터 전송된 데이터 수신

echo json_encode(array(...))

로그인 성공 여부에 따라 JSON 형태의 응답 클라이언트(안드로이드)로 전송

이 응답은 Android 측에서 처리할 수 있다 (위 Kotlin 코드 응답 부분 참고)

 

2. PHP에서 Android로 데이터 보내기

서버에서 Android 애플리케이션으로 데이터를 보낼 때는 주로 서버의 데이터 상태 변경, 푸시 알림 정보 등을 Android 앱에 알리는 데 사용된다

다음 예제는 PHP에서 Android 웹뷰로 데이터를 보내 JavascriptInterface를 통해 처리하는 방법이다

 

PHP 코드 예시

PHP 코드는 클라이언트로부터 요청을 받고, 적절한 데이터를 처리한 후 결과를 JSON 형태로 반환한다

Android로부터 요청을 받고, 간단한 결과 데이터를 Android에 보내는 과정을 담은 예제이다

<?php
// response.php
$responseData = array("status" => "success", "data" => "Hello from PHP!");
echo json_encode($responseData);
?>

$responseData

서버에서 처리한 데이터를 포함하는 배열, 상태와 메시지 포함

echo json_encode($responseData)

배열을 JSON 형식으로 인코딩하여 클라이언트로 전송

이 JSON 데이터는 Android 앱에서 사용될 수 있습니다.

 

 

Kotlin 코드 예시 (Android)

Android에서는 WebView를 사용하여 PHP 서버와 통신하고

JavascriptInterface를 통해 웹 페이지에서 Android 함수를 호출할 수 있다

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // 웹뷰 설정
        binding.webView.settings.javaScriptEnabled = true
        binding.webView.addJavascriptInterface(WebAppInterface(this), "Android")
        binding.webView.loadUrl("https://yourdomain.com/response.php")
    }

    class WebAppInterface(private val mContext: Context) {
        @JavascriptInterface
        fun showToast(toast: String) {
            Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show()
        }
    }
}

 

WebView

웹 컨텐츠를 로드하고 표시하기 위한 컴포넌트

loadUrl 메서드를 사용하여 PHP 페이지 로드

addJavascriptInterface

Android와 웹 페이지 간의 인터랙션을 가능하게 하는 메서드

이 예제에서는 WebAppInterface 인스턴스를 JavaScript 인터페이스로 추가하여

웹 페이지 내의 JavaScript 코드가 Android 함수 호출

@JavascriptInterface

안드로이드 메서드가 JavaScript에서 호출될 수 있도록 허용하는 어노테이션

showToast

JavaScript에서 호출될 수 있는 메서드

toast 메시지 화면에 표시

예시

<script>
function showMessage() {
    // AndroidInterface.showToast 메서드 호출
    AndroidInterface.showToast('서버로부터 받은 메시지');
}
</script>

 

결론

이 글에서는 Kotlin으로 개발된 Android 애플리케이션과 PHP 서버 간의 기본적인 데이터 통신 방법에 대해 알아보았다

예제는 PHP 서버에서 Android 애플리케이션으로 간단한 메시지를 보내고

Android 측에서는 이를 받아 토스트 메시지로 표시하는 과정을 구현한 코드이다

실제 애플리케이션에서는 이러한 방식을 확장하여 다양한 데이터 교환과 상호작용을 구현할 수 있다

이것 이외에도 보안, 데이터 검증, 에러 처리 등 추가적인 고려 사항이 필요할 수 있다

반응형

+ Recent posts