1️⃣ Stateful 과 Stateless 의 차이

  1. Stateful 세션 정보를 활용해서 이전 요청과 현재 요청이 연결 → 클라이언트의 상태를 서버 또는 시스템이 지속적으로 유지함.

  2. Stateless 각 요청이 독립적으로 처리되며, 이전 요청과 관계없이 새로운 요청으로 간주됨 → 서버가 클라이언트의 상태를 유지하지 않음.

  3. HTTP: Stateless 프로토콜 HTTP가 Stateless 프로토콜이라는 것은, 각 요청이 독립적이며 서버가 이전 요청의 정보를 저장하지 않는다는 의미한다. 즉, 클라이언트가 서버에 요청을 보낼 때마다 서버는 그 요청이 처음 온 요청인지, 이전 요청과 관련이 있는지 알지 못한다.

장점:

  1. 클라이언트의 상태를 유지하지 않으면 서버는 모든 요청을 독립적으로 처리할 수 있어 서버의 부하 분산이 쉬워진다. → 확정성

  2. 요청 간 상태를 저장하지 않으므로 복잡한 (서버 메모리나 데이터베이스에서)세션 관리가 필요 없다. → 단순성, 리소스 절약

  3. Stateless한 웹 애플리케이션에서 사용자 상태 유지 방법

  4. 세션 관리 일반적으로 클라이언트는 세션 ID(Session ID)를 쿠키나 URL을 통해 전달하며, 서버는 해당 세션 ID에 대한 정보를 유지한다.

  5. 토큰 기반 인증 사용자가 로그인하면 토큰을 발급하여 클라이언트에 저장 → 이후 요청마다 클라이언트가 사용자의 정보를 포함한 토큰을 서버에 전달

2️⃣ 브라우저의 동작방식(html, css, js)

  1. 브라우저가 URL을 분석하여 프로토콜(HTTP/HTTPS), 도메인, 경로 등을 구분한다.
  2. 도메인 주소를 IP 주소로 변환해서 DNS 서버 조회한다.
  3. 브라우저와 웹 서버 간에 TCP 연결 수립한다.
  4. (HTTPS의 경우) 클라이언트는 웹 서버에 SSL/TLS 연결을 시작하겠다는 신호보낸다.
  5. 웹 서버는 클라이언트의 요청을 받고, 웹 서버의 공개키가 포함된 SSL/TLS 인증서를 클라이언트에게 전송한다. ( 인증서에는 서버의 공개키, Certificate Authority(CA), 유효 기간 등의 정보가 포함)
  6. 브라우저는 받은 인증서를 검증한다. 이 과정에서 브라우저는 인증서가 신뢰할 수 있는 CA에 의해 발급되었는지, 인증서가 만료되지 않았는지, 그리고 인증서가 요청한 웹 서버의 주소와 일치하는지 확인한다.
  7. 인증서가 유효하면, 클라이언트는 웹 서버와의 통신을 암호화하기 위한 세션 키를 생성한다. 이 세션 키는 웹 서버의 공개키로 암호화되어 웹 서버에 전송된다. 웹 서버는 자신의 개인키를 사용하여 세션 키를 복호화한다.
  8. 이제 클라이언트와 웹 서버는 암호화된 세션 키를 사용하여 모든 통신을 암호화한다.
  9. 웹 서버는 클라이언트(브라우저)에게 HTML, CSS, JS 파일과 또는 WAS를 통해 데이터베이스 조회가 필요한 경우 서버에서 데이터를 전송한다.
  10. 클라이언트(브라우저)가 HTML 문서를 파싱하여 DOM(Document Object Model) 트리를 생성한다.
  11. CSS 파일을 다운로드 후 CSSOM(CSS Object Model) 트리를 생성한다.
  12. <script> 태그가 실행되면서 JavaScript 실행한다.