• 카테고리

    질문 & 답변
  • 세부 분야

    웹 개발

  • 해결 여부

    해결됨

stateless, stateful의 장단점이 납득이 안됩니다..

21.05.31 14:36 작성 조회수 574

2

안녕하세요 선생님!

이해가 안되는 부분이 있어서 질문 남깁니다!

stateless의 장점을 언급하실 때, "상태를 유지하지 않으면 서버가 바뀌어도 된다. 그렇기 때문에 서버가 확장될 수 있다." 라고 이해했습니다.

반대로 stateful의 단점을 언급하실 때, "상태를 유지하면 서버가 바뀌면 안된다. 그렇기 때문에 서버가 확장될 수 없다"라고 하셨는데 이 부분이 이해가 안됩니다.

1. 서버가 바뀌면 안되는 것과 서버가 확장될 수 없는 것이 무슨 상관인지 모르겠습니다..ㅠㅠ 

기존 요청은 기존 서버와 연결을 유지하고, 새로 추가된 요청들은 새로운 서버와 연결해주는 방식으로 서버를 확장할 순 없나요??

2. 대부분 서비스는 세션 등으로 로그인 유지를 하고 있지 않나요? 그럼 대부분 서비스는 서버가 확장될 수 없나요?

답변 1

답변을 작성해보세요.

12

codesweaver님의 프로필

codesweaver

2021.06.01

1번 질문은 강의시간에 든 노트북 판매의 상황을 다시 예를 들어 보겠습니다. 손님과 점원이 stateless 관계라고 하겠습니다.

1-1) 손님이 매장에 찾아와 점원A에게 '맥북에어 살래요. 얼마에요?' 라고 물어봅니다. 그럼 점원A는 '100만원 입니다' 하고 대답합니다. 그리고 손님은 집으로 돌아갑니다. 점원도 손님이 뭘 물어봤었는지 누구였는지 기억하지 않습니다. (좀 당혹스럽죠? 이런 방식이 인터넷 통신의 방식입니다.)

1-2) 잠시 후 아까 그 손님이 다시 매장에 찾아왔습니다. 이번엔 점원B가 반겨줍니다. 손님이 말합니다. '여기 100만원! 물건 주세요.' 라고 하면 점원B는 '예? 뭘 어떻게 해달라는 건가요?' 라고 대답할 수 밖에 없습니다. 

이런 상황에서 손님은 자신의 요청사항을 해결하기위해 항상 자신의 전체 요청사항을 말해야 합니다. '맥북에어 주시는데. 여기 100만원있어요, 바로 결제해주세요' 하고 말입니다. 손님 입장에선 조금 번거로워졌습니다. 그럼 이 방식의 장점은 뭘까요? 바로 점원에 상관없이 손님의 요청을 항상 처리할 수 있다는 점입니다. 점원A든 점원B든 아니면 점원Z든 손님의 요청을 처리할 수 있습니다. 점원을 아무리 늘려도 상관없다? 이것이 바로 stateless 관계가 서버를 확장 하기 좋다는 것입니다.

stateful 관계란 손님이 자신의 요청 전체를 말하는것이 아니라 그때그때 필요한 요청만 하는것입니다. 우리가 현실세계에서 친구와 대화할때 이런 방식을 사용합니다.

A: 야 시험 잘봣냐?

B: (시험을 물어보는군..)아니, 망했어.

A: (망했다고..?) 나도 망했어. 10번 문제 어렵더라. 넌 몇번이라고 했어?

B: (10번 문제의 답 말이지...) 난 3번.

A: (너는 3번이라고 했단말이지?) 난 4번했는데. 망했다!

A와 B 서로가 서로의 얘기를 기억하고 있으며 그에 맞는 대응을 하고 있습니다. 이런 대화를 stateful 이라고 합니다.

이제 다시 손님과 점원얘기로 돌아가서, 이런 stateful 관계의 문제는 점원A에게 손님이 몰릴경우 점원A는 항상 손님의 요청을 머릿속에 기억하고 있어야 한다는 것입니다. 손님이 마구 몰리면 실수하기 쉬운 상황입니다. 손님의 일부를 점원B나 C가 응대해주면 좋을텐데! 하지만 손님의 요청사항을 점원A만 알고 있으니 이방법을 쓸 수 없습니다. (물론 점원A가 지금까지의 진행사항을 점원B나 C에게 전달하는 방법도 있습니다만, 이미 A는 바빠서 눈코뜰새가 없는데 이걸 설명하고 있는것도 속터집니다)

그래서, stateful 보다 stateless 가 확장에 유리하다고 하는 것입니다.

.

.

.

2번 질문과 관련한 내용은 설명이 잘 된 블로그 링크를 남깁니다.

로그인 세션 관리 전략 (velog.io)

codesweaver님 고맙습니다^^

추가로 다음 부분에 답을 드리자면

2. 대부분 서비스는 세션 등으로 로그인 유지를 하고 있지 않나요? 그럼 대부분 서비스는 서버가 확장될 수 없나요?

세션 등으로 로그인을 유지할 수 있지만, 이것을 유지하는 비용이 많이 들어갑니다. 그리고 세션을 유지하는 부분을 확장하기가 상당히 까다롭습니다.