이번에는 Flask로 독립적인 서비스를 하나 더 만들어 보겠습니다. Flask는 Django보다 더 쉽지만, 나중에 번거로운 작업을 해야할 때가 많습니다. 각자의 장단점이 뚜렷하게 있는 것이죠
이제 본격적으로 기본적인 Flask틀을 짜고 Dockerfile, docker-compose.yml파일까지 작성해서 기본 페이지를 만들어 보도록 하겠습니다.
/requirements.txt
Flask == 2.1.0
Flask-SQLAlchemy == 2.5.1
SQLAlchemy == 1.3.20
Flask-Migrate == 2.5.3
Flask-Script == 2.0.6
Flask-Cors == 3.0.9
requests == 2.25.0
mysqlclient == 2.0.1
pika == 1.1.0
jinja2
기본적으로 Flask를 깔아주고, Flask에서 Django와 같이 model을 만들 수 있게 하는 Flask-Migrate를 깔아주고, rest api호출을 위한 requests, RabbitMQ의 서비스간 비동기 요청을 위한 pika를 의존성 목록에 적어주었습니다.
/Dockerfile
FROM python:3.9
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
COPY . /app
CMD python main.py
/docker-compose.yml
version: '3.8'
services:
backend:
build:
context: .
dockerfile: Dockerfile
ports:
- 8001:5001
volumes:
- .:/app
depends_on:
- db
db:
image: mysql:5.7.22
restart: always
environment:
MYSQL_DATABASE: main
MYSQL_USER: root
MYSQL_PASSWORD: root
MYSQL_ROOT_PASSWORD: root
volumes:
- .dbdata:/var/lib/mysql
ports:
- 33067:3306
일단 서비스는 backend, db 두개를 만들었습니다. 그리고 이는 Django와는 다르게 Host의 8001번 포트와 컨테이너의 5001번 포트와 연결시켜 주었습니다. 그리고 db의 이름을 main으로 지정해 주었고 외부의 33067번 포트와 내부의 3306번 포트와 연결해 주었습니다.
/main.py
from flask import Flask
app = Flask(__name__)
# user가 '/'경로로 들어올 경우
@app.route('/')
def index():
return 'hello'
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5001)
그리고 기본적인 Flask문법을 활용하여 '/'기본 path로 들어왔을 때, hello를 띄우게 해 보았습니다. 그리고 5001번 포트와 연결해 주었습니다.
다음과 같이 정상적으로 작동하는 것을 확인하실 수 있습니다.
다음으로는 모델을 만들어보도록 하겠습니다.