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)으로 이루어짐 </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로 접근한다.