패스트캠퍼스 작심 30일 챌린지 19일차.
오늘 학습 내용은 Nodejs 컨벤션!
여기서 컨벤션의 범위는 소스코드 뿐만 아니라 파일 이름 등에 대해서도 적용된다.
그럼 컨벤션(Convention)이 뭘까?
간략히 설명하면 프로그래밍 스타일에 관한 가이드라인(?) 이라고 할 수 있다.
소스코드를 예로 들면
상수는 대문자와 스네이크 표기법을 통해 작성하기, 변수는 카멜 표기법을 통해 작성하기,
인덴트는 탭을 이용하기 등 소스코드 작성 시 팀원 또는 사내에서 공통적으로 지켜야 할 규칙 들을 생각하면 된다.
패스트캠퍼스 강의에서는 구글의 javascript 스타일 가이드를 기준으로 컨벤션을 잘 설명해주고 있다.
(참고 : google javascript style guide)
패스트캠퍼스의 강의 내용을 바탕으로 컨벤션이 왜 중요한지 알아보자!!
먼저 파일 이름에 관한 컨벤션!
Google javascript style guide에서 파일 이름은 모두 소문자로 작성하고,
합성어의 경우 Underscore(_) 또는 dash(-)를 이용하라고 안내하고 있다.
왜일까?
const a = require('module.js')
const b = require('module.js')
이전 시간에 배운 내용에서 a와 b는 같은 객채라는 것을 알았다.
물론 module.js도 한번만 실행된다.
하지만 아래와 같이 작성하면?
const a = require('module.js')
const b = require('MODULE.js')
const c = require('MoDuLe.js')
a, b, c 모두 같은 module.js 파일을 호출하는 것은 동일하다.
그러나 대소문자로 인해 a와 b, c는 모두 다른 객체로 생성되고,
module.js도 세번 실행된다.
분명 셋 다 같은 파일을 호출하는데 다 다른 객체로 인식한다.
이러한 문제를 미연에 방지하기 위해 파일 이름에 대한 컨벤션을 설정하여
파일로 인한 오류를 제거할 수 있다.
다음으로는 Nodejs에서 사용할 수 있는 함수와 관련된 컨벤션!
강의에서는 파일을 읽는 함수를 예시로 알려주고 있다.
nodejs에서 파일을 읽는 방법은 3가지가 있는데 아래가 그 코드이다.
// Callback-Style
fs.readFile(FILE_NAME, ENCODING, (error, result) => {
...
}
// Sync-Style
fs.readFileSync(FILE_NAME, ENCODING)
// Promise-Style
await fs.promises.readFile(FILE_NAME, ENCODING)
세가지 방식 모두 동일한 결과를 출력한다.
첫번째 방식은 일반적인 방식으로, 아마 많이 사용되고 있지 않을까한다.
그러나 두번째 방식은 비동기 방식으로 동시성이 필요없는 환경에서는 사용가능하지만,
첫번째 방식보다 퍼포먼스가 떨어진다는 단점이 있어 사용하지 않을 것을 강의에서 권장하고 있다.
그리고 마지막 promise 방식은 소스코드를 간결하게(?) 작성할 수 있고 퍼포먼스 측면에서도 단점이 없기 때문에
강사님은 이 방식을 주로 사용할 것을 추천해주고 있다.
이처럼 같은 기능을 하는 함수가 여러 개인 경우 기업/프로젝트/팀 단위로 어떤 함수를 사용하는 것이 효율적인지 판단하여 특정 함수를 사용할 것을 규칙으로 정하는 것도 컨벤션이다.
그 외에 컨벤션은 다양하게 사용되고 있다.
앞서 설명한 파일 이름, 소스코드 작성 규칙뿐만 아니라 github에 commit할 때 메시지 규칙이나 패키지 구조 등
더욱 다양한 곳에서 다양한 형태로 적용할 수 있으므로, 각자 적절한 컨벤션을 찾아 자신만의, 또는 팀원끼리의
규칙을 정하여 깔끔한 코드를 작성하길 바란다.
[오늘의 학습통계]
- 패스트캠퍼스 URL : https://bit.ly/37BpXiC
* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'Web > Node.JS' 카테고리의 다른 글
[패스트캠퍼스 챌린지 21일차] NodeJS - Stream (0) | 2021.09.26 |
---|---|
[패스트캠퍼스 챌린지 20일차] NodeJS 핵심개념- 내장객체 (0) | 2021.09.25 |
[패스트캠퍼스 챌린지 18일차] NodeJS 핵심개념- npm, yarn (0) | 2021.09.23 |
[패스트캠퍼스 챌린지 17일차] NodeJS 핵심개념- require, module (0) | 2021.09.22 |
[패스트캠퍼스 챌린지 16일차] RESTful API - JSON 파일(데이터베이스) (0) | 2021.09.21 |