개발공부0w0/웹개발

[C#] sttPlayerAgent Project4

jin0w0 2026. 3. 30. 15:41
반응형

2026.03.29 일요일

 

실제 소스코드 작성 후, vscode terminal에서 프로젝트를 실행합니다. MAC이므로, 실제 WMP대신 로그 등으로 실행을 확인해보도록 하겠습니다.

1. 흐름 요약

#1. 전체 흐름
브라우저 요청 → API → 플레이어 서비스 → (Mock or WMP)

#2. 실제 구동 흐름
Controller → Service → (Mock/WMP) 실행

 

2. 프로젝트 소스 구조

sttPlayerAgent/
 ┣ Controllers/
 ┃ ┗ PlayerController.cs
 ┣ Services/
 ┃ ┣ IPlayerService.cs
 ┃ ┣ MockPlayerService.cs   (Mac용)
 ┃ ┗ WmpPlayerService.cs    (Windows용)
 ┣ Models/
 ┃ ┗ PlayRequest.cs
 ┣ Program.cs
 ┣ sttPlayerAgent.csproj

 

3. 각 파일 역할

1) Program.cs

- 앱 시작 + 서비스 등록 + API 라우팅 설정

2) Models/PlayRequest.cs

- 브라우저에서 보내는 재생 요청 데이터 구조 정의

3) Services/IPlayerService.cs

- 플레이어 기능(재생/정지 등)의 공통 인터페이스 정의

4) Services/MockPlayerService.cs

- Mac용 가짜 플레이어 (로그만 출력, 실제 재생 없음)

5) Services/WmpPlayerService.cs

- Windows용 실제 플레이어 (WMP COM으로 음원 재생)

6) Controllers/PlayerController.cs

- HTTP 요청(/play 등)을 받아서 PlayerService 호출

7) sttPlayerAgent.csproj

- 프로젝트 빌드 설정 (타겟 OS, 라이브러리 등)

 

4. 실행 후 결과 확인

- 소스코드 작성 후 터미널에서 dotnet run을 실행합니다. 윈도우용 서비와 맥용 서비스를 나누어서 소스코드를 작성했더니, 하기와 같은 에러메시지가 발생하였습니다. 범인은 WmpPlayerService.cs 파일에서 사용한 WMPLib, window용 라이브러리가 있어서입니다.

error CS0246: The type or namespace name 'WindowsMediaPlayer' could not be found (are you missing a using directive or an assembly reference?)
The build failed. Fix the build errors and run again.

dotnet run

 

5. 에러 해결 후 실행

- 개발은 계속 MAC으로 할 예정이므로, 분기처리로 우선 에러를 피해서 실행시킵니다.

#if WINDOWS

// 기존 코드

#endif

 

1) WmpPlayerService.cs 조건부 컴파일

 - 기존 코드를 if문 안으로 넣습니다.

 

2) Program.cs 조건 분기

- 환경에 따라 서비스를 선택하는 조건에 if 조건을 추가합니다.

 

3) sttPlayerAgent.csproj 조건 분기

- propertyGroup 태그에 OS condition 조건을 추가합니다.

 

5-1. 두 가지 if의 차이점

- 둘 다 조건문으로 분기처리를 한다는 공통점이 있지만, 조건을 판단하는 시점에 차이가 있기 때문에 에러를 발생시키는 타이밍을 찾아서 적절한 if를 사용하여야 합니다.

# 1. 실행할 때(runtime) 판단
if (OperatingSystem.IsWindows())

# 2. 컴파일할 때(compile time) 판단
#if WINDOWS

 

  if (OperatingSystem...) #if WINDOWS
시점 실행 시 컴파일 시
코드 포함 여부 항상 포함 조건 안 맞으면 코드 자체가 사라짐
용도 로직 분기 플랫폼별 코드 분리

 

6. 실행 후 브라우저에서 확인

- vscode 터미널에 dotnet run 명령어를 실행하고, 브라우저에서 요청을 넘깁니다.

- 요청 URL은 하기와 같습니다.

vscode TERMINAL에 dotnet run 입력
브라우저 주소창에 http://127.0.0.1:5000/status 입력

 

 

 

 

반응형