과거의 내가 미래의 나에게
HTTP 학습(1) 본문
웹에 대해서 공부해야겠다 생각한 이래로 DNS에 대해서는 따로 살펴보았고, 이제 HTTP에 대해서 살펴보려 한다. DNS 처럼 인터넷에서 하나하나 찾아보기엔 양이 방대하여 책을 구매해서 해당 책을 기준으로 하여 학습할 것이다.
이번 글에서는 HTTP를 공부하기 전에 그와 연관된 지식에 대해서 배워보겠다.
이 블로그에서 적을 HTTP 학습글 시리즈는 "그림으로 배우는 HTTP&Network Basic" 이라는 책을 기반으로 했다. 해당 책은 아직 HTTP 2.0도 나오지 않은 시점에서 서술한 책이므로 다소 최신과 먼 정보가 있을 수 있으므로 참고하자.
HTTP란
HyperText Transfer Protocol의 준말로 하이퍼텍스트는 문서(웹페이지)끼리 이동할 수 있도록 해주는 텍스트이며 프로토콜은 컴퓨터에서 원활한 통신을 위해 지키기로 한 규약이다. 즉, HTTP는 하이퍼텍스트의 전송에 관한 규칙으로, 쉽게 표현하자면 HTML 문서와 같은 리소스들을 웹 브라우저로 가져올 수 있도록 해주는 것이다.
HTTP는 웹에서 사용하는 규칙으로 초기에는 주로 텍스트를 전송하기 위한 프로토콜이었지만 웹이 성장하면서 여러 기능이 추가되어 다양하게 사용되는 프로토콜이 되었다.
TCP/IP
HTTP는 TCP/IP 프로토콜을 기반으로 하여 만들어졌다. TCP/IP 프로토콜은 컴퓨터 네트워킹에서 데이터 통신을 위한 핵심 프로토콜 스택으로 HTTP의 기반이 되기에 HTTP를 살펴보기 전에 먼저 알아볼 필요가 있다고 한다. 하지만! 사실 책으로 간단하게 봐서는 HTTP를 공부하기 위해 TCP/IP를 학습해야 할 필요성을 잘 못느끼겠다. 그러므로 아래에는 일단 간단하게 TCP/IP가 무엇인지 개략적으로 살펴보고 나중에 TCP/IP를 주제 잡아 공부하면서 그 중요성을 알아봐야겠다.
1. 계층 구조의 TCP/IP
TCP/IP는 애플리케이션, 트랜스포트, 네트워크, 링크 계층으로 총 4가지 계층으로 나뉘어져 있다.
■ 애플리케이션 계층: 유저가 사용하는 애플리케이션에서 사용하는 통신을 결정하는데, FTP나 DNS 그리고 여기서 살펴볼 HTTP도 이 계층에 포함된다.
■ 트랜스포트 계층: 애플리케이션 계층에 네트워크로 접속되어 있는 2대의 컴퓨터 사이의 데이터 흐름을 제공한다. 이 곳에는 TCP와 UDP라는 두 가지 프로토콜이 있다.
그 중 TCP는 대용량의 데이터를 보내기 쉽게 작게 분해하여 상대에게 보내고 정확하게 도착하였는지 확인하는 역할을 한다는 것을 알고 있으면 될 듯 하다.
■ 네트워크 계층: 네트워크 상에서 패킷의 이동을 다룬다. 어떤 경로를 거쳐 상대의 컴퓨터까지 패킷을 보낼지 결정하기도 한다.
네트워크 계층에서 사용되는 프로토콜 중 IP는 Internet Protocol의 줄임말로 개개의 패킷을 상대방에게 전달하는 역할을 한다.
■ 링크 계층: 네트워크에 접속하는 하드웨어적인 면을 다룬다.
2. TCP/IP의 통신의 흐름
TCP/IP로 통신을 할 때는 송신하는 측은 애플리케이션->트랜스포트->네트워크->링크를 통해 전달하고 수신하는 측은 링크->네트워크->트랜스포트->애플리케이션 순으로 받는다.
애플리케이션 계층의 HTTP를 예로 들어 설명하면, 송신 측에서 애플리케이션 계층의 HTTP 리퀘스트를 보낸다. 트랜스포트 계층에서는 HTTP 메시지를 받아 통신하기 쉽게 만든 후 안내 번호와 포트 번호를 붙여 네트워크 계층에 전달한다. 네트워크 계층에서는 수신지 MAC 주소를 추가해서 링크 계층에 전달하고, 네트워크 계층은 네트워크를 통해 송신할 준비를 한다.
각 계층을 거칠 때마다 헤더에다 각 계층에 필요한 정보를 추가한다.
URI 그리고 URL과 URN
1. URI
URI는 Uniformed Resourse Identifiers의 줄임말로 굳이 번역하자면 통합 자원 식별자라고 한다. 이는 인터넷상의 리소스의 고유한 "식별자의 역할"을 하며 또한 해당 "리소스가 위치하는 곳"을 가리키는 역할도 한다. 예를 들어 내가 원하는 정보가 담긴 웹페이지를 나타내는 ID이며 동시에 이 웹페이지로 접속할 수 있도록 주소 역할을 하고 있다는 것이다.
인터넷 상의 리소스란 말이 쉽게 와닿지 않아서 별도로 정리해본다. 인터넷 상의 리소스는 웹페이지, 이미지, API 등 웹을 통해 접근하고 공유할 수 있는 모든 종류의 데이터와 정보를 나타낸다. 그리고 이러한 리소스에 접근할 수 있도록 하는 것이 URI인데, 예를 들어, 웹페이지의 URI는 https://www.example.com, 이미지의 URI는 https://www.example.com/images/test.png, API의 URI는 https://api.example.com/data?uid=1과 같은 방식으로 작성한다.
URI는 모든 유형의 리소스 식별자를 포괄하는 일반적인 용어로써, URL의 종류는 인터넷 상의 자원 관리 등을 하는 비영리법인 ICANN 산하 조직인 IANA에 등록되어있다. 아래에는 URI를 이해하는데 도움이 될 듯 하여 책에서 URI 종류를 몇 개 가져왔다.
< URI 종류 >
http://www.ietf.org/rfc/rfc2396.txtftp://ftp.is.co.za/rfc/rfc1808.txt
ldap://[2001:db8::7]/c=GB?objectClass?one
mailto:John.Doe@example.com
news:comp.infosystems.http://www.servers.unix
tel:+1-816-555-1212
telnet://192.0.2.16:80/
urn:oasis:names:specification:docbook:dtd:xml:4.1.2
2. URL
URL은 Uniform Resource Locator의 줄임말로, 리소스의 위치를 알 수 있게 해주는 리소스의 주소이다. 즉, 웹브라우저에게 특정 웹페이지로 갈 수 있게 하는 주소인 것이다. 이는 URI에 포함되어 있는 개념으로, URL은 식별자 역할을 하진 못하고 단지 리소스가 실제로 존재하는 위치를 가리킬 뿐이다.
사실 URL은 어느정도 식별자 역할을 한다 할 수 있다. 우리가 특정 웹페이지를 찾을 때 해당 웹페이지의 URL을 쓴다는 것은 이 URL이 결국 이 웹페이지를 나타내기 때문이다. 그럼에도 URL이 식별자 역할을 못한다 표현한 이유는 이는 단순한 위치 정보이기 때문이다.
예를 들어, 내가 글을 써서 https://www.example.com/post/js/15 라는 URL 주소를 연결시켰다고 하자. 사람들은 위의 주소를 통해 저 페이지로 들어갈 것이다. 그러다 내가 이 글은 js가 아닌 java로 옮겨야한다는 것을 깨닫고 주소를 https://www.example.com/post/java/15 로 바꾼다. 여전히 사람들은 기존에 .../js/15라 생각하여 해당 주소를 치고 들어오지만 어쩐지 더이상 접속이 안될 것이다.
위와 같이 URL은 위치 정보를 기반으로 했기에 식별자라고 하기엔 어딘가 조금 부족한 면이 있을 수 있다. 그렇기에 위치정보와 별개로 한, 식별자 역할을 제대로 하는 URN이 후에 도입되었다고 한다.
추가로 웹페이지에서는 URL을 일반적으로 사용하기에 URL의 구조에 대해서 좀 더 살펴보겠다.
scheme://username:password@hostname:port/path?query#fragment
■ scheme: http, https, file같은 웹 프로토콜을 나타낸다.
■ username(선택): 인증을 위해 사용자 이름을 나타낸다.
■ password(선택): 인증을 위해 비밀번호를 나타낸다.
■ hostname: www.example.com과과 같이 리소스가 위치한 웹 서버의 주소를 나타낸다.
■ port(선택): 웹 서버에 접속하기 위한 포트번호이다.
■ path: 웹 서버에서 리소스까지의 경로를 나타낸다.
■ query(선택): 웹 서버에 추가 정보를 전달하는 데 사용된다.
■ fragment(선택): 문서 내에 특정 부분을 가리키는데 사용된다. 문서 내에서 특정 섹션에 직접 링크를 제공함으로써 해당 위치로 바로 이동이 가능하다.
3. URN
Uniform Resource Name의 줄임말로, 위치와 상관없이 리소스를 식별할 수 있는 이름이다. 위에서 언급했 듯, URL의 식별성의 한계로 인해 도입되었으나 여전히 URL이 대중적으로 사용되고 있기에 도서번호(ISBN)에서나 볼 수 있지 웹상에서는 보이진 않는다.
참고 문서
- 그림으로 배우는 HTTP&Network Basic
- URI vs URN vs URL : Key Distinctions Explained - https://medium.com/@abhirup.acharya009/uri-vs-urn-vs-url-key-distinctions-explained-dec8e02ebd18
- URI와 URL 비슷해보이는데 차이점이 뭘까? ( 완벽 정리 ) - https://hstory0208.tistory.com/entry/URI%EC%99%80-URL-%EB%B9%84%EC%8A%B7%ED%95%B4%EB%B3%B4%EC%9D%B4%EB%8A%94%EB%8D%B0-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%B4-%EB%AD%98%EA%B9%8C-%EC%99%84%EB%B2%BD-%EC%A0%95%EB%A6%AC
'CS' 카테고리의 다른 글
HTTP 학습 (3) - HTTP 메시지 (0) | 2023.10.27 |
---|---|
HTTP 학습 (2) - 동작 과정과 특징 (0) | 2023.10.22 |
Domain Name System 학습(3) (0) | 2023.08.12 |
Domain Name System 학습(2) (0) | 2023.08.02 |
Domain Name System 학습(1) (0) | 2023.07.09 |