📚 TIL 38일차

temprmn·2023년 7월 25일
0

⛺️ 내일배움캠프

목록 보기
44/52
post-thumbnail

1. Controller Advice 로 예외 공통화 처리하기

@RestControllerAdvice를 사용해서 모든 RestController의 예외를 공통화해서 처리

GlobalControllerAdvice

  1. 이름 변경
    • ExceptionAdviser → GlobalControllerAdvice
  2. IllegalArgumentException을 캐치하는 ExceptionHandler 추가
/* GlobalControllerAdvice.java */

@ExceptionHandler({IllegalArgumentException.class})
public ResponseEntity<ApiResponseDto> illegalArgumentExceptionHandler(IllegalArgumentException ex) {
    ApiResponseDto exceptionResponse = new ApiResponseDto(ex.getMessage(), HttpStatus.BAD_REQUEST.value());
    return new ResponseEntity<>(
            // HTTP body
            exceptionResponse,
            // HTTP status code
            HttpStatus.BAD_REQUEST
    );
}

2. Service 인터페이스와 구현체 분리하여 추상화 하기

Service 클래스를 인터페스와 구현체로 분리하고 인터페이스 메서드에 주석 달기

PostService

  • 기존에 있던 PostService는 → PostServiceImpl로 이름을 변경하고, 새롭게 생성된 PostService 인터페이스를 상속받는다.
public interface PostService {
    /**
     * 게시글 생성
     * @param requestDto 게시글 생성 요청 정보
     * @param user 게시글 생성 요청자
     * @return 게시글 생성 결과
     */
    PostResponseDto createBlogPost(PostRequestDto requestDto, User user);

    /**
     * 게시글 전체 조회
     * @return 게시글 전체 조회 결과
     */
    List<PostResponseDto> getBlogPosts();

    /**
     * 게시글 생성
     * @param id 조회할 게시글 id
     * @return 게시글 조회 결과
     */
    PostResponseDto getBlogPost(Integer id);

    /**
     * 게시글 생성
     * @param id 조회할 게시글 id
     * @param requestDto 게시글 수정 요청 정보
     * @param user 게시글 수정 요청자
     * @return 게시글 수정 결과
     */
    PostResponseDto updateBlogPost(Integer id, PostRequestDto requestDto, User user);

    /**
     * 게시글 생성
     * @param id 조회할 게시글 id
     * @param user 게시글 수정 요청자
     * @param res http servlet 응답 결과
     * @return 게시글 수정 결과
     */
    ApiResponseDto deleteBlogPost(Integer id, User user, HttpServletResponse res);
}

PostServiceImpl

  • PostService 인터페이스를 상속 받을 뿐, 내부 구현은 크게 바뀌지 않았다.
public class PostServiceImpl implements PostService { ... }

3. 미사용 파일 삭제

  • ApiResponseDto와 ExceptionResponse의 내부가 동일하여 구분시킬 이유가 크게 없어보인다는 피드백을 받아, ExceptionResponse를 삭제

4. DB에 접근하는 메서드에 @Transactional 어노테이션 추가

  • 단순히 수정 및 삭제 뿐만 아니라, 조회할 때도 @Transactional을 붙여주는 것이 안전하다는 피드백을 받아, DB에 접근하는 메서드들에 모두 추가해주었다.
profile
`ISFJ` T 49% F 51% /

1개의 댓글

comment-user-thumbnail
2023년 7월 25일

정리가 잘 된 글이네요. 도움이 됐습니다.

답글 달기