개인 알고리즘 풀이를 백업하기 위해 만들었습니다.
- 백준, 프로그래머스의 문제를 풀고, 지정된 형식의 파일명으로 저장해 push하면,
- GitHub Action이 동작해 자동으로 노션에 새 페이지를 만들고, 지정된 정보를 넣어줍니다.
워크플로우가 파일을 정확히 인식하고 파싱할 수 있도록 아래의 명명 규칙을 준수합니다.
형식: {날짜}_{사이트}_{문제번호}.{확장자}
- 백준 예시:
8_boj_10828.cpp - 프로그래머스 예시:
8_pg_12345.py
알고리즘 문제를 풀고 난 뒤의 복습과 기록은 성장을 위해 필수적입니다.
하지만 매번 다음과 같은 반복적인 과정이 비효율적이라고 생각했습니다.
- 노션 데이터베이스에 새 페이지 생성
- 문제 제목, 번호, URL을 복사하여 붙여넣기
- 난이도와 알고리즘 유형을 수동으로 선택
- 사용한 언어와 날짜 기록
이러한 단순 반복적인 '정리' 업무에 쏟는 에너지를 최소화하고,
오직 '알고리즘 풀이와 회고'에만 집중할 수 있는 환경을 구축하고자
이 자동화 시스템을 시작하게 되었습니다.
본 시스템은 정형화된 데이터는 봇(Bot)이 관리하게 하고, 어려웠던 부분과 같은 주관적인 통찰은 직접 기록하도록 만들어 효율적인 학습 루틴을 지향합니다.
GitHub Actions와 Notion API를 결합한 개인 학습(알고리즘 풀이) 아카이빙 시스템
본 프로젝트는 알고리즘 문제 풀이 과정에서 발생하는 반복적인 기록 업무를 자동화하여 학습 효율을 극대화하기 위해 설계되었습니다. 코드 푸시(Push) 한 번으로 데이터 수집, 가공, 그리고 노션 데이터베이스 적재까지 모든 파이프라인이 유기적으로 작동합니다.
- 로컬 작업: 문제 풀이 후 약속된 규칙에 따라 파일명 명명 후 푸시.
- 자동화 워크플로우: GitHub Actions가 트리거되어 독립적인 Python 가상 환경 실행.
- 데이터 가공: 파일명에서 문제 번호 및 언어를 추출하고, Solved.ac API를 통해 메타데이터 수집.
- 노션 동기화: 수집된 데이터를 노션 API 규격에 맞춰 변환 후 데이터베이스에 새 페이지 생성.
- 언어: Python 3.9+
- 자동화: GitHub Actions (CI/CD)
- 인터페이스: Notion API, Solved.ac API
- 주요 라이브러리:
notion-client,requests
.
├── .github/
│ └── workflows/
│ └── notion_sync.yml # 자동화 워크플로우 설정 파일
├── scripts/
│ └── upload_to_notion.py # 데이터 파싱 및 API 통신 핵심 로직
├── 2026/ # 연도별 풀이 기록
│ └── 01_Feb/ # 월별 폴더
│ └── 8_boj_10828.cpp # 문제 소스 코드 (Naming Convention 적용)
└── README.md
파일명의 접두사와 확장자를 분석하여 사이트별 메타데이터를 추출하고 환경을 구분합니다.
| 기능 | 백준 (BOJ) | 프로그래머스 (PG) |
|---|---|---|
| 식별자 | boj_ 키워드 기반 인식 |
pg_ 키워드 기반 인식 |
| 데이터 수집 | Solved.ac API 연동 (제목, 등급, 태그) | 문제 번호 기반 URL 자동 생성 |
| 언어 감지 | .cpp ➔ C++17, .py ➔ Python 등 확장자 매핑 |
동일 적용 |
- 등급 정규화: Solved.ac API가 제공하는 수치형 난이도 데이터를 사용자 정의 로마자 표기법(예:
실버 III)으로 변환하여 노션 Select 속성에 최적화된 데이터를 공급합니다. - 지능형 태그 동기화: 문제의 알고리즘 분류 태그를 추출하여 노션의 다중 선택(Multi-select) 속성과 실시간으로 동기화합니다.
단순 데이터 입력을 넘어, 사후 검토(Review) 및 오답 노트를 위한 5단계 학습 템플릿을 페이지 내부에 자동 구성합니다.
- 01. 문제 설명: 문제의 핵심 요구사항 기술
- 02. 필요 개념: 풀이에 사용된 알고리즘 및 자료구조 정리
- 03. 핵심 코드: 로직의 핵심이 되는 코드 조각(Snippet)
- 04. 코드 (풀이 방식): 전체 소스 코드 및 구현 로직 설명
- 05. 어려웠던 부분: 트러블슈팅 및 개선 방향 기록 (학습 핵심 구간)
