Skip to content

F# File-Based Application (FBA) 예제 추가#1

Open
sigmadream wants to merge 3 commits intodotnetdev-kr:mainfrom
sigmadream:fsharp
Open

F# File-Based Application (FBA) 예제 추가#1
sigmadream wants to merge 3 commits intodotnetdev-kr:mainfrom
sigmadream:fsharp

Conversation

@sigmadream
Copy link

.NET FBA(File-Based Application) 저장소에 F#(.fsx) 스크립트 예제를 추가합니다. 기존 C# FBA 예제와 동일한 흐름을 F#으로 구현하여, dotnet fsi로 실행 가능한 단일 파일 예제를 제공합니다.

  • F# 사용자도 FBA 스타일로 단일 .fsx 파일만으로 예제를 실행할 수 있도록 함
  • C# 예제와 대응하는 F# 예제를 제공해 저장소를 C#/F# 모두 지원하는 형태로 확장
  • Aspire App Host에서 fsharp 인자로 F# worker/minapi를 선택 실행할 수 있도록 통합

주요 변경사항

  • 01-shell-standard.fsx 신규 추가

    • shebang(#!/usr/bin/env -S dotnet fsi) 적용
    • __SOURCE_FILE__, __SOURCE_DIRECTORY__ 출력
  • 02-random-webapi.fsx 신규 추가

    • Suave와 System.Text.Json로 랜덤 숫자 Web API 구현
    • C# Minimal API 대응 예제
  • 03-apphost.cs 수정

    • 주석 추가 보강
    • args"fsharp" 포함 시 AddExecutable("dotnet", ".", "fsi", "파일명")으로 F# 스크립트 실행하도록 분기 추가
  • 03-minapi.fsx 신규 추가

    • Suave + StackExchange.Redis 사용
    • 환경변수 ConnectionStrings__cache 활용
    • C# 03-minapi.cs 예제와 대응
  • 03-worker.fsx 신규 추가

    • StackExchange.Redis 활용 백그라운드 워커
    • Redis Message, LastUpdated 키 갱신
    • C# 03-worker.cs와 기능 동일
  • 04-avalonia.fsx 신규 추가

    • Avalonia.FuncUI + Elmish(MVU) 패턴 기반 계산기 GUI
    • C# 04-avalonia.cs와 동일 구조
  • README.md 수정

    • F# 예제 섹션/목차 및 실행 방법 추가
  • .gitignore 수정

    • F# 빌드 도구 생성 디렉터리 .fake 추가

중점 사항

  • 실행 방식: 모든 F# 예제는 #!/usr/bin/env -S dotnet fsi shebang으로 실행 가능 (chmod +x./01-shell-standard.fsx 등).
  • 웹/API: F# .fsx에서는 ASP.NET Core FrameworkReference를 쓰기 어려우므로, C# Minimal API 대신 Suave 사용 (02, 03-minapi).
  • Aspire 연동: App Host는 F# 진입점을 직접 지원하지 않아, C# App Host에서 AddExecutable("dotnet", ".", "fsi", "03-worker.fsx") 형태로 F# 스크립트를 실행.
  • 04-avalonia.fsx: 소스 제너레이터 미지원 환경을 고려해 Avalonia.FuncUI의 Elmish(MVU) 패턴으로 계산기 UI 구현.

실행

# F# 스크립트 직접 실행
chmod +x 01-shell-standard.fsx 02-random-webapi.fsx 03-minapi.fsx 03-worker.fsx 04-avalonia.fsx
./01-shell-standard.fsx

# Aspire에서 F# 앱 실행 (Garnet 등 사전 준비 후)
dotnet run --project 03-apphost.cs -- fsharp

아쉬운점

  • AOT를 지원하지 않음
  • Agents.AI가 없어서 포팅을 해보니 300줄 넘거 작성해야 포기

추가

  • F# 특징을 소개하는 것을 추가하고 싶은데, 컨셉이 잘 안 맞는 것 같아서 향후에 별도로 만들어서 커뮤니티에 기여 예정
  • 해당 예제는 FBA 기반의 접근이 .NET의 효용성을 높일 수 있다는 측면에서 작성해봄

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant