Entity 설계
- 각 Entity 간의 연관관계를 고려해 Entity를 설계함
- Member > Map > Space > Reservation 순으로 1대다 관계를 가짐
- PR
TDD (인수테스트, 서비스테스트, 테스트 픽스처)
- RestAssured를 사용해서 API들에 대한 controller 테스트 작성
- BDDMockito를 사용해서 기능 메서드들에 대한 service 테스트 작성
- 여러 테스트클래스에서 중복코드를 제거하고 가독성 향상을 위해 중복으로 생성하는 객체들을 테스트 픽스처로 정리
- 참고링크1
- 참고링크2
배포 자동화
- Jenkins를 이용해 CI/CD 환경을 구축함
- 먼저 PR 에 대한 build success 여부를 확인하고 fail 시 머지가 불가능하도록 설정
- 머지 된 후에 Jenkins가 한 번 더 빌드를 하고 성공하면 사전에 작성해놓은 쉘 스크립트에 따른 배포를 진행
- 빌드/배포 후 조치로 빌드 시작 시, 성공 시, 실패 시 slack 알림이 오도록 설정
- 위키정리
- 노션정리
Rest Docs (API 문서화)
- 자동화된 API 문서를 만들기 위해 Rest Docs를 적용함
- 프로덕션 코드에 영향도 없고 변경되는 API에 대해 동기화가 보장되므로 Rest Docs를 선택함
- 테스트가 성공해야 문서가 작성되므로 꼼꼼한 테스트작성을 할 수 있음
- 참고링크
- PR
로깅
- Logback을 이용해 logging 설정
- 로그레벨을 INFO, WARN, ERROR로 나눔
- INFO : 비즈니스 로직과 관련한 exception, 4xx대, 별도로 수집하지 않음
- WARN : 401, 500 에러를 포함한 시스템 WARN
- ERROR : 예상치 못한 에러, bug
- 로그 파일을 날짜별, 레벨별 순서로 디렉터리를 만들어 분류
- 참고링크
- PR
Builder 패턴
- 생성자 인자가 많아져서 객체 생성을 깔끔하고 유연하게 하기 위해 Builder 패턴을 도입함
- 각 인자가 어떤 의미인지 알기 쉽고 인자의 순서나 자료형 때문에 헷갈릴 일이 없음
- 기능이 추가되면서 Builder 패턴을 사용하는 객체가 많아져 후에는 Lombok을 도입함
- 참고링크
슬랙 알림 API
- 관리자가 예약을 수정하거나 삭제할 때마다 채널에 알림을 보내주는 기능을 구현함
- restTemplate을 이용해서 메시지 내용을 담은 DTO를 JSON 형식으로 보냄
- 참고링크1
- 참고링크2
- PR
usingRecursiveComparison()
- DTO의 값 동등성 비교 시 사용
- 필드 내부에 중첩된 객체가 있다면 해당 객체의 필드값을 비교해서 확인
- ignoringFields() : 특정 필드 무시
- ignoringActualNullFields(), ignoringExpectedNullFields() : null인 필드 무시
assertThat(actual).usingRecursiveComparison()
.ignoringCollectionOrder()
.ignoringExpectedNullFields()
.isEqualTo(expected);