주요 내용으로 건너뛰기

Flask + SQLAlchemy on Serverless framework

Flask + SQLAlchemy로 간단한 서버 띄우기


서버리스 프레임워크
서버리스 프레임워크

이번에 파이썬으로 간단하게 서버를 띄울 일이 생겨서 Serverless framework를 사용해서 한 번 세팅을 해봤는데요, 정말 간단하게 서버를 시작할 수 있습니다. 저도 Flask를 사용한 것은 이번이 처음이었지만 1시간 안에 세팅을 끝마칠 수 있었습니다. 람다를 직접 설정하는 것보다 훨씬 수고를 덜 수 있기 때문에 충분히 매력적인 프레임워크라고 할 수 있죠.


그러면 시작해볼까요?


이번 튜토리얼은

Python 웹 서버 프레임워크 중 가장 유명한 두 개의 프레임워크 중 하나인 Flask와 Flask 앱에서 SQL 데이터베이스를 활용하기 위한 SQLAlchemy를 이용해 최소한의 세팅을 해보는 것으로 진행하겠습니다.


# 시작하기


먼저 폴더와 함께 package.json을 생성해줍니다.


이제 필요한 모듈들을 설치해줍시다.


다음으로 app.py를 작성해봅시다.


배포 준비가 80%정도 되었습니다.

이제 serverless.yml 파일을 생성해서 아래의 내용을 붙여넣어줍니다.


다음으로 필요한 모듈들을 설치해줍시다.


이제 


조금만 기다리면 헬로월드를 볼 수 있습니다.

헬로월드!
헬로월드!


# RDS


다른 선택지도 많지만 저는 AWS RDS의 postgresql을 선택하도록 하겠습니다.

이제 설정 지옥으로 빠져봅시다.


아마존 RDS 서비스는 기본적으로 VPC 환경 내에서 동작합니다. 그러므로 VPC를 비롯한 각종 네트워크 세팅을 제대로 해줘야만 플라스크 서버에서 제대로 사용할 수 있는 것이지요. 설정이 꽤 까다롭기 때문에 단계별로 천천히 하겠습니다.

(만약 RDS를 이전에 세팅해본 경험이 있거나 이미 인스턴스를 실행 중이시라면 스킵하셔도 좋습니다.)


1단계 VPC 설정하기

이전에 생성한 VPC가 없다면 VPC 대시보드로 가서 좌측의 VPCs 메뉴를 선택해서 좌측 상단의 VPC 생성이라는 파란 버튼을 눌러줍니다.

이제 IPv4 CIDR 블락을 입력하라는 창이 뜨는데, 간단히 10.0.0.0/16 으로 해줍니다. (IPv4와 CIDR 블락에 대해서는 조만간 정리할 예정입니다~

2단계 서브넷 설정하기

RDS를 사용하려면 최소 두 개의 가용영역에 있는 서브넷이 필요합니다.

저는 네 개의 서브넷을 생성하도록 하겠습니다.


저같은 경우 이미 10.0.0.0/18 블락을 사용하는 서브넷이 있기 때문에 저런 에러가 뜨지만 다른 분들은 괜찮을 겁니다.

이제 CIDR 블락을 각각

  • 10.0.0.0/18
  • 10.0.64.0/18
  • 10.0.128.0/18
  • 10.0.192.0/18

로 설정해줍니다.

참고로 가용영역 설정은 기본값으로 두면 안 되고 각 영역에 대해 최소한 한 개의 서브넷은 있어야합니다.

(저는 균형을 위해 각 영역마다 두 개씩 뒀습니다.)


3단계 인터넷게이트웨이 설정하기

RDS가 외부의 인터넷과 정보를 주고 받으려면 VPC에 인터넷게이트웨이가 연결이 되어 있어야하고,

라우팅 테이블 설정이 적절하게 되어있어야합니다.


자, 그러면!

좌측 메뉴에서 인터넷게이트웨이를 찾아서 하나 생성해주고 (이름만 적으면 됩니다.),

바로 라우팅 테이블 메뉴로 갑니다.


기본 테이블을 사용할 수도 있고 혹은 다른 테이블을 만들 수도 있습니다.

중요한 것은 라우팅 테이블을 선택해서

1. 서브넷 연결 메뉴에서 RDS와 연결할 서브넷을 선택해준다. (모든 서브넷을 체크해주세요.)

2. 라우팅 메뉴에서 인터넷게이트웨이를 반드시 연결한다 (아래 사진과 같이 설정해주면 됩니다.)


4단계 보안그룹 설정

보안그룹은 일반적으로 말하는 방화벽의 역할을 합니다.

보안그룹에 의해 허가되지 않은 트래픽은 각 자원에 접근을 할 수 없죠. 그러므로 보안그룹을 RDS를 사용할 수 있게 설정할 필요가 있습니다.


좌측의 보안그룹 탭으로 들어가서 기본 보안그룹은 그대로 놔두고,

보안그룹 생성을 눌러 보안그룹 이름은 postgres로 나머지도 모두 postgres로 해줍니다.


이제 생성이 되었다면 인바운드 규칙을 수정할 차례입니다.


위와 같이 PostgreSQL - 포트 5432 - 소스 (내 IP 혹은 0.0.0.0/0) 으로 맞춰줍니다.


5단계 RDS 인스턴스 생성

인스턴스 생성 과정은 크게 어려운 점은 없습니다. 다만 아래의 세팅에만 유의해주세요.

이미 퍼블릭엑세스를 위해 라우팅 테이블도 설정해뒀고, 보안그룹도 5432 포트를 열어뒀기 때문에 따로 설정해줘야하는 부분은 없습니다.


# SQLAlchemy

RDS 설정까지 모두 마치셨나요? DB에 정상적으로 접속할 수 있다면 이제 우리의 웹서버에 연결해봅시다.


psql_settings.py 파일을 작성해주시고,


flask SQLAlchemy 공식문서에 있는 예제대로 앱을 업데이트해 봅시다.


제대로 실행이 되나 확인해볼까요?


처음보다는 흥미로운 앱이 됐네요!


마치며

과정을 따라가는 중간에 에러가 발생했거나 설명이 부족한 부분이 있었다면 댓글로 남겨주세요 ^^

이준형 님의 창작활동을 응원하고 싶으세요?

댓글

SNS 계정으로 간편하게 로그인하고 댓글을 남겨주세요.