OPEN HYPER STEP
← 목록으로 (JavaScript)
JS · 3 / 34
js
CHAPTER 3 / 34
읽기 약 2
SYNTAX

순수 JavaScript로 만드는 대표기업 서비스


핵심 개념

Google·Instagram·Notion·Slack·Spotify가 실제로 사용하는 JS 기법과 기초→중급→심화 프롬프트를 사례별로 분석한다.

본문

JavaScript는 단순한 스크립트 언어가 아닙니다. Google·Instagram·Notion·Slack·Spotify 같은 세계적 기업들이 JS로 어떤 핵심 기능을 만드는지 살펴보고, 같은 기법을 적용하는 AI 프롬프트를 기초부터 심화까지 제공합니다.


1. Google — 검색 자동완성 & 실시간 제안

사용 기술: debounce, fetch, DOM 동적 생성, AbortController

Google 검색창에 한 글자만 입력해도 즉시 후보가 뜹니다. 매 키 입력마다 요청하면 서버 부하가 폭발하므로 debounce로 입력이 멈춘 뒤에만 호출합니다.

🟢 기초 프롬프트

📋 코드 (3줄)
input 이벤트로 사용자가 타이핑할 때마다
현재 입력값을 콘솔에 출력하는 코드를 만들어줘.
event.target.value를 사용한 예시로.

🟡 중급 프롬프트

📋 코드 (5줄)
Google처럼 debounce + fetch로 자동완성 검색창을 만들어줘.
- 250ms debounce
- /api/search?q=... 호출
- 결과 5개를 ul/li로 표시
- 이전 요청은 AbortController로 취소

🔵 심화 프롬프트

📋 코드 (4줄)
Google 수준의 검색 자동완성 시스템을 설계해줘.
포함: LRU 캐싱 / 결과 하이라이트 / 키보드 ↑↓ 네비게이션 /
접근성(aria-live, role='combobox') / 모바일 가상 키보드 대응 /
오프라인 폴백.

2. Instagram — 무한 스크롤 & 이미지 레이지 로딩

사용 기술: IntersectionObserver, lazy loading, 가상 스크롤, srcset

Instagram 피드는 끝이 없습니다. 화면에 안 보이는 이미지는 로드하지 않고, 끝에 가까워지면 다음 페이지를 미리 가져옵니다.

🟢 기초

📋 코드 (2줄)
<img loading='lazy'>를 어떻게 쓰는지
예시 코드와 동작 원리를 알려줘.

🟡 중급

📋 코드 (3줄)
IntersectionObserver로 무한 스크롤을 만들어줘.
페이지 끝 200px 전에 다음 페이지를 fetch.
중복 호출 방지 + 로딩 인디케이터 포함.

🔵 심화

📋 코드 (3줄)
10만 개 아이템도 부드러운 가상 스크롤(virtual list)을 설계해줘.
포함: visible window 계산 / item recycling /
resize 대응 / 키보드 PageDown 점프 / 접근성.

3. Notion — 실시간 에디터 & 드래그 앤 드롭

사용 기술: contentEditable, Selection API, Drag and Drop API, DOM diff

Notion 블록은 키보드로 입력하고 마우스로 순서를 바꿉니다. 텍스트 영역과 자유 편집의 경계를 허무는 핵심 API들이 활약합니다.

🟢 기초

📋 코드 (2줄)
contentEditable 속성이 뭔지 알려줘.
div에 적용하는 예시 + textarea와의 차이를 비교해줘.

🟡 중급

📋 코드 (3줄)
Selection API로 현재 커서 위치를 가져오고
선택 영역을 굵게 처리하는 함수를 만들어줘.
range.surroundContents 활용.

🔵 심화

📋 코드 (4줄)
Notion 같은 블록 에디터의 핵심 자료 구조를 설계해줘.
포함: 블록 트리 / undo/redo (Command 패턴) /
협업 충돌 해결(CRDT 개념) / 마크다운 단축키 /
드래그로 블록 순서 변경.

4. Slack — WebSocket 실시간 채팅

사용 기술: WebSocket, 이벤트 기반 아키텍처, 메시지 큐, 재연결 로직

Slack은 메시지를 보낸 즉시 다른 사용자에게 도착해야 합니다. HTTP 폴링이 아닌 WebSocket으로 양방향 연결을 유지합니다.

🟢 기초

📋 코드 (3줄)
WebSocket이 HTTP와 어떻게 다른지
비유 + 다이어그램 + 코드 예시로 설명해줘.
new WebSocket(url) 기본 사용법도.

🟡 중급

📋 코드 (3줄)
Slack 같은 실시간 채팅 클라이언트를 만들어줘.
메시지 송수신 + 끊겼을 때 자동 재연결 +
오프라인 큐(전송 대기) + 타이핑 인디케이터.

🔵 심화

📋 코드 (4줄)
1만 명 동시 접속 채팅의 클라이언트 아키텍처를 설계해줘.
포함: 채널별 구독 관리 / 메시지 순서 보장 /
back-pressure / 메모리 관리(메시지 가지치기) /
네트워크 품질에 따른 quality-of-service.

5. Spotify — 오디오 재생 & 시각화

사용 기술: Web Audio API, Canvas, requestAnimationFrame, MediaSession API

Spotify는 오디오를 재생할 뿐 아니라 비주얼라이저, 백그라운드 잠금화면 컨트롤, EQ 같은 기능을 모두 브라우저 안에서 처리합니다.

🟢 기초

📋 코드 (2줄)
HTML <audio> 태그의 기본 사용법과
play/pause/volume을 JS로 제어하는 예시를 보여줘.

🟡 중급

📋 코드 (3줄)
Web Audio API로 오디오 비주얼라이저를 만들어줘.
AnalyserNode로 주파수 데이터를 받아
Canvas에 막대 그래프로 그려줘. requestAnimationFrame 사용.

🔵 심화

📋 코드 (4줄)
Spotify 수준의 오디오 플레이어를 설계해줘.
포함: 게이플리스 재생 / 크로스페이드 /
3밴드 EQ / MediaSession으로 잠금화면 제어 /
Service Worker로 오프라인 캐시.

💡 기업 JS의 공통 원칙

원칙설명기업
입력 제어debounce/throttle로 호출 빈도 제한Google
지연 로딩보이는 것만 로드Instagram
양방향 통신WebSocket으로 실시간성 확보Slack
비주얼 처리Canvas + RAF로 60fps 유지Spotify
풍부한 편집Selection/Range API 활용Notion

💻 5가지 기법 통합 데모

JAVASCRIPT📋 코드 (57줄)
// 대표기업 JS 기법 5가지 — 한 파일 데모

// 1. Google: debounce 자동완성
function debounce(fn, ms = 250) {
  let t;
  return (...a) => { clearTimeout(t); t = setTimeout(() => fn(...a), ms); };
}
const search = debounce(async (q) => {
  const res = await fetch(`/api/search?q=${encodeURIComponent(q)}`);
  console.log(await res.json());
}, 250);

// 2. Instagram: IntersectionObserver 무한 스크롤
const sentinel = document.querySelector('#sentinel');
const io = new IntersectionObserver((entries) => {
  if (entries[0].isIntersecting) loadNextPage();
}, { rootMargin: '200px' });
if (sentinel) io.observe(sentinel);

// 3. Notion: contentEditable + Selection API
function applyBold() {
  const sel = window.getSelection();
  if (!sel?.rangeCount) return;
  const range = sel.getRangeAt(0);
  const strong = document.createElement('strong');
  range.surroundContents(strong);
}

// 4. Slack: WebSocket + 자동 재연결
function connect(url, onMessage) {
  let ws, retry = 0;
  function open() {
    ws = new WebSocket(url);
    ws.onmessage = (e) => onMessage(JSON.parse(e.data));
    ws.onclose = () => setTimeout(open, Math.min(1000 * 2 ** retry++, 30000));
  }
  open();
  return { send: (m) => ws?.readyState === 1 && ws.send(JSON.stringify(m)) };
}

// 5. Spotify: Web Audio + Canvas 시각화
async function visualize(audioEl, canvas) {
  const ctx = new AudioContext();
  const src = ctx.createMediaElementSource(audioEl);
  const analyser = ctx.createAnalyser();
  src.connect(analyser); analyser.connect(ctx.destination);
  const data = new Uint8Array(analyser.frequencyBinCount);
  const c = canvas.getContext('2d');
  (function frame() {
    analyser.getByteFrequencyData(data);
    c.clearRect(0, 0, canvas.width, canvas.height);
    data.forEach((v, i) => c.fillRect(i * 2, canvas.height - v, 2, v));
    requestAnimationFrame(frame);
  })();
}

// 💡 이 5가지 패턴만 알면 대부분의 인터랙티브 JS UI를 만들 수 있습니다.

AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

Google, Instagram, Notion, Slack의 JS 패턴에서
공통으로 쓰이는 비동기 처리·DOM 조작·상태 관리 기법을
초보자도 이해할 수 있게 분석해줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

순수 JS로 만든 실전 서비스 사례를
인터랙션/SPA/오프라인 3유형 × 3개씩
실제 회사 이름과 함께 보여줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

Google·Instagram·Notion·Slack·Spotify의 클라이언트 JS를
번들 크기, 비동기 패턴, 메모리 관리 측면에서
비교 리포트로 만들어줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년에 React/Vue 없이 순수 JS로 SPA를 만드는 회사가
아직 있는지, 어떤 케이스가 합리적인지 솔직히 말해줘.

⭐ 이것만 기억하세요
순수 JavaScript로 만드는 대표기업 서비스 이 3가지만 확실히 잡으세요
1.Google(debounce)·Instagram(IntersectionObserver)·Notion(contentEditable)·Slack(WebSocket)·Spotify(Web Audio) — 세계적 기업의 JS 기법
2.각 사례마다 기초→중급→심화 3단계 프롬프트로 같은 기법을 직접 구현 가능
3.다음 챕터에서 AI 프롬프트 11개로 JS 학습을 200% 가속


공유하기
진행도 3 / 34