코딩테스트 문제를 푸는 것만으론 충분하지 않습니다. 반복 학습을 통해 진정한 실력을 향상시키세요.
BANBOK은 코딩테스트 문제의 효과적인 반복 학습을 위한 웹 서비스입니다. 문제를 한 번 푸는 것에서 끝나는 것이 아니라, 과학적인 학습 방법론에 기반하여 1일, 3일, 7일, 21일 후에 다시 풀어보도록 리마인더를 제공합니다.
- 🔗 문제 링크 제출: 백준, 프로그래머스, 리트코드 등 다양한 플랫폼의 문제 링크 제출
- 📧 스케줄링 리마인더: 1, 3, 7, 21일 주기로 이메일 알림 발송
- 🏷️ 자동 문제 파싱: 웹 크롤링을 통한 문제 제목 및 정보 자동 추출
- 🔐 간편 로그인: Naver 소셜 로그인 지원
- 에빙하우스 망각곡선 이론 적용: 과학적으로 증명된 반복 학습 주기를 통한 효과적인 학습
- 사용자 친화적 UI/UX: 직관적이고 깔끔한 인터페이스
- 다중 플랫폼 지원: 백준, 프로그래머스, 리트코드 등 주요 코딩테스트 사이트 모두 지원
- 자동화된 알림 시스템: 사용자가 별도로 관리할 필요 없는 스마트한 리마인더
이 프로젝트는 모노레포(Monorepo) 구조로 구성되어 있습니다.
banbok/
├── apps/
│ ├── frontend/ # Next.js 프론트엔드
│ │ ├── app/
│ │ │ ├── _components/ # 재사용 가능한 컴포넌트
│ │ │ ├── _constants/ # 공통 상수
│ │ │ ├── _hooks/ # 커스텀 React 훅
│ │ │ ├── _store/ # Zustand 상태 관리
│ │ │ ├── _type/ # TypeScript 타입 정의
│ │ │ ├── services # 도메인별 서비스 로직
│ │ │ └── utils/ # 유틸리티 함수 및 크롤러
│ │ └── (route)/ # 페이지 라우트
│ │ └── public/ # 정적 자원
│ └── backend/ # NestJS 백엔드
│ ├── src/
│ │ ├── auth/ # 인증 모듈
│ │ ├── mail/ # 이메일 발송 모듈
│ │ ├── task/ # 스케줄링 작업 모듈
│ │ └── user/ # 사용자 관리 모듈
│ └── test/ # 테스트 파일
├── packages/
│ ├── eslint-config/ # 공통 ESLint 설정
│ ├── log/ # 로깅 패키지
│ ├── shared/ # 공통 타입 및 유틸리티
│ └── typescript-config/ # 공통 TypeScript 설정
└── package.json # 루트 패키지 설정
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- State Management: Zustand
- HTTP Client: Fetch API
- Web Scraping: Cheerio (클라이언트 사이드)
- Framework: NestJS
- Language: TypeScript
- Database: PostgreSQL
- ORM: Drizzle ORM
- Authentication: Passport (JWT, OAuth)
- Task Scheduling: BullMQ + Redis
- Email Service: Nodemailer
- Template Engine: Pug
- Monorepo: Turbo
- Package Manager: npm
- Database Migrations: Drizzle Kit
- Code Quality: ESLint, Prettier
- Testing: Jest
- Containerization: Docker
- Node.js 18+
- PostgreSQL
- Redis
- npm
- 저장소 클론
git clone https://github.com/your-username/banbok.git
cd banbok- 의존성 설치
npm install- 환경 변수 설정
# 프론트 환경변수 (.env)
NEXT_PUBLIC_API_URL=http://localhost:3001# 백엔드 환경변수 (.env.local)
DATABASE_URL=postgresql://username:password@localhost:5432/banbok
REDIS_HOST=localhost
REDIS_PORT=6379
JWT_SECRET=your-jwt-secret
# 소셜 로그인 설정
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
NAVER_CLIENT_ID=your-naver-client-id
NAVER_CLIENT_SECRET=your-naver-client-secret
KAKAO_CLIENT_ID=your-kakao-client-id
# 이메일 설정
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
[email protected]
SMTP_PASS=your-email-password- 데이터베이스 마이그레이션
npm run db:migrate --workspace=apps/backend# 전체 프로젝트 개발 서버 실행
npm run dev
# 프론트엔드만 실행
npm run dev --workspace=apps/frontend
# 백엔드만 실행
npm run dev:backend# 빌드
npm run build
# 백엔드 실행
npm run start:backend# 전체 테스트 실행
npm run test
# 백엔드 E2E 테스트
npm run test:e2e --workspace=apps/backend
# 커버리지 포함 테스트
npm run test:cov --workspace=apps/backend- 사용자가 코딩테스트 문제 링크 제출
- 프론트엔드에서 해당 사이트의 크롤러를 통해 문제 정보 추출
- 백엔드로 문제 정보 전송
- 데이터베이스에 저장 및 스케줄링 작업 등록
- BullMQ를 통한 지연 작업 스케줄링
- 1일, 3일, 7일, 21일 후 자동 트리거
- 이메일 템플릿을 통한 개인화된 알림 발송
- 사용자 클릭 추적 및 학습 상태 업데이트
- 백준(Baekjoon):
acmicpc.net도메인 처리 - 프로그래머스(Programmers):
programmers.co.kr도메인 처리 - 리트코드(LeetCode):
leetcode.com도메인 처리
- 코드 리뷰 기능
- AI 기반 문제 추천 시스템
- 문제 태그별 분류 및 필터링
- 학습 통계 및 대시보드 개선
- 그룹 스터디 기능
- 모바일 앱 개발
- 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
이 프로젝트는 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
- 모든 오픈소스 기여자들에게 감사드립니다
- 에빙하우스 망각곡선 이론에 영감을 받았습니다
- 효과적인 학습 방법론에 대한 연구들을 참고했습니다
