이번시간에는 저번에 생성한 DB를 이용하여 테이블작성, 데이터 입력 쿼리문 등을 작성해보겠습니다.

저번시간에 생성한 DB는 Root계정 권한으로, 모든 테이블에 접근 가능한 권한을 가졌습니다.

이번에는 Root가 아닌 새로운 계정을 생성하여 DB작업을 실행해보겠습니다.

 

데이터베이스 생성-> 유저 생성-> 유저에 권한 부여-> 생성한 유저를 이용하여 작업 DB에 접속하는 순으로 이루어집니다.

 

첫 번 째로 DB를 생성해보겠습니다.

create databases DB이름; 으로 쿼리문을 작성하고 show databases;쿼리로 결과를 확인해보겠습니다.

새로운 jow1025db가 생성되었습니다. 이제 새 유저를 생성하고 유저에게 해당 DB에 모든 접근권한을 부여하겠습니다.

 

create user 'test'@'%' identified by 'cloud';

유저이름: test

유저 비밀번호: cloud

권한을 부여할 DB이름: jow1025db(위에서 만든)

 

아래는 권한을 부여하는 쿼리문입니다.
grant all privileges on jow1025db.* to 'test'@'%';

권한을 즉시 적용하는 쿼리문입니다.

flush privileges;

3가지 쿼리문을 모두 수행했을 때 워크벤치 창 아래 input 화면에 오류가 없어야합니다.

 

이제 워크벤치 홈에서 새로 생성한 user를 이용해 새로 생성한 작업 database에 커넥트 해보겠습니다.

 

아래와 같이 작성 후 Test connection으로 확인(여기서 유저 비밀번호 'cloud'입력)후 OK를 클릭합니다.

유저네임은 생성한 유저이름을, 호스트네임에는 엔드포인트 주소를 입력하면됩니다.

에러가 났다면 DB생성->유저생성 단계에서 에러가 난 것이므로 다시 진행해야합니다.

 

연결 후 새로 생긴 작업창에서 show databases; 쿼리로 아까 생성했던 DB명이 잘 나오는지 확인합니다.

 

여기까지 진행 했을 때 오류가 났다면 생성단계부터 다시 해보시길 바랍니다.

 

이제 테이블을 생성해서 몇가지 데이터를 생성해보겠습니다.

use jow1025db;(DB명) 쿼리문으로 작업 db에 연결한 뒤 3~14행을 차례대로 작성합니다.

14행 결과가 다음 처럼 나와야합니다.

 

이제 DB작업은 모두 끝났습니다. 이제 마지막으로 php와 연동하여 간단한 웹 페이지에서 DB에 데이터를 저장했을 때 

입력한 데이터가 워크벤치에서 테이블에 반영이 잘 되었는지 확인할 차례입니다.

 

EC2로 돌아와서 Php와 Mysql 연동 라이브러리를 설치해보겠습니다. 아래 명령어를 실행합니다.(디렉토리 위치는 상관없음)

sudo apt install php5.6-mysql

 

실행이 완료되었고 이제 Mysql과 Apache를 재시작합니다.

sudo service mysql restart
sudo apachectl restart

관련 패키지가 모두 정상적으로 설치되었는지의 여부를 확인합니다. 모두 잘 깔려있습니다.

dpkg -l | grep php

이제 /var/www/html/ 디렉토리로 이동하여 php스크립트를 생성해보겠습니다.

우선 create.php 파일을 만듭니다. 이 파일은 간단하게 웹 페이지에서 책 제목/본문/저자를 입력하는 화면의 코드입니다.

해당 파일에 아래와 같은 소스코드를 복붙하여 넣어줍니다. 이때 주석 친 파란색 부분 줄은 

각자 본인의 엔드포인트주소, 유저이름, 비밀번호, DB이름으로 바꿔주어야합니다. 

 

<소스코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?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>
cs

 

이제 process_creaete.php파일을 생성합니다. 이 파일은 데이터의 저장 성공 여부를 확인하는 화면의 코드입니다.

마찬가지로 똑같은 4줄을 각자 본인 설정에 맞게 바꿔준 뒤 저장하고 빠져나옵니다.

<소스코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?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>';
}
?>
cs

 

모두 저장을 완료했으면 이제 웹 페이지에서 동작을 확인해볼 차례입니다.

크롬에 EC2 퍼블릭 ip주소/create.php를 입력하면 아래와 같은 화면이 뜨게됩니다.

간단하게 제목, 본문, 저자를 각각 jow1025/jow/1025라고 저장하고 "제출"버튼을 클릭하면 아래와 같은 화면이 뜹니다.

돌아가기버튼을 클릭하면 다시 입력할 수 있구요.

 

입력했던 내용이 DB에 잘 반영이 되어있다면 실습은 모두 끝입니다. 워크벤치에서 확인해보겠습니다.

select* from topic; 을 입력해봅니다.

위처럼 아까 입력했던 jow1025/jow/1025가 잘 저장되었음을 확인할 수 있습니다!

 

이로써 EC2를 이용하여 웹서버를 구축하고 데이터 베이스를 처리하기 위한 서버를 따로 구축하여(RDS)

간단한 웹사이트를 구축하여 이들을 연동하는 작업을 해보았습니다.

 

신기하지않나요?? 

 

EC2와 RDS 모두 클라우드 형태로 구현하여 접근권한만 설정해주고 로컬에서 별도의 SW 설치없이 모두 가상의 자원을 이용하여 작업했습니다.

우리가 물리적으로 소모한 자원없이 모두 클라우드 서버 형태로 구현되어있기 때문에 매우매우 간편한 것 같습니다.

왜 돈을 내고 클라우드 서비스를 이용하는지 이제야 조금 알것 같습니다..(아마존, 구글, MS 등...)

 

최종적으로 우리가 구현한 시스템은 아래와 같습니다.

 

 

 

+ Recent posts