[Network] - Session
네트워크를 배우면서 Session이란 용어가 자주 나오는데, 정확한 의미를 알 수가 없어서 조금 알아보았다.
session명사
- 1.(의회·회의가) 개회 중임; (법정이) 개정 중임; (거래소의) 개장, 입회go into session개회하다
- 2.회의, 회합
- 3.(의회의) 회기, 개회기, 개정기 a long session 긴 회기
영단어로써의 의미는 위와 같지만 네트워크 통신 분야에서의 의미는 조금 다르다. 위키백과에는 아래와 같이 session이란 용어에대해 설명하였다.
세션(session)은컴퓨터 과학에서, 특히 네트워크 분야에서 반영구적이고 상호작용적인 정보 교환을 전제하는 둘 이상의 통신 장치나 컴퓨터와 사용자 간의 대화나 송수신 연결상태를 의미하는 보안적인 다이얼로그(dialogue) 및 시간대를 가리킨다.
Session이란 클라이언트와 서버간에 연결되어있는 그 상태 자체를 의미한다고 이해할 수 있다. 이것을 이해하고 난 후, 지금껏 예제 코드에서 봐왔던 Session이 왜 Session이란 단어를 클래스 명으로 사용하고 있는지를 알 수 있었다.
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
namespace ServerCore
{
public abstract class Session
{
public void Start()
{
// socket 및 연결 설정
}
public void Send(ArraySegment<byte> sendBuff)
{
// ...
}
public void Disconnect()
{
// ...
OnDisconnected();
}
void RegisterSend()
{
// ...
}
void OnSendCompleted(object sender, SocketAsyncEventArgs args)
{
// ...
}
void RegisterRecv()
{
// ...
}
void OnRecvCompleted(object sender, SocketAsyncEventArgs args) // 패킷 수신 완료 action
{
// ...
}
}
}
현재 보고있는 네트워크 코드중 Session이라는 클래스의 내부이다. 이 클래스는 Start 함수를 통해 연결된 클라이언트 소켓을 들고 있으며 클라이언트가 접속할 때마다 새로운 Session을 생성하는 방식으로 동작한다.
앞서 언급하였듯이 이 Session이란 연결상태 그 자체를 의미하며 따라서 함수 내부에는 네트워크 통신을 위한 함수들을 구현하여 연결되어 있는 대상(서버 or 클라이언트)과 패킷을 주고 받는 함수들임을 알 수 있으며, 대상과의 연결이 끊어지는 경우 Session을 삭제하고, 해당 대상과 다시 연결되었을 경우 새로운 Session을 다시 생성하고 그 연결이 끊어지기 전까지 유지하게 된다.
다시 강조하자면 Session이란건 연결상태 그 자체를 의미하는 클래스이며 따라서 서버는 여러개의 클라이언트와 연결되어 있어야 하므로 여러개의 Session을 가지며 클라이언트의 경우 하나의 서버와 연결이 되므로 연결된 서버 하나당 하나의 Session을 가지게 된다.
사실 이 Session이란 용어의 의미가 너무 포괄적이다 보니 클래스 명으로 쓰이거나 하면 이게 도대체 무슨 역할을 하는 지 감이 잡히지 않았다. 하지만 대부분의 코드에서는 네트워크에서 대상과의 연결상태를 의미하므로, 이렇게 이해하면 Session이라는 클래스가 어떤 역할을 할지 감을 잡을 수 있을 것 같다.