LawCast 서비스의 백엔드 API 서버입니다. NestJS 프레임워크를 기반으로 구축되었으며, 국회 입법예고 데이터를 크롤링하고 웹훅을 통해 디스코드 알림을 전송하는 기능을 제공합니다.
- 크롤링 서비스: 국회 입법예고 데이터를 주기적으로 수집
- 웹훅 관리: 디스코드 웹훅 등록 및 관리
- 알림 서비스: 입법예고 변동사항을 웹훅으로 전송
- Redis 캐시: 분산 캐시 시스템으로 성능 최적화 및 데이터 영속성 보장
- 배치 처리: 대량 데이터 처리 기능
- HashGuard(PoW) 작업증명: 웹훅 등록 시 스팸 방지
- 스케줄링: 정기적인 작업 자동화
- 프레임워크: NestJS
- 언어: TypeScript
- 데이터베이스: SQLite (TypeORM)
- 캐시: Redis (@keyv/redis, @nestjs/cache-manager)
- 크롤링: pal-crawl
- 알림: discord-webhook-node
- 스케줄링: @nestjs/schedule
- Node.js (버전 18 이상)
- npm 또는 yarn
- Redis (버전 6 이상)
npm install프로젝트 루트에 .env 파일을 생성하고 다음 변수를 설정하세요:
# 서버 설정
PORT=3001
NODE_ENV=production
# 데이터베이스 설정
DATABASE_PATH=lawcast.db
# Redis 캐시 설정
REDIS_URL=redis://localhost:6379
REDIS_KEY_PREFIX=lawcast:
REDIS_TTL=1800
# HashGuard(PoW) API 설정 (선택사항)
HASHGUARD_API_URL=https://hashguard.viento.me
# 크론 작업 시간대
CRON_TIMEZONE=Asia/Seoul
# CORS 허용 도메인 (쉼표로 구분)
FRONTEND_URL=http://localhost:5173,http://localhost:3002
# 개발 모드
npm run start:dev
# 프로덕션 모드
npm run start:prod
# 디버그 모드
npm run start:debug# 단위 테스트
npm run test
# E2E 테스트
npm run test:e2e
# 테스트 커버리지
npm run test:covGET /api/notices/recent- 최근 입법예고 목록 조회 (Redis 캐시 활용)POST /api/webhooks- 웹훅 등록DELETE /api/webhooks/:id- 웹훅 삭제GET /api/stats- 시스템 통계 및 Redis 캐시 정보 조회GET /api/health- 서버 상태 및 Redis 연결 상태 확인
src/
├── config/ # 설정 파일
├── controllers/ # API 컨트롤러
├── services/ # 비즈니스 로직 서비스
├── entities/ # 데이터베이스 엔티티
├── dto/ # 데이터 전송 객체
├── types/ # 타입 정의
└── utils/ # 유틸리티 함수
MIT License