백준(Solved.ac) 그룹 관리 및 분석 서비스
이 프로젝트는 백준 온라인 저지의 그룹을 효율적으로 관리하고 분석하는 웹 서비스입니다. 사용자들의 문제 풀이 기록을 추적하고 통계를 제공합니다.
- FastAPI: 고성능 Python 웹 프레임워크
- SQLAlchemy: ORM (비동기 지원)
- PostgreSQL: 관계형 데이터베이스
- Pydantic: 데이터 검증 및 설정 관리
- JWT: 사용자 인증
- HTML5/CSS3: 마크업 및 스타일링
- JavaScript (Vanilla): 클라이언트 로직
- Bootstrap 5: UI 프레임워크
- Docker: 컨테이너화
- Docker Compose: 멀티 컨테이너 오케스트레이션
temp_project/
├── backend/ # 백엔드 애플리케이션
│ ├── app/
│ │ ├── __init__.py
│ │ ├── main.py # FastAPI 메인 애플리케이션
│ │ ├── database.py # DB 연결 및 세션 관리
│ │ ├── core/ # 핵심 유틸리티
│ │ │ ├── config.py # 설정 관리
│ │ │ └── security.py # 보안 (JWT, 해싱)
│ │ ├── models/ # SQLAlchemy 모델
│ │ │ └── models.py # User, Group, SolvedLog
│ │ ├── schemas/ # Pydantic 스키마
│ │ │ └── schemas.py # Request/Response 모델
│ │ └── api/ # API 엔드포인트
│ │ ├── deps.py # 의존성 주입
│ │ └── endpoints/
│ │ ├── auth.py # 인증 API
│ │ └── users.py # 사용자 API
│ ├── requirements.txt # Python 의존성
│ └── Dockerfile # Docker 이미지 빌드
├── frontend/ # 프론트엔드 애플리케이션
│ ├── index.html # 로그인 페이지
│ ├── css/
│ │ └── style.css # 커스텀 스타일
│ └── js/
│ └── app.js # 클라이언트 로직
├── docker-compose.yml # Docker Compose 설정
├── env.example # 환경 변수 예시
├── .gitignore # Git 무시 파일
└── README.md # 프로젝트 문서
id: Primary Keyhandle: 백준 아이디 (Unique)password_hash: 해시된 비밀번호created_at: 가입 일시
id: Primary Keyname: 그룹명 (Unique)description: 그룹 설명created_at: 생성 일시
id: Primary Keyuser_id: 사용자 ID (Foreign Key)problem_id: 백준 문제 번호solved_at: 풀이 완료 일시
- Docker & Docker Compose
- Git
- 저장소 클론
git clone <repository-url>
cd temp_project- 환경 변수 설정
cp env.example .env
# .env 파일을 열어 필요한 값들을 수정하세요- Docker Compose로 실행
docker-compose up -d- 서비스 확인
- API 서버: http://localhost:8000
- API 문서 (Swagger): http://localhost:8000/docs
- 로그인 페이지: http://localhost:8000/static/index.html
- 초기 테스트 계정 생성
브라우저에서 http://localhost:8000/static/index.html 로 접속 후:
- "회원가입" 버튼 클릭
- 테스트 계정 생성 (예:
testuser/test1234)
또는 API 문서에서 직접 호출:
curl -X POST "http://localhost:8000/auth/register" \
-H "Content-Type: application/json" \
-d '{"handle": "testuser", "password": "test1234"}'회원가입
{
"handle": "testuser",
"password": "password123"
}로그인 (JWT 토큰 발급)
{
"handle": "testuser",
"password": "password123"
}현재 로그인한 사용자 정보 조회
- Authorization: Bearer {token} 필요
- Python 가상환경 생성
cd backend
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate- 의존성 설치
pip install -r requirements.txt- PostgreSQL 실행 (별도로 설치 필요)
# Docker로 DB만 실행하는 경우
docker run -d \
--name boj_postgres \
-e POSTGRES_USER=boj_user \
-e POSTGRES_PASSWORD=boj_password \
-e POSTGRES_DB=boj_soma_db \
-p 5432:5432 \
postgres:15-alpine- 환경 변수 설정
export DATABASE_URL="postgresql+asyncpg://boj_user:boj_password@localhost:5432/boj_soma_db"
export SECRET_KEY="your-secret-key"- API 서버 실행
cd backend
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000# 전체 로그
docker-compose logs -f
# API 서버 로그만
docker-compose logs -f api
# DB 로그만
docker-compose logs -f dbdocker-compose restartdocker-compose down
# 볼륨까지 제거 (데이터베이스 데이터 삭제)
docker-compose down -v-
SECRET_KEY 변경
env.example의SECRET_KEY를 강력한 랜덤 키로 변경
-
CORS 설정
backend/app/core/config.py에서BACKEND_CORS_ORIGINS를 특정 도메인만 허용
-
데이터베이스 비밀번호
- 기본 비밀번호
boj_password를 강력한 비밀번호로 변경
- 기본 비밀번호
-
SQL 쿼리 로깅 비활성화
backend/app/database.py의echo=True를echo=False로 변경
- 그룹 관리 API 구현
- 문제 풀이 기록 API 구현
- Solved.ac API 연동
- 대시보드 페이지 구현
- 그룹 통계 및 분석 기능
- 알림 기능
- 관리자 페이지
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License.
- 소마 프로젝트 팀
프로젝트에 대한 문의사항이 있으시면 이슈를 등록해주세요.
Made with ❤️ for SOMA Project