메뉴 건너뛰기

넷서버 사용 팁/강좌

이 문서는 넷서버를 사용한 미들웨어를 사용하여 대규모의 클라이언트를 서비스하고 안정적인 운영을 위해 넷서버 제작자 개인의 의견을 적은 글입니다.

안정적인 운용을 위해 가장 중요한 것은 어떻게 서버의 부하를 줄이느냐 하는 것입니다. 서버의 부하중 가장 큰 것이 db관련 부하라고 생각합니다. 특히 대규모 업데이트나 장기트랜잭션을 사용하는 서버의 경우 해당 작업으로 인해 서버의 CPU가 점유됨으로서 다른 서비스의 속도를 떨어뜨리고 안정성도 떨어지게 됩니다.

1.        데이터베이스 처리방식
----------------------------

가.        데이타베이스풀링사용하기

데이타베이스풀링은 미들웨어상에 미리 일정갯수의 db연결을 데이터베이스 풀에 확보해 두고 db작업시 세션을 할당받아 작업을 처리하고 다시 풀에 반납하는 방식입니다.

많이 사용되는 방식이고 실제 효과도 있습니다. 그러나 풀링을 사용하기 위해서는 결정적인 제한 사항이 있습니다. 하나의 db작업의 처리시간이 짧아야 한다는 것입니다. db작업시간이 오래 걸리는 경우 다른 클라이언트가 처리를 못하고 무한 대기를 하거나 에러가 발생하는 경우가 많습니다.

그래서 이 모드의 경우 WAS같은 웹서버에서 많이 사용합니다

그외에 이 방식의 다른 단점이 있습니다. 클라이언트-미들웨어-db서버와 같이 연결되는데 미들웨어와 db서버간에 네트웍이 아주 안정적인 상황이 아니면 에러가 유발되기 쉽습니다.
서버의 특성상 연결이 장시간 사용할 수 밖에 없는데 풀에 있는 데이터베이스 연결이 끊어지고 클라이언트는 연결이 끊어진 데이터베이스를 사용함으로써 에러를 유발할 수 있습니다.

궁극적으로 데이터베이스풀링의 사용하기 위한 요건은 짧은 db처리시간, 안정적인 미들웨어와  db서버간의 네트웍이 필수적입니다.

나.        일반연결방식

넷서버에서 사용하는 일반적인 방식은 클라이언트가 연결할 때 db세션을 할당하고 연결을 끊을 때 db세션을 해제하는 방식입니다. 안정적인 속도를 얻을 수 있고 다른 클라이언트의작업 결과에 따른 영향을 받지 않는다는 장점이 있습니다. 하지만 동시 사용자수가 많은 경우 많은 수의 db세션이 필요하고 사용하지 않는 db세션을 계속 유지해야 하는 단점이 있습니다.

추가적인 db세션할당이나 해제 과정이 필요없으므로 속도도 가장 빠르고 db세션만 충분하면 최고의 성능을 올릴수 있습니다.

다.        사용자요청세션처리방식

클라이언트가 직접 세션을 얻고 해제하는 방식입니다. 넷서버의 경우 v4.5부터 지원하는데 기본적인 원리는 db세션의 사용시간은 해당 세션을 사용하는 클라이언트가 가장 잘 안다고 가정합니다. 이 방식은 위의 “가”나 “나”번과 병행해서 사용할 수도 있다는 것입니다. 서버에서 데이터베이스풀링을 사용할 경우에도 클라이언트에서 필요시 풀로부터 할당받고 직접 풀에 반납할 수 있으며 최초 연결시 세션을 얻고 연결 해제시까지 세션을 유지하면 “나”의 방식으로 사용이 가능합니다. (장기적으로 넷서버는 이 방식을 디폴트로 할 예정입니다.)

하지만 제작자가 생각하는 가장 이상적인 방식은 클라이언트가 db작업이 필요할 때 세션을 얻고 끝나면 세션을 중단하는 것입니다.

예를 들어 하나의 트랜잭션 아래에 다수의 쿼리를 날리고 업데이트를 처리하는 방식을 하나의 서비스로 보면 해당 서비스를 시작할 때 db세션을 얻고 해당 서비스가 끝날 때 db세션을 해제하는 것입니다. 한번에 처리해야 하는 전체 db작업을 하나의 서비스로 보고 다른 방식과 달리 클라이언트에서 db세션의 할당과 해제시점을 결정하는 것입니다.

이 방식을 사용하려면 클라이언트가 로그인할 때 db연결을 하지 않아야 하므로 db풀을 사용할 경우 TNsSessionPool.ManualSessionAssign을 true로 설정해야 하며 풀을 사용하지 않을 경우 DataProvider.AutoConnect를 false로 두기 바랍니다.

2.        사용자목록유지기능
--------------------------

넷서버는 서버에서 메시지를 브로드캐스팅하거나 클라이언트에서 클라이언트로 메시지를 보내기 위해서 미들웨어 상에서 연결된 사용자의 목록을 유지합니다. 넷서버의 강력한 메시지 처리기능은 개선된 메세지 엔진을 기반으로 하고 있습니다.

하지만 이 메시지기능이 필요없거나 별도로 메시지처리용 미들웨어를 두는 경우 서버에서 이 목록을 유지할 필요가 없는 경우가 있습니다. 이 메시지 처리기능을 사용하지 않으므로서 서버상에서 메시지 목록에 대한 락이 걸리지 않으므로 좀더 서버의 부하가 줄어들 수 있습니다.

넷서버에서 사용자 목록기능을 사용하지 않으려면 서버의 옵션중 soNouserList를 true로 설정하면 됩니다.

3.        Stateless방식의 사용
----------------------------

넷서버는 기본적으로 stateful(연결지항)방식을 사용하고 있습니다. 즉 클라이언트는 연결을 유지한 채로 서버에 계속 메시지를 보내거나 받을 수 있고 강력한 메시지 처리기능을 사용할 수 있습니다.

하지만 수천, 수만명의 클라이언트를 서비스해야 하는 경우 오히려 stateless방식을 사용하는 것이 나을 수 있습니다. 비록 수천, 수만의 클라이언트를 서비스 하더라도 동시에 미들웨어에 요청을 보내는 경우는 아주 적을 수 밖에 없으므로 stateless방식을 사용하면 제한된 소켓이나 서버 자원으로 많은 수의 클라이언트를 서비스 할 수 있습니다. 실제로 이방식을 사용하는 많은 웹서버가 동시 접속클라이언트를 극도로 적은 수로 지정하고 있습니다.

이때는 위 2번의 사용자 목록 유지기능을 꺼고 선택에 따라 1의 세션풀링이나 사용자 요청세션처리방식을 사용하면 최고의 효과를 얻을 수 있습니다. 하지만 이 방식을 사용하면 서버에서 클라이언트로, 클라이언트에서 다른 클라이언트로의 메시지 전달이 불가능하다는 것을 알아 두어야 합니다.
번호 제목 글쓴이 날짜 조회 수
공지 이전게시판의 질문과답변 및 사용팁 메뉴얼관련 링크 admin 2008.01.23 4633
공지 넷서버 동영상 강좌 admin 2008.01.23 3915
공지 넷서버 소개문서 넷서버 2008.01.19 5110
» 넷서버의 엔터프라이즈환경에서의 사용 방식의 개선 넷서버 2008.01.19 1825
27 Intergate 로드밸런스 서버 넷서버 2008.01.19 1682
26 로드밸런스의 라이센스 배포와 관련하여 넷서버 2008.01.19 1744
25 Synchronize 쉽게 사용하기 admin 2008.01.19 3948
24 Integate를 사용하지 않은 다른 로드밸런스 구현 방법(4tier) 넷서버 2008.01.19 2032
23 파일업로드나 다운로드후 파일이 닫힐때 원하는 작업처리하기 admin 2008.01.19 1981
22 DLL과 Deadlock admin 2008.01.20 6347
21 ch 1. 간단한 BDE서버의 제작 admin 2008.01.24 4000
20 ch 2. 간단한 클라이언트프로그램의 제작 admin 2008.01.24 2988
19 ch 3.메세지클라이언트의 제작 admin 2008.01.24 4526
18 ch 4. 비즈니스오브젝트의 작성-서버 admin 2008.01.24 4473
17 ch 5. 비즈니스오브젝트를 클라이언트에서 사용하기 admin 2008.01.24 2722
16 Ch6. 채팅서버 프로그램의 제작 admin 2008.01.24 3116
15 Ch7. 채팅클라이언트 프로그램의 제작 admin 2008.01.24 3176
14 [동영상] 넷서버 서버의 제작 admin 2008.01.24 2700
13 [동영상] 넷서버 클라이언트 프로그램의 제작 admin 2008.01.24 3035
12 넷서버의 설치 방법 admin 2008.01.24 4873
위로