본문 바로가기

웹 프레임워크/Spring

프로젝트E. 예약 : 한줄평 관련 web API 만들기 - 코드 리뷰 및 회고(웹 백엔드)

728x90

www.boostcourse.org/web326

 

웹 백엔드

부스트코스 무료 강의

www.boostcourse.org

 

총 두번에 걸쳐서 통과를 했네요. 생각보다 코드 제출 후 리뷰 및 피드백을 받는 기간이 길었네요. 평가하시는분이 많이 없으신듯 합니다. ㅠ

 

다운로드/업로드 기능을 구현해야합니다.

 

 

#Advice

인터페이스의 멤버변수는 상수만 허용하기 때문에 Static final 생략 가능

public interface CommentService {
  // static final int LIMIT = 5;
  int LIMIT = 5;

 }
  

 

 

파일 타입 체크 로직 수정

  private boolean checkImageMimeType(Path path) throws IOException {
    String mimeType = Files.probeContentType(path);

    if (mimeType.startsWith("image")) {
      return true;
    } else {
      return false;
    }
  }

starsWith 는 실패시 false, 성공시 True를 리턴한다.  if문 생략가능.

www.javatpoint.com/java-string-startswith

 

 

의미 있는 exception을 throw하자

    try {
      UserEntity user = userDao.getUserByEmail(email);
      ReservationInfoEntity reservationInfo = reservationInfoDao.selectById(reservationInfoId);
      if (reservationInfo.getUserId() != user.getId()) {
        throw new Exception("로그인 유저 이메일과 예약한 유저 정보가 일치하지 않습니다.");
      }

기존에는 Exception을 throws 하였습니다.

 

    try {
      UserEntity user = userDao.getUserByEmail(email);
      ReservationInfoEntity reservationInfo = reservationInfoDao.selectById(reservationInfoId);
      if (reservationInfo.getUserId() != user.getId()) {
        throw new AccessDeniedException("로그인 유저 이메일과 예약한 유저 정보가 일치하지 않습니다.");
      }

로그인 권한이 없기에 AccessDeniedException을 throw 변경 하였습니다.

 

    } catch (AccessDeniedException e) {
      throw new AccessDeniedException(e.getMessage());
    } catch (IOException e) {
      throw new IOException(e.getMessage());
    }

위와 같이  AccessDeniedException를 throw 하여 컨트롤러에서 처리하도록 수정하였습니다.

 

@Transactional 는 의미있는 곳에서 사용하자.

@transactional 어노테이션을 붙인 이유 중 하나가 예외 발생시 rollback을 하겠다는 의미, RuntimeException 발생시 rollback을 합니다.

해당 코드에서는 rollback이 일어날 부분이 없습니다.

 

 

 

 

 

 

 

728x90