file & folder style
Naming
기본 파일 이름 규칙
모든 파일의 네이밍은 기본적으로 kebab-case 로 작성합니다. 가장 가독성이 좋습니다.
React 관련 파일 이름 규칙
단, react 와 관련 있는 파일은 해당 변수의 네이밍 규칙을 따라갑니다.
코드 분리
파일을 폴더로 변경하기
코드가 길어지면 코드 분리가 필요합니다. 코드 분리시, index 파일과, 본문 파일과 함께 폴더구조로 변경합니다.
일관된 Sub-Folder 로 관리하기
분리할 파일을 서브폴더로 분류해서 분리합니다.
서브폴더 분류는 일반적으로 src 폴더에서 사용하는 폴더(constants, types, utils, hooks, components, context....)로 구분을 권장합니다.
하위 폴더의 파일하나의 구현사항이 길어진다면 해당 파일 역시 폴더로 변환 후 하위 폴더를 가질 수 있습니다.
전역적으로 사용되는 파일은 공용(최상단) 폴더로 분리하기
만약 여러 파일에서 사용되는 코드가 있고, 그 범위가 하위코드에만 국한되지 않는다면 최상단 레벨로 파일 분리를 고려해 보세요.
예를들어 PostCard 컴포넌트에서 사용되는 format-date 같은 함수는 최상단 utils 폴더가 더욱 적합합니다.
파일 관리
@ 태그로 하나의 주제로 폴더를 묶기
sub 폴더가 하위 모듈을 관리하는 방법이라면 @ 폴더는 연관된 모듈을 방법입니다.
코드분리를 위한 폴더는 하위 모듈을 포함한 하나의 모듈입니다. 반면, @ 폴더는 모듈의 집합입니다. 모듈의 집합임을 명시적으로 알 수 있게 폴더 앞에 @ 태그를 붙여주세요.
폴더 구조: Pages
SEO 에 유리한 url 설계하기
Next.js는 pages 폴더 내에 파일 구조로 url을 생성합니다. url 은 seo 에 영향이 있기 때문에, seo 에 유리한 url 을 만드는것이 중요합니다. pages 폴더로 페이지 경로를 설정할때, 아래사항을 유의해 주세요
kebab case 사용
명확한 의미의 문자 사용 및 특수문자 사용 금지
계층 관계 나타내기
폴더 구조: Containers
pages 폴더와 1:1 구조로 생성하기
각 페이지에 들어 갈 React 컴포넌트의 최상단 파일들을 모아놓으며 Components 폴더와 동일한 규칙을 지닙니다.
폴더 구조: Apis
스웨거 태그 기준으로 폴더 생성하기
swggger tag 란? api 경로를 그룹화 한 것 입니다. 아래 사진에선 estimate 에 해당합니다.
swagger 문서와 구조를 동일하게 가져감으로써 팀원들이 코드를 찾기 더욱 수월하게 해보세요
dto 폴더와 model 폴더를 활용하기
api 를 정의할땐 type 선언이 필수적입니다. 특히 응답값 같은 경우는 json 을 parse 하는 과정에서 any 타입으로 변하기 때문에, 더욱더 정확한 타입이 요구되는데요. api 관련 타입을 정의할 땐 dto 와 model 폴더를 활용해서 타입을 정의해주세요.
React Query Hook 을 api 파일과 같은 폴더에 포함하기
react query 는 일반적으로 네트워크 요청시에 사용하므로 hook 이지만 apis 폴더에서 관리합니다. 데이터를 가져오는 역할인 useQuery
를 사용하는 경우는 .query
로, useMutation
을 사용하는경우는 .mutation
으로 구분해 주세요
폴더 구조: utils
되도록 최상단 utils 폴더는 함수 하나당 하나의 파일을 갖도록 해주세요
전역 레벨에서 사용되는 함수는 재사용성과, 팀원들이 사용할 가능성이 높은 함수입니다. 어떤 함수들이 정의 되었는지 한눈에 확인 할 수 있도록 한 함수당 한 파일을 권장합니다.
폴더 구조: types
되도록 최상단 types 폴더는 타입 하나당 하나의 파일을 갖도록 해주세요
전역 레벨에서 사용되는 타입은 재사용성과, 팀원들이 사용할 가능성이 높은 함수입니다. 어떤 타입들이 정의 되었는지 한눈에 확인 할 수 있도록 한 함수당 한 타입을 권장합니다.
폴더 구조: test code
테스트 코드는 __test__ 폴더에서 작성해주세요
소스 파일과 분리해주세요
테스트 코드 파일은 확장자 전에 .test 를 포함해주세요
jest 가 파일 이름을 기준으로 테스트 코드를 인식할 수 있습니다.
Last updated