← 홈

🚂

⌘K
🤖
Claude Code AI 도구
🤗
Hugging Face AI 도구
🦜
LangChain AI 도구
🧠
Keras AI 도구
🦙
Ollama AI 도구
🐍
Python 프로그래밍 언어
🟨
JavaScript 프로그래밍 언어
🔷
TypeScript 프로그래밍 언어
⚛️
React 프로그래밍 언어
🐹
Go 프로그래밍 언어
🦀
Rust 프로그래밍 언어
📊
MATLAB 프로그래밍 언어
🗄️
SQL 프로그래밍 언어
⚙️
C/C++ 프로그래밍 언어
Java 프로그래밍 언어
🟣
C# 프로그래밍 언어
🍎
Swift 프로그래밍 언어
🟠
Kotlin 프로그래밍 언어
Next.js 프로그래밍 언어
💚
Vue.js 프로그래밍 언어
🔥
Svelte 프로그래밍 언어
🎨
Tailwind CSS 프로그래밍 언어
💚
Node.js 프로그래밍 언어
🌐
HTML 프로그래밍 언어
🎨
CSS/SCSS 프로그래밍 언어
🐘
PHP 프로그래밍 언어
💎
Ruby 프로그래밍 언어
🔴
Scala 프로그래밍 언어
📊
R 프로그래밍 언어
🎯
Dart 프로그래밍 언어
💧
Elixir 프로그래밍 언어
🌙
Lua 프로그래밍 언어
🐪
Perl 프로그래밍 언어
🅰️
Angular 프로그래밍 언어
🚂
Express.js 프로그래밍 언어
🐱
NestJS 프로그래밍 언어
🛤️
Ruby on Rails 프로그래밍 언어
◼️
GraphQL 프로그래밍 언어
🟪
Haskell 프로그래밍 언어
💚
Nuxt.js 프로그래밍 언어
🔷
SolidJS 프로그래밍 언어
htmx 프로그래밍 언어
💻
VS Code 개발 도구
🧠
PyCharm 개발 도구
📓
Jupyter 개발 도구
🧠
IntelliJ IDEA 개발 도구
💚
Neovim 개발 도구
🔮
Emacs 개발 도구
🔀
Git DevOps & CLI
🐳
Docker DevOps & CLI
☸️
Kubernetes DevOps & CLI
☁️
AWS CLI DevOps & CLI
🔄
GitHub Actions DevOps & CLI
🐧
Linux 명령어 DevOps & CLI
💻
Bash 스크립팅 DevOps & CLI
🌐
Nginx DevOps & CLI
📝
Vim DevOps & CLI
🔨
Makefile DevOps & CLI
🧪
Pytest DevOps & CLI
🪟
Windows DevOps & CLI
📦
패키지 매니저 DevOps & CLI
🍎
macOS DevOps & CLI
🏗️
Terraform DevOps & CLI
🔧
Ansible DevOps & CLI
Helm DevOps & CLI
🔨
Jenkins DevOps & CLI
🔥
Prometheus DevOps & CLI
📊
Grafana DevOps & CLI
💻
Zsh DevOps & CLI
🐟
Fish Shell DevOps & CLI
💙
PowerShell DevOps & CLI
🔄
Argo CD DevOps & CLI
🔀
Traefik DevOps & CLI
☁️
Azure CLI DevOps & CLI
☁️
Google Cloud CLI DevOps & CLI
📟
tmux DevOps & CLI
🔧
jq DevOps & CLI
✂️
sed DevOps & CLI
📊
awk DevOps & CLI
🌊
Apache Airflow DevOps & CLI
🔢
NumPy 데이터베이스 & 데이터
🐼
Pandas 데이터베이스 & 데이터
🔥
PyTorch 데이터베이스 & 데이터
🧠
TensorFlow 데이터베이스 & 데이터
📈
Matplotlib 데이터베이스 & 데이터
🐘
PostgreSQL 데이터베이스 & 데이터
🐬
MySQL 데이터베이스 & 데이터
🍃
MongoDB 데이터베이스 & 데이터
🔴
Redis 데이터베이스 & 데이터
🔍
Elasticsearch 데이터베이스 & 데이터
🤖
Scikit-learn 데이터베이스 & 데이터
👁️
OpenCV 데이터베이스 & 데이터
Apache Spark 데이터베이스 & 데이터
🪶
SQLite 데이터베이스 & 데이터
Supabase 데이터베이스 & 데이터
🔵
Neo4j 데이터베이스 & 데이터
📨
Apache Kafka 데이터베이스 & 데이터
🐰
RabbitMQ 데이터베이스 & 데이터
🔤
Regex 유틸리티
📝
Markdown 유틸리티
📄
LaTeX 유틸리티
🔐
SSH & GPG 유틸리티
🌐
curl & HTTP 유틸리티
📜
reStructuredText 유틸리티
🚀
Postman 유틸리티
🎬
FFmpeg 유틸리티
🖼️
ImageMagick 유틸리티
🔍
ripgrep 유틸리티
🔍
fzf 유틸리티
📗
Microsoft Excel 오피스 애플리케이션
📘
Microsoft Word 오피스 애플리케이션
📙
Microsoft PowerPoint 오피스 애플리케이션
📝
한컴 한글 한컴오피스
📽️
한컴 한쇼 한컴오피스
📊
한컴 한셀 한컴오피스
📄
Google 문서 Google Workspace
📊
Google 스프레드시트 Google Workspace
📽️
Google 프레젠테이션 Google Workspace
🔌
Cadence Virtuoso EDA & 하드웨어
⚙️
Synopsys EDA EDA & 하드웨어
💎
Verilog & VHDL EDA & 하드웨어
LTSpice EDA & 하드웨어
🔧
KiCad EDA & 하드웨어
📝
Notion 생산성 도구
💎
Obsidian 생산성 도구
💬
Slack 생산성 도구
🎮
Discord 생산성 도구
🎨
Figma 디자인 도구
📘
Confluence Atlassian
📋
Jira Atlassian
🃏
Jest 테스팅
Vitest 테스팅
🎭
Playwright 테스팅
🌲
Cypress 테스팅
🌐
Selenium 테스팅
💙
Flutter 모바일 개발
📱
React Native 모바일 개발
🍎
SwiftUI 모바일 개발
📱
Expo 모바일 개발
🐍
Django 웹 프레임워크
FastAPI 웹 프레임워크
🌶️
Flask 웹 프레임워크
🍃
Spring Boot 웹 프레임워크
🍸
Gin 웹 프레임워크
Vite 빌드 도구
📦
Webpack 빌드 도구
esbuild 빌드 도구
🐘
Gradle 빌드 도구
🪶
Maven 빌드 도구
🔧
CMake 빌드 도구
🎮
Unity 게임 개발
🤖
Godot 게임 개발
🔌
Arduino 임베디드 & IoT
🔍
Nmap 보안
🐕
Datadog 모니터링
📖
Swagger/OpenAPI 문서화
검색 결과가 없습니다
EN KO

기초

시작하기

설치
npm install express
기본 서버
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});
ES 모듈
import express from 'express';
const app = express();

응답 메서드

텍스트 전송
res.send('Hello');
JSON 전송
res.json({ message: 'Hello' });
상태 코드
res.status(404).send('Not Found');
res.status(201).json({ id: 1 });
파일 전송
res.sendFile('/path/to/file.html');
다운로드
res.download('/path/to/file.pdf');
리다이렉트
res.redirect('/new-url');
res.redirect(301, '/new-url');
뷰 렌더링
res.render('index', { title: 'Home' });

라우팅

HTTP 메서드

GET
app.get('/users', (req, res) => {
  res.json(users);
});
POST
app.post('/users', (req, res) => {
  const user = req.body;
  res.status(201).json(user);
});
PUT
app.put('/users/:id', (req, res) => {
  // Update user
});
PATCH
app.patch('/users/:id', (req, res) => {
  // Partial update
});
DELETE
app.delete('/users/:id', (req, res) => {
  res.status(204).send();
});
모든 메서드
app.all('/api/*', (req, res, next) => {
  // Handle all methods
  next();
});

라우트 파라미터

경로 파라미터
app.get('/users/:id', (req, res) => {
  const id = req.params.id;
  res.json({ id });
});
다중 파라미터
app.get('/users/:userId/posts/:postId', (req, res) => {
  const { userId, postId } = req.params;
});
쿼리 문자열
// GET /search?q=express&page=2
app.get('/search', (req, res) => {
  const { q, page } = req.query;
});
선택적 파라미터
app.get('/users/:id?', (req, res) => {
  // id is optional
});
정규식 파라미터
app.get('/users/:id(\\d+)', (req, res) => {
  // id must be digits
});

라우터

라우터 생성
const router = express.Router();

router.get('/', (req, res) => {
  res.json({ users: [] });
});

router.get('/:id', (req, res) => {
  res.json({ id: req.params.id });
});

module.exports = router;
라우터 마운트
const usersRouter = require('./routes/users');
app.use('/users', usersRouter);
라우터 미들웨어
router.use((req, res, next) => {
  // Runs for all routes in this router
  next();
});

미들웨어

내장 미들웨어

JSON 바디 파서
app.use(express.json());
URL-encoded
app.use(express.urlencoded({ extended: true }));
정적 파일
app.use(express.static('public'));
app.use('/assets', express.static('public'));

커스텀 미들웨어

애플리케이션 레벨
app.use((req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next();
});
라우트 레벨
const auth = (req, res, next) => {
  if (req.headers.authorization) {
    next();
  } else {
    res.status(401).json({ error: 'Unauthorized' });
  }
};

app.get('/protected', auth, (req, res) => {
  res.send('Secret data');
});
다중 미들웨어
app.get('/', middleware1, middleware2, (req, res) => {
  res.send('Hello');
});
비동기 미들웨어
const asyncHandler = fn => (req, res, next) => {
  Promise.resolve(fn(req, res, next)).catch(next);
};

app.get('/', asyncHandler(async (req, res) => {
  const data = await fetchData();
  res.json(data);
}));

인기 미들웨어

CORS
const cors = require('cors');
app.use(cors());
app.use(cors({ origin: 'http://example.com' }));
Morgan (로깅)
const morgan = require('morgan');
app.use(morgan('dev'));
Helmet (보안)
const helmet = require('helmet');
app.use(helmet());
압축
const compression = require('compression');
app.use(compression());
쿠키 파서
const cookieParser = require('cookie-parser');
app.use(cookieParser());

요청 객체

요청 속성

본문
req.body  // Parsed body (with body-parser)
파라미터
req.params  // Route parameters
쿼리
req.query  // Query string parameters
헤더
req.headers
req.get('Content-Type')
req.header('Authorization')
쿠키
req.cookies  // With cookie-parser
메서드
req.method  // GET, POST, etc.
URL/경로
req.url
req.path
req.originalUrl
IP
req.ip
req.ips  // With trust proxy
프로토콜
req.protocol  // http or https
호스트명
req.hostname

에러 처리

에러 처리

에러 미들웨어
// Must have 4 parameters
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).json({ error: 'Something went wrong' });
});
에러 발생
app.get('/error', (req, res, next) => {
  const error = new Error('Not Found');
  error.status = 404;
  next(error);
});
비동기 에러
app.get('/', async (req, res, next) => {
  try {
    const data = await fetchData();
    res.json(data);
  } catch (err) {
    next(err);
  }
});
404 핸들러
// Place after all routes
app.use((req, res) => {
  res.status(404).json({ error: 'Not Found' });
});

템플릿 엔진

뷰 엔진

뷰 엔진 설정
app.set('view engine', 'ejs');
app.set('views', './views');
뷰 렌더링
app.get('/', (req, res) => {
  res.render('index', { title: 'Home', user: req.user });
});
EJS 템플릿
<!-- views/index.ejs -->
<h1><%= title %></h1>
<% if (user) { %>
  <p>Welcome, <%= user.name %></p>
<% } %>
Pug 템플릿
//- views/index.pug
h1= title
if user
  p Welcome, #{user.name}

세션과 인증

세션

세션 설정
const session = require('express-session');

app.use(session({
  secret: 'your-secret-key',
  resave: false,
  saveUninitialized: false,
  cookie: { secure: true, maxAge: 3600000 }
}));
세션 사용
// Set
req.session.userId = user.id;

// Get
const userId = req.session.userId;

// Destroy
req.session.destroy();

JWT 인증

토큰 생성
const jwt = require('jsonwebtoken');

const token = jwt.sign(
  { userId: user.id },
  process.env.JWT_SECRET,
  { expiresIn: '1h' }
);
토큰 검증
const authMiddleware = (req, res, next) => {
  const token = req.headers.authorization?.split(' ')[1];
  try {
    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    req.user = decoded;
    next();
  } catch (err) {
    res.status(401).json({ error: 'Invalid token' });
  }
};