인프런 커뮤니티 질문&답변

shef님의 프로필 이미지
shef

작성한 질문수

모든 개발자를 위한 HTTP 웹 기본 지식

비 연결성(connectionless)

자원에 관하여 질문 있습니다.

작성

·

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천번의 데이터를 요청하겠지요. 요점은 사소한 차이도 누적되면 어마어마한 차이가 난다는 것입니다)


감사합니다.

shef님의 프로필 이미지
shef
질문자

세션 파일은 TCP/IP 연결과 끊김에 상관없이 서버에서 클라이언트의 정보(ex로그인)를 유지해야할 때 생성해서 저장하는 것이라고 생각하고 있었는데요.
그게 아니라 세션 파일은 TCP/IP연결이 되면 무조건 생기고 클라이언트의 상태 정보를 저장하다가 TCP/IP 연결이 끊어지면 삭제되는데 , 로그인과 같은 기능을 위해서는 이 때 세션 파일을 삭제하는게 아니라 계속 유지한다라고 이해해도 될까요? 

안녕하세요 손지우님! 

.

말씀하신 내용이 맞습니다. 세션은 서버에서 클라이언트 정보를 유지해야 할 때 생성하여 보관합니다. 말씀하신 로그인 기능이 대표적으로 세션을 사용하는 예 입니다.

.

서버에서 클라이언트 정보를 유지해야 할 경우 메모리/보조기억장치/DB 에 세션을 생성하고 이 아이디를 사용자 쿠키에 심어둡니다. (도메인 기반으로 작동) 이후 클라이언트는 해당 도메인에 접속할때마다 쿠키를 항상 전달합니다. 그러면 서버에서 이 쿠키에 심어진 세션 아이디를 참조하여 메모리/보조기억장치/DB에 위치한 세션 데이터를 로드 하는 과정을 거치게 됩니다. 
.

감사합니다.

shef님의 프로필 이미지
shef

작성한 질문수

질문하기