HTTP 상태 코드는 웹 서버가 클라이언트(예: 웹 브라우저)로부터의 요청을 처리한 결과를 나타내는 3자리 숫자 코드입니다. 각 코드의 첫 번째 자리는 상태의 종류를 나타내며, 나머지 두 자리는 보다 구체적인 의미를 부여합니다. HTTP 상태 코드는 크게 다섯 가지 범주로 나눌 수 있습니다:
1xx: 정보 응답 (Informational Response)
100 Continue: 요청이 일부분만 전송되었으며, 클라이언트가 계속해서 요청을 보내야 한다는 뜻입니다.
101 Switching Protocols: 서버가 클라이언트가 요청한 프로토콜로 전환할 것이라는 뜻입니다.
2xx: 성공 (Success)
200 OK: 요청이 성공적으로 처리되었음을 나타냅니다.
201 Created: 요청이 성공적이며, 새로운 리소스가 생성되었음을 나타냅니다.
204 No Content: 요청이 성공적으로 처리되었지만, 반환할 콘텐츠가 없음을 의미합니다.
3xx: 리다이렉션 (Redirection)
301 Moved Permanently: 요청한 리소스가 영구적으로 다른 URI로 이동되었음을 나타냅니다.
302 Found: 요청한 리소스가 일시적으로 다른 URI에 있으며, 그 URI로 리다이렉트해야 함을 의미합니다.
304 Not Modified: 클라이언트가 캐시에서 리소스를 로드할 수 있으며, 서버는 이 리소스가 변경되지 않았음을 나타냅니다.
4xx: 클라이언트 오류 (Client Error)
400 Bad Request: 서버가 요청을 이해할 수 없거나, 잘못된 요청이라는 것을 나타냅니다.
403 Forbidden: 서버가 요청을 이해했으나, 권한이 없어 실행할 수 없음을 나타냅니다.
404 Not Found: 요청한 리소스를 서버에서 찾을 수 없음을 의미합니다.
5xx: 서버 오류 (Server Error)
500 Internal Server Error: 서버에서 요청을 처리하는 동안 오류가 발생했음을 나타냅니다.
502 Bad Gateway: 서버가 게이트웨이로부터 잘못된 응답을 받았음을 의미합니다.
503 Service Unavailable: 서버가 일시적으로 과부하 상태이거나, 유지보수 중임을 나타냅니다.
이러한 상태 코드를 통해 클라이언트와 서버 간의 통신 상태를 명확하게 알 수 있으며, 문제가 발생했을 때 이를 진단하고 해결하는 데 중요한 역할을 합니다.
2. 각각의 에러 클래스 만들기
1. Ex400
package shop.mtcoding.blog.core.error.ex;
//유효성 검사 할 때 사용!
public classException400extendsRuntimeException{
public Exception400(String message) {
super(message);// 부모한테 넘기기
}
}
코드는 커스텀 예외 클래스 Exception400을 정의한 것입니다. 이 클래스는 RuntimeException을 상속하여 만들어졌으며, 주로 유효성 검사를 수행할 때 사용할 수 있도록 설계되었습니다.
2. ex401
package shop.mtcoding.blog.core.error.ex;
//인증관련 오류
public classException401extendsRuntimeException{
public Exception401(String message) {
super(message);// 부모한테 넘기기
}
}
코드는 커스텀 예외 클래스 Exception401을 정의한 것입니다. 이 클래스는 RuntimeException을 상속하여 만들어졌으며, 주로 유효성 검사를 수행할 때 사용할 수 있도록 설계되었습니다.
3. ex403
package shop.mtcoding.blog.core.error.ex;
//권환,실행 오류
public classException403extendsRuntimeException{
public Exception403(String message) {
super(message);// 부모한테 넘기기
}
}
코드는 커스텀 예외 클래스 Exception403을 정의한 것입니다. 이 클래스는 RuntimeException을 상속하여 만들어졌으며, 주로 유효성 검사를 수행할 때 사용할 수 있도록 설계되었습니다.
4. ex404
package shop.mtcoding.blog.core.error.ex;
//서버 찾기 오류
public classException404extendsRuntimeException{
public Exception404(String message) {
super(message);// 부모한테 넘기기
}
}
코드는 커스텀 예외 클래스 Exception404을 정의한 것입니다. 이 클래스는 RuntimeException을 상속하여 만들어졌으며, 주로 유효성 검사를 수행할 때 사용할 수 있도록 설계되었습니다.
5. GlobalExceptionhandler (전체 오류를 관리)
package shop.mtcoding.blog.core.error;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import shop.mtcoding.blog.core.error.ex.*;
import shop.mtcoding.blog.core.util.Script;
@RestControllerAdvice// 모든 thorw 는 여기로 날아온다.// @ControllerAdvice 파일을 얻어 올 수 있다.// 모두 리턴은 나중에 수정해도된다.//
public classGlobalExceptionhandler {
//유효성 검사 실패( 잘못된 클라이언트의 요청)
@ExceptionHandler(Exception400.class)
public Stringex400(Exception e) {
returnScript.back(e.getMessage());
}
//인증 실패 (클라이언트가 인증없이 요청했거나, 인증을 하거나 실패했거나
@ExceptionHandler(Exception401.class)
public Stringex401(Exception e) {
returnScript.back(e.getMessage());
}
//권환 실패 (인증은 되어 있는데, 삭제하려는 게시글이 내가 적은게 아니다)
@ExceptionHandler(Exception403.class)
public Stringex403(Exception e) {
returnScript.back(e.getMessage());
}
//서버에서 리소스(자원)을 찾을 수 없을때
@ExceptionHandler(Exception404.class)
public Stringex404(Exception e) {
returnScript.back(e.getMessage());
}
//서버에서 심각한 오류가 발생했을때(알고있을때)
@ExceptionHandler(Exception500.class)
public Stringex500(Exception e) {
returnScript.back(e.getMessage());
}
//서버에서 심각한 오류가 발생했을때 (모를때)
@ExceptionHandler(Exception.class)
public Stringex(Exception e) {
returnScript.back(e.getMessage());
}
}
return Script.back(e.gerMessage());는 ‘Script.bakc()’ 메소드를 사용하여 예외 메시지를 사용자에게 반환한다. 기능은 사용자에게 이전 페이지로 돌려보낸다.
‘String errMsg’: 이 변수는 HTML ‘<script>’ 태그 내에서 JavaScript 코드를 포함한 문자열을ㅇ 생성한다. ‘alert(’$msg’)’는 ‘alert’ 함수를 사용하여 경고 메세지를 표기하고 ‘histroy.back()’은 사용자가 이전 페이지로 돌아가게 한다.
‘.replace(”$msg”,msg)’ 메소드는 ‘#msg’라는 플레이스 홀더를 실제 메세지로 대체하여 동적으로 메시지를 사입하여 다양한 상황에 맞게 사용 할 수 있도록 한다.
리터럴 텍스트(’”””’): 이 문법은 자바에서 다중 행 문자열을 사용할 수 있게 해주는 기능이다.