use 훅, 판도라의 상자

802025년 11월 03일3

릴리스를 앞두고 최종 API 문서를 검토하던 중, use 훅에 대한 섹션에서 다시 한번 깊은 논의가 시작되었다. use 훅은 이미 Promise를 처리하는 혁신적인 방법으로 자리 잡았지만, 이것이 컨텍스트(Context)까지 처리할 수 있다는 사실은 아직 널리 알려지지 않은, 일종의 숨겨진 기능과도 같았다.

use(Context)를 공식적으로 전면에 내세워야 할까요?”

한 기술 작가가 질문을 던졌다. “지금도 개발자들은 useContext에 이미 익숙합니다. 새로운 방법을 추가하는 것이 오히려 혼란을 주지 않을까요?”

그의 우려는 타당했다. 두 가지 방법이 공존하는 것은 선택의 폭을 넓혀주지만, 동시에 어떤 것을 써야 할지에 대한 새로운 고민을 안겨줄 수도 있었다.

하지만 세바스찬 마크바게의 생각은 달랐다.

use(Context)는 단순히 useContext의 다른 이름이 아닙니다. 이것은 React의 미래와 관련된 중요한 단서입니다.”

그는 팀원들에게 use 훅이 가진, 아직 완전히 드러나지 않은 잠재력에 대해 이야기하기 시작했다.

use 훅의 가장 큰 특징 중 하나는, 조건문 안에서도 호출할 수 있다는 점입니다. 이것은 기존 훅의 규칙을 깨는 매우 중요한 예외죠.”

그는 useContextuse(Context)의 차이를 보여주는 예시를 들었다.

// useContext (조건문 안에서 호출 불가)
function MyComponent({ useTheme }) {
  // 에러: Hooks can only be called at the top level
  if (useTheme) {
    const theme = useContext(ThemeContext); 
  }
  // ...
}

// use(Context) (조건문 안에서 호출 가능)
function MyComponent({ useTheme }) {
  let theme;
  if (useTheme) {
    theme = use(ThemeContext); // OK
  }
  // ...
}

“이 차이가 지금 당장은 사소해 보일 수 있습니다. 하지만 이것은 use가 ‘상태를 등록하는’ 훅이 아니라, 단순히 ‘값을 읽어오는’ 훅이라는 근본적인 차이에서 비롯됩니다. 이 특성은 앞으로 우리가 만들 새로운 기능들의 기반이 될 수 있습니다.”

그의 말에 팀원들은 use 훅이 가진 더 큰 그림을 보기 시작했다.

use는 ‘읽기’라는 하나의 개념으로, 다양한 종류의 ‘자원(Resource)’을 통합하는 범용 인터페이스였다. 지금은 그 자원이 Promise와 Context뿐이지만, 미래에는 더 다양한 종류의 자원을 지원하도록 확장될 수 있었다. 예를 들어, Observable이나 다른 종류의 데이터 스트림 같은 것들이다.

use(Context)를 지금 공식화하는 것은, 개발자들에게 ‘React의 읽기 모델이 use라는 이름으로 통합되고 있다’는 신호를 보내는 것입니다.” 앤드류가 결론 내렸다. “당장의 혼란보다는, 미래의 일관성을 위한 투자가 될 겁니다.”

팀은 use(Context)를 공식 문서에 포함시키기로 결정했다. 다만, useContext를 대체하는 것이 아니라, ‘렌더링 중 값을 읽는 더 유연한 방법’이라는 점을 강조하며, 조건부로 컨텍스트를 읽어야 하는 등의 특정 시나리오에서 유용하다는 점을 명확히 설명하기로 했다.

use 훅은 마치 판도라의 상자와도 같았다. 그 안에는 Promise와 Context를 넘어서는, React의 미래에 대한 무한한 가능성이 담겨 있었다. React 19는 그 상자를 조심스럽게 열어, 개발자들에게 그 안에 담긴 희망의 일부를 처음으로 선보일 준비를 하고 있었다. 이 작은 훅 하나가 앞으로 React의 생태계를 어떻게 바꿔나갈지, 그 누구도 완전히 예측할 수는 없었다.