
해당 글은 Node.js 와 관련된 정보들을 찾다가 발견한 모음집이다 내용이 좋아서 주요 헤더만 포스팅 해본다.
!. 원본을 필수로 한번은 정독을 권한다
출처 : https://github.com/goldbergyoni/nodebestpractices/blob/master/README.korean.md
1.프로젝트 구조 설계
1.1 컴포넌트 기반으로 설계하라
자세히보기: 컴포넌트 기반으로 설계하라
여기서 링크걸려있는 자세히보기를 클릭하면 모놀로식 구조의 단점과 설계 방법에 대해서 설명하고있는데 모놀로식 구조의 단점은 충분히 이해되고 공감도 가지만 어플리케이션의 설계부분이 이해가 되지 않는다.
좋은 예 : 자족적인 컴포넌트 기반으로 설계하라

나쁜 예 : 파일을 기술적인 역할별로 모아라

기존 MVC 패턴으로 설계하는방법은 node.js 와는 맞지 않는것인지 나쁜예로 비교가 되고 있는데 이부분은 추후 다시 포스팅 해봐야할것같다
1.2 컴포넌트를 계층화 하고 Express 를 그 경계안에 둬라
- 컴포넌트 코드를 웹, 서비스, 데이터 접근 언어(DAL) 계층으로 나누어라
1.3 공유 유틸들은 NPM 패키지로 감싸라
1.4 Express의 app과 server를 분리하라
코드 예 : API 선언은 app.js 에 있어야 한다.
const app = express();
app.use(bodyParser.json());
app.use("/api/events", events.API);
app.use("/api/forms", forms);
코드 예 : 서버 네트워크 선언은 /bin/www에 있어야 한다.
const app = require("../app");
const http = require("http");
const port = normalizePort(process.env.PORT || "3000");
app.set("port", port);
const server = http.createServer(app);
1.5 환경을 인식하는 보안적인 계층적인 설정을 사용하라
2. 에러 처리 방법
2.1 비동기 에러 처리시에는 async-await 혹은 promise를 사용하라
2.2 내장된 Error 객체만 사용하라
2.3 동작상의 에러와 프로그래머 에러를 구분하라
2.4 에러를 Express 미들웨어에서 처리하지 말고 한군데에서 집중적으로
2.5 Swagger를 이용해 API 에러를 문서화 하라
2.6 낯선이가 들어오면 프로세스를 적절하게 중단하라
2.7 에러 확인을 용이하게 해주는 안정된 로거를 사용하라
- Winston, Bunyan, Log4J 사용
- console.log 사용 x
2.8 당신이 선호하는 테스트 프레임워크로 에러 흐름을 테스트하라
2.9 APM 제품을 사용하여 에러와 다운타임을 확인하라
- 한국에서 유명한 APM 으로는 제니퍼가 있다
- 무료로 사용가능한 Heroku 에서 newrelic 이 있다
2.10 처리되지 않은 promise 거부를 잡아라
2.11 전용 라이브러리를 이용해 인자값이 유효한지 검사하여 빠르게 실패하라(fail fast)
3. 코드 스타일
3.1 ESLint 를 사용하라
3.2 Node.js에 특화된 플러그인들
- eslint-plugin-node
- eslint-plugin-mocha
- eslint-plugin-node-security
3.3 코드 블록의 중괄호를 같은 줄에서 시작해라
function Example() {
...
}
function Example()
{
...
}
3.4 문장을 제대로 분리해라
- immediate invoked function 전에 세미콜론을 놓던나, const 정의 후에 놓거나, 익명함수의 반환값을 변수에 저장하던가, 아니면 아예 IIFE를 쓰지 마라
3.5 함수에 이름을 붙여라
3.6 변수, 상수, 함수, 클래스의 명명규칙
- 상수와 변수, 함수를 명명할때는 lowerCamelCase
- 클래스를 명명할때는 UpperCamelCase
3.7 let보다는 const를 사용하라, var는 개나줘라
3.8 require는 맨 처음에 오게하고 함수 안에서의 사용은 피하라
3.9 파일 대신 폴더를 require해라
3.10 === 연산자를 사용하라
3.11 async-await를 사용하고 콜백을 피하라
3.12 두꺼운 화살표 함수를 사용하라
4. 테스트 및 전체 품질 관리
4.1 최소한 api 테스트는 해라
4.2 테스트 이름에 이 3가지를 포함해라
- 무엇을
- 어떤 환경에서
- 어떤 결과를 예상하고 테스트하는것인지
4.3 AAA 패턴을 따라 테스트를 구축해라
4.4 린터를 사용해서 코드의 문제점을 찾아내라
4.5 고정적인 공용 테스트 데이터나 seeds는 피하고, 테스트별로 데이터를 붙혀라
4.6 끊임없이 취약한 dependency를 점검해라
- npm audit 이나 snyk.io 같은 상업용 도구 활용
4.7 테스트를 태그하라 (#테스트)
4.8 테스트 범위를 확인하여 안좋은 테스트 패턴을 잡아내라
4.9 오래되어 뒤떨어진 패키지는 없는지 검사해라
- 설치된 패키지중 outdated 된 패키지는 없는지 선호하는 도구를 써서 확인해라
- 심할경우 빌드가 실패하도록 CI 경로에 이 체크를 주입해라
- 예를 들면 패키지가 패치 commit 이 5개 이상 뒤쳐졌다거나 로컬은 1.3.1 버전인데 repo 버전은 1.3.8 이라던가
4.10 프로덕션과 비슷한 환경에서 e2e 테스트를 실행해라
4.11 정적분석도구를 이용해서 refactor를 정기적으로 해라
4.12 CI 플랫폼은 신중하게 선택해라 (Jenkins vs CircleCI vs Travis vs 나머지)
4.13 미들웨어들은 격리시켜 테스트해라