본문 바로가기

Development/Javascript

[Node.js] 상위 Directory까지 한 번에 생성하기

서론

어디든 개발하다보면 File을 써야 할 상황이 온다. 그러면 아무 폴더에다가 저장하지 않고 ~/Documents/upload/image 와 같은 정리된 디렉토리 계층을 사용할 것이다. 문제는 여기서 발생한다. 정리된 디렉토리 계층을 사용하려면 디렉토리가 여러 개가 되어야 하는데 Node.js에서 지원하는 fs.mkdir은 여러 디렉토리를 한 번에 생성해주지 않는다. ~/Documents/upload/image 를 생성해서 사용하려면 ~/Documents는 원래 있는 거니 상관 없고, upload와 image 두 가지 디렉토리를 생성해줘야 한다. 그래서 패키지 mkdirp를 따로 추가하여 사용하고 있었는데 Node.js 10.12 버전부터는 recursive 옵션을 true로 주면 되네? ㅋㅋㅋㅋㅋ 아 이래서 문서를 잘 보고 버전업도 잘 해야 하는구나 싶다.

사용 방법 (recursive 옵션)

function mkdir( dirPath ) {
    const isExists = fs.existsSync( dirPath );
    if( !isExists ) {
        fs.mkdirSync( dirPath, { recursive: true } );
    }
}
mkdir( './test/mkdir' );

위의 코드는 간단하게 디렉토리가 존재하는지 확인하고, 없다면 생성하는 코드이다. node.js에서는 xxxxSync 라는 함수를 사용하면 callback으로 사용하지 않고 또는 promise로 변환하지 않아도 사용할 수 있어서 편하지만 비동기 방식이 아닌 동기 방식이라 코드가 블락돼서 응답이 멈출 수 있다. 또는 성능이 느려질 수 있다. 따라서 웬만하면 안 쓰는 게 좋지만 간단한 예제를 위해서 사용했다.

결론

원래 이 포스트은 mkdirp 패키지를 설치하고 사용 방법을 쓰려고 했으나 Node.js 10.12부터 recursive 옵션이 생겨 급 변경하여 fs.mkdir에 옵션을 넣는 방법만 소개하고 마치려고 한다. 여러분 안녕~~