📟

팀 컨벤션

 
 

브랜치 네이밍 (전략 : 트렁크 기반)

  • 꼭 상위 브랜치(위에서 login) 먼저 만드셔야 합니다!
 
  • trunk : 기능 단위로 대외적으로 합치는 용도 // 메인 플젝 끝나고도 평생 Pull 땡기지 않는다
  • dev : 로컬 테스트 등 기능 테스트 용 -> 여기서 테스트 후 정제된 코드가 trunk로 간다. // 메인 플젝 끝나고도 평생 Pull 땡기지 않는다
  • feat/login : 프론트/백 코드만 모아두는 곳 (최신화)
  • 기능 : fe/be에서 파생되고 fe/be로 넣는 기능 브랜치
 
 

커밋 컨벤션

이름
내용
feat
새로운 기능 추가
fix
버그 수정
docs
문서 관련
style
코드 스타일 변경 (코드 포매팅, 세미콜론 ; 누락 등) 로직 수정이 없는 경우
design
사용자 UI 디자인 변경 (CSS 등)
test
테스트 코드, 리팩토링 테스트 코드 추가
refac
코드 리팩토링
build
빌드 관련 작업
ci
CI 설정 파일 수정
perf
성능 개선
chore
빌드 업무 수정, 패키지 매니저 수정 (gitignore 수정 등) , 주석 추가/삭제 외 잡다한 업무
rename
파일 혹은 폴더명을 수정만 한 경우
remove
파일을 삭제만 한 경우
!HOTFIX
치명적인 버그 수정
 

PR 컨벤션 (PR 후 merge되면 브랜치 삭제!! 꼬옥!)

 

1. 글 작성하기

  • 제목 (# , 띄어쓰기 후 제목 입력)
    • [FE] 기능브랜치명-이슈번호: 기능설명 (아래 참고)
notion image
  • 구현한 기능 (## 뒤 코드리뷰에 도움이 되는 기능 설명)
    • 프론트엔드는 화면 gif 첨부 필요시 권장
    • 아래 예시 참고 (또는 링크 : )
 
notion image
 

2. 오른쪽 설정해주기

  • Reviewers : FE, BE 나머지 멤버 추가
  • Assignees : 자기자신 추가
  • Labels : 해당 PR 관련 라벨 추가 (FE, feat 등)
  • Project : Zerohip 추가
  • Milestone : 해당 스프린트 추가
  • 글 등록 후, 다시 들어가서 development : 작성했던 이슈와 연결
  • 아래 예시 그림 참고 (리스트형)
notion image
  • 아래 예시 그림 참고 (본문형)
notion image

코딩 컨벤션

공통


종류
표기법
조합
비고
변수
camelCase
명사 ex) userDate
Boolean 변수
camelCase
is + 단어 ex) isHuman
함수(메소드)
camelCase
동사 + 명사 ex) getUserData
handle~
클래스/인터페이스
PascalCase
명사 ex) Movie
이미지명
kebab-case
상수
UPPER_CASE
모두 대문자
폴더명
소문자 (-)
TS 코드 파일
camelCase
Java 파일 React 컴포넌트
PascalCase
 
 

디벨롭 머지 방식

  • pr올렸을 때 만장일치 approve해야 merge가능 (권장)
  • merge는 담당자가 최종적으로 하기
  • 머지할 때 squash and merge 사용!! >> Commit 깔끔하게 관리 가능
 
 

웹 접근성을 위한 페이지 제목 추가 (FE)

  • h1은 저희의 웹앱 이름 (주로 로고와 함께)
  • h2는 디자인상 페이지 제목이 보이지 않기 때문에 CommonStyles.tsxBlindTitle 을 추가 후 페이지 상단에 입력해주세요. 디자인상 화면에 출력되지 않아도 스크린 리더기는 읽어줍니다. 😁
 
// CommonStyles.tsx BlindTitle: tw.h2` absolute w-[1px] h-[1px] m-[-1px] overflow-hidden `,
notion image
 
일단 여기까지!
 
 

S-dot 컨벤션은 언제 사용하는가? (FE)

  • .tsx 내부에서 모든 컴포넌트를 만들 때 사용
  • 단, 다음과 같은 경우 S-dot 컨벤션을 사용하지 않아도 된다.
    • (CommonStyles를 제외한) import된 컴포넌트 (=기능 컴포넌트)
    • .map() 내부에서 사용된 컴포넌트
 
 
 
 
 

etc

폴더 구조
 
public |-- images | |-- icon // 아이콘 파일이 들어가는 폴더 | |-- image // 이미지 파일이 들어가는 폴더 |-- data // dummy json src |-- components // 재사용 가능한 컴포넌트가 들어가는 폴더 |-- pages // 페이지를 구성하는 컴포넌트가 들어가는 폴더 |-- hooks // custom hook |-- styles // 공통 스타일 |-- contants // 상수, enum데이터 |-- types // type 관련 폴더 |-- redux // 리덕스 관련 폴더 |-- utils // 유틸 함수 |-- services // axios 통신을 위한 함수가 들어가는 폴더
 
 
 
컴포넌트 타입
  • 컴포넌트는 함수 선언식으로 선언한다.
  • 함수형 컴포넌트 사용. 클래스형 컴포넌트 사용 불가
이벤트 핸들러 네이밍
  • handle+기능 내용 카멜 케이스 ex) handleSubmitUserInfo
비동기 코드
  • 가능한 callback이나 promise 대신 async/await를 사용한다.
  • 비동기 코드는 반드시 try-catch로 에러 처리를 해줘야 한다.
  • 비동기 코드가 사용될 경우 다른 사용자들이 이해할 수 있도록 주석을 단다.
주석
  • /** */ 로 주석 처리
  • 주석이 필요한 코드 상단에 주석 작성
  • 주석은 최대한 명확하게 작성
    • /** * * @param name 이름입니다. * @param age 나이입니다. * @returns 나이와 이름을 합하여 문자열을 출력합니다. */ const hello = (name, age) =>{ return `${age}살 ${name}입니다.` }
변수, 함수 네이밍
  • 기본적으로 AirBnB Naming Convention을 따르며, 변수는 명사로 6단어 이하로 사용한다.
  • 변수의 복수형은 뒤에 s를 붙인다.
  • 함수의 앞에는 get, set등의 동사를 붙여 함수의 기능을 표시한다.
함수 선언 방식
  • 모든 함수는 화살표함수를 사용한다.
  • 컴포넌트는 함수 선언식으로 선언한다.
Export
FE 전략
  • 변수명과 함수명을 정할 때는 카멜케이스를 사용 ex)userName,scrollLock,newTab
 
  • 라이브러리를 추가로 설치시 디코방에 기록.
  • git에서 pull한 이후에 npm install을 실행. 이후는 다른 사람이 라이브러리를 추가 설치시 종속성이 저장되어서 install 명령어만으로 설치가능
  • 함수명은 동사+명사를 사용. ex)getName,fetchApi.
  • 재할당이 불가능하면 const를, 재할당이 가능한 변수는let을 사용하여 선언한다.
  • var는 절대로 사용하지 않도록 한다.
  • 함수는 화살표 함수로 작성한다. (권장 사항)
  • 컴포넌트 간에 종속성이 존재하는 경우(props로 데이터를 받는 경우), 서로 상의해서 props의 이름과 종류를 결정
  • 컴포넌트 확장자는 .jsx 로 한다
  • css파일은 분리해서 작성. 이름은 사용할 '컴포넌트명.style.js'명명
  • 파일명은 파스칼 케이스를 사용한다. ex)FileName
  • 폴더명은 소문자로 한다. ex) folder-name
  • 폴더명을 로컬에서 수정하고 push하면 레포에서는 변화가 없다. 따라서 폴더명을 변경하고 싶으면 github사이트에서 직접변경. 단, 변경시 경로가 꼬일 수 있기에 상의가 필요.
  • import시 경로는 상대경로로 설정. 이렇게 하면 배포시 위험 할 수 있음 ex)../././
  • 단, public폴더에 이미지를 저장. 사용하는 경로는 ./이미지파일명.확장자.
    • ex)만약 public폴더의 assets에 이미지가 존재한다면, ./assets/이미지파일명.확장자
  • 상수는 대문자로 작성하고 띄어쓰기는 _를 사용한다. ex)const BASE_URL = 'http://localhost:8080/hello', const COUNT=20;
 

import 순서

  1. 리액트 관련 (use~)
  1. 컴포넌트 (Component)
  1. CSS

주석

  • // : 일반적인 경우
  • /* */ : 특정 코드군의 타이틀 역할 or 주석이 엄청 길 경우
/* 아래부터는 이러이러한 용도로만 쓰이는 함수입니다 */ const a = 2; // 코드와 주석 사이는 2칸 스페이스!

띄어쓰기

{ 내용 } // O {내용} // X let a = 2; // O let a=2; // X a, b // O a , b // X a,b // X [가, 나, 다] // O [가,나,다] // X
종류
표기법
조합
비고
이벤트 핸들러
camelCase
handle + 명사 + 동사 (ex. handleThreeTabClick)

폴더구조

client ㄴpublic ㄴassets(사용할 이미지) ㄴsrc ㄴcommon ㄴavatar.js ㄴbutton.js ㄴcard.js ㄴcomponents ㄴheader.js(상단) ㄴnav.js(좌측) ㄴfooter.js(하단) ㄴaside.js(우측) ㄴpages ㄴquestions.js(전체질문) ㄴquestion.js(질문세부) ㄴhome.js ㄴmypage.js ㄴlogin.js ㄴsignup.js ㄴaskquestion.js(새질문) ㄴstyles(글로벌 스타일) ㄴhook(hook 모음) ㄴreducer(redux) ㄴutil(함수) ㄴindex.js ㄴApp.js ㄴ.env(주소용)
 
스택오버플로우에 질문을 적극적으로 올리기. 올리는 법은 한글로 질문을 작성 후,gpt에 영어로 변환하라고 명령하면됨.
gpt와 이전에 코드스테이츠의 과제물을 참고.
 
BE 전략
  • 패키지 명은 소문자로 작성하며, 띄어쓰기는 언더바(_)를 사용한다.
    • ex) example_package
  • 클래스, 인터페이스 파일 명은 명사형으로 작성하며, 파스칼 케이스를 따른다.
    • ex) ExampleClass.java
  • 변수 명은 명사형으로 작성하며, 카멜 케이스를 따른다.
    • ex) private final String exampleVariable;
  • 메서드 명은 동사형으로 작성하며, 카멜 케이스를 따른다.
  • 상수는 대문자로 작성하며 띄어쓰기는 언더바(_)를 사용한다.
    • ex)private static final String EXAMPLE_CONSTANT_VARIABLE = "Example";
  • 매직넘버는 상수로 작성하여 사용하며, 매직넘버 자체로는 사용하지 않는다.
  • 인스턴스 변수는 불가피한 경우가 아니라면 객체 타입을 맞춰 정렬한다.
    • 인스턴스 변수는 개념적으로 구분하여 띄어쓰기를 사용한다. 객체 타입이 다르더라도, 유사한 개념의 변수라면 띄어쓰기로 구분하지 않는다.
public class ExampleClass{ private ExampleInjectedClass1 injected1; private ExampleInjectedClass2 injected2; private String varible1; private String varible2; private long varible3; private double varible4; }
  • 들여쓰기는 탭을 사용한다. 스페이스는 사용하지 않는다.
  • 클래스 내의 작성 순서는 상수 - final 인스턴스 변수 - 인스턴스 변수 - 메서드 순으로 정한다.
    • 이 때, 상수는 다른 인스턴스 변수와 구분하기 위해 띄어쓰기를 작성한다.
public class ExampleClass { private static final String EXAMPLE_CONSTANT_VARIABLE = "Example"; private static final int EXAMPLE_MINIMUM_VALUE = 0; private final ExampleRepository exampleRepository; private final ExampleService exampleService; private long id; private String name; private String password; }
  • public 메서드를 private 메서드보다 우선하여 작성한다.
    • 단, 접근자 / 설정자 메서드(getter / setter)는 예외적으로 클래스 최하단에 작성한다.
 
 
 
 

코드 리뷰 방식