WPF 기반 ERP 데스크톱 앱과 ASP.NET Core AuthApi를 함께 구성한 포트폴리오 프로젝트입니다. 로그인, 회원가입 이메일 인증, 권한 기반 메뉴 제어, 품목/재고/사용자 관리, 감사 로그처럼 ERP에서 자주 필요한 흐름을 실행 가능한 형태로 구현했습니다.
- 언어: C#
- Framework: .NET 8
- UI: WPF
- Backend: ASP.NET Core Minimal API
- ORM: Entity Framework Core
- DB: PostgreSQL
- Test: xUnit
- Infra: Docker, GitHub Actions
- 로그인 및 권한 기반 메뉴 제어
- 회원가입 이메일 인증
- 인증번호 유효 시간 3분
- 3회 연속 발송 후 5분 쿨다운
- SMTP 환경변수 기반 설정
- ID 중복 확인
- 품목 관리
- 재고 입고, 출고, 조정
- 로트/시리얼 추적
- 사용자 승인 및 권한 관리
- 감사 로그 기록
Erp.Domain 핵심 도메인 엔티티
Erp.Application DTO, 인터페이스, 권한 코드, 애플리케이션 계층
Erp.Infrastructure EF Core, PostgreSQL, SMTP, 인증/권한 서비스 구현
Erp.AuthApi 이메일 인증, 회원가입, ID 중복 확인 API
Erp.Desktop WPF 데스크톱 앱
Erp.Tests xUnit 테스트
GitHub Release의 erp-v1.0.3-win-x64.zip 파일에는 AuthApi와 Desktop 실행 파일이 함께 포함됩니다.
실행 순서:
- PostgreSQL 실행
- 환경변수 설정
AuthApi/Erp.AuthApi.exe실행Desktop/Erp.Desktop.exe실행
릴리즈 파일은 self-contained 방식으로 빌드되어 별도 .NET Runtime 설치 없이 실행할 수 있습니다.
- 비밀번호는 PBKDF2 기반 해시로 저장합니다.
- SMTP 계정, DB 비밀번호, seed 비밀번호는 코드에 저장하지 않고 환경변수로 주입합니다.
- 권한은 Role/Permission 기반으로 관리합니다.
- 주요 사용자 처리와 재고 처리 이력은 AuditLog로 기록합니다.
- 현재 Desktop 앱은 포트폴리오 실행 편의를 위해 일부 기능에서 DB에 직접 접근합니다. 운영 환경에서는 Desktop이 DB에 직접 접근하지 않고 AuthApi를 통해 업무 기능을 처리하는 구조가 권장됩니다.
- 이메일 인증 코드 만료 및 발송 제한을 적용했습니다.
- Windows x64 self-contained 릴리스와 AuthApi/Desktop 실행 파일을 함께 제공합니다.
- GitHub Actions 기반 릴리스 자동화 구성을 사용합니다.
This project combines a WPF ERP desktop application with an ASP.NET Core Auth API. It covers purchasing, ordering, inventory, user permissions, email-verified registration, and audit logging in an executable portfolio project.
- Purchasing, order, shipment, and inventory workflows
- Position- and permission-based access control
- Email verification with a three-minute code expiry and sending cooldown
- Lot/serial tracking, stock adjustments, and audit logs
- Self-contained Windows x64 release with Docker and GitHub Actions support
- C#, .NET 8, WPF
- ASP.NET Core Minimal API, Entity Framework Core
- PostgreSQL, Docker, GitHub Actions
- xUnit
- Desktop 업무 기능의 AuthApi 이전
- JWT 기반 인증 고도화
- 통합 테스트 확대
- Release 자동화