Skip to content

11.7 월 회의록

Min-h-96 edited this page Nov 7, 2022 · 7 revisions

컨벤션

Git 브랜치 전략 - Git flow + PR

이유

  • 브랜치의 구분을 명확히 하기 위해서

종류

  • main
    • 개발이 완료된 dev 브랜치를 merge 하여 배포 가능한 상태만을 관리하는 브랜치
  • dev
    • 개발이 진행되는 브랜치, 이 브랜치를 기반으로 feat, refactor 등으로 파생됩니다.
    • feat/[기능명][이슈번호(optional)]
      • 새로운 기능을 추가하고자 할 때, 사용하는 브랜치입니다.
    • refactor/[기능명][이슈번호(optional)]
      • 리팩토링이 이루어지는 브랜치입니다.
    • fix/[기능명][이슈번호(optional)]
      • 버그를 수정하기 위한 브랜치입니다.
    • design/[기능명][이슈번호(optional)]
      • 디자인 관련 작업을 하는 브랜치입니다.

코딩 컨벤션

대소문자 컨벤션

  • camelCase
    • 일반적인 함수(hook 포함)
    • 일반적인 변수
  • PascalCase
    • 컴포넌트 관련한 파일, 폴더, 명
    • class 명
  • snake_case
    • DB
    • 상수(영문 대문자 사용)
  • kebab-case
    • html 요소

변수 네이밍

  • 배열의 이름은 복수형으로 만듭니다.
// 예시
  • 반환 값이 boolean 형인 함수나 변수는 is 또는 has 로 시작합니다.
  • 매직넘버 사용 금지(변수나 상수로 분리)

순서 컨벤션

  • constlet 보다 상단에 작성합니다.
  • 변수는 사용 시점에 선언 및 할당합니다.
  • 선언과 할당을 동시에 하는 변수를 선언만 하는 변수보다 먼저 선언합니다.
  • import 순서
    • 외부모듈 -> 내부모듈 -> style -> assets 순서로 작성합니다.
    // 예시
    
    • 선언 그룹 사이에 공백을 둡니다.

.prettierrc & eslint

  • 지윤이 가져다 쓰기

프론트엔드 함수 형식

  • 선언형 (function foo() {})
    • Hook 등의 로직
    • 유틸 함수 등, 통상적인 함수들
  • 화살표 함수 (foo = () ⇒ {})
    • 컴포넌트
    • 콜백 함수
  • 클래스 (class Foo {})
    • 생성자로 인스턴스를 만들어야 할 때 (this가 필요할 때)

Router 컨벤션

<Route path='/auth'>
   <Route path='/github' />
   <Route path='login' />
</Route>
  • 부모-자식 라우터가 생길 것을 고려하여 컴포넌트 형식으로 작성
    • createBrowserRouter을 사용하면 부모-자식간 상관관계가 직관적이지 않을 우려 있음?

커밋 컨벤션

  • 제목은 확실히 적어줍니다.
  • 본문은 optional.
# <타입>: <제목> (#1)

##### 제목은 최대 50 글자까지만 입력 ############## -> |


# 본문은 위에 작성
######## 본문은 한 줄에 최대 72 글자까지만 입력 ########################### -> |
# --- COMMIT END ---
# <타입> 리스트
#   feat    : 기능 (새로운 기능)
#   fix     : 버그 (버그 수정)
#   refactor: 리팩토링
#   style   : 스타일 (코드 형식, 세미콜론 추가: 비즈니스 로직에 변경 없음)
#   docs    : 문서 (문서 추가, 수정, 삭제)
#   test    : 테스트 (테스트 코드 추가, 수정, 삭제: 비즈니스 로직에 변경 없음)
#   chore   : 기타 변경사항 (빌드 스크립트 수정 등)
# ------------------
#     타입은 영어로 작성하고 제목과 본문은 한글로 작성한다.
#     제목 끝에 마침표(.) 금지
#     제목과 본문을 한 줄 띄워 분리하기
#     본문은 "어떻게" 보다 "무엇을", "왜"를 설명한다.
#     본문에 여러줄의 메시지를 작성할 땐 "-"로 구분
#     관련된 이슈번호는 제목 맨 뒤에 추가한다. ex. (#1)
# ------------------

폴더 구조

- client
|- public
   |- assets
      |- images # png jpg
      |- svgs # svg export
   |- index.html
|- src
   |- common # 공용 컴포넌트 (2개 이상의 페이지에서 같이 쓰임)
      |- styles
         |- colors.ts # 색상값
         |- sizes.ts # border size, box size 등 사이즈 공용값
         |- reset.css # 기본 스타일 리셋
      |- hooks
      |- utils
      |- components
   |- pages
      |- TestPage1
         |- TestComponent1 # TestPage1 에서만 사용되는 컴포넌트
         |- TestComponent2
      |- TestPage2
   |- store # 전역 상태관리 상태값들 (redux dispatch 또는 recoil atom)
      |- testState1
         |- atoms.ts
         |- selectors.ts
   |- services # axios 또는 fetch 함수들
      |- fetchTest.ts
   |- types # 타입 값들
      |- test.d.ts
   |- api.ts # axios 를 쓰게 된다면 설정값
   |- App.tsx # 일단은 라우터도 여기로
   |- index.tsx # React가 읽어들이는 엔드포인트
|- prettierrc.json
|- eslintrc.json
|- tsconfig.json
|- package.json
|- .env
- server
|- app.ts
|- 도메인 별로 폴더
|- user // 예시
   |- userController
   |- userService
   |- userRepository
|- utils
   |- ...

기술 스택

언어 - TypeScript

  • 프론트와 백에 같은 언어를 사용함으로써, 기본적인 문법을 통일함으로써 더욱 원활한 소통을 할 수 있습니다.
  • 코드 작성 시 매번 타입을 결정해야 하기 때문에 번거롭고 코드량이 증가하지만, 정적 타입 언어로 코드 작성 단계에서 에러를 체크할 수 있습니다. 이 장점으로 버그를 발견하고, 해결하는 시간을 단축시킬 수 있습니다.
  • any 는 최대한 사용하지 않습니다.

패키지 매니저

Yarn Berry

FE

React

  • 커뮤니티가 큽니다.
    • Best practice 를 찾기가 쉽다고 생각합니다.
    • 상용화된 라이브러리가 많습니다.
  • Angular, Vue 와 달리 React 는 라이브러리기 때문에, JavaScript 언어를 알고 있다면 프론트엔드 지식이 부족해도 이해하기 수월합니다. -> 풀스택 작업이 더 수월해집니다.
    • JSX 문법 덕분에 HTML 과 JS 코드 작성이 효율적입니다.
  • Why use react

redux toolkit or recoil(고민 중)

emotion css

  • HTML 태그를 직관적으로 인지하기 쉽습니다. 따라서 Semantic 하게 태그를 작성할 수 좋습니다.
  • Javascript (또는 Typescript) 파일 내에 CSS를 작성할 수 있어 편리합니다

BE

Nest.js

  • 백엔드 서버를 구현하기 위한 기능이 Nest.js 프레임워크 자체에 포함되어 있습니다. -> 짧은 기간에 서버를 만들기 수월하다고 생각했습니다.
  • Nest.js 는 구조가 정해져 있어서 협업을 진행할 때 일관성을 유지할 수 있습니다.
  • 새로운 학습을 해야되서 시간적 손해가 있을 수 있지만, 공식 문서가 잘 정리되어있는 편이기 때문에 그 부분에 대한 부담을 해소할 수 있다고 생각합니다.
  • Why use Nest.js
  • Nest.js DOCS

Jest + Cypress

DB

  • 기능을 정하고 정하는 걸로

Production

  • Gihub Action
  • 배포하는 클라우드(ncloud vs firebase vs aws)

디자인

일단은 웹으로만(+ 추후 시간적 여유가 있으면 반응형으로)

얼리버드

프로젝트

개발일지

스프린트 계획

멘토링

데일리 스크럼

데일리 개인 회고

위클리 그룹 회고

스터디

Clone this wiki locally