<aside> ✅ Node.js는 서버 사이드 애플리케이션을 개발하기 위한 JavaScript 런타임 환경입니다. 이는 V8 Javascript위에 구축되어 비동기 이벤트 주도 아키텍처를 제공하여, 입출력이 빈번한 애플리케이션에 적합합니다. 주요 장점과 간단한 코드 예시를 통해 이를 더 자세히 설명하겠습니다.
</aside>
Node.js는 비동기 이벤트 주도 아키텍처를 사용하여, I/O 작업이 블로킹 없이 실행될 수 있도록 합니다. 이는 동시성을 높이고 성능을 개선합니다.
프론트엔드와 백엔드 모두 Javascript를 사용하기 때문에, 개발자는 동일한 언어로 전체 스택을 개발할 수 있습니다.
npm은 세계에서 가장 큰 소프트웨어 레지스트리이며, 수많은 오픈 소스 라이브러리와 모듈을 제공합니다.
Google의 V8 Javascript 엔진 위에 구축된 Node.js는 코드를 빠르게 실행 할 수 있도록 최적화 되어 있습니다.
Node.js는 마이크로 서비스 기반의 아키텍처 개발에 적합하며, 이는 대규모 애플리케이션의 유지보수와 확장을 용이하게 합니다.
app.use(express.static(path.join(__dirname, "public")));
app.use(cors());
app.use("/", indexRouter);
app.use("/message", messageRouter);
app.use(
"/public/",
express.static("public/", {
setHeaders: function (res, path) {
res.setHeader("Cache-Control", "public, max-age=86400");
},
}),
);
app.use(function (req, res, next) {
next(createError(404));
});
const io = new Server(isDev ? httpServer : httpsServer, {
cors: {
origin: "*",
},
path: "/socket.io",
});
let client;
db.connect()
.then((connectedClient) => {
console.log("DB Conn success");
client = connectedClient;
return client.query("LISTEN message");
})
.then(() => {
client.on("notification", (msg) => {
console.log("message listen", msg);
io.emit("message", true);
});
io.on("connection", (socket) => {
console.log("ws connected");
socket.on("disconnect", () => {
console.log("ws disconnected");
});
socket.on("message", (msg) => {
console.log(">>>>>", msg);
});
});
})
.catch((err) => {
console.error("Database connection error:", err);
});
app.use(function (req, res, next) {
next(createError(404));
});
// error handler
app.use(function (err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get("env") === "development" ? err : {};
// render the error page
res.status(err.status || 500);
res.render("error");
});
module.exports = app;
app.js의 코드 일부분이다. /public 이라는 정적 경로를 허용하면서 이미지, 비디오 등 assets들을 도메인 주소를 통해 가져올 수 있다.