Skip to content

Conversation

Oh-Myeongjae
Copy link
Collaborator

@Oh-Myeongjae Oh-Myeongjae commented Aug 26, 2025

Discodeit 프로젝트 - 기본 요구사항

1. 프로파일 기반 설정 관리

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

2. 로그 관리

  • Lombok의 @Slf4j 활용
  • application.yaml 기본 로깅 레벨 설정 (info)
  • 환경별 로깅 레벨 설정
    • 개발 환경: debug
    • 운영 환경: info
    • SQL 로그 레벨 유지
  • Logback 설정
    • logback-spring.xml 생성
    • 로그 패턴 커스터마이징
      {년}-{월}-{일} {시}:{분}:{초}:{밀리초} [{스레드명}] {로그 레벨(5글자)} {로거 이름(최대 36글자)} - {로그 메시지}{줄바꿈}
      
    • 콘솔과 파일 동시 로그 기록
    • 파일 저장 경로: {프로젝트 루트}/.logs
    • 일자별 롤링 및 30일간 보관
  • 서비스 및 컨트롤러 주요 메소드 로깅
    • 사용자 생성/수정/삭제
    • 채널 생성/수정/삭제
    • 메시지 생성/수정/삭제
    • 파일 업로드/다운로드

3. 예외 처리 고도화

  • 커스텀 예외 설계 및 구현
    • 패키지: com.sprint.mission.discodeit.exception[.{도메인}]
  • ErrorCode Enum 클래스 정의
  • DiscodeitException 기본 예외 클래스 정의
    • details 속성 포함
  • 도메인별 메인 예외 클래스
    • UserException, ChannelException
  • 구체적 예외 클래스 정의
    • UserNotFoundException, UserAlreadyExistException
  • 기존 예외 커스텀 예외로 대체
    • NoSuchElementException, IllegalArgumentException
  • ErrorResponse 클래스 정의
    • status: HTTP 상태 코드
    • exceptionType: 발생 예외 클래스 이름
  • @RestControllerAdvice 활용한 예외 처리

4. 유효성 검사

  • Spring Validation 의존성 추가
  • Request DTO 제약조건 적용
    • @NotNull, @NotBlank, @Size, @Email
  • 컨트롤러에서 @Valid 사용
  • 검증 실패 시 MethodArgumentNotValidException 전역 처리
  • 상세 오류 메시지 반환

5. Actuator

  • Spring Boot Actuator 의존성 추가
  • 엔드포인트 설정
    • health, info, metrics, loggers
  • 애플리케이션 정보 추가
    • 이름: Discodeit
    • 버전: 1.7.0
    • Java: 17
    • Spring Boot: 3.4.0
    • 주요 설정 정보: 데이터소스, JPA, storage, multipart
  • 실행 후 정보 확인
    • /actuator/info
    • /actuator/metrics
    • /actuator/health
    • /actuator/loggers

6. 단위 테스트

  • 서비스 레이어 주요 메소드 단위 테스트
    • UserService: create, update, delete
    • ChannelService: create(PUBLIC, PRIVATE), update, delete, findByUserId
    • MessageService: create, update, delete, findByChannelId
  • Mockito 및 BDDMockito 활용
  • 성공/실패 케이스 최소 2개 이상

7. 슬라이스 테스트

  • 레포지토리 레이어 테스트 (@DataJpaTest)
    • 테스트 프로파일 구성 (application-test.yaml)
    • H2 인메모리 DB, PostgreSQL 호환 모드
    • 스키마 새로 생성
    • 로그 레벨 적절히 설정
    • @EnableJpaAuditing 추가
    • 쿼리 메소드 최소 2개 이상 테스트
  • 컨트롤러 레이어 테스트 (@WebMvcTest)
    • 필요한 Bean @Import 활용
    • MockMvc 사용
    • JSON 응답 검증
    • 서비스 레이어 모의(mock)

8. 통합 테스트

  • @SpringBootTest 활용
  • H2 인메모리 DB
  • 테스트용 프로파일 구성
  • 주요 API 엔드포인트 테스트 (최소 2개 이상)
    • 사용자 API: 생성, 수정, 삭제, 조회
    • 채널 API: 생성, 수정, 삭제
    • 메시지 API: 생성, 수정, 삭제, 조회
  • @Transactional 활용해 독립적 실행

@Oh-Myeongjae Oh-Myeongjae changed the title sprint7 [오명재] sprint7 Aug 26, 2025
Copy link
Collaborator

@joonfluence joonfluence left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

따로 코멘트 드릴 부분이 없을만큼 거의 완벽하게 작성해주신 것 같습니다 👍

  • Request Validation 처리
  • 계층별 테스트코드 작성

몇가지 보완하면 좋을 점은 아래와 같습니다.

  • DTO, Request에서의 Swagger 설정 추가
  • 커밋 분리

@joonfluence
Copy link
Collaborator

추가로 하나의 커밋으로 모든 작업을 진행하셨는데, 그게 쉽지 않았을텐데
다음 번에는 분리해서 작업을 진행해보시는 것을 추천드립니다 :)

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.

2 participants