두 메서드 요청 둘 다, 리소스의 업데이트를 한다는 점에서 유사합니다. PUT은 리소스 모든 것을 업데이트 하지만, PATCH는 리소스 일부를 업데이트합니다.
Cross-Origin Resource Sharing
CORS는 추가적인 HTTP header를 사용해서 애플리케이션이 다른 origin의 리소스에 접근 또는 요청할 수 있도록 하는 메커니즘을 말합니다.다른 origin에서 내 리소스에 함부로 접근하지 못하게 하는 목적으로도 사용됩니다.
++<CORS 동작 원리>
브라우저가 리소스 요청 시 추가적인 헤더에 정보를 담습니다.
⇒ 내 origin 정보, method 정보, 포함될 header 정보를 담아 서버에 전송하고, 서버는 서버가 응답할 수 있는 origin들을 헤더에 담아 브라우저에 보냅니다.
⇒ 브라우저는 해당 헤더를 보고 해당 origin에서 요청할 수 있다면, 리소스 전송 허용하고 그렇지 않으면 에러를 발생시킵니다.
세션 방식의 인증/인가는 사용자의 로그인 정보를 주고 받지 않기 때문에 단순 Cookie 방식보다 보안상 이점이 있습니다.
그러나 사용자를 식별할 수 있는 값을 생성하고 서버에 저장해야 한다는 단점이 있습니다.
연결을 종료하기 위해 4 Way-HandShake가 수행됩니다.
++<4 Way-HandShake>
A클라이언트가 B서버에 연결 종료를 위해 FIN flag 보냅니다.
⇒ B는 ACK(확인 메시지)를 보내고 자신의 통신이 끝날 때까지 TIME_WAIT 상태가 됩니다.
⇒ B의 통신이 끝나면, 연결 종료되었다고 A에게 FIN flag를 보냅니다.
⇒ A는 확인 메시지를 보냅니다.
++<TIME_WAIT>
만약, FIN flag 전송 전에 패킷이 라우팅 지연, 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황일 경우, 이 패킷을 DROP 되고 데이터 유실이 발생합니다. 이에 대비해서, A는 B로부터 FIN을 수신하더라도 일정 시간(디폴트 240초) 동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정을 의미합니다.
DNS란 Domain Name Server의 준말로, 전화번호부와 같은 역할을 하는 서버 또는 시스템을 의미합니다.
예를 들어, 'www.google.com'처럼 사람이 쉽게 기억하고 읽을 수 있는 주소(또는 이름)를 컴퓨터가 이해할 수 있는 IP주소로 변환하여 사용자의 컴퓨터가 서버로 접근할 수 있도록 하는 서비스를 제공합니다.
프록시는 컴퓨터 네트워크에서 다른 서버 상의 자원을 찾는 클라이언트로부터 요청을 받아 중계하는 서버입니다. 프록시라고 말하는 건 대부분 웹 프록시를 지칭합니다.
프록시 서버는 네트워크에서 다른 서버로의 자원(파일, 연결, 웹 페이지 등) 요청을 중계/캐싱하며 데이터 전송 시간, 외부 트래픽 감소, 네트워크 병목현상을 방지할 수 있습니다. 또한, 위험이 예상되는 웹 콘텐츠 및 악성 코드를 필터링하여 클라이언트 측의 보안을 향상 시킬 수 있습니다.
회사나 중요 기관에서는 보완 유지를 위해 내부 통신과 외부 데이터 접근을 통제, 인터넷 이용률 통계 수집을 위해 사용하기도 합니다. 사용자는 역으로, 자신의 웹 서핑 기록을 익명화하기 위해 웹 프록시(anonymizer)를 사용합니다.
무상태성(Statelessness)
HTTP의 무상태성은 서버가 클라이언트의 상태를 기억하지 않는 특성을 의미합니다. 각각의 클라이언트 요청은 독립적으로 처리되며, 이전 요청과 관련된 정보는 서버에 저장되지 않습니다. 클라이언트가 서버에 요청을 보낼 때마다, 서버는 해당 요청을 이해하고 적절한 응답을 반환합니다. 그러나 서버는 클라이언트의 상태 정보(세션 정보)를 기억하지 않기 때문에, 클라이언트가 다음 요청을 보낼 때마다 계속해서 상태를 재전송해야 합니다.
비연결성(connectionless)
HTTP의 비연결성은 클라이언트와 서버 간의 연결이 단방향성을 가지고 있음을 의미합니다. 즉, 클라이언트가 서버에 요청을 보내면, 서버는 해당 요청에 대한 응답을 보내고 연결을 종료합니다. 이후 다른 요청을 위해서는 새로운 연결을 맺어야 합니다. 이러한 특성을 "Request-Response Model”이라고 부릅니다.
++<비연결성으로 인한 단점과 HTTP 1.1>
HTTP가 세션을 열고, 1번의 세션 안에서 클라이언트는 서버로 요청을 보내고 서버로 응답을 받으면 세션이 끊어지는 단점이 있습니다.
⇒ 이런 단점을 극복하기 위해서 HTTP1.1에서 Keep-Alive기능을 제공하여 한 번에 여러 요청-응답이 가능해졌습니다.
MAC Address(Media Access Control Address)
네트워크 인터페이스 카드(NIC)에 할당된 고유한 주소로, 물리적으로 기기에 부여되며 네트워크 장치들이 서로 통신할 때 사용됩니다.개인을 식별하기 위한 주민등록번호와 같은 개념입니다.
IP Address(Internet Protocol Address)
컴퓨터나 기타 장치들이 인터넷에서 통신할 때 사용하는 주소로, 논리적으로 부여되며 각각의 장치들이 인터넷 상에서 고유한 주소를 가지게 됩니다.택배를 보내기 위한 집 주소와 같은 개념입니다.
HTTP 1.0은 메서드의 종류가 3가지 뿐이고, HTTP 1.1부터는 메서드 종류가 7가지입니다.
HTTP 1.0은 하나의 요청을 보내면 요청에 대한 응답이 돌아올 때까지 기다려야 했지만, HTTP 1.1은 파이프라이닝이 추가되어 앞서 보낸 요청에 대한 응답을 기다리지 않고 계속 요청을 보낼 수 있다는 특징이 있습니다.
URI는 URN과 URL을 포함하는 상위개념입니다. URI는 식별하고, URL은 위치를 가리킵니다.
URI
URI는 특정 리소스를 식별하는 통합 자원 식별자(Uniform Resource Identifier)를 의미합니다. 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스입니다.
URL
URL은 어떻게 리소스를 얻을 것이고 어디에서 가져와야 하는지 명시하는 URI입니다.
URN
URN은 리소스를 어떻게 접근할 것인지 명시하지 않고 경로와 리소스 자체를 특정하는 것을 목표로 하는 URI입니다.
참고