클라이언트와 서버의 통신 과정
웹 환경에서 클라이언트와 서버의 통신 과정
1. DNS Recursive Query¶
클라이언트는 Local DNS로 검색 요청을 보내고, Local DNS 서버가 실제 서비스 서버의 IP를 탐색해서 알려주는 과정을 DNS Recursive Query라고 함
sequenceDiagram
Client ->> Local DNS : request
activate Client
activate Local DNS
alt if data in Local DNS
Local DNS ->> Client : service server IP
else if not data in Local DNS
Local DNS ->> Root DNS : request
Root DNS ->> Local DNS : service server IP
Local DNS ->> Client : service server IP
else if not data in Root DNS
Local DNS ->> Top Level DNS : request
Top Level DNS ->> Local DNS : service server IP
Local DNS ->> Client : service server IP
else if not data in Top Level DNS
Local DNS ->> Second Level DNS : request
Second Level DNS ->> Local DNS : service server IP
Local DNS ->> Client : service server IP
deactivate Local DNS
end
Client ->> service server : request
deactivate Client
- Root DNS: 전 세계 영역을 다루는 DNS
- Top Level DNS: .kr 수준의 DNS
- Second Level DNS: .co 수준의 DNS
2. HTTP/HTTPS¶
HTTP 통신을 위해 TCP 헤더에 있는 SYN, ACK 비트를 통해 연결을 확인하는 과정을 3-way handshake라고 함
sequenceDiagram
Client ->> Server : SYN
Server ->> Client : SYN-ACK
Client ->> Server : ACK
Client ->> Server : HTTP request
Server ->> Client : HTTP response
HTTPS 통신을 위해서는 보안 절차(HTTP Secure)가 포함된 SSL handshake 절차를 진행해야 함
sequenceDiagram
Client ->> Server : Client Hello
Server ->> Client : Server Hello
Server ->> Client : Certificate
Server ->> Client : Server Key Exchange
Server ->> Client : (optional) Certificate Request
Server ->> Client : Server Hello Done
Client ->> Server : (optional) Certificate
Client ->> Server : Client Key Exchange
Client ->> Server : (optional) Certificate Verify
Client ->> Server : Change Cipher spec
Client ->> Server : Finished
Server ->> Client : Change Cipher spec
Server ->> Client : Finished
Client ->> Server : HTTPS request
Server ->> Client : HTTPS response
- Client Hello: 사용할 암호화 알고리즘 목록(cipher sweet)과 난수, 세션 ID 등을 전송
- Server Hello: 암호화 알고리즘 중 사용할 알고리즘 선택 결과, 난수, 세션 ID 등을 전송
- Certificate: 인증서를 전송하며 암호화에 사용할 공개키 전송
3. Web Server/WAS¶
클라이언트가 서버로 요청을 보낼 경우 웹서버가 정적 요청을 처리하고, Web Application Server와 TCP/IP 통신을 통해 복잡한 로직을 처리하여 처리 결과를 회신함
sequenceDiagram
Client ->> Web Server : request
activate Client
Web Server ->> Client : static response
Web Server ->> WAS(WSGI) : request
activate Web Server
WAS(WSGI) ->> Web Server : response
deactivate Web Server
Web Server ->> Client : response
deactivate Client
Note
과거에는 웹서버가 클라이언트의 요청을 접수한 후에 복잡한 로직을 처리하기 위해 Common Gateway Interface(CGI)를 통해 고급언어로 작성된 프로그램을 실행하고 출력 결과를 회신하였음
그러나 가상 머신을 기반으로 실행되는 언어로 작성된 프로그램을 매 요청마다 새롭게 실행하는 것은 처리속도가 너무 느리기 때문에 해당 언어로 개발된 애플리케이션을 상시 실행해두는 Web Application Server(WAS), Web Server Gateway Interface(WSGI) 등의 방식이 개발됨