Raspberry Pi (라즈베리파이)

라즈베리파이에서 ASP.NET Core 실행하기

choyoung 2025. 1. 25. 23:51

2025.01.21 - [Raspberry Pi (라즈베리파이)] - 라즈베리파이에서 C# 윈폼 실행시키기

 

라즈베리파이에서 C# 윈폼 실행시키기

2025.01.19 - [C# 화면 구축] - C# 윈폼의 다양한 기능을 디자인적 요소로 활용하자! C# 윈폼의 다양한 기능을 디자인적 요소로 활용하자!얼마 전 저의 고등학교 2학년 과정이 끝났습니다!부산소프트

choxaeonian.tistory.com

 

제 포스트 중 하나인 위 포스트에서는 C# 윈폼을 Mono를 활용하여 라파이 환경에 실행시켰습니다.

그럼 제 C# 윈폼 환경인 ASP.NET Core WebApp으로 생성한 프로젝트는 라파이 환경에서 실행 가능할까요?

 

다양한 방법을 서치하고 직접 해 본 결과 ASP.NET 환경에서는 Mono로는 실행이 불가하였습니다.

하지만 .NET Runtime을 통해서는 가능하다는 걸 알 수 있었습니다!

 

더불어 오늘은 .dll 파일 실행 방식의 특징과 실행 방법에 대해 알아보겠습니다.

제가 다른 포스트들에서 오류와 해결 방법 그리고 다른 방식의 실행 방법을 작성해두었습니다.

따라서 개발 환경에 맞춰 실행 방식을 선택하여 읽으시는 걸 추천드립니다!

 


 

먼저 .dll 파일 실행 방식의 특징과 적합한 환경을 알려드리겠습니다.

 

.dll 파일 실행 방식의 특징

  • .dll 파일로 실행한다는 것은 프레임워크 종속 방식으로 배포하는 것입니다.
  • 따라서 실행 환경에 .NET 런타임이 설치되어 있어야 합니다.
  • 이 방식은 파일 크기가 작고 업데이트가 간단하다는 장점이 있습니다.

 

  • 아래와 같은 환경에서 적합합니다.
    • .NET Runtime이 설치된 환경: 라즈베리파이와 같은 임베디드 시스템에 .NET Runtime만 설치하면 실행 가능
    • 자주 업데이트가 필요한 환경: 애플리케이션 코드만 업데이트하고 런타임은 유지할 수 있기때문에 편리
    • 스토리지나 메모리가 제한적인 경우자체 포함 실행 방식(Self-contained) 방식보다 파일 크기가 작음
  • 아래와 같은 환경에서는 적합하지 않습니다.
    • 네트워크가 없는 환경ex) .NET Runtime 설치가 어렵거나, 독립 실행 파일이 필요한 환경
    • 타겟 디바이스에 이미 설치된 .NET Runtime과 애플리케이션의 요구사항이 충돌하는 경우

 

이 내용을 참고하셔서 개발하시는 프로젝트 환경을 먼저 확인하시고 설치하는 것을 추천합니다!

 


 

이제 .dll 파일 실행 방법을 순서대로 알아보겠습니다.

 

1. 프로젝트 빌드 - dll 파일 생성

  • Windows 또는 Linux 개발 환경에서 .dll 파일을 생성하려면 dotnet publish 명령을 사용합니다.
  • 아래와 같이 터미널에 작성합니다.
dotnet publish -r linux-arm -c Release --self-contained=false //라즈베리파이 32비트용 빌드
dotnet publish -r linux-arm64 -c Release --self-contained=false //라즈베리파이 64비트용 빌드

 

  • 빌드 결과를 확인해봅시다.
  • MyApp.dll : 애플리케이션의 진입점이 될 것입니다.
bin/Release/net8.0/linux-arm/publish

 

 

2. 라즈베리파이에 파일 전송

SCP (Secure Copy) 사용

scp -r bin/Release/net8.0/linux-arm/publish pi@10.150.150.191:~/myapp
scp -r bin/Release/net8.0/linux-arm/publish (라즈베리파이 사용자 이름)@(라즈베리파이 IP주소):~/myapp

 

대체 전송 방법

  • USB로 전송한 후 라즈베리파이에서 /home/pi로 복사하시면 됩니다.
  • FTP나 파일 공유 기능을 이용하시면 됩니다.

 

 

3. 라즈베리파이에서 실행 준비

라즈베리파이에 .NET Runtime 설치

  • 아래의 내용은 .NET 8.0 런타임 설치 방법입니다.
  • 라즈베리파이 터미널에 아래의 순서대로 명령어를 작성하면 됩니다.

1. 패키지 관리자 업데이트

sudo apt update
sudo apt upgrade

 

2. Microsoft 키 및 리포지토리 추가

wget https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update
  • 여기서 sudo apt update를 꼭 해주셔야지 추가한 내용이 업데이트 됩니다!

3. .NET Runtime 설치

sudo apt install -y dotnet-runtime-8.0

 

4. 설치 확인

dotnet --info
  • 만약 정상적으로 설치가 됐다면 아래와 같은 정보가 출력되어야 합니다.
.NET Runtime Environment:
    Version: 8.0.0
    OS: Linux (arm)

 

 

4. .dll 파일 실행

  • 위와 같은 순서로 .NET Runtime 설치가 완료되었다면 라파이 터미널에서 애플리케이션을 실행하면 됩니다.
cd ~/myapp
dotnet MyApp.dll
  • 로그가 표시되며, 애플리케이션이 실행됩니다.
  • 웹 애플리케이션이라면 http://<라즈베리파이_IP>:5000에서 접속가능합니다!
  • 다른 포트를 사용하려면 appsettings.json 또는 환경 변수를 수정해야 합니다.
    ( 이 내용은 제가 다른 포스트에 자세하게 정리해놓겠습니다.)

 

5. 서비스로 설정 (옵션 수정)

systemd를 사용한 자동 실행

  • 자동 실행을 설정하면 라즈베리파이 재부팅 시, 애플리케이션이 자동으로 시작됩니다.

 

1. 서비스 파일 생성

sudo nano /etc/systemd/system/myapp.service

 

2. 내용 작성

[Unit]
Description=ASP.NET Core Application
After=network.target

[Service]
WorkingDirectory=/home/pi/myapp
ExecStart=/usr/bin/dotnet /home/pi/myapp/MyApp.dll
Restart=always
RestartSec=10
SyslogIdentifier=dotnet-myapp
User=pi
Environment=ASPNETCORE_ENVIRONMENT=Production

[Install]
WantedBy=multi-user.target

 

 

3. 서비스 시작 및 활성화

sudo systemctl start myapp
sudo systemctl enable myapp

 

 

4. 서비스 상태 확인

sudo systemctl status myapp

 


 

오늘 알아 볼 내용은 여기까지입니다!

저번 포스트에 이어서 오늘은 .dll 파일 실행 방식에 대해 자세히 정리하였습니다.

 

실제로 제가 바로우산 (교내 우산 관리 시스템) 프로젝트를 개발할 때 이 파일 방식을 사용했었습니다.

ASP.NET Core 파일을 라즈베리파이 환경에서 실행하고자 하여 직접 구글링을 하고 ChatGPT한테 질문도 하며 정말 많은 삽질을 거쳤습니다 ㅎㅎ

노력 끝에 성공적으로 빌드를 하였고 덕분에 오류를 해결하는 방법과 ASP.NET Core 파일 내에 있는 다양한 파일의 내용 등을 알게 되었습니다.

 

하지만 하드웨어와 C# 윈폼 화면 그리고 웹까지 세 가지를 연동하기에 있어서는 ASP.NET Core 파일 환경이 적절하지 못 했습니다. 그래서 결국 C# 윈폼 (.NET Framework) 기본 기술을 사용하여 실제 시연하게 되었고 개발 환경을 제대로 파악해야 한다는 것을 다시금 깨닫게 되었습니다 !!!

 

그래서 저와 같은 분들을 위하여 포스트 맨 상단에 계속해서 실행 방식의 특징과 추천 환경을 세세하게 작성해 두었습니다! 하지만 제 글 이외에도 충분한 구글링을 통하여 자신의 프로젝트에 맞는 방식을 선택하시길 바랍니다 ㅎㅎ

 

다음 포스트부터는 .dll 파일 방식을 실행하며 실제로 겪었던 오류들과 해결한 내용에 대해서 하나씩 업로드하도록 하겠습니다.

오늘도 긴 글 읽어주셔서 감사합니다.