Home Static 모듈
Post
X

Static 모듈

Static에 대해 알아보자.


Static

Static 모듈은 Express에서 제공하는 기본 미들웨어로 html, css, js, 이미지 등 정적 파일에 대한 기본 경로를 제공해줍니다.

  • 사용 방법
    app.use('요청 경로', express.static('실제 경로'))

  • 예시

    1
    2
    
    app.use("/", express.static(path.join(__dirname, "public")));
    // 'public'은 정적파일이 존재하는 root경로의 폴더명으로, 자신의 개발환경에 따라 다르게 설정할 수 있습니다.
    

    요청 경로에 /로 왔을 때, Express는 public 폴더 안에서 해당 경로를 찾습니다.

    즉, https://localhost:3000/html/index.html와 같은 요청을 받으면, Static 미들웨어는 위에서 설정한 ./public/html/index.html 파일을 반환해줍니다.

실제 서버의 폴더 경로에는 public이 있지만 요청 주소에는 생략됩니다.

서버의 폴더 경로와 요청 경로가 다르므로 외부인이 서버의 구조를 쉽게 파악할 수 없게해 서버 보안의 장점이 있습니다.

express.static 미들웨어는 정적 파일을 제공할 때 next 대신 res.sendFile로 응답을 보냅니다.

따라서, 정적 파일을 제공하는 경우 그 뒤의 미들웨어들은 실행되지 않습니다.


path 모듈

path 모듈은 Node.js에서 기본으로 제공되며 파일, 디렉토리 등의 경로를 편하게 설정하도록 도와줍니다.

  • __filename : 현재 실행 중인 파일 경로
  • __dirname : 현재 실행 중인 폴더 경로

path 모듈 사용 방법

path는 node.js의 내장 모듈로 설치없이 사용할 수 있습니다.

1
2
import path from "path";
const __dirname = path.resolve(); // commonJS 모듈에서는 생략해도 됩니다.

Express에서 ES module을 사용하게 되었을 경우
(“type”: “module” in package.json)
ReferenceError: __dirname is not defined 에러가 발생하게 됩니다.

  • 주요 메서드

    • path.normalize('경로')
      //나 \ 등으로 경로 구분자를 잘못 사용해도, 정상 경로로 변환해줍니다.

      1
      2
      3
      
      console.log(path.normalize("/src///public/////html/index.js"));
      
      // 결과 : /src/public/html/index.js
      
    • path.join('경로', '경로', ...)
      여러개의 경로를 합쳐줍니다.
      상위경로(..), 현재경로(.)도 알아서 처리해주며 중간에 /를 만나면 앞의 경로에 이어서 ‘상대경로’로 처리합니다.

      1
      2
      
      console.log(path.join(\_\_dirname, '/a/b', '..', './b', 'c', '/d'));
      // C:/workspace/project/Project_01/a/b/c/d
      
    • path.resolve('경로', '경로', ...)
      여러개의 경로를 합쳐줍니다.
      상위경로(..), 현재경로(.)도 알아서 처리해주며 join()과 다르게 중간에 /를 만나면 앞에 경로 다 무시하고, ‘맨 처음부터’ 다시 시작합니다.

      1
      2
      
      console.log(path.resolve(\_\_dirname, '/a/b', '..', './b', 'c', '/d'));
      // /d
      

참조

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.