GraphQL Federation 직접 부딪히며 배우기
·
Learnings
회사에서 내가 구축한 영상 이해 데이터 플랫폼의 연장으로, 브랜드 대시보드 프로젝트를 진행하면서 GraphQL과 Apollo Federation을 본격적으로 다뤘다.그 과정에서 Federation 환경의 GraphQL 서버를 개발하며 느낀 것들을 담아봤다GraphQL에 대한 오해GraphQL은 흔히 overfetching(불필요한 데이터까지 가져오는 문제)과 underfetching(한 번에 필요한 데이터를 다 못 가져오는 문제)을 해결한다고 설명된다. 처음에 내가 잘못 생각했던 부분은, “각 요청마다 딱 맞는 스키마를 계속 추가해야 한다”라고 생각한 것이다.즉, 상황별로 최적화된 쿼리와 응답을 위해 스키마를 세분화·확장하는 방식이 맞다고 여겼다.설계를 하면서는 내가 정말 잘 하고 있다고 생각했고, 깔끔..
오픈서치(엘라스틱서치) 인덱스와 매핑, 그리고 리인덱싱
·
Learnings
오픈서치에서 작업을 하다가 매핑의 중요성을 몸소 깨닫게 된 적이 있다. 해당 데이터는 “확률 분포” 데이터였다.예를 들어, 문서마다 특정 데이터의 확률 분포를 다음과 같이 넣어야 하는 상황이었다.{ "positive": 0.3, "neutral": 0.5, "negative": 0.2}평소처럼 동작에만 신경을 쓰고 워크플로우를 돌렸는데, 해당 데이터가 hot에서 warm으로 옮겨지면서 문제가 발견되었다.최초 데이터의 저장은 hot 인덱스에 저장된다. 이 때, positive 필드가 float으로 동적 매핑이 되었다고 해보자.그런데, warm 인덱스로 일부 데이터가 옮겨질 때, positive 값이 0.0인 게 맨 처음 들어가게 되어 warm 인덱스에서는 positive 필드가 int 로 ..
MongoDB로 동시성과 상태 관리하기
·
Learnings
크롤러 같은 멀티 프로세스 / 멀티 인스턴스 환경에서는 “지금 누가 작업 중인지”, “데이터가 준비되었는지” 같은 상태를 안전하게 관리해야 한다. 이를 제대로 안 하면, 여러 봇이 동시에 같은 타깃을 갱신하거나, 아직 준비되지 않은 데이터를 읽어가면서 꼬일 수 있다.이번 글에서는 인턴 시절 첫 프로젝트였던 '무중단 분산 크롤링 봇'에서 MongoDB Document 필드만으로 동시성과 상태를 관리하도록 설계했던 방법을 소개하려고 한다.상태 플래그Document에는 두 가지 핵심 플래그가 있다.isReady: 크롤러가 대상(seeds)을 사용해도 되는지 여부isEditing: 현재 다른 프로세스가 갱신 작업을 하고 있는지 여부이 두 가지 조합으로 현재 상태를 판별한다.상태 의미isReady=true, is..