React로 만드는 대표기업 서비스
Meta·Airbnb·Netflix·Discord·Figma가 실제로 사용하는 React 기법과 기초→중급→심화 프롬프트를 사례별로 분석한다.
React는 단순한 UI 라이브러리가 아닙니다. Meta·Airbnb·Netflix·Discord·Figma 같은 세계적 기업이 어떤 핵심 기법으로 복잡한 UI를 만드는지 살펴보고, 같은 기법을 적용하는 AI 프롬프트를 기초부터 심화까지 제공합니다.
1. Facebook/Meta — 뉴스피드 (가상 DOM, 무한 스크롤)
사용 기술: Virtual DOM, React.memo, IntersectionObserver, Suspense
Meta는 React를 직접 만든 회사입니다. 수억 사용자의 뉴스피드를 매끄럽게 보여주기 위해 Virtual DOM 차이 계산과 메모이제이션을 풀어 사용합니다.
🟢 기초
React의 Virtual DOM이 무엇인지
실제 DOM과 비교한 다이어그램 + 코드 예시로 알려줘.🟡 중급
IntersectionObserver + useState로
뉴스피드 무한 스크롤 컴포넌트를 만들어줘.
중복 호출 방지 + 로딩 인디케이터 포함.🔵 심화
10만 개 포스트도 부드러운 가상 스크롤(react-virtuoso 없이)을
직접 구현하는 컴포넌트를 설계해줘.
visible window + recycle + measure 포함.2. Airbnb — 검색 + 필터 + 지도 (상태 관리, 컴포넌트 합성)
사용 기술: URL 상태 동기화, 컴포넌트 합성(Compound Component), Context
Airbnb 검색 페이지는 필터·지도·결과 리스트가 동시에 변합니다. URL이 진실의 소스(SSOT)가 되어 모든 컴포넌트가 동일 상태를 공유합니다.
🟢 기초
useState로 검색어 입력 + 결과 필터를 만들어줘.
간단한 배열에서 includes로 필터링.🟡 중급
React Router의 useSearchParams로 URL 쿼리스트링과
필터 상태를 동기화해줘.
새로고침해도 필터 유지 + 뒤로가기 동작.🔵 심화
Airbnb 같은 검색 페이지를 설계해줘.
Compound Component 패턴(Search.Filter, Search.Map, Search.Results) +
URL을 SSOT로 + 지연 로딩 + 페이지네이션 + 접근성.3. Netflix — 미디어 카드 캐러셀 (성능 최적화, lazy loading)
사용 기술: lazy/Suspense, prefetch, scroll virtualization, image priority
Netflix는 수많은 영상 카드를 부드럽게 스크롤합니다. 보이는 것만 렌더링하고 다음 카드는 미리 가져오는 전략이 핵심입니다.
🟢 기초
React.lazy + Suspense로 코드 분할하는 예시를 만들어줘.
어떤 라우트를 분할할지 추천도.🟡 중급
Netflix 같은 가로 스크롤 캐러셀을 만들어줘.
scroll-snap-type + prev/next 버튼 +
키보드 ←→ 네비게이션 + 이미지 lazy.🔵 심화
Netflix 수준의 미디어 페이지 성능을 설계해줘.
포함: route prefetch / image priority / Suspense streaming /
useDeferredValue로 입력 우선순위 / Web Vitals 모니터링.4. Discord — 실시간 채팅 UI (WebSocket + 상태 동기화)
사용 기술: WebSocket, useReducer, Optimistic UI, 가상 리스트
Discord 채팅은 실시간 + 수만 메시지 + 부드러운 스크롤이 동시에 필요합니다.
🟢 기초
useState로 메시지 리스트와 입력창을 만들어줘.
Enter 키로 메시지 추가 + 스크롤 자동 하단.🟡 중급
useReducer로 메시지 상태(추가/수정/삭제/낙관적 업데이트)를
관리하는 채팅 UI를 만들어줘.
WebSocket 연결 모킹 포함.🔵 심화
Discord 수준의 채팅 UI를 설계해줘.
포함: 채널 전환 시 상태 격리 / 가상 리스트 /
타이핑 인디케이터 / 끊김 시 큐잉 + 재전송 / 접근성.5. Figma — 복잡한 UI (Canvas + React 결합)
사용 기술: Canvas, useRef, requestAnimationFrame, 명령형 핸들
Figma는 React로 패널·툴바를 그리고, 캔버스 영역만 직접 렌더링하는 하이브리드 구조입니다.
🟢 기초
useRef로 canvas 요소에 접근하고
사각형을 그리는 React 컴포넌트를 만들어줘.🟡 중급
React 컴포넌트로 자유롭게 그리기 도구를 만들어줘.
useRef + requestAnimationFrame +
포인터 이벤트 + 색상/굵기 툴바.🔵 심화
Figma 같은 캔버스 + 패널 하이브리드 아키텍처를 설계해줘.
React는 패널·UI / Canvas는 직접 렌더 /
명령형 핸들(useImperativeHandle) / 성능 / 협업.💡 기업 React의 공통 원칙
| 원칙 | 설명 | 기업 |
|---|---|---|
| 가상화 | 보이는 것만 렌더링 | Meta, Discord |
| URL이 SSOT | 새로고침/공유 가능한 상태 | Airbnb |
| 코드 분할 | route 단위 lazy | Netflix |
| 명령형 탈출구 | useRef/useImperativeHandle | Figma |
| 낙관적 UI | 응답 전 미리 반영 | Discord |
💻 5가지 기법 미니 데모
// 대표기업 React 기법 5가지 — 미니 데모
import { useState, useEffect, useRef, useReducer, lazy, Suspense } from 'react';
// 1. Meta: 무한 스크롤
function Feed({ fetchPage }) {
const [posts, setPosts] = useState([]); const [page, setPage] = useState(1);
const sentinel = useRef(null);
useEffect(() => {
const io = new IntersectionObserver((es) => es[0].isIntersecting && setPage(p => p + 1), { rootMargin: '200px' });
sentinel.current && io.observe(sentinel.current);
return () => io.disconnect();
}, []);
useEffect(() => { fetchPage(page).then(p => setPosts(prev => [...prev, ...p])); }, [page, fetchPage]);
return (<>{posts.map(p => <article key={p.id}>{p.title}</article>)}<div ref={sentinel} /></>);
}
// 2. Airbnb: URL 상태 동기화 (가상 useSearchParams)
function useUrlState(key) {
const [v, setV] = useState(() => new URLSearchParams(location.search).get(key) || '');
useEffect(() => {
const sp = new URLSearchParams(location.search); sp.set(key, v);
history.replaceState(null, '', '?' + sp.toString());
}, [v, key]);
return [v, setV];
}
// 3. Netflix: 코드 분할
const Profile = lazy(() => import('./Profile'));
function App() { return <Suspense fallback='로딩...'><Profile /></Suspense>; }
// 4. Discord: useReducer + 낙관적 UI
function chatReducer(state, action) {
if (action.type === 'add') return [...state, action.msg];
if (action.type === 'confirm') return state.map(m => m.tempId === action.tempId ? action.msg : m);
return state;
}
function Chat() {
const [messages, dispatch] = useReducer(chatReducer, []);
function send(text) {
const tempId = Date.now();
dispatch({ type: 'add', msg: { tempId, text, pending: true } }); // 낙관적
fetch('/api/messages', { method: 'POST', body: JSON.stringify({ text }) })
.then(r => r.json()).then(msg => dispatch({ type: 'confirm', tempId, msg }));
}
return <button onClick={() => send('hi')}>Send</button>;
}
// 5. Figma: useRef + Canvas
function Sketch() {
const ref = useRef(null);
useEffect(() => {
const ctx = ref.current?.getContext('2d');
ctx && ctx.fillRect(20, 20, 100, 100);
}, []);
return <canvas ref={ref} width={400} height={300} />;
}무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6
Meta, Airbnb, Netflix, Discord, Figma의 React 코드 패턴에서 공통적으로 쓰이는 컴포넌트 설계·상태 관리 기법을 초보자도 따라 할 수 있게 분석해줘.
무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro
React로 만든 실전 서비스 사례를 SPA/SaaS/디자인시스템 3유형 × 3개씩 실제 회사 이름과 함께 보여줘.
무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro
Meta·Airbnb·Netflix·Discord·Figma의 React 앱을 번들 크기, 렌더링 전략, 상태 관리 측면에서 비교 리포트로 만들어줘.
무료: Grok 4.1 / SuperGrok $30/mo
2026년 React 18·19 시대에 Netflix·Airbnb 같은 회사가 여전히 React를 쓰는 이유와 Next.js·Remix로 옮기는 트렌드를 솔직히 알려줘.