사용자가 내가 원하는 위치에서 실행시켰는지 확인하기

신연우·2021년 4월 15일
0

PSG 회고

목록 보기
4/5

PSG init

본 프로젝트의 주 기능인 "프로젝트 구조 생성" 기능을 사용하기 위해서는 반드시 해당 명령을 사용해 주 기능을 사용하기 위한 규칙이 적힌 메뉴얼과 필요한 것들을 생성할 수 있다.

다만, 이 경우는 사용자가 해당 프로젝트를 시작하고자 하는 위치, 즉 프로젝트의 최상단(root) 경로에서 실행을 시켜야 한다.

메뉴얼에 적어 놓고, 이상한 곳에서 실행이 되었다면 에러를 띄워서 실행이 되지 않게 하는 방식으로 실행했다만 가만히 생각해보니 큰 이슈였다.

실패를 하더라도 해당 기능을 위한 폴더는 생성이 된다는 것이다. 이렇게 되버리면 차후 init이 정상적으로 동작하지 않았음에도 동작될 수 있고, 이상한 곳에서 실행해도 이 폴더가 계속 생성이 된다는 문제가 있었다.

해결 방법

파일 복사를 더 쉽게 못하나?

기존에 파일을 복사하는 방식을 보고 아무리 생각해도 Node.js에서 파일을 복사하는 기능을 이미 구현해놓았을 것이라는 생각이 들었다.

그래서 이 문제를 해결할 수 있는 방법을 찾던 도중 copyFile 메서드를 알게 되었다.

음? 기준 경로가 여기가 아닌가?

이 방식을 이용해 복사를 하려던 도중, 계속 에러가 발생했다. 사실 copyFile 메서드에 전달하는 경로가 해당 함수를 호출하는 파일의 위치를 기준으로 하는 줄 알았다. 그래서 상대경로를 ./../../../../README.md 같이 써놓았다.

이랬더니 에러 메시지가 "C:\\Users\\user\\README.md"라고 출력되는 것이 아닌가? 아무래도 기준 경로가 내가 작업하고 있는 워크 스페이스 상의 최상단 경로인 것 같다.

그래서 해당 부분을 이용해 파일을 복사하는데 에러가 생기면 README.md 파일이 없어졌거나, 현재 실행 경로가 이상한 것이라는 것을 알 수 있었다.

해결한 코드

const { copyFile } = require("fs").promises;

copyFile("./README.md", `${servicePath}/../README.txt`)
  .then(() => {
    if (existsSync(servicePath)) {
      printExceptionMessage(AlreadyServiceInit.message);
      return;
    }

    mkdir(servicePath, error => {
      if (error) {
        printExceptionMessage(InternalProgramError.message);
        return;
      }
      
      printSuccessMessage("Success: PSG init")
    })
    .catch(() => printExceptionMessage(`
      Error: Please check next conditions
      1. Did you delete the README.md that were in the library when you downloaded?
         In this case, you can redownload this libary, then you can solve.
      2. Did you enter this command at your project root directory?
    `));

회고

이번에는 우연으로 해결하게 되었지만 앞으로는 내가 알고 있는 지식을 통해 내가 맞닥뜨린 이슈를 해결할 수 있도록, 우연이 아니라 확신으로 할 수 있도록 더 많이 노력해야겠다.

2021.04.16. 추가
구글링을 하던 도중 이보다 더 쉽게 해결할 수 있는 방법을 찾았다. 좋은 글 써주신 P-iknow(피아노)님에게 감사인사를 전합니다.

path.resolve('')
// 이렇게 하면 현재 작업 중인 워킹 디렉토리를 얻을 수 있다.

path.resolve의 동작방식에 의해 이런 식으로 구할 수 있다는 것이다! Node.js를 1년 가까이 써 오고 있는데, 아직 이런 것도 모르다니...... 갈 길이 너무 먼 것 같다.

profile
남들과 함께하기 위해서는 혼자 나아갈 수 있는 힘이 있어야 한다.

0개의 댓글