DEV Community

Cover image for MySQL + Docker + AWS EC2 Simple Tutorial with Amazon Linux (2023)
soom
soom

Posted on • Edited on

MySQL + Docker + AWS EC2 Simple Tutorial with Amazon Linux (2023)

Abstract

Ajax가 등장하고 Frontend 라는 개념이 등장한지 어언 20여년. 명확한 경계가 있었던 한 시대를 지나 이제는 새로운 기술의 등장과 함께 다시 FrontendBackend의 경계가 모호해지고 있다.

react, vue 처럼 Virtual DOM 개념을 구현한 프레임워크를 필두로 svelte, solid.js 등 부터 DOM을 컴파일 레벨로 구현하는 프레임워크가 등장하기 시작했다.

또한, 자체 server 를 제공하는 fullstack 프레임워크인 Nest.js, Nuxt.js, svelte-kit 등이 등장하면서 Frontend 라는 개념이 점차적으로 서버사이드까지 확장하였다.

그리고 현재는 다양한 Server(Backend) SaaS, DB SaaS 들이 등장하였다. 오래된 Firebase 부터 시작해서 Supabase, GrafBase, PlanetScale 등 서버사이드와 DB 및 인프라에 익숙치 않은 유저들을 위한 서비스들이 우후죽순 등장한다는 것은 이제 Frontend Backend 라는 경계가 무너지고 있는 것을 반증하고 있다.

하지만 이러한 다양한 SaaS, PaaS 등을 이용하다보면 다양한 접근성을 가능하게 하기위해 기존의 ServerDB의 개념에 대해 접근하고 이해하는 것이 필요해진다.

이번 포스팅에서는 대표적인 Relation DBMySQLAWSDocker로 말아올리는 간단한 예제를 소개할 예정이다. (적은 비용으로)

참고할만한 링크: https://github.com/ManzDev/frontend-evolution


Setting up AWS EC2 Service

원하는 지역으로 region 을 변경

Launch Instance 클릭

config instance_1


원하는 OS 선택. (여기서는 Amazon Linux로 진행)

Free tier eligiblet2.micro로 진행

Key Pair 생성, 혹은 있으면 그대로 선택해서 사용

나머지는 그대로 진행

config instance_2


instance 대쉬보드에 들어가서 방금 생성한 EC2 클릭

connect 선택

config instance_3


Terminal 에서 Pair Key [filename].pem 이 저장된 폴더에 접근

3번 안내문 대로 권한 획득 후 4번 Example 명령어 복사 및 실행

config instance_4

config instance_5


아래 메세지와 같은 리턴을 받았다면 Security Group 수정이 필요

ssh: connect to host [xxxx].ap-northeast-2.compute.amazonaws.com port 22: Operation timed out

Security Groups > 변경할 정책 이름 > Inbound rules > Edit inbound rules 클릭

config security_1

Inbound 그룹에 ssh 관련 포트 설정 (TCP 22 Port)

MySQL 관련 포트 설정 (TCP 3306 Port)

config security_2


다시 돌아가서 ssh 접속 실행

ssh success

Package Update 진행

$ sudo yum update

$ sudo yum -y upgrade
Enter fullscreen mode Exit fullscreen mode

Setting up Docker on EC2

Docker 설치, 확인 및 시작

# install docker
$ sudo yum -y install docker

# docker version confirm
$ docker -v
Docker version 20.10.17, build 100c701

# start docker service
$ sudo service docker start
Enter fullscreen mode Exit fullscreen mode

Docker 볼륨 생성

# create docker-volume
$ sudo docker volume create mysql_v
mysql_v

# result
$ sudo docker volume ls
DRIVER    VOLUME NAME
local     mysql_v
Enter fullscreen mode Exit fullscreen mode

Docker Hub에서 MySQL 이미지 불러오기

$ sudo docker pull mysql:latest
Enter fullscreen mode Exit fullscreen mode

Docker Container 마운팅

# mounting & run docker container
$ sudo docker run --name <container_name> -e MYSQL_ROOT_PASSWORD=<password> -d -v mysql_v:/var/lib/mysql -p 3306:3306 mysql:latest

# monitor running docker images
$ sudo docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
bec12e4eb164   mysql:latest   "docker-entrypoint.s…"   9 seconds ago   Up 8 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   <container_name>
Enter fullscreen mode Exit fullscreen mode

Connecting Database with DB Tool

MySQL 도구 중 가장 널리 쓰이는 도구는 MySQL Workbench 일 것이다.

여기서는 오픈 소스인 DBeaver를 이용하는 가이드를 소개하겠다.

DBeaver를 다운로드 및 실행

해당 링크: https://dbeaver.io/


New Database Connection 클릭 > MySQL 클릭

config dbeaver_1
config dbeaver_2


Server Host, Root Password 입력

Test Connection 실행

config dbeaver_3


이런 메시지를 얻으면 연결에 성공

connection success

만약 Public Key 관련 오류가 뜬다면 Driver properties 탭에 들어가 다음과 같이 설정

publickey error


연결에 성공했으면 간단한 DB 생성과 테이블 생성을 진행해보자

성공한 연결은 왼쪽 Database Navigator에 리스트로 표시 된다.
선택한 뒤 작업표시줄에 있는 SQL 버튼을 클릭하면 Query를 작성할 수 있는 환경을 제공한다.

Sql Query

다음과 같이 데이터 베이스 생성해보자

CREATE DATABASE HELLO_WORLD;
Enter fullscreen mode Exit fullscreen mode

테이블 생성

CREATE TABLE dummy_data (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  hello VARCHAR(100) DEFAULT NULL
);
Enter fullscreen mode Exit fullscreen mode

데이터 삽입

INSERT INTO dummy_data(hello)
VALUES
  ('안녕하세요'),
  ('Hola'),
  ('こんにちは'),
  ('hallo'),
  ('ciao');
Enter fullscreen mode Exit fullscreen mode

그럼 다음과 같이 DBeaver 에서 데이터 베이스, 테이블, 데이터가 생성된 결과를 확인할 수 있다.

Query Result


➕ DB Backup

DB 전체 백업은 다음과 같이 DBeaver 메뉴에서 진행 가능

DB Backup


Conclusion

Docker compose 를 구성하거나 그 외에 다양한 방법으로도 접근 가능하지만 가장 간단한 방식으로 AWS EC2Docker를 이용해서 MySQL DB 서버를 구성해보았다.

서문에 언급했듯이 더이상 Frontend Backend 구분은 의미가 없어지는 시대가 이미 성큼 다가왔다.

앞으로는 서비스 성격이나 규모에 따른 포지션 구분이 좀더 대중화가 될 것이다.

기존의 대규모 처리 시스템과 같은 서비스들은 변화가 느리기에 View, Server의 구분 방법을 따를 것이나 대다수를 차지하는 중소규모나 빠른 프로토 타이핑을 위해서는 CI/CD SaaS, Server SaaS, DB SaaS 와 같은 서비스들을 사용해서 빠르게 서비스를 개발하는 것이 경쟁력이 될것이다.

더 나아가 중소규모에서 대규모로 넘어갈 수 있는 기반 지식은 Engineer로서든 Manager로서든 서비스 개발하고 운영하는 관점에서 꼭 필요한 기본 소양이 될것이다.

Top comments (0)