Sparta/Projects

[Project] CRUD 코드 개선

syuare 2025. 6. 12. 14:00

Q1) 관리자 권한 없을 시 예외 처리 > Http 상태 코드 및 응답 데이터 관련

1. 문제 

  • 인터셉터 구현 이후 관리자 권한이 없을 경우 예외 발생 시 400 Bad Request 로 반환
  • 메시지도 조금 더 명확하게 확인이 되었으면 함

2. 해결 방안

  • 기존 코드와 같이 권한 문제로 접근이 불가능할 경우 Http 상태 코드로는 403 Forbidden이 알맞다고 판단

3. 해결 완료

  • AccessDeniedException 에 대한 예외 처리를 403 Forbidden으로 반환하도록 GlobalExceptionHandler에 코드 추가
  • (추가1) 예외 처리에 대한 응답 DTO(ExceptionDto) 생성
  • (추가2) 에러 코드/메시지 관리를 위해 ErrorCode Enum 생성
// GlobalExceptionHandler.java

@ExceptionHandler(AccessDeniedException.class)
public ResponseEntity<ExceptionDto> handleAccessDeniedException(AccessDeniedException e) {
    ErrorCode errorCode = ErrorCode.REQUIRE_ADMIN;

    ExceptionDto exceptionDto = new ExceptionDto(errorCode.getStatus(), errorCode.getMessage());
    return ResponseEntity.status(errorCode.getStatus()).body(exceptionDto);
}
// ExceptionDto.java

@Getter
public class ExceptionDto {

    //에러코드로 관리
    private final int status;

    //에러메세지
    private final String message;

    public ExceptionDto(HttpStatus status, String message) {
        this.status = status.value();
        this.message = message;
    }
}
// ErrorCode.java

/**
 * 에러코드와 에러메세지 관리
 */
@Getter
@AllArgsConstructor
public enum ErrorCode {


    // 인가 관련
    REQUIRE_ADMIN(HttpStatus.FORBIDDEN, "관리자 권한이 필요합니다.");

    private final HttpStatus status;
    private final String message;

}

결과


Q2) 로그아웃 기능 구현

1. 문제

  • 현재 signup(회원가입), signin(로그인) 기능은 있으나 signout(로그아웃) 기능은 없는 상태

2. 해결방안

  • AuthController, AuthServcie 에서 로그아웃 기능 추가 구현
  • 로그아웃 시 토큰 삭제되도록 함 (구현 X)

3. 개선 방안 - 우선순위

  • 1) 로그아웃 API 구현 (구현 O)
  • 2) Access/Refresh Token 구현 + 기존 코드 리팩토링 (구현 X)
    • DB 연결이 없으므로 (프로젝트이기도 하니) 메모리 기반 저장소로 대체
  • 3) 토큰 블랙리스트 구현 (구현 X)
    • 로그아웃 처리된 토큰은 사용할 수 없도록 처리 

4. 결과

 

5. 회고

  • 시간이 부족해서 로그아웃 API만 구현하고 그 외 추가 개선 내용은 구현하지 못해서 아쉬움