Today Sangmin Learned
Published 2021. 5. 16. 18:47
[네트워크] HTTP와 HTTPS CS/네트워크
728x90

HTTP와 HTTPS

HTTP와 HTTPS, 이 둘은 아마도 웹페이지의 주소를 볼 때 가장 앞에 있는 것으로 많이들 봤을 것이다. 이 HTTP와 HTTPS는 각각 무엇이며, 어떠한 차이를 갖고 있는가에 대해 알아보자.

HTTP

HTTP는, HyperText Transfer Protocol을 줄인 것으로, 서로 다른 시스템들 사이에서 통신을 주고받게 해주는 가장 기초적인 프로토콜(약속)이다. 웹 브라우저와 웹 서버가 통신할 때 사용하는 통신규칙 정도로 생각하면 편하다.

HTTP는 크게 두 가지, 요청(Request)과 응답(Response)으로 이뤄져 있다.

스크린샷 2021-05-05 오후 7 14 00

출처: 프런트엔드 개발자가 알아야하는 HTTP 프로토콜 Part 1

요청(Request)과 응답(Response)

요청은, 클라이언트가 서버에게 데이터를 달라고 하는 과정이다. 이를 이해하기 위해 우선 클라이언트서버가 뭔지부터 알아야 한다.

클라이언트는, 요청을 보내는 쪽을 의미하는데, 웹의 관점에서는 브라우저에 해당한다. 그리고 서버는 요청을 받는 쪽에 해당하고, 일반적으로 데이터를 보내주는 쪽의 컴퓨터를 의미한다. 이러한 요청은 URL을 이용해서 이뤄지는데, 이제 URL이 무엇인지 알아보자.

URL?

URL이란, 웹을 뒷받침하는 주소체계라고 생각하면 편하다. URL의 구성을 살펴보자.

스크린샷 2021-05-05 오후 7 36 24

출처: 프런트엔드 개발자가 알아야하는 HTTP 프로토콜 Part 1

위와 같이, URL은 프로토콜://호스트 주소(:포트번호)/경로?쿼리로 이뤄져 있다. 이제 각각에 대해 알아보자.

1. 프로토콜

  • 통신 프로토콜은, 네트워크 통신이 기본적으로 전세계적으로 가능하게 해 주는 이유가 된다. 전세계적으로 통일된 규칙 하에서 움직이기 때문이다. 이러한 규격을 통신 프로토콜이라고 한다.

프로토콜은 여러 종류가 있는데, 우리가 가장 많이 사용하는 프로토콜은 HTTP가 있다. 실제로 네트워크 통신에 가장 많이 쓰이는 프로토콜이기도 하다.

그 외에도 컴퓨터로 파일 접근, 전송 및 관리 등을 할 때 사용되는 SSH 프로토콜, 이메일을 보낼 때 사용되는 SMTP 프로토콜 등이 있다.

2. 호스트 주소

  • 호스트 주소는, 컴퓨터의 주소를 표시하는 영역과 같다. 도메인 네임, 혹은 IP 주소가 들어간다. 여기서 도메인 네임은, 쉽게 말하면 그냥 www.naver.com 와 같이, 식별하기 어려운 IP 주소(ex. 240.10.20.1)를 기억하기 쉽게 만들어 주기 위한 것이라고 생각하면 된다.

3. 포트 번호

  • 포트 번호는, 컴퓨터에서 실행되고 있는 수많은 프로세스들의 주소이다. 근데, 일반적으로는 사이트 주소에 포트 번호가 표시되어 있지 않은데, 이는 기본적으로 포트번호를 입력하지 않았을 때는 프로토콜이 갖고 있는 기본 포트번호가 적용되기 때문에 굳이 적지 않아도 되는 것이다. HTTP의 경우 80번, HTTPS의 경우 443번의 포트번호가 기본으로 적용이 된다.

따라서, https://naver.com은, https://naver.com:443과 같은 것이다.

4. 경로

  • 경로는, 서버 프로그램 내에 짜인 로직으로 가는 영역이다. 네이버 연예뉴스를 예로 들어보자.

스크린샷 2021-05-08 오후 3 30 41

홈은 /home이라는 경로를 갖고 있고,

스크린샷 2021-05-08 오후 3 31 20

TV는 /tv라는 경로를 갖고 있다. 이렇게 각각 홈과 TV로 가는 로직으로 가는 영역을 /home, /tv와 같은 경로로 나타내고 있는 것이다.

5. 쿼리

URL의 마지막 구성 요소이다. query는 URL에서 추가적인 데이터를 표현할 때 사용된다.
query는 Path 뒤에 ?를 기점으로 해서 key=value 형태로 데이터를 표현한다. 이번에는 유튜브를 예로 들어보자.

유튜브 검색창에 google을 치고 난 후의 URL을 보면
https://www.youtube.com/results?search_query=google

와 같이 나타나고, youtube를 치면

https://www.youtube.com/results?search_query=youtube

와 같이 나타난다. 여기서 search_query=google이 곧 key=value의 형태를 띤다고 보면 된다.

이제 URL을 살펴봤으니, 이것을 통해 뭘 어떻게 한다는 건지 알아보자.

HTTP 요청(request) 메소드

앞에서 살펴본 URL을 이용하면, 서버에 특정한 데이터를 요청할 수 있다. 요청하는 데이터에 특정 동작을 수행하게 하려면 HTTP 요청 메소드를 이용하면 된다.

주요한 메소드로 크게 4가지(GET, POST, PUT, DELETE)가 있다.

1. GET

  • GET 메소드는 특정 리소스의 표시를 요청한다. GET을 사용하는 요청은 데이터를 받기만 한다. 쉽게 생각하면 존재하는 자원에 대한 표시, 조회 요청을 한다고 보면 된다.

2. POST

  • POST 메소드는, 새로운 자원을 생성한다.

3. PUT

  • PUT 메소드는, 존재하는 자원을 변경하는 역할을 한다.

4. DELETE

  • DELETE 메소드는, 이름에서도 유추할 수 있듯이 존재하는 자원을 삭제한다.

위 4가지와 같이, 데이터에 대한 조회, 생성, 변경, 삭제 동작을 HTTP 요청 메소드로 정의할 수 있다. 이제 요청(Request) 메소드에 대한 응답(Response) 메소드들을 알아보자.

HTTP 응답(Response) 코드

상술한 HTTP 요청 메소드에 대해 서버는 HTTP 상태 코드를 통해 응답한다.

http://domain.com/users

위와 같이 사용자 목록을 받아오는 GET 메소드 요청을 날렸다고 해 보자. 이 경우 서버는 크게 200(성공), 404(실패) 두 가지 중 하나의 상태 코드로 응답한다. 이 HTTP 상태 코드를 통해 추가적인 로직을 구현할 수 있다.

주요 상태 코드들을 살펴보자.

2xx: 성공

200번대의 상태 코드는 대부분 성공을 의미한다.

  1. 200: 요청이 성공적으로 되었다.
  2. 204: No Content
  3. 205: Reset Content
  4. 206: Partial Content

3xx: 리다이렉션

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

  1. 301: Moved Permanently
  2. 303: See Other
  3. 304: Not Modified

4xx: 클라이언트 에러

400번대의 상태 코드는 대부분 클라이언트의 코드가 잘못되었다는 뜻이다. 유효하지 않은 자원을 요청했거나, 요청이나 권한이 잘못된 경우 발생한다.

  1. 400: Bad Request
  2. 401: Unauthorized
  3. 403: Forbidden
  4. 404: Not Found
  5. 405: Method Not Allowed
  6. 409: Conflict

5xx: 서버 에러

500번대 상태 코드는 주로 유효한 요청에 대해 서버가 명백하게 수행하지 못한 경우 발생한다.

  1. 500: Internal Server Error
  2. 501: Not Implemented
  3. 503: Service Unavailable

HTTPS

HTTPS는 HyperText Transfer Protocol oer Secure Socket Layer의 줄임말로, 주로 사용하는 HTTP의 보안 버전이다.

HTTPS는 왜 등장했을까?

HTTP는 전세계적으로 가장 널리 쓰이는 통신 프로토콜이지만, 네트워크 통신 과정에서 보안에 취약하다는 약점을 지니고 있다. 이때문에 보안이 강화된 HTTPS가 등장하게 된 것이다.

현재 대부분의 웹사이트들은 HTTP 프로토콜을 막고, HTTPS 프로토콜을 사용하도록 권장한다. 실제로 구글은 2014년부터 HTTPS 프로토콜 적용이 된 웹사이트들에 대해 검색 결과 상위 노출 순위 산정에 가산점을 주고 있다. 그리고 이 가산점은 시간이 갈수록 강회되고 있다.

그래서 결론은?

HTTP는 클라이언트와 서버가 정보를 요청과 응답의 형태로 주고받을 수 있도록 지정한 통신 프로토콜(규격) 이라고 정의할 수 있고,

HTTPS는 이러한 HTTP 프로토콜의 보안 취약성을 해결한 통신 프로토콜이라고 정의할 수 있겠다.

가장 큰 차이점은 암호화의 여부이다. HTTPS 프로토콜 하에서는 데이터를 SSL 인증서를 통해 암호화하는데, 이렇게 전송된 데이터는 전송 과정에서 누가 훔쳐간다 하더라도 해독할 수 없으므로 보안 상의 이점을 가진다는 것이다.

스크린샷 2021-05-08 오후 4 31 03 근데 페이지의 프로토콜 상태가 ..?

참고

Mozilla
프런트엔드 개발자가 알아야하는 HTTP 프로토콜 Part 1
그렙 노션
HTTP VS HTTPS 차이, 알면 사이트의 레벨이 보인다

profile

Today Sangmin Learned

@steadily-worked

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!