[JavaScript] TWIL : Server 환경 설정과 path, fs 모듈(21/01.07~01.13)

정빈·2021년 1월 13일
0

Final 프로젝트: Missing Animals, 백엔드 포지션으로서의 1주차 TWIL 기록.

Server 환경 설정 (middleware)

Morgan

morgan은 request에 대한 정보를 console에 기록해주는 node.js의 모듈이다.

// app.js
const logger = require('morgan');
...
app.use(logger('dev');

위와 같이 미들웨어로 사용할 수 있다.

개발시에는 로그가 간단하게 나오는 'dev', 'short' 등을 사용하고,
POST /auth/signup 201 121.737 ms - 20 (dev 적용)

배포시에는 보다 더 자세한 로그가 찍히는 'combined', 'common'등을 사용할 수 있다.
::1 - - [13/Jan/2021:06:26:33 +0000] "POST /auth/signup HTTP/1.1" 201 20 "-" "PostmanRuntime/7.26.8" (combined 적용)

express.urlencoded(), express.json()

urlencoded와 json메서드는 request의 body를 req.body로 접근가능하도록 파싱해주고, json화 시켜주는 body-parser 모듈의 메서드였다.
그러나 express 4.16.0버전부터 body-parser의 일부 기능이 내장되면서,
express자체 메서드로 사용이 가능해졌다고 한다.

특히, express.urlencoded()는 express.urlencoded({ extended: false })설정을 함께 사용하는데,
true 설정은 qs모듈을 사용하고, false 설정은 query-string 모듈을 사용하게 된다.
그러므로 query-string을 사용하려면 기본적으로 false설정을 적용하는 것이 좋을 것이다.

stackoverflow : extended 옵션 예시



path, fs 모듈

프로젝트에서 multer 모듈을 사용하면서, 서버단의 폴더에 저장되는 이미지를 제어하기 위해서 node.js의 내장모듈인 path와 fs를 사용해야했다.
express 스프린트 때 잠깐 하고 넘어갔었던 터라, 프로젝트를 진행하면서 제대로 공부할 수 있었다.

먼저, node.js는 __dirname, __filename 이라는 키워드로 경로에 대한 정보를 제공한다. dirname은 파일명을 제외한 절대 경로를, filename은 파일명을 포함한 절대 경로를 리턴한다. (완전꿀!)

path 모듈

path 모듈은 운영체제별로 경로 구분자가 달라서 생기는 문제를 해결하기 위해 등장했다고 한다. 특정해서 말하자면, Windows는 (백슬래쉬)를 이용해 경로를 구분하고, 유닉스 기반의 운영체제는 /(슬래쉬)를 이용해 경로를 구분한다.
경로 구분 이슈를 포함해, 파일명과 파일 확장자 추출 또한 지원한다.

  • path.join([...paths]) : 여러 인자를 넣으면 하나의 경로로 합쳐 리턴한다. 절대경로와 상대경로('..', '.')를 섞어서 사용할 수 있다.
const path = require('path'); // 내장모듈이기 때문에 따로 설치없이 require만 하면 된다.

path.join(__dirname, '..', 'config', 'config.js'); // 현재 경로(__dirname)에서 상위폴더로 이동('..') 후, 상위의 config 디렉토리에서 config.js로 이동
  • path.basename(path[, ext]) : 파일의 이름을 반환한다. 두 번째 인자로 파일의 확장자(ext)를 넣어주면 파일의 이름'만' 반환한다.
path.basename('/Users/Desktop/project/uploads/123553.jpg', '.jpg'); // -> 123553
  • path.extname(path) : 파일의 확장자를 반환한다.
path.extname('/Users/Desktop/project/uploads/123553.jpg'); // -> '.jpg'

fs 모듈

fs 모듈은 파일 처리와 관련된 모듈이다. 기본 메서드들은 비동기적으로 작동하고, 동기적으로 작동하는 메서드는 Sync라는 이름이 함께 붙어있다. 이는 파일을 읽는데 시간이 오래 걸릴 수 있기 때문에, 다른 작업을 동시에 할 수 있게하기 위함이다.

fs는 엄청나게 많은 메서드들을 가지고 있지만, 지금은 프로젝트 때 사용해야했던 메서드들을 중심으로 기록한다.

  • fs.mkdirSync('dirname') : 동기적으로, 인자로 들어온 문자열로 이름 지어진 폴더를 만든다. 클라이언트로부터 넘어오는 이미지 파일을 담아내는 폴더가 최초에 자동 생성되도록 하기 위해 사용했다.

  • fs.readdir(path[, option], cb(err, files)) : 비동기적으로, 디렉토리에 있는 모든 파일을 읽어온다. 세 번째 인자로 callback함수를 받아 err와 읽어온 files를 처리한다.

profile
Back-end. You'll Never Walk Alone.

0개의 댓글