chore: repo 정리 — entrypoint.sh 추가, runtime state gitignore

- entrypoint.sh: 첫 부팅 시 assign_teams.py 자동 실행 (시드)
- Dockerfile: ENTRYPOINT 적용, DATA_PATH=/app/data/hackathon.json
- hackathon.json (root) 삭제 — data/ 디렉터리로 이전 (gitignore)
- teams.md 추적 해제 (assign_teams.py가 매번 재생성)
- results_*.json + data/ gitignore 추가
- .env.example 삭제 (compose에 ADMIN_TOKEN 박제, .env 불필요)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
th-kim0823
2026-04-27 21:31:29 +09:00
parent 447f067ae9
commit addde1a0ea
6 changed files with 30 additions and 274 deletions

View File

@@ -1,2 +0,0 @@
ADMIN_TOKEN=강한-랜덤-토큰-여기-넣기
PORT=8501

6
.gitignore vendored
View File

@@ -5,6 +5,10 @@ venv/
*.db *.db
*.sqlite *.sqlite
.env .env
!.env.example
.streamlit/secrets.toml .streamlit/secrets.toml
.superpowers/ .superpowers/
# 행사 진행 중 생성되는 state (assign_teams.py가 entrypoint에서 자동 시드)
data/
results_*.json
teams.md

View File

@@ -10,15 +10,11 @@ ENV TZ=Asia/Seoul
COPY requirements.txt ./ COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt RUN pip install --no-cache-dir -r requirements.txt
COPY app.py assign_teams.py ./ COPY app.py assign_teams.py entrypoint.sh ./
COPY hackathon.json ./ RUN chmod +x /app/entrypoint.sh
EXPOSE 8501 EXPOSE 8501
ENV DATA_PATH=/app/hackathon.json ENV DATA_PATH=/app/data/hackathon.json
CMD ["streamlit", "run", "app.py", \ ENTRYPOINT ["/app/entrypoint.sh"]
"--server.address=0.0.0.0", \
"--server.port=8501", \
"--server.headless=true", \
"--browser.gatherUsageStats=false"]

21
entrypoint.sh Normal file
View File

@@ -0,0 +1,21 @@
#!/bin/sh
set -e
# DATA_PATH 비어있으면 assign_teams.py로 부트스트랩.
# 호스트 마운트(./data)에 처음 부팅 시 1회 실행.
if [ ! -s "$DATA_PATH" ]; then
echo "[init] $DATA_PATH 없음/비어있음 → assign_teams.py 실행"
mkdir -p "$(dirname "$DATA_PATH")"
cd /app
python3 assign_teams.py
mv /app/hackathon.json "$DATA_PATH"
echo "[init] 시드 완료 → $DATA_PATH"
else
echo "[init] 기존 $DATA_PATH 보존"
fi
exec streamlit run /app/app.py \
--server.address=0.0.0.0 \
--server.port=8501 \
--server.headless=true \
--browser.gatherUsageStats=false

View File

@@ -1,248 +0,0 @@
{
"settings": {
"voting_open": true
},
"titles": {},
"tie_breaks": {},
"votes": [],
"people": [
{
"name": "김호승",
"team": "팀1",
"dept": "AI Efficiency Tech",
"senior": false,
"notes": ""
},
{
"name": "유준희",
"team": "팀1",
"dept": "AI Efficiency Tech",
"senior": false,
"notes": ""
},
{
"name": "이준석",
"team": "팀1",
"dept": "MLOps HPC",
"senior": false,
"notes": ""
},
{
"name": "장다현",
"team": "팀1",
"dept": "MLOps System",
"senior": false,
"notes": ""
},
{
"name": "강승형",
"team": "팀1",
"dept": "MLOps Data",
"senior": true,
"notes": ""
},
{
"name": "서한배",
"team": "팀2",
"dept": "AI Efficiency Tech",
"senior": false,
"notes": ""
},
{
"name": "김민섭",
"team": "팀2",
"dept": "AI Efficiency Tech",
"senior": false,
"notes": ""
},
{
"name": "유용혁",
"team": "팀2",
"dept": "MLOps HPC",
"senior": false,
"notes": ""
},
{
"name": "박영훈",
"team": "팀2",
"dept": "MLOps System",
"senior": true,
"notes": ""
},
{
"name": "박재호",
"team": "팀2",
"dept": "MLOps Data",
"senior": false,
"notes": ""
},
{
"name": "이성재",
"team": "팀3",
"dept": "AI Efficiency Tech",
"senior": false,
"notes": ""
},
{
"name": "이재광",
"team": "팀3",
"dept": "AI Efficiency Tech",
"senior": false,
"notes": ""
},
{
"name": "김영관",
"team": "팀3",
"dept": "MLOps HPC",
"senior": true,
"notes": ""
},
{
"name": "정채윤",
"team": "팀3",
"dept": "MLOps System",
"senior": false,
"notes": ""
},
{
"name": "변수민",
"team": "팀3",
"dept": "MLOps Data",
"senior": true,
"notes": ""
},
{
"name": "심성환",
"team": "팀4",
"dept": "AI Efficiency Tech",
"senior": false,
"notes": ""
},
{
"name": "유지원",
"team": "팀4",
"dept": "AI Efficiency Tech",
"senior": false,
"notes": ""
},
{
"name": "오근현",
"team": "팀4",
"dept": "MLOps HPC",
"senior": false,
"notes": ""
},
{
"name": "장혁진",
"team": "팀4",
"dept": "MLOps System",
"senior": false,
"notes": ""
},
{
"name": "손현준",
"team": "팀4",
"dept": "MLOps Data",
"senior": true,
"notes": ""
},
{
"name": "정현준",
"team": "팀5",
"dept": "AI Efficiency Tech",
"senior": false,
"notes": ""
},
{
"name": "조민정",
"team": "팀5",
"dept": "AI Efficiency Tech",
"senior": false,
"notes": ""
},
{
"name": "김재현",
"team": "팀5",
"dept": "MLOps HPC",
"senior": false,
"notes": "최주니어"
},
{
"name": "김병훈",
"team": "팀5",
"dept": "MLOps System",
"senior": true,
"notes": ""
},
{
"name": "한지승",
"team": "팀5",
"dept": "MLOps Platform",
"senior": true,
"notes": "지각 가능"
},
{
"name": "이정태",
"team": "팀6",
"dept": "AI Efficiency Tech",
"senior": false,
"notes": ""
},
{
"name": "최호진",
"team": "팀6",
"dept": "MLOps HPC",
"senior": false,
"notes": ""
},
{
"name": "김정명",
"team": "팀6",
"dept": "MLOps HPC",
"senior": true,
"notes": ""
},
{
"name": "길주현",
"team": "팀6",
"dept": "MLOps System",
"senior": false,
"notes": ""
},
{
"name": "서희",
"team": "팀6",
"dept": "MLOps System",
"senior": true,
"notes": ""
},
{
"name": "이준형",
"team": "팀7",
"dept": "AI Efficiency Tech",
"senior": false,
"notes": ""
},
{
"name": "전효준",
"team": "팀7",
"dept": "MLOps HPC",
"senior": true,
"notes": ""
},
{
"name": "이지환",
"team": "팀7",
"dept": "MLOps System",
"senior": false,
"notes": ""
},
{
"name": "김동국",
"team": "팀7",
"dept": "MLOps Data",
"senior": false,
"notes": ""
}
]
}

View File

@@ -1,15 +0,0 @@
# 해커톤 팀 배정 (확정)
- 시드: `20260435`
- 총 34명, 7팀, 사이즈 [5, 5, 5, 5, 5, 5, 4]
- 김태현: 진행요원 (참여 X)
- ⭐ 시니어, 🌱 최주니어, ⏰ 지각 가능
| 팀 | 인원 | 시니어 | 멤버 |
|---|---|---|---|
| 팀1 | 5 | 1 | 김호승, 유준희, 이준석, 장다현, 강승형⭐ |
| 팀2 | 5 | 1 | 서한배, 김민섭, 유용혁, 박영훈⭐, 박재호 |
| 팀3 | 5 | 2 | 이성재, 이재광, 김영관⭐, 정채윤, 변수민⭐ |
| 팀4 | 5 | 1 | 심성환, 유지원, 오근현, 장혁진, 손현준⭐ |
| 팀5 | 5 | 2 | 정현준, 조민정, 김재현🌱, 김병훈⭐, 한지승⭐⏰ |
| 팀6 | 5 | 2 | 이정태, 최호진, 김정명⭐, 길주현, 서희⭐ |
| 팀7 | 4 | 1 | 이준형, 전효준⭐, 이지환, 김동국 |