EEALL@ONCE

🔦ORIGIN(오리진)이 뭔데? 본문

분류없음지식🔦

🔦ORIGIN(오리진)이 뭔데?

올엣원스 2023. 12. 14. 13:29
728x90

이 그림은 웹 기술에서 '오리진'(Origin) 개념을 간단하게 설명합니다. 서로 다른 두 집이 있으며, 각각 다른 웹 도메인을 나타냅니다. 각 집은 고유한 색상과 스타일을 가지고 있어, 다른 오리진을 상징합니다. 각 집에는 그 집의 웹 주소(도메인)가 라벨로 표시되어 있습니다. 집들을 연결하는 도로가 있어 인터넷을 나타냅니다.

이 그림을 통해 각 도메인(집)이 웹 통신의 맥락에서 별개의 오리진으로 존재한다는 것을 이해하는 데 도움이 됩니다. 오리진은 프로토콜(예: HTTP, HTTPS), 도메인(웹 주소), 그리고 포트를 조합한 것으로, 웹 보안 및 리소스 접근 제어에서 중요한 역할을 합니다.

 

이 그림은 웹 기술에서 '오리진'(Origin)의 구성 요소인 프로토콜, 도메인, 포트를 설명하고, 도메인과 오리진의 차이를 보여줍니다.

  1. 프로토콜(Protocol): 웹 통신 방식을 나타냅니다. 그림의 첫 번째 부분에서 보이는 건물에는 '프로토콜'이라는 라벨이 붙어 있으며, HTTP와 HTTPS라는 다른 깃발이 표시되어 있습니다. 이는 웹사이트가 정보를 전송하는 방식(암호화되었는지 여부 등)을 나타냅니다.
  2. 도메인(Domain): 웹사이트의 주소입니다. 두 번째 건물에는 '도메인'이라는 라벨과 고유한 이름이 표시되어 있습니다. 도메인은 인터넷상의 위치를 나타내는 주소입니다.
  3. 포트(Port): 서버 내에서 특정 서비스를 구별하는 번호입니다. 그림의 세 번째 부분에서 보이는 게이트에 숫자가 표시되어 있습니다. 웹 서비스에서는 특정 포트(예: 80, 443)를 사용하여 트래픽을 처리합니다.

그림에는 두 가지 다른 장면이 보입니다: 하나는 같은 프로토콜, 도메인, 포트를 가진 건물들(동일 오리진)을 보여주고, 다른 하나는 다른 조합을 가진 건물들(다른 오리진)을 보여줍니다. 이를 통해 웹 컨텍스트에서 같은 오리진과 다른 오리진의 개념을 시각화하고 있습니다.

도메인과 오리진의 차이점에 대해 설명하자면, 도메인은 단순히 웹사이트의 주소를 나타내는 반면, 오리진은 프로토콜, 도메인, 포트를 모두 포함한 개념입니다. 즉, 같은 도메인이라도 프로토콜이나 포트가 다르면 다른 오리진으로 간주됩니다. 예를 들어, 'http://example.com'과 'https://example.com'은 도메인은 같지만 프로토콜이 다르므로 서로 다른 오리진으로 취급됩니다.

 
  1. 같은 오리진(Same Origin): 이 경우, 두 개 이상의 웹 리소스(예: 웹페이지, 스크립트 등)가 동일한 프로토콜, 도메인, 포트를 공유합니다. 예를 들어, 두 웹 페이지가 모두 https://example.com:443에서 호스팅되고 있다면, 이들은 '같은 오리진'입니다. 이러한 경우에는, 이들 사이의 상호작용(예: 쿠키 공유, 스크립트 접근 등)이 허용됩니다.
  2. 다른 오리진(Different Origins): 여기에서는 각 웹 리소스가 서로 다른 프로토콜, 도메인 또는 포트를 사용합니다. 예를 들어, 하나는 https://example.com:443에서, 다른 하나는 http://example.com:80 또는 https://another-example.com:443에서 호스팅되고 있다면, 이들은 '다른 오리진'입니다. 이러한 경우, 웹 보안 정책에 따라 기본적으로 리소스 간 상호작용이 제한됩니다. 예외적으로, CORS(Cross-Origin Resource Sharing) 정책을 통해 명시적으로 허용된 경우에만 상호작용이 가능합니다.

웹에서 오리진의 개념은 보안을 강화하기 위해 중요합니다. 동일 출처 정책(Same-Origin Policy)은 웹 애플리케이션을 잠재적인 악성 스크립트로부터 보호하는 데 도움이 되며, 사용자의 데이터 보안을 유지하는 데 중요한 역할을 합니다. 이 정책은 기본적으로 다른 오리진 간의 상호작용을 제한하지만, 필요에 따라 CORS를 통해 안전하게 통제된 방식으로 이러한 제한을 완화할 수 있습니다


세 개의 그림은 웹 기술에서 프로토콜, 도메인, 포트 개념을 각각 설명합니다.

  1. 프로토콜(Protocol): 첫 번째 그림에는 두 개의 깃발이 있는 건물이 있습니다. 하나는 'HTTP'로 라벨이 붙어 있고, 다른 하나는 'HTTPS'라고 되어 있으며, HTTPS 깃발에는 잠금 기호가 있어 암호화된 통신을 나타냅니다. HTTP는 일반적인 웹 통신을, HTTPS는 보안이 강화된 암호화 통신을 의미합니다.
  2. 도메인(Domain): 두 번째 그림은 고유한 웹사이트 주소가 적힌 간판이 있는 건물을 보여줍니다. 이는 특정 웹 주소 또는 도메인을 상징합니다. 도메인은 인터넷상에서 웹사이트를 찾는 데 사용되는 고유한 이름입니다.
  3. 포트(Port): 세 번째 그림에는 디지털 디스플레이가 있는 게이트가 표시되어 있으며, 이 디스플레이에는 숫자(예: 80 또는 443)가 표시되어 있습니다. 이 숫자는 웹 트래픽이 지나가는 포트를 나타내며, 서버 내에서 서비스를 구분하는 데 사용됩니다.

우리 집에는 여러 개의 문이 있어요. 각 문은 다른 방으로 가는 길이에요. 예를 들어, 한 문은 거실로 가고, 다른 문은 부엌으로 갑니다. 인터넷에서 '포트'는 마치 이런 문과 같아요. 컴퓨터나 서버에는 많은 '포트'가 있고, 각각의 포트는 다른 종류의 인터넷 트래픽(방문객)을 위한 문입니다.

같은 집(도메인)에 트래픽이 다른 포트를 사용하는 경우를 예로 들어볼게요. 예를 들어, 'example.com'이라는 집이 있어요. 이 집에는 두 개의 문(포트)이 있습니다: 하나는 '80'번 문이고, 다른 하나는 '443'번 문이에요. '80'번 문은 일반 방문객을 위한 문이고, '443'번 문은 특별한 보안 방문객을 위한 문이에요.

인터넷에서 '80'번 포트는 보통 일반 웹 트래픽을 위해 사용되고, '443'번 포트는 보안 웹 트래픽(HTTPS)을 위해 사용됩니다. 그래서, 'example.com'에 방문할 때, 어떤 문을 사용하느냐에 따라 웹사이트는 보안이 적용된 방식으로 당신과 이야기하거나(443번), 아니면 일반적인 방식으로 이야기하게 됩니다(80번).

이렇게 각각의 포트는 다른 종류의 트래픽을 처리하는 특별한 문과 같습니다.


포트가 다르다는 것은 다른 '문'을 사용한다는 의미이긴 하지만, 이것만으로는 오리진이 다르다고 할 수 없습니다. 오리진은 프로토콜, 도메인(웹사이트 주소), 그리고 포트 모두를 포함하는 개념이기 때문입니다.

예를 들어, 같은 집(도메인)에서 두 개의 다른 문(포트)을 사용한다고 해서 그 집이 달라지는 것은 아닙니다. 마찬가지로, 웹사이트가 다른 포트를 사용한다 해도, 프로토콜과 도메인이 같다면 여전히 같은 오리진으로 간주됩니다.

예시를 들자면, http://example.com:80http://example.com:8080은 포트 번호는 다르지만, 프로토콜(http)과 도메인(example.com)이 같기 때문에 같은 오리진으로 취급됩니다. 반면, http://example.com:80https://example.com:443은 프로토콜이 다르기 때문에 다른 오리진으로 간주됩니다.

따라서, 오리진을 결정할 때는 포트뿐만 아니라 프로토콜과 도메인도 함께 고려해야 합니다. 오리진이 다르다는 것은 웹 보안의 관점에서 볼 때, 웹사이트가 서로 다른 '가상의 공간'에 있다고 생각할 수 있습니다.


🧐 근데 그럼 FRONT END 랑 BACK END 랑 포트 번호가 다르면 왜 CORS 에러가 나는거야?

CORS(Cross-Origin Resource Sharing) 에러가 발생하는 이유는 실제로 오리진이 다르기 때문입니다. 오리진은 프로토콜, 도메인, 그리고 포트 세 가지 모두가 동일해야 같은 오리진으로 간주됩니다. 따라서, 프론트엔드와 백엔드가 다른 포트 번호를 사용한다면, 이들은 다른 오리진으로 취급됩니다.

예를 들어, 프론트엔드가 http://localhost:3000에서 실행되고 백엔드 서버가 http://localhost:5000에서 실행된다면, 이 두 서비스는 동일한 도메인(localhost)을 사용하고 있음에도 불구하고 포트 번호가 다릅니다(하나는 3000, 다른 하나는 5000). 이 경우, 프론트엔드에서 백엔드로의 요청은 '다른 오리진'으로부터 오는 것으로 간주되고, 따라서 CORS 정책에 따라 제한됩니다.

웹 브라우저는 보안상의 이유로 다른 오리진에서 오는 HTTP 요청을 제한합니다. 이는 웹사이트가 사용자를 대신하여 악의적인 행위를 수행하는 것을 방지하기 위함입니다. 그러나 개발자는 백엔드에서 적절한 CORS 헤더를 설정함으로써, 특정 오리진(여기서는 프론트엔드)으로부터의 요청을 안전하게 허용할 수 있습니다.

따라서, 프론트엔드와 백엔드가 다른 포트에서 실행될 때 CORS 에러가 발생하는 것은, 이들이 실제로 다른 오리진에서 운영되고 있기 때문이며, 이는 웹 보안 정책의 일부입니다.

 

🧐 포트(문)가 다르다는 것만으로는 오리진에 영향을 미치지 않습니다. 라고 너가 그랬잖아!

맞습니다, 제가 앞서 말씀드린 것처럼, 포트가 다르다는 것만으로는 오리진에 영향을 미치지 않는다고 말씀드렸는데, 이는 오해의 여지가 있었습니다. 정확하게 말씀드리자면, 오리진은 프로토콜, 도메인, 그리고 포트 이 세 가지 요소가 모두 동일해야 같은 것으로 간주됩니다. 따라서, 포트가 다르면 오리진도 다르게 됩니다.

프론트엔드와 백엔드가 다른 포트에서 실행되는 경우, 이들은 다른 오리진으로 간주되며, 이로 인해 CORS 정책에 따른 제한이 적용됩니다. 이 경우, 백엔드 서버는 적절한 CORS 헤더를 설정하여 특정 오리진(프론트엔드)에서 오는 요청을 명시적으로 허용해야 합니다.

이전의 설명에서 오해를 불러일으킨 점 사과드리며, 오리진과 관련된 정확한 정보를 제공하기 위해 노력하겠습니다. 오리진이 다르면 (프로토콜, 도메인 또는 포트 중 하나라도 다르면) CORS 정책이 적용되어 보안상의 이유로 특정 상호 작용이 제한될 수 있다는 점을 기억해주시기 바랍니다.

 
 
 
 
728x90