Files
nuriq_back/src/gunicorn_config.py
윤영훈 e20c7d58b1 [FEAT] (사용자 로직) : 인증 서비스 구현 완료
v0.1.2 (2025-11-16)
- 로그인, 로그아웃, 토큰 갱신, 회원가입 API 구현 완료
- 로그 포맷 통일화
2025-11-16 16:20:45 +09:00

102 lines
2.9 KiB
Python

"""
Gunicorn 설정 파일
"""
import sys
import os
# 프로젝트 루트 경로 추가
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
import settings
# Worker 설정
workers = settings.GUNICORN_WORKERS
worker_class = settings.GUNICORN_WORKER_CLASS
worker_connections = settings.GUNICORN_WORKER_CONNECTIONS
threads = settings.GUNICORN_THREADS
# 서버 바인딩
bind = f'{settings.HOST}:{settings.PORT}'
# 타임아웃 설정
timeout = settings.GUNICORN_TIMEOUT
keepalive = settings.GUNICORN_KEEPALIVE
graceful_timeout = settings.GUNICORN_GRACEFUL_TIMEOUT
# 재시작 설정 (메모리 누수 방지)
max_requests = settings.GUNICORN_MAX_REQUESTS
max_requests_jitter = settings.GUNICORN_MAX_REQUESTS_JITTER
# 로깅 설정
accesslog = settings.GUNICORN_ACCESSLOG
errorlog = settings.GUNICORN_ERRORLOG
loglevel = settings.GUNICORN_LOGLEVEL
# 로그 포맷 통일 (logger_manager.py와 동일한 포맷)
# %(s)s: 상태코드, %(m)s: HTTP메서드, %(U)s: URL경로, %(q)s: 쿼리스트링
# %(h)s: 클라이언트IP, %({User-Agent}i)s: User-Agent
access_log_format = '%(s)s %(m)s %(U)s%(q)s - IP:%(h)s Agent:"%({User-Agent}i)s"'
# Gunicorn error/worker 로그 포맷 설정
logconfig_dict = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'default': {
'format': '[%(asctime)s] [%(levelname)s] (gunicorn) %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S %z'
},
'access': {
'format': '[%(asctime)s] [%(levelname)s] (gunicorn.access) %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S %z'
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'default',
'stream': 'ext://sys.stdout'
},
'access_console': {
'class': 'logging.StreamHandler',
'formatter': 'access',
'stream': 'ext://sys.stdout'
},
},
'root': {
'level': settings.GUNICORN_LOGLEVEL.upper(),
'handlers': ['console']
},
'loggers': {
'gunicorn.error': {
'level': settings.GUNICORN_LOGLEVEL.upper(),
'handlers': ['console'],
'propagate': False,
},
'gunicorn.access': {
'level': settings.GUNICORN_LOGLEVEL.upper(),
'handlers': ['access_console'],
'propagate': False,
},
}
}
# 프로세스 네임
proc_name = "nuriq_server"
# hook 함수
def on_starting(server):
"""
Gunicorn 마스터 프로세스가 시작될 때 한번만 실행
워커가 생성되기 전 실행, 전역 초기화 작업
"""
server.log.info("[Gunicorn] 마스터 프로세스 시작 중 ...")
# Flask 앱 컨텍스트 내에서 초기화 작업 수행
from app import create_app
app = create_app()
def post_worker_init(worker):
"""각 워커 프로세스 초기화된 후 사용"""
worker.log.info(f"Worker {worker.pid} 초기화 완료")