상태(state)란 특정 상황에서 어떠한 대상의 정보를 가리키는 단어다. 따라서 상태란 대상에 종속적이다. 뒤집어서 stateless라고 함은 달리 의존하는 대상이 없고 독립적으로 기능한다는 뜻이라고 할 수 있겠다.
HTTP(Hypertext Transfer Protocol)의 특징 중 하나는 stateless다. 각각의 요청과 응답은 독립적이며, 이전의 요청이나 응답에 명시적으로 의존하지 않는다. 이는 HTTP 위에서 웹 서버와 클라이언트 간의 통신이 요청-응답의 단위로 이루어지고, 각 요청은 별도의 작업으로 처리된다는 것을 의미한다. 따라서 각 요청마다 필요한 정보는 함께 전달되거나 다른 방법을 통해 관리되어야 한다.
예를 들어 HTTP에서는 사용자의 인증(authentication)을 어떻게 처리할까? 해답 중 하나는 쿠키(cookie)와 세션(session)이다. 쿠키 혹은 세션 쿠키는 클라이언트 측에 저장되는 작은 테스트 파일로, 사용자의 로그인 상태나 개인화된 설정 등이 쿠키를 통해 관리될 수 있다. 이후 클라이언트는 서버 측으로 요청을 보낼 따마다 쿠키를 함께 전송하여 서버가 사용자의 상태를 추적할 수 있게 된다. 반대로 세션은 서버 측에서 관리되는 상태 정보다. 서버는 특정 사용자의 상태를 그에 대응하는 세션으로 추적한다. 즉, HTTP는 stateless지만 쿠키와 세션은 stateful한 것이다. 이렇게 상태에 대한 관리를 위임함으로써 HTTP는 stateless를 유지한다.
다른 예시로 대용량 파일 전송에 대해 생각해보자. 단일 요청-응답으로 대용량 파일을 전송하는 것은 중단과 손실 등의 문제를 야기할 수 있다. 이러한 문제를 해결하기 위해 파일의 정보는 분할되어야 했고, 이때 등장하는 것이 HTTP의 Range 헤더를 통한 데이터 분할 범위의 명시다. 대상을 적절히 쪼개어 그 쪼갠 정도만 기록하면 HTTP 요청-응답은 stateful에서 멀어질 수 있다. 이를 보다 세련된 방식으로 사용하는 분야도 있는데, 바로 스트리밍이다. 데이터가 일부 전달되는 와중에도 독립적으로 기능할 수 있고, 추가적인 데이터가 도착할 때마다 자연스럽게 그것을 연결시키는 것이다.
'Study > Computer Science' 카테고리의 다른 글
인터페이스 (0) | 2024.04.25 |
---|---|
프로그래밍 패러다임 (0) | 2024.04.15 |
자료형, 메모리, 그리고 Python [2] (0) | 2024.04.07 |
자료구조 (0) | 2024.04.05 |
자료형, 메모리, 그리고 Python [1] (0) | 2024.03.24 |