|
8 | 8 |
|
9 | 9 | [https://lottery.dotnetdev.kr/](https://lottery.dotnetdev.kr/) |
10 | 10 |
|
| 11 | +## 주요 기능 |
| 12 | + |
| 13 | +- [온오프믹스](https://onoffmix.com/), [이벤터스](https://event-us.kr/), [티켓타코](https://www.ticketa.co/) 참가자 데이터 파일 (XLS/CSV) 지원 |
| 14 | +- 물리 엔진 기반의 시각적 추첨 애니메이션 |
| 15 | +- 완전한 클라이언트 사이드 처리 (개인정보 서버 전송 없음) |
| 16 | +- 다중 추첨 그룹 지원 |
| 17 | +- 반응형 웹 디자인 |
| 18 | + |
| 19 | +## 기술 스택 |
| 20 | + |
| 21 | +- **프론트엔드**: Blazor WebAssembly (.NET 8.0) |
| 22 | +- **UI 컴포넌트**: Adobe Spectrum Web Components |
| 23 | +- **물리 엔진**: Rapier2D |
| 24 | +- **애니메이션**: Lottie |
| 25 | +- **TypeScript**: esbuild를 통한 빌드 |
| 26 | +- **패키지 관리**: pnpm |
| 27 | +- **데이터 처리**: NPOI (Excel/CSV 파싱) |
| 28 | + |
| 29 | +## 개발 환경 요구사항 |
| 30 | + |
| 31 | +- [.NET 8.0 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) |
| 32 | +- [Node.js](https://nodejs.org/) (버전은 `.nvmrc` 파일 참조) |
| 33 | +- [pnpm](https://pnpm.io/) 10.13.1 이상 |
| 34 | + |
| 35 | +## 로컬 개발 환경 설정 |
| 36 | + |
| 37 | +### 1. 저장소 클론 |
| 38 | + |
| 39 | +```bash |
| 40 | +git clone https://github.com/yourusername/DotNetDevLottery.git |
| 41 | +cd DotNetDevLottery |
| 42 | +``` |
| 43 | + |
| 44 | +### 2. Node.js 버전 설정 (선택사항) |
| 45 | + |
| 46 | +nvm을 사용하는 경우: |
| 47 | + |
| 48 | +```bash |
| 49 | +nvm use |
| 50 | +``` |
| 51 | + |
| 52 | +### 3. 프로젝트 디렉터리로 이동 |
| 53 | + |
| 54 | +```bash |
| 55 | +cd src/DotNetDevLottery |
| 56 | +``` |
| 57 | + |
| 58 | +### 4. 의존성 설치 및 빌드 |
| 59 | + |
| 60 | +의존성은 `dotnet build` 또는 `dotnet run` 시 자동으로 설치됩니다: |
| 61 | + |
| 62 | +```bash |
| 63 | +dotnet run |
| 64 | +``` |
| 65 | + |
| 66 | +또는 수동으로 설치: |
| 67 | + |
| 68 | +```bash |
| 69 | +pnpm install |
| 70 | +dotnet restore |
| 71 | +``` |
| 72 | + |
| 73 | +### 5. 애플리케이션 실행 |
| 74 | + |
| 75 | +```bash |
| 76 | +dotnet run |
| 77 | +``` |
| 78 | + |
| 79 | +브라우저에서 `http://localhost:5095/`로 접속합니다. |
| 80 | + |
| 81 | +## 빌드 |
| 82 | + |
| 83 | +### 개발 빌드 |
| 84 | + |
| 85 | +```bash |
| 86 | +dotnet build |
| 87 | +``` |
| 88 | + |
| 89 | +### 프로덕션 빌드 |
| 90 | + |
| 91 | +```bash |
| 92 | +dotnet publish -c Release -o ./publish |
| 93 | +``` |
| 94 | + |
| 95 | +빌드된 파일은 `publish/wwwroot` 디렉터리에 생성됩니다. |
| 96 | + |
11 | 97 | ## 사용 방법 |
12 | 98 |
|
13 | | -1. 온오프믹스 또는 festa에서 XLS 또는 CSV 파일을 다운로드합니다. |
14 | | -2. 이 프로그램의 소스 코드를 체크아웃한 다음, `.csproj` 파일이 들어있는 디렉터리로 이동하여 `dotnet run` 명령으로 실행합니다. |
15 | | -3. 웹 브라우저로 `http://localhost:5095/` 사이트에 접속하여 다운로드한 XLS 또는 CSV 파일을 업로드합니다. |
| 99 | +1. 온오프믹스 또는 이벤터스, 티켓타코에서 XLS 또는 CSV 파일을 다운로드합니다. |
| 100 | +2. 애플리케이션을 실행하고 웹 브라우저로 접속합니다. |
| 101 | +3. 다운로드한 XLS 또는 CSV 파일을 업로드합니다. |
16 | 102 | 4. 추첨을 진행할 그룹 정보를 선택하고 다음 버튼을 클릭합니다. |
17 | | -5. 브라우저 창을 열어둔 상태에서 필요한 만큼 추첨을 진행합니다. 모든 추첨이 끝나면 다시 첫 페이지로 되돌아갑니다. |
| 103 | +5. 필요한 만큼 추첨을 진행합니다. 모든 추첨이 끝나면 다시 첫 페이지로 되돌아갑니다. |
| 104 | + |
| 105 | +## 프로젝트 구조 |
| 106 | + |
| 107 | +``` |
| 108 | +DotNetDevLottery/ |
| 109 | +├── src/ |
| 110 | +│ └── DotNetDevLottery/ |
| 111 | +│ ├── Components/ # Blazor 컴포넌트 |
| 112 | +│ ├── Models/ # 데이터 모델 |
| 113 | +│ ├── Pages/ # 페이지 컴포넌트 |
| 114 | +│ ├── Services/ # 비즈니스 로직 |
| 115 | +│ ├── Shared/ # 공유 컴포넌트 |
| 116 | +│ ├── typescript/ # TypeScript 소스 |
| 117 | +│ ├── wwwroot/ # 정적 파일 |
| 118 | +│ ├── config/ # 빌드 설정 |
| 119 | +│ └── Program.cs # 애플리케이션 진입점 |
| 120 | +├── .github/ |
| 121 | +│ └── workflows/ # GitHub Actions 워크플로우 |
| 122 | +└── README.md |
| 123 | +``` |
| 124 | + |
| 125 | +## 배포 |
| 126 | + |
| 127 | +이 프로젝트는 GitHub Pages를 통해 자동으로 배포됩니다. `master` 브랜치에 푸시하면 GitHub Actions가 자동으로 빌드 및 배포를 수행합니다. |
18 | 128 |
|
19 | 129 | ## 참고 사항 |
20 | 130 |
|
21 | 131 | - 제출되는 엑셀 파일은 서버로 보내지지 않고, 웹 어셈블리 코드와 로컬 호스트 내부에서만 사용됩니다. (이 애플리케이션은 백엔드가 없습니다.) |
22 | 132 | - Blazor WASM 애플리케이션은 SPA 애플리케이션으로 루트 디렉터리에서 애플리케이션이 호스팅된다는 전제에서 개발되었습니다. |
| 133 | +- TypeScript 코드는 빌드 전에 자동으로 컴파일됩니다. |
| 134 | + |
| 135 | +## 문제 해결 |
| 136 | + |
| 137 | +### 빌드 오류 발생 시 |
| 138 | + |
| 139 | +1. node_modules 디렉터리 삭제 후 재설치: |
| 140 | + ```bash |
| 141 | + cd src/DotNetDevLottery |
| 142 | + rm -rf node_modules |
| 143 | + pnpm install |
| 144 | + ``` |
| 145 | + |
| 146 | +2. .NET 캐시 정리: |
| 147 | + ```bash |
| 148 | + dotnet clean |
| 149 | + dotnet restore |
| 150 | + ``` |
| 151 | + |
| 152 | +## 기여하기 |
| 153 | + |
| 154 | +이슈 제보, 기능 제안, Pull Request는 언제나 환영합니다! |
| 155 | + |
| 156 | +1. 이 저장소를 Fork 합니다 |
| 157 | +2. Feature 브랜치를 생성합니다 (`git checkout -b feat/amazing-feature`) |
| 158 | +3. 변경사항을 커밋합니다 (`git commit -m 'feat: Add some amazing feature'`) |
| 159 | +4. 브랜치에 Push 합니다 (`git push origin feat/amazing-feature`) |
| 160 | +5. Pull Request를 생성합니다 |
23 | 161 |
|
24 | 162 | ## 라이선스 |
25 | 163 |
|
26 | | -이 프로젝트는 MIT 라이선스를 따릅니다. |
| 164 | +이 프로젝트는 MIT 라이선스를 따릅니다. 자세한 내용은 [LICENSE](LICENSE) 파일을 참조하세요. |
27 | 165 |
|
28 | 166 | ## 컨트리뷰터 |
29 | 167 |
|
|
0 commit comments