Files
video-v1/vav2/docs/completed/testing/HEADLESS_PCH_ARCHITECTURE.md
2025-09-28 17:10:41 +09:00

110 lines
4.6 KiB
Markdown

# 헤드리스 프로젝트 PCH 아키텍처 개선
## ✅ **헤드리스 프로젝트 PCH 아키텍처 개선** (2025-09-21)
### **새로운 PCH 구조**
기존의 조건부 컴파일 방식에서 별도 디렉토리 기반 PCH로 개선하여 소스 코드 복잡성을 제거했습니다.
#### **구조 변경사항**
```
D:\Project\video-av1\vav2\Vav2Player\Vav2Player\
├── pch.h / pch.cpp # WinUI3 GUI용 PCH (기존)
├── headless/ # 🆕 헤드리스 전용 디렉토리
│ ├── pch.h # 헤드리스 전용 PCH
│ └── pch.cpp # PCH 생성 파일
└── src/ # 공통 소스 코드
└── **/*.cpp # 조건부 컴파일 제거 (#include "pch.h"만 사용)
```
#### **장점**
- **소스 코드 단순화**: 모든 .cpp 파일에서 `#include "pch.h"`만 사용
- **조건부 컴파일 제거**: `#ifdef HEADLESS_BUILD` 분기 처리 불필요
- **빌드 설정 단순화**: 프로젝트별 Include 경로로 pch.h 자동 선택
- **유지보수성 향상**: GUI/헤드리스 모드 간 의존성 완전 분리
#### **빌드 설정**
**Vav2Player.vcxproj** (GUI 프로젝트):
```xml
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<!-- 기본 프로젝트 디렉토리에서 pch.h 사용 -->
```
**Vav2PlayerHeadless.vcxproj** (헤드리스 프로젝트):
```xml
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<AdditionalIncludeDirectories>$(ProjectDir)headless;...</AdditionalIncludeDirectories>
<!-- headless 디렉토리에서 pch.h 사용 -->
```
#### **헤드리스 PCH 내용**
```cpp
#pragma once
#define WIN32_LEAN_AND_MEAN
#define NOMINMAX
#include <windows.h>
#include <iostream>
// ... 표준 라이브러리
extern "C" { #include <dav1d.h> }
#include <mfapi.h> // Media Foundation (minimal)
#include <d3d12.h> // D3D12 (minimal)
#include "../src/Common/VideoTypes.h"
```
#### **검증 완료**
**빌드 성공**: Vav2PlayerHeadless.vcxproj 빌드 완료
**실행 확인**: 헤드리스 앱 정상 동작 확인
**의존성 분리**: WinUI3 의존성 완전 제거
이제 헤드리스 프로젝트는 더 깔끔한 아키텍처로 관리되며, 향후 새로운 소스 파일 추가 시에도 조건부 컴파일 없이 바로 사용할 수 있습니다.
### **🗂️ 헤드리스 파일 재구성** (2025-09-21)
헤드리스 관련 모든 파일을 `headless/` 디렉토리로 통합하여 더욱 체계적인 프로젝트 구조를 구현했습니다.
#### **완료된 파일 재구성**
```
D:\Project\video-av1\vav2\Vav2Player\Vav2Player\headless\
├── pch.h # 헤드리스 전용 PCH 헤더
├── pch.cpp # PCH 생성 파일
├── SimpleHeadlessMain.cpp # ✅ 현재 사용 중인 메인 엔트리 포인트
├── HeadlessLauncher.cpp # 고급 헤드리스 런처 (예비)
├── HeadlessMain.cpp # 완전한 테스트 러너 (예비)
└── HeadlessDecoder.h/.cpp # 헤드리스 디코더 래퍼 (예비)
```
#### **장점**
- **명확한 구조**: 헤드리스 관련 모든 파일이 한 곳에 집중
- **독립성 강화**: GUI 프로젝트와 완전히 분리된 파일 관리
- **확장성**: 향후 헤드리스 기능 추가 시 동일 디렉토리에 배치
- **유지보수성**: 헤드리스 관련 작업 시 단일 디렉토리만 관리
#### **프로젝트 설정 업데이트**
- **Vav2PlayerHeadless.vcxproj**: 모든 헤드리스 파일 경로를 `headless\` 기준으로 수정
- **상대 경로 정리**: `../src/` 패턴으로 공통 소스 참조 통일
- **단계적 활성화**: 복잡한 파일들은 주석 처리하여 필요 시 활성화 가능
#### **현재 활성 구성**
```xml
<!-- 현재 사용 중 -->
<ClCompile Include="headless\SimpleHeadlessMain.cpp" />
<!-- 향후 필요 시 활성화 -->
<!-- <ClCompile Include="headless\HeadlessLauncher.cpp" /> -->
<!-- <ClCompile Include="headless\HeadlessMain.cpp" /> -->
<!-- <ClCompile Include="headless\HeadlessDecoder.cpp" /> -->
```
#### **빌드 및 테스트 확인**
**빌드 성공**: 재구성된 파일들로 정상 빌드 완료
**실행 확인**: `Vav2PlayerHeadless.exe` 정상 동작
**구조 검증**: 모든 헤드리스 파일이 적절한 위치에 배치
이제 헤드리스 관련 모든 작업이 단일 디렉토리에서 체계적으로 관리되며, 프로젝트 구조가 더욱 명확해졌습니다.
---
*최종 업데이트: 2025-09-21*
*Claude Code로 생성됨*