# ARCHITECTURE.md

## 개요

PhotoResizer는 대량의 이미지를 홈페이지 업로드용으로 WebP로 변환하여 용량을 줄이는 프로그램이다.

원본 이미지는 절대 수정하지 않으며,
사용자가 지정한 입력 폴더의 이미지를
WebP 형식으로 변환하고 새로운 출력 폴더에 저장한다.

---

## 시스템 구조

```
config.json

↓

main.py

↓

설정 확인

↓

이미지 검색

↓

이미지 리사이즈

↓

WebP 변환

↓

파일 저장

↓

로그 저장

↓

완료
```

---

## 컴포넌트

| 컴포넌트 | 역할 | 의존성 |
|----------|------|--------|
| main.py | 프로그램 시작 및 전체 제어 | config.py, image_processor.py |
| config.py | 설정 읽기 | config.json |
| image_scanner.py | 이미지 검색 | pathlib |
| image_processor.py | WebP 변환 및 최적화 | Pillow |
| image_saver.py | 저장 및 출력 폴더 생성 | pathlib |
| logger.py | 로그 저장 | logging |
| utils.py | 공통 함수 | - |

---

## 데이터 흐름

```
config.json

↓

입력 폴더 확인

↓

이미지 검색

↓

이미지 읽기

↓

리사이즈

↓

WebP 변환

↓

출력 폴더 생성

↓

파일 저장 (.webp)

↓

로그 저장
```

---

## 의존성

| 항목 | 버전 | 이유 |
|------|------|------|
| Python | 3.x | 개발 언어 |
| Pillow | 최신 안정 버전 | 이미지 처리 |
| pathlib | Python 기본 | 경로 처리 |
| logging | Python 기본 | 로그 저장 |

---

## 디렉터리 구조

```text
src/
│
├── main.py
├── config.py
├── image_scanner.py
├── image_processor.py
├── image_saver.py
├── logger.py
└── utils.py
```

---

## 확장 포인트

- HEIC, AVIF 지원
- GUI 버전
- 여러 화질 프리셋
- 여러 크기 프리셋
- EXIF 유지 옵션

---

## 상태

| 항목 | 값 |
|---|---|
| 작성일 | 2026-07-07 |
| 상태 | Approved |
| 검증 결과 | PASS |