작성
·
293
2
stateless에서는 클라이언트가 현재 무엇을 사고 싶은지, 어떤 지불방법을 했는지 등등 고객의 상태를 저장하지 않음으로써 자원을 아끼고,
connectionless는 클라이언트의 연결을 유지하기 위한 IP주소나 PORT정보들을 저장하지 않음으로써 자원을 아낀다고 생각을 했습니다.
즉 여기서 서버의 자원이라는 것은 저장공간이라고 이해를 했는데요.
이렇게 클라이언트들의 상태 정보나 IP, PORT 정보를 저장하는데 그렇게 많은 공간이 필요한가요?? 이러한 단순한 정보들이 몇만개 있다고해서 그렇게 큰 공간을 차지할 것 같다고 생각이 되지 않아서 질문 드립니다.
단순히 생각해서 한 클라이언트와 연결을 유지하는데 100바이트의 저장 공간이 필요하다고 하면 10만대와 연결하면 10메가 바 이트정도 필요할 것 같은데 ..
답변 1
5
안녕하세요. 손지우 님, 공식 서포터즈 codesweaver 입니다.
.
자원의 개념은 조금 더 포괄적입니다. CPU의 연산 수, 메모리 사용량, 보조 기억장치 사용량 모두 자원에 포함됩니다.
.
세션 파일 각각이 차지하는 용량문제보다, 세션으로 무언가를 관리해야 하는 점이 부담이라고 생각하시면 됩니다. 보통의 세션은 보조기억장치(HDD, SSD)에 보관하게 됩니다. (서버 분산이 필요한 경우 DB에서 관리하기도 합니다).
.
아시다시피 HDD, SSD는 메모리(램)에 비해 터무니 없이 느립니다. 그런데 모든 데이터는 기본적으로 램에 적재되어야만 CPU가 처리할 수 있습니다. 그래서 이런 세션파일을 메모리에 적재하는 프로세스가 계속 발생합니다.
.
이 때 세션에서 관리하는 데이터가 많으면 많을수록 데이터를 램에 적재하는 프로세스는 계속 무거워집니다. 서버에서는 이런 작업이 수천번 이상 이루어질 수 있는데 이 횟수가 늘어나면 늘어날수록 비효율적이 됩니다. 그래서 가급적 서버는 클라이언트에 관한 정보를 들고 있지 않는게 자원적으로 좋다고 말하는 것입니다.
(예를들면 상품 리스트를 보기 위해 클릭이 세번 필요한 A가 있고, 한번 필요한 B 사이트가 .있다고 하겠습니다. 천명의 고객이 A사이트를 이용하면 리스트 이동까지 총 3천번의 클릭이 필요합니다. 그 중간 클릭 과정도 계속 서버에서 데이터를 요청받아야 한다고 생각하면 최소 3천번의 리퀘스트가 발생합니다. B사이트는 반면에 최소 1천번의 데이터를 요청하겠지요. 요점은 사소한 차이도 누적되면 어마어마한 차이가 난다는 것입니다)
감사합니다.
안녕하세요 손지우님!
.
말씀하신 내용이 맞습니다. 세션은 서버에서 클라이언트 정보를 유지해야 할 때 생성하여 보관합니다. 말씀하신 로그인 기능이 대표적으로 세션을 사용하는 예 입니다.
.
서버에서 클라이언트 정보를 유지해야 할 경우 메모리/보조기억장치/DB 에 세션을 생성하고 이 아이디를 사용자 쿠키에 심어둡니다. (도메인 기반으로 작동) 이후 클라이언트는 해당 도메인에 접속할때마다 쿠키를 항상 전달합니다. 그러면 서버에서 이 쿠키에 심어진 세션 아이디를 참조하여 메모리/보조기억장치/DB에 위치한 세션 데이터를 로드 하는 과정을 거치게 됩니다.
.
감사합니다.
세션 파일은 TCP/IP 연결과 끊김에 상관없이 서버에서 클라이언트의 정보(ex로그인)를 유지해야할 때 생성해서 저장하는 것이라고 생각하고 있었는데요.
그게 아니라 세션 파일은 TCP/IP연결이 되면 무조건 생기고 클라이언트의 상태 정보를 저장하다가 TCP/IP 연결이 끊어지면 삭제되는데 , 로그인과 같은 기능을 위해서는 이 때 세션 파일을 삭제하는게 아니라 계속 유지한다라고 이해해도 될까요?