1️⃣ MySQL을 설치한 후, 실행하고 계정 생성
CREATE DATABASE myapp_db;
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON myapp_db.* TO 'myuser'@'%';
FLUSH PRIVILEGES;
myapp_db라는 데이터베이스를 사용 가능
2️⃣ docker-compose.yml (MySQL 포함)
version: '3.8'
services:
mysql:
image: mysql:8
container_name: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: myapp_db
MYSQL_USER: myuser
MYSQL_PASSWORD: mypassword
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
networks:
- app-network
backend:
build: ./backend
container_name: backend
ports:
- "8000:8000"
depends_on:
- mysql
environment:
DB_HOST: mysql
DB_USER: myuser
DB_PASSWORD: mypassword
DB_NAME: myapp_db
volumes:
- ./backend:/app
networks:
- app-network
frontend:
build: ./frontend
container_name: frontend
ports:
- "3000:3000"
depends_on:
- backend
networks:
- app-network
nginx:
build: ./nginx
container_name: nginx
ports:
- "80:80"
depends_on:
- frontend
- backend
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
mysql_data:
3️⃣ backend/requirements.txt
fastapi
uvicorn
pymysql
sqlalchemy
4️⃣ backend/main.py (FastAPI + MySQL 연결 코드)
import os
from fastapi import FastAPI, HTTPException
from sqlalchemy import create_engine, text
from sqlalchemy.orm import sessionmaker
app = FastAPI()
# 환경 변수에서 DB 설정 가져오기
DB_USER = os.getenv("DB_USER", "myuser")
DB_PASSWORD = os.getenv("DB_PASSWORD", "mypassword")
DB_HOST = os.getenv("DB_HOST", "localhost") # 로컬 테스트 시 'localhost'
DB_NAME = os.getenv("DB_NAME", "myapp_db")
# MySQL 연결 URL
DATABASE_URL = f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}/{DB_NAME}"
# 데이터베이스 엔진 생성
engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
@app.get("/")
def read_root():
return {"message": "Hello from FastAPI with MySQL!"}
@app.get("/users")
def get_users():
try:
with engine.connect() as conn:
result = conn.execute(text("SELECT * FROM users"))
users = [dict(row) for row in result.mappings()]
return {"users": users}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
5️⃣ backend/Dockerfile 작성
FROM python:3.10
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]
✅ 실행하기
docker-compose up -d --build
▶ API 테스트 (Postman 또는 브라우저)
- FastAPI 실행 확인
- 브라우저에서 http://localhost:8000/ 확인 → {"message": "Hello from FastAPI with MySQL!"} 응답 확인
- MySQL에서 사용자 조회
- http://localhost:8000/users 요청 → {"users": [...]} 응답 확인
'하이브리드 앱 개발 환경' 카테고리의 다른 글
[배포: Docker] Window에서 Docker 설치 (0) | 2025.03.10 |
---|---|
백엔드(Python) + 프로트엔드(Next.js) 폴더구조 (0) | 2025.03.05 |
[백엔드: python] fastAPI 설정 (0) | 2025.03.05 |
[프론트엔드: REACT] yarn Next.js 설치 (0) | 2025.02.19 |
[REACT 패키지 도구 알아보기] yarn / npm 차이점 (0) | 2025.02.13 |