Node.js/Express 템플릿
// Express production template (ops-ready)
import express from "express";
import helmet from "helmet";
import rateLimit from "express-rate-limit";
import pino from "pino";
import * as Sentry from "@sentry/node";
import { NodeSDK } from "@opentelemetry/sdk-node";
import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node";
const app = express();
const logger = pino();
const otel = new NodeSDK({ instrumentations: [getNodeAutoInstrumentations()] });
otel.start();
Sentry.init({ dsn: process.env.SENTRY_DSN });
app.use(helmet());
app.use(rateLimit({ windowMs: 60 * 1000, max: 120 }));
app.use(Sentry.Handlers.requestHandler());
app.use(express.json({ limit: "1mb" }));
app.get("/health", (_req, res) => res.status(200).json({ ok: true }));
app.use((req, _res, next) => {
req.headers["x-trace-id"] ||= crypto.randomUUID();
next();
});
app.use(Sentry.Handlers.errorHandler());
app.listen(3000, () => logger.info("server started"));