인터넷에서 데이터를 주고받을 때는 HTTP를 많이 사용합니다.

웹브라우저에서 서버에 연결하고 웹페이지를 받아 와 화면에 보여줄 때 사용하는 것이 HTTP이기 때문에 인터넷에서 웹페이지를 요청하고 응답으로 받을 때는 HTTP를 사용한다고 생각하면 쉽습니다.

그러면 HTTP는 무엇일까요?

HTTP도 앞에서 만들어보았던 소켓 기반으로 동작합니다.

데이터를 주고받을 때 HTTP라는 표준 프로토콜에 맞게 주고받는 것이죠.

HTTP가 무엇인지 좀 더 구체적으로 알아봅시다.

 

 

 

 

- 인터넷 설명 -

 

 

 

 

 

 

 

 

 

- 내 설명 -

0. 설명

이딴 "소켓"이라는 것을 다시 설명하자면,

다른 컴퓨터와 연결을 만드는 과정 이고요, 그 연결 위에서 데이터가 왔다갔다 하는 겁니다.

그래서,

서버쪽에서는 "서버소켓"을 만들고,

클라이언트쪽에서는 "일반소켓"을 만들어서,

클라이언트에서 서버로 "접속"을 하고, "접속"을 한다는 것은 "연결"이 만들어 진다는 겁니다.

"연결"이 실제로는 

TCP라는 레이어에서 패킷을 계속 주고 받으면서,

저쪽 컴퓨터가 "인터넷망"에서 어느 위치에 있는지를 계속 알아내는 과정입니다.

그리고,

그것이 계속,

알고 있는 상태이니깐,

그 쪽으로 데이터를 전송하는게 훨씬 쉽겠죠!!

이것을 "소켓"이라고 할 수가 있습니다.

 

 

그러면 "웹"이라는 것은 뭐냐?면

HTTP라는 프로토콜을 쓴다라고 한다.

 

프로토콜 -> 정해진 약속

데이터가 왔다갔다 하는 방법을 이렇게 만들겠다라고 정해진 것 중에 국제표준에 맞는 HTTP라는 겁니다.

 

이 HTTP와 소켓과 어떤 것이 다르냐면!!

실제로는 소켓과 HTTP는 많이 다르지 않습니다.

무슨 말이냐면,

HTTP도 일딴 소켓을 쓰도록 되어있습니다.

그니깐 밑바닥에는 "소켓서버"를 만들고 클라이언트가 "소켓"으로 접속하는 구조가 동일하다는 겁니다.

 

 

그러면,,, HTTP랑 소켓이랑 대체 다른게 뭐냐??

뭐냐면, 

소켓을 연결을 만들고 나면, 데이터를 주고 받자나요!

그 데이터를 주고 받을 때, 우리는 소켓을 테스트 할때는 임의로 "hello"라고 보냈지만,

"hello"라고 보내지말고, 데이터를 주고받는 형식을 또 정한다라는 거다..........하.....

데이터를 주고 받는 형식을......

소켓 위에서.......

 

그래서, HTTP라고 하는 형식을 만들게 된겁니다..

 

 

----------------------------------------------------------------------------------------------------------

 

 

우리가 서버쪽으로 연결을 만드는 소켓이 있다라고 한다면, 그 소켓 위에서

HTTP라고 하는 정해진 포맷되로 데이터로 보내겠다라는 겁니다.(=HTTP Request=HTTP요청)

 

거기서 응답을 받을 때도,

정해진 포맷으로 응답을 받게 됩니다.(=HTTP Response=HTTP응답)

 

그러면 어떤 포맷인거지??? 아래에서 보면 됩니다.

단순히 "hello"라는 글자만 보내는게 아니라, 어떤 형식을 주겠다라는 겁니다!

 

 

 

 

--------------------------------------------------------------------------------------------------------------

 

 

 

 

이 형식 입니다.!

 

(HTTP Request=HTTP요청)을 보낼 때,

소켓 연결 위에서 보낼 수 있다라는 겁니다!

소켓 연결 위에서 정해진 포맷으로 주고받게 됩니다.

그 때, 정해진 포맷은 "헤더"와 "바디"로 구분이 됩니다.

 

 

 

 

-------------------------------------------------------------------------------------------------------

 

 

 

 

더 구체적으로 설명 해보겠습니다.!!

"헤더"와 "바디"로 나누어 진다고 했습니다.

 

"헤더"라고 하는 것은 여러 줄로 구성이 되어 있습니다.

각각의 "헤더"라인이 한 줄씩 들어가 있습니다.

각각의 줄은 "엔터(=/r /n)"를 쳐서 구분이 되어 있습니다.

 

그리고 "헤더"와 "바디"가 구분되는거는 한줄이 더 띄어져 있습니다.(밑에그림)

"바디"에는 첫번째 - 그냥 데이터를 집어 넣을 수가 있고요,

두번째 - JSON이라는 또 다른 형식의 포맷으로 데이터를 넣어서 보낼 수도 있습니다.

"헤더"에 들어가 있는 것들은 이미 정의되어 있는 것들 중에 갔다 적어주기만 하면 됩니다.

"헤더"는 이미 정의되어 있는거 이해하고 골라 적어주기만 하면 됩니다.

 

 

 

 

 

----------------------------------------------------------------------------------------------------------

 

 

 

 

응답도 요청과 똑같이 "헤더"와 "바디"로 나누어 집니다.

"바디" 안 에는 웹페이지 태그 정보 같은 것들이 들어가 있습니다.

 

 

 

 

---------------------------------------------------------------------------------------------------------

 

 

 

 

실제 브라우저에 띄워서 위에 내용을 확인 해보겠습니다.

"크롬웹브라우저"에서 ctrl+shift+i(="개발자 도구")를 누르면

그 안에서 무언가를 확인해 볼 수 있는 개발자 모드의 화면을 확인 할 수 있습니다. (밑에 그림)

 

 

 

 

 

주소창에 "google.com" 치고 엔터를 쳤을 때,

서버쪽으로 요청하는 정보들 입니다.(밑에 그림)

 

 

 

 

 

 

 

그 중에 첫번째것만 본다면,  첫번째것을 클릭을 하면 (밑에 그림)

오른쪽에 "Hearders"눌러서 보면, "요청해더"가 이렇게 넘어간다는 것을 알 수가 있습니다.

"General' 안에 적혀 있는 것들이 "구글서버"로 보내지면,

밑에 있는 "Response Headers" 안에 적혀 있는 것들이 "응답"으로 옵니다.

결과적으로, "응답"과 "요청"이 "헤더"가 붙어서 넘어가고 옵니다!!!

 

 

 

 

 

"Preview" 를 눌러서 보면, 응답하는 "바디"부분만 보여줍니다.

 

 

 

 

 

이게 웹페이지구요, 우리들이 눈으로 보게되는 웹페이지 입니다,

이게 HTTP라고 하는 , 웹이라고하는 프로토콜입니다.

 

 

 

 

 

결론은,

HTTP를 통해서

우리가 "요청"을 하고 "응답"을 받을 수가 있습니다.

 

 

 

HTTP는

소켓이라고 하는 연결 위에서 

데이터가 왔다갔다하는 포맷을 정의한거입니다.

그리고 "헤더"와 "바디"로 구분 됩니다.

그리고 "바디" 안에 우리가 원하는 데이터를 넣을 수 있습니다.

그리고 "요청"을 보내거나, "응답"을 받을 때,

위에 있는 형식들을 다 일일이 다 적을 수가 있긴한데, 귀찮습니다...

그래서, 라이브러리 "볼리"라는 것을 많이 사용합니다(안드로이드앱에서는)

그리고 "볼리"라는게 간단하게 쓸 수 있는 방법이라서,,,

그거보다 가장 근본적으로는 HTTPConnectionURL이라는 걸 사용해서, 인터넷 연결을 하고,

그 다음에 HTTP요청을 보내고 받을 수가 있습니다.

 

 

 

 

 

 

 

-참고-

!중요!

그리고 응답이 "웹페이지"로 오는 경우가 아니라("웹페이지"가 "바디"로 오는 경우가 아니라),

Json포맷으로 오는 경우가 있을 수가 있습니다.