HTTP와 특성 그리고 UR..I?

기르기르·2022년 10월 18일
1

HTTP

목록 보기
1/3
post-custom-banner

HTTP는 자주봤는데 프로토콜?

프로토콜이란 상호 간에 정의한 규칙을 의미하며 특정 기기 간에 데이터를 주고받기 위해 정의되었다. 웹 문서를 주고 받을 때는 HTTP를 사용해야하고 파일을 주고 받을 때는 FTP, 메일은 SMTP, POP 등 전송 계층과 유형에 따라 다양하게 만들어져있다.
HTTP는 Hypertext Transfer Protocol의 약자이며 인터넷에서 하이퍼텍스트 문서인 HTML로 만든 웹페이지를 전송하기 위해 사용되는 프로토콜이다. 위의 프로토콜 설명과 연관지어 쉽게 풀이하면 웹 브라우저와 웹 서버가 통신하는 절차와 형식을 규정한 것이다.
아래의 그림을 보고 알 수 있다시피 HTTP프로토콜에서는 클라이언트에 의해 전송되는 메시지를 요청(Request)이라 하고, 요청에 대해 서버에서 응답으로 전송하는 메시지를 응답(Response)이라고 한다.

Request와 Response는 어떤걸 말하는걸까?

Request는 클라이언트와 웹 서버 사이의 요청에 관련된 정보가 저장, 관리된다.

현재 내가 배우는 JSP에서 컨테이너는 요청된 데이터를 바탕으로 javax.servlet.http.HttpServletRequest 객체를 만들어서 전달해준다.
우리는 이 request 객체를 통해서 클라이언트가 요청한 Parameter를 가져올 수 있고 Atrribute를 이용한 메소드를 통해 추가적인 객체를 request에 담아줄 수 있다.

Response는 웹 브라우저의 요청에 응답하고 서버 측에서 클라이언트 측으로 데이터를 전달을 수행한다.

JSP에서 클라이언트 요청 시 response - javax.servlet.http.HttpServletResponse 객체가 생성되고 요청에 대한 처리가 완료되면 소멸 된다.
우리는 이 response 객체를 헤더 정보에 추가로 내용을 넣거나 쿠키 전송, 클라이언트 페이지가 쿼리스트링을 가지고 다른 페이지로 이동할 수 있게 하도록 할 때 사용한다.
response 객체가 가진 정보는 HTML 코드나 getWriter() 메소드를 이용해서 출력이 가능하다.

HTTP의 특징으로는!

만약 클라이언트가 서버에 요청을 보내면 응답을 받고 난 후에도 계속 서버에 접속된 상태로 남아있다면 서버에 접속하는 클라이언트의 수가 많아 질수록 서버에서 낭비되는 자원의 수가 커질것이다.
HTTP는 이와 반대로 서버에 연결하고, 요청해서 응답을 받으면 연결을 끊어버리는Connectionless의 방식으로 작동한다. 그로인해 서로 요청과 응답만 처리하고 '상태'는 기록하지 않는 Stateless의 특징도 가진다.

  • Connectionless(비연결성)
    기본적으로 하나의 연결에 하나의 자원처럼 최소한의 자원만 사용하며 클라이언트가 서버에 요청하여 응답을 받으면 TCP/IP를 끊어 연결을 유지하지 않는다. 덕분에 효율적으로 자원을 관리할 수 있으며 동시접속자가 아닌 수 많은 클라이언트의 요청도 대응할 수 있다.
    하지만 이러한 특징때문에 단점이 생기기도 한다.
    (1) 연결이 끊기고 다시 새로 연결될 때 TCP/IP 연결을 새로 맺어야 하므로 3-way handshake에 따른 시간이 추가된다.(Overhead)
    (2) 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 자바스크립트, css, 추가 이미지 등 수 많은 자원이 함께 다운로드 된다.
    ※ 현재는 HTTP의 지속 연결(Persistent Connection)으로 문제 해결.
  • Stateless(무상태성)
    비연결성으로 인해 연결이 끊어질 때 상태가 저장되지 않기 때문에 다시 연결될 때에 모든 정보를 담아서 요청한다. 그로인해 요청이 복잡해지지만 요청을 한 번에 주기 때문에 비용을 최소화할 수 있는 강점이 있다.
    이 비용 부분은 서버가 확장될 수록 비용이 커지기때문에 서버의 확장성에 용이하다는 것과도 직결된다.

Stateful이 있다던데?

Stateful(상태유지)은 Stateless의 반대 개념이라고 생각하면 된다. 클라이언트-서버 관계에서 서버가 클라이언트의 '상태'를 보존하는 것이다. 이 상태를 보존하는 것으로 인해 Stateful 또한 다음과 같은 특징을 지닌다.
(1) 상태 저장에 대한 요청은 서버 측 상태에 따라 달라지게 된다.
(2) 상태에 대해 저장해야하기 때문에 백업 스토리지가 요구된다.

HTTP를 이용한 주소 URL 그리고 URI?

URI(Uniform Resource Identifier)은 통합 자원 식별자라고 하며 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스이다. 고유 주소라는 의미를 가지며 우리가 보는 인터넷 웹 주소를 URL이라 부르지만 사실 URI라고 할 수 있다.
URI의 하위 요소로 URL과 URN이 존재한다.

URL(Uniform Resource Locators)은 네트워크 상에서 자원이 어디 있는지를 알려주기 위한 규약이다. 흔히 웹 사이트 주소로 알고 있지만, URL은 웹 사이트 주소뿐만 아니라 컴퓨터 네트워크상의 자원을 모두 나타낼 수 있다.

URN(Uniform Resource Name)은 통합 자원 이름이라고 하며 http와 같은 프로토콜을 제외하고 리소스의 name을 가리키는데 사용된다. 리소스가 이동해도 항상 리소스를 가리킬 수 있는 유일한 이름으로 이름을 변하지 않게 유지하는 한, 여러 종류의 네트워크 접속 프로토콜로 접근해도 문제없다.

그렇다면 우리가 쓰는 웹주소는 URL이 아닌걸까?

그렇다고 할 수 있고 아니라고 할 수 있다. 검색으로 나온 수 많은 포스팅에서 스스로 끼워 맞췄다 라는 얘기가 많을 정도로 구분이 애매모호하다고 생각이 된다. 그리고 애초에 URN은 잘 사용하지 않기때문에 대부분 URL이자 URI인 것으로 보인다. 그러나 URI가 URL보다 상위 개념이자 URN이 더해진 것이기때문에 외국에서도 한참 전부터 URI로 부르고 있다. 즉 URI로 부르는 것이 더 정확한 표현이다.

참조 Blog 와 Web

https://velog.io/@younoah/uri-url-urn (url, uri, urn)
https://joshua1988.github.io/web-development/http-part1/ (HTTP)

post-custom-banner

0개의 댓글