콘텐츠로 이동

아키텍처

디렉토리 구조

con24_cloudflare/
├── src/
│   ├── js/                          # JavaScript Worker (메인)
│   │   ├── index.js                 # 워커 진입점
│   │   ├── config.js                # 설정 (CORS, 임계값, 상수)
│   │   ├── auth.js                  # HMAC 토큰 검증
│   │   ├── utils.js                 # 유틸리티 (키 검증, 파일 추출)
│   │   ├── multipart.js             # 스트리밍 멀티파트 업로드
│   │   └── handlers/
│   │       ├── put.js               # PUT - 파일 업로드
│   │       ├── get.js               # GET - 파일 다운로드
│   │       ├── delete.js            # DELETE - 파일 삭제
│   │       └── post.js              # POST - 토큰 검증
│   └── python/                      # Python 참고 구현
│       ├── index.py
│       ├── config.py
│       ├── auth.py
│       ├── utils.py
│       └── handlers/
├── test/
│   └── index.spec.js                # Vitest 테스트
├── wrangler.jsonc                   # Cloudflare Worker 설정
├── package.json
└── vitest.config.js

요청 처리 흐름

클라이언트 요청
  ├─ OPTIONS → CORS Preflight 응답 (토큰 불필요)
  └─ 기타 메서드
      ├─ Authorization 헤더 확인
      │   └─ 없으면: 401 "Missing token"
      ├─ 토큰 검증 (auth.js)
      │   ├─ Base64URL 디코딩 → JSON 파싱
      │   ├─ 필수 필드 확인 (sig, key, exp)
      │   ├─ HMAC-SHA256 서명 검증 (상수 시간 비교)
      │   └─ 만료 시간 확인
      ├─ CORS 헤더 설정
      └─ 메서드별 핸들러 분기
          ├─ PUT  → handlePut()
          │         ├─ < 10MB: 단일 업로드
          │         └─ ≥ 10MB: 멀티파트 업로드
          │         └─ → Firebase 알림 (실패 시 R2 롤백)
          ├─ GET  → handleGet()
          ├─ DELETE → handleDelete()
          └─ POST → handlePost()

CORS 설정

허용 Origin

Origin
https://con24.co.kr
https://niyang.co.kr
https://kdid-con24.niyang.co.kr

허용 메서드

GET, PUT, DELETE, OPTIONS, POST

허용 헤더

Content-Type, Authorization, x-filename

CORS 응답 헤더

Access-Control-Allow-Origin: <요청 origin>
Access-Control-Allow-Methods: GET, PUT, DELETE, OPTIONS, POST
Access-Control-Allow-Headers: Content-Type, Authorization, x-filename
Vary: Origin

Note

Access-Control-Allow-Origin은 와일드카드가 아닌 요청 origin을 그대로 반환합니다. 허용 목록에 없는 origin에서는 CORS 헤더가 포함되지 않습니다.

설정값

파일 크기 검증 (config.js)

상수 설명
FILE_SIZE_TOLERANCE_BYTES 1,024 (1KB) 파일 크기 오차 허용 절대값
FILE_SIZE_TOLERANCE_PERCENT 0.01 (1%) 파일 크기 오차 허용 상대값

실제 허용 오차: max(1KB, 예상 크기 × 1%)

멀티파트 업로드 (config.js)

상수 설명
MULTIPART_THRESHOLD 10MB 멀티파트 업로드 자동 분기 기준
MULTIPART_CHUNK_SIZE 10MB 파트당 청크 크기

외부 연동

항목
Firebase 엔드포인트 https://asia-northeast3-construction24-test.cloudfunctions.net/upload_report
R2 버킷 con24-mysite