본문 바로가기
코드리뷰/chatGPT(Python)코드

웹 페이지 조회 건수 보여주기 - docker compose 이용

by 디마드 2024. 12. 29.
반응형

웹 사이트 접속할 때 조회 건수를 보여주는 페이지를 만들어 보자. 파이썬 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

flask
redis

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 는 이런 번거로움을 해결해 준다.  

 

반응형

댓글