Scraping-API 서비스 전체 구조

위 구조는 app.py를 중심으로 각 구성 요소가 연결되는 방식이다. 각 구성 요소는 다음과 같은 역할을 수행한다.
- app.py: Flask 애플리케이션의 진입점으로, API를 정의하고 스케줄러를 설정해 주기적인 작업을 수행할 수 있도록 한다. 이 파일에서 BaekjoonScraper와 StepService 인스턴스를 생성해 단계별 정보와 문제 정보를 가져오는 API를 제공한다.
- DB_Connection: MySQL 데이터베이스에 연결 및 커넥션을 관리한다.
- Step_Service: 단계별 내용 및 문제 내용 등을 스크래핑하고, 이를 매일마다 갱신하는 배치 동작을 수행한다.
- Problem_Service: 백준 문제의 세부 정보를 스크래핑하여 문제의 제목, 설명, 입력 및 출력 예제 등을 수집한다.
Scraping-API 서비스 상세 내용
1. DB_Connection
이 파일은 MySQL 데이터베이스 연결을 관리한다. 주요 함수는 다음과 같다.
- load_env_file: 환경 변수 파일 .env를 로드하는 함수다. 먼저 /config/.env 경로에서 파일을 불러오고, 실패 시 기본 경로에서 다시 로드한다.
- get_db_connection: 환경 변수로 설정된 MySQL 정보(host, port, database, user, password, charset)를 사용해 데이터베이스에 연결하는 함수다. 연결 성공 시 MySQL 커넥션 객체를 반환하고, 오류가 발생하면 None을 반환하여 연결 실패를 알린다.
이 파일은 API 서버가 안정적으로 DB와 통신할 수 있도록, 설정과 연결 관리를 책임진다.
2. Step_Service
StepService는 백준 단계 목록을 스크래핑하여 데이터베이스에 저장하고, 저장된 데이터를 조회하는 역할을 한다.
- scrape_steps: 백준 사이트에서 단계 목록을 가져와 ID, 제목, 설명, 문제 수 등의 정보를 리스트로 반환한다. 주기적인 갱신을 위해 사용된다.
- save_steps_to_db: scrape_steps에서 가져온 단계 목록을 데이터베이스에 저장한다. 이미 존재하는 단계는 업데이트하고, 새로운 단계는 추가하여 최신 상태를 유지한다.
- get_all_steps: 데이터베이스에서 단계 목록을 조회하며, 데이터가 없는 경우 scrape_steps를 통해 데이터를 가져와 저장한 후 반환한다.
이 클래스는 단계 데이터를 스크래핑하고 DB에 저장 및 관리함으로써, 서비스가 항상 최신 단계 정보를 제공할 수 있도록 돕는다.
3. Problem_Service
ProblemService는 특정 단계에 속한 문제와 각 문제의 상세 정보를 스크래핑해 데이터베이스에 저장하고, 필요 시 데이터를 조회하는 역할을 수행한다.
- scrape_step_problems: 백준 사이트에서 특정 단계의 문제 목록을 스크래핑하여, 문제 ID, 제목, 해결 횟수, 제출 횟수 등 문제의 기본 정보를 리스트 형태로 반환한다.
- save_step_problems_to_db: scrape_step_problems에서 가져온 문제 목록을 데이터베이스에 저장한다. 기존에 저장된 문제가 있을 경우 최신 정보로 업데이트한다.
- scrape_problem_details: 특정 문제의 상세 정보를 스크래핑하여 제목, 설명, 입력/출력 형식, 예제 등을 가져와 반환한다.
- save_problem_details_to_db: scrape_problem_details로 가져온 문제의 상세 정보를 데이터베이스에 저장한다. 데이터가 이미 존재할 경우 업데이트한다.
- get_step_problems: 데이터베이스에서 특정 단계의 문제 목록을 조회하며, 데이터가 없는 경우 스크래핑 후 저장하여 반환한다.
이 클래스는 문제 정보의 스크래핑, 데이터베이스 저장 및 업데이트를 통해, 항상 최신의 문제 데이터를 서비스에 제공할 수 있도록 한다.
'Web > 코테 준비용 서비스 만들기' 카테고리의 다른 글
06. API Gateway 서버 제작 (1) (0) | 2024.11.10 |
---|---|
05. AI API 서버 제작 (0) | 2024.11.09 |
04. 코드 API 서버 제작 (1) | 2024.11.08 |
02. 서비스를 구상해보자! (3) | 2024.10.29 |
01. 코테 준비를 위한 서비스를 만들어보자! (0) | 2024.10.29 |