Skip to content

[최현호] Sprint7#231

Open
CHH01 wants to merge 3 commits into
codeit-bootcamp-spring:최현호from
CHH01:sprint7
Open

[최현호] Sprint7#231
CHH01 wants to merge 3 commits into
codeit-bootcamp-spring:최현호from
CHH01:sprint7

Conversation

@CHH01
Copy link
Copy Markdown
Collaborator

@CHH01 CHH01 commented Mar 30, 2026

기본 요구사항

프로파일 기반 설정 관리

  • 개발(dev), 운영(prod) 환경에 대한 프로파일 구성
  • application-dev.yaml, application-prod.yaml 파일 생성
  • 프로파일별 설정값 분리
    • 데이터베이스 연결 정보
    • 서버 포트

로그 관리

  • Lombok @Slf4j 어노테이션 활용 로깅 구성
  • application.yaml 기본 로깅 레벨 설정 (기본: info)
  • 환경별 적절한 로깅 레벨 설정
    • SQL 로그 관련 기존 설정 유지
    • 프로젝트 로그: 개발(debug), 운영(info)
  • Logback 설정 파일(logback-spring.xml) 구성
    • 로그 패턴 커스터마이징: {년}-{월}-{일} {시}:{분}:{초}:{밀리초} [{스레드명}] {로그 레벨(5자)} {로거 이름(36자)} - {로그 메시지}
    • 콘솔 및 파일 동시 기록 설정
    • 저장 경로: {프로젝트 루트}/.logs
    • 일자별 롤링 및 30일 보관 정책 적용
  • 주요 레이어(Service, Controller) 메소드 로깅 추가
    • ERROR, WARN, INFO, DEBUG 레벨 적절히 사용
    • 대상: 사용자/채널/메시지 CRUD, 파일 업로드/다운로드

예외 처리 고도화

  • 커스텀 예외 설계 (패키지: com.sprint.mission.discodeit.exception)
  • ErrorCode Enum 클래스 정의 (예외 코드명 및 메시지)
  • 최상위 예외 DiscodeitException 클래스 정의 (details 속성 포함)
  • 도메인별 메인 예외 클래스 정의 (UserException, ChannelException 등)
  • 구체적인 도메인 예외 클래스 정의 (UserNotFoundException 등)
  • 기존 표준 예외를 커스텀 예외로 대체
  • ErrorResponse 클래스를 통한 일관된 응답 구조 정의 (status, exceptionType 포함)
  • @RestControllerAdvice 기반 전역 예외 핸들러 구현

유효성 검사

  • Spring Validation 의존성 추가
  • Request DTO 제약 조건 어노테이션 추가 (@NotNull, @NotBlank, @Size, @Email 등)
  • 컨트롤러 @Valid 적용 및 데이터 검증
  • MethodArgumentNotValidException 전역 예외 처리 및 상세 오류 메시지 반환

Actuator

  • Spring Boot Actuator 의존성 추가
  • 엔드포인트 활성화: health, info, metrics, loggers
  • Actuator info 상세 정보 구성
    • 애플리케이션 이름(Discodeit), 버전(1.7.0), Java(17), Spring Boot(3.4.0)
    • 주요 설정: 데이터소스, JPA, Storage, Multipart 설정 정보 등
  • 엔드포인트 정상 동작 확인

테스트 코드

1. 단위 테스트 (Service Layer)

  • UserService, ChannelService, MessageService 핵심 메소드 테스트
  • 각 메소드별 최소 2개(성공, 실패) 케이스 작성
  • MockitoBDDMockito를 활용한 의존성 모의(Mock) 처리

2. 슬라이스 테스트 (Repository & Controller)

  • Repository
    • @DataJpaTest 활용 및 application-test.yaml 구성
    • H2 인메모리(PostgreSQL 모드) 환경 및 스키마 자동 생성 설정
    • @EnableJpaAuditing 추가
    • 주요 쿼리 메소드(커스텀 쿼리, 페이징/정렬) 테스트 (성공/실패 각 2개 이상)
  • Controller
    • @WebMvcTestMockMvc 활용
    • 필요 시 @Import를 통한 추가 빈 등록
    • 서비스 레이어 모의(Mock) 처리 및 JSON 응답 검증

3. 통합 테스트 (Integration Test)

  • @SpringBootTest 기반 애플리케이션 컨텍스트 로드
  • H2 인메모리 DB 및 테스트 프로파일 활용
  • 주요 API 엔드포인트(사용자, 채널, 메시지) 통합 테스트 작성
  • @Transactional을 활용한 테스트 독립성 보장

심화 요구사항

MDC를 활용한 로깅 고도화

  • 요청 ID, 요청 URL, 요청 방식 등의 정보를 MDC에 추가하는 인터셉터를 구현하세요.
  • 클래스명: MDCLoggingInterceptor
  • 패키지명: com.**.discodeit.config
  • 요청 ID는 랜덤한 문자열로 생성합니다. (UUID)
  • [x]요청 ID는 응답 헤더에 포함시켜 더 많은 분석이 가능하도록 합니다.
    헤더 이름: Discodeit-Request-ID
  • WebMvcConfigurer를 통해 MDCLoggingInterceptor를 등록하세요.
  • 클래스명: WebMvcConfig
  • 패키지명: com.**.discodeit.config
  • Logback 패턴에 MDC 값을 포함시키세요.

Spring Boot Admin을 활용한 메트릭 가시화

  • Spring Boot Admin 서버를 구현할 모듈을 생성하세요.
  • admin 모듈의 메인 클래스에 @EnableAdminServer 어노테이션을 추가하고, 서버는 9090번 포트로 설정합니다.
  • admin 서버 실행 후 localhost:9090/applications 에 접속해봅니다.
  • discodeit 프로젝트에 Spring Boot Admin Client를 적용합니다.
  • 의존성을 추가합니다.
  • admin 서버에 등록될 수 있도록 설정 정보를 추가합니다.
  • discodeit 서버를 실행하고, admin 대시보드에 discodeit 인스턴스가 추가되었는지 확인합니다.
  • admin 대시보드 화면을 조작해보면서 각종 메트릭 정보를 확인해보세요.

테스트 커버리지 관리

  • JaCoCo 플러그인을 추가하세요.
  • 테스트 실행 후 생성된 리포트를 분석해보세요.-
  • com.sprint.mission.discodeit.service.basic 패키지에 대해서 60% 이상의 코드 커버리지를 달성하세요.

멘토에게

  • 코드리뷰 부탁드립니다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant