
개발자가 아니더라도 초등학생들도 http라는 단어를 보거나 듣거나 쓴적이 분명히 있을것이다. 인터넷 페이지를 키면 주소창에 http라고 쓰여져 있는 것을 자주 볼 수 있다. 그렇다면 http가 무엇인가에 대해서 설명할 수 있는 사람은 얼마나 될까? 일단 나는 직접 공부하기 전까지는 자세히 설명하지 못했다. 만약 이전의 나에게 그런 질문을 한다면 그저 '음.. 서로 다른 컴퓨터끼리 통신할수 있도록 해주는.. 약간 전화번호로 치면 약간 010... 같은느낌?' 이라고 설명했을 것 같다. 뭐 아예 틀린말은 아니였겠지만 정확한 의미를 몰랐던 것은 사실이다.
그럼 진짜 http는 무엇인지 한번 살펴보자.
HTTP는 무엇일까?
Http : HyperText Transfer Protocol(하이퍼텍스트 전송 프로토콜)
솔직한 말로 영어를 직역해서 봐도 뭔소린지 모르겠다. 하이퍼텍스트는 뭐고 전송은 알겠는데 프로토콜? 그냥 시스템같은건가? 라고 생각할 것이다.
하이퍼 텍스트란 하이퍼 링크를 통해 독자가 한 문서에서 다른 문서로 접근할 수 있는 텍스트라고(위키피디아피셜) 설명이 나와있다. 즉 인터넷을 통해 화면에 보이는 글자를 클릭하면 어떤 다른 주소로 이동할 수 있는 문자라고 일단 생각해보았다. 그렇다면 뒤의 Transfer Protocol을 붙혀서 http의 약자를 의역해보자면 대충 감이 잡힌다. 기존의 문서가 위에서 아래로 순차적으로 다소 수동적인 방식으로 읽혀왔다면 하이퍼 텍스트는 사용자가 능동적으로 연결된 문서들을 위의 그림과 같이 왔다 갔다 할 수 있는 방식으로 보면 된다. 포로토콜이란 일종의 규약을 의미하므로 종합하자면 인터넷 서버에 올린 여러사람들의 문서를 네트워크를 통해 여기저기 자유롭게 원하는곳으로 이동하여 열람할 수 있도록 데이터를 전송하는 통신규약이라고 할 수 있다.
HTTP 특징
위의 그림에서 보다시피 브라우저가 HTTP 요청을 보내면 서버가 그 요청에 대한 응답값을 보내준다. 이로써 사용자는 브라우저 위에서 요청한 페이지를 확인할 수 있다. 하나의 요청에 하나의 응답이 기본이며 이때, 응답결과에 따른 상태코드가 아래 status 부분이다. 상태코드에 대해서는 아래에서 다시 다루기로 하고, 특징을 좀 더 살펴보면 굉장히 구조가 간단하다는 것을 느낄 수 있다. 또한 서버와 브라우저의 연결상태가 요청이 발생했을때만 이루어지기 때문에 이전의 연결상태를 유지하지 않는다. 이를 Stateless한 특징을 가진다고 말한다. 그리고 request부분과 response부분에서의 메세지의 구성 형태를 살펴보면 다음과 같다
- HTTP request method: GET, POST, HEAD, PUT, CONNECT ...
- HTTP reponse code: 1xx, 2xx, 3xx, 4xx, 5xx ...
요청과 응답에 실려있는 위의 정보들을 통해 상대측은 어떤 정보를 주어야 하는지, 어떤 응답을 보내주어야 하는지 통신할 수 있다.
HTTP 상태코드
요청에 대한 응답으로 HTTP는 상태 코드를 보내준다고 했다. 사용자는 해당 상태코드를 보고 상대방이 무엇이라고 대답했는지 파악할 수 있다. 상태코드는 앞자리숫자에 따라 분류되며 대표적인 응답코드는 다음과 같다.
ㅇ 1xx : 처리중
- 웹서버가 순수하게 보충 정보를 알려주기 위함 (잘 사용되지 않음)
ㅇ 2xx : 성공
- 200 OK (정상 종료)
ㅇ 3xx : 정상 처리의 범주 내 알려주는 내용 (주로, 리다이렉트 : 위치 바뀌었음)
- 300 Multiple Choices (여러 선택지 있음) (사실상, 리다이렉트와는 별 관련 없음)
- 301 Moved Permanently (영구 이동됨)
- 302 Found 또는 Moved Temporarily (일시 이동됨)
- 303 See Other (일시 이동된 사이트에 가서, GET 메소드로 리소스 얻음)
- 304 Not Modified (사실상, 리다이렉트와는 별 관련 없음)
. 해당 리소스에 대해 If-Modified-Since 헤더 요청시,
. 제시된 일시 이후에 변경되지 않았다면,
. HTTP 바디를 보내지 않고, 그냥 `HTTP/1.1 304 Not Modified` 만으로 응답함
- 307 Temporary Redirect (302와 의미적으로 같음)
ㅇ 4xx : 클라이언트측 에러
- 400 Bad Request (요청 오류)
- 401 Unauthorized (권한 없음) : 접근 제한
- 403 Forbidden (금지됨) : 접근 제한
- 404 Not Found (발견되지 않음, 요청 리소스 없음)
- 405 Method Not Allowed (해당 메소드 허용 안됨)
- 408 Request Timeout (요청 시간을 초과함)
- 414 URI Too Long (URI 요청 문자열 너무 길음)
ㅇ 5xx : 서버측 에러
- 500 Internal Server Error (서버 내부 오류)
- 502 Bad Gateway (잘못된 게이트웨이)
. 접속한 프록시 서버에서 내부 망의 웹서버로부터 잘못된 응답을 받았을 때
- 503 Service Unavailable (서비스 불가)
- 504 Gateway Timeout (게이트웨이 제한 시간)
출처: 정보통신기술용어해설(HTTP 상태코드)
요청에 대한 응답으로 크게 500번대까지 다섯개의 상태코드를 보내준다. 응답이 정상인지, 정상적으로 동작하지 못했다면 어떤 오류인지를 꽤 상세하게 숫자로 대답해준다. 자주보았던 에러로는 404와 408이 있다. 대부분 사용자가 마주했던 상태코드는 400번대가 많을 것 같다. 이제보니 학생때 수강신청하다가 봤던 에러들 같다. 자주 보이는 반가운 에러들은 앞으로도 자주 마주하게 될테니 미리 그친구의 상태를 외워두자!
참고문헌
https://stackhowto.com/what-is-http-with-example/
http://www.ktword.co.kr/test/view/view.php?m_temp1=648 (정보통신기술용어해설)
'오늘의 공부 정리' 카테고리의 다른 글
06. 구조분해할당 (0) | 2022.07.27 |
---|---|
05. Rest-api와 Graphql-api (0) | 2022.07.27 |
03. MVC 패턴 (0) | 2022.07.18 |
02. Template Literal (0) | 2022.07.08 |
01. Git & Github (0) | 2022.07.07 |