클라이언트가 서버로 요청을 보내면 요청이 잘 처리가 됐는지 문제가 있는지 서버에서 response를 보낼때 알려주는 기능이다.
크게 다섯가지로 나뉜다
음.. 지금 당장에도 내가 이클립스 기반 Spring MVC 프로젝트 환경 구축을 거의 완료하긴했는데, 잘 뜨던 home.jsp가 갑자기
이렇게 된다.. 404라는 상태코드가 눈에 보이는데 클라이언트 측에서 오류라는 것을 알 수 있다.
이처럼 웹 개발중에 상태코드는 앞으로도 계에에에에속 보게 될 것이며 정말 필수적인 지식?? 이전에 그냥 상식으로 알고있어야 할 것이다.
그래서 거의 쓰이지 않는 1xx 상태코드를 제외한 나머지 상태코드를 대략적으로 알아보도록 하겠다.
기본적으로 2xx는 클라이언트의 요청을 정상적으로 처리했다는 아주 기분좋은 상태 코드다.
그냥 웹 개발하다가 상태코드 앞자리에 2가 적혀있으면 성공했다고 생각하고 넘어가면 되겠다.
3xx는 리다이렉션으로 요청을 완료하기 위해서 클라이언트의 추가적인 조치가 필요하다는 코드다.
리다이렉션 자체가 클라이언트 요청 -> 서버 리다이렉션 (3xx) -> 클라이언트 재요청 -> 서버 응답 식으로 이루어 지는것이라서 클라가 리다이렉션을 해야하는 이유에 따라 상태 코드가 나뉜다.
이렇게 나뉜다고한다.
어떤 리소스의 URI가 영구적으로 이동되었을때 사용한다.
예를 들어, /members로부터 위치하고 있던 URI가 갑자기 /users로 바뀌었거나 /event에서 새로운 이벤트로 바뀌어 /new-event로 바뀌었는데
기존의 URI로 요청이 들어왔을 때 서버는 해당 URI는 영구적으로 바뀌었다고 클라에다가 3xx로 알려준다.
이때 사용되는 상태코드에는 301과 308이 있다.
리소스의 URI가 일시적으로 변경되었을때 사용된다는데 대표적인 예시가 하나 있다.
아마 이 팝업 많이 봤을 것이다. 해커톤때, 이걸 해결할려고 애썼던 기억이 난다 ㅋㅋㅋ
이 경고창?은 어떤 페이지에서 POST 요청을 보내고나서 그 창을 새로고침하게 되면 브라우저에서 저런 팝업창을 볼 수 있다.
저기서 계속 버튼을 누르면 방금전 보냈던 POST 요청을 똑같이 다시 보내게되는 치명적인 에러가 발생한다.
그럼 방금전에 했던 충전은 다시 충전되고, 주문은 다시 주문되는 엄청난... 재앙이다.
나는 당시 같이 백엔드 작업을 함께하던 분이 아예 그 창에서 새로고침을 막아버리는 방법으로 해결했었다 ㅋㅋㅋㅋ
여튼 이걸 해결하는 방법은 여러가지가 있지만 현업에서는 이를 PRG 패턴으로 해결한다고 한다.
PRG란 Post/Redirect/Get으로, 주문이나 충전같은 POST 요청을 하면 사용자가 자신의 주문정보나 충전정보를 보게끔 Get 요청을 위한 리다이렉션을 해버리는것이다.
이게 기능 시나리오상 더 깔끔하고 저런 에러를 막을 수 있는 이쁜 방법이라고 한다.
일시 리다이렉션의 상태 코드는 302, 307, 303이 있다.
이것은 캐시를 목적으로 사용한다. 캐시란 쉽게 말해서 어떤 페이지를 요청할 때마다 이미지 파일을 계속 내려받을 수는 없다.
이렇게 되면 속도도 속도지만, 이미지를 계속 내려받는 메모리도 고생한다.
그래서 브라우저에는 캐시 저장소나 쿠키 저장소와 같은 저장소가 있는데, 방금 요청했던것이면 굳이 서버에서 내려받는게 아니라 그냥 아까 쓰던거 써라! 같은 개념이다.
이를 알려주기 위해 300, 304 와 같은 상태 코드가 있는데, 300은 안쓴다고 한다.
라고 한다!
4xx는 클라이언트의 오류로써, 클라측에서 문법이 잘못되었거나 요청이 잘못되었을때 발생하는 에러다.
400, 401, 403, 404 등이 있다.
5xx는 서버의 오류로 인해 발생하는 코드라고 한다.
클라이언트의 오류는 클라이언트가 요청을 제대로 고쳐먹어야지만 다른 결과를 기대할 수 있지만 서버측의 오류는 계속 같은 요청으로 재시도하면 성공할 수 있다. (서버 복구시)
서버측의 오류에는 500, 503등의 코드가 있다.
이렇게 에세이로 쭈우우욱 적어보니 복습도 되고 좋은 것 같다.
이제 다와간다!! 파이팅