반응형

Node.js에서 다른 디렉토리에 있는 모듈을 불러올 때는 상대 경로 설정과 절대 경로를 설정하는 두 가지 방식이 있다.

 

1. 폴더 구조


폴더와 파일 구조가 다음과 같을 때, auth.js와 index.js에서 user.js에 정의된 User를 불러오는 방법에 대해 알아보자.

  • model/user.js : DB 스키마, User 모델 정의
  • middleware/auth.js : 로그인 인증 미들웨어
  • middleware/admin.js : 관리자 권한 체크 미들웨어
  • index.js : 서버 실행 및 라우팅 진입점

 

2. user.js에서 User 모델 export하기


const mongoose = require("mongoose");

const userSchema = new mongoose.Schema({
  email: String,
  password: String,
  role: { type: Number, default: 0 } // 0: 일반, 1: 관리자
});

const User = mongoose.model("User", userSchema);

// 다른 파일에서 require 할 수 있도록 export
module.exports = User;
  • module.exports = User; 로 내보내면 require() 로 그대로 불러올 수 있다.

 

3. 상대경로(require)로 불러오기


(1) auth.js 파일에서 User 불러오기

const User = require("../model/user");
  • ..는 현재 middleware 폴더에서 상위 디렉토리(project/)로 이동하는 것을 의미한다.
  • 그 다음 model/user.js로 접근한다.

 

(2) index.js 파일에서 User 불러오기

const User = require("./model/user");
  • index.js 기준 같은 경로(./)의 model 폴더를 찾는다.
🔖
./file → 현재 디렉토리 기준
../file → 상위 디렉토리 기준

 

4. 절대경로로 불러오기


상대경로는 편리하지만, 깊은 디렉토리 구조에서는 ../../../model/user와 같이 의미파악에 어려움이 있을 수 있다. 이런 경우는 절대경로를 써서 가독성을 높인다.

(1) Node 기본 절대경로

const User = require("/Users/yourname/project/model/user");
  • 루트 디렉토리부터 절대경로로 지정한다.
  • PC환경마다 루트가 다르기 때문에 프로젝트에서는 잘 쓰이지 않는다.

(2) path 모듈 활용

const path = require("path");
const User = require(path.resolve(__dirname, "../model/user"));
  • __dirname → 현재 파일이 위치한 디렉토리 절대경로이다.
  • path.resolve() 로 항상 절대경로를 얻을 수 있다.

반응형

+ Recent posts