실무 처럼 코드를 작성하고싶다 그럴수록 고민도 더 많아지고 생각할께 많아진다...

컴퓨터만 보면서 생각하는 글쓴이 모습....
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'
jwt를 사용하기 위해 라이브러리 추가해야한다!
src/main/resources/application.properties
application.properties에 중요한 정보 jwt시크릿 키 db정보등 외부로 보여지면 안된다 그래서 꼭 외부로 보여지면 안되는 정보는 이그노어 처리를 하고 깃허브에 올리자!
@Getter
public enum ErrorCode {
DUPLICATE_USERID(409,"U001","ID가 중복입니다."),
UNAUTHORIZED(401, "A001", "인증되지 않은 사용자입니다."),
INVALID_SIGNATURE(401, "A003", "JWT 서명이 유효하지 않습니다."),
EXPIRED_TOKEN(401, "A004", "JWT 토큰이 만료되었습니다."),
MALFORMED_TOKEN(400, "A005", "잘못된 JWT 형식입니다."),
INVALID_TOKEN(401, "A006", "유효하지 않은 JWT 토큰입니다."),
ACCESS_DENIED(403, "A003", "접근 권한이 없습니다."),
USER_NOT_FOUND(404, "U002", "존재하지 않는 사용자입니다.");
private final int status;
private final String errorCode;
private final String errorMsg;
ErrorCode(int status, String errorCode, String errorMsg) {
this.status = status;
this.errorCode = errorCode;
this.errorMsg = errorMsg;
}
}
상황마다 오류를 작성해서 오류가 나도 어디부분인지 잘 알수 있도록 많이 작성했는데 수정을 더 수정하면 좋을거같다.
public class CustomException extends RuntimeException{
private final ErrorCode errorCode;
public CustomException(ErrorCode errorCode) {
super(errorCode.getErrorMsg());
this.errorCode = errorCode;
}
public ErrorCode getErrorCode() {
return errorCode;
}
}
package com.jobdam.jwt_login.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
@Getter
public class ErrorResponse {
private int status;
private String message;
private String errorCode;
}
@RestControllerAdvice
public class ExceptionController {
@ExceptionHandler(CustomException.class)
public ResponseEntity<ErrorResponse> handleException(CustomException ex){
ErrorCode errorCode = ex.getErrorCode();
ErrorResponse errorResponse = new ErrorResponse(errorCode.getStatus(),errorCode.getErrorMsg(),errorCode.getErrorCode());
return ResponseEntity.status(errorCode.getStatus()).body(errorResponse);
}
}
이렇게 @RestControllerAdvice 를 사용하면 @RestController에 나는 부분은 정상적인 부분만 처리하면되고 오류가 나는부분을 @RestControllerAdvice로 처리해서 관점을 명확히 분리할수있다.
응답 예시)
{
status = 409,
errorCode = U001,
errorMsg = ID가 중복입니다.
}
이런식으로 일관적으로 관리할수 있는 장점있다!
지금은 로그인 기능하나라서 ErrorCode가 한정적인데 서비스 별로 분리 하면 조금더 복잡해 질거같다.. ㅎㅎ
긴글 읽어주셔서 감사합니다! :)