웹 애플리케이션 만들기 실습

아마존 웹서비스

소개

아마존 웹서비스란 온라인 서점으로 유명한 amazon.com에서 만든 웹서비스 인프라다. 이 인프라를 이용하면 클릭 한 번으로 몇 초 만에 자신의 서버를 생성할 수 있고, 사용하지 않을 때는 서버를 죽여서 비용을 절감할 수 있다. 자세한 내용은 생활코딩의 아마존 소개를 참고하자.

참고. 본 과정은 해외에서 사용할 수 있는 신용카드(VISA, MASTER 등)가 필요하다. 만약 신용카드가 없다면 본 과정을 따라할 수 없다. 이 수업을 완주하지 못했다고 웹서비스를 이용할 수 없는 것은 아니다. 웹호스팅을 이용하거나, 심지어 자신의 컴퓨터를 이용해서 웹서비스를 할 수도 있다. 아마존 웹서비스는 실서비스를 운용할 수 있는 한 방법에 불과하다.

비용

아마존 웹서비스는 무료가 아니다. 하지만 아마존에서는 일 년간 이 서비스를 사용해 볼 수 있는 프리티어(free usage tier)를 제공한다. AWS 프리티어를 방문해보면 아마존의 무료 정책을 볼 수 있다. 여기서 우리가 주목할 서비스는 Amazon EC2인데 매월 750시간을 무료로 1년간 사용할 기회를 준다. 750시간을 24로 나누면 31.5일이기 때문에 중지시키지 않고 사용해도 과금되지 않는다. 한가지 주의할 것은 12개월이 지난 후에 계속 과금이 이루어질 수 있다는 점이다. 그렇기 때문에 실습이 끝나면 서비스를 꼭 종료시키자. 설령 과금이 된다고 해도 프리티어가 적용되는 상품은 저렴하기 때문에 막대한 트래픽을 사용하지 않는다면 큰 비용이 지출되지는 않을 것이다.

서비스 소개

아마존의 주요 서비스들을 아래와 같이 정리해봤다. 이 중에서 우리가 사용할 서비스는 EC2다.

EC2

EC2는 Amazon Elastic Compute Cloud의 약자다. 쉽게 생각하자. EC2를 신청하면 서버로 사용할 컴퓨터가 아마존의 인프라 위에 만들어진다. SSH라는 수단을 이용해서 서버를 제어할 수 있다.

S3

S3는 Amazon Simple Storage Service의 약자다. 파일을 저장할 때 사용하는 서비스다. 파일은 용량이 큰 데이터이기 때문에 파일의 용량이 늘어나면 디스크를 늘려야 한다. 그보다 파일이 많아지면 여러 컴퓨터로 파일을 분산 저장해야 하는데, 이 서비스를 이용하면 그냥 저장만 하면 된다.

RDS

RDS는 Amazon Relational Database Service의 약자다. 이 서비스는 관계형 데이터베이스인 MySQL이나 ORACLE과 같은 데이터베이스를 제공하는 서비스다. 이 서비스를 이용하면 데이터베이스의 백업과 업그레이드와 같이 복잡하고 위험한 작업을 아마존 웹서비스에서 알아서 다해준다.

실습

지금부터 우리가 만든 opentutorials 초기 버전을 아마존 웹서비스를 통해서 실제로 서비스해볼 것이다.

회원가입

1. 회원가입 페이지에 방문한다.

2. 이메일을 입력하고 I am a new user. 항목을 선택한다.

2. 이름과 이메일 그리고 로그인 비밀번호를 입력한다.

3. 개인정보를 영어로 입력한다.

  • zip 코드의 경우 다음 URL을 참고한다. http://invnroad.tistory.com/72
  • Security Check의 Image를 보고 그 문자를 Type the characters in the above image에 입력한다.

4. 결재방법 선택

계정을 만들기 위해서 $2가 결재되는데, 이것은 신원확인을 위한 절차일 뿐 실제로는 결제되지 않는다. Cardholder's Name은 카드 뒷면에 서명부를 보면 숫자가 적혀있다. 예를 들어, 카드 뒷면 서명부에  '2404 941'라고 적혀 있으면 이 중에 뒷 3자리인 941을 입력하면 된다.

5. 전화번호 인증

Country Code를 Korea, Republic of로 변경한다. 전화번호를 기입한다. 예를 들어 휴대전화 번호가 01045888806 이라면 1045888805 를 입력한다. Call Me Now를 누르면 전화가 온다. '

전화가 걸려온다. 말이 끝나면 Your PIN에 기록된 번호를 입력한다. 화면에서는 4499를 입력한다.

6. 회원가입 완료

위와 같은 화면이 나타나면 회원가입이 완료된 것이다.

EC2 생성

웹서비스를 시작하려면 서버를 생성해야 한다. 이때 사용할 수 있는 제품이 EC2다. EC2를 신청하면 아마존의 인프라 위에 자신의 서버 컴퓨터가 즉시 만들어진다.  여기에 아파치, MySQL, PHP를 설치하면 인터넷을 통해서 바로 웹서비스를 시작할 수 있다. 우선 EC2 홈페이지를 방문해보자. EC2라는 서비스에 대한 자세한 설명을 볼 수 있다. 하지만 서비스를 체험하기 전까지는 이 내용이 추상적으로 느껴질 것이다. 그러니 우선 아래의 절차를 모두 수행한 후에 이 곳으로 돌아와서 내용을 찬찬히 읽어보자. 훨씬 더 많은 것을 이해할 수 있을 것이다.

콘솔에 접근

AWS Management Console에 접속한다. 이것은 웹 상에서 아마존의 모든 서비스를 원격으로 제어할 수 있는 편리한 수단을 제공한다.

콘솔에 접근하면 아래와 같은 화면을 볼 수 있다. 이 중에 EC2를 선택한다.

콘솔로 진입하면 제일 먼저 Region을 지정해야 한다. Region은 아마존의 인프라가 있는 지역을 의미하는데 사용자와 인프라가 지리적으로 가까울수록 빠르게 서비스를 할 수 있기 때문에 가까운 지역을 선택해야 한다. 지역에 따라서 가격 정책도 조금씩 다르다는 점도 고려해보자. 아래는 Region을 선택하는 화면이다.

참고 Region에는 한국이 없다. Region은 아마존 웹서비스의 장비들이 위치하는 지역을 의미하는데,  만들고자 하는 서비스의 사용자와 Region이 가까울수록 빠른 서비스를 제공할 수 있다. 현재(2012년 9월 5일) 한국에는 Region이 없고, 필자는 주로 tokyo를 사용한다. Region의 상황은 계속 바뀌기 때문에 상황에 맞게 설정해줘야 한다.

인스턴스를 생성한다. 인스턴스란 한 대의 서버 컴퓨터를 의미한다. Launch Instance 버튼을 누르면 인스턴스 생성을 위한 절차가 시작된다.

Create a New Instance에서 Quick Launch Wizard를 선택한다. 그럼 아래와 같은 화면이 나타난다.

이 중에서 Name Your Instance 항목에는 서버의 이름을 지정한다. 필자는 opentutorials 를 사용했다.

Choose a Key Pair에서는 Create New를 선택하고 이름은 임의로 입력한다. 필자는 opentutorials_key를 사용할 것이다. 그리고 오른쪽의 Download 버튼을 누르면 파일을 다운로드 받게된다. 이 파일은 지금 만들고 있는 인스턴스에 접속할 때 사용하는 비밀번호와 같은 역할을 하는 것이기 때문에 분실/유출에 주의하자. 이것을 사용하는 방법은 곧 알게 된다.

Choose a Launch Configuration 에서는 Ubuntu Server 중 버전이 높은 것을 선택한다. (운영체제에 따라서 로그인 할 때 사용하는 아이디가 다르기 때문에 운영체제 선택에 주의한다.)

Continue 버튼을 누른다. 아래와 같은 화면이 나타나면 정상적으로 인스턴스를 생성한 것이다. Lanuch 버튼을 누르자.

콘솔로 돌아가서 사이드 바의 항목 중 Instances를 선택한다. 생성한 인스턴스들의 리스트를 관리할 수 있는 화면으로 이동된다.

인스턴스의 리스트가 보인다. 이 화면을 통해서 각 인스턴스의 상태를 파악할 수 있고, 인스턴스를 제어하고 추가할 수 있다.

서버접속 (SSH)

인스턴스에 접속해보자. SSH라는 방식을 이용할 것인데, SSH는 네트웍을 통해서 다른 컴퓨터를 제어하는 방법이다. SSH를 이용하기 위해서는 key pair에서 다운로드 받은 비공개 키를 이용해야 한다. 그리고 서버에 접속을 하려면 서버의 URL을 알아야 한다. AWS EC2 인스턴스 리스트에서 접속하려는 인스턴스 위에 마우스를 올려놓고 오른쪽 클릭을 하면 아래와 같은 메뉴가 나타나는데 이 중에서 Connect를 선택한다.

아래와 같은 대화상자가 나타나면 Connect from your browser using the Java SSH Client 를 선택한다. 그리고 User name 에는 root 대신에 ubuntu를 입력하고 다운받은 SSH키의 위치를 적어준다. 자신의 운영체제에 맞는 경로를 적어주면 된다. Save key location은 키가 저장되는 위치를 기억하는 기능이다. Private key는 시스템에 로그인하는 비밀번호와 같은 역할을 하기 때문에 절대로 유출돼서는 안된다. (필자처럼 다운로드 폴더에 저장하면 안된다. 반면교사로 삼자!) 모든 정보가 입력됐으면 Launch SSH Client 버튼을 누른다.

참고 접속 방법 중 Connect with a standalone SSH CLIENT는 각자의 SSH 클라이언트를 이용해서 접속할 수 있는 메뉴다. 윈도우 사용자라면 puttyxshell을 이용하고, 맥 사용자라면 terminal을 사용하면 된다.

이 방법으로 접속하기 위해서는 자바가 컴퓨터에 깔렸어야 한다. 만약 자바가 없다면 안내에 따라서 자바를 설치한 후에 다시 시작하자.

위와 같은 화면이 뜨면 무사히 접속한 것이다. 한가지 주의할 점이 있다. 데이터를 입력할 때 한글이 깨질 수 있는데 아래와 같은 방법으로 이 문제를 해결할 수 있다.

터미널의 메뉴 중 Settings > Terminal을 선택한다.

Encoding의 항목을 utf-8으로 변경한다.

여기까지 잘 따라왔다면 운영체제 시간에 했던 작업까지 도달한 셈이다. 이제 서버구축 시간에 했던 작업을 그대로 수행하겠다. 자세한 내용은 서버구축편을 참고하고, 이번 수업에서는 필요한 명령을 단순 열거하겠다.

참고 복사는 ctrl+ins(insert), 붙여넣기는 shift + ins(insert) 키를 조합해서 사용한다.
  1. sudo apt-get update;
  2. sudo apt-get install apache2;
  3. sudo apt-get install libapache2-mod-auth-mysql;
  4. sudo apt-get install mysql-server mysql-client;
    root의 비밀번호를 입력한다. 실습을 편하게 하려면 비밀번호로 111111을 입력하자.
    그렇다!! 이것은 몹시 고약한 방법이다. 실제로는 이런 비밀번호를 사용하면 안된다.
  5. sudo apt-get install php5-common php5 libapache2-mod-php5;
  6. sudo apt-get install php5-mysql;
  7. sudo /etc/init.d/apache2 restart;
  8. sudo /etc/init.d/mysql restart;

이렇게 해서 웹서비스를 운영하기 위한 소프트웨어들을 설치했다. 설치가 잘 됐는지 확인해보자. 아마존 웹서비스는 방화벽을 기본적으로 제공한다. 방화벽이란 아무나 서버로 접속할 수 없도록 하는 보안수단인데, 아마존은 기본적으로 웹접근을 허용하지 않기 때문에 누구나 서비스에 접근하도록 하려면 아래와 같은 단계를 수행해야 한다. 이 단계는 지금 이해하지 못해도 된다. 어렵게 느껴져도 걱정하지 말자. 그냥 따라하면 된다.

인스턴스 리스트에서 Security Groups의 내용을 확인한다. 아래 그림은 필자의 화면을 캡처한 것인데, 그림에 따르면 필자의 인스턴스 opentutorials의 Security Groups는 붉은색으로 강조 표시한 'quicklaunch-1'다. 각자 자신의 Security Groups를 확인하자.

그럼 opentutorials 인스턴스에 적용된 보안설정을 변경하기 위해서 quicklaunch-1의 보안설정을 변경해보자. 콘솔 사이드바의 항목 중 NETWORK & SECURITY 하위에 Security Groups 항목을 선택하자.

Security Groups 항목 중에 quicklaunch-1을 선택하면 하단에 Security Group selected 내용이 달라질 것이다. 아래의 이미지를 참조해서 HTTP를 Inbound 규칙으로 추가하자. 웹브라우저가 특정 URL로 접속을 하면 80번 포트로 접근을 하게 되는데, Inbound에 80번 포트가 등록되어 있어야 해당 인스턴스로 불특정다수가 접속 할 수 있다. 쉽게 말해서 누구나 웹을 통해서 서버에 접속할 수 있게 하기 위한 설정이다.

웹서버도 설치했고, 방화벽도 열었다. 접속이 가능한지 확인해보자. 이제 웹을 통해서 서버에 접속할 수 있는지 확인해보자. 웹을 통해서 접속하려면 URL을 알아야 한다. 인스턴스 항목에서 오른쪽 클릭을 한 후에 connect 항목을 선택하면 아래와 같은 화면이 나타날 것이다. 이 중에서 Public DNS가 웹을 통해서 접근할 수 있는 URL이다. (인스턴스의 connect 항목을 선택하는 부분 참고)

위에서 알아낸 Public DNS를 브라우저의 주소창에 복사&붙여넣기하면 아래와 같은 화면이 뜰 것이다.

데이터베이스 셋팅

소스코드를 실서버에 적용해서 서비스를 구동하기에 앞서서 데이터가 저장되는 공간인 데이터베이스를 셋팅하자. 이 절차는 데이터베이스편에서 이미 상세하게 다뤘기 때문에 간단하게 언급하겠다.

1. 데이터베이스 서버에 접속한다.

mysql -uroot -p

데이터베이스 설치과정에서 입력한 root 유저의 비밀번호를 입력한다.

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

CREATE DATABASE opentutorials CHARACTER SET utf8 COLLATE utf8_general_ci;

3. 데이터베이스를 선택한다.

use opentutorials;

4. 테이블을 생성한다 .

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`)
);

5. 아래의 SQL을 복사&붙여넣기해서 데이터를 입력한다.  

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());

실서버 적용 (deploy)

개발환경의 작업물을 실서버에 적용하는 행위를 디플로이(deploy)라고 부른다. 지금부터 디플로이하는 법을 알아볼 것인데, Git을 이용해서 버전관리를 하지 않았다면 아래와 같이 하면 된다. 버전관리를 한 경우는 뒤에서 설명한다.

버전관리를 하지 않은 경우 디플로이

버전관리를 하지 않은 경우는 설명할 것이 많기 때문에 그냥 필자가 작업한 내용을 적용하자.

웹서비스를 위한 파일이 위치하는 경로인 document root로 이동하자.

cd /var/www

아래의 URL을 방문해서 필자가 만든 opentutorials 저장소에 접속한다.

https://github.com/opentutorialsorg/opentutorials4-egoing

zip 버튼 위에서 오른쪽 클릭을 하고 링크 주소 복사를 선택(파이어폭스 기준)

콘솔에 아래와 같이 입력한다.

sudo wget https://github.com/opentutorialsorg/opentutorials4-egoing/zipball/master -O o.zip

이 명령은 https://github.com/opentutorialsorg/opentutorials4-egoing/zipball/master에 위치하는 파일을 다운로드한 후에 o.zip 이름으로 저장한다는 의미다.

그럼 /var/www/o.zip 파일이 생성됐을 것이다.

이제 압축된 파일을 해제한다. 압축을 해제하려면 unzip이 설치되어 있어야 한다. 이 프로그램을 설치해보자.

sudo apt-get install unzip;

이제 압축을 풀어보자. 아래와 같이 입력한다.

sudo unzip o.zip;

아래와 같은 화면이 출력된다.

위의 내용은 압축된 파일들이 opentutorialsorg-opentutorials4-egoing-7df5b42 디렉토리 하위에 풀렸다는 것을 의미한다. 우리는 이 파일들이 /var/www/opentutorials 하위에 풀리기를 원한다. 그럼 이 디렉토리의 이름을 아래와 같은 명령으로 변경하면 된다. 디렉토리명은 달라질 수 있기 때문에 자신의 상황에 맞는 이름으로 변경한다.

sudo mv opentutorialsorg-opentutorials4-egoing-7df5b42 opentutorials

이제 웹을 통해서 서비스에 접근해보자. 아래의 URL은 필자의 서버 URL이다. 노란색으로 강조 표시한 부분을 각자 자신의 Public DNS로 변경해서 접근해야 한다. (public DNS 알아내는 법)

http://ec2-23-21-14-98.compute-1.amazonaws.com/opentutorials/index.php

버전관리를 하는 경우 디플로이

버전관리를 하는 경우라면 디플로이가 매우 쉽다. 일단 Git을 설치해야 한다. Git을 사용하는 방법은 버전관리편에서 자세히 설명하고 있기 때문에 여기서는 간단하게 언급하겠다.

Git 설치을 설치한다.

sudo apt-get install git

http://github.com 에 있는 자신의 저장소에 방문한 후에 아래 화면처럼 HTTP를 클릭한 후에 그에 해당하는 URL을 복사한다. 아래 화면은 필자의 git 저장소 URL이다.

참고 clone을 할 때 SSH가 아니라 HTTP를 사용했다. 어느 쪽을 사용해도 무관하다. HTTP를 사용하면 원격저장소로 push 할 때마다 비밀번호를 입력해야 하는 불편함이 있다. 하지만 지금 우리는 실서버에 소스를 반영하고 있는 것이고, 일반적으로 실서버에서 직접 소스를 수정하는 경우는 없다. 개발서버에서 소스를 수정하고, 테스트한 후에 문제가 없으면 그걸 원격저장소로 업로드(push) 한 후에 그걸 실서버로 다운로드(pull)하는 것이 일반적인 절차다. 따라서 HTTP 모드를 사용해도 된다.

웹서비스를 위한 파일이 위치하는 경로인 document root로 원격저장소의 파일을 동기화(다운로드)하자. 아래 명령은 '/var/www/opentutorials'로 'https://github.com/opentutorialsorg/opentutorials4-egoing.git'에 위치한 저장소의 파일들을 동기화한다.

sudo git clone https://github.com/opentutorialsorg/opentutorials4-egoing.git /var/www/opentutorials

이제 웹을 통해서 서비스에 접근해보자. 아래의 URL은 필자의 서버 URL이다. 각자 자신의 Public DNS로 접근해야 하는 것을 잊지말자.

http://ec2-23-21-14-98.compute-1.amazonaws.com/opentutorials/index.php

이렇게 해서 대장정이 정말로 끝났다. 우리는 웹서비스를 기획해서, 디자인하고, 개발하고 운영하는 전 과정을 풀코스로 돌아봤다. 특히나 가상머신을 이용한 개발이나, Git, github.com, 아마존 웹서비스등은 이 튜토리얼이 만들어지고 있는 시점에서는 최신의 트랜드를 반영한 것들이기 때문에 이것들을 경험해 봤다는 점에 대해서 자부심을 가져도 좋다.

이제 무엇을 모르는지 모르는 상태에서 어느 정도 벗어났기 때문에, 슬슬 무엇을 모르는지 아는 상태로 나아갈 때가 됐다. 생활코딩에는 각각의 기술들에 대한 수업들이 대부분 준비되어 있다. 신중한 사람이라면 이것들을 하나씩 마스터해나가면 좋을 것이고, 필자처럼 성미가 급한 사람이라면 종이를 펼쳐놓고 만들고 싶은 것을 일단 그려보자. 출발

댓글

본 수업은 웹 애플리케이션 만들기 수업으로 대체 되었습니다. 개편된 수업에서 뵙겠습니다. 본 수업은 2015년 6월 이후에 폐지됩니다. http://opentutorials.org/course/1688

 

궁금하신 점은 각 강의의 댓글로 문의해주세요. 답변이 없는 것은 운영자가 못 봤거나 모르는 것입니다. 생활코딩 커뮤니티에 질문하면 더 많은 분의 도움을 받을 수 있습니다. 그리고 문제를 해결했다면 본문의 댓글로 공유해주시면 다른 분에게 큰 도움이 됩니다. 원하는 답변을 얻는 것은 확률의 문제입니다. 질문의 품질이 높으면 그 확률도 올라갑니다. 질문자의 상황을 더 잘 전달하기 위해서 screenr.com이나 이미지 캡처의 이용을 권합니다.

 

댓글 본문
작성자
비밀번호
  1. 김건우
    aws에 mysql을 설치하였습니다.
    local에 있는 mysql workbench에서 ssh없이 standard (TCP/IP)로 aws 접근하려고 하는데, 방법이 있을까요 ?
    standard (TCP/IP) over ssh 로는 접근이 되는데, private key가 필요하여, 공동으로 협업하려는 친구들에게는 줄 수가 없습니다. 또한, 코딩시 db connection 맺을 때 ssh정보와 private key 등 이런 정보는 보통 안넣고 일반적인 ip와 name, pw 만 입력하게 되는데.. 혹시 방법이 있을까요 ??
  2. 준맹
    th
    아마존 서버 컴퓨터 기본 디렉토리가 /var/www/html 로 바뀐것 같네요. 이 디렉토리 안에다가 작업하셔야지 웹상에서 뜨네요. 나중에 하시는 분들 참고하시길 바래요.

    ////
    th님 덕분에 저도 해결했습니다.
    따라하시는 다른 분들도 저와 같은 어려움 있으신 분 계실까봐 올려둡니다.
    대화보기
    • 후반양반무
      부록:저사양 실습환경 을 보면 방법이 나옵니다~
      대화보기
      • gngngngn
        안녕하세요. 강의를 따라가는 도중에 궁금한 점이 생겨서 질문드립니다.

        아마존 웹서비스에서 원격으로 (?) 터미널만 열 수 있는건가요 ?
        또 이 터미널에서 aptana는 실행 할 수 없는건가요 ?

        저 터미널 내에서 php파일을 만들어보고 실행해보고 싶은데 방법이 없을가요 ??
      • dolhim
        헉, (오래된 글이지만..)
        덧글 남겨주셔서 감사합니다. 덕분에 해결했네요 ㅎㅎ
        대화보기
        • chrisjune
          안녕하세요 이고잉님!
          강의잘듣고 하루만에 독파했습니다.!!

          궁금한점은 기존 서버에 apm과 git을 올리고 연동까지 했는데
          아마존 ec2랑 연동시키고나서 왜 다시 깔아야 하는지 궁금합니다.
          아마도 요요아마존서버에 설치하는 것같은데, 그렇다면 왜 mysql에서 db는 다시 만들어야 하는지 궁금합니다.
          기존 자료들이 연동하면서 다 사라지게 되는건지 없어지는 건지 궁금하네요

          두번째로 어떻게 연동이 된건진 모르겠지만 github로 push를 했더니 아마존에도 올라가네요 자동으로
          그렇다면 mysql에 저장된 데이터도 연동이 되어 웹서버에 저장이 되는건가요?
        • egoing
          따로 따로 적용 됩니다~
          대화보기
          • ryan0x4
            초초초초초보//폴더를 만들 때 중첩적으로 만들 수가 없습니다.

            현재 / 에 위치하고 있다고 할 때
            a라는 폴더가 없는데 ./a/b 를 만들 수 가 없다는 말이지요.
            먼저 a를 만들어야 b를 만들 수 있습니다.

            메시지를 천천히 읽어보시면 도움이 많이 될거에요. 혼란스러워서 못보신 것 같네요.
            대화보기
            • ryan0x4
              ec2와 rds를 동시에 써도 프리티어 제공시간은 따로 사용되나요??

              둘 다 같이 쓰고있는데 혹시 넘어갈까봐 걱정되네요
            • 엔터를 땅치면 요롷케
              굿굿굿 감사합니다
            • dongxuan09@naver.com
              아마존 웹서비스에 시계php/javascript문을 돌려봤더니....영국쪽 시간대가 나오더라구요. 분명 일본 도쿄에 서버를 둔 instance를 만들었다고 생각했는데요.... 뭘까요....당한걸까요....
              이미지 링크 올립니다.
              http://tuuk.dance/1cB13
            • 찐똥구리구리
              전 맥에서 터미널로 ubuntu접속하면 한글입력이 안됩니다. 접속전까지는 잘 되다가 말이죠. mysql에서 데이터베이스 입력도 하지 못했어요. 서버쪽 언어 설정을 구글링해서 이것저것 다해봤는데, 안되네요. 터미널자체적으로 설정도 utf8과 eurkr을 바꿔봐도 해결이 안되네요. 아 괴롭습니다. 어쩌다 보니 phpmyadmin으로 db구축에는 성공은 했는데요. 애초에 가장 뼈대같은 방법이 해결이 안되서 찜찜하네요. 혹시 이런 문제 직면해서 해결하신 분 있으면 도움 부탁드려요 ㅜㅠ

              암튼 egoing님 감사요~^^;
            • 돌맞은나
              허허... 이거 아마존이 메뉴가 많이 바뀌었네요^^;;
              완전 초보라 가입하고 만드는데 하루 걸릴 느낌이..후덜덜
            • 신민호
              저도요~
              대화보기
              • 신민호
                리눅스로 접속하는 방법문의드려요~
              • 성냥암이
                Terminate 하시면 일정 시간 지난 후 자동으로 삭제됩니다.
                대화보기
                • 초초초초보
                  안녕하세요. 작심 40시간 보면서 공부하다가, AWS 관련 공부가 막혀서 처음 글 남깁니다.
                  (AWS 부분에서 막혀서.. 이쪽 강의 보다가 여기에 남깁니다.)

                  질문은.. 현재 Aptana 에서 connect 해서 사용하고 있는데, 파일 Sync가 안됩니다.
                  (현재 상태 - AWS 가입 및 EC2 사용 중. Aptana에서 연결. Putty 사용중. 공부는 PHP 끝내고 MySQL 쪽 넘어가는 중)

                  처음부터 안됐으면 멀 잘못 따라했나 했을건데, 초반에는 잘 되다가 갑자기 Sync가 안되니.. 미치겠습니다.

                  그래서 구글링도 해보고 하니.. Space 문제 일 수도 있다고 했는데.. 제가 따라서 한것이라고는 PHP 수업 뿐이거든요. 용량 큰 파일이 있을리 없어서요..

                  현재 AWS 콘솔 상황은 다음과 같습니다.

                  1. EC2 Instance 하나 생성 중
                  2. Volumes 메뉴에 8GB 하나 잡혀있는 중(Volume Type gp2)


                  (이미지 파일이 안올라가서.. 그냥 적어보면..)

                  df -h 해서 Filesystem 사용량을 보면.. 다음과 같습니다.

                  Filesystem Size Used Avail Use% Mounted on
                  /dev/xvda1 7.8G 7.4G 0 100% /
                  none
                  udev
                  tmpfs
                  none
                  ..
                  ..

                  도데체 어디가 문제 일까요?

                  파일 하나를 저장 해보면.. 다음의 메세지가 뜹니다.

                  메세지: Title - Error Uploading, 내용 - Createing Directory failed(파일이 안올라가서, 서버의 디렉토리도 지워봤거든요)..
                  Title - Error Uploading, 내용 - Parent path doesn't exist

                  ubuntu 로 권한도 줬고요..(/var/www/html)

                  자꾸 저쪽 /dev/xvda1 의 사용량이 의심이 되는데요..

                  제가 해봐야 할 방향이라도 좀 알려주세요.

                  감사합니다.
                • alexmoon
                  웹서비스를 제공하기 위해 아마존에서 하나의 컴퓨터를 제공받았기 때문에 기타 여러 프로그램들을 다시 설치하는 것
                  은 이해가 됩니다.

                  그런데 mysql에 데이터들을 다시 입력을 하였는데 기존에(선행수업에서) 넣은 데이터들을 그대로 활용할 수는 없는 건가요??

                  혹시 mysql에 데이터를 입력할 수 있는 권한은 IP하나로 제한되어 있어서 그런 것인가요?
                • bumky
                  java ssh 실행할 때 user name을 ubuntu로 하지 않고

                  ec2-user로 나두고 실행하면 정상적으로 실행되네요..

                  instance 만들 때 뭘 잘못한건가요..;;
                  대화보기
                  • bumky
                    저도 아래에서 손성일님이 질문하셨던 것처럼 같은 문제가 발생하네요

                    키위치랑 다 지정했는데도..

                    다 설치하고 ssh 자바로 실행을 하면요
                    Server's hostkey (ssh-dss) fingerprint:
                    openssh md5: d9:ef:17:4e:c7:2c:8c:d8:cf:5f:60:d8:bb:32:9d:09
                    bubblebabble: xotaf-hucof-bilof-petob-lypib-pedob-mimyb-ducor-becos-kufap-fuxix
                    여기까지 뜨다가

                    작은 창이 뜨면서
                    midterm-alert
                    I/O error -read failed : unknown errer
                    이렇게 나오면서 진행이 되지 않습니다. 아시는분
                    대화보기
                    • egoing
                      여러가지 이유가 있을 수 있는 문제 입니다.

                      우선 생각나는 것은 host명을 localhost로 하셨다면 127.0.0.1로 바꿔보시고 반대의 경우도 해보시면 좋을 것 같습니다.

                      또 mysql를 restart 시켜보시는 것도 좋을 것 같습니다.
                      sudo service restart mysql

                      아래 내용을 한번 참고해보셔요
                      http://stackoverflow.com......ock
                      대화보기
                      • redwinez
                        아마존 디렉토리가 /var/www/html 이 밑에서 언급한것 처럼 생겨서 html밑으로 opentutorials폴더를 옮겨서 해보니 다음과 같은 메세지가 나오면서 html이후 디렉토리와의 연결이 되지 않는군요

                        Could not connect: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

                        지금까지 열심히 쫒아 왔는데 이곳에서 막히네요????

                        다른분들의 조언을 부탁합니다
                      • ㅇㅇ
                        이메일 발송했다는데 그거 열어보고 아마 링크 클릭하고 진행하시면 될거에요
                        가입후인증하는 절차가 따로 있나보네요
                        대화보기
                        • 김강호
                          아마존 가입하고, EC2를 클릭했는데
                          Account pending

                          Thank you for signing up for Amazon EC2. Your subscription is being processed.

                          We will send you an email when you can begin using this service. For most customers this takes only a few minutes, but if additional account verification is required, then processing can take several hours.

                          Until your subscription is ready, you can learn more about the AWS Management Console.

                          문장이 나오네요. 어떻게 해결해야 할지요..
                        • tyche
                          감사합니다. 영상보면서 따라해봐야겠어요.
                        • 일개일개
                          안녕하세요 egoing님 강의 정말 잘들었습니다
                          너무 감사합니다 ㅠㅠ
                          저는 어제 날짜로 AWS 인스턴스를 도전한 학생입니다
                          현재 AWS에서는 AMI를 고르는 단계에서 Ubuntu 옵션을

                          HVM 과 PV 두가지를 줍니다. 이것의 차이는 무엇인지 알 수 있을까요?
                        • 아마존 서버 컴퓨터 기본 디렉토리가 /var/www/html 로 바뀐것 같네요. 이 디렉토리 안에다가 작업하셔야지 웹상에서 뜨네요. 나중에 하시는 분들 참고하시길 바래요.
                        • egoing
                          키는 한번만 다운로드 됩니다. 분실하면 기존의 인스턴스를 이미지화하고 이를 실행하면서 키를 만드셔야 합니다
                          대화보기
                          • 토로
                            손성일 님

                            아마존 사이트 변경되면서 Private key path에 회색으로 eg. C:\ 키 위치가 적혀있는데
                            이 부분에서 자신의 키 위치를 설정안하고 그냥 실행 하셨거나
                            키 위치를 잘 못 작성하신것 같습니다.
                            대화보기
                            • 토로
                              아마존 사이트가 많이 변경된것 같은데요.
                              ec2처음 들어가서 key다운로드를 어디서 하는 건가요??
                            • 손성일
                              다 설치하고 ssh 자바로 실행을 하면요
                              Server's hostkey (ssh-dss) fingerprint:
                              openssh md5: d9:ef:17:4e:c7:2c:8c:d8:cf:5f:60:d8:bb:32:9d:09
                              bubblebabble: xotaf-hucof-bilof-petob-lypib-pedob-mimyb-ducor-becos-kufap-fuxix
                              여기까지 뜨다가

                              작은 창이 뜨면서
                              midterm-alert
                              I/O error -read failed : unknown errer
                              이렇게 나오면서 진행이 되지 않습니다. 아시는분
                            • 감사합니다! 마지막 디플로이 파트에서 실패 했지만 하나하나 자세하게 배워야겠습니다 ~~~
                            • 까마귀나무
                              오픈튜토리얼로 처음 코딩을 접했습니다. 시작부터 많이 어렵네요.. 아래에도 같은 문제가 여러번 발생한것 같기에 어찌어찌 자체해결한경위를 쭉 적어봅니다orz

                              1. http://cfile7.uf.tistory.com......962
                              아래 우분투 디폴트페이지가 나오신다는 분이랑 같은 증상이여서 계속 찾아 헤맸는데 빨간색 란에 It works가 당당히 있더라구요 -.,- 아마 우분투 버젼이 바뀌면서 IT Works 페이지도 바뀐게 아닌가 합니다..

                              2. 몇몇분들처럼 /opentutorials/index.php를 하면 404 Not Found The requested URL이 뜨는 문제에서
                              sudo mv opentutorials html/opentutorials로 하고 다시/opentutorials/index.php로 들어가면 일단 페이지는 들어가집니다. (우분투 기본 설치프로그램?에 html폴더가 새로 생긴 모양입니다..orz)

                              3. 그러고나서 발생했던 Could not connect: Access denied for user 'root'@'localhost' (using password: YES) 가 뜨는 문제
                              아래에서 몇번 언급 된 것을 보고 나도 비밀번호가 잘못됐나? 해서 mysql -uroot -p로 들어가 비밀번호를 쳐본 결과 비밀번호가 맞았습니다.....그래서 mysql에서.
                              mysql> use mysql;(엔터)
                              mysql> update user set password=password('111111') where user='root';(엔터)
                              mysql> flush privileges;(엔터)
                              mysql> \q (엔터)
                              했다가 다시 mysql -uroot -p해서 비밀번호 111111확인한 뒤 페이지로 가보니 제대로 떴습니다 ㅠ▽ㅜ 제 저번 비밀번호가 상~당히 복잡한거였는데 (특수문자포함) 그게 이유가 아니었나 추측해봅니다. 흐허허
                            • PegasusK
                              이고잉님

                              /var/www에 있는 html의 이름을 바꾸면 저의 웹이 정상적으로 실행이 안되더라구요.

                              DNS가 읽는 디렉토리를 변경하는 방법은 무엇인가요?
                            • egoing
                              혹시 /var/www/html에 파일을 만들어 보실래요?
                              대화보기
                              • daniel
                                마지막에 막혔습니다.! ㅠㅠ
                                DNS 주소를 복사 후 페이지를 열었는데 egoing님과 같은 It works! 가 나오지 않고
                                Apache2 Ubuntu Default Page가 나옵니다.
                                그리고 ssh는 잘되지 않아 putty를 쓰고 있습니다.
                                답변 부탁드립니다.
                              • egoing
                                저도 이 댓글을 작성하는 시점에서는 libapache2-mod-auth-mysql의 기능이 정확하게 무엇인지 잘 알지 못합니다. 별 문제가 없으면 일단 깔지 않아도 되지 않을까요? ㅎㅎ
                                대화보기
                                • MANY
                                  그렇다면 지금이라도 3번을 설치해야 하는건가요?
                                  설치하지 않았지만 아직까지는 별 문제가 없는데
                                  지금 깔아도 되는건가요?? :D
                                  대화보기
                                  • egoing
                                    동영상에서 3번 설치를 건너 뛰었네요. 편집 과정의 실수인 것 같습니다. 영상 내에 안내를 추가했습니다. 그리고 /var/www/html 이 있는 것은 아파치의 기본설정이 그렇다면 그렇게 될 수도 있습니다. 해당 디렉토리의 위치는 아파치의 설정을 통해서 확인하실 수 있습니다.
                                    대화보기
                                    • MANY
                                      [자답] 인스턴스를 여러개 만들어보며 결국 해결하긴 했는데
                                      이렇게 되는 이유를 몰라서 다시 질문드립니다.

                                      변화된 건 2가지 입니다.
                                      첫번째. 이들 중 3번을 깔지 않음(이유. 동영상에서 이고잉님이 깔지 않아서)
                                      1 sudo apt-get update;
                                      2 sudo apt-get install apache2;
                                      3 sudo apt-get install libapache2-mod-auth-mysql;
                                      4 sudo apt-get install mysql-server mysql-client;
                                      5 sudo apt-get install php5-common php5 libapache2-mod-php5;
                                      6 sudo apt-get install php5-mysql;
                                      7 sudo /etc/init.d/apache2 restart;
                                      8 sudo /etc/init.d/mysql restart;

                                      두번째. 정체모를 html 폴더
                                      10번 동영상 강의에서 /var/www/에 들어가시면 index.html 파일이 있는데
                                      전 html 폴더가 있더라구요.
                                      그래서 cd html 하고 /var/www/html에서 sudo git clone...... 을 입력하였음.

                                      앞과 다르게 이 두가지를 바꾸고 나서
                                      DNS/opentutorials/index.php가 열렸습니다.
                                      하나하나 해보기엔 지금 너무 지쳐서 다시 시도는 못해봐서 정확히 무엇이 문제인지 잘 모르겠습니다.
                                      하지만 둘 다 납득이 잘 안되네요.

                                      아래에 질문했던 DNS 주소는 여전히 not found 입니다.
                                      이고잉님의 정확한 답변을 기다립니다.
                                      늘 감사합니다.
                                      대화보기
                                      • MANY
                                        질문이 너무 긴 것 같아 불필요한 부분을 삭제합니다 :D

                                        [IP주소 또는 public DNS]/opentutorials/index.php를 하면
                                        404 Not Found The requested URL /opentutorials/index.php was not found on this server.
                                        에러가 뜹니다.
                                        index.php를 비롯하여 index.html 등의 모든 opentutorials 하위페이지에서 404 not found 에러가 뜹니다.
                                        http://ec2-54-178-160-231.ap-northeast-1.compute.amazonaws.com......php
                                        ------------------------------------------
                                        opentutorials 폴더에는 파일들이 들어있구요,
                                        security groups 도 http 80으로 설정했습니다.

                                        무엇이 문제일까요?


                                        지금까지 별 문제없이 쭈-욱 잘 왔는데 마지막에 막혀 너무 속상하네요. ㅜ
                                      • protester
                                        헉,,,됐어요~! 2틀을 여기서 헤메고 있었는데.....기쁘기도하고 좀 허무하기도 하고...진작 댓글 올릴 걸....
                                        암튼, egoing님 감사합니다. 최고예요~~!^^
                                      • egoing
                                        아래 명령으로 재시작을 한번 해보시겠어요?

                                        sudo service mysql restart
                                        대화보기
                                        • protester
                                          데이터베이스 셋팅 부분에서 데이터베이스 서버에 접속을 하려는데, 계속 아래와 같은 메시지가 뜨고 접속이
                                          안 되네요. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
                                          비밀번호가 틀렸나해서 다시 다 지우고 비밀번호를 111111로 두번이나 바꾸었는데도 똑 같을 걸 보면 비밀번호 문제는 아닌 것 같습니다. 혹시 다른 원인이 있는 것인지 도움 부탁 드립니다.
                                        • 종맹
                                          Aws접근시 pem파일을 putty generater로변환 후 putty에 설정하시면 접근됩니다 ㅡ 안되면 터미네이트로 새로운 인스턴트로 해보심도...
                                          대화보기
                                          • 종맹
                                            모든 추가기능은 돈을 가져갑니다 ㅡ 내부 아마존 아이피 추가만 해도요
                                            대화보기
                                            • egoing
                                              데이터베이스 페스워드가 잘못되었다는 의미입니다. 설치할 때 입력한 비번을 정확하게 입력했는지 확인해보셔요. 그래도 안되면 아래 자료를 참고해보시고요.
                                              http://pgclks.tistory.com/289
                                              대화보기
                                              • mango
                                                (public dns)/opentutorials/index.php 를 웹브라우저창에 입력하면
                                                Could not connect: Access denied for user 'root'@'localhost' (using password: YES)
                                                라고 에러가 뜨는데요 해결방법을 못찾고 있습니다. ㅠㅠ
                                              • 바위구름
                                                아마존 서비스 화면이 많이 변경되었습니다 - 서버 지역설정 메뉴는 EC2 데시보드 화면 상단 우측, 사용자 이름 옆에 있습니다
                                              • egoing
                                                완주해주신 것으로도 충분합니다!
                                                대화보기
                                                버전 관리
                                                egoing
                                                현재 버전
                                                선택 버전
                                                graphittie 자세히 보기