---
task_id: task-2167
type: context
scope: task
created: 2026-04-25
updated: 2026-04-25
status: completed
---

# 맥락 노트: task-2167

**task**: task-2167

---

## 결정 근거

### 라우터 분리 vs main.py 직접 추가
- 결정: 별도 `mediscan_router.py` 파일로 분리
- 이유: main.py가 이미 2632줄. 추가 시 관리 불가
- 대안: main.py에 직접 추가 → 기각 (파일 크기, 충돌 위험)

### MediScan 코드 import 방식
- 결정: sys.path에 MediScan src 추가 후 직접 import
- 이유: InsuRo 서버에서 MediScan 패키지를 사용해야 함, 별도 패키지 설치보다 경로 추가가 간단
- 대안: pip install -e → 기각 (CI/CD 추가 설정 필요, 현재 인프라 미지원)

### 파일 암호화 방식
- 결정: cryptography.Fernet 기반 AES 암호화 (MEDISCAN_ENCRYPTION_KEY 환경변수)
- 이유: Python 표준 라이브러리에 가깝고, 키 관리 간편
- 대안: PyCryptodome AES-256-GCM → 기각 (추가 의존성, Fernet으로 충분)

## 3 Step Why 검증

### 1st Why: "왜 이 설계(라우터 분리 + 프론트 교체)가 필요한가?"
A: MediScan Phase 1 백엔드가 완성되었지만 웹에서 접근할 방법이 없다. API 서버와 프론트엔드 연동이 필요하다.

### 2nd Why: "왜 A(별도 라우터 파일)가 최선의 접근인가?"
B: main.py가 2632줄로 이미 거대하여 직접 추가 시 충돌 위험과 가독성 저하. 별도 라우터로 분리하면 독립적으로 테스트/유지보수 가능.

### 3rd Why: "왜 B(독립 라우터)가 다른 대안보다 나은가?"
C: 별도 서버(다른 포트)는 인프라 복잡도 증가, main.py 직접 추가는 파일 크기/충돌 문제. 라우터 분리는 기존 InsuRo 패턴과 일관되면서 최소 침습적.

→ A-B-C 논리적 일관성 확인: 웹 접근 필요 → 기존 서버에 통합 → 분리된 라우터로 최소 변경

## 참조 자료

- MediScan 파서: `/home/jay/projects/MediScan/src/parsers/__init__.py`
- MediScan 엔진: `/home/jay/projects/MediScan/src/analysis/engine.py`
- InsuRo 서버: `/home/jay/projects/InsuRo/server/main.py`
- JWT 인증: `verify_jwt()` 함수 (main.py:544)
- 플랜 검증: `require_plan("히든")` 패턴

## 주의사항

- InsuRo server/main.py 직접 수정 최소화 (라우터 import + mount 1줄만)
- MediScan src 경로를 sys.path에 추가해야 import 가능
- 분석 완료 후 원본 PDF 즉시 삭제 필수 (보안)
- Fernet 키는 환경변수 MEDISCAN_ENCRYPTION_KEY에서 로드
