기능 구현 중심이 아닌, 미래에 참고하기 위한 미니 프로젝트
(24.04.22 ~ 24.04.27)
- Java: Oracle OpenJDK 1.8
- Spring Boot: 2.7.18
- Spring Data JPA: 2.7.18
- H2 Database: 2.1.214
- IntelliJ IDEA: IntelliJ IDEA 2022.2.3 (Community Edition)
- Gradle: 8.7
- JUnit 5: 단위 테스트
- Mockito: 모의 객체 생성
- GitHub Actions: 자동화된 빌드 및 테스트, 코드 커버리지 측정 파이프라인
- Swagger: API 문서 자동 생성 및 테스트
- 이슈 템플릿, PR 템플릿 생성
- 작업할 내용 바탕으로 이슈 생성
- 이슈 번호로 구분한 브랜치 생성 ex) feat/#5 (develop 브랜치에서 분기)
- 작업 완료 후 develop 브랜치에 PR & Merge
- 큰 단위의 작업 완료 후 main 브랜치에 PR & Merge (main 브랜치는 배포 목적, 본 프로젝트에서는 배포 과정 x)
- develop 브랜치와 main 브랜치 싱크 맞추기
- feat : 새로운 기능 추가
- fix : 변경 사항 관련
- docs : 문서 (문서 추가, 수정, 삭제)
- conf : 설정 관련
- test : 테스트 코드 추가
- refactor : 코드 리팩토링
- style : 코드 의미에 영향을 주지 않는 변경사항
- ci: Continuous Integration 관련
- Json: lowerCamelCase
- Code Style(IntelliJ Setting): GoogleStyle
- Swagger Springdoc 사용
- Swagger API 문서 : "/docs"
- UserApiInterface 인터페이스로 문서화 코드 분리 (컨트롤러 코드 가독성 개선)
Request
- Reqeust 데이터 유효성 검사
- userId, nickname과 같은 고유한 정보는 중복 검사
Query String
Response 예시
- name, created_at 컬럼 인덱싱
Request
Response 예시
- 수정 가능한 정보만 Request로 받음
- Request 데이터 유효성 검사
- nickname 중복 검사
Http Reqeust 정보 로깅 (Interceptor 활용)
메서드 실행 시간 측정 (AOP 적용)
SQL 쿼리 파라미터 바인딩 값 로깅
- 예외 상황 별 Custom Exception 작성
- GlobalExceptionHandler 클래스를 통한 전역 예외 처리
- GlobalValidationHandler 클래스를 통한 AOP 적용
- @Valid 어노테이션과 AOP를 통해 Post, Patch 요청에 대한 유효성 검사 예외 처리 커스텀
유효성 검사 실패 시 예시 Response
- 레포지토리, 서비스, 컨트롤러 별 단위 테스트 작성, 통합 테스트 작성
- JUnit5 + Mockito 를 통한 테스트
- SQL 스크립트 파일을 통해 테스트에 필요한 더미 데이터 삽입
- BDD (given - when - then) 방식으로 테스트 코드 작성
main 브랜치, develop 브랜치에 PR 시 트리거
- 빌드
- 테스트
- 테스트 실패 시 코멘트
- 코드 커버리지 측정 코멘트 (Jacoco) -> 코드 커버리지 측정만을 위한 목적으로, 성공 기준을 0%로 설정
PR comment 예시