Abstract
Ajax가 등장하고 Frontend 라는 개념이 등장한지 어언 20여년. 명확한 경계가 있었던 한 시대를 지나 이제는 새로운 기술의 등장과 함께 다시 Frontend와 Backend의 경계가 모호해지고 있다.
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 등을 이용하다보면 다양한 접근성을 가능하게 하기위해 기존의 Server 와 DB의 개념에 대해 접근하고 이해하는 것이 필요해진다.
이번 포스팅에서는 대표적인 Relation DB인 MySQL을 AWS에 Docker로 말아올리는 간단한 예제를 소개할 예정이다. (적은 비용으로)
참고할만한 링크: https://github.com/ManzDev/frontend-evolution
Setting up AWS EC2 Service
원하는 지역으로 region 을 변경
Launch Instance 클릭
원하는 OS 선택. (여기서는 Amazon Linux로 진행)
Free tier eligible 한 t2.micro로 진행
Key Pair 생성, 혹은 있으면 그대로 선택해서 사용
나머지는 그대로 진행
instance 대쉬보드에 들어가서 방금 생성한 EC2 클릭
connect 선택
Terminal 에서 Pair Key [filename].pem 이 저장된 폴더에 접근
3번 안내문 대로 권한 획득 후 4번 Example 명령어 복사 및 실행
아래 메세지와 같은 리턴을 받았다면 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 클릭
Inbound 그룹에 ssh 관련 포트 설정 (TCP 22 Port)
MySQL 관련 포트 설정 (TCP 3306 Port)
다시 돌아가서 ssh 접속 실행
Package Update 진행
$ sudo yum update
$ sudo yum -y upgrade
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
Docker 볼륨 생성
# create docker-volume
$ sudo docker volume create mysql_v
mysql_v
# result
$ sudo docker volume ls
DRIVER VOLUME NAME
local mysql_v
Docker Hub에서 MySQL 이미지 불러오기
$ sudo docker pull mysql:latest
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>
Connecting Database with DB Tool
MySQL 도구 중 가장 널리 쓰이는 도구는 MySQL Workbench 일 것이다.
여기서는 오픈 소스인 DBeaver를 이용하는 가이드를 소개하겠다.
DBeaver를 다운로드 및 실행
해당 링크: https://dbeaver.io/
New Database Connection 클릭 > MySQL 클릭
Server Host, Root Password 입력
Test Connection 실행
이런 메시지를 얻으면 연결에 성공
만약 Public Key 관련 오류가 뜬다면 Driver properties 탭에 들어가 다음과 같이 설정
연결에 성공했으면 간단한 DB 생성과 테이블 생성을 진행해보자
성공한 연결은 왼쪽 Database Navigator에 리스트로 표시 된다.
선택한 뒤 작업표시줄에 있는 SQL 버튼을 클릭하면 Query를 작성할 수 있는 환경을 제공한다.
다음과 같이 데이터 베이스 생성해보자
CREATE DATABASE HELLO_WORLD;
테이블 생성
CREATE TABLE dummy_data (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
hello VARCHAR(100) DEFAULT NULL
);
데이터 삽입
INSERT INTO dummy_data(hello)
VALUES
('안녕하세요'),
('Hola'),
('こんにちは'),
('hallo'),
('ciao');
그럼 다음과 같이 DBeaver 에서 데이터 베이스, 테이블, 데이터가 생성된 결과를 확인할 수 있다.
➕ DB Backup
DB 전체 백업은 다음과 같이 DBeaver 메뉴에서 진행 가능
Conclusion
Docker compose 를 구성하거나 그 외에 다양한 방법으로도 접근 가능하지만 가장 간단한 방식으로 AWS EC2에 Docker를 이용해서 MySQL DB 서버를 구성해보았다.
서문에 언급했듯이 더이상 Frontend Backend 구분은 의미가 없어지는 시대가 이미 성큼 다가왔다.
앞으로는 서비스 성격이나 규모에 따른 포지션 구분이 좀더 대중화가 될 것이다.
기존의 대규모 처리 시스템과 같은 서비스들은 변화가 느리기에 View, Server의 구분 방법을 따를 것이나 대다수를 차지하는 중소규모나 빠른 프로토 타이핑을 위해서는 CI/CD SaaS, Server SaaS, DB SaaS 와 같은 서비스들을 사용해서 빠르게 서비스를 개발하는 것이 경쟁력이 될것이다.
더 나아가 중소규모에서 대규모로 넘어갈 수 있는 기반 지식은 Engineer로서든 Manager로서든 서비스 개발하고 운영하는 관점에서 꼭 필요한 기본 소양이 될것이다.
















Top comments (0)