게시글

5만명이 선택한 평균 별점 4.9의 제로초 프로그래밍 강좌! 로드맵만 따라오면 됩니다! 클릭
강좌22 - NodeJS - 6년 전 등록 / 4년 전 수정

노드 프로젝트의 설정 파일들

안녕하세요. 이번 시간에는 노드 프로젝트의 설정 파일들에 대해 알아보겠습니다. 각종 유명한 오픈 소스 프로젝트를 보면요. 최상위 폴더에 수많은 설정 파일들이 존재합니다. 

undefined

React 깃허브에서 볼 수 있는 수 많은 설정 파일들입니다. 이런 파일들은 입문자들에게 매우 큰 혼돈과 좌절감을 주기에 이 글을 작성하게 되었습니다. 유명한 오픈 소스 몇 가지를 뽑아 설정 파일들을 비교 및 설명해보겠습니다.

노드 관련 파일

package.json

package.json은 노드를 하시는 분들이라면 다 아는 파일일 겁니다. 노드 프로젝트에 대한 정보, 설정, 사용중인 패키지를 기록하는 파일입니다.

package-lock.json, yarn.lock

노드 패키지 간의 의존 관계를 고정시켜둔 파일입니다. npm 대신 yarn을 패키지 매니저로 사용한다면 yarn.lock이 대신 있습니다.

.env

프로젝트 환경 변수를 저장한 파일입니다. 이름 앞에 점이 붙은 건 숨김 파일이기 때문입니다. 사실 이 파일은 깃허브에 올라와 있으면 안 됩니다. 백번 양보해서 올라와 있더라도 내부에 비밀 키가 적혀 있으면 안 되고요. 혹시나 비밀 키를 안에 넣어 깃허브에 올린 정신 나간 프로그래머가 있다면 얼른 얘기해 줍시다.

.nvmrc

노드 버전 관리자로 nvm을 사용하는 경우 어떤 노드 버전을 사용할 지 적혀있습니다.

.npmignore

npm에 패키지를 배포할 때 배포하지 않을 파일들 목록입니다.

lerna.json

하나의 프로젝트에서 여러 패키지를 관리할 수 있게 해주는 lerna입니다. 그에 관한 설정 파일입니다.

자바스크립트 관련 파일

.babelrc

이름 뒤에 rc가 붙은 파일들은 설정파일들입니다. 바벨은 최신 자바스크립트 문법을 지원하지 않는 브라우저에도 최신 문법의 코드를 쓸 수 있게 도와주는 도구입니다. 최신 코드를 구버전 코드로 변환해줍니다. .babelrc는 그에 대한 설정입니다.

tsconfig.json, typings.json

타입스크립트는 자바스크립트의 수퍼셋입니다. 자바스크립트에 강타입을 추가해줍니다. 바벨처럼 자바스크립트로 변환하는 기능이 있기 때문에 설정 파일이 필요합니다. tsconfig는 타입스크립트 설정 파일입니다. typings.json은 타입을 정의해둔 파일 위치를 기록하는 파일입니다.

.flowconfig

플로우는 페이스북에서 개발한 타입 체커입니다. 타입스크립트랑 라이벌 관계입니다. 물론 타입스크립트한테는 쨉도 안 됩니다. flowconfig는 그에 관한 설정 파일이고요.

.eslintrc, .eslintignore, tslint.json, .jshintrc

eslint는 자바스크립트 코딩 스타일 검사기입니다. 팀원들 간의 서로 다른 코딩 스타일을 하나로 통일해줍니다. eslintrc는 그 코딩 스타일을 적어둔 설정 파일이고, eslintignore는 코딩 스타일을 검사하지 않을 파일 목록입니다. tslint는 타입스크립트용 코딩 스타일 검사기이고, tslint.json으로 설정합니다. jshint나 jslint도 eslint가 나오기 전에 유명했던 검사기입니다.

.prettierrc

prettier는 자바스크립트 코딩 스타일을 알아서 적용해주는 도구입니다. eslint가 검사 위주라면 prettier는 알아서 바꾸는 것까지 해주는 것이죠. 그에 관한 설정 파일이 prettierrc입니다.

.bowerrc, bower.json

bower은 요즘 거의 망해가고 있지만 예전에 핫했던 프론트엔드 자바스크립트 라이브러리 관리 도구였습니다. bowerrc는 그에 관한 설정 파일입니다. bower.json는 라이브러리 리스트이고요.

gulpfile.js, Gruntfile.js, Jakefile.js, webpack.config.js

태스크 러너인 gulp, grunt와 빌더인 jake, 번들러인 webpack의 설정 파일입니다. 어떤 태스크를 실행하고, 어떻게 번들을 만들지 정의합니다.

jest.config.js

테스트 도구인 제스트에 관한 설정 파일입니다. jest 말고도 karma, mocha, jasmine 등이 있으니 그에 관한 설정 파일도 있을 수 있겠죠?

프로젝트 및 깃허브 관련 파일

.editorconfig

에디터 설정에 관한 파일입니다. 이 세상에 수 많은 에디터들이 있는데 그 에디터들 간에 공통된 설정을 할 수 있게 도와줍니다.

README.md

프로젝트에 대한 설명을 적은 마크다운 형식 파일입니다. README.md에 적은 설명은 깃허브에 설명서처럼 표시됩니다.

LICENSE

프로젝트의 라이센스입니다. 오픈 소스라고 무제한 무료인 것은 아니니 꼭 라이센스를 확인하세요.

CONTRIBUTING.md, CODE_OF_CONDUCT.md 등등

오픈 소스에 기여하고자 하는 사람들이 꼭 읽어봐야 하는 문서입니다. 규칙 등이 적혀 있습니다.

CHANGELOG.md, History.md

프로젝트의 새 버전이 나올 때마다 어떤 부분이 바뀌었는지를 알려주는 파일입니다.

Authors.md, .mailmap

프로젝트에 기여한 사람들 목록과 주소록입니다.

.gitignore, .gitattributes

사실 깃허브는 아니고 깃 관련 파일입니다. 깃과 깃허브는 구분하셔야 합니다. gitignore는 깃으로 관리하지 않을 파일이나 폴더 목록을 적어두는 파일이고, gitattributes는 깃에 대한 설정을 하는 파일입니다.

.gitbook.yaml

혹시 깃북으로 프로젝트 설명서를 만들었다면 이 설정 파일이 있을 수도 있습니다.

클라우드 및 CI/CD 관련 파일

app.yaml, dispatch.yaml

구글 클라우드 플랫폼에 배포할 때 필요한 파일들입니다. app.yaml은 앱 엔진, dispatch.yaml을 앱 엔진 주소 설정입니다.

appveyor.yml, .circleci/config.yml, .travis.yml 등등

CI/CD 서비스의 설정 파일들입니다. CI/CD 서비스는 빌드, 테스트, 배포 등을 자동으로 해주는 서비스입니다. 유명한 것으로 젠킨스, 트래비스, 서클 등이 있습니다. 그리고 gcp, aws, azure도 CI/CD를 지원합니다.

이상으로 다양한 설정 파일에 대해 알아보았습니다. 앞으로 위 파일들을 만나더라도 당황하지 마세요! 혹시나 추가를 원하시는 파일이 있다면 댓글로 알려주세요. 

조회수:
0
목록
투표로 게시글에 관해 피드백을 해주시면 게시글 수정 시 반영됩니다. 오류가 있다면 어떤 부분에 오류가 있는지도 알려주세요! 잘못된 정보가 퍼져나가지 않도록 도와주세요.
Copyright 2016- . 무단 전재 및 재배포 금지. 출처 표기 시 인용 가능.
5만명이 선택한 평균 별점 4.9의 제로초 프로그래밍 강좌! 로드맵만 따라오면 됩니다! 클릭

댓글

8개의 댓글이 있습니다.
5년 전
알려주신 링크대로 해봤더니 제대로 안되어서 post 테이블에 likeCount 컬럼을 만들어서 like테이블의 postId 겹치는 개수를 넣어주고 싶어 만든 코드인데 check the manual that corresponds to your MySQL server version for the right syntax to use near 'like WHERE postId=NULL' at line 1 라고 에러가 뜹니다ㅠㅠㅠㅠ
router.post('/:id/like', async (req, res, next) => {
try {
const post = await Post.findOne({ where: { id: req.params.id }});
await post.addLiker(req.user.id);
const postId = req.body.postId;
conn.query('INSERT INTO posts(likeCount) SELECT count(*) FROM like WHERE postId=?'
,[postId],(err,rs)=>{
if(err){
console.log(err);
res.end();
}else{
res.render(':id/like');
}
});
res.send('OK');
} catch (error) {
console.error(error);
next(error);
}
});
5년 전
이 부분은 SQL을 모르신다면 힘들 것 같습니다.
5년 전
안녕하세요! node.js 교과서를 보고 좋아요 구현중인데 메인화면에서 글 순서를 좋아요 수대로 하려면 page.js를 어떻게 바꿔야하나요ㅠㅠ? Post.findAll안에서만 사용할 수 있어 like 카운트하는 법을 모르겠어요ㅠㅠ
5년 전
https://stackoverflow.com/questions/33900750/sequelize-order-by-count-association 이 링크대로 해야하는데 좀 복잡합니다. 복잡한 쿼리를 날릴 경우에는 SQL문을 사용하는 게 좋습니다.
5년 전
nodejs교과서 보면서 따라만들고 있는데 궁금한 것이 있습니다. 책을 통해서 노트앱을 만들어서 aws에 올렸는데 css와 같은 스태틱 파일의 변경이 있을 땐 따로 서버를 재시작 안해도 적용이 되고, pug나 express쪽의 변경이 있으면 서버를 껏다가 켜면(pm2 kill) 적용이 되더군요. sequelize.sync 때문인지 데이터베이스의 데이터도 그대로 유지되고요.
궁금한건 프로덕션 상태에서 데이터베이스의 변경(새로운 모델이나 모델의 컬럼)이 일어나면 어떻게 해야하나요? 책에서 데이터베이스를 생성할 때 마이그레이션을 이용한게 아니라서 데이터베이스의 수정사항이 있을 때 마이그레이션을 사용해도 되나 하는 의문점이 있어서요...
5년 전
마이그레이션을 이용하는 게 맞습니다. 그리고 models 내부의 파일을 수동으로 수정한 후 서버를 재시작해주어야 합니다.
6년 전
책의 lamba 나온거에 질문좀 드리겠습니다! 1. sharp 안쓰신 이유가 궁금합니다. 2. s3에서 데이터로딩과 업로드 할때 책에서는 어플리케이션 단계에서 인증(로그인 여부)을 하는데 실무에서도 이러한 방식으로 하는지 궁금합니다. 퍼블릭말고 뭐 따로설정하는게 없더라구요
6년 전
네 실무에서는 다 sharp 쓰는데요. 저는 aws를 써본 적이 없어서(gcp 사용자입니다) 람다에서 sharp가 기본 지원되는지를 몰랐습니다.
s3도 잘 모르긴 하지만요. Cloud Storage와 같다고 가정하겠습니다. 퍼블릭은 이미지 가져올 때 말씀하시는거죠? 만약 특정 권한을 가진 사용자만 볼 수 있게 하려면 퍼블릭을 해제하고 어플리케이션 단에서 접근해서 가져와야 합니다. CDN처럼 누구나 접근하게 하고 싶을 때 퍼블릭 주시면 됩니다(물론 CDN에서처럼 캐싱같은 걸 상세하게 조정하긴 힘듭니다).
6년 전
......이렇게 친절하시다니.. 열공할게요 제로초님 ㅠㅠ
6년 전
와....제로초 당신은 대체...
6년 전
소중한 정보 감사합니다!
6년 전
와~ 너무 감사합니다 ^^