거대한 그림자, Context API

1

발행일: 2025년 05월 06일

“후우...”

다이시 카토는 입김으로 뿌옇게 흐려진 안경알을 닦으며 새로운 사무실의 공기를 깊게 들이마셨다. 코드 냄새, 아니, 그보다는 치열한 두뇌 싸움 끝에 피어나는 특유의 열기가 느껴지는 공간. 오늘부터 그의 새로운 전장이 될 곳이었다.

‘코드 네임: 아틀라스(Atlas). 세상을 떠받치는 거인처럼, 차세대 E-커머스 플랫폼을 구축한다, 인가.’

프로젝트 개요만 봐도 심장이 뛰었다. 단순한 쇼핑몰 구축이 아니었다. 실시간 재고 관리, 개인화 추천 엔진, 다중 통화 결제 시스템, 거기에 끊김 없는 사용자 경험까지. 요구 사항 목록은 마치 에베레스트 등반 루트처럼 까마득하게 이어졌다.

“카토 상, 어서 오세요! 기다리고 있었습니다.”

프로젝트 리더인 켄지가 반갑게 그를 맞았다. 켄지는 신중하고 현실 감각이 뛰어난 베테랑 개발자였다.

“새로운 도전에 함께하게 되어 영광입니다, 켄지 상.”

카토는 가볍게 목례하며 자리에 앉았다. 그의 모니터에는 이미 프로젝트 저장소(Repository)가 클론되어 번쩍이고 있었다. 손가락이 근질거렸다. 당장이라도 코드를 파헤치고 구조를 분석하고 싶었다.

잠시 후, 팀 회의가 시작되었다. 핵심 주제는 ‘상태 관리’. 아틀라스 프로젝트의 복잡다단한 데이터를 어떻게 효율적으로 관리하고 컴포넌트 간에 공유할 것인가.

“Redux는 어떻습니까? 검증된 솔루션이고, 미들웨어도 강력하죠.”

이제 막 주니어를 벗어난 유미가 패기 넘치게 제안했다.

켄지가 잠시 고민하더니 입을 열었다.

“Redux, 좋죠. 하지만 러닝 커브가 있고, 보일러플레이트 코드가 적지 않습니다. 우리 프로젝트는 속도도 중요해요. 좀 더 가볍고 빠르게 적용할 수 있는 방법은 없을까요?”

팀원들의 시선이 잠시 허공을 맴돌았다. 그때, 켄지가 다시 말을 이었다.

“React 자체에 내장된 Context API와 useReducer 훅을 조합하는 건 어떨까요? 외부 라이브러리 의존성 없이, React의 철학을 따르면서도 충분히 복잡한 상태 로직을 다룰 수 있을 겁니다.”

순간, 회의실에 안도감이 퍼졌다. React 개발자라면 누구나 익숙한 API. 별도의 학습 비용 없이 바로 적용할 수 있다는 매력이 있었다.

카토 역시 고개를 끄덕였다. 이론적으로는 완벽했다. React 팀이 제공하는 공식적인 방법. 이보다 더 ‘React스러운’ 방식은 없을 터였다. 하지만 그의 마음 한구석에는 미묘한 찜찜함이 남았다. 마치 맑은 하늘 한편에 작게 피어오르는 먹구름처럼.

‘Context… 분명 강력하지만, 규모가 커졌을 때 성능 이슈는 없었나?’

과거 다른 프로젝트에서 어렴풋이 느꼈던 불편함. 하지만 지금은 확실한 근거가 없었다. 게다가 팀의 결정이고, 일정은 촉박했다. 일단은 믿고 나아갈 수밖에.

“좋습니다. Context API와 useReducer로 가시죠.”

카토는 자신의 의견을 덧붙이며 팀의 결정에 힘을 실었다.

개발은 순조롭게 시작되는 듯했다. 카토는 특유의 집중력으로 코드를 쌓아 올렸다. 사용자 인증 상태, 장바구니 목록, 상품 정보 캐시… 전역적으로 관리해야 할 상태들이 하나둘씩 Context Provider로 감싸졌다. useReducer를 이용해 상태 변경 로직도 깔끔하게 분리했다.

겉보기에는 문제없었다. 하지만 카토의 눈에는 보였다. Provider들이 나무의 나이테처럼 겹겹이 쌓여가는 모습. 상태 하나를 사용하기 위해 여러 개의 useContext 훅을 호출해야 하는 번거로움. 그리고… 아주 미세하지만, 분명히 느껴지는 컴포넌트들의 불필요한 움찔거림.

Ctrl + S를 누를 때마다, 브라우저 콘솔에 찍히는 리렌더링 로그가 그의 신경을 긁었다.

“아직은 괜찮아. 최적화는 나중에 해도 늦지 않아.”

스스로를 다독였지만, 불안감은 쉬이 가시지 않았다. 프로젝트는 이제 막 첫발을 뗐을 뿐. 앞으로 얼마나 더 많은 상태가 추가되고, 얼마나 더 복잡하게 얽히게 될까?

그날 밤, 퇴근길 지하철의 흔들림 속에서 카토는 창밖의 어둠을 응시했다.

‘Context API… 마치 거대한 그림자 같군.’

편리함이라는 밝은 빛 뒤에 드리워진, 아직은 형체를 알 수 없는 거대한 그림자. 그 그림자가 언젠가 프로젝트 전체를 집어삼킬지도 모른다는 불길한 예감이 그의 등골을 서늘하게 만들었다.

이 불안감의 정체는 무엇일까? 카토는 다가올 폭풍의 기운을 직감하며, 조용히 눈을 감았다. 그의 머릿속에서는 이미 보이지 않는 전쟁이 시작되고 있었다.