저번 포스팅에서 예고했던 것 처럼 이번 포스팅에서는 파라미터값을 작성할 수 있도록 HTML코드를 입력한 PHP파일을 생성하고 DB에 데이터를 넘겨주는 실습을 해볼 것이다.
좀 더 구체적으로 말하자면,
1. RDS에 웹페이지에서 입력받을 EC2데이터의 타입에 맞도록 테이블을 생성
2. PHP파일을 DB에 연결하기 위해 Mysql 연동 라이브러리 설치
3. PHP파일을 생성하여 웹페이지로 데이터를 입력하고 데이터가 정상적으로 입력되었는지 DB에서 확인
하는 작업을 해볼 것이다🙄
[실습 참고 내용]
솔루션 : EC2 - ubuntu / RDS - MySQL
아키텍처 : 웹서버 / DB서버
현재 RDS에는 root유저만 생성되어있다. 그러나 root유저는 meta data로서 작업을 피하는 것이 좋기 때문에 새로운 작업 DB를 만든다. (**이외에 다른 프로그램에서 DB 작업을 할 때에도 마스터유저가 아닌, 새로운 유저(DB)를 만들어서 작업하도록 한다.)
테이블 생성 작업
1. root로 접속
2. 새 데이터베이스 생성 및 권한 부여
먼저 root로 접속한다. 접속할 수 있는 유저가 현재로써는 하나밖에 안만들어져 있으니까!
root로 먼저 접속한 뒤, 새로운 데이터베이스를 만들 준비를 한다.
다음 명령어를 실행해보자. 좀 더 디테일한 설명은 이미지의 주석으로 확인할 수 있다.
* 작업할 new database 생성 : create database clouddb;
* new databse에서 사용할 user 생성 : create user 'test'@'%' identified by 'cloud';
* 새로 생성한 user에 권한 부여 : grant all privileges on clouddb.\* to 'test'@'%';
* 권한 적용 : flush privileges;
데이터베이스가 생성되었는지 확인하기 : show databases;
(한 줄씩 실행하려면 커서를 갖다 댄 뒤 F9를 누른다.)
1. 새로 생성한 user를 새로 생성한 작업 database에 접속한다. ( 엔드포인트 입력 )
User와 Password, Database만 수정한다. 나의 경우에는 clouddb 데이터베이스에 유저명이 test이고 패스워드가 cloud이기 때문에 그대로 입력해주었다.
2. topic 테이블 생성
create table topic( id int not null AUTO\_INCREMENt primary key,
title varchar(100) null,
description varchar(200) null,
author varchar(100) null,
created DATETIME NOT NULL);
칼럼으로 id, title, description, author, created를 가지는 topic테이블을 생성한다.
auto_increment는 자동으로 증가하는 값을 의미하며, id값은 pk로 준다.
3. 데이터 입력 insert 구문
INSERT INTO topic (id, title, description, author, created)
VALUES(1, 'harry potter','magic is power', 'yeom', now());
INSERT INTO topic (id, title, description, author, created)
VALUES(2, 'lord of the ring', 'ring is mine', 'yeom', now());
INSERT INTO topic (id, title, description, author, created)
VALUES(3, 'venom', 'black venom is fighter', 'yeom', now());
INSERT INTO topic (id, title, description, author, created)
VALUES(4, 'spiderman','spider is red', 'yeom', now());
각각의 컬럼에 값을 넣어준 4개의 데이터를 입력한다.
4. 데이터가 잘 입력되었는지 조회하기 : select \* from topic;
이미지 하단에 확대해보면 4개의 레코드를 확인할 수 있다. 정상적으로 sql쿼리가 실행되었다.
Mysql 연동 라이브러리 설치
mysql과 php를 연동시킬 수 있는 라이브러리를 설치한다.
sudo apt install php5.6-mysql
라이브러리를 설치했다면 재시작해주는 과정이 필요하다.
MySQL 과 Apache 재시작
~$ sudo service mysql restart
~$ sudo apachectl restart
관련 Package 설치 여부 확인하기
dpkg -l
: 전체 패키지 조회하기
dpkg -l | grep php
: php에 관련된 것만 조회하기
아래의 이미지로 설치가 성공적으로 된 것을 확인할 수 있다.
우분투에 php로 웹페이지 만들기
반복해서 말했듯이, 우리는 DB에 데이터를 입력하는 작업을 수행해야 한다. IT분야의 사람들은 직접 sql쿼리를 작성해서, 혹은 Toad같은 도구를 사용해서 DB에 데이터를 입력할 수 있다. 그러나 일반적으로 서비스를 사용하려는 일반 사람들이 DB에 데이터를 넣는 경우를 생각해보자. 대부분이 서비스 페이지의 버튼 하나로 DB 작업이 수행된다.
다시 말해서, 서비스를 하는 목적에서 웹페이지는 쉽게 정보를 전달할 수 있는 수단이다. 그렇기 때문에 php파일을 작성하여 웹페이지로 띄워준 후 입력 파라미터 값을 DB로 넘기는 작업을 수행하게 된다.
1. /var/www/html/ 디렉토리로 이동하여 php 스크립트 생성 : ~$ cd /var/www/html/
2. create.php 생성 - 책 / 본문 주요내용 / 저자 입력 화면을 입력받는 html코드
sudo nano create.php
create.php
<?php
$conn = mysqli_connect(
'lecture-db21.cigtm9yqh76m.us-east-1.rds.amazonaws.com', // 주소
'test',
'cloud',
'clouddb'); // 데이터베이스 이름
$sql = "SELECT * FROM topic";
$result = mysqli_query($conn, $sql);
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>WEB</title>
</head>
<body>
<h1>KPU University</h1>
<h3> 원하는 책의 제목 본문 저자를 입력하세요. </h3>
<form action="process_create.php" method="POST">
<p><input type="text" name="title" placeholder="제목 (ex)Harry Porter"></p>
<p><input type="text" name="description" placeholder="본 문 (ex)magic stone"></p>
<p><input type="text" name="author" placeholder="저자 (ex)rolling"></p>
<p><input type="submit"></p>
</form>
</body>
</html>
create.php페이지의 엔드포인트 주소를 변경해야 한다.
3. process_create.php 생성 - 데이터 저장 성공 여부 확인 화면
nano process\_create.php
process_create.php
<?php
$conn = mysqli_connect(
'lecture-db21.cigtm9yqh76m.us-east-1.rds.amazonaws.com',
'test',
'cloud',
'clouddb');
# title, description 이라는 사용자가 입력한 정보를 그대로 php에 입력하는 행위는 보안에 취약, 따라서 관리 필요
$filtered = array(
'title'=>mysqli_real_escape_string($conn, $_POST['title']),
'description'=>mysqli_real_escape_string($conn, $_POST['description']),
'author'=>mysqli_real_escape_string($conn, $_POST['author'])
);
$sql = "
INSERT INTO topic
(title, description, author, created)
VALUES(
'{$filtered['title']}',
'{$filtered['description']}',
'{$filtered['author']}',
NOW()
)
";
$result = mysqli_query($conn, $sql);
if($result === false){
echo '저장하는 과정에서 문제가 생겼습니다. 관리자에게 문의해주세요';
error_log(mysqli_error($conn));
} else {
echo '성공했습니다. <a href="create.php">돌아가기</a>';
}
?>
process_create.php페이지도 엔드포인트 주소를 변경해야 한다.
4. 잘 실행되는지 확인하기
url에 인스턴스id/create.php를 입력한다.
이제 다시 Toad로 돌아가서 아래의 쿼리를 실행해보면, 방금 입력한 값이 잘 들어갔는지 확인할 수 있다.
select \* from topic;
* 삭제할 행을 선택하고 하단에 -버튼을 누르면 쿼리를 작성하지 않고도 레코드 삭제가 가능하다.
'DevOps > Cloud' 카테고리의 다른 글
DB - 서버 연결 및 웹프로젝트 업로드 (Robo3T, FileZilla) (0) | 2021.06.30 |
---|---|
git bash에서 EC2접속 및 서버 세팅하기(Window) (0) | 2021.06.30 |
[AWS] PHP설치, RDS 인스턴스 생성 (0) | 2021.06.08 |
[Cloud]네트워크 기초 (0) | 2021.05.26 |
[AWS] EC2에 MySQL 설치하기 (0) | 2021.05.25 |
댓글