도커를 사용하는 방법에 대해 정리한 글입니다.

 

도커란?

도커는 컨테이너 기반의 가상화 오픈소스 플랫폼입니다.

위키백과를 참고하면, 도커는 리눅스의 응용프로그램들을 소프트웨어 컨테이너 안에 배치시키는 일을 자동화 하는 오픈소스 프로젝트라고합니다.

 

이게 대체 무슨소릴까..?

 

예를들어 Host OS위에서 다른 OS를 사용하고싶을 때 많은 분들이 아마 Vmware나 Virtual Box등을 이용해서 새로운 OS를 올려놓고 사용해보셨을겁니다.

이 방식은 OS전체를 가상화 하는 방식으로, 기존 OS와 완전히 다른 하나의 완전하고 독립적인 OS를 생성하는 방식인데요. 하지만 이 방식은 기본적으로 Host OS의 물리적 자원을 할당받아서 사용되기 때문에 속도도 느리고 새로운 운영체제를 설치하는 것이기 때문에 소모되는 자원, 용량등이 매우 큽니다.

실제로 vmware위에 우분투나 라즈비안 등의 OS를 설치할 때 이미지파일 용량도 크고 다운받는 시간도 오래걸리며 vmware 설정에서 호스트 자원을 얼마나 할당해줄 것인지를 설정하는 옵션이 있습니다.

실제로 제가 rpi에 설치한 이미지 파일이 5gb가 훨씬 넘네요. 이 자체로 가상머신의 사용은 시스템에 큰 부담으로 작용합니다.

 

이를 보완하기 위해 등장한 개념이 '컨테이너' 입니다. 각 컨테이너는 하나의 '격리된 프로세스 공간' 입니다.

컨테이너는 os를 가상화하여 host os와 커널을 공유하면서 이를 '프로세스'로 간주하여 격리된 환경에서 실행하는 개념입니다. 하드웨어 전체를(물리적 자원) 가상화 하는 가상머신 방식과 달리 os끼리 완전 독립되지 않고 서로 커널을 공유하는 방식이기 때문에 가상머신보다 훨씬 부담도 적고 속도도 빠르며 자원 할당량도 적은 장점을 가집니다.

CPU, 메모리등의 자원을 프로세스가 필요한 만큼만 추가로 사용하기 때문에 성능 상 손실이 거의없습니다.

도커는 컨테이너 기반의 플랫폼입니다. 

위 이미지를 보면, 오른쪽의 가상머신은 Hypervisor라는 하드웨어에서 시스템 OS와 리소스를 분리해 가상머신에 할당하여 구동하는 소프트웨어위에서 각각의 독립된 OS가 실행됩니다. Host OS의 자원을 공유해서 사용되기 때문에 이들이 시스템 자원을 많이 잡아 먹어서 VM위에 여러개의 OS를 설치해서 사용하는 건 정말 안좋겠죠..

  

하지만 왼쪽에서 보이듯 도커의 컨테이너 구조는 Host위에 Docker를 설치하여 그 위에 각 서비스 환경을 컨테이너로 패키징하여 설치하고 운영하는 형태입니다. vm방식과 달리 다른 컨테이너와 OS 커널을 공유하므로 자원할당량도 적고 저장공간의 낭비가 덜합니다. 운영체제를 통째로 설치하는 게 아니라 이미지를 설치하는데, 이 안에 필요한 설정파일이 담겨 있습니다. 이 이미지에는 컨테이너를 실행하기 위한 모든 정보가 담겨 있습니다. 

 

도커로 리눅스 서버를 구축한다고 하면 리눅스 이미지를 다운받아 컨테이너를 생성하여 서버를 구축하면 됩니다. 

 

정리하자면 VM방식은 하드웨어의 리소스를 가상화하여 동작하는 것이고, 컨테이너 방식은 OS를 가상화하여 동작하는 방식입니다. 

 

도커의 장점은 다음과 같습니다.

1. 자원 낭비의 부담이 적다.

2. 실행 속도가 빠르다.

3. 배포 및 관리를 단순하게 해준다.

4. 컨테이너 이미지를 쉽게 공유해서 사용할 수 있다.

 

3번의 경우 우리가 예를들어 jsp, 스프링 등으로 웹서비스를 구축해서 AWS에서 배포한다고 할 때 도커를 사용하지 않으면 AWS에서 잘 실행되게끔 환경을 설정해줘야하는데, 도커를 사용하면 환경에 제약을 받지 않기 때문에 바로 실행할 수 있는 장점이 있습니다. 

 

4번의 경우 도커의 컨테이너 이미지를 공유할 수 있는 Docker Hub가 있어서 전 세계 개발자들의 검증된 이미지들을 쉽게 내려받고 본인의 이미지를 허브에 공유할 수 있습니다. (깃허브와 비슷합니다.)

실제 우분투 이미지를 다운받아 보니 175메가 정도 되는데 많은 이미지를 보유하게되면 저장공간의 부담이 생길 수 있으므로 이 허브에 이미지를 저장해놓고 필요할 때만 다운받아 사용하기도 합니다.

 

아직 컨테이너와 도커에 대해 잘 와닿지 않을 수도 있는데, 평소에 Vmware나 virtual box 등을 이용해서 다른 OS위에서 작업을 많이 해보신 분들은 아마 도커를 사용해 보시면 이걸 왜 써야 할지 감이 오실겁니다. 

 

전문적으로 배우고 블로깅 한게 아니기 때문에 더 정확한 개념에 대해 알고싶으시면 좀 더 정확한 레퍼런스를 참고해주셨으면 좋겠습니다. 

 

 

https://jow1025.tistory.com/276

 

 

라즈베리파이 opencv 4.5.1버전 실패없이 한번에 설치하기

졸업작품 주제로 카메라 opencv를 이용하기 위해 라즈베리파이를 구매했었습니다. 간단할 줄 알았던 opencv 설치가 생각보다 만만치 않았고 많은 시행착오를 겪으며 최종적으로 제가 성공한 설치

jow1025.tistory.com

변경전

sudo apt install libavcodec-dev libavformat-dev libswscale-dev lib4l-dev libxvidcore-dev libx264-dev libdc1394-22-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev

 

 

변경 후

sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libdc1394-22-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev

 

 

일일히 타자로 치다보니 오타가 난걸 지금에서야 제보를 받았습니다 죄송합니다 ㅠㅠ

캡쳐한 사진에는 잘 나와있네요...

 

 

 

 

<아파치>

-시작: sudo systemctl start httpd

-상태: sudo systemctl status httpd

-종료: sudo systemctl stop httpd

 

 

<nginx>

-시작: sudo systemctl start nginx

-상태: sudo systemctl status nginx

-종료: sudo systemctl stop nginx

 

 

<tomcat>

8.5버전 기준

 

-이동: cd /opt/apache-tomcat-8.5.68/bin

-시작: sudo ./startup.sh

-종료: sudo ./shutdown.sh

 

* aws인스턴스에서 사용시 디폴트 8080포트가 아닌 80포트로 변경 시

1. cd /opt/apache-tomcat-8.5.68/conf 

-> permission denied 뜰 때: chmod 777 conf 명령어 실행 후 1번 진행

2. sudo nano server.xml

3. 중간 쯔음에 8080포트 -> 80로 수정 후 저장(아래 사진에서 첫줄만 수정)

 

4. 실행: "인스턴스 퍼블릭 ipv4주소:80" 입력 후 톰캣 화면 확인

-> 에러 시 cd /opt/apache-tomcat-8.5.68/bin로 다시 이동하여 shutdown 후 startup실행 하고 다시 확인

 

 

 

Traceback (most recent call last):
  File "test1.py", line 28, in <module>
    @app.route('/r_stop')
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1250, in decorator
    self.add_url_rule(rule, endpoint, f, **options)
  File "/usr/lib/python3/dist-packages/flask/app.py", line 66, in wrapper_func
    return f(self, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1221, in add_url_rule
    'existing endpoint function: %s' % endpoint)
AssertionError: View function mapping is overwriting an existing endpoint function: robot_left

 

원인: 같은 함수 두개를 작성해놓음..

 

 

 

간단하게 윈도우 cmd창에서 ssh를 이용하여 ec2인스턴스에 접속해보는 방법을 알아보겠습니다.

AWS EC2를 사용할 때 원격 접속 툴로 putty, TeraTerm 등 다양한 방법으로 접근할 수 있는데 

특히 저는 TeraTerm을 이용하고 있습니다.

 

근데 사실 로컬에서 어떤 SW설치없이 가볍게 EC2에 접근할 수도 있습니다.

굳이 권장되는 방법은 아니지만 대충 cmd창에서도 서버에 원격 접속할 수 있구나 , 정도로 이해하면 좋을 것 같습니다.

 

우선 로컬에서 ssh를 이용하여 서버에 접근하기 위해 "openssh 클라이언트"가 깔려있는지 확인해야합니다.

 

아래 순으로 확인해보시길 바랍니다.

1. 화면 왼쪽 하단 돋보기에 "설정" 이라고 검색 -> 실행

2. 앱 클릭-> 오른쪽 부분에 "선택적 기능" 클릭

3.  ssh 검색하여 OpenSSH 클라이언트가 깔려있는지 확인( 없다면 install 하기)

 

 

이제 cmd창에 접속합니다.

이 때 주의할 점은 EC2에 접속하기 위해 사용되는 .pem키가 있는 디렉토리에서 원격접속을 시도해야합니다.

만약 바탕화면에 키를 저장해놓고 C:\Users\admin에서 접속하려고하면 접속이 안됩니다.

저는 admin 디렉토리에 키를 저장해 놨습니다. 이제 접속해 볼텐데 아래 순으로 명령어를 입력하면 됩니다.

 

* 맥과 윈도우는 각각 명령어 형태가 다릅니다. 저는 windows기준으로 실행했습니다.

하나씩 설명해보겠습니다.

- C:\Users\admin: 키가 저장되어있는 디렉토리의 절대경로

- 흰색 부분.pem: 키 파일 이름

- ubuntu: EC2인스턴스 사용자 이름

- @ec2-100-25-139-116.compute-1.amazonaws.com: 인스턴스의 퍼블릭IPv4 DNS주소 이름

 

이렇게 작성 후 엔터를 누르면 아래와 같이 인스턴스에 접속됨을 알 수 있습니다.

에러가 났다면 <키 파일 위치, 오타, 인스턴스 ip> 이 중에서 문제가 있는 경우이므로 다시 확인 후 실행해봅니다. 

정상적으로 접속이 된 것을 확인할 수 있습니다.

 

 

이번시간에는 간단하게 우리가 구축했던 EC2 우분투 인스턴스를 로컬환경에서 접근하여 

우분투<-> 로컬 간 파일 전송을 해보도록 하겠습니다. 

 

파일질라(FileZilla)라는 것을 사용하는데, 이 툴을 이용하여 서버에 있는 파일들을 로컬에 이동시키거나

반대로 로컬에 있는 파일을 서버로 쉽게 옮길 수 있습니다.

 

로컬-서버 간 파일 전송을 위한 방법에는 다양한 방법들이 있는데 저는 주로 삼바를 이용했습니다.

리눅스/라즈비안에 삼바서버를 설치하여 로컬<->해당OS간 파일전송을 할 수 있었습니다.

 

오늘 다뤄볼 파일 질라는 매우 직관적이고 windows환경에 친숙한 GUI툴이기 때문에 사용이 쉬운 장점이 있습니다.

 

우선 파일질라 설치를 위해 아래 링크로 접속합니다.

https://filezilla-project.org/

 

FileZilla - The free FTP solution

Overview Welcome to the homepage of FileZilla®, the free FTP solution. The FileZilla Client not only supports FTP, but also FTP over TLS (FTPS) and SFTP. It is open source software distributed free of charge under the terms of the GNU General Public Licen

filezilla-project.org

그 다음 아래 화면에서 "Download FileZilla Client"를 클릭합니다.

 

이제 아래 버튼을 클릭하여 설치를 시작합니다.

 

설치완료 후 접속하면 아래와 같은화면이 뜹니다. 빨간 색 박스 부분을 클릭하여 우리가 접근할 서버를 세팅할 수 있습니다.

왼쪽 화면은 본인의 로컬 디렉토리를 나타내고 있습니다.

새로 뜬 화면에서 우선 아래 My Sites디렉토리에 New site버튼을 클릭한 뒤 간단하게 이름을 지정해줍니다.

저는 "과제용" 이라고 이름 지어주었고 모든 설정을 완료하면 아래와 같이 파일질라 이름이 표현됩니다.

 

사이트를 추가해 준 뒤 오른쪽 화면에서 몇가지 설정을 해주어야합니다.

1. Protocol-> SFTP로 설정(ssh로 보면됨, EC2에 접근할 때 ssh를 사용하기 때문)

2. Host:-> EC2 인스턴스의 퍼블릭 IPv4 DNS주소를 입력, Port: 22 입력

2번의 정보는 원래 IP를 입력해도되지만 학교-집에서 EC2를 쓰다보면 Ip가 변경되는 경우가 많아서 불편한데,

대신 IPv4 DNS주소는 변동이 없기 때문에 이 정보를 주로 사용합니다.

3. Logon Type: Keyfile로 설정(우리가 Ec2에 접근할 때 .pem 키파일로 접근한 것과 동일)

4. User: 유저이름으로 설정( 본인은 Ubuntu로 되어있음)

5. Key File: 해당 인스턴스의 .pem키파일 등록

이렇게 설정해준 뒤 Connect버튼을 누르면 정상 연결이 될 것입니다.

정상적으로 연결이 되었다면 아래처럼 왼쪽에는 로컬디렉토리가, 오른쪽엔 우분투의 디렉토리가 뜨게됩니다.

 

파일 전송은 매우 간단한데, 로컬->서버로의 파일 전송은 upload이고 서버->로컬로의 파일전송은 Download입니다.

간단하게 우분투 서버에 있는 file2라는 파일을 로컬로 이동시켜보겠습니다.

 

파일의 마우스 우클릭을 통해 Download를 클릭하면 아래 창 처럼 로컬admin디렉토리에 file2가 저장되었음을 알 수 있습니다.

반대로 로컬의 파일을 서버로 upload해보겠습니다. 클라우드.txt파일을 전송 시, 아래처럼 서버에 잘 저장되었음을 알 수 있습니다.

 

이것으로 파일질라를 이용해 간단하게 로컬과 서버 간에 파일 전송을 해보는 작업을 해보았습니다.

 

 

이번시간에는 저번에 생성한 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 등...)

 

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

 

 

 

 

이번시간에는 DB서비스 구축을 위해 알아보겠습니다.

지금까지 저희는 DB사용을 위해 AWS EC2에서 mysql을 설치했고 워크벤치를 이용해 DB연동을 확인했습니다.

설치 과정에서 외부사용자가 EC2 인스턴스 실행중일 때 DB를 자유롭게 접근할 수 있도록 설정을 해주었습니다.

결과적으로 저희의 시스템은 EC2내부에서 웹서버를 구축했고 DB서비스까지 구축했습니다. 

하지만 DB서비스와 웹서버를 동시에 이용하므로 성능 상 효율이 떨어질 수 있기 때문에 DB서버를 따로 구축하여 DB만 접근할 수 있도록 한다면 훨씬 편할 것 입니다.

우리는 외부의 DB접근까지는 설정해주었기 때문에 이 DB를 접근할 데이터베이스 관리시스템이 필요합니다.

 

우리는 AWS가 제공하는 관계형 데이터베이스 관리시스템(RDBMS)인 RDS(Relational Database Service)를 이용하여 외부의 DB서버를 구축하여

데이터베이스를 관리할 수 있도록 해보겠습니다.

 

가장 먼저 AWS 콘솔에서 RDS 인스턴스를 생성해야합니다. AWS educate 콘솔창에서 상단 서비스탭에서 데이터베이스영역의 RDS를 클릭합니다.

그 다음, 화면 상단의 데이터베이스 생성 버튼을 클릭합니다.

 

데이터베이스 생성창에서 모든 설정은 디폴트로 놔두고 아래 사항만 바꿔줍니다.

1. 엔진유형: MySQL

2. 템플릿: 프리티어(공짜로 이용해야하기때문에.... 단 1년이 지나면 과금이 될 수 있습니다.)

3. DB인스턴스 식별자: 마음대로 바꿔주기(저는 jow1025cloud로 바꿨습니다.)

4. 자격 증명 설정에서 로그인 ID와 마스터 암호 생성(저는 ID를 root로 생성했습니다.)

5. 퍼블릭 엑세스 기능: "예" ( 외부에서 원격으로 DB를 접근하기위함)

 

이렇게 수정하여 DB를 생성하고 왼쪽 탭의 '데이터베이스'를 클릭하면 약간의 시간이 소요된 후 인스턴스가 생성됨을 알 수 있습니다.

생성된 인스턴스를 클릭하면 아래와 같이 엔드포인트 도메인 주소가 뜨는데, 이것을 복사해 둡니다.

EC2에서는 퍼블릭 ip주소로 EC2를 접속하고, RDS는 이 엔드포인트 주소를 통해 접속합니다.

 

이제 추가로 보안설정을 해줘야합니다. 

우리는 EC2 인스턴스의 보안그룹에서 ssh, http연결을 허용했기 때문에 ssh로 EC2 터미널을 접근할 수 있었고 웹을통해

apache, php 연결을 확인할 수 있었습니다.

 

이렇듯, 저희는 RDS로 DB서버를 따로 구축하여 EC2나 다른 외부 컴퓨팅 환경에서 이 서버의 Mysql DB를 접근하게되는데, 이 때 외부에서 RDS의

Mysql로 데이터를 전송/요청하고 RDS에서 데이터를 반환하는 등의 프로토콜 통신을 위해 보안그룹에서 따로 설정을 해줘야합니다.

   

연결&보안 탭에서 보안그룹을 클릭합니다.

 

보안그룹 창이 뜨면 보안설정을 해줄 보안그룹ID를 클릭합니다.

 

오른쪽 하단의 '인바운드 규칙 편집' 을 클릭합니다.

인바운드 규칙 창에서 아래 '규칙 추가'버튼을 클릭한 뒤 아래와 같이 설정한 뒤 '규칙 저장' 버튼을 누르고 빠져나옵니다.

Mysql을 사용하므로 Mysql/Aurora로 맞추고 어디서든 접근할 수 있도록 소스를 위치무관으로 바꿔주었습니다.

아래와 같이 저장이 되어있을 것입니다.

이로써 설정이 완료되었습니다. 이제 EC2에서 SQL쿼리로 RDS의 Mysql DB를 접근할 때 주소(엔드포인트)를 통해 접근할 수 있습니다.

실제로 접근해보겠습니다. 테라텀으로 EC2에 접속한 뒤 아래 명령어로 RDS mysql에 접근합니다. 

mysql -u root -p -h 아까 복사한 엔드포인트 주소

 

비밀번호는 아까 RDS인스턴스에서 DB를 생성할 때 설정한 비밀번호를 입력하면됩니다.

터미널에서 DB를 접근해서 사용하는 것은 불편하므로 워크벤치를 이용해 똑같이 접근해보겠습니다.

아래 '+'버튼을 클릭합니다.

아래와 같이 설정해준 뒤 test connection을 눌렀을 때 문제가 없을경우 ok버튼을 클릭합니다.

Connection Name은 편하게 지어주고 Username과 password는 인스턴스에서 DB생성 때 설정한 정보를 입력합니다.

독특한 점은 hostname에 ip주소가 아닌 엔드포인트 주소를 설정한다는 점입니다. 

위에서 언급했듯이 우리는 RDS의 DB에 접근할 때 ip가아닌 RDS 인스턴스의 엔드포인트 주소로 접근할 수 있습니다.

 

문제없이 완료되었다면 성공이고, 에러가 났다면 처음부터 다시 진행해보는게 맘 편합니다...

 

간단하게 show database; 쿼리문으로 결과를 확인하는 것으로 이번 실습 마치겠습니다.

 

우리가 구축한 시스템의 간단한 구조도는 다음과 같습니다.

다음번에는 실제 insert, select 등의 쿼리문으로 작업을 진행해보겠습니다.

 

 

+ Recent posts