Folio 05 · 삼성 청년 SW 아카데미
DANCHU
지난 24시간의 뉴스를 단어 추측 게임으로 바꾸는 서비스
- 기간
- 2023.08.21 — 2023.10.06
- 역할
- 아키텍처 설계 · 데이터 파이프라인 · 프론트엔드
- 배포 후 10일
- 새 사용자 165명
꼬맨틀 같은 '그날의 단어' 추리 게임에서 착안. 게임을 하면서 시사까지 익히게 하자는 생각으로, 뉴스에서 뽑은 단어를 맞히는 단어 추리 게임을 구상 — 줄여서 단추. 시사에 익숙하지 않은 사람도 전날의 주요 뉴스를 접하게 만드는 것이 목표. 뉴스를 모아 단어로 분해하고 그날 가장 많이 언급된 단어를 문제로 출제하는 구조.
Python · FastAPI · APScheduler · Hadoop MapReduce · FastText · Mecab · Java · React
영상
화면
01 뉴스를 문제로 바꾸는 파이프라인 2023.08 — 2023.10
매일 쏟아지는 기사에서 그날을 대표하는 단어를 뽑아내는 것이 핵심. 사람 손이 닿지 않고 하루 단위로 도는 흐름이어야 서비스로 성립.
요구사항
- 자동 수집
- 매일 지난 24시간의 기사를 사람 개입 없이 수집
- 출제 가능성
- 추측 게임으로 성립하는 단어를 선정
- 시사 연결
- 게임 종료 후 실제 기사로 이동할 수 있을 것
구현
-
수집 파이프라인
- BeautifulSoup 기반 기사 수집기를 FastAPI 앱으로 구성하고 APScheduler로 24시간 주기 실행
- URL 수집·본문 수집·오류 재시도를 별도 잡으로 나누고, 스케줄 제어와 수동 실행을 외부 API로 노출
- 프로젝트 아키텍처 설계와 서비스 진행 흐름 구성 주도
-
단어 추출과 집계 설계 판단
- 오픈소스 형태소 분석기 Mecab으로 기사 본문을 형태소 단위로 나눠 명사를 뽑고, 품사 태그가 고유명사(NNP)인 것은 집계에서 제외
- 인명·지명이 상위를 독점하면 추측 게임으로 성립하지 않는다는 판단
- 출현 횟수 집계는 특화 과정의 학습 목표인 분산 처리를 적용해 Hadoop MapReduce로 구성. 분할한 텍스트를 WordCount 잡으로 세고 reducer에서 상위 단어를 추림
- 수집 범위를 기간·매체로 넓힐 때 노드만 늘리면 되는 구조를 우선한 선택
-
근접도 판정
- 수집한 기사로 FastText 임베딩을 직접 학습하고, 새 기사가 쌓일 때마다 이어서 학습해 모델을 갱신
- 정답과 유사한 상위 1000개 단어를 미리 계산해 두고, 추측 단어의 유사도와 순위를 근접도로 표시
- 고유명사 포함·제외 두 벌의 모델을 두어 정답 유형에 따라 선택
-
출제 방식
- 그날 상위 키워드 중 최근 3일 정답을 제외하고 고르고, 그 키워드가 든 제목을 TextRank로 추려 문제 문장으로 사용
- 한 제목에서 최대 세 단어를 가려, 하루 한 단어에 그치는 기존 서비스와 차별
-
결과 화면
- 게임 종료 후 결과 화면 디자인과 구현
- 정답 단어와 연관된 실제 기사를 함께 노출해 시사 정보로 연결
까다로웠던 지점
많이 나온 단어가 좋은 문제는 아님
단순 빈도 상위를 그대로 출제하면 인명과 지명이 대부분을 차지하는 구조. 고유명사는 추측의 실마리가 없어 게임이 성립하지 않고, 시사 상식으로서의 가치도 낮음.
해결Mecab이 붙인 품사 태그를 보고 고유명사(NNP)는 버리고 일반명사(NNG)만 집계 대상으로 한정. 분류를 직접 만들지 않고 분석기의 태그를 그대로 신뢰한 선택으로, 인명·지명이 상위에서 빠지면서 그날의 사건을 설명하는 단어가 올라옴
남긴 것
- 수집부터 출제까지 사람 손이 닿지 않는 하루 단위 자동 흐름 완성
- 게임과 시사 정보가 결과 화면에서 이어지는 구조 확보
- 배포 후 약 10일간 새 사용자 165명, 그중 31명이 재방문