HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🐣
프론트엔드 데브코스 3기 교육생
/
🍏
동영1팀
/
최종 프로젝트 - travel.zip
최종 프로젝트 - travel.zip
/
🕤
코드 컨벤션 / 기술 스택
🕤

코드 컨벤션 / 기술 스택

날짜
Feb 11, 2023

회의 안건

코드 컨벤션
커밋 컨벤션
기술 스택

기술 스택

  • 타입스크립트
  • Next.js - v13
  • react-query
  • recoil (다크 모드, 인증 관련 문제 혹은 궁금증이 생긴다면 비동기적으로 멘토님에게 질문하기)
  • MUI / Emotion
  • style lint, eslint
  • prettier: 디폴트값도 적어주기 → 디폴트값이어도 prettierrc에 적어주지 않으면 vscode 설정을 따라가기 때문에 팀원과 차이가 발생할 수 있다.
  • husky
  • post css
  • yarn
  • msw
  • nvm (lts: 18.14.0)
  • 테스트 코드
이런 것도 있다~
  • tsDocs
notion image
 
 

커밋 컨벤션

Git Commit Message

git commit -m 'feat: 로그인 비활성화 버튼 구현'
  • 내용 설명은 전부 한국어로 작성
    • → 커밋에 사용하는 용어가 일치되지 않아서 혼돈을 일으킬 수 있다.
  • 기능 구현 시 가능한 세부적으로 커밋지향 → 자기 상황에 따라서 (작은 이슈 작은 PR)
  • 제목: prefix: 명사 형태로 작성
  • 본문: 구현한 사항에 대해 간략하게 정리
    • 구체적인 설명이 필요하다면 PR 메시지에 작성한다.

Prefix

분류 헷갈리면 팀원에게 질문하기
feat
새로운 기능을 추가할 경우
fix
버그를 고친 경우
rename
파일 혹은 폴더명을 수정하거나 옮기는 경우
remove
파일을 삭제하는 작업만 수행한 경우
design
CSS등 사용자 UI 디자인 변경
comment
필요한 주석 추가/삭제/수정한 경우
docs
문서를 수정한 경우
style
코드 포맷(세미 콜론, prettier) 수정한 경우
refactor
프로덕션 코드 리팩토링(변수명 개선 등)
chore
빌드 태스크 업데이트, 패키지 매니저 설정 (실제 production 코드 변경은 없음) ex. package.json 변경, 그외 자잘한 것
!HOTFIX
급하게 치명적인 버그를 고쳐야하는 경우

코드 컨벤션

혜준
📑
팀 협업 방식 및 룰 세팅
💫
코드 컨벤션
명재
HIT 코드 컨벤션
You can't perform that action at this time. You signed in with another tab or window. You signed out in another tab or window. Reload to refresh your session. Reload to refresh your session.
HIT 코드 컨벤션
https://github.com/prgrms-fe-devcourse/FEDC3_HIT_NAYOUNG/wiki/HIT-코드-컨벤션
HIT 코드 컨벤션
 

타입관리

interface vs Type alias: Type 선언은 각자 자유도를 가지고 선언
→ interface: 확장 가능
→ type: 확장 불가능
→ typescript는 type의 기능이 많고 강력한데 interface로 보수적으로 사용가능하다.
타입 별칭 | 타입스크립트 핸드북
타입스크립트를 가장 쉽고 빠르게 배우는 방법
타입 별칭 | 타입스크립트 핸드북
https://joshua1988.github.io/ts/guide/type-alias.html#타입-별칭의-특징

네이밍

  • 줄임말 지양 (btn → button)
    • 사전에 있는 줄임말은 허용(지양)
      • →줄임말 쓰면 내가아닌 다른 개발자가 줄임말을 봤을때 의미를 한번에 알아보기가 힘듬
  • 함수
    • 함수 이름만 보고 무슨 역할을 하는지 알 수 있도록 작성
      • →함수 이름이 난해하면 해당 함수가 어떤 역할을 하는지 함수 내부로직을 확인해야함
  • 이벤트 핸들러
    • 현재 컴포넌트 이벤트 핸들러 - handle~ : handleChangeInputValue
    • props로 받는 이벤트 핸들러 - on + eventName : onChangeInputValue
ex)
생각하지 못했던 관점
react query useQuery 가져올 때 구조 분해 할당을 사용
→ isLoading을 꺼냈다면 이게 어디서 온 isLoading인지 명확하게 알기 어렵다(?)
→ 만일 useQuery가 두 개고 둘 다 구조 분해 할당을 사용했다면 isLoading에 별칭을 붙여야 하는데 굳이 그렇게 하기 보다는 그냥 구조 분해 할당을 사용하지 않는 방법도 있음 (ex. useQueryA.isLoading)

컴포넌트

  • 컴포넌트 정의는 함수 표현식으로 사용 (arrow function)
    • export default 에대한 관점
      export를 사용시 “선언된 곳에서 이름이 의미상으로 크게 변경됐는데 사용하는 곳에서는 반영이 자동으로 되지 않으니 문제가 발생한다” 라는 의견이 나왔지만 이경우에는 해당 부분의 이름 설정이 잘못되었다고 생각됨. 따라서 무지성 export default는 비판적인 관점이었음
  • 비지니스 로직과 UI 로직을 분리해야 할 정도의 코드 길이 로 분할
    • → 관심사를 분리할 수 있다.
  • type → component → style 순서
    • → 컴포넌트 파일을 눌렀을때 주요 관심사는 style보다는 component의 생김새일 것이다.
      따라서 우선순위가 낮은 style을 가장 아래에 쓰자
  • 폴더 밑에 index.ts 만들고 폴더 안의 컴포넌트들 export
    • → import 구문을 간략화 하고 하나의 파일에서 모두 불러오기가 가능하다.

폴더명

  • 컴포넌트 폴더만 대문자로 시작
    • → 이거 무슨 얘기였지…
 
<button onClick={handleClick}></button> <List onClick={onClick}></List>
export default function Icon() {} 처럼 export default를 같이 사용할 수 있다. 하지만 이런 장점을 빼고는 이미 다른 부분에서 arrow-function을 사용하는데 일치를 안시킬 이유가 없기때문에 사용
interface {} const Component = (:Props) => { Container } export default Component const Container = styled.div``
import Avatar from 'components/Avatar/Avatar' import Avatar2 from 'components/Avatar/Avatar' => import { Avatar, Avatar2 } ffrom 'components/Avatar'
Avatar ㄴAvatar.tsx ㄴindex.ts