Computer Science/HTTP

HTTP 웹 기본 지식 공부하기

nayoon030303 2022. 3. 31. 22:46

HTTP 웹 기본 지식을 공부하기에 앞서서

코딩을 공부하면서 나는 항상 서버와 클라이언트 통신에 대해서 궁금했었다. 

 tcp/ip, 프로토콜, url 등 완벽하게 알지는 못하지만 어느 정도 배웠다고 생각했다. 

그러다 보안에 관련해서 궁금증이 생겼고 네트워크 통신에 대해서 더 자세히 알고 싶어서 인프런에서

모든 개발자를 위한 HTTP 웹 기본 지식이라는 강의를 찾아들었다.

 

강의 소개 영상에서 

개발자는 평생 HTTP 기반 위에서 개발해야 하며 항상 고민한다고 말씀하셨다. 

  • API URL은 어떻게 설계하는 것이 맞을까?
  • POST를 사용할까? PUT?을 사용할까? 

나는 이 질문을 듣는 순가 회사에서 겪었던 상황들이 떠올랐다. 

처음 API 개발을 하면서 URL을 어떻게 디자인해야 하는지(명명 규칙), 

다른 회사 연동 문서에 에서 모든 api가 post로 작성되었던 상황들이 생각이 났다.

 

이 강의를 들으면서 http에 대해 내 머릿속에서 정리될 수 있으면 좋겠다. 

총 9 섹션으로 내가 강의를 들으면서 배우게 된 것들 위주로 블로그에 정리하려고 한다.

 

 

인터넷 네트워크

IP( Internet Protocol)

IP란 주소이다. 인터넷에서 패킷을 전송하기 위해서는 간단하게 출발 IP와 도착 IP가 필요하다 

우리가 편지를 보낼 때 보내는 주소와 도착하는 주소를 적는 것처럼 인터넷에서 메시지를 보낼 때 도 똑같다.

IP 프로토콜의 한계

  • 비연결성
    • 패킷을 받을 대상이 있는지 없는지 알 수 없어도 패킷을 전송한다.
  • 비신뢰성
    • 패킷이 중간에 없어질 수가 있다. (갑자기 전선이 끊기 던 지 불가피한 상황으로 패킷이 전송 안될 수 있음)
    • 패킷이 순서대로 안 올 수 있다. ("안녕하세요"라고 보냈는데 "녕안세요하"라고 받을 수 있다. 
  • 프로그램 구분
    • 같은 IP를 사용하는 서버 통신 프로그램이 여러 개일 수 있다. (유튜브 뮤직으로 음악을 들으면서 친구와 카톡 할 수도 있다.)

TCP/UDP

인터넷 프로토콜 4 계층으로 TCP/UDP는 전송 계층에 속한다. 

인터넷 프로토콜이 무엇일까? 정보처리기능사를 공부하면서 엄청 많이 들었다.

하지만 설명할 수 있을 정도로 배우지는 못했다. 이번 강의를 통해 설명할 수 있게 되었다. 

 

프로토콜 4 계층

  • 애플리케이션 계층: HTTP, HTTPS, FTP
    • 브라우저에서 socket 라이브러리를 통해 message를 생성한다. 
  •  전송 계층: TCP, UDP
    • OS에서 생성된 message를 TCP/UDP로 감싼다. 
  • 인터넷 계층: IP
    • TCP/UDP로 감싸지 message를 IP로 감싼다. 
  • 네트워크 인터페이스 계층
    • LAN 드라이버, 장치 등으로 LAN 카드를 통해 서버로 전송한다.
    • LAN 카드에 등록된 MAC 주소 등 물리적인 것이 포함된다.

TCP

TCP/UDP는 IP와 다르게 Port가 포함된다. 또 전송 순서, 신뢰성 등이 포함된다.

클라이언트와 서버가 연결되었는지 확인할 수 있는 방법으로 TCP 3 way handshake라는 것이 있다. 

UDP

UDP는 IP에 Port만 추가되었다고 생각하면 된다. 

거의 기능이 없고 기능을 추가하려면 개발자의 추가 작업이 필요하다. 

하지만 TCP보다 단순하고 빠르다.

Port

IP를 설명할 때 말한 것처럼 같은 IP를 사용하는 서버와 통신하는 애플리케이션이 여러 개 있을 수 있다. 

Port는 같은 IP에서 프로세스를 구분해준다. 

IP가 아파트라고 생각하면

Port는 호수라고 생각하면 된다. 패킷이 101호로 가야 할지, 102호로 가야 할지 Port를 보면 알 수 있다. 

DNS

도메인 네임 시스템으로 도메인 명을 IP주소로 변경해준다.

IP는 기억하기 어렵다. 

ip주소가 200.200.200.123일 수도 있고 변경될 수도 있다.

우리가 맨날 그 ip주소를 기억하기 힘들다. 

DNS 서버에 google.com은 200.200.200.123이라고 등록을 하면 google.com을 입력하면 자동으로 IP주소로 변경해준다.

 

URI, URL, URN 이란?

URI

URI는 User Resource Identifier의 약자로 리소스를 식별한다는 의미를 가지고 있다. 우리가 id로 식별하고 사람들을 주민번호로 식별하듯이 리소스(자원)가 어느 위치에 있는지 식별한다. 

리소스란 모든 자원을 뜻한다. 브라우저의 html뿐만 아니라 음식점 정보, 실시간 교통량 등도 모두 리소스에 포함된다.

URI안에 URL, URN이 포함된다. 

URL

URL은 Uniform Resource Locator의 약자로 리소스가 있는 위치를 뜻한다. 

https://www.naver.com/   

처럼 우리가 주소창에서 보는 것을 뜻한다. 

URN

URN은 Uniform Resource Name의 약자로 리소스 이름을 뜻한다. 

URN으로만 실제 리소스를 찾을 수 있는 방법이 보편화되어있지 않다고 한다. 

이런 게 있다 정도로만 참고하기

 

웹 브라우저 요청 흐름

https://www.google.com/search?q=hello&sourceid=chrome&ie=UTF-8

웹브라우저 -> 구글 서버

  1. DNS 조회를 한다. www.google.com 
  2. https 기본 포트는 443으로 생략
  3. 브라우저에서 HTTP 요청 메시지를 생성한다. 
  4. SOCKET 라이브러리 르 통해 TCP/IP로 HTTP메시지를 감싼다. 
  5. OS에서 TCP/IP 패킷을 생성한다. 
  6. LAN 카드를 통해 인터넷으로 전송

패킷을 전송받은 구글 서버는 HTTP 응답 메시지를 웹브라우저로 다시 전송한다.