인스타그램 피드, 리액트로 만들다

17

발행일: 2025년 05월 01일

"…그래서, 우리는 인스타그램 웹 버전 구축에 '리액트'를 사용할 것을 강력히 제안합니다."

페이스북의 고층 회의실. 거대한 통유리창 너머로 캘리포니아의 푸른 하늘이 펼쳐져 있었지만, 회의실 안의 공기는 살얼음판처럼 차가웠다. 조던 워크는 페이스북의 핵심 기술 임원들과 인스타그램 프로젝트 책임자들이 모인 자리에서, 떨리는 목소리로 마지막 문장을 내뱉었다. 그의 등 뒤에서는 피트 헌트가 긴장된 표정으로 그를 지지하고 있었다.

그들의 제안은 폭탄선언과 같았다. 모두가 당연히 기존의 검증된 기술 스택을 예상했던 상황에서, 이제 막 내부 테스트를 마친 '신생아'나 다름없는 리액트를 핵심 기술로 쓰자는 주장은 무모함을 넘어 오만하게까지 비칠 수 있었다.

예상대로, 즉각적인 반론이 쏟아졌다.

"리액트? 그게 뭔가? 들어본 적도 없는데." (인스타그램 측 엔지니어)
"조던, 자네 타입어헤드 데모는 인상적이었지만, 이건 차원이 다른 문제야. 인스타그램 전체를 이걸로 만든다고? 너무 위험 부담이 크지 않나?" (페이스북 베테랑 아키텍트)
"개발 일정은 맞출 수 있겠나? 새로운 기술을 배우는 데 드는 시간과 비용은? 안정성은 누가 보장하지?" (프로젝트 매니저)

질문과 의심, 노골적인 반감이 파도처럼 밀려왔다. 조던은 필사적으로 준비해 온 자료들을 제시하며 맞섰다. 타입어헤드의 성능 지표, 리액트의 컴포넌트 기반 아키텍처가 가져올 개발 생산성 향상, 가상 DOM의 효율성… 하지만 이미 굳어진 편견과 현실적인 우려의 벽은 쉽게 허물어지지 않았다.

패색이 짙어지던 그 순간, 의외의 인물이 입을 열었다. 인스타그램의 공동 창업자이자 당시 페이스북에 합류해 있던 케빈 시스트롬(Kevin Systrom)이었다. (실제 역사와 다를 수 있는 극적 허용)

"흥미롭군요." 그는 조던이 보여준 리액트 코드 예시와 데모를 유심히 살펴보며 말했다. "UI를 독립적인 컴포넌트로 만들고 조합한다는 발상… 확실히 매력적입니다. 특히 인스타그램처럼 시각적인 요소가 중요한 서비스에서는 재사용성과 일관성이 중요하죠."

그의 긍정적인 반응은 회의실 분위기를 미묘하게 바꾸어 놓았다. 그는 이어서 날카로운 질문을 던졌다.

"하지만 조던, 당신의 리액트가 정말로… 인스타그램의 핵심, 즉 이 끊임없이 스크롤되는 '피드(Feed)'를 부드럽고 안정적으로 처리할 수 있다고 확신합니까? 수백, 수천 장의 사진과 동영상, 댓글, 좋아요… 이 모든 것을 실시간으로 로딩하고 업데이트해야 합니다. 여기서 성능이 발목 잡히면 끝장이에요."

모든 시선이 다시 조던에게 쏠렸다. 인스타그램 피드. 그것은 프로젝트의 심장이자, 가장 기술적으로 어려운 부분이었다.

조던은 침을 꿀꺽 삼켰다. 여기서 물러설 수는 없었다. 그는 이미 피트와 함께 이 부분에 대한 기술적인 검토를 마친 상태였다.

"…확신합니다." 그의 목소리는 떨렸지만, 눈빛은 단호했다. "리액트의 가상 DOM은 바로 이런 종류의 문제, 즉 데이터가 자주 변경되고 화면에 많은 요소가 동적으로 나타나고 사라지는 상황에서 가장 큰 강점을 발휘합니다. 불필요한 DOM 조작을 최소화하여 스크롤 성능을 극대화하고, 컴포넌트 기반 설계는 복잡한 피드 아이템 구조를 관리하기 쉽게 만들어 줄 것입니다."

그의 확신에 찬 대답과, 그동안 쌓아온 기술적 근거들이 마침내 회의 참석자들의 마음을 움직이기 시작했다. 치열한 논쟁 끝에, 마침내 '조건부 승인' 결정이 내려졌다.

"좋습니다. 리액트로 개발을 시작하십시오. 단, 초기 개발 단계에서 피드 기능의 성능과 안정성을 최우선으로 검증해야 합니다. 만약 심각한 문제가 발견되면, 즉시 계획을 수정할 것입니다."

마치 살얼음판 위를 걷는 듯한 허락이었다. 하지만 조던과 피트에게는 더 이상 바랄 것이 없었다. 그들은 마침내 리액트의 진가를 증명할 거대한 무대를 얻은 것이다!

그날부터 인스타그램 웹 팀은 전쟁터나 다름없었다. 조던과 피트를 중심으로 소수의 리액트 선발대가 꾸려졌고, 그들은 밤낮없이 인스타그램 피드 구현에 매달렸다.

리액트의 컴포넌트 개념은 빛을 발했다. 사진/동영상 아이템, 사용자 정보 헤더, 좋아요 버튼, 댓글 입력창, 댓글 목록… 피드를 구성하는 모든 요소들이 독립적인 리액트 컴포넌트로 만들어졌다.

// 인스타그램 피드 아이템 컴포넌트 (개념)
function FeedItem({ postData }) {
  return (
    <div className="feed-item">
      <FeedItemHeader user={postData.user} />
      <FeedItemMedia media={postData.media} />
      <FeedItemActions postId={postData.id} initialLikes={postData.likes} />
      <FeedItemComments postId={postData.id} comments={postData.comments} />
    </div>
  );
}

작은 컴포넌트들을 레고 블록처럼 조립하여 복잡한 피드 아이템을 완성하고, 이 아이템들을 리스트 형태로 보여주는 FeedList 컴포넌트를 만드는 방식. 이것은 기존의 방식보다 훨씬 구조적이고 관리하기 용이했다.

하지만 가장 큰 도전은 역시 '무한 스크롤'과 '성능'이었다. 사용자가 스크롤을 내릴 때마다 새로운 게시물 데이터를 비동기적으로 로드하고, 화면에 부드럽게 추가해야 했다. 수백 개의 컴포넌트가 동시에 화면에 존재하고 업데이트될 때, 가상 DOM이 정말로 약속했던 성능을 보여줄 수 있을까?

팀은 수많은 시행착오를 겪었다. 스크롤 이벤트 처리 최적화, 컴포넌트 리렌더링 최소화 기법 연구(shouldComponentUpdate 등), 이미지 로딩 지연 전략… 리액트 자체의 버그를 발견하고 수정하는 일도 부지기수였다. 마감 시한의 압박과 기술적 난관 속에서 팀원들은 지쳐갔지만, 동시에 리액트라는 새로운 도구의 강력함에 매료되어 갔다.

그리고 마침내… 프로토타입 피드가 완성되었다. 떨리는 마음으로 스크롤을 내리는 순간, 화면에는 수많은 사진과 동영상들이 마치 마법처럼 부드럽게 흘러내렸다. 버벅거림이나 끊김 현상은 거의 느껴지지 않았다.

"…된다! 해냈어!"

팀원들의 환호성이 터져 나왔다. 리액트는 가장 중요한 시험대였던 인스타그램 피드 구현에서 그 가능성을 입증한 것이다. 물론 아직 갈 길은 멀었지만, 가장 큰 고비를 넘었다는 안도감과 성취감이 팀 전체를 감쌌다.

리액트는 이제 더 이상 실험적인 기술이 아니었다. 그것은 페이스북의 가장 중요하고 야심찬 프로젝트 중 하나의 심장을 뛰게 하는 엔진이 되어가고 있었다. 조던 워크는 자신이 쏘아 올린 작은 화살이 마침내 거대한 과녁을 향해 날아가고 있음을 직감했다.