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

kanamycine·2020년 1월 19일
2

안녕하세요 ! 부스트코스 서포터즈 booster에 지원하기 위해 미루어 왔던 개발로그를 만들게 되었습니다. 개발을 시작한 지 6개월 도 채 되지 않았지만, 앞으로 제가 공부하고 고민하고 개발했던 내용들을 차곡차곡 기록해 나갈 계획입니다. 많은 블로그나, 개인 홈페이지를 통해 공부하면서 도움을 받아 왔는데, 이제부터는 저도 개발을 처음 접하거나 배워나가는 분들에게 도움이 되는 블로그를 만들어 보려고 합니다. 잘 부탁 드립니다 감사합니다 !


1. 웹 프로그래밍 기초

1) 웹의 동작(HTTP 프로토콜의 이해)


보통 인터넷이라고 하면, 'WWW(World Wide web)'를 생각하기 쉽지만, 'WWW'가 인터넷의 전부는 아닙니다. 물리적인 하나의 컴퓨터에는 여러 개의 서버가 동작할 수 있고 각각의 서버는 'port'라는 값으로, 구분되어 동작하게 됩니다.

인터넷은 한마디로 네트워크들의 네트워크 라고 말할 수 있습니다. 수많은 네트워크들의 결합체인 것입니다. 인터넷은 보통 TCP/IP 라는 약속으로 연결되어 있습니다 !

이러한 인터넷 중에서 웹은 서로 통신하기 위해 'HTTP(Hypertext Transfer Protocol'라는 것을 사용합니다. 팀 버너스리, 유럽 입자 물리학 연구소에서 발명 되었습니다.

HTTP란

'HTTP'는 서버와 클라이언트가 인터넷 상에서 데이터를 주고 받기 위한 프로토콜 입니다. 이는 어떠한 데이터라도 전송할 수 있게끔 설계가 되어있습니다. 예를 들어서 이미지나, 동영상, 텍스트, 오디오 등 종류를 가리지 않고 전송할 수 있습니다.


http 작동방식

http는 서버/클라이언트 모델을 따릅니다.

클라이언트가 서버에게 요청을 보내면 서버는 클라이언트에게 응답을 보냅니다.

http는 무상태 프로토콜(stateless protocol)이라고도 부릅니다. 클라이언트가 서버한테 요청하면 서버는 클라이언트에게 응답을 하는데, 그전에 일어나는 과정이 먼저 연결을 하는 과정이 일어납니다.

서버는 이렇게 클라이언트에게 받은 요청을 응답결과로 만들어서 응답을 하고 나면 바로 클라이언트와의 연결을 끊습니다.

이 방식의 장점은 불특정 다수를 대상으로 하는 서비스에는 적합하다는 것입니다.서버가 계속 연결되어 있는 형태가 아니기 때문에 서버간의 최대 연결 수 보다 훨씬 많은 요청과 응답을 처리할 수 있습니다.

단점은, 연결을 끊어버리기 때문에, 클라이언트의 이전 상황을 알 수가 없습니다. 이러한 특징 때문에 정보를 유지하기 위해서 'Cooki'와 같은 기술이 등장하게 되었습니다.


URL이란 ?

'url(Uniform Resource Locator)'는 인터넷 상의 자원의 위치, 특정 웹 서버의 특정파일에 접근하기 위한 경로 혹은 주소 입니다.

물리적인 서버를 찾기 위해서 반드시 필요한 것은 IP주소 또는 도메인 주소입니다.물리적인 컴퓨터를 찾은 후에 해당 컴퓨터 안에 등장하는 소프트웨어 서버를 찾기 위해서는 포트 값이 필요합니다.


갑자기 헷갈리기 시작하네요.

쉽게 설명드리자면 IP는 여러분의 집 주소, 하나의 컴퓨터에는 IP가 한 개 존재하는 거다 라고 생각하시면 되고, 우리 집 안에 있는 여러가지 방들중에 각각 하나의 방이 포트라고 생각하시면 됩니다!

단, 서버들은 하나의 방에서 여러명이 같이 생활 할 수 없습니다. 그래서 하나의 방에 여러 개의 서버가 존재 할 수는 없다 라고 기억하시면 되겠습니다 !

정리해보면, 하나의 물리적 컴퓨터에는 여러개의 소프트웨어 서버가 동작하는데, 이 서버는 포트 값이 다르게 동작해야한다.

이런 포트 값은 0보다 큰 숫자라는 것을 기억하시면 좋을 것 같습니다.

참고로 http의 서버의 기본 포트 값은 80입니다.


다시 그림으로 보는 HTTP

  1. 클라이언트가 서버로 요청
  2. 요청에 따른 응답 결과 클라이언트에게 응답
  3. 이 응답이 끝나고 나면, 서버와 클라이언트의 연결이 끊김 (stateless)

데이터 포맷

요청되는 데이터들의 정해진 규칙을 데이터 포맷이라고 하는데, 이런 웹 브라우저는 위의 그림과 같은 요청 메세지를 갖습니다. 요청 헤더 부분과 빈줄 부분 요청 바디 부분 이렇게 3가지의 부분으로 나뉘게 됩니다.

헤더 부분 부터 살펴보면 GET 을 볼 수 가 있습니다. 요청하는 자원의 위치를 명시해주는 부분입니다. 마지막으로 나오는 HTTP 프로토콜의 버전을 볼 수가 있고 웹 브라우저가 사용하는 프로토콜의 버전을 명시해주는 부분이라고 생각하시면 됩니다.

그 다음에 빈 줄 부분 다음의 요청 바디에 아무 것도 없는 것을 볼 수 가 있습니다. 실제 이 GET이라는 방식은 요청할 때 가지고 가야 하는 자원 같은 부분들을 URL에다가 붙여서 가지고 갑니다. 그래서 GET 대신 POST나 PUT을 사용하게 되었을 때 들어오게 된다 정도만 기억하시면 좋을 것 같습니다.

다음은 응답 데이터 포맷 인데, 요청 데이터 포맷과 마찬가지로 헤더, 빈 줄, 응답 바디 부분으로 구분되어 있음을 볼 수가 있는데요, 첫 줄에는 반드시 응답 HTTP 프로토콜의 버전, 그 다음은 응답 코드 그리고 응답 메세지 등을 볼 수 가 있습니다. 그리고 나머지 헤더 부분에는 날짜, 웹 서버 이름과 버전, 콘텐츠 타입, 캐시 제어 방식, 콘텐츠 길이 등의 값이 나오게 되네요.


여기까지 웹이 어떻게 요청되어서 응답이 되는지에 대해서 자세히 살펴보았습니다 감사합니다 :)

profile
식물생명공학을 전공하고있는 개발자 지망생 :)

0개의 댓글