-
Notifications
You must be signed in to change notification settings - Fork 3
[BE] 코드 컨벤션
이충렬(트레) edited this page Jul 11, 2024
·
1 revision
도메인 별로 구분한다.
friendogly
ㄴpet
ㄴcontroller
ㄴdto
ㄴrequest
ㄴservice
ㄴdto
ㄴrequest
ㄴresponse
ㄴrepository
ㄴdomain
ㄴmember
ㄴcontroller
ㄴdto
ㄴrequest
ㄴservice
ㄴdto
ㄴrequest
ㄴresponse
ㄴrepository
ㄴdomain
ㄴexception
ㄴinfrastructure
- 기본적으로 [Google Java Style Guide](https://google.github.io/styleguide/javaguide.html)을 따른다.
- 단, 하나의 line은 최대 120자로 한다.
-
클래스 바디의 첫 줄 개행
public class Example { private Long id; private String name; }
-
어노테이션 붙은 필드가 하나라도 존재하는 경우 → 각 필드 사이 개행
public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", nullable = false) private Long id; @NotNull @Column(name = "name") private String name; private int age; private String email; // ... }
-
어노테이션 없는 필드만 있는 경우 → 필드 간 개행 없이 작성
public class Member { private Long id; private String name; }
-
파라미터에 어노테이션이 붙어있는 경우 → 파라미터는 어노테이션과 필드 개행 X
public void sampleMethod( @RequestParam String parameter1, @RequestParam String parameter2, @RequestParam String parameter3 ) { // ... }
-
비어 있는 record body는 개행
public record Example(String str) { }
-
파라미터 개수가 3개 이상이거나, 가로줄 제한을 넘기는 경우 파라미터 마다 개행
-
메서드 파라미터가 3개 이상이면 파라미터 마다 개행
private void validateDuplication( LocalDate date, Long timeId, Long themeId ) { if (reservationRepository.existsByDateAndTimeIdAndThemeId(date, timeId, themeId)) { throw new RoomescapeException("해당 시간에 예약이 이미 존재합니다."); } }
-
파라미터 개수가 3개 미만이고, 가로줄 제한을 넘기지 않는 경우 개행 X
private void sampleMethod(int num1, int num2) { // ... }
-
- 생성, 수정, 삭제는
save
,update
,delete
로 메서드 네이밍을 통일한다. - 조회는 파라미터에 따라 네이밍을 정한다.
findByMemberIdAndPetId(Long memberId, Long petId)
- 컨트롤러 메서드와 네이밍 컨벤션을 통일한다.
- QueryService와 CommandService를 분리한다.
- QueryService: 조회
- CommandService: 생성, 수정, 삭제
- 기본적으로 Spring Data JPA의 [쿼리 메서드](https://docs.spring.io/spring-data/jpa/reference/jpa/query-methods.html)를 사용한다.
- 테스트 메서드명
-
saveMember_Fail_IllegalNameLength
- 컨벤션:
메서드명_실패|성공_사유
- 컨벤션:
- 메서드명은 영어로 작성하되, DisplayName은 한국어로 부연설명한다.
-
- DisplayName 작성 컨벤션
- 구체적인 문장으로 작성한다.
강아지를 등록할 수 있다.
6마리의 강아지를 등록하는 경우 예외가 발생한다.
- 구체적인 문장으로 작성한다.
-
Prefix
-
feat
: 새로운 기능을 추가할 경우 -
fix
: 프로덕트 코드에 있는 버그, 도메인 잘못 이해해서 발생한 logical error, 기능적 결함 등 -
style
: 공백이나 개행 수정, 코드 포맷 변경, 코드 수정이 없는 경우, import 순서 -
refactor
: 리팩토링 (코드나 로직 변화는 있지만 기능 변화는 없는 경우), 패키지 구조 변경, 파일 이동, 클래스명 변경, 파일 삭제 등 -
comment
: 주석 추가, 변경, 삭제 -
chore
: 의존성 추가, yml 변경, java 파일 외 외부 파일 변경 (data.sql
등) -
docs
: 각종 문서를 수정한 경우 (readme, API 문서 등) -
test
: 테스트 관련 모든 커밋 (버그, 오류 수정, 리팩토링 포함)- 단, TDD 방식으로 테스트와 프로덕션 코드를 함께 작성하는 경우
feat
등을 사용한다.
- 단, TDD 방식으로 테스트와 프로덕션 코드를 함께 작성하는 경우
-
remove
: 기능 삭제
-
- 리팩토링 하면서 클래스명이나 패키지 구조를 변경하는 경우, 무조건 별도의 커밋이나 PR을 날린다.
- (커밋 메시지 예시)
feat: 채팅 기능 추가
누누
채드
에디
- PR에 대한 단위 테스트 자동화
- 반갑개 OAuth 2.0 로그인을 해보아요
- 네트워크 통신 에러 핸들링
- Unauthorized 에러 분기 처리
- Firebase Analytics 및 Crashlytics 를 활용하여 앱 사용자 데이터 수집
- Google Play Store 배포 자동화
벼리
도도
- [문제해결]서버 스웨거 접속이 왜 안될까?
- (문제해결) AWS S3 KEY정보 없이 보안 챙기며 Spring에 연동하기
- (문제해결) MockAPI 적용해보기
- (성능개선) DB 마이그레이션 서비스 무중단으로 해보기
- (성능개선) 사용자가 많아지면, 서버 한대로 버틸 수 있을까?
- [공부] 서버 실행 중, JAR파일을 삭제하면!?
- [[공부] classPath란?
땡이
위브
트레