-
Notifications
You must be signed in to change notification settings - Fork 0
Chunghwan Kim edited this page Oct 1, 2022
·
3 revisions
- 작업을 시작하기 전 issue(Todo)를 생성한다.
- 작업을 시작하고 In Progress로 이동한다.
- 작업을 마친 후 PR을 한다.
- assigner가 있는 경우 리뷰를 반영해서 개선한다.
- assigner가 없는 경우 다른 사람의 코드라 생각하고 셀프 리뷰를 한다.
- Approve가 되었으면 스쿼시 머지와 함께 issue를 닫는다.
- 이후 해결한 이슈를 Done으로 이동한다.
- Google Java Style Guide 를 따른다.
- Git-flow 를 따른다.
- Restful하게 설계한다.
- 자원(Resource)는 URI로 표현한다.
- 행위(Verb)는 HTTP Method로 표현한다.
- 자원과 행위로 구분할 수 없는 경우 동사를 사용한다.
- 예시)
/deliveries/3/stop
- 배달 일시 중지
- 예시)
- 자원(Resource)은 복수형으로 표시한다.
- 예시)
/orders
- 예시)
- 여러 단어로 이루어진 경우 하이픈을 사용한다. (Kebab Case)
- 예시)
/delivery-orders
- 예시)
- 컬렉션을 필터링 할 경우 쿼리 파라미터를 사용한다.
-
DTO 구성
-
XXXRequest
,XXXResponse
형태로 클래스명을 작성한다.
-
-
패키지 설계 기준
- 바운디드 컨텍스트 기준으로 패키지를 분리한다. 컨텍스트별로 아래와 같은 구조를 가진다.
- ui
- request
- response
- application
- domain
- infra
- exception
- ui
- Entity, Repository는 domain layer에 위치한다.
- repositoryImpl, 외부와의 통신을 위한 Client 등은 infra layer에 위치한다.
- exception에는 각 컨텍스트에서 사용될 커스텀 예외가 위치한다.
- 바운디드 컨텍스트 기준으로 패키지를 분리한다. 컨텍스트별로 아래와 같은 구조를 가진다.
-
객체 참조
- 같은 aggregate내에서는 객체를 직접 참조한다.
- 다른 aggregate의 엔티티를 직접 참조하지 않고 ID로 간접 참조한다.
- 여러 aggregate를 필요로 하는 로직은 도메인 서비스에서 구현한다.
- 1:N 관계에서 비즈니스 로직 상 1에서 N에 접근해야할 경우
@OneToMany
- cascade = CascadeType.PERSIST
- ophanRemoval = true
- 그 외에는
@ManyToOne
을 통해 연관관계를 설정한다.
-
Lombok
- 같은 타입의 필드 변수가 있을 경우
@AllArgsConstructor
을 사용하지 않는다.
- 같은 타입의 필드 변수가 있을 경우