일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 누적합
- langgraph
- 완전탐색
- BFS
- 쿠키
- 몽고 인덱스
- 검색어 추천
- 트랜잭샨
- JPA
- ipo 매매자동화
- docker
- 백준
- 결제서비스
- jwt 표준
- AWS
- 레디스 동시성
- gRPC
- 카카오
- 추천 검색 기능
- ai agent
- 셀러리
- 구현
- 크롤링
- 프로그래머스
- piplining
- 이분탐색
- spring event
- next-stock
- 아키텍쳐 개선
- 디버깅
- Today
- Total
코딩관계론
뉴스에서 인사이트를 자동으로 찾아주는 시스템 - 1 본문
오늘은 뉴스 데이터에서 자동으로 유용한 정보를 찾아주는 시스템을 구축하면서, 저희 팀이 고민했던 기술적인 문제들과 그 문제들을 해결한 과정을 공유하려고 합니다. 특히 이 과정에서 사용한 AI 기술들, 그리고 분산 환경에서 데이터의 일관성을 지키기 위해 했던 노력들을 쉽게 풀어서 설명해 드리겠습니다.
1. 뉴스 데이터에서 자동으로 '인사이트'를 추출하기 위해 고려한 기술들
저희가 만들고자 했던 시스템은 하루에도 수백, 수천 개씩 쏟아지는 뉴스 중에서 중요한 정보(인사이트)를 자동으로 발견하고 요약해주는 역할을 합니다. 사람이 모든 뉴스를 직접 읽고 평가할 수는 없으니까, 이를 돕는 AI 시스템을 설계하기로 했습니다.
이 과정에서 중요한 기술적 결정을 내렸던 부분은 다음과 같습니다:
- LangGraph라는 도구를 사용한 이유
뉴스 분석 과정은 여러 단계로 나누어지는데, 이 과정을 직관적으로 보여줄 필요가 있었습니다.
기존에 유명한 LangChain이라는 도구도 있었지만, 실제 사용해보니 워크플로우가 복잡한 경우 코드가 점점 난해해지고 관리하기 어려웠습니다.
LangGraph는 이런 복잡한 과정을 그래프 형태로 보여주어, 작업 흐름을 이해하고 관리하기 훨씬 쉬웠습니다. - 뉴스의 핵심을 뽑아내기 위한 AI 처리 방법
뉴스 전체를 그대로 사용하는 대신, AI 모델을 통해 뉴스의 내용을 빠르게 요약하고 중요한 사건이나 키워드를 추출합니다.
그 후, 추출한 키워드를 기준으로 기존에 있던 데이터와의 유사도를 계산해 정말 중요한 뉴스만 빠르게 찾아냅니다.
2. 한국어 뉴스 처리에 적합한 벡터 데이터베이스, '업스테이지(Upstage)' 선택하기
AI가 뉴스를 처리하려면 뉴스의 내용을 컴퓨터가 이해할 수 있는 숫자(벡터) 형태로 바꾸어야 합니다. 이를 위해서는 벡터 데이터베이스라는 기술이 필요했습니다.
많은 선택지가 있었지만, 저희는 특히 한국어 뉴스 처리에 가장 적합한 솔루션을 찾아야 했습니다. 내부에서 여러 솔루션을 테스트한 결과, 업스테이지(Upstage)가 특히 한국어 데이터에 대해 빠르고 정확한 성능을 제공하는 것으로 나타나서 선택하게 되었습니다.
3. 벡터를 활용한 키워드 확장 방식
뉴스의 핵심 키워드를 찾는 것만으로는 부족했습니다. 저희는 발견된 키워드를 기반으로 또 다른 연관 키워드를 찾아내는 과정이 필요했습니다.
이때 뉴스의 벡터를 이용해서, 단어가 쓰인 맥락과 비슷한 다른 키워드를 빠르게 찾아주는 방식을 적용했습니다. 이를 통해 한 뉴스에서 시작해 더 넓은 정보로 확장될 수 있는 길을 마련했습니다.
4. AI 에이전트 기능을 강화하는 방법: 'Tool' 설계
뉴스 내용을 더 정확히 이해하려면 AI가 혼자 힘으로 판단하는 것만으로는 부족합니다. 때로는 특정한 작업을 하는 별도의 도구(tool)가 AI를 도와줄 필요가 있습니다. 저희는 AI 에이전트가 스스로 특정 도구를 사용할 수 있도록 설계했고, 덕분에 AI의 성능과 신뢰성을 높일 수 있었습니다.
5. 중복 뉴스 문제는 어떻게 해결했을까요?
뉴스 데이터는 같은 뉴스가 여러 매체에서 반복되는 경우가 많습니다. 저희는 이 문제를 Redis라는 빠른 저장소를 이용해서 해결했습니다.
뉴스의 고유한 링크를 Redis의 Set에 저장해서, 이미 처리한 뉴스가 들어오면 빠르게 중복을 확인하고 걸러내도록 했습니다. 또한 이 링크는 하루만 저장한 뒤 자동으로 사라지도록 설정(TTL)하여 시스템이 항상 최신 상태를 유지하게 했습니다.
6. AWS Lambda를 이용한 실시간 처리와 '경쟁 조건'이라는 고민
이제 중요한 고민 하나를 더 공유하겠습니다.
뉴스가 많이 들어오면 이를 처리하는 서버를 수시로 늘렸다가 줄여야 합니다. 이를 위해 AWS Lambda라는 기술을 사용했는데요, Lambda는 사용량이 많아지면 자동으로 확장되어 빠르게 뉴스를 처리할 수 있게 합니다.
그러나 문제가 하나 있었습니다. 때로는 두 개 이상의 AI가 동시에 같은 뉴스 데이터를 처리할 수도 있다는 것이었습니다. 이 경우 같은 뉴스에 대해 서로 다른 결과가 나오는 등 데이터가 뒤엉킬 위험이 생깁니다. 이것을 '경쟁 조건(race condition)'이라고 부릅니다.
이 문제를 어떻게 해결했을까요?
저희는 이 문제를 Redis를 이용한 **분산 락(Distributed Lock)**으로 해결했습니다.
- 각 뉴스 URL을 기반으로 고유한 "잠금(lock)"을 설정했습니다. 즉, 한 번에 하나의 AI만 해당 뉴스를 처리하도록 하는 것입니다.
- 이 락에는 만료 시간이 있어(AI가 중간에 멈추거나 예상치 못한 오류로 작업이 끝나지 못할 때를 대비), 오랫동안 시스템이 멈추는 일을 막았습니다.
- 뉴스 분석이 끝난 후 명시적으로 락을 해제하도록 만들어, 분석 작업이 완벽히 끝날 때까지 잠금을 유지했습니다.
이 덕분에 두 AI 에이전트가 동일한 뉴스를 동시에 분석하는 문제를 완벽히 방지하고, 일관된 결과를 얻을 수 있었습니다.
7. 안정적인 비동기 처리를 위해 Kafka 도입하기
저희는 뉴스 데이터가 많아질수록 시스템이 느려지거나 멈추지 않고 안정적으로 작동할 수 있도록 Kafka라는 메시지 큐 기술을 도입했습니다. Kafka 덕분에 뉴스 데이터를 처리하는 서버가 일시적으로 문제가 생기더라도 데이터가 안전하게 저장되고, 나중에 다시 처리될 수 있게 되어 시스템 안정성을 크게 높일 수 있었습니다.
마무리하며
이 글을 통해 저희가 뉴스 데이터를 자동으로 분석하는 AI 시스템을 구축하며 고민했던 여러 가지 문제와, 이를 어떻게 해결했는지 살펴보았습니다. 실제 운영 환경에서 AI를 사용하면 수많은 예상치 못한 문제가 발생할 수 있는데, 그 과정에서 이뤄진 저희의 고민과 해결 과정이 비슷한 시스템을 만드는 다른 분들에게도 도움이 되었으면 좋겠습니다.
앞으로도 더 많은 고민과 개선을 거쳐 더 완벽한 시스템으로 발전시켜 나가겠습니다. 다음에도 유익한 기술 이야기로 찾아뵙겠습니다.
감사합니다!
최종 워크플로우 도식도
Next Stock - 주식 시장을 한눈에!
마켓맵에서 인기 검색어, 핫이슈, 시장 트리 차트까지 모아보세요.
next-stock.com
'개발 > Hot-Stock' 카테고리의 다른 글
프로그래매틱 SEO로 틈새 시장을 공략하라! (0) | 2025.04.10 |
---|---|
[SSO 인증 도입기: 회원가입의 귀찮음과 신뢰도 문제를 해결하라] (0) | 2025.04.04 |
IPO 인사이트 자동화 구축 프로세스 구축기: 뉴스 수집부터 Insights까지 (0) | 2025.04.04 |
엘라스틱 서치를 사용한 검색엔진 개발 (1) | 2025.03.06 |
엘라스틱 서치 (0) | 2025.03.06 |