LightWeightBlackboard (GGoMak과 3학년 당시 협업 : https://github.com/GGoMak)

  • 3학년 1학기 컴퓨터 통신(네트워크 프로그래밍)과목 프로젝트

개요

  • 팀 프로젝트 간 온라인 회의를 할 때 일반적인 채팅 메신저를 사용하면 실시간으로 파일을 공유하지 못해 원활한 회의가 진행되지 않는 경우가 있습니다. 이러한 문제점을 해결하기 위해 채팅 기반의 실시간 프로젝트 파일 공유를 가능하게 하여 온라인 팀 프로젝트의 원활한 진행이 이루어지도록 도움을 주는 프로그램을 개발하는 프로젝트 입니다.
  • 시스템은 클라이언트간의 채팅, 실시간 문서 공유 그리고 작성되어진 문서의 관리와 저장 기능을 제공한다.

기술 스택

  • Client
    • C++(MFC)
  • Server
    • C(Linux)

구현

  • 로그인 및 회원가입
    • ID/PW입력하면 DB로 부터 정보를 받아 존재하는 ID면 로그인 진행
  • 방 생성 및 접속
    • Client가 방 생성을 누르면 방 생성 및 채팅로그 테이블 생성
    • Client가 방에 입장하면 채팅로그 및 오픈된 파일 정보 전달
  • 채팅
    • Client가 채팅을 입력하면 Server가 받아 다른 Client에게 전송
    • Server에 입력된 채로그를 DB에 저장
  • 파일 공유
    • Server가 파일을 저장하고 내용을 Client에게 전달
    • Client가 파일내용 수정 시 해당 내용을 Server가 받아 Client들에게 전달
  • 파일 관리
    • Client가 파일 생성 명령과 이름을 전송하면 Server가 파일 생성
    • 파일 주소를 DB에 저장
    • Client가 파일 오픈 명령과 이름을 전송하면 Server는 파일을 열고 내용을 Client에게 전송
    • Client가 컴파일을 요청하면 Server는 컴파일을 진행하고 실행결과를 전송

QA

  • 채팅 방 관리
    • 처음에는 멀티 프로세스 방식으로 관리하려고 하였으나 IPC의 활용을 지양하기 위해 멀티 쓰레드로 설계 변경
  • 한글 깨짐 현상
    • MFC에서 문자열을 처리하는 자료형과 Linux서버의 자료형 불일치로 인해 한글 깨짐 현상이 발생하였고 MFC에서 지원하는 WideCharToMultiByte함수를 통해 해결
  • Client 종료
    • Client 프로그램의 갑작스런 종료 시 Server에서 인식을 못하는 오류가 발생하여 Client에게 지속적으로 메시지를 보내 올바르지 않은 응답이 올 경우 Client가 종료되었다고 판단하는 방식으로 해결
  • Collision 발생
    • 하나의 파일에 둘 이상의 Client가 접근 시 충돌이 발생하였고, 파일 수정 권한을 부여함으로써 해결
  • 채팅 로그 전송
    • 로그 파일에 둘 이상의 Client가 접근하는 문제가 발생하였고, 로그 정보를 DB가 관리하게 하고 Server는 전송만 하는 방식으로 해결
  • 메시지 프로토콜
    • 초기 설계 당시 고려했던 프로토콜의 수정이 필요하여 프로토콜를 재정의하였다.