백엔드 개발자는 대부분이 서버 to 서버, 서버 to 클라이언트 개발을 주로하기 때문에, URL을 호출하였을 때 어떻게 동작하는지, 그 과정에서 어떠한 용어들이 사용되는지에 대해 어느정도 알아야한다고 생각하기에 기록합니다.
목차
- 웹 브라우저에 URL을 호출하였을때 일어나는 현상
- TCP/IP
- HTTP/HTTPS 프로토콜
- DNS (Domain Name System)
- SSL/TLS
- 웹 소켓 (WebSocket), gRpc, Rest Api
- CORS
- 로드 밸런싱, Proxy
- HA
- Waf(방화벽), Inbound, Outbound
- CDN
웹 브라우저에 URL을 호출하였을때 일어나는 현상
- 웹 브라우저 창에 URL 입력 (https://bbs.ruliweb.com/userboard/board/700127/read/9381)
- URL 파싱 (URL을 구성 요소로 분해하고, 각각의 구성 요소를 추출)
2-1) 프로토콜 : https, 도메인 : bbs.ruliweb.com, Port : 80, 경로 : /userboard/board/700127/read/9381
- 브라우저에서는 자신의 로컬 hosts 파일과 브라우저 캐시에 해당 URL이 존재하는지 확인합니다.
존재하지 않는다면 도메인 주소를 IP주소로 변환해주는 DNS(Domain Name System) 서버에 요청하여 해당 URL을 IP주소로 변환합니다.
- 변환된 IP주소로 TCP 연결 설정
- 웹 브라우저가 HTTP 요청을 서버로 전송
- 웹 서버가 요청을 처리하고 응답을 전송
- 웹 브라우저가 컨텐츠를 랜더링
TCP/IP
- 인터넷 상에서 컴퓨터들 끼리 서로 정보를 주고 받는데 일상적으로 사용되는 통신 프로토콜
- TCP/IP는 패킷 통신 방식의 인터넷 프로토콜인 IP와 전송 조절 프로토콜인 TCP(전송 제어 프로토콜)로 이루어져 있다.
- TCP/IP 4계층 모델은 네트워크 연결 계층, 인터넷 계층, 트랜스포트 계층, 어플리케이션 계층으로 나누어져 있다.
- TCP 프로토콜을 이용하여 통신하기 위해서는 핸드 쉐이크(Handshake)라는 과정이 일어남.
HTTP/HTTPS 프로토콜
- HTTP(Hyper Text Transfer Protocol)이란 텍스트 기반의 통신 규약으로, 인터넷에서 데이터를 주고받을 수 있는 프로토콜입니다. (80 포트사용)
- HTTPS(Hyper Text Transfer Protocol Secure)란 HTTP 프로토콜의 데이터 노출에 대한 문제점을 해결하기 위해 SSL/TLS 암호화 프로토콜을 사용하여 데이터를 암호화하여, 데이터 노출에 대한 위험을 최소화합니다. (443 포트 사용)
DNS
- DNS (Domain Name System)란 컴퓨터 네트워크에서 호스트의 도메인 이름을 해당하는 IP 주소로 변환하는 시스템을 말합니다.
- AWS 기준으로 CDN(Cloud Front) 서비스를 이용하면, 호출한 도메인 정보가 캐시 되어지므로, DNS 서버까지 도달하여 IP 주소를 반환하는 시간의 레이턴시를 일부 줄 일 수 있습니다.
SSL/TLS
- SSL(Secure Sockets Layer)/TLS(Transport Layer Security)는 웹서버와 웹 브라우저 간의 암호화 통신 프로토콜 입니다.
- TLS는 SSL의 취약점을 보완하고자 보안을 강화하여, 등장하였고 SSL은 더이상 사용하지 않고 있습니다.
- 현재 TLS 1.3이 최신 버전이며, 핸드 쉐이크가 100ms 개선되어 빠르고 안정적으로 통신이 가능합니다.
(TCP 핸드쉐이크 이후 통신이 연결되면 TLS 핸드쉐이크가 동작함)
웹 소켓 (WebSocket), gRpc, Rest Api
- 웹 소켓 (WebSocket)은 실시간 양방향 통신을 지원하는 프로토콜이며, 클라이언트와 서버 간에 지속적인 연결을 유지하고 양쪽에서 데이터를 주고받을 수 있음 (실시간성이 중요한 어플리케이션에 사용 -> 채팅, 온라인 게임, 주식 등)
- gRpc는 구글에서 개발한 어느 환경에서 실행할 수 있는 최신 오픈 소스 고성능 RPC 프레임워크이며, Protocol Buffers를 사용하여 효율적이고 이진 형식으로 데이터를 직렬화함 (HTTP/2 기반의 양방향 스트리밍 지원)
- Rest Api (Representational State Transfer)는 분산 시스템에서 자원을 관리하기 위한 HTTP 기반 아키텍처 스타일이며, URI를 통해 자원을 명시하고, HTTP Method에 의해 자원을 관리 합니다.
Cors
- 웹 브라우저는 SOP (Same-Origin Policy)라는 기본 정책을 가지고 있는데, 이는 보안 상의 이유로 인해 웹 페이지에서 스크립트로부터의 HTTP 요청이 동일한 출처에서만 허용되도록 하는 정책 (출처가 같다는 말은 https://example.com:80 의 같은 도메인 내에서만 호출 가능)
- CORS (Cross-Origin Resource Sharing)는 SOP의 제한을 완화하기 위해 도입된 표준으로, 웹 페이지에서 다른 출처의 리소스에 안전하게 접근할 수 있도록 허용하는 정책
로드 밸런싱, Proxy
- 로그 밸런싱은 네트워크 또는 서버 환경에서 발생하는 트래픽이나 작업을 여러 대의 서버 또는 네트워크 장치로 분산시켜 서비스의 안정성과 성능을 향상시키는 기술 (고가용성 아키텍처에는 필수적인 요소)
- Proxy 클라이언트와 서버 간의 중계자 역할을 하는 컴퓨터 시스템이나 응용 프로그램을 가리킵니다. 사용방법에 따라 크게 Forward Proxy, Reverse Proxy로 나뉜다. (Proxy Server로 많이 사용하는 웹서버 중 하나는 Nginx이다.)
HA
- HA(High Availability)는 고가용성이라 불리며, 시스템이 오랜 기간 동안 중단 없이 정상 운영이 가능한 것을 의미함
고가용성이 유지되기 위해서는 서버의 이중화, 스케일 아웃, 클러스터링, failover 등이 필요하다.
Waf(방화벽), Inbound, Outbound
- WAF는 웹 애플리케이션 보안을 강화하기 위한 방화벽입니다. 주로 웹 애플리케이션에서 발생할 수 있는 다양한 보안 위협과 취약점에 대한 방어를 제공합니다.
- Inbound는 클라이언트의 요청이 네트워크를 따라 서버로 전달되는 데이터 흐름을 말하며, 방화벽 외에도 서버로 들어오는 요청에 대한 제한을 설정할 수 있다.
- Outbound는 서버의 요청이 네트워크를 따라 클라이언트 혹은 외부로 전달되는 흐름을 말하며, 대부분은 제한을 두지 않는 경우가 많지만 특정한 서버 호출의 경우만 허용 해야하는 경우가 있다면 제한을 설정 할 수 있다.
CDN
- CDN(Content Delivery Network)은 지리적 제약 없이 전 세계 사용자에게 빠르게 콘텐츠를 전송하는 기술을 의미 합니다.
전 세계 지역에 위치한 엣지 서버와 DNS 서비스 기반으로 정적 및 동적 콘텐츠를 빠르게 전송하고 사용자에게 최적의 성능을 제공합니다. (대표적인 CDN서비스는 AWS의 CloudFront)
참조
https://aws.amazon.com/ko/blogs/korea/what-happens-when-you-type-a-url-into-your-browser
https://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%EB%84%B7_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C_%EC%8A%A4%EC%9C%84%ED%8A%B8