아마존 웹서비스

RDS와 웹서비스

RDS와 웹서비스

RDS와 같은 데이터베이스 시스템의 가장 보편적인 용도는 역시 웹서비스라고 할 수 있다. 데이터베이스에 저장된 데이터를 웹을 통해서 저장하고 표현하는 것이다. 이 때 사용되는 기술이 PHP, Java, Python, ASP 와 같은 서버 측 기술들이다. 이 기술이 제공하는 언어를 이용해서 데이터베이스를 프로그래밍적으로 제어하게 되는 것이다. 

데이터베이스와 서버측 기술을 연동하는 방법은 본 수업의 범위를 넘어가는 것이다. 이것에 대한 이해가 필요하다면 생활코딩 실습편 웹서비스 만들기의 수강을 권한다. 본 수업은 PHP를 이용해서 데이터베이스를 제어할 것이다. 따라서 PHP와 데이터베이스에 대한 사전 지식이 필수적이기 때문에 생활코딩의 PHP 수업, MySQL 수업을 참고하자. 

RDS와 웹프로그래밍

RDS를 이용해서 웹서비스를 하는 방법은 특별할 것이 없다. RDS를 생성하고, (PHP, Java, Python과 같은) 에플리케이션 서버가 RDS에 접속 할 수 있도록 포트와 IP를 개방하고, RDS 인스턴스의 End Point로 접속하면 된다. 

본 수업은 EC2 인스턴스에 Apache, PHP, MySQL을 설치하고, RDS 인스턴스를 생성한 후에 여기에 테이블과 데이터를 추가할 것이다. 그리고 EC2 인스턴스를 이용해서 RDS의 데이터를 가져 온 후에 이를 웹페이지로 표현하는 방법을 알아볼 것이다. 

실습 순서

1. EC2 인스턴스를 생성한다.

2. 인스턴스의 security group를 지정한다. 

3. SSH를 이용해서 서버에 접속 한 후에 아래의 명령을 순차적으로 실행해서 Apache2, PHP, MySQL을 설치한다. 

sudo apt-get update;
sudo apt-get install apache2;
sudo apt-get install libapache2-mod-auth-mysql;
sudo apt-get install mysql-server mysql-client;
sudo apt-get install php5-common php5 libapache2-mod-php5;
sudo apt-get install php5-mysql;
sudo /etc/init.d/apache2 restart;
sudo /etc/init.d/mysql restart;

4. RDS를 생성한다. 

5. RDS의 Security Group에서 EC2 인스턴스의 Security Group의 3306 포트 접속을 허용한다. 

6. EC2 인스턴스에서 mysql monitor 접속한다. 예를들어 RDS의 접속정보가 아래와 같다면  다음과 같은 명령을 이용해서 접속한다.

  • 아이디 : egoing
  • 비밀번호 : 234!#@ave
  • RDS End point : opentutorialsorg.cfiilfasasqyvjxr.ap-northeast-1.rds.amazonaws.com
 mysql -uegoing -p234!#@ave -hopentutorialsorg.cfiilfasasqyvjxr.ap-northeast-1.rds.amazonaws.com

7. 데이터베이스를 생성한다. 

CREATE DATABASE opentutorials CHARACTER SET utf8 COLLATE utf8_general_ci;

8. 생성한 데이터베이스를 선택한다. 

use opentutorials;

9. 테이블을 생성하고 데이터를 추가한다. 

CREATE TABLE `topic` (
    `id`  int(11) NOT NULL AUTO_INCREMENT,
    `title`  varchar(255) NOT NULL ,
    `description`  text NULL ,
    `created`  datetime NOT NULL ,
    PRIMARY KEY (`id`)
);
INSERT INTO topic (title, description, created) VALUES('JavaScript란', '<h2>자바스크립트는</h2><ul><li>브라우저에서 실행되는 언어</li><li> 가장 많이 사용되는 언어</li><li>주로 html을 프로그래밍적으로 조작하 기 위해서 사용됨</li></ul>', NOW());
INSERT INTO topic (title, description, created) VALUES('변수와 상수', '<p>변수란</p> <ul> <li> 변하는 값</li> <li> x = 10 일 때 왼쪽항인 x는 오른쪽 항인 10에 따라 다른 값이 지정된다.</li> </ul> <p> 상수란</p> <ul> <li> 변하지 않는 값</li> <li> x = 10 일 때 오른쪽항인 10이 상수가 된다.</li> </ul>', NOW());
INSERT INTO topic (title, description, created) VALUES('연산자', '<p> 연산에 사용되는 기호들. (y = 5 일 때)</p> <table border="1" cellpadding="0" cellspacing="0" class="reference" sytle="table-collapse:collapse" width="100%"> <tbody> <tr> <th align="left" width="15%"> Operator</th> <th align="left" width="40%"> Description</th> <th align="left" width="25%"> Example</th> <th align="left" width="20%"> Result</th> </tr> <tr> <td valign="top"> +</td> <td valign="top"> 더하기</td> <td valign="top"> x=y+2</td> <td valign="top"> x=7</td> </tr> <tr> <td valign="top"> -</td> <td valign="top"> 빼기</td> <td valign="top"> x=y-2</td> <td valign="top"> x=3</td> </tr> <tr> <td valign="top"> *</td> <td valign="top"> 곱하기</td> <td valign="top"> x=y*2</td> <td valign="top"> x=10</td> </tr> <tr> <td valign="top"> /</td> <td valign="top"> 나누기</td> <td valign="top"> x=y/2</td> <td valign="top"> x=2.5</td> </tr> <tr> <td valign="top"> %</td> <td valign="top"> 나머지</td> <td valign="top"> x=y%2</td> <td valign="top"> x=1</td> </tr> <tr> <td valign="top"> ++</td> <td valign="top"> 증가</td> <td valign="top"> x=++y</td> <td valign="top"> x=6</td> </tr> <tr> <td valign="top"> --</td> <td valign="top"> 감소</td> <td valign="top"> x=--y</td> <td valign="top"> x=4</td> </tr> </tbody> </table> ', NOW());
INSERT INTO topic (title, description, created) VALUES('함수', '<h2> 함수는(function, method)</h2> <ul> <li> 일련의 로직을 다시 사용할 수 있도록 묶어둠(모듈화) - 개발자의 미덕은 게으름</li> <li> 입력(인자,argument)와 출력(반환,return)으로 이루어짐&nbsp;</li> <li> 사용자 정의 함수와 내장함수가 있다.</li> </ul>', NOW());

10. 데이터베이스의 데이터를 가져올 PHP 코드를 작성한다. vi를 실행한다.

sudo vi /var/www/list.php

11. 아래의 코드를 입력한다.

<!DOCTYPE html>
<html>
<head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
</head>
<body>
<ul>
<?php
mysql_connect('rds.cfiilfqyvjxr.ap-northeast-1.rds.amazonaws.com','egoing','22222222');
mysql_select_db('opentutorials');
mysql_query("set session character_set_connection=utf8;");
mysql_query("set session character_set_results=utf8;");
mysql_query("set session character_set_client=utf8;");
$sql = "SELECT * FROM topic";
$result = mysql_query($sql);
while($row=mysql_fetch_assoc($result)){
        echo "<li>".$row['title']."</li>";
}
?>
</ul>
</body>
</html>

12. 브라우저를 이용해서 EC2의 public DNS로 접근한다. 

댓글

댓글 본문
  1. chobo
    AWS 홈페이지도 개편되고해서 헷갈리군요..

    크롬에서 원격접속도 안되고 있구요..

    터미널에 직접 DB 만들어서 insert 까지 해놨는데 php 에서 땡겨오질 못하네요.
  2. dnam
    정말 친절하고 차분히 잘가르쳐주시네요 많은 도움이되었어요 정말로 정말로 감사드립니다 ㅠㅠ
  3. 나그네
    ~/list.php 했을 때 빈화면이 떠서 뭔가하고 바디에 아무내용이나 넣어보니 출력이 되네요
    디비연결이 제대로 되지 않은것으로 보고
    mysql_connect() 함수 부분 첫번째 인자 주소에
    :3306
    포트번호까지 추가해서 실행하니 실행되네요.. 혹시 저와 같이 시간킬 당하시는분 계실까봐..
  4. 김종진
    여기서는 문제가 발생하지 않지만
    mysql 확장으로 db연결하는것이 아닌
    pdo 방식으로 하시는분들은
    $dbh = new PDO('mysql:host=', 'userid', 'password'); 이 코드 아래


    -> 이코드를 $dbh->exec("set names utf8"); 이 코드를 추가해주셔야합니다
  5. 상훈
    이제는 /var/www/list.php 로 하면 결과가 나오지 않습니다.
    /var/www/html/list.php로 하시면 제대로 나오니 참고하세요..

    많이 해매다가 이제야 됬네요 ㅠ
  6. 육점이
    다들 잘 하셨겠지만 저는 이상한 부분에서 헤맸네요ㅠㅠㅠㅠㅠ

    MYSQL 연결을 할때 endpoint그대로 복사해서 붙여넣는 것이 아니라 뒤에 :3306을 제거하셔야 연결이 됩니다!!

    혹시라도 도움이 될까 여기 남겨봐요~
  7. 초초초초보
    mysql 서버는 ec2에 설치 안해도 되는거 아닌가요?

    클라이언트만 깔아서 쓰면 안되는지...?
    (이렇게 했다가 접속이 안되서 ec2 다시 깔고는 있습니다. ㅜㅜ)
  8. 함형길
    감사합니다.!
  9. KEATON
    실수로 인스턴스를 오레곤에 있는 것을 해버렸더니 명령어를 한번에 못받아들이나봐요 하나하나 하니 되네요 :)
  10. 강태영
    잘 보았습니다. 감사합니다.
  11. egoing
    RDS의 방화벽은 확인하셨나요?
    대화보기
    • 김선영
      ec2 인스턴스에서 mysql 모니터로 들어가는 명령어를 입력했는데, Unknown MySQL server host 'oops.caufyy1lde8j.us-west-1.rd...:3306' (0)로 뜨는데, 무엇이 잘못된건지 모르겠습니다ㅠㅠ
    버전 관리
    egoing
    현재 버전
    선택 버전
    graphittie 자세히 보기