본 문서는 프론트엔드 개발팀을 위한 규칙과 가이드라인을 다룹니다. 프론트엔드와 백엔드 팀이 함께 준수해야 할 공통 사항과 프론트엔드 팀만의 특화된 규칙을 모두 포함하고 있습니다.
-
issue 생성 및 PR을 통해 본인이 구현한 부분에 대한 기록을 남겨야 합니다.
-
예외처리는 항상 잘 만들어두기 (code, message, data)
-
개발 기간 : 9/30 ~ 11/24
-
스프린트 (3일간격) 진행 (해올 것을 정해서 해오기)
-
수요일, 토요일
-
단위 테스트 작성(service 메소드 별로) : Kotest 사용
-
다른 사람이 알아보기 쉽도록 주석처리해야 합니다. (controller, service 메서드마다)
- javadoc 형식 https://jake-seo-dev.tistory.com/59
-
issue 생성 및 PR을 통해 본인이 구현한 부분에 대한 기록을 남겨야 합니다.
-
테스트 및 원할한 서버 운영을 위한 로그를 작성해야 합니다.(에러나 운영에 필요한 로그. 검색시 검색어와 같은 로그)
-
예외처리는 항상 잘 만들어두기 (code, message, data)
-
개발 기간 : 9/30 ~ 11/24
-
스프린트 (3일간격) 진행 (해올 것을 정해서 해오기)
- 수요일, 토요일
- Next.js: 서버 사이드 렌더링(SSR)과 정적 사이트 생성(SSG)을 지원하여 페이지 로딩 속도와 SEO를 최적화합니다. 이를 통해 웹 애플리케이션의 성능과 사용자 경험을 크게 향상시킬 수 있습니다.
- TypeScript: 강력한 타입 검사와 정적 타입 체킹을 제공하여, 개발 중 발생할 수 있는 런타임 오류를 사전에 방지하고 코드의 전반적인 품질을 높입니다. Next.js와의 통합을 통해 오류를 조기에 감지하고, 대규모 코드베이스의 관리를 용이하게 해줍니다.
- React: UI 라이브러리로, 컴포넌트 기반 아키텍처를 통해 재사용 가능한 UI를 구축할 수 있으며, Next.js와 함께 서버 및 클라이언트에서 효율적으로 렌더링을 처리할 수 있습니다.
- CSS/SCSS: 주로 Tailwind CSS를 사용하여 스타일링을 처리하지만, 복잡한 커스터마이징이나 특수한 스타일링 요구사항에 대응하기 위해 여전히 CSS/SCSS가 사용될 수 있습니다. Tailwind CSS는 유틸리티 클래스를 통해 신속하고 효율적인 스타일링을 가능하게 하지만, 프로젝트에 따라 CSS나 SCSS로 보완해야 할 때도 있습니다.
- Tailwind CSS: 유틸리티 기반의 CSS 프레임워크로, 미리 정의된 클래스를 사용해 직관적이고 빠른 스타일링이 가능합니다. 별도의 CSS 파일 없이 HTML에서 직접 스타일을 적용할 수 있어 개발 생산성을 극대화하며, 필요 시 커스터마이징이 용이합니다.
- ESLint와 Prettier: 코드 스타일을 자동으로 검사하고 일관성을 유지하며, 코드의 품질과 가독성을 높여줍니다.
- Husky: Git hooks를 활용해 코드 푸시 시 자동으로 코드 검사를 실행하여 협업 중 코드 품질을 보장합니다.
- Vercel: Vercel의 CI/CD 파이프라인은 자동화된 빌드 및 배포를 제공하여 개발 효율성을 극대화합니다. 간단한 설정으로 코드 변경 사항이 실시간으로 배포되며, Next.js 애플리케이션 배포에 최적화된 환경을 제공합니다.
branch는 작업 단위 & 기능 단위로 생성된 issue를 기반으로 합니다. 그러나 작은 수정 작업은 이슈 없이도 브랜치를 생성할 수 있습니다.
-
Branch Naming Rule:
- 기능 개발 또는 중요한 작업: 이슈를 먼저 생성하고 브랜치를 작성합니다. 이슈 번호와 작업의 도메인을 조합하여 브랜치 이름을 정합니다.
- 예:
feature/25-ui-component
- 예:
- 작은 수정 작업: 문서 수정, 간단한 스타일링 변경 등 사소한 작업은 이슈 없이도 브랜치를 생성할 수 있습니다.
- 예:
docs/update-readme
,style/update-button-styles
- 예:
Prefix 설명:
feature
: 새로운 기능을 개발할 때 사용합니다.bugfix
: 버그를 수정할 때 사용합니다.docs
: 문서를 수정할 때 사용합니다.config
: 설정 파일 또는 환경 구성을 변경할 때 사용합니다.
- 기능 개발 또는 중요한 작업: 이슈를 먼저 생성하고 브랜치를 작성합니다. 이슈 번호와 작업의 도메인을 조합하여 브랜치 이름을 정합니다.
- 파일명 규칙: 파일 및 폴더 이름은 일관된 네이밍을 유지해야 하며, 팀원 간 파일명을 쉽게 인식할 수 있도록 해야 합니다.
- 컴포넌트 파일:
- 컴포넌트 파일명은 PascalCase를 사용합니다.
- 예시:
Button.tsx
,UserProfile.tsx
- 일반 파일:
- 일반적인 유틸리티 함수, 설정 파일 등은 camelCase를 사용합니다.
- 예시:
formatDate.ts
,fetchData.ts
- 폴더 이름:
- 폴더 이름은 kebab-case로 작성하며, 소문자만 사용합니다.
- 예시:
user-profile/
,button-styles/
- CSS/SCSS 파일:
- 스타일 파일은 kebab-case로 작성합니다.
- 예시:
header-styles.scss
,button.scss
- 컴포넌트 파일:
Pull Request 작성 시 PR 제목과 내용 모두 중요합니다. PR 제목은 작업의 간결한 설명을, 내용은 변경 사항에 대한 구체적인 설명을 담아야 합니다.
- Pull Request: develop & main branch로 merge할 때에는 pull request가 필요합니다. PR 제목에는 간결하고 이해하기 쉬운 설명을 포함해야 합니다.
- Pull Request Naming Rule:
[<Prefix>] <Description>
의 양식을 준수하되, prefix는 commit message convention과 일관성을 유지합니다.
- 새로운 UI 컴포넌트 추가
- Pull Request Title:
[feat] 새로운 버튼 컴포넌트 추가
- Pull Request Title:
- 환경 설정 파일 수정
- Pull Request Title:
[chore] 환경 설정 파일 업데이트
- Pull Request Title:
- 버그 수정
- Pull Request Title:
[fix] 드롭다운 메뉴 버그 수정
- Pull Request Title:
- 문서 수정 작업
- Pull Request Title:
[docs] 프로젝트 README 업데이트
- Pull Request Title:
- 관련 이슈: 작업한 이슈 번호를 명시합니다.
- 작업 내용: 구현된 기능이나 변경 사항을 간략하게 설명합니다.
- 스크린샷: 변경된 UI나 기능이 있다면, 스크린샷을 첨부합니다.
- 추가 사항: 논의가 필요한 사항이 있으면 추가로 작성합니다.
- 리뷰 요구 사항(선택): 특별히 검토가 필요한 사항이 있으면 적어주세요.
[<Prefix>] #<Issue_Number> <Description>
의 양식을 준수합니다. 커밋 메시지는 코드 변경 사항을 명확하게 전달할 수 있도록 간결하고 구체적으로 작성해야 합니다.
- feat: 새로운 기능 추가
- 예시:
[feat] #11 버튼 컴포넌트 구현
- 예시:
- fix: 버그 수정
- 예시:
[fix] #10 UI 렌더링 오류 수정
- 예시:
- docs: 문서 수정
- 예시:
[docs] #14 README 파일 업데이트
- 예시:
- style: 코드 포맷팅, 세미콜론 누락 등 스타일 수정
- 예시:
[style] #23 코드 포맷팅 적용
- 예시:
- refactor: 코드 리팩토링 (기능 변화 없음)
- 예시:
[refactor] #15 컴포넌트 구조 개선
- 예시:
- chore: 기타 자잘한 수정 (빌드 스크립트 수정, 패키지 관리 등)
- 예시:
[chore] #21 패키지 의존성 업데이트
- 예시:
- test: 테스트 코드 추가 또는 수정
- 예시:
[test] #18 버튼 컴포넌트 테스트 추가
- 예시:
- perf: 성능 향상 관련 작업
- 예시:
[perf] #20 렌더링 최적화 작업
- 예시:
- rename: 파일 및 폴더명 수정
- 예시:
[rename] #22 컴포넌트 파일명 수정
- 예시:
- enhancement: 기존 기능의 개선 또는 새로운 기능 추가 (사용자 경험, 성능 등)
- 예시:
[enhancement] #25 사용자 피드백 반영하여 버튼 디자인 개선
- 예시:
- 설명: 버그에 대한 간단한 설명.
- 재현 방법: 버그를 재현할 수 있는 단계별 설명.
- 예상 결과: 기대했던 동작을 명시.
- 환경: OS, 브라우저 등의 환경 정보.
- 설명: 제안하는 기능에 대한 간략한 설명.
- 동기: 이 기능이 필요한 이유.
- 예상되는 기능: 예상되는 기능의 동작 방식 설명.
- Slack: 실시간 커뮤니케이션을 위한 협업 툴.
- Notion: 문서화, 일정 관리, 작업 관리를 위한 툴.
- Gather: 가상 오피스 환경에서 팀원들이 실시간 협업할 수 있는 툴.
본 문서는 백엔드 개발팀을 위한 규칙과 가이드라인을 다룹니다. 프론트엔드와 백엔드 팀이 함께 준수해야 할 공통 사항과 백엔드 팀만의 특화된 규칙을 모두 포함하고 있습니다.
- 단위 테스트 작성(service 메소드 별로) : Kotest 사용
- 다른 사람이 알아보기 쉽도록 주석처리해야 합니다. (controller, service 메서드마다)
- javadoc 형식 https://jake-seo-dev.tistory.com/59
- issue 생성 및 PR을 통해 본인이 구현한 부분에 대한 기록을 남겨야 합니다.
- 테스트 및 원할한 서버 운영을 위한 로그를 작성해야 합니다.(에러나 운영에 필요한 로그. 검색시 검색어와 같은 로그)
- 예외처리는 항상 잘 만들어두기 (code, message, data)
- 개발 기간 : 9/30 ~ 11/24
- 스프린트 (3일간격) 진행 (해올 것을 정해서 해오기)
- 수요일, 토요일
-
- Kotlin은 간결하고 직관적인 문법으로 코드 생산성을 높이며, Null 안정성을 제공하여 오류를 사전에 방지
- Spring Security는 강력한 인증 및 권한 부여 기능을 제공하며, 다양한 보안 요구사항을 쉽게 적용 가능
- QueryDSL은 타입 안전한 쿼리 작성이 가능해, SQL 쿼리를 컴파일 시점에 검증하고, 코드 가독성을 높이는 동시에 유지보수성을 향상
-
- Kotest는 직관적이고 가독성 높은 테스트 DSL을 제공하여, 테스트 코드를 읽기 쉽게 작성할 수 있으며 다양한 테스트 스타일을 지원.
- MockK는 코틀린에 특화된 모킹 라이브러리로, 코루틴과 같은 코틀린 고유 기능을 쉽게 모킹할 수 있어 비동기 코드 테스트에 강점이 있음.
-
- Jenkins를 사용한 CI/CD 파이프라인은 자동화된 테스트, 빌드, 배포를 통해 개발 프로세스를 효율적으로 관리
- Jacoco, SonarQube, TrivyScan은 각각 코드 커버리지, 코드 품질, 보안 취약점을 점검하여 안정적인 코드 배포를 지원
- ArgoCD는 GitOps 방식으로 애플리케이션을 Kubernetes 환경에 쉽게 배포 및 관리할 수 있어, 전체적인 개발과 운영의 일관성을 보장
-
- Kubernetes는 컨테이너화된 애플리케이션의 배포와 확장을 자동화하여, 대규모 인프라 관리가 용이
- Grafana, Prometheus는 모니터링과 알림 시스템을 구축해 시스템 성능 및 상태를 실시간으로 추적하고 대응
- Elasticsearch, Logstash, Kibana, Filebeat(ELK 스택)는 로그 수집, 분석, 시각화를 통해 애플리케이션 상태 및 문제를 쉽게 파악하고 대응
- Kafka는 대용량의 데이터를 실시간으로 처리하고, 분산 환경에서 높은 확장성과 안정성을 제공하는 메시징 플랫폼
-
- Elasticsearch는 대규모 데이터에서 빠른 검색과 분석을 지원하며, 실시간 로그 분석 및 검색에 탁월한 성능을 발휘
- Redis는 인메모리 데이터 구조 저장소로, 매우 빠른 읽기/쓰기 성능을 제공하여 캐싱, 세션 관리, 실시간 데이터 처리 가능
-
- RestDocs를 통해 생성된 문서를 Swagger UI로 시각화하여, 개발자와 비개발자 모두가 실시간으로 API를 테스트 가능
- 테스트 코드 작성과 함께 API 문서가 자동으로 생성되어, 실제 코드와 문서의 동기화 문제가 발생하지 않음
- 테스트 시에 문서를 검증할 수 있어 신뢰성을 높임
Naming
- 패키지 : 언더스코어(
_
)나 대문자를 섞지 않고 소문자를 사용하여 작성합니다. - 클래스 : 클래스 이름은 명사나 명사절로 지으며, 대문자 카멜표기법(Upper camel case)을 사용합니다.
- 메서드 : 메서드 이름은 동사/전치사로 시작하며, 소문자 카멜표기법(Lower camel case)를 사용합니다. 의도가 전달되도록 최대한 간결하게 표현합니다.
- 변수 : 소문자 카멜표기법(Lower camel case)를 사용합니다.
- ENUM, 상수 : 상태를 가지지 않는 자료형이면서
static final
로 선언되어 있는 필드일 때를 상수로 간주하며, 대문자와 언더스코어(UPPER_SNAKE_CASE)로 구성합니다. - DB 테이블: 소문자와 언더스코어로(lower_snake_case) 구성합니다.
- 컬렉션(Collection): 복수형을 사용하거나 컬렉션을 명시합니다. (Ex. userList, users, userMap)
- LocalDateTime: 접미사에 *Time**를 붙입니다.
Comment
Import
탑레벨 클래스(Top level class)는 소스 파일에 1개만 존재해야 한다. ( 탑레벨 클래스 선언의 컴파일타임 에러 체크에 대해서는 Java Language Specification 7.6 참조 )
클래스를 import할때는 와일드카드(*) 없이 모든 클래스명을 다 쓴다. static import에서는 와일드카드를 허용한다.
클래스, 인터페이스, 메서드, 생성자에 붙는 애너테이션은 선언 후 새줄을 사용한다. 이 위치에서도 파라미터가 없는 애너테이션 1개는 같은 줄에 선언할 수 있다.
배열 선언에 오는 대괄호([])는 타입의 바로 뒤에 붙인다. 변수명 뒤에 붙이지 않는다.
long형의 숫자에는 마지막에 대문자 'L’을 붙인다. 소문자 'l’보다 숫자 '1’과의 차이가 커서 가독성이 높아진다.
URL
Rules
작업 시작 시 선행되어야 할 작업은 다음과 같습니다.
issue를 생성합니다.feature branch를 생성합니다.add → commit → push → pull request 를 진행합니다.pull request를 develop branch로 merge 합니다.이전에 merge된 작업이 있을 경우 다른 branch에서 진행하던 작업에 merge된 작업을 pull 받아옵니다.종료된 issue와 pull request의 label을 관리합니다.
IntelliJ로 작업을 진행하는 경우, 작업 시작 시 선행되어야 할 작업은 다음과 같습니다.
깃허브 프로젝트 저장소에서 issue를 생성합니다.생성한 issue 번호에 맞는 feature branch를 생성함과 동시에 feature branch로 checkout 합니다.feature branch에서 issue 단위 작업을 진행합니다.작업 완료 후, add → commit을 진행합니다.remote develop branch의 변경 사항을 확인하기 위해 pull 받은 이후 push를 진행합니다.만약 코드 충돌이 발생하였다면, IntelliJ에서 코드 충돌을 해결하고 add → commit을 진행합니다.push → pull request (feature branch → develop branch) 를 진행합니다.pull request가 작성되면 작성자 이외의 다른 팀원이 code review를 진행합니다.최소 한 명 이상의 팀원에게 code review와 approve를 받은 경우 pull request 생성자가 merge를 진행합니다.종료된 issue와 pull request의 label과 milestone을 관리합니다.
준수해야 할 규칙은 다음과 같습니다.
develop branch에서의 작업은 원칙적으로 금지합니다. 단, README 작성은 develop branch에서 수행합니다.commit, push, merge, pull request 등 모든 작업은 오류 없이 정상적으로 실행되는 지 확인 후 수행합니다.
Branch
branch는 작업 단위 & 기능 단위로 생성된 issue를 기반으로 합니다.
branch를 생성하기 전 issue를 먼저 작성합니다. issue 작성 후 생성되는 번호와 domain 명을 조합하여 branch의 이름을 결정합니다. <Prefix>/<Issue_Number>-<Domain>
의 양식을 준수합니다.
main
: 개발이 완료된 산출물이 저장될 공간입니다.develop
: feature branch에서 구현된 기능들이 merge될 default branch 입니다.feature
: 기능을 개발하는 branch 입니다. 이슈 별 & 작업 별로 branch를 생성 후 기능을 개발하며 naming은 소문자를 사용합니다.
user
,map
, (error
,config
)
feature/7-user
,feature/5-config
Issue
작업 시작 전 issue 생성이 선행되어야 합니다. issue 는 작업 단위 & 기능 단위로 생성하며 생성 후 표시되는 issue number 를 참조하여 branch 이름과 commit message를 작성합니다.
issue 제목에는 기능의 대표적인 설명을 적고 내용에는 세부적인 내용 및 작업 진행 상황을 작성합니다.
issue 생성 시 github 오른편의 assignee, label을 적용합니다. assignee는 해당 issue 담당자, label은 작업 내용을 추가합니다.
[<Prefix>] <Description>
의 양식을 준수하되, prefix는 commit message convention을 따릅니다.
[chore] spring data JPA 의존성 추가
Commit
[<Prefix>] #<Issue_Number> <Description>
의 양식을 준수합니다.
- feat : 새로운 기능 구현
[feat] #11 구글 로그인 API 기능 구현
- fix : 코드 오류 수정
[fix] #10 회원가입 비즈니스 로직 오류 수정
- del : 쓸모없는 코드 삭제
[del] #12 불필요한 import 제거
- docs : README나 wiki 등의 문서 개정
[docs] #14 리드미 수정
- refactor : 내부 로직은 변경 하지 않고 기존의 코드를 개선하는 리팩터링
[refactor] #15 코드 로직 개선
- chore : 의존성 추가, yml 추가와 수정, 패키지 구조 변경, 파일 이동
[chore] #21 yml 수정
,[chore] #22 lombok 의존성 추가
- test: 테스트 코드 작성, 수정
[test] #20 로그인 API 테스트 코드 작성
- style : 코드에 관련 없는 주석 달기, 줄바꿈
- rename : 파일 및 폴더명 수정