ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Flask+EC2+RDS(Mysql)
    메모장 2021. 9. 10. 04:32

     안녕하세요! 2021년 9월 9일에 배웠던 내용에 대해서 써보고자 합니다. 새로운 학기가 시작하고 컴퓨터공학과 3학년 2학기니 바쁘다면 바쁜 시기네요. 이 바쁜 시기에 여유롭다는 게 참... 제 자신이 원망스럽기도 합니다. 아무튼 오늘은 기회가 있어서 정말 존경하는 분의 강의를 들으며 느꼈던 감동을 적어 놓고자 합니다. 글을 읽다 보면 누구인지 아실 분을 아실 수 있겠네요. 웹에 대한 강의를 들었는데 인생을 배운 것 같은... 아무튼 python에 Flask와 Amazone Web Service, AWS의 EC2와 RDS를 이용해서 웹사이트를 운용하는 방법에 대해서 배웠습니다. 성공했을 때는 정말 이루 말할 수 없는 감동을 느껴서 글로 남기고자 글을 씁니다. 각설하고 시작해보도록 할까요? 정확한 과정을 스크린 숏을 찍으며 기록하고 싶지만 워낙 어렵고 수업에 따라가기 바빴던지라 대략적인 흐름에 맞춰서 글을 쓰겠습니다.

     

     먼저 flask에대해서 배웠습니다. 이는 node.js의 express와 매우 비슷한, 라이벌 관계라고 배웠습니다. 제 코드로 실습을 한 것도 아니라 적을 수는 없지만 아주 간단한 CRUD(create, read, update, delete) 시스템을 만든 사이트입니다. 이 사이트를 가지고 먼저 해본 실습은 sqlite3을 이용하여 RDS 없이 먼저 EC2만을 가지고 웹사이트를 배포해봤습니다. EC2란 Elastuic Compute Cloud의 약자로 쉽게 말해서 아마존으로부터 가상 컴퓨터를 하나 빌리는 것입니다. 이 빌린 컴퓨터를 이용해서 서버로 이용할 겁니다. AWS에 가입하여 EC2 인스턴스를 먼저 만들어줍니다. 

    오른쪽 상단의 인스턴스 시작을 눌러 줍니다.

    우분투 20.04 LTS버전 64비트(x86)을 선택해줍니다.

    저는 개발에 대해서 배우고 있으니 프리티어를 이용해줘야합니다.(돈내기 싫은 것도 있지만) 고로 t2 micro를 이용해줍니다. 여담으로 t2 nano는 micro보다 성능이 좋진 않지만 최근에 나온 버전이라 프리티어가 아니라고 합니다. 하지만 해도 돈이 저어엉말 조금 든다고 하더군요! 선택한 뒤 다음으로 넘어가 줍시다.

    인스턴스 개수는 1로 해주고 다음으로 넘어갑니다.

    스토리지는 8GB면 충분하다고 배웠습니다.

    태그로 키에는 Name을 값으로는 pss를 줍니다.

    보안 그룹 구성에서는 보안 그룹 이름을 pss1로 해주고 규칙을 하나 추가해주었습니다. flask코드 상에서 8000번 포트를 사용하니 사용자 지정 TCP에 8000 포트 범위를 줍니다.

    검토 및 시작 단계를 확인한 뒤 시작하기를 해줍니다.

    이렇게 키 페어를 선택하라는 알림 창이 나옵니다. 이 EC2에 액세스 할 때 암호로 사용하는 키라고 보시면 됩니다. 파일을 잃어버리면 안 되는 건 당연하죠? 저는 기존 키가 있어서 기존 키 페어 선택을 해줍니다. 새로 하신다면 새 키 페어 생성을 해줍니다. 인스턴스 시작을 해줍니다.

    좀 기다리다 보면 인스턴스 상태가 사용 가능으로 바뀝니다. 그 후에 이용해주면 됩니다.

     

    이제 vscode로 넘어가 봅시다. bash셀을 사용해야 하기에 git bash를 사용해도 됩니다. 저는 vscode에서 bash셀을 이용할 겁니다.

    위와 같이 ssh -i "키 페어 파일 이름" 해당 ec2접근 주소를 입력해줍니다. 그럼 이 컴퓨터에 연결하시겠습니까?라고 물어보는 거에 yes라고 답해줍시다. 정상적으로 성공하였다면 해당 ec2 컴퓨터의 커맨드 창에 접근한 것을 확인할 수 있습니다. 거기에 준비되어 있는 flask파일과 db파일을 git clone을 이용해서 넣어 주도록 합시다! 넣은 뒤 flask파일을 실행해 보기 위해서 python3 파일명을 입력해 실행해 보면!! flask모듈이 없다는 에러가 반깁니다... flask를 깔아 주도록 합시다.

    먼저 sudo apt update를 해준 뒤 python3-pip를 다운로드하기 위해서 

    sudo apt update && sudo apt install -y pyhthon3-pip

    라고 명령어를 쳐줍시다 가운데 &&는 앞에 명령어가 성공적으로 실행을 끝내면 뒤에 명령어도 바로 실행하라는 뜻이고 -y 옵션은 yes/no질문에 자동으로 yes를 답하라는 옵션입니다. 성공적으로 다운로드를 완료했으면 이제 flask를 다운로드하여 줍시다 pip는 nodejs로 치면 npm에 해당합니다.

    pip3 install flask

    명령어를 입력해줍시다! 드디어... 이번에야말로 python3 flask파일 이름을 명령어로 입력해서 실행을 해봅시다!

    성공적으로 실행되는 모습!

    해당 ec2 인스턴스의 세부 정보에서 퍼블릭 IPv4 DNS를 복사해줍니다. 저는 안에서 8000번 포트를 가리키도록 했으니 뒤에 :8000을 붙여주도록 합니다. 

    정상적으로 작동하는 데다가 create기능을 이용하여 현재 파일에 있는 db파일에도 잘 접근하는 모습을 볼 수 있습니다. 제가 만든 사이트라면 당당하게 보여드리겠지만 제가 만든 게 아닌 가르쳐주신 강사님이 만든 사이트라 사진으로는 보여드리지 못하지만 이 얼마나 멋진 모습! 정말 설레는 순간이었습니다. 간단하겠지만 프런트엔드와 백엔드인 서버와 데이터베이스가 만나는 모습! 웹을 배우면서 정말 처음 느껴보는 감동이었습니다.

     

    자! 그러면 이제 진짜 재미있는 시간입니다. 이제는 EC2를 이용해서 서버를 운용해주고, RDS를 이용해서 데이터베이스용 서버를 운용해주도록 합시다. 상상만 해도 떨리지 않습니까? EC2를 이용해서 서버를 이용해서 flask사이트를 보여주고 데이터베이스 서버를 이용해서 데이터베이스를 관리하는 모습... 정말 설렙니다. 시작해볼까요?

     

    EC2 인스턴스는 그대로 써주도록 하고 RDS로 넘어가 주도록 합시다. 먼저 RDS 데이터베이스를 생성해줍시다.

    데이터베이스 생성 버튼을 눌러줍시다.

     

    매우 간단하게 실습을 진행하여 손쉬운 생성, MySQL, 프리티어로 체크해주고 아래에 보면 데이터베이스 식별자는 그 데이터베이스의 이름입니다. 원하시는 이름을 적어주시고 관리자 이름과 비밀번호도 입력해주도록 합시다. 그 후 데이터베이스 생성을 해줍니다. 일정 시간 뒤에 데이터베이스가 생성이 완료가 됩니다.

     

    아까 EC2에서 실행 중이던 flask사이트를 종료시켜준 뒤, 이제 mysql을 사용할 준비를 해주도록 합시다. 먼저 

    sudo apt install mysql-client

    명령어를 쳐줍시다. mysql windowfmf 사용하기 위해서 모듈을 깔아줍시다. 설치가 완료되면 이제 AWS에 있는 RDS와 연결해주기 위해서 RDS 데이터베이스의 엔드포인트를 복사해주고 아래 명령어를 입력해줍니다.

    mysql -h엔드포인트 -u관리자 이름 -p

    위 명령어를 입력해주면 Enter password가 나옵니다. 어째서인지는 모르지만 옵션 뒤에 띄어쓰기를 안 해주도록 가르쳐주셔서 왜일까??라는 의문을 가졌었습니다. 맞는 password를 쳐줘도 들어가지지 않을 겁니다. 왜냐면 데이터베이스에 아무나 들어가면 위험하기에 보안 그룹을 이용해 인바운드를 수정해줘야 합니다. 인바운드가 무엇이냐? 강의를 들을 때 바깥에서 데이터베이스에 접근하는 행동이라고 기억하고 있습니다. 위 사진의 VPC보안 그룹의 링크를 들어가서 하단의 인바운드 규칙 수정 버튼을 눌러줍시다.

    유형으로 MYSQL로 해준 뒤 소스는 등록해 놓은 EC2의 IP로 해줍니다. 그러면 EC2의 IP로 데이터베이스에 접근할 때만 접근을 허용하도록 하겠지요?

    설정을 해준뒤 다시 mysql -h -u -p 명령어를 쳐준 뒤 패스워드를 쳐줘서 데이터베이스에 접근합니다. 성공적으로 접근하셨다면 

    CREATE DATABASE 데이터베이스이름;

    명령어를 입력해서 데이터베이스를 생성해줍시다.

    show databases;명령어를 이용해서 성공적으로 데이터베이스가 생성된 모습을 확인해 볼 수 있습니다.

    USE 데이터베이스이름; 명령어를 입력하여 사용하고자 하는 데이터베이스로 변경해줍시다.

    SQL문을 이용하여 테이블을 만들어줍시다. CREATE TABLE ""();

    SQL문을 이용해서 데이터를 테이블에 추가해줍시다. INSERT INTO ""() VALUES();

    SQL문을 이용해서 테이블에 있는 데이터를 확인해줍시다. SELECT* FROM

     

    이제 데이터베이스 설정도 다 해줬으니 flask파일을 실행해주도록 합시다. mysql을 사용하기 때문에 추가로 모듈을 설치해줘야 합니다.

    pip3 install pymysql

    명령어로 pymysql 모듈을 설치해줍시다. 파이썬파일에서 mysql을 사용할 때 필요한 모듈입니다. 설치가 완료된 뒤에 flask 파일을 실행해 보면 

    성공적으로 실행되는 모습! create를 해봤을 때 데이터베이스에 파일이 들어가는 것을 확인할 수 있습니다. 이 실습을 성공했을 때 굉장히 생전 처음 느껴보는 감동을 느껴보았습니다. 매일 프론트엔드만 만지작 거리고서 이 정도면 잘했지! 하면서 파일을 닫는 모습이 아니라 서버와 데이터베이스를 연동하는 방식은 처음 해봤기 때문입니다. 지금 복습하면서 한 번 더 해보는 이 순간도 신기할 따름입니다.

    마무리로 RDS와 EC2 인스턴스를 삭제해주도록 합시다. 프리티어에도 한계가 있기에 일정 이상 사용하면 돈이 나간다고 합니다. 마무리까지 깔끔하게 해 주면 기분이 정말 좋습니다. 글을 쓴 목적은 나중에 또 실습해 볼 수 있도록 정리를 한 것과 동시에 혹시 누군가 실습을 해보고 싶다면 참고하실 수 있도록 썼습니다.

    '메모장' 카테고리의 다른 글

    안녕하세요!  (0) 2021.09.02

    댓글

Designed by Tistory.