Photo Organizer (Node.js 자동화스크립트 과제 후기)

Ava Kim·2022년 2월 5일
0

드림코딩 Node.js 강의 자동화 스크립트 과제 셀프 평가 및 정리용 포스트

과제 실습 전 목표

  • 솔루션 코드 보지 않고 끝까지 혼자 힘으로 해내기
    : 공부하는데 당연한 부분이고, 이렇게 해야 더 많이 배워가니까!

  • 공식 문서 최대한 활용하기
    : 이전에는 스택오버플로우 글들을 먼저 봤었는데, 공식문서를 잘 읽어 보면 의외로 답을 쉽게 찾을 수 있고 결과적으로 더 적은 시간 안에 문제를 해결할 수 있다는 걸 배웠다.

  • 요구 사항 분명하게 파악하기
    : 코드를 짜기 전에 요구 사항이 무엇이고 어떻게 풀어가야 하는지 충분히 생각하는 시간을 가져야 더 깨끗한 코드가 나온다.

  • 타임 박싱 (최대 2시간 넘지 않기)
    : 혼자 공부하다 보니 어떤 문제가 생기면 그게 해결될 때까지 붙잡고 있었는데, 시간 관리 측면에서 비효율적이고 실무할 때 자칫 안 좋은 습관으로 굳어질 것 같아 타임박싱을 습관화하기로 했다.


과제 중 부딪힌 문제

Duplicated file 처리하기

수정된 사진은 'IMG_Exxxx'와 같이 원본 사진 파일명'IMG_xxxx'의 숫자 앞에 E가 붙는데, 수정된 버전만 남기고 원본은 duplicated 폴더로 옮겨야 했다.

처음에는 코드를 최대한 간결하게 짜려고 파일명이 'IMG_E'로 시작하면 replace 를 활용해서 E를 삭제한 파일명을 인자로 넘겨, 해당 파일을 폴더로 옮겼다.
이렇게 하면 폴더 내에 실제로 그 파일이 있는지 확인하는 절차가 생략되었기 때문에 두번 실행하면 에러가 발생한다. 만약 사용자가 원본 사진을 삭제했다면, 이 경우에도 에러가 발생할 것이다.

💡 사용자 입장에서, 발생할 수 있는 여러 경우의 수를 항상 생각하자

해결 방법

 if (!file.startsWith('IMG_') || file.startsWith('IMG_E')) {
          return;
        }
        const edited = `IMG_E${file.split('_')[1]}`;
        const duplicated = fileList.find((i) => i.includes(edited));
        if (duplicated) {
          const fileName = `IMG_${duplicated.split('E')[1]}`;
          moveFiles(fileName, 'duplicated');
        }
    }

처리할 필요 없는 파일들은 빨리 리턴하고, 원본 파일 중 findincludes 를 이용해 수정된 버전이 있는 파일을 찾는 방법을 선택했다.


솔루션 코드 본 후 리팩토링

내가 놓친 부분

  1. 비동기화
    엄청난 실수 😭
    테스트 폴더는 파일 개수도 몇 개 안 되고, 크기도 크지 않으니 문제가 안 됐지만 파일을 읽고 옮기는 데 비동기 처리를 안 한건 큰 실수다. Promise 잊지 말기!

  2. 에러 처리
    같은 폴더에 대해 스크립트를 여러번 실행했을 때 폴더가 이미 만들어졌으면 더 이상 실행되지 않도록 에러 처리하는 것은 해두었는데, 사용자가 command line에서 폴더명을 잘못 입력했을 경우에는 미처 대비하지 못 했다.
    적절한 에러 처리에 대해 늘 고민하자.

  3. 경로 설정
    요구 사항에 분명히 Pictures 폴더 내에 타겟 폴더가 있어야 한다고 했는데, 프로젝트 내부에 타겟 폴더를 놓고 해당 경로를 resolve 로 읽어왔다. 요구 사항이 만족됐는지 끝까지 점검하자.

최종 평가

목표 달성

  • 솔루션 코드 보지 않고 끝까지 혼자 힘으로 해내기 ⭐️⭐️⭐️⭐️⭐️
  • 공식 문서 최대한 활용하기 ⭐️⭐️⭐️⭐️⭐️
  • 요구 사항 분명하게 파악하기 ⭐️⭐️⭐️
  • 타임 박싱 (최대 2시간 넘지 않기) ⭐️⭐️⭐️⭐️⭐️

다른 부분들은 목표한 대로 달성했다.
단, 요구 사항에 맞게 경로설정하는 부분에서 실수했다. 경로가 다르면 아얘 스크립트 실행 자체가 안 되므로 별 2개 뺐다.

Takeaway

  • 공식문서 보면서 하니까 확실히 시간이 단축됐다 👍🏼
  • 제일 시간이 많이 걸린 부분이 .startsWith 같은 method 생각해 내는 거였다. 다시 한번 자바스크립트 기본 문법에 충실해야 한다는 걸 느꼈다.
  • 솔루션 코드에서 RegExp 이용하니까 코드가 훨씬 간결해졌다. RegExp 꼭 정리할 것!
profile
FE developer | self-believer | philomath

0개의 댓글