>session: 웹 동작 원리(1)

yeeun lee·2020년 4월 3일
0

지난번 웹 동작 원리 내용을 정리하던 것에 http 관련 내용을 추가했다. 정리가 밀려서 내가 새로 배운 내용이 무엇인지 헷갈리는 지경이다 ... 주말에 정리가 필요해 👊🏻

브라우저에 www.naver.com을 입력하면 네이버 서버에서 요청에 응답하고, 응답을 받으면 컨텐츠가 브라우저에 나오게 된다. 크롬은 네이버 서버에 어떻게 찾아갔고, 네이버 서버는 내 컴퓨터를 어떻게 찾았을까?

1. client-server

1.1 Host server

http 통신은 항상 호출-응답으로 이루어져 있고, 호출-응답은 인터넷이 연결되어 있기 때문에 주고 받을 수 있다.

인터넷에 내용이 띄워진다는 것은 홈페이지의 구성파일들이(html, css, js) 인터넷에 “항상" 연결되고, “절대" 꺼지지 않는 호스트 컴퓨터(=호스트 서버)를 통해 모든 내용을 저장하고 사용자의 요청이 오면 언제든 응답하는 것이다.

보통 서버를 빌려서 쓰게 되고, 예시로는 AWS, e2/S3, cafe24, 호스팅센터 등이 있다.

A web hosting service is a type of Internet hosting service that allows individuals and organizations to make their website accessible via the World Wide Web.

Web hosts are companies that provide space on a server owned or leased for use by clients, as well as providing Internet connectivity, typically in a data center.

1.2 ip

Internet Protocol address, 즉 인터넷 규약 주소의 줄임말. IP 주소는 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기 위해서 사용하는 특수한 번호이다. 인터넷이 연결되면 디바이스(컴퓨터, 핸드폰, 내비게이션 등)에 ip주소가 할당된다.

네트워크에 연결된 장치가 라우터이든 일반 서버이든, 모든 기계는 이 특수한 번호를 가지고 있어야 한다. 클라이언트(내 브라우저)와 서버(네이버 호스트 서버)는 요런 주소를 통해 서로에게 접속할 수 있다.

IPv4라는 주소 체계로 부여한 고유 번호였는데, 이제 32비트는 꽉 차서 최근에는 주소 길이를 128비트로 늘려 IPv6로 쓰게 되었다.

- domain name

위처럼 복잡한 ip주소는 컴퓨터라면 모를까 사용자는 기억하기 어렵다. 때문에 기업들은 문자로된 고유 주소를 구매함으로써 string으로 된 주소를 가질 수 있게 된다.

1-2년 단위로 사고 1년에 2만원정도. domain의 주인에 대해 자세한 신상 기록을 요구한다고 한다!

  • https:// : www통신 상 정보를 주고받기 위한 프로토콜
  • port: 한 포트에 여러 웹서버를 띄울 수 있다. port까지를 base url이라고 부른다.
  • path: 백엔드에서 웹 사이트 기능에 따라 적용해놓은 path (django urls.py에서 적용했던 내용)
  • query string: 물음표 뒤에 오는 주소. base url 뒤에 추가된다.

- DNS

domain name system. 도메인 이름을 쓰면 머신이 읽을 수 있는 ip주소로 변환해주는 서버이다. 결과적으로 domain name - ip주소가 매칭되어 있어, 도메인으로 ip를 찾을 수 있게 한다.

Amazon Route 53, Cafe24 도메인관리, 가비아 네임서버 관리 서비스 등이 있다.

DNS 서버란 도메인과 서버를 연결해주는 중간 서버로, 도메인 이름을 인터넷상의 주소(IP 주소)로 변환시켜 원하는 컴퓨터를 찾아갈 수 있도록 한다.

배포(deploy)

내가 최종으로 만든 코드와 파일을 호스트 서버에 업로드하면, 전 세계에 내가 개발한 것을 공개하고 접속할 수 있게 만들 수 있다. 갑자기 이 내용이 왜 나왔는지 모르겠는데 어쨌든 추가한다... 😞

2. http?

이제 각각의 디바이스가 어떻게 서버와 클라이언트를 찾아가는지는 알았다. 그럼 찾아가서 어떻게 요청하는지, 응답을 받는지에 대해 정리해보려고 한다.

http는 HyperText Transfer Protocol, 즉 하이퍼텍스트(HTML) 문서를 교환하기 위해 만들어진 통신 규약이다. HTTP는 TCP/IP 기반으로 되어있다.

즉 웹상에서 네트워크로 서버끼리 통신을 할때 어떠한 형식으로 서로 통신을 하자고 규정해 놓은 "통신 형식" 혹은 "통신 구조" 라고 보면 된다. 프론트엔드 서버와 클라이언트, 혹은 백엔드와 프론트엔드 서버 간 통신에 사용된다.

2.1 http 핵심 요소

- request / response

요청과 응답 구조로 이루어져 있다. 클라이언트가 request를 서버에 보내면, 서버는 response를 보내는 구조다.

- statelss

상태를 저장하지 않는다. 요청이 오면 응답할 뿐, 요청/응답은 연결되어 있지 않고 독립적이라는 뜻이다. 그래서 이전 데이터가 필요할 경우 클라이언트 사이드에서 쿠키나 세션을 저장해 요청 시 함께 첨부해서 보내게 된다. (예를 들어 로그인!)

2.2 http 구조

요청과 응답(request, response)은 모두 세 가지 부분으로 구성되어 있다. 두 가지 요소는 동일한 이름을 가지고 있기 때문에, 요청인지 응답인지에 따라 starline인지 statusline인지 구분하면 된다.

startline(요청) & statusline(응답)

headears

body

- startline

request-side의 첫 줄. 요청 내용을 간단히 나타낸다.

GET /search HTTP/1.1
  • HTTP method: 요청이 의도한 액션을 정의한 부분. GET, POST, PUT, DELETE 등이 있으나, 주로 GET, POST가 사용된다.
  • request target: 요청이 전송되는 목표 url이다. /login
  • http version: 사용되는 http의 버전을오 1.0, 1.1, 2.0 등이 있다.

- statusline

response-side의 첫 줄. 받은 상태를 간략하게 나타내주는 부분이다.

HTTP/1.1 404 Not Found
  • HTTP version
  • status code: 응답 상태를 나타내는 숫자로 되어 있는 코드.
  • status text: 숫자가 아니라 사람의 말로 설명해주는 부분.

- headers

Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/json
Content-Length: 257
Host: google.com
User-Agent: HTTPie/0.9.3

추가 정보(addtioanl informagion, meta information)을 담고 있는 부분이다. key:value값으로 되어 있다. (colon이 사용됨!)

자주 사용되는 header 정보

  • Host: 요청이 전송되는 target의 host url: 예를 들어, google.com
  • User-Agent: 요청을 보내는 클라이언트의 대한 정보: 예를 들어, 웹브라우저에 대한 정보.
  • Accept: 해당 요청이 받을 수 있는 응답(response) 타입.
  • Connection: 해당 요청이 끝난후에 클라이언트와 서버가 계속해서 네트워크 컨넥션을 유지 할것인지 아니면 끊을것인지에 대해 지시하는 부분.
  • Content-Type: 해당 요청이 보내는 메세지 body의 타입. 예를 들어, JSON을 보내면 application/json.
  • Content-Length: 메세지 body의 길이.

- body

요청의 실제 메시지. body가 없는 요청도 많다. GET 요청은 body가 없는 부분이 많다.

{
    "imp_uid": "imp_1234567890",
    "merchant_uid": "order_id_8237352",
    "status": "paid"
}

3. http method

GET

데이터를 서버로부터 받아올 때 사용하는 method. 데이터 생성, 수정, 삭제 없이 받아오기만 할 때 사용한다. request body를 안 보내는 경우가 많다.

POST

데이터를 생성, 수정, 삭제할 때 사용하는 method. 무언가 바뀌기 때문에 request body가 포함되서 보내진다.

그외

지금은 위에 두 가지만 이해하기도 벅차니 OPTIONS, PUT, DELETE는 필요할 때마다 추가적으로 정리하는 것으로 ... ^^

4. http status code

4.1 기본 에러

- 200 OK

문제 없이 잘 실행되었을 때 보내는 코드

- 500 Internal Server Error

서버에 에러가 났을 때 사용하는 코드. API 백엔드 개발자들이 가장 싫어하는 코드다!

- 301 Moved Permanently

해당 URI가 다른주소로 바뀌었을 때 보내는 코드

URI ?

통합 자원 식별자(Uniform Resource Identifier, URI)는 인터넷에 있는 자원을 나타내는 유일한 주소이다. URI의 존재는 인터넷에서 요구되는 기본조건으로서 인터넷 프로토콜에 항상 붙어 다닌다. URI의 하위개념으로 URL, URN 이 있다.

scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]

4.2 400 에러

- 400 Bad Request

잘못된 요청일 때 보내는 코드. 주로 요청의 input값이 잘못되었을 때 사용한다. 예를 들어 전화번호를 보내야 하는데 문자를 보냈다거나 등

- 401 Unauthorized

유저가 요청을 진행하려면 로그인, 회원가입 등 인증이 필요하다는 것을 나타낼 때 쓰는 코드

- 403 Forbidden

유저가 권한 자체가 없다는 뜻. 예를 들어 과금한 유저만 볼수 있는 데이터를 무과금 유저가 요청했다든가 등

- 404 Not Found

요청한 URI가 존재하지 않는다는 뜻

profile
이사간 블로그: yenilee.github.io

0개의 댓글