안녕하세요
지난 포스팅에서 XAMPP를 설치하고 웹 서버를 이용해 PHP와 MySQL 데이터베이스를 연동하는 것까지 진행했습니다.
이번 시간에는 안드로이드와 MySQL을 연동하여 MySQL 데이터베이스에 저장하는 실습을 진행하겠습니다.
0. 사전 준비 (XAMPP)
[안드로이드/Android] XAMPP로 개인 웹 서버 구축해 안드로이드-MySQL 연동하기(1) Apache+MariaDB+PHP (tistory.com)
[안드로이드/Android] XAMPP로 개인 웹 서버 구축해 안드로이드-MySQL 연동하기(2) Apache+MariaDB+PHP (tistory.com)
실습을 진행하기 앞서 이전 포스팅을 참고하여 실습 환경을 구성해주세요.
1. phpMyAdmin에서 MySQL 데이터베이스 생성하기
phpMyAdmin 페이지에 접속하여 `hyuk`이라는 데이터베이스를 생성하겠습니다.
2. 테이블 생성하기
데이터베이스를 선택하고 테이블 이름을 정하고 컬럼 수를 지정해실행을 누르면 테이블이 생성됩니다.
3. 테이블 구성하기
저는 테이블 명을 [user]로 만들고 유저에 맞는 컬럼을 구성하겠습니다.
이름: userName
종류: varChar(문자열)
길이: 50
기본값: NULL
데이터 정렬 양식: utf8_general_ci
인덱스: Primary(기본키)
다음과 같이 컬럼을 구성한 후 [저장]을 눌러 줍니다.
데이터베이스를 만들고 테이블을 구성했기 때문에 PHP로 MySQL과 연동할 수 있습니다.
4. PHP로 데이터베이스에 연동하기
1. PHP로 데이터베이스와 연동하는 샘플 코드
PHP 언어로 작성된 데이터베이스와 상호작용하여 사용자가 입력한 이름과 나이를 데이터베이스에 저장하는 웹 애플리케이션의 일부입니다.
# Userinfo.php
<?php
$con = mysqli_connect("localhost", "DB아이디", "DB비밀번호", "DB이름(스키마이름)");
mysqli_query($con, 'SET NAMES utf8');
$userName = $_POST["userName"]; //입력받음
$userAge = $_POST["userID"]; //입력받음
$statement = mysqli_prepare($con, "INSERT INTO USER VALUES (?, ?)"); //DB에 값 저장
mysqli_stmt_bind_param($statement, "ss", $userName, $userID);
mysqli_stmt_execute($statement);
$response = array();
$response["success"] = true;
echo json_encode($response);
?>
다음은 위 PHP 코드에 대한 설명입니다.
1. 첫 번째 줄에서는 mysqli_connect 함수를 사용하여 데이터베이스 서버에 연결합니다. 이 함수는 데이터베이스 서버의 위치, 사용자 이름, 비밀번호 및 데이터베이스 이름을 인수로 받습니다.
2. 두 번째 줄에서는 mysqli_query 함수를 사용하여 PHP와 데이터베이스 서버 간의 문자 인코딩이 일치하도록 UTF-8 인코딩을 설정합니다.
3. POST 요청으로 전달된 사용자 이름과 나이를 받아오기 위해 $_POST 변수를 사용합니다.
4. mysqli_prepare 함수를 사용하여 SQL 쿼리를 준비합니다. 이 쿼리는 "USER" 테이블에 새로운 행을 추가합니다. 쿼리 문자열에는 두 개의 물음표 플레이스홀더가 있습니다.
5. mysqli_stmt_bind_param 함수를 사용하여 플레이스홀더에 해당하는 변수를 바인딩합니다. 여기서 "ss"는 두 개의 문자열 매개변수를 가진다는 것을 의미합니다.
6. mysqli_stmt_execute 함수를 사용하여 SQL 쿼리를 실행합니다.
7. $response 배열을 초기화하고, "success" 키에 true 값을 할당합니다.
8. json_encode 함수를 사용하여 $response 배열을 JSON 문자열로 변환하고, 이를 클라이언트에게 반환합니다.
2. 안드로이드에서 Java 파일을 이용해 PHP와 연동하는 샘플 코드
# RegisterRequest.java
package com.example.register;
import java.util.HashMap;
import java.util.Map;
import com.android.volley.Response;
import com.android.volley.toolbox.StringRequest;
public class RegisterRequest extends StringRequest{
final static private String URL = "http://10.0.2.2/UserInfo.php";
private Map<String, String> parameters;
public RegisterRequest(String userName, String userID, Response.Listener<String> listener) {
super(Method.POST, URL, listener, null);
parameters = new HashMap<>();
parameters.put("userName", userName);
parameters.put("userID", userID);
}
@Override
public Map<String, String> getParams() {
return parameters;
}
3. 안드로이드에서 [127.0.0.1]이 아닌 [10.0.2.2]를 쓰는 이유
안드로이드 에뮬레이터는 가상의 기기이기 때문에, 로컬 호스트(localhost) 주소를 사용하여 자신의 컴퓨터에서 실행 중인 서버에 접근할 수 없습니다. 따라서 안드로이드 에뮬레이터에서 서버에 접근하기 위해서는 "10.0.2.2" IP 주소를 사용해야 합니다.
이는 안드로이드 에뮬레이터와 함께 제공되는 가상의 라우터의 IP 주소로, 에뮬레이터가 실행 중인 호스트 컴퓨터를 가리킵니다. 그래서 안드로이드 에뮬레이터에서 "10.0.2.2"를 사용하여 자신의 컴퓨터에서 실행 중인 서버에 접근할 수 있습니다. 이렇게 함으로써, 안드로이드 애플리케이션을 개발하면서 로컬 서버와 통신할 때 "10.0.2.2" IP 주소를 사용할 수 있습니다.
5. 연동 확인하기
이렇게 구성하고 xml과 RegisterActivity만 만들어주시면 안드로이드에서 [EditText] 입력한 내용이 RegisterRequest를 통해 PHP 파일 안에 있는 INSERT 쿼리문을 통해 데이터베이스에 저장하게 됩니다.
소스 코드를 다 올리지 못해 실행한 모습을 보여드리고 마치겠습니다.
사용자는 회원가입에 필요한 정보를 입력하여 가입하기를 누릅니다.
안드로이드에서 입력한 값이 MySQL 데이터베이스 안에 저장된 것을 확인할 수 있습니다.
환경설정과 라이브러리 xml 코드와 java 코드가 워낙 많아 블로그에 올릴 수 없기 때문에 소스는 GITHUB에 올려놓겠습니다. 코드를 돌려보고 싶으신 분께서는 GITHUB[wjsgur8530]에 안드로이드 소스를 참고해주세요.
이번 시간에는 데이터베이스를 생성하고 안드로이드와 MySQL을 연동하여 데이터베이스에 저장하는 실습을 진행했습니다.
감사합니다.
'Framework > Android' 카테고리의 다른 글
[안드로이드/Android] 안드로이드 중단 오류(카톡/카카오톡, 인터넷, 앱) (0) | 2021.03.23 |
---|---|
[안드로이드/Android] Error launching studio 오류 해결 (0) | 2021.03.18 |
[안드로이드/Android] XAMPP로 개인 웹 서버 구축해 안드로이드-MySQL 연동하기(2) Apache+MariaDB+PHP (2) | 2021.02.24 |
[안드로이드/Android] XAMPP로 개인 웹 서버 구축해 안드로이드-MySQL 연동하기(1) Apache+MariaDB+PHP (2) | 2021.02.24 |
[Android] 안드로이드 스튜디오 가상환경에 대해 알아보고 가상 환경 실습하기 (0) | 2021.02.23 |
클라우드, 개발, 자격증, 취업 정보 등 IT 정보 공간
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!