~/VibeHandbook
$39

언어

developer.mozilla.org

JavaScript

무엇인가

JavaScript는 웹의 언어입니다 — 모든 브라우저에서 네이티브로 실행되는 유일한 언어이며, Node, Deno, Bun을 통해 완전한 서버 사이드 플랫폼이기도 합니다. 동적 타입이고, 이벤트 주도적이며, 어디에나 존재하여 세계에서 가장 널리 배포된 프로그래밍 언어입니다.

강점

  • 어디서나 실행됩니다: 브라우저, 서버, 엣지 함수, 심지어 임베디드까지.
  • 컴파일 단계가 없습니다; 편집하고 새로고침하면 즉각적인 피드백을 받습니다.
  • 거대한 npm 생태계와 방대한 커뮤니티.
  • promise와 async/await를 통한 일급 비동기.

트레이드오프

  • 정적 타입이 없습니다 — 많은 오류가 런타임에서만 드러납니다.
  • 역사적 결함: 느슨한 동등 비교(==), this 바인딩, 암묵적 형 변환.
  • 절제 없이는 콜백이나 의존성이 걷잡을 수 없이 늘어나기 쉽습니다.
  • 프론트엔드와 백엔드가 같은 언어라 아키텍처 경계가 흐려질 수 있습니다.

언제 선택하는가

빠른 스크립트, 작은 프로젝트, 학습, 프로토타입, 또는 빌드 단계를 추가할 가치가 없는 환경에는 순수 JavaScript를 선택하세요. 더 크거나 오래 유지될 무언가에는 대부분의 팀이 대신 TypeScript를 선택합니다 — 하지만 브라우저나 작은 Node 도구에서 무언가를 가장 빠르게 동작시키는 방법은 여전히 JS입니다.

바이브 코딩 적합성

AI 어시스턴트는 JavaScript를 유창하게 다루지만, 타입이 없다는 점 때문에 생성된 코드가 조용히 잘못된 데이터 형태를 가정할 수 있습니다. AI에게 최신 문법(const/let, 화살표 함수, async/await, 모듈)과 엄격한 동등 비교를 사용하고, 데이터 형태가 중요한 곳에는 방어적 검사나 JSDoc 주석을 추가하라고 지시하세요. 임포트가 올바르도록 환경을 명시하세요 — 브라우저인지 Node인지, ESM인지 CommonJS인지. 의존할 컴파일러가 없으므로, 동작을 직접 검증할 수 있도록 작고 실행 가능한 예제나 테스트를 요청하세요.

const fetchTitle = async (url) => {
  const res = await fetch(url);
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  const html = await res.text();
  return html.match(/<title>(.*?)<\/title>/i)?.[1] ?? "(no title)";
};

fetchTitle("https://example.com").then(console.log);