Skip to content

rnjsgo/for-reference

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 

Repository files navigation

참고 코드용 미니 프로젝트

기능 구현 중심이 아닌, 미래에 참고하기 위한 미니 프로젝트


(24.04.22 ~ 24.04.27)

목차

  1. 개발 환경
  2. 깃 컨벤션
  3. 프로젝트 구조
  4. API 문서 자동화
  5. 기능 구현
  6. 로깅, 예외처리, 유효성 검사
  7. 단위테스트, 통합테스트
  8. CI 관련

개발 환경

프로그래밍 언어

  • Java: Oracle OpenJDK 1.8

프레임워크 및 라이브러리

  • Spring Boot: 2.7.18
  • Spring Data JPA: 2.7.18

DB

  • H2 Database: 2.1.214

개발 도구

  • IntelliJ IDEA: IntelliJ IDEA 2022.2.3 (Community Edition)

빌드 도구

  • Gradle: 8.7

테스트 도구

  • JUnit 5: 단위 테스트
  • Mockito: 모의 객체 생성

CI

  • GitHub Actions: 자동화된 빌드 및 테스트, 코드 커버리지 측정 파이프라인

문서화 도구

  • Swagger: API 문서 자동 생성 및 테스트

깃 컨벤션

작업 과정

  1. 이슈 템플릿, PR 템플릿 생성
  2. 작업할 내용 바탕으로 이슈 생성
  3. 이슈 번호로 구분한 브랜치 생성 ex) feat/#5 (develop 브랜치에서 분기)
  4. 작업 완료 후 develop 브랜치에 PR & Merge
  5. 큰 단위의 작업 완료 후 main 브랜치에 PR & Merge (main 브랜치는 배포 목적, 본 프로젝트에서는 배포 과정 x)
  6. develop 브랜치와 main 브랜치 싱크 맞추기

커밋 컨벤션

  • feat : 새로운 기능 추가
  • fix : 변경 사항 관련
  • docs : 문서 (문서 추가, 수정, 삭제)
  • conf : 설정 관련
  • test : 테스트 코드 추가
  • refactor : 코드 리팩토링
  • style : 코드 의미에 영향을 주지 않는 변경사항
  • ci: Continuous Integration 관련

프로젝트 구조

스크린샷 2024-04-27 오후 7 02 54 스크린샷 2024-04-27 오후 7 03 13

코드 컨벤션

  • Json: lowerCamelCase
  • Code Style(IntelliJ Setting): GoogleStyle

API 문서 자동화

  • Swagger Springdoc 사용
  • Swagger API 문서 : "/docs"
  • UserApiInterface 인터페이스로 문서화 코드 분리 (컨트롤러 코드 가독성 개선)

기능 구현

공통 응답 커스텀 Response

스크린샷 2024-04-27 오후 7 22 51

1. 회원 가입

스크린샷 2024-04-27 오후 7 17 02

Request

스크린샷 2024-04-27 오후 7 24 23
  • Reqeust 데이터 유효성 검사
  • userId, nickname과 같은 고유한 정보는 중복 검사

2. 회원 목록 조회

스크린샷 2024-04-27 오후 7 28 25

Query String

스크린샷 2024-04-27 오후 7 30 18

Response 예시

스크린샷 2024-04-27 오후 7 32 02
  • name, created_at 컬럼 인덱싱

3. 회원 정보 수정

스크린샷 2024-04-27 오후 7 41 17

Request

스크린샷 2024-04-27 오후 7 40 57

Response 예시

스크린샷 2024-04-27 오후 7 44 59
  • 수정 가능한 정보만 Request로 받음
  • Request 데이터 유효성 검사
  • nickname 중복 검사

로깅, 예외처리, 유효성 검사

1. 로깅 (SLF4J + Logback) - 스레드 구분을 위해 스레드 id 부여

Http Reqeust 정보 로깅 (Interceptor 활용)

스크린샷 2024-04-27 오후 7 53 32

메서드 실행 시간 측정 (AOP 적용)

스크린샷 2024-04-27 오후 7 57 07

SQL 쿼리 파라미터 바인딩 값 로깅

스크린샷 2024-04-27 오후 7 58 14

2. 예외 처리

  • 예외 상황 별 Custom Exception 작성
  • GlobalExceptionHandler 클래스를 통한 전역 예외 처리
스크린샷 2024-04-27 오후 8 02 19

3. 유효성 검사

  • GlobalValidationHandler 클래스를 통한 AOP 적용
  • @Valid 어노테이션과 AOP를 통해 Post, Patch 요청에 대한 유효성 검사 예외 처리 커스텀

유효성 검사 실패 시 예시 Response

스크린샷 2024-04-27 오후 8 08 45

단위테스트, 통합테스트

  • 레포지토리, 서비스, 컨트롤러 별 단위 테스트 작성, 통합 테스트 작성
  • JUnit5 + Mockito 를 통한 테스트
  • SQL 스크립트 파일을 통해 테스트에 필요한 더미 데이터 삽입
  • BDD (given - when - then) 방식으로 테스트 코드 작성

CI 관련

GitHub Actions CI 파이프 라인

main 브랜치, develop 브랜치에 PR 시 트리거

  1. 빌드
  2. 테스트
  3. 테스트 실패 시 코멘트
  4. 코드 커버리지 측정 코멘트 (Jacoco) -> 코드 커버리지 측정만을 위한 목적으로, 성공 기준을 0%로 설정

PR comment 예시

스크린샷 2024-04-27 오후 8 20 09

About

코드 참고용 미니 프로젝트 입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages