Skip to content

Commit 31dfee5

Browse files
committed
docs: Update README.md
1 parent b145559 commit 31dfee5

File tree

1 file changed

+143
-5
lines changed

1 file changed

+143
-5
lines changed

README.md

Lines changed: 143 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,160 @@
88

99
[https://lottery.dotnetdev.kr/](https://lottery.dotnetdev.kr/)
1010

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+
1197
## 사용 방법
1298

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 파일을 업로드합니다.
16102
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가 자동으로 빌드 및 배포를 수행합니다.
18128

19129
## 참고 사항
20130

21131
- 제출되는 엑셀 파일은 서버로 보내지지 않고, 웹 어셈블리 코드와 로컬 호스트 내부에서만 사용됩니다. (이 애플리케이션은 백엔드가 없습니다.)
22132
- 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를 생성합니다
23161

24162
## 라이선스
25163

26-
이 프로젝트는 MIT 라이선스를 따릅니다.
164+
이 프로젝트는 MIT 라이선스를 따릅니다. 자세한 내용은 [LICENSE](LICENSE) 파일을 참조하세요.
27165

28166
## 컨트리뷰터
29167

0 commit comments

Comments
 (0)