티스토리 뷰

path 모듈

파일의 경로와 관련된 모듈

 

path 모듈이 왜 필요할까

1. 경로 구분자를 통일할 수 있다.

  • 윈도우 : 역슬래시(\) 사용 (예: C:\Users\myCom\Desktop\myNode\basics\03\example.txt)
  • 맥OS : 슬래시(/) 사용 (예: /Users/myCom/Desktop/myNode/basics/03/example.txt)

위와 같이 컴퓨터 운영체제에 따라 경로를 나타내는 기호가 다르다.

path 모듈을 사용하면 경로 구분자를 하나로 통일해서 적용할 수 있다.

 

2. 경로를 나누거나 합칠 수 있다.

여러 조각으로 되어 있는 문자열을 묶어서 경로로 표현할 수 있다. (아래 예문으로 확인해보자)

 

 

절대경로와 상대경로

  • 절대경로 : 파일이나 폴더의 위치를 루트 폴더부터 시작해서 파일까지 전부 다 나타내는 것
C:\Users\myCom\Desktop\myNode\basics\03\example.txt //윈도우
/Users/myCom/Desktop/myNode/basics/03/example.txt //맥

 

  • 상대경로 : 어떤 파일을 기준으로 하여 사용하는 경로,
  • 특정 파일 A가 기준이 되는 파일과 같은 폴더에 있을 경우 './A' 로 표기
  • 특정 파일 A가 기준이 되는 파일보다 한 단계 위 부모 폴더에 있을 경우 '../A' 로 표기
  • 특정 파일 A가 기준이 되는 파일의 하위 경로에 있을 경우 . 없이 '/A'로 표기

 

 

node.js 공식 문서 path 모듈 참고하기

https://nodejs.org/docs/latest/api/path.html

 

Path | Node.js v23.7.0 Documentation

Path# Source Code: lib/path.js The node:path module provides utilities for working with file and directory paths. It can be accessed using: const path = require('node:path');import path from 'node:path';copy Windows vs. POSIX# The default operation of the

nodejs.org

node.js 공식 사이트의 문서 카테고리에서 path 모듈을 조회해보면,

path 모듈에서 사용할 수 있는 함수 리스트를 안내하고 있으니 참고하자.

 

 

path 모듈 예제

  • join 함수 : 여러개의 텍스트 조각으로 하나의 경로를 만들 수 있는 함수
  • dirname 함수 : 전체 경로에서 파일명 제외하고 경로만 추출하는 함수
  • basename 함수 : 전체 경로에서 경로 제외하고 파일명만 추출하는 함수
const path = require('path'); 

//전체경로 만들기 : join
const fullPath = path.join('some', 'work', 'ex.txt');
console.log(fullPath);

//파일명 제외하고 경로만 추출 : dirname
const dir = path.dirname(fullPath);
console.log(dir);

상단에 require 문으로 path 선언 후, 위와 같이 사용하면 된다.

 

fullPath에는 some\work\ex.txt 라는 파일명을 포함한 전체경로가 찍혔고,

dir에는 some\work 라는 파일명을 제외한 경로만 찍혔다.

 

 

const path = require('path'); 

//경로 제외하고 파일명만 추출 : basename
const fn1 = path.basename(__filename);          //전체경로 filename에서 확장자 포함한 파일명 추출
const fn2 = path.basename(__filename, '.js');   //전체경로 filename에서 확장자 제외한 파일명 추출
console.log(`전체경로 (__filename) : ${__filename}`);
console.log(`파일명 : ${fn1}`);
console.log(`확장자 제외한 파일명 : ${fn2}`);

* __filename : global 모듈에 있던 속성으로, 현재 파일의 전체 경로를 담고있는 값이다.

* path.basename( __filename ) : 현재 파일의 전체 경로( __filename) 에서 basename(파일명)을 추출해달라는 뜻이다.

 

실행해보았더니 콘솔창에 위와 같이 출력되었다.

 

basename 함수는 확장자를 포함한 파일 이름을 가져오게 할 수도 있고, 확장자를 뺀 이름만 가져오게 할 수도 있다.

 

 

 

 

File System 모듈 (fs 모듈)

fs 모듈은 동기식 함수와 비동기식 함수를 구별하여 제공하고 있다.

 

https://nodejs.org/docs/latest/api/fs.html

 

File system | Node.js v23.7.0 Documentation

 

nodejs.org

위 공식 문서를 봐보면

파일을 읽어온다거나 할 때 동기식으로 처리하고 싶으면 Synchronous API 의 함수를 참고하면 되고,

비동기식으로 처리할 경우에는 Callback 함수 형태인지, Promise를 사용할 것인지에 따라 각각 다른 함수를 안내하고 있으니 해당하는 부분을 참고하면 된다.

 

스크롤 내려보면 엄청 많다...

 

 

 

fs.readdir 함수 (비동기식 콜백함수)

위 공식 문서에서 Callback API  리스트를 살펴보면

fs.readdir(path [, options], callback) 이라는 함수가 있다.

 

 

위 타이틀을 눌러서 상세 내용을 확인해보자.

 

 

 

fs.readdir 함수의 파라미터 path, options, callback 에 대한 내용을 확인할 수 있다.

options는 선택사항이고, path와 callback은 필수 매개변수이다.

 

options의 매개변수로는 encoding, withFileTypes, recursive 가 있고,

callback의 매개변수로는 err(에러 표시), files(가져온 내용 정보) 가 있다.

콜백함수는 (err, files) =>{} 형태로 작성하면 된다.

 

아래 예제를 살펴보자.

 

const fs = require('fs'); //fs모듈 가져옴

//readdir 매개변수 중 path와 callback은 필수로 작성한다.
fs.readdir("./", (err, files) => {
    if(err){
        console.log(err);
    }else{
        console.log(files);
    }
});

readdir 함수는 지정한 path에 있는 파일들을 읽어오는 함수이다.

 

readdir의 매개변수 중 path와 callback은 필수로 작성해야 한다.

path는 ./ 로 입력하여 "현재 폴더" 로 지정하였고, callback은 (err, files) => {} 형태로 작성하였다.

에러가 발생할 땐 에러를 찍어주고, 에러가 발생하지 않았을 땐 가져온 files를 찍어주도록 작성하였다.

 

 

결과를 실행해 보았다.

list-2.js 파일이 있는 현재 경로인 C:\doitNode\basics\03 폴더에 있는 모든 파일들이 콘솔창에 찍혔다.

 

* readdir은 비동기식 콜백함수였다.

* readdirSync는 동기식으로 처리하는 함수이다. Synchronous API 의 readdirSync 문서도 참고해보자.

 

 

파일 읽고 쓰기

비동기 함수 readFile, writeFile 사용해본다.

 

 

fs.readFile

fs.readFile 함수는 path, callback이 필수 매개변수이고,

callback에는 err, data 라는 매개변수로 콜백함수를 작성하는 것을 알 수 있다.

 

 

fs.writeFile

fs.writeFile 함수는 file, data, callback이 필수 매개변수이고,

callback 에는 err 라는 매개변수로 콜백함수를 작성하는 것을 알 수 있다.

 

 

 

fs.readFile 함수 예제

const fs = require("fs");

//현재 폴더의 example.txt 내용을 읽어줘
fs.readFile("./example.txt", (err,data)=>{
    if(err){
        console.log(err);
    }else{
        console.log(data);
    }
});

 

위와 같이 작성하고 실행했다.

 

콘솔창에 알아볼 수 없는 바이너리 코드가 찍혔다.

인코딩을 지정하지 않으면 메모리에 있는 상태 그대로 보여주기 때문이다.

사람이 알아볼 수 있는 텍스트로 바꿔서 표현하려면 "인코딩"을 지정하면 된다.

 

*node.js에는 buffer라는 메모리 공간이 있다.

*위 결과는 buffer에 저장된 데이터를 바이너리 형태로 그대로 보여주고 있는 모습이다.

 

const fs = require("fs");

//인코딩 "utf8" 추가
fs.readFile("./example.txt", "utf8", (err,data)=>{
    if(err){
        console.log(err);
    }else{
        console.log(data);
    }
});

 

인코딩을 지정하고 (utf8) 다시 실행했다.

 

read-3.js와 같은 폴더(./) 밑에 있는 example.txt 파일의 내용이 콘솔창에 잘 찍혔다.

 

 

fs.writeFile 함수 예제

위 fs.readFile 함수로 불러온 data를 새로운 파일명으로 저장하는 예제를 작성해보겠다.

const fs = require("fs");

fs.readFile("./example.txt", "utf8", (err,data)=>{
    if(err){
        console.log(err);
    }else{
        fs.writeFile("./testWriteFile.txt", data, (err)=>{
            if(err){
                console.log(err);
            }else{
                console.log("파일 저장 완료!");
            }
        })
    }
});

위처럼 작성하고 실행해보았다.

 

콘솔창에 파일 저장 완료! 메세지가 출력됐고,

basics의 03 폴더 아래 testWriteFile.txt 파일이 만들어졌다.

 

 

https://youtu.be/cbnOhi9ZtWg?feature=shared

 

https://youtu.be/cv33E5EXuwI?feature=shared

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함