웹 사이트 접속할 때 조회 건수를 보여주는 페이지를 만들어 보자. 파이썬 flask와 redis를 이용한다. flask는 초경량 웹서버, redis는 간단한 기록을 담당한다.
app.py
from flask import Flask
from redis import Redis
import os
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route('/')
def hello():
redis.incr('hits')
return f'안녕하세요! 이 페이지는 {redis.get("hits").decode("utf-8")}번 조회되었습니다!\n'
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
flask 웹 서버와 redis를 이용해 조회건수를 보여주는 소스다.
requirements.txt
docker 이미지 만들 때 필요한 패키지를 작성한다.
Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
docker 구동 시 참고할 정보다. requirements.txt를 읽어 모듈을 설치하고 app.py를 구동한다.
docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/app
depends_on:
- redis
redis:
image: redis:alpine
flask와 redis를 하나의 네트워크, 즉 격리된 공간에서 상호작용하기 위해 docker compose를 이용한다. 순서는 의존성이 있는 redis를 먼저 구동하고 flask 웹을 띄운다.
개발 환경이 완료되었으니 실제 작동시켜 보자.
1. 서비스 구동하기 ( docker compose up )
redis와 flask 서비스가 ready 상태가 된다.
2. 웹 사이트 접근하기 ( http://127.0.0.1:5000/ )
5000번 포트를 통해 flask 웹서버에 접근한다. 페이지 방문 건수가 기록되고 조회된다. 페이지를 새로고침 하면 1씩 늘어난다.
3. 서비스 중지하기 (Ctrl + c)
flask, redis 컨테이너만 stop 된다. 다시 서비스 기동 후 웹 사이트 접속하면 이전 카운트에 +1인 된다.
4. 서비스 완전 종료하기 (docker compose down )
flask, redis 뿐만 아니라 Network도 모두 제거된다. 따라서 방문자 카운트가 모두 초기화되어 웹 사이트 접속하면 방문 카운트가 1이 된다.
왜 docker compose를 사용하는가?
편리함이다. 만약 이를 사용하지 않는다면, 컨테이너 간 동일한 격리공간을 만들어 flask와 redis 서비스를 연결시켜야 한다. docker compose 는 이런 번거로움을 해결해 준다.
'코드리뷰 > chatGPT(Python)코드' 카테고리의 다른 글
라면 레시피로 쉽게 이해하는 Docker (0) | 2025.01.01 |
---|---|
뉴스 기사 추출하는 코드 만들어 줄래? 3탄 docker 결과 파일 가져오기 (2) | 2024.12.28 |
뉴스 기사 추출하는 코드 만들어 줄래? 1탄 (Chatgpt / Claude) (1) | 2024.12.27 |
댓글