환경 고민없이 개발하기
김동현 · 토스 · 토스 기술 블로그
소개
서버 사이드 렌더링 작동 방식과 Isomorphic에 대해 소개드려요.
AI 핵심 요약
SSR은 서버가 HTML을 먼저 만들어 전달해 초기 로딩과 SEO에 이점을 주지만, 브라우저 전용 객체를 사용하는 코드가 서버에서 실행되면 `location is not defined` 같은 오류가 발생할 수 있습니다. 서버에서 해당 접근을 막는 것만으로는 서버와 클라이언트의 렌더링 결과가 달라져 Hydration Mismatch가 생길 수 있으므로, 두 환경에서 같은 값을 얻도록 해야 합니다. 글은 Next.js의 `useRouter()`를 사용해 쿼리 파라미터를 양쪽에서 일관되게 읽는 방법을 설명하고, 이런 코드를 isomorphic하다고 소개합니다. 환경별 처리를 추상화하면 SSR의 차이를 직접 다루는 부담을 줄이고 구현에 집중할 수 있다는 점을 강조합니다.
- SSR에서는 브라우저 전용 객체인 `window`나 `location`에 서버 렌더링 단계에서 접근하지 않도록 주의해야 합니다.
- Hydration이 성공하려면 서버가 만든 HTML과 클라이언트의 첫 렌더링 결과가 일치해야 합니다.
- 쿼리 파라미터처럼 서버와 클라이언트 양쪽에서 필요한 값은 Next.js의 `useRouter()`처럼 환경 차이를 추상화한 API를 활용할 수 있습니다.
- SSR에서 비동기 UI를 다룰 때는 React 버전에 따른 `Suspense`의 동작 범위를 확인해야 합니다.
비슷한 학습 자료
JavaScript 생태계를 이용해서 신사업 제품의 서버 개발하기 | 당근 SERVER 밋업 2회
당근테크 · YouTube
SSR환경에서의 Micro-Frontend 구현과 퍼포먼스 향상을 위한 캐시전략
DEVIEW 2023 · YouTube
App Router의 장점은 우리에게도 장점일까요?
이다용 · 토스 기술 블로그
SSR 서버 최적화로 비용 아끼기
정진우/문현경 · 토스 기술 블로그
브라우저용 번들링 플러그인, 직접 만들었어요
신지호 · 토스 기술 블로그
조금만 신경써서 초기 렌더링 빠르게 하기 (feat. JAM Stack)
한재엽 · 토스 기술 블로그