1-10 Http 상태 코드!! Blog(리팩토링)2

Http 상태 코드
홍윤's avatar
Aug 23, 2024
1-10 Http 상태 코드!! Blog(리팩토링)2
 

1. Http 상태 코드

💡
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: 서버가 요청을 이해할 수 없거나, 잘못된 요청이라는 것을 나타냅니다.
  • 401 Unauthorized: 인증이 필요하며, 클라이언트가 인증되지 않았음을 나타냅니다.
  • 403 Forbidden: 서버가 요청을 이해했으나, 권한이 없어 실행할 수 없음을 나타냅니다.
  • 404 Not Found: 요청한 리소스를 서버에서 찾을 수 없음을 의미합니다.

5xx: 서버 오류 (Server Error)

  • 500 Internal Server Error: 서버에서 요청을 처리하는 동안 오류가 발생했음을 나타냅니다.
  • 502 Bad Gateway: 서버가 게이트웨이로부터 잘못된 응답을 받았음을 의미합니다.
  • 503 Service Unavailable: 서버가 일시적으로 과부하 상태이거나, 유지보수 중임을 나타냅니다.
이러한 상태 코드를 통해 클라이언트와 서버 간의 통신 상태를 명확하게 알 수 있으며, 문제가 발생했을 때 이를 진단하고 해결하는 데 중요한 역할을 합니다.
notion image

 

2. 각각의 에러 클래스 만들기

notion image

1. Ex400

package shop.mtcoding.blog.core.error.ex; //유효성 검사 할 때 사용! public class Exception400 extends RuntimeException{ public Exception400(String message) { super(message);// 부모한테 넘기기 } }
  • 코드는 커스텀 예외 클래스 Exception400을 정의한 것입니다. 이 클래스는 RuntimeException을 상속하여 만들어졌으며, 주로 유효성 검사를 수행할 때 사용할 수 있도록 설계되었습니다.

2. ex401

package shop.mtcoding.blog.core.error.ex; //인증관련 오류 public class Exception401 extends RuntimeException{ public Exception401(String message) { super(message);// 부모한테 넘기기 } }
  • 코드는 커스텀 예외 클래스 Exception401을 정의한 것입니다. 이 클래스는 RuntimeException을 상속하여 만들어졌으며, 주로 유효성 검사를 수행할 때 사용할 수 있도록 설계되었습니다.

3. ex403

package shop.mtcoding.blog.core.error.ex; //권환,실행 오류 public class Exception403 extends RuntimeException{ public Exception403(String message) { super(message);// 부모한테 넘기기 } }
  • 코드는 커스텀 예외 클래스 Exception403을 정의한 것입니다. 이 클래스는 RuntimeException을 상속하여 만들어졌으며, 주로 유효성 검사를 수행할 때 사용할 수 있도록 설계되었습니다.

4. ex404

package shop.mtcoding.blog.core.error.ex; //서버 찾기 오류 public class Exception404 extends RuntimeException{ 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 class GlobalExceptionhandler { //유효성 검사 실패( 잘못된 클라이언트의 요청) @ExceptionHandler(Exception400.class) public String ex400(Exception e) { return Script.back(e.getMessage()); } //인증 실패 (클라이언트가 인증없이 요청했거나, 인증을 하거나 실패했거나 @ExceptionHandler(Exception401.class) public String ex401(Exception e) { return Script.back(e.getMessage()); } //권환 실패 (인증은 되어 있는데, 삭제하려는 게시글이 내가 적은게 아니다) @ExceptionHandler(Exception403.class) public String ex403(Exception e) { return Script.back(e.getMessage()); } //서버에서 리소스(자원)을 찾을 수 없을때 @ExceptionHandler(Exception404.class) public String ex404(Exception e) { return Script.back(e.getMessage()); } //서버에서 심각한 오류가 발생했을때(알고있을때) @ExceptionHandler(Exception500.class) public String ex500(Exception e) { return Script.back(e.getMessage()); } //서버에서 심각한 오류가 발생했을때 (모를때) @ExceptionHandler(Exception.class) public String ex(Exception e) { return Script.back(e.getMessage()); } }
  • return Script.back(e.gerMessage());는 ‘Script.bakc()’ 메소드를 사용하여 예외 메시지를 사용자에게 반환한다. 기능은 사용자에게 이전 페이지로 돌려보낸다.

3.until (Package)에서 Script 만들기

notion image
package shop.mtcoding.blog.core.util; public class Script { public static String back(String msg) { String errMsg = """ <script> alert('$msg'); history.back(); </script> """.replace("$msg", msg); return errMsg; } public static String href(String msg, String url) { //메세지 띄우고 로그인 페이지로 넘거가게 하는ㄴ게 href String errMsg = """ <script> alert('$msg'); loaction.href = '$url'; </script> """.replace("$msg", msg) .replace("$url", url); return errMsg; } }
  • ‘String errMsg’: 이 변수는 HTML ‘<script>’ 태그 내에서 JavaScript 코드를 포함한 문자열을ㅇ 생성한다. ‘alert(’$msg’)’는 ‘alert’ 함수를 사용하여 경고 메세지를 표기하고 ‘histroy.back()’은 사용자가 이전 페이지로 돌아가게 한다.
  • ‘.replace(”$msg”,msg)’ 메소드는 ‘#msg’라는 플레이스 홀더를 실제 메세지로 대체하여 동적으로 메시지를 사입하여 다양한 상황에 맞게 사용 할 수 있도록 한다.
  • 리터럴 텍스트(’”””’): 이 문법은 자바에서 다중 행 문자열을 사용할 수 있게 해주는 기능이다.

 
Share article

Uni