[Way to PM] 네트워크 - URI, HTTP 기본

2024. 1. 19. 09:44[Way to PM] 네트워크 기초

1. URI

- 사람은 주민등록번호로 식별할 수 있고, 은행 계좌는 계좌번호로 식별할 수 있듯, 웹 서버의 자원에 접속하기 위해서는 URI라는 식별자가 필요하다.

-우리가 흔히 접속하는 구글 google.com 이것도 URI 라고 할 수 있다.

-Uniform Resource Identifier 의 약자로, 리소스를 식별하는 방법에 대한 정의다. 이는 두가지 종류가 있는데, URL과 URN 모두를 포괄하는 개념이 이 URI 이다.

  • URI = URL(locator) URN(name)

URL 은 Locator, 리소스의 위치를 뜻하고, URN은 Name, 즉 리소스의 이름을 의미한다. 그리고 보통 URI라 함은 URL을 말한다.

2. URL 하나씩 뜯어보기

- https://www.google.com/search?q=calendar&oq=calendar&sourceid=chrome&ie=UTF-8

 

🔎 calendar: Google 검색

 

www.google.com

-위 URL은 무엇으로 구성이 되어있는지 하나씩 뜯어보겠습니다.

-scheme://[호스트명]:[포트][/path][?queryParameter]

  • scheme : 주로 프로토콜(https)을 입력 포트는 생략 가능. http포트는 80, https는 433
  • 호스트명: (www.google.com)-도메인명, 혹은 ip주소를 직접 사용 가능
  • (생략된) 포트번호: 일반적으로 생략 가능 https는 http에서 secure(보안)요소가 추가된 것
  • 패스 (/search): 리소스 경로
  • 쿼리 파라미터(q=calendar&ie=UTF-8): 물음표 뒤에 오는 값으로 key=value 형태. query parameter, query string. 웹 서버에 key, value 값으로 string 데이터를 전달

3. 웹 브라우저 요청 흐름

-클라이언트 웹 브라우저에서 URL 입력 -> 입력한 DNS로 IP조회 -> 해당 주소로 HTTP 요청 메시지 전송

4. HTTP 기본

-웹에서 정보를 주고받을 수 있는 프로토콜로

Request: 클라이언트가 서버에 자원을 요청하는 행위. 보통 사용자가 사용하는 화면이 클라이언트

Response: 클라이언트 요청에 따른 서버의 응답

5. HTTP 특징

 1) HTTP 메시지로 모든것을 전송 가능

-HTTP 메시지로 모든 데이터를 전송할 수 있다. 가장 많이 사용하는 형태인 HTML, JSON, 혹은 이미지, 영상 타입의 데이터도 HTTP를 통해 전송이 가능하다. 다음은 HTTP가 전송 가능한 데이터 종류를 나열했다.

  • HTML, TEXT
  • (API 호출시) JSON, XML
  • IMAGE, 음성, 영상, 파일

거의 모든 형태의 데이터를 전송할 수 있다. 백엔드 개발자가 서버간에 데이터를 주고받을 때도 대부분 HTTP를 사용한다.

 

2) 무상태(stateless)

-서버가 클라이언트의 상태를 보존하지 않는 특징을 갖는다. 따라서 서버 스케일링이 자유롭고, 독립적인 서버 운영이 가능해진다.

-단점은 클라이언트의 상태를 보존하지 않기 때문에 클라이언트가 데이터를 추가적으로 전송해야 하는 점이다.

 

*상태 유지의 예시

손님: 이 아이패드 얼마인가요?
점원: 190만원 입니다.
손님: 하나 구매하겠습니다.
점원: 총 190만원 입니다. 결제는 어떻게 해드릴까요?
손님: 일시불로 해주세요
점원: 네 결제 완료되었습니다.

점원은 손님이 이전에 한 이야기(상태)를 알고있(유지)기 때문에 이전 대답을 기억한 상태로 일처리 가능

 

*무상태 예시 - 점원이 바뀐 상황이라, 손님이 이전에 했던 이야기를 알지 못하는(무상태) 상황

손님: 이 아이패드 얼마인가요?
점원A: 190만원 입니다.
손님: 하나 구매하겠습니다.
점원B: ? 어떤것을? 하나 구매하신다는거지요?
손님: 일시불로 해주세요.
점원C: ? 무엇을? 일시불로 구매하신다는거지요?

 

*무상태 상황에서의 통신

손님: 이 아이패드 얼마인가요?
점원A: 190만원 입니다.
손님: 아이패드, 한 개 구매하겠습니다.
점원B: 총 190만원 입니다. 결제는 어떻게 해드릴까요?
손님: 아이패드, 한 개 구매, 일시불로 결제 해주세요.
점원C: 네 결제 완료되었습니다.

이러한 로직을 따르면 손님이 늘어나도 각각의 통신 방식이 독립적이라 점원이 바뀌어도 소통이 가능해진다.

즉, 클라이언트 요청이 증가해도 서버를 무한 증설할 수 있고(점원 대거 투입), 때문에 무상태 상황에서는 응답 서버를 쉽게 바꿀 수 있게 된다.

모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한

-로그인 기능 구현 싯 '무상태'일 경우 => 서버에서 클라이언트 정보를 기억하고 있지 않기 때문에 로그인 기능은 '무상태'로 구현이 어려워 중간다리 역할 필요. 이때 필요한 개념이 'JWT토큰' Stateless 특징을 유지하면서도 로그인 상태 유지 가능

이외에도 로그인 인증 방식에 쿠키, 세션이라는 개념 존재

 

3) 비 연결성(connectionless)

-HTTP는 기본적으로 연결을 유지하지 않는다. 이를 비연결성이라고 한다. 이런 특징으로 인해 서버 자원을 매우 효율적으로 사용할 수 있게 된다. 만약 HTTP 통신시 계속해서 커넥션이 맺어져 있으면, 그만큼 자원이 소모되기 때문

이러한 비연결성 특징으로 인해 매 요청마다 새로운 커넥션을 맺어야한다.

TCP/IP 연결을 3 way handshake를 통해 맺기 때문에 매 요청마다 이 과정을 거치는 시간이 걸린다.

또한 매 요청마다 웹 브라우저 결과를 원하게 되면 HTML/CSS/JS/이미지 등의 리소스를 반환하기 때문에 들어가는 자원이 클 수 밖에 없다.

이를 해결하기 위해

한 페이지 요청시 페이지가 모두 로딩되기까지 초기에 맺어진 커넥션을 끌고 가서 페이지가 모두 그려지면 커넥션을 종료한다. 이를 http 지속 연결이라고 한다. 이렇게 비연결성 문제를 해결할 수 있다.

 

4) 클라이언트 - 서버 모델

-클라이언트가 요청을 생성하기 위해 연결은 연 후, 응답받을 때 까지 대기

 

출처: 이스트소프트 백엔드 개발자 캠프 오르미