본문 바로가기

Tech/BoostCourse - WEB

[부스트코스] 웹 프로그래밍 기초 - 웹의 동작(HTTP 프로토콜의 이해)

부스트코스 서포터즈 BOOSTER 2기에 도전합니다.

평소 개발 공부할 때 하향식 공부법(응용에서 초급 지식을 학습)을 선호해왔다. 그러다보니 기본이 흔들리는 것이 당연해졌다. 그동안 골다공증 마냥 슝슝 뚫려버려있는 웹 지식에 칼슘을 들이붓는 시간이 필요하다는 생각을 하게 되었다. 마침 네이버 부스트코스에서 서포터즈를 모집하고 있다는 소식을 접하게 되었다. 기본을 익히고자하는 목적에 좋은 동기 부여가 될 것 같아 도전! 

부스트코스 서포터즈 BOOSTER 2기 소개 링크 :
https://m.post.naver.com/viewer/postView.nhn?volumeNo=27274312&memberNo=34635212

인터넷 != www(world wide web)

 보통 인터넷이라고 하면 웹 서비스를 생각하기 쉽다. 하지만 웹 서비스가 인터넷의 전부는 아니다. 인터넷은 웹 서비스를 포함한 수많은 네트워크들의 결합체라고 할 수 있다.

 

 물리적인 하나의 컴퓨터에는 여러 개의 서버가 동작할 수 있다. 그리고 각각의 서버들은 'port'라는 값응로 구분되어 동작한다.

이름 프로토콜 포트 기능
www HTTP 80 웹서비스
Email SMTP/POP3/MAP 25/110/114 이메일 서비스
FTP FTP 21 파일 전송 서비스
DNS TCP/UDP 53 네임 서비스
NEWS NNTP 119 인터넷 뉴스 서비스

* 프로토콜(protocol)이란?

복수의 컴퓨터 사이나 중앙 컴퓨터와 단말기 사이에서 데이터 통신을 원활하게 하기 위해 필요한 통신 규약. 신호 송신의 순서, 데이터의 표현법, 오류(誤謬) 검출법 등을 정함. 

 프로토콜은 통신 규칙이라고 생각하면 쉽다! 우리가 택배를 보내거나 받을 때 받는 사람, 보내는 사람의 이름, 주소, 우편번호 등을 기재하듯이 인터넷에도 네트워크 용도에 맞는 규칙이 있는 것이다. 그리고 네트워크의 결합체인 인터넷은 TCP/IP라는 프로토콜을 따른다.

 


HTTP(Hypertext Transfer Protocol)란?

 인터넷 중 웹 서비스에서는 서로 통신하기 위해 http를 사용한다. (웹사이트 링크에 보이는 http가 이 녀석이다.) http는 서버와 클라이언트가 인터넷 상에서 데이터를 주고 받기위한 프로토콜이다.

  • 팀 버너스리와 그가 속한 팀에서 발명. 문서화된 최초의 HTTP버전은 HTTP v0.9(1991년)
  • http는 계속 발전하여 http/2까지 버전이 등장한 상태임
  • 이미지, 동영상, 오디오, 텍스트 등 데이터 종류를 가리지 않고 전송 가능함
  • 현재 가장 많이 사용되고 있는 버전은 http v1.1

HTTP 작동 방식

 HTTP는 서버/클라이언트 모델을 따른다. 서버/클라이언트 모델은 클라이언트가 서버에게 요청을 하면 서버는 클라이언트에게 응답을 보내는 방식을 말한다.

 HTTP는 무상태 프로토콜(stateless protocol)의 특징을 갖는다. 무상태 프로토콜은 서버와 클라이언트가 통신하기 전에 연결 과정을 거치는데 서버는 응답을 하고 나면 클라이언트와의 연결을 끊게 된다. 따라서 클라이언트가 바로 다음 것을 요청한다 하더라도 서버는 클라이언트가 이전과 동일한 클라이언트인지 알지 못한다. 이로 인해 HTTP는 다음과 같은 장, 단점을 갖는다.

 

[장점]

  • 불특정 다수를 대상으로 하는 서비스에 적합하다.
  • 클라이언트와 서버가 계속 연결된 형태가 아니기 때문에 클라이언트와 서버 간의 최대 연결 수보다 훨씬 많은 요청과 응답을 처리할 수 있다.

[단점]

  • 연결을 끊어버리기 때문에, 클라이언트의 이전 상황을 알 수가 없다. (쿠팡에서 구매를 위해 결재 버튼을 클릭했는데 나를 기억하지 못한다..)
  • 이러한 특징 때문에 정보를 유지하기 위해서 Cookie와 같은 기술이 등장하게 되었음

*Cookie(쿠키)

 인터넷 사용자가 어떠한 웹사이트를 방문할 경우 그 사이트가 사용하고 있는 서버를 통해 인터넷 사용자의 컴퓨터에 설치되는 작은 기록 정보 파일을 일컫는다. 

URL(Uniform Resource Locator)

 URL은 인터넷 상의 자원의 위치로 특정 웹 서버의 특정파일에 접근하기 위한 경로 혹은 주소를 나타낸다. URL은 다음과 같이 세 부분으로 나뉜다.

  • 접근 프로토콜 - 프로토콜의 종류를 명시
  • IP 주소 또는 도메인 이름 + 포트번호 - 자원이 있는 서버의 IP, 도메인, 포트번호를 명시. IP와 도메인은 물리적인 서버를 찾기 위해 필요하고 포트번호는 물리적인 컴퓨터 안에서 해당되는 소프트웨어 서버를 찾기 위해 필요함
  • 문서의 경로/문서이름 - 자원의 위치를 명시

* IP? 포트?

 간단하게 생각하면 IP는 집 주소이다. 하나의 집은 하나의 주소를 가지듯이(한 집에 주소가 여러 개면 배달 사고가 남) 하나의 컴퓨터는 하나의 IP를 갖는다. 그리고 집 안에는 여러 개의 방이 존재할텐데 이 방들을 포트라고 생각하면 된다. 그리고 각 서버는 하나의 방(포트)를 차지한다. 하나의 포트에 여러 개의 서버가 존재할 수는 없다. 방 대신 배가 정착하는 항구로 생각해도 된다. 선박이 하나의 서버라고 생각해보자. 하나의 항구에 단 하나의 선박만 정박 가능함을 생각한다면 하나의 포트에 하나의 서버가 존재하는 점을 이해할 수 있을 것이다.

하나의 물리적 컴퓨터에는 여러 개의 소프트웨어 서버가 동작할 수 있는데 이 서버는 포트 값이 다르게 동작해야 된다.

HTTP - 동작원리

 클라이언트가 서버에 요청을 보낼 때 아무렇게나 보내는 것이 아니라 정해진 규칙에 따라 요청을 보내게 된다. 마찬가지로 서버도 클라이언트에 응답을 보낼 때 정해진 규칙에 따라 요청을 보내게 된다. 이를 요청 데이터 포맷, 응답 데이터 포맷이라고 한다.

 

HTTP 통신 순서

1. 클라이언트가 서버와 연결을 시도한다.

2. 클라이언트가 서버에게 요청 메시지를 보낸다.

3. 서버는 클라이언트에게 요청에 대한 응답 메시지를 보낸다.

4. 연결이 종료된다.

 

HTTP 요청 메시지 (헤더 부분, 빈 줄 부분, 요청 바디 부분으로 나뉨)

  • header(헤더) 부분
    • 요청 메서드 - 서버에게 요청의 종류를 알려주기 위해 사용 됨. GET, POST, PUT, DELETE 등이 있음.
    • 요청 URI - 요청하는 자원의 위치를 명시함
    • HTTP 프로토콜의 버전
  • body(바디) 부분
    • 요청 메서드가 GET인 경우는 요청 URL에 요청 시 필요한 값을 넣어 보내기 때문에(쿼리 스트링이라고 함) 바디를 사용하지 않음.
    • POST, PUT 등 요청 시 서버에 전달해야하는 값이 URL에 들어나면 안되는 경우에 바디 부분에 데이터를 담아서 요청을 보낼 수 있음

HTTP 응답 메시지 (헤더 부분, 빈 줄 부분, 요청 바디 부분으로 나뉨)

  • header(헤더) 부분
    • 응답 http 프로토콜 버전
    • 응답 코드 (ex. 200)
    • 응답 메시지 (ex. OK)
    • 날짜, 웹 서버 이름과 버전, 콘텐츠 타입, 캐시 제어 방식, 콘텐츠 길이 등
  • body(응답) 부분
    • 실제 응답 리소스 데이터

 

반응형