[컴퓨터 사이언스] 6. Stateful & Stateless

문정준's avatar
Feb 03, 2025
[컴퓨터 사이언스] 6. Stateful & Stateless
💻
컴퓨터 사이언스 (Computer Science)
컴퓨터를 다루기 위한 기초적인 배경 지식 6. Stateful & Stateless
 
컴퓨터에서는 오브젝트(object)의 상태에 따라 Stateful, Stateless로 나누게 됩니다.
 
Stateful은 상태가 있다는 의미로, 서버가 클라이언트의 정보를 기억하고 있는 상태임을 나타냅니다. Stateless는 반대로, 서버가 클라이언트의 정보를 기억하지 않는 상태임을 나타냅니다.
 
notion image
 
명사의 종류에는 물질명사와 추상명사가 있습니다. 물질명사는 셀 수 있고(countable), 실제로 존재하는(existing) 명사이고, 추상명사는 셀 수 없고(uncountable), 실제로 존재하지 않는(non-existing) 개념과 같은 명사입니다.
예를 들어, ‘의자’, ‘책상’, ‘침대’는 구체적으로 존재하는 물질명사이지만, 이들을 설명하는 ‘가구’는 실제로 존재하지는 않지만 앞의 의자, 책상, 침대를 분류할 수 있는 개념과 같은 추상명사가 되는 것입니다. State는 ‘가구’가 아닌, ‘의자’, ‘책상’, ‘침대’와 같은 구체적인 물질에만 존재할 수 있습니다.
 
notion image
 
침대를 만들 때에, 우리는 침대의 설계도를 보고 침대를 제작하게 됩니다. 침대의 설계도에는 색상, 크기와 같은 침대의 ‘특징’이 적혀있을 것입니다. 이 특징이 침대의 상태(State)가 됩니다.
침대는 한번 만들고 나면 색상과 크기를 따로 변경할 수 없습니다. 이 상태들은 불변(immutable)의 상태가 되어 영원히 변하지 않습니다.
 
notion image
 
사람의 경우에는 조금 다르게 볼 수 있습니다.
‘이상한 나라의 앨리스’에 등장하는 앨리스의 특징 중 키, 목마름을 예시로 지정해보겠습니다.
엘리스가 들어간 동굴 안에 한 번 먹으면 키가 10cm 줄어들고, 두 번 먹으면 10cm 커지는 버섯이 있고, 동굴의 끝에는 150cm 높이의 문이 있다고 가정해봅시다.
문을 통과하기 위해서 앨리스는 버섯을 한 번 먹어야 할 것이고, 이때 앨리스의 특징인 키의 수치가 변화할 것입니다. 또한 앨리스의 목마름 수치가 증가한다면, 물을 마심으로써 목마름 수치를 감소시킬 수 있습니다.
이러한 특징들은 변할 수 있는 변수의 성질을 가지고 있습니다. 변수는 즉 가변(mutable)의 성질이라고 할 수 있습니다.
 
notion image
 
http 통신에서 이 성질이 어떻게 적용되는지 알아보겠습니다.
서버에는 송신자의 주소를 저장하는 리스너(Listener)가 존재합니다. 리스너는 요청 받은 클라이언트의 주소를 확인하고 이후 파일을 전송할 때에 그 주소를 통해 클라이언트에게 파일을 제공합니다.
이때 리스너가 Stateful일 경우, 서버는 클라이언트의 주소를 계속 기억하고 있는 상태가 됩니다. A 클라이언트가 이후에 요청을 다시 보내면 이를 기억하고 바로 파일을 전송할 수 있는 것이죠.
우리가 홈페이지에서 로그아웃을 하지 않는 이상 계속 로그인이 유지되는 것이 서버가 클라이언트의 로그인 상태를 기억하고 있기 때문입니다. 보통 이런 정보들은 브라우저의 쿠키(Cookie) 또는 서버의 세션(Session) 메모리에 저장됩니다.
리스너가 Stateless일 경우, 전과 반대로 서버는 클라이언트의 주소를 기억하지 않는 상태가 됩니다. A 클라이언트에게 요청이 들어왔을 경우, 서버는 파일만 전송해준 후 바로 주소를 메모리 상에서 지워버립니다. 이후에 재전송 요청이 들어오면 서버는 A 클라이언트가 전송한 것인지, 다른 클라이언트가 전송한 것인지 알 수 없게 됩니다.
 
서버가 Stateful일 때와, Stateless일 때의 장단점이 있습니다.
Stateful일 경우 클라이언트의 정보를 기억하고 있기 때문에 지속적인 통신을 진행할 때 송신자 정보를 제공 받을 필요가 없습니다. 그러나 정보를 계속 지니고 있는 만큼 서버 메모리의 용량을 차지하게 되고, 이로 인한 속도 저하가 발생하거나 다른 클라이언트의 정보를 받아들이지 못하는 상태에 빠질 수 있습니다.
Stateless일 경우 클라이언트가 항상 자신의 주소를 함께 전송해야 하기 때문에 전송하고 받는 데이터의 양이 증가하지만, 서버 메모리는 효율적으로 관리할 수 있으므로 서버 내 처리 속도는 빨라진다는 장점이 있습니다.
 
💡
내용 정리
  1. Stateful은 상태가 유지되고 있는 것으로, 상태를 지닌 것과는 다름
  1. 상태는 불변, 또는 가변의 성질을 지님
  1. 서버의 리스너Stateful 또는 Stateless의 성질을 가지고, 이는 각각 장단점이 존재
Share article

sxias