commonJS 방식
강의에서 Express 모듈을 사용할때 commonJS 방식인 require로 가져오는데 Node.js 환경에서 ESM 방식으로 할 수는 없는 걸까요?
Answer 1
1
안녕하세요 TAESUN님, 질문 주셔서 감사합니다!
강의에서는 Node.js의 가장 전통적이고 널리 쓰이는 방식인 CommonJS를 기준으로 require 문법을 사용하여 진행했지만, 말씀하신 대로 최신 Node.js 환경에서는 ESM(ECMAScript Modules) 방식을 공식적으로 지원하고 있기 때문에 설정만 조금 바꿔주면 브라우저에서 쓰던 import와 export 문법을 그대로 사용할 수 있습니다. 이를 프로젝트에 적용하기 위해서는 가장 간단한 방법으로 프로젝트의 루트에 있는 package.json 파일 최상단 객체에 "type": "module"이라는 속성을 한 줄 추가해주시면 Node.js가 해당 프로젝트를 ESM 환경으로 인식하게 됩니다.
// package.json
{
"type": "module",
// ... 나머지 설정들
}
이렇게 설정을 마치셨다면 이제 기존 강의에서 작성했던 const express = require('express')와 같은 코드를 import express from 'express'와 같은 모던 자바스크립트 형태로 변경하여 작성하실 수 있습니다.
import express from 'express';
const app = express();
다만 Express로 서버를 구축할 때 주의하셔야 할 중요한 차이점이 하나 있는데, CommonJS 환경에서는 전역 변수처럼 자유롭게 사용할 수 있었던 __dirname과 __filename 변수가 ESM 환경에서는 기본적으로 제공되지 않는다는 점입니다. 만약 강의 내용 중 정적 파일 제공이나 경로 설정을 위해 이 변수들이 필요한 경우에는 Node.js 내장 모듈인 url과 path를 활용하여 다음과 같이 직접 변수를 선언해주셔야 기존과 동일하게 경로를 제어할 수 있습니다.
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
// 이후 app.use(express.static(path.join(__dirname, 'public'))) 등을 사용 가능
이러한 몇 가지 설정과 변수 선언 방식의 차이만 인지하고 계신다면 ESM 방식으로도 강의의 모든 기능을 문제없이 구현하실 수 있으니, TAESUN님께서 더 익숙하고 선호하시는 방식으로 코드를 작성해보시는 것도 훌륭한 학습 방법이 될 것입니다.
참고해주세요!
3강 질문
0
18
1
스프링부트 서버 에러나요
0
17
1
강의 듣는 중인데,
0
23
1
36강 오탈자가 있는 거 같습니다.
0
20
2
Service Create/Update Record 운용과 Delete Record 미운용의 차이 질문
0
18
1
2강 nodejs 3단계 설명 질문
0
33
1
useEffect와 lifecycle문의
0
26
2
Sequence 관련 질문
1
32
2
이미지 처리 라우트 관련 문의
0
67
2
강의랑 강의 자료랑 내용이 다른 것 같아요
0
77
1
로그인과 로그아웃 처리 강의 2:00 질문 드려요
0
71
2
27과목 ejs로 todo list 만들기에서 todo를 여러 개 항목 만들었을 때
0
68
2
Express 에러 처리 관련 질문 드려요.
0
82
2
EJS 관련 질문드려요
0
85
2
41 번 강좌 이미 있는 가입자 존재하는 경우에서..
0
58
2
jwt
0
59
2
정적 파일 직접 구현하기 강의 수강 후 궁금한 점 질문드립니다!
0
92
2
res.writeHead 질문
0
64
1
readFileSync
0
100
1
ejs 와 어떤 개발언어로 조합해서 사용했을때 성능이 좋을까요?
0
96
1
404, 500 에러 처리 외에 특정 개발 구문에서 에러 발생했을때 찾는 방법이 있을까요?
0
90
1
테스트시 포스트맨 외 테스트 할수 있는 방법이 있을까요?
1
67
1
보안에 취약 한가요?
0
57
1
json 대신 로그인, 회원가입 일때 db 연결 및 data 사용하려면 어떻게 하나요?
0
69
1

