브라우저의 작동 원리와 HTTP [HTTP/네트워크]

조성원·2023년 3월 29일
0
post-thumbnail

클라이언트와 서버

어플리케이션의 사용을 위해서
끊임없는 데이터의 업데이트가 일어나게 됩니다.

빈번한 업데이트를 위해서는
자원을 사용하는 곳과 제공하는 곳을 분리하는 것이 유리합니다.

이를 위해 두 가지로 분리한 시스템을
클라이언트-서버 아키텍처(2-Tier)라고 하며,

자원을 사용하는 곳이 바로 클라이언트,
자원을 제공하는 곳은 서버라고 부릅니다.

보통 서버는 자원을 제공하는 역할을 하며,
자원을 저장하는 역할은 데이터베이스에 맡깁니다.
이러한 구조를 3-Tier 아키텍처라고 합니다.

클라이언트 영역을 설계하는 파트를 프론트엔드
서버와 데이터베이스 영역을 설계하는 파트를 백엔드라고 합니다.


클라이언트와 서버 간 데이터를 주고 받기 위해서
HTTP라는 프로토콜(통신 규약)을 이용합니다.

또한 클라이언트의 적절한 데이터 요청과 관리를 위해
서버는 API라는 문서를 관리합니다.
즉 API는 의사소통을 가능하도록 하는 메뉴판입니다.




HTTP란?

HTTP는 데이터를 주고받기 위해 정의한 통신 규약입니다.

웹을 기준으로 브라우저와 서버 간
데이터를 주고받기 위한 방식으로 HTTP 프로토콜을 사용하고 있습니다.

HTTP 프로토콜은 상태가 없는 (stateless) 특징이 있습니다.
상태가 없다는 말은
데이터를 주고 받기 위한 각각의 데이터 요청
서로 독립적으로 관리가 된다는 말입니다.

이러한 특징 덕분에 서버는
세션과 같은 별도의 추가 정보를 관리하지 않아도 되고,
다수의 요청 처리 및 서버의 부하를 줄일 수 있는 성능 상의 이점이 생깁니다.

HTTP 프로토콜은 일반적으로 TCP/IP 통신 위에서 동작하며
기본 포트는 80번입니다




HTTPS란?

HTTPS는 HTTP에 데이터 암호화가 추가된 프로토콜입니다.

HTTPS는 HTTP(80번)와 다르게 443번 포트를 사용하며,
네트워크 상에서 중간에 제3자가 정보를 볼 수 없도록
공개키 암호화를 지원하고 있습니다.


HTTP 형식으로 입력한 정보를 보낼 경우,
입력한 형태 그대로 보내므로
그대로 아이디와 비밀번호가 노출될 수 있습니다.

하지만 HTTPS를 사용할 경우,
응답을 해주는 서버만 알아볼 수 있도록
정보를 암호화해서 보내게 됩니다.




URL이란?

URL은 서버에 자원을 요청하기 위해 입력하는 영문 주소입니다.
숫자로 되어있는 IP주소보다는 훨씬 기억하기 쉽다는 장점이 있습니다.

브라우저에서는 이렇게 url로 되어있는 HTTP 요청을
DNS(도메인 이름과 매칭된 IP 주소를 확인하는 작업)를 통해
host에 해당하는 실제 IP 주소로 변환하여
서버에 요청을 보냅니다

URI는 일반적으로 URL의 기본 요소에 query, fragment를 포함합니다.
query는 웹 서버에 보내는 추가적인 질문입니다.


  • Scheme: 통신 프로토콜 file://, http://, https://

  • Hosts: 도메인 또는 IP 127.0.0.1, www.google.com
    웹 페이지, 이미지, 동영상 등의 파일이 위치한 웹 서버

  • Port: 웹 서버에 접속하기 위한 통로 :80, :443, :3000

  • url-path: 파일이 위치까지의 경로 /search, /Users/username/Desktop
    웹 서버의 루트 디렉토리로부터 웹 페이지, 이미지, 동영상 등의 경로

  • query: 웹 서버에 전달하는 추가 질문 q=JavaScript

URL의 구조는 다음과 같습니다.




HTTP 요청 메서드

앞에서 살펴본 URL을 이용하면 서버에 특정 데이터를 요청할 수 있습니다.

  • GET : 존재하는 자원에 대한 요청
  • POST : 새로운 자원을 생성
  • PUT : 존재하는 자원에 대한 변경
  • DELETE : 존재하는 자원에 대한 삭제

HTTP 상태 코드

2xx - 성공

  • 200 : GET 요청에 대한 성공
  • 204 : No Content. 성공했으나
    응답 본문에 데이터가 없음
  • 205 : Reset Content. 성공했으나
    클라이언트의 화면을 새로 고침하도록 권고
  • 206 : Partial Conent. 성공했으나
    일부 범위의 데이터만 반환

3xx - 리다이렉션

300번대의 상태 코드는
대부분 클라이언트가 이전 주소로 데이터를 요청하여
서버에서 새 URL로 리다이렉트를 유도하는 경우입니다.

  • 301 : Moved Permanently, 요청한 자원이 새 URL에 존재
  • 303 : See Other, 요청한 자원이 임시 주소에 존재
  • 304 : Not Modified, 요청한 자원이 변경되지 않았으므로
    클라이언트에서 캐싱된 자원을 사용하도록 권고

4xx - 클라이언트 에러

400번대 상태 코드는 대부분 클라이언트의 코드가 잘못된 경우입니다.

  • 400 : Bad Request, 잘못된 요청
  • 401 : Unauthorized, 권한 없이 요청. Authorization 헤더가 잘못된 경우
  • 403 : Forbidden, 서버에서 해당 자원에 대해 접근 금지
  • 404: Not Found, 요청한 자원이 서버에 없음
  • 405 : Method Not Allowed, 허용되지 않은 요청 메서드
  • 409 : Conflict, 최신 자원이 아닌데 업데이트하는 경우

5xx - 서버 에러

500번대 상태 코드는 서버 쪽에서 오류가 난 경우입니다.

  • 501 : Not Implemented, 요청한 동작에 대해 서버가 수행할 수 없는 경우
  • 503 : Service Unavailable, 서버가 과부하 또는 유지 보수로 내려간 경우
profile
IT 트렌드에 관심이 많은 프론트엔드 개발자

0개의 댓글