From 16318b5f85caee1533cbacdcbc61396b09682309 Mon Sep 17 00:00:00 2001 From: JiHoon Date: Wed, 24 Sep 2025 15:57:11 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix=20:=20docker=20file=20=EB=B0=8F=20docke?= =?UTF-8?q?r=20compose=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/pre-processing-service/Dockerfile | 29 -------------------- docker/production-fastapi/docker-compose.yml | 10 +++++++ 2 files changed, 10 insertions(+), 29 deletions(-) diff --git a/apps/pre-processing-service/Dockerfile b/apps/pre-processing-service/Dockerfile index 6ecb09c8..b3be8746 100644 --- a/apps/pre-processing-service/Dockerfile +++ b/apps/pre-processing-service/Dockerfile @@ -2,15 +2,6 @@ FROM python:3.11-slim AS builder WORKDIR /app -# 필수 OS 패키지 (기존 + Chrome 설치용 패키지 추가) -RUN apt-get update && apt-get install -y --no-install-recommends \ - curl \ - wget \ - unzip \ - gnupg \ - ca-certificates \ - && rm -rf /var/lib/apt/lists/* - # Poetry 설치 RUN curl -sSL https://install.python-poetry.org | python3 - ENV PATH="/root/.local/bin:$PATH" @@ -29,29 +20,10 @@ RUN poetry export --without dev -f requirements.txt -o requirements.txt \ FROM python:3.11-slim AS final WORKDIR /app -# Chrome과 ChromeDriver 설치를 위한 패키지 설치 RUN apt-get update && apt-get install -y --no-install-recommends \ - wget \ - unzip \ - curl \ - gnupg \ ca-certificates \ && rm -rf /var/lib/apt/lists/* -# Chrome 설치 (블로그 방식 - 직접 .deb 파일 다운로드) -RUN wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \ - && apt-get update \ - && apt-get install -y ./google-chrome-stable_current_amd64.deb \ - && rm ./google-chrome-stable_current_amd64.deb \ - && rm -rf /var/lib/apt/lists/* - -# MeCab & 사전 설치 (형태소 분석 의존) -RUN apt-get update && apt-get install -y --no-install-recommends \ - mecab \ - libmecab-dev \ - mecab-ipadic-utf8 \ - && rm -rf /var/lib/apt/lists/* - # /opt/venv 복사 COPY --from=builder /opt/venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" @@ -59,7 +31,6 @@ ENV PATH="/opt/venv/bin:$PATH" # 앱 소스 COPY . . - # 환경변수로 MeCab 경로 지정 ENV MECAB_PATH=/usr/lib/mecab/dic/ipadic diff --git a/docker/production-fastapi/docker-compose.yml b/docker/production-fastapi/docker-compose.yml index 76b0b85c..c995f4ef 100644 --- a/docker/production-fastapi/docker-compose.yml +++ b/docker/production-fastapi/docker-compose.yml @@ -11,6 +11,16 @@ services: - ~/app/blogger:/app/blogger - ~/app/models:/app/models - logs_volume:/logs + # Chrome 관련 볼륨 마운트 + - /opt/google/chrome:/opt/google/chrome:ro + - /usr/bin/google-chrome:/usr/bin/google-chrome:ro + - /usr/bin/google-chrome-stable:/usr/bin/google-chrome-stable:ro + # MeCab 관련 볼륨 마운트 + - /usr/lib/mecab:/usr/lib/mecab:ro + - /var/lib/mecab:/var/lib/mecab:ro + - /usr/lib/x86_64-linux-gnu/libmecab.so.2:/usr/lib/x86_64-linux-gnu/libmecab.so.2:ro + - /usr/lib/x86_64-linux-gnu/libmecab.so:/usr/lib/x86_64-linux-gnu/libmecab.so:ro + - /usr/lib/x86_64-linux-gnu/libmecab.so.2.0.0:/usr/lib/x86_64-linux-gnu/libmecab.so.2.0.0:ro depends_on: - promtail env_file: From 749a6c1c1117801944dfdb5ff83fb0289a5b3762 Mon Sep 17 00:00:00 2001 From: JiHoon Date: Wed, 24 Sep 2025 17:52:14 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix=20:=20trace=5Fid=20MDC=EC=97=90=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 --- .../domain/workflow/manager/ExecutionMdcManager.java | 7 +++++++ .../domain/workflow/service/WorkflowExecutionService.java | 7 ++++--- .../icebang/external/fastapi/adapter/FastApiAdapter.java | 8 ++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/apps/user-service/src/main/java/site/icebang/domain/workflow/manager/ExecutionMdcManager.java b/apps/user-service/src/main/java/site/icebang/domain/workflow/manager/ExecutionMdcManager.java index e61faa75..38c1ae38 100644 --- a/apps/user-service/src/main/java/site/icebang/domain/workflow/manager/ExecutionMdcManager.java +++ b/apps/user-service/src/main/java/site/icebang/domain/workflow/manager/ExecutionMdcManager.java @@ -7,6 +7,13 @@ public class ExecutionMdcManager { private static final String SOURCE_ID = "sourceId"; private static final String EXECUTION_TYPE = "executionType"; + private static final String TRACE_ID = "traceID"; + + public void setWorkflowContext(Long workflowId, String traceId) { + MDC.put(SOURCE_ID, workflowId.toString()); + MDC.put(EXECUTION_TYPE, "WORKFLOW"); + MDC.put(TRACE_ID, traceId); + } public void setWorkflowContext(Long workflowId) { MDC.put(SOURCE_ID, workflowId.toString()); diff --git a/apps/user-service/src/main/java/site/icebang/domain/workflow/service/WorkflowExecutionService.java b/apps/user-service/src/main/java/site/icebang/domain/workflow/service/WorkflowExecutionService.java index a27807ec..3421c043 100644 --- a/apps/user-service/src/main/java/site/icebang/domain/workflow/service/WorkflowExecutionService.java +++ b/apps/user-service/src/main/java/site/icebang/domain/workflow/service/WorkflowExecutionService.java @@ -48,11 +48,12 @@ public class WorkflowExecutionService { @Transactional @Async("traceExecutor") public void executeWorkflow(Long workflowId) { - mdcManager.setWorkflowContext(workflowId); + WorkflowRun workflowRun = WorkflowRun.start(workflowId); + workflowRunMapper.insert(workflowRun); + + mdcManager.setWorkflowContext(workflowId, workflowRun.getTraceId()); try { workflowLogger.info("========== 워크플로우 실행 시작: WorkflowId={} ==========", workflowId); - WorkflowRun workflowRun = WorkflowRun.start(workflowId); - workflowRunMapper.insert(workflowRun); Map workflowContext = new HashMap<>(); diff --git a/apps/user-service/src/main/java/site/icebang/external/fastapi/adapter/FastApiAdapter.java b/apps/user-service/src/main/java/site/icebang/external/fastapi/adapter/FastApiAdapter.java index 2a5bd001..334bb4e1 100644 --- a/apps/user-service/src/main/java/site/icebang/external/fastapi/adapter/FastApiAdapter.java +++ b/apps/user-service/src/main/java/site/icebang/external/fastapi/adapter/FastApiAdapter.java @@ -1,5 +1,6 @@ package site.icebang.external.fastapi.adapter; +import org.slf4j.MDC; import org.springframework.http.*; import org.springframework.stereotype.Component; import org.springframework.web.client.RestClientException; @@ -23,6 +24,13 @@ public String call(String endpoint, HttpMethod method, String requestBody) { String fullUrl = properties.getUrl() + endpoint; HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); + + String traceId = MDC.get("traceId"); + if (traceId != null) { + headers.set("X-Request-ID", traceId); + log.debug("TraceID 헤더 추가: {}", traceId); + } + HttpEntity requestEntity = new HttpEntity<>(requestBody, headers); try {