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.

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은 하기와 같습니다.


'개발공부0w0 > 웹개발' 카테고리의 다른 글
| [VSCode] Mac에 Visual Studio Code Editor 설치 (0) | 2026.03.29 |
|---|---|
| [C#] sttPlayerAgent Project3 (0) | 2026.03.26 |
| [C#] sttPlayerAgent Project2 (0) | 2026.03.26 |
| [C#] sttPlayerAgent Project1 (0) | 2026.03.24 |
| MAC에서 SSH연결하기 - 기본 터미널 사용, PUTTY 미사용 (0) | 2025.04.13 |