solved.ac 문제 목록 페이지에서, 여러 사용자의 풀이 상태를 한 번에 비교해 아직 풀지 않은 문제를 빠르게 찾도록 도와주는 Chrome Extension입니다.
스터디나 팀 단위로 백준 문제를 풀 때 이런 불편이 있습니다.
- 각 사용자 페이지를 번갈아 열어야 해서 시간이 오래 걸림
- 누구는 풀었고 누구는 안 풀었는지를 한 화면에서 보기 어려움
unsolved.ac는 solved.ac 문제 목록에 필터 UI를 통해 모두가 안 푼 문제 / 일부만 안 푼 문제 / 모두가 푼 문제를 한 눈에 확인할 수 있습니다.
- solved.ac 아이디 검색 후 사용자 추가
- 사용자별 문제 수집 진행률 표시
- 사용자 선택/해제에 따라 문제 색상 즉시 변경
- Extension ON/OFF 토글
- 여러 solved.ac 탭 동시 동기화
- 설치 링크: unsolved.ac - Chrome Web Store
- 설치 후 브라우저 우측 상단 확장 아이콘에서
unsolved.ac를 열어 ON으로 전환하면 바로 사용할 수 있습니다.
pnpm install
pnpm build- chrome://extensions 접속
- 우측 상단
개발자 모드활성화 압축해제된 확장 프로그램을 로드합니다클릭- 프로젝트의
dist디렉토리 선택
- solved.ac 문제 목록 페이지로 이동
- 확장 프로그램 팝업에서 ON
- 우측 상단 필터 버튼 클릭 후 사용자 아이디 추가
- 문제 목록 색상으로 풀이 상태 비교
src
├─ components/
│ ├─ feature/ # 도메인 기능 단위 컴포넌트
│ └─ ui/ # 공통 UI 컴포넌트
├─ services/
│ ├─ api/ # solved.ac API / chrome message API
│ └─ chrome/ # background script, content script, DOM/스타일 처리
├─ content/ # Shadow DOM에 React 앱 마운트
├─ types/ # 메시지/응답/도메인 타입 정의
├─ utils/ # URL 변경 감지 등 유틸
└─ constants/ # 상수/에러 메시지
프로젝트를 아래 순서로 읽는 것을 추천합니다.
- 확장 프로그램 진입점:
manifest.json - 메시지 라우팅:
src/services/chrome/background-script.ts - 페이지 주입/업데이트 흐름:
src/services/chrome/content-script.ts - 사용자 인터랙션:
src/components/feature/user-filter/UserFilter.tsx - 문제 색상 계산 로직:
src/services/chrome/content/style.ts
flowchart LR
E["Background Service Worker"] -->|사용자 설정/문제 목록 저장| S["chrome.storage.local"]
E -->|열려있는 solved.ac 페이지에 변경사항 전달| T["TabService"]
T --> V["Content Script "]
V -->|필터 UI ON/OFF| D["Shadow DOM UI / UserFilter"]
V -->|문제 목록 영역 탐색| A["solved.ac 문제 목록 DOM"]
D -->|유저 검색/문제 수집 요청| E
E -->|사용자 정보/문제 목록 조회| API["solved.ac API"]
API -->|조회 결과 반환| E
V -->|캐싱된 데이터 조회| S
V -->|공통 미해결/부분 미해결/해결 색상 반영| A
- 사용자가 확장 화면에서 설정을 바꾸거나 아이디를 추가
- 확장 서비스가 데이터를 저장하고 열려 있는 solved.ac 페이지를 동기화
- 페이지 내 필터 기능이 최신 데이터로 UI를 갱신
- solved.ac 조회 결과를 바탕으로 문제 목록에 상태별 색상을 적용
권한 범위를 최소화해, 필요한 페이지와 데이터에만 접근하도록 구성했습니다.
storage: 확장 ON/OFF 상태, 사용자 목록, 사용자별 문제 ID 저장host_permissions: https://solved.ac/problems*: solved.ac 문제 목록 페이지에서만 동작- 로그인/인증 토큰을 수집하지 않습니다.
- 사용자 설정 데이터는
chrome.storage.local에 저장됩니다. - 외부 전송 데이터는 solved.ac 공개 API 조회 요청(사용자 정보/문제 목록)으로 제한됩니다.

