From 109181f373e3cdfb96015095a761c72335903f47 Mon Sep 17 00:00:00 2001 From: kakusiA Date: Wed, 27 Aug 2025 18:13:49 +0900 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20config.py=20rollback=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95=20=20-=20=EB=A8=B8=EC=A7=80?= =?UTF-8?q?=EA=B3=BC=EC=A0=95=EC=97=90=EC=84=9C=20=EC=82=AC=EB=9D=BC?= =?UTF-8?q?=EC=A7=84=20=EC=BD=94=EB=93=9C=20=EB=B3=B5=EA=B5=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/pre-processing-service/app/core/config.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/apps/pre-processing-service/app/core/config.py b/apps/pre-processing-service/app/core/config.py index 06b55aa2..ea1deaef 100644 --- a/apps/pre-processing-service/app/core/config.py +++ b/apps/pre-processing-service/app/core/config.py @@ -33,3 +33,15 @@ class PrdSettings(BaseSettingsConfig): class Config: env_file = ['.env', 'prd.env'] +def get_settings() -> BaseSettingsConfig: + """환경 변수에 따라 적절한 설정 객체를 반환하는 함수""" + mode = os.getenv("MODE", "dev") + if mode == "dev": + return DevSettings() + elif mode == "prd": + return PrdSettings() + else: + raise ValueError(f"Invalid MODE environment variable: {mode}") + + +settings = get_settings() \ No newline at end of file From c074d72c1879691e2765f19cf8724b34ef11ff6e Mon Sep 17 00:00:00 2001 From: kakusiA Date: Wed, 27 Aug 2025 18:15:39 +0900 Subject: [PATCH 2/3] =?UTF-8?q?chore:=20dockerFile=20add=20-=20Dockerfile?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20-=20docker=20=EA=B0=9C=EB=B0=9C=ED=99=98?= =?UTF-8?q?=EA=B2=BD=20=EA=B5=AC=EC=B6=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/pre-processing-service/Dockerfile | 18 ++++++++++++++++++ docker/local/docker-compose.yml | 12 ++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 apps/pre-processing-service/Dockerfile diff --git a/apps/pre-processing-service/Dockerfile b/apps/pre-processing-service/Dockerfile new file mode 100644 index 00000000..073dea33 --- /dev/null +++ b/apps/pre-processing-service/Dockerfile @@ -0,0 +1,18 @@ +FROM python:3.11-slim AS builder +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends curl \ + && rm -rf /var/lib/apt/lists/* +RUN curl -sSL https://install.python-poetry.org | python3 - +ENV PATH="/root/.local/bin:$PATH" +RUN poetry config virtualenvs.create false +COPY pyproject.toml poetry.lock ./ +RUN poetry install --no-root + +FROM python:3.11-slim AS final +WORKDIR /app +# site-packages + 콘솔 스크립트(gunicorn/uvicorn) 함께 복사 +COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages +COPY --from=builder /usr/local/bin /usr/local/bin +COPY ./app ./app +EXPOSE 8000 +CMD ["gunicorn", "-w", "2", "-k", "uvicorn.workers.UvicornWorker", "-b", "0.0.0.0:8000", "app.main:app"] diff --git a/docker/local/docker-compose.yml b/docker/local/docker-compose.yml index 62dabdd0..de4c72b2 100644 --- a/docker/local/docker-compose.yml +++ b/docker/local/docker-compose.yml @@ -33,6 +33,18 @@ services: - pgadmin_data:/var/lib/pgadmin depends_on: - postgres + pre-processing-service: + build: + context: ../../apps/pre-processing-service # 프로젝트 루트 (Dockerfile이 루트에 없으면 맞게 조정) + dockerfile: Dockerfile # Dockerfile 경로 (루트에 없다면 상대경로로 수정) + image: pre-processing-service:latest + container_name: pre-processing-service + restart: always + ports: + - "8000:8000" + env_file: + - ../../apps/pre-processing-service/.env # 공통 + - ../../apps/pre-processing-service/dev.env # 개발 volumes: postgres_data: From 4aa59b537810a754a568229422470ba246b318b9 Mon Sep 17 00:00:00 2001 From: kakusiA Date: Wed, 27 Aug 2025 18:16:05 +0900 Subject: [PATCH 3/3] =?UTF-8?q?chore:=20=ED=8C=A8=ED=82=A4=EC=A7=80=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/pre-processing-service/poetry.lock | 24 +++++++++++++++++++++- apps/pre-processing-service/pyproject.toml | 3 ++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/apps/pre-processing-service/poetry.lock b/apps/pre-processing-service/poetry.lock index 961f44e5..0ce89a16 100644 --- a/apps/pre-processing-service/poetry.lock +++ b/apps/pre-processing-service/poetry.lock @@ -96,6 +96,28 @@ all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.8)", "httpx (> standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.8)", "httpx (>=0.23.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"] standard-no-fastapi-cloud-cli = ["email-validator (>=2.0.0)", "fastapi-cli[standard-no-fastapi-cloud-cli] (>=0.0.8)", "httpx (>=0.23.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"] +[[package]] +name = "gunicorn" +version = "23.0.0" +description = "WSGI HTTP Server for UNIX" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "gunicorn-23.0.0-py3-none-any.whl", hash = "sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d"}, + {file = "gunicorn-23.0.0.tar.gz", hash = "sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec"}, +] + +[package.dependencies] +packaging = "*" + +[package.extras] +eventlet = ["eventlet (>=0.24.1,!=0.36.0)"] +gevent = ["gevent (>=1.4.0)"] +setproctitle = ["setproctitle"] +testing = ["coverage", "eventlet", "gevent", "pytest", "pytest-cov"] +tornado = ["tornado (>=0.2)"] + [[package]] name = "h11" version = "0.16.0" @@ -488,4 +510,4 @@ dev = ["black (>=19.3b0) ; python_version >= \"3.6\"", "pytest (>=4.6.2)"] [metadata] lock-version = "2.1" python-versions = ">=3.11,<4.0" -content-hash = "845e1778efdd87512efdd30eb0ba01aa1383061f662ccc3faa17ab1f8cebde5b" +content-hash = "c4291bdaa835f68e448031a2fefa8000b9ce9270ef1560021157ce5cdbfed9d9" diff --git a/apps/pre-processing-service/pyproject.toml b/apps/pre-processing-service/pyproject.toml index 5a2017c3..06256d87 100644 --- a/apps/pre-processing-service/pyproject.toml +++ b/apps/pre-processing-service/pyproject.toml @@ -13,7 +13,8 @@ dependencies = [ "loguru (>=0.7.3,<0.8.0)", "pytest (>=8.4.1,<9.0.0)", "dotenv (>=0.9.9,<0.10.0)", - "pydantic-settings (>=2.10.1,<3.0.0)" + "pydantic-settings (>=2.10.1,<3.0.0)", + "gunicorn (>=23.0.0,<24.0.0)" ]