본문 바로가기

포트폴리오/프로젝트1

[Chat] 채팅서버 구축하기(1)

개요

지금까지 배웠던 내용을 바탕으로 간단한 채팅 프로그램을 만들어보려고 합니다.

 

이 탭에서는 진행한 개발을 기록하는 용도로 사용할 것입니다.


 

목적

이번 프로젝트의 목적은 공부했던 여러 기술을 사용해보는 것입니다.

IOCP모델, 로그작성, 멀티스레드에서의 동시성 제어, DB연동 그리고 통신 프로토콜 설계를 해보고, 부하테스트를 통해 개선사항을 찾아내는 것이 목표입니다.

 

추가적으로 이 프로젝트를 기반으로 컨텐츠적으로 여러 기능을 하는 서버로 확장해볼 수 있을 것입니다.   


입출력 모델

기본적으로 네트워크 처리는 IOCP모델을 사용해서 작동시키려고 합니다.

간단한 채팅서버이기 때문에 select모델로도 충분한 처리가 가능하겠지만, 학습목적으로서 사용합니다.

워커스레드의 개수를 조정할 수 있게해, 네트워크 전송량을 분석 후 필요한 경우 늘리려고 합니다.


로그

서버개발자로서 중요한 것 중 하나는 오류에 대한 대응입니다.

물론 아무 문제도 생기지 않는다면 정말 좋은 개발자이겠지만, 저같은 초보자가 완벽하기는 어렵기 때문에 그리고 거대한 프로젝트일 수록 디버깅이 복잡하기에 로그를 남기는 것은 필수입니다.

 

이번 프로젝트에서는 로그를 작성하는 법을 체계화 해, 이후의 개인 프로젝트에서도 사용할 수 있도록 할 것입니다.


동시성 제어

워커스레드의 개수를 가변적으로 설정해 확장하려면 기본적으로 컨텐츠가 멀티스레드 상황에서도 동시성 이슈가 발생해서는 안됩니다. 이를 위한 설계를 하고자 합니다.


DB연동

실제 유저의 데이터를 저장하는 DB, 로그 용으로 사용되는 DB가 있을 수 있습니다. 여력이 된다면 DB도 사용해보겠습니다.