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

4.6 KiB

헤드리스 프로젝트 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 프로젝트):

<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<!-- 기본 프로젝트 디렉토리에서 pch.h 사용 -->

Vav2PlayerHeadless.vcxproj (헤드리스 프로젝트):

<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<AdditionalIncludeDirectories>$(ProjectDir)headless;...</AdditionalIncludeDirectories>
<!-- headless 디렉토리에서 pch.h 사용 -->

헤드리스 PCH 내용

#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/ 패턴으로 공통 소스 참조 통일
  • 단계적 활성화: 복잡한 파일들은 주석 처리하여 필요 시 활성화 가능

현재 활성 구성

<!-- 현재 사용 중 -->
<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로 생성됨