<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들을 도메인 주소를 통해 가져올 수 있다.