Skip to content

BackEnd

belljun3395 edited this page Jan 2, 2024 · 2 revisions

BE Wiki

커밋 컨벤션

태그

  • feat : 새로운 기능을 추가하는 경우
  • fix : 버그를 고치는 경우
  • style : 로직과 관련 없이 코드를 수정하는 경우
  • refactor : 로직과 관련하여 코드를 수정한 경우
  • comment : 주석을 추가/수정한 경우
  • docs : 문서를 추가/수정한 경우
  • test : 테스트를 추가/수정한 경우
  • chore : 프로덕션 코드에 변경이 없는 경우
  • rename : 파일/폴더를 수정한 경우
  • remove : 파일/폴더를 삭제한 경우

규칙

  1. 태그의 경우 소문자로 작성합니다.
  2. 태그와 콜론은 붙여 작성합니다.

제목

"추가", "수정", "변경" 과 같은 명령어로 시작합니다.

본문

어떻게 보다는 "무엇"을 그리고 "왜" 추가/수정 했는지에 관하여 작성합니다.

꼬리말

아래와 같은 규칙으로 이슈와 연관 시켜줍니다.

  • Resolves : #해결한이슈번호 (해결한 경우)
  • Related to: #해결중인이슈번호(해결 중인 경우)
  • Ref : #참고한이슈번호 (optional)
좋은 git 커밋 메시지 작성을 위한 7가지 약속

1. 제목과 본문을 한 줄 띄워 분리하기
2. 제목은 영문 기준 50자 이내로
3. 제목 첫글자를 대문자로
4. 제목 끝에 . 금지
5. 제목은 명령조로
6. 본문은 영문 기준 72자마다 줄 바꾸기
7. 본문은 어떻게보다 무엇을, 왜에 맞춰 작성하기

출처 : https://meetup.nhncloud.com/posts/106

PR 컨벤션

제목

[BE/#티켓이슈번호] 태그: 티켓 제목 형식으로 제목을 작성합니다.

본문

🎫 연관 티켓 
---
#연관티켓이슈번호

🙏 작업
----
- 작업1
- 작업2

💁‍♂️ 어떻게?
----
- 작업1 어떻게?
- 작업2 어떻게?

🙈 PR 참고 사항
----
- 질문?
- 추가 티켓

📸 스크린샷
----

🤖 테스트 체크리스트
----
- [ ] 체크 미완료
- [x] 체크 완료

규칙

  • Development에서 티켓과 연결해주세요.
  • 담당자 설정을 합니다.
  • 리뷰어를 설정합니다.
    • 리뷰어는 2일 이내로 리뷰를 진행합니다.
    • 리뷰어의 리뷰를 반영하였을 때는 해당 커밋 id를 남겨 반영사항을 확인할 수 있도록 합니다.

Merge 규칙

  • Merge를 하기 전에는 PR이 필요합니다.
    • 현재(팀원 2명)인 경우 1개의 approval이 필요합니다.
    • 새로운 커밋이 추가되면 approval이 다시 필요합니다.
  • Merge 전에 Github Action을 무사히 통과하여야 합니다.
    • lint
    • test
  • PR에 코멘트를 모두 확인하고 답을 달아야 합니다.

Branch 전략

BE 팀의 branch는 be를 prefix로 가진다.

기본적인 branch는 아래와 같습니다.

  • be
    • develop
    • #티켓번호-간단설명영어로

공통 branch로 merge되는 BE 팀의 branch는 be/develop branch 입니다.

모듈

모듈은 2가지 종류가 있습니다.

  1. 모듈
  2. 서버

모듈은 main 클래스를 가지고 있지 않습니다.

그렇기에 서버 모듈에 포함되어 동작합니다.

서버 모듈은 main 클래스를 가지고 있습니다.

서버 모듈 패키지 구조 (v1)

server
|--- config
|--- domain
|--- entity
|--- exception
|--- support
|--- web

config

해당 서버에 필요한 설정 클래스를 위한 패키지 입니다.

domain

domain
|--- dto
|--- model
|--- persistence
|--- support
|--- usecase
|--- util

model

도메인 클래스를 위한 패키지입니다.

persistence

DB 조회를 위한 DAO 클래스를 위한 패키지입니다.

usecase

요청을 처리하는 usecase 클래스를 위한 패키지입니다.

하나의 usecase 클래스는 하나의 도메인 converter를 가집니다.

entity

해당 서버에서 사용하는 entity를 위한 패키지입니다.

exception

서버 요청/응답간에 발생할 수 있는 예외를 위한 패키지입니다.

해당 패키지에 속하는 클래스에서 발행하는 예외를 위한 패키지입니다.

support

서버 요청/응답간에 web 패키지가 필요한 클래스를 위한 패키지입니다.

하위 포함관계 사용하기 위한 처리를 위한 클래스를 위한 패키지 입니다. Ex) converter

support 패키지 아래 하위 포함관계를 기준으로 패키지를 만들어 사용합니다.

ex) web
|--- support
|------ usecase
|------  UseCaseConverter

web

web
|--- controller
|--- dto
|--- support

controller

controller 클래스를 위한 패키지입니다.

코드 컨벤션

린트

린트의 경우 intellij-java-google-style 를 사용합니다.

spotless를 활용하여 린트를 적용합니다.

// be 패키지에서 
./gradlew spotlessApply

해당 작업을 커밋마다 적용하려면 아래 gitExecutableHooks task를 수행합니다.

// be 패키지에서 
./gradlew gitExecutableHooks

개발

usecase

하나의 usecase 클래스는 하나의 도메인 converter를 가집니다.

usecase 클래스의 메서드는 execute로 통일합니다.

dao

dao의 클래스는 repository로 네이밍합니다.