개요
JavaScript는 웹 브라우저에서 실행되는 유일한 프로그래밍 언어이자, 서버·모바일·데스크톱까지 영역을 확장한 세계에서 가장 널리 사용되는 언어입니다. 1995년 Netscape에서 10일 만에 탄생했지만, ECMAScript 표준화와 Node.js 등장으로 현대 소프트웨어 개발의 중심이 되었습니다.
- 출시: 1995년 (Brendan Eich, Netscape)
- 표준: ECMAScript (TC39 위원회)
- 타입: 동적 타입, 프로토타입 기반 객체지향
- 최신 표준: ES2025 (ECMAScript 2025)
- 패키지: npm (300만+ 패키지, 세계 최대)
핵심 특징
| 특징 | 설명 |
|---|---|
| 동적 타입 | 변수 타입을 선언하지 않음 (유연하지만 런타임 에러 가능) |
| 프로토타입 기반 | 클래스 대신 프로토타입 체인으로 상속 |
| 일급 함수 | 함수를 변수에 할당, 인자로 전달, 반환 가능 |
| 이벤트 루프 | 싱글 스레드 + 비동기 이벤트 루프 모델 |
| 클로저 | 외부 스코프 변수를 기억하는 함수 |
| async/await | Promise 기반 비동기 코드를 동기 스타일로 작성 |
런타임 환경
브라우저
모든 웹 브라우저에 내장된 기본 실행 환경:
- DOM 조작, 이벤트 처리, 네트워크 요청
- Web API:
fetch,localStorage,WebSocket,Canvas,WebGL
서버 사이드
| 런타임 | 엔진 | 특징 |
|---|---|---|
| Node.js | V8 (Chrome) | 가장 성숙한 서버 런타임, npm 생태계 |
| Deno | V8 | 보안 우선, TypeScript 네이티브, Rust 작성 |
| Bun | JavaScriptCore | 최고 속도, 올인원 (런타임+번들러+PM+테스트) |
TypeScript
JavaScript의 정적 타입 상위 집합(Superset):
- Microsoft 개발 (2012년)
- JavaScript + 타입 시스템 → 컴파일 타임 에러 검출
- 대규모 프로젝트에서 사실상 필수
.ts→.js로 트랜스파일하여 실행
// TypeScript 예시
interface User {
id: number;
name: string;
}
function greet(user: User): string {
return `Hello, ${user.name}`;
}주요 프레임워크 / 라이브러리
| 분류 | 도구 |
|---|---|
| 프론트엔드 | React, Vue, Svelte, Angular, SolidJS |
| 풀스택 | Next.js, Nuxt, SvelteKit, Remix |
| 백엔드 | Express, Fastify, Hono, NestJS |
| 모바일 | React Native, Expo, Ionic |
| 데스크톱 | Electron, Tauri |
| 테스트 | Vitest, Jest, Playwright, Cypress |
생태계 규모
| 지표 | 수치 |
|---|---|
| npm 패키지 | 300만+ (세계 최대) |
| GitHub 프로젝트 | 가장 많은 리포지토리 |
| 개발자 수 | 약 1,700만명 (가장 큰 커뮤니티) |
| Stack Overflow | 매년 가장 많이 사용되는 언어 1위 |
장단점
장점:
- 브라우저 유일 언어 → 프론트엔드 필수
- Node.js/Deno/Bun으로 풀스택 가능
- 가장 큰 생태계 (npm, 커뮤니티, 교육 자료)
- 진입 장벽이 낮음
단점:
- 동적 타입으로 인한 런타임 에러 (TypeScript로 보완)
this바인딩, 타입 변환 등 언어 특유의 함정- 싱글 스레드 (CPU 집약 작업에 부적합)
- 프레임워크 피로(Framework Fatigue)
관련 항목
- 프로그래밍 언어 비교
- React — 가장 인기 프론트엔드 라이브러리
- Bun — 고성능 JS 런타임
- Deno — 보안 중심 JS 런타임
- JavaScript 런타임 비교
- 웹 프레임워크