• [C++ 프로젝트] 채팅 프로그램 프로젝트 CHATBOX [1] 설계편

    2023. 11. 2.

    by. KAEY


    c++, Socket, SQL을 활용하여 채팅프로그램 만들기

     

    [C++ 프로젝트] 채팅 프로그램 프로젝트 CHATBOX [1] 설계편  [ 해당 게시글 링크 ]     ⬅️현재 게시물

    [C++ 프로젝트] 채팅 프로그램 프로젝트 CHATBOX [2] 개발편  [ 해당 게시글 링크 ] 

    [C++ 프로젝트] 채팅 프로그램 프로젝트 CHATBOX [3] 발표편  [ 해당 게시글 링크 ]

    [C++ 프로젝트] 채팅 프로그램 프로젝트 CHATBOX [4] 회고편  [ 해당 게시글 링크 ]  

     

     


    프로젝트를 하기 앞서

     mysql 과 C++, socket을 활용한 채팅프로그램을 개발하라는 프로젝트를 접하게 되었다.

     소켓과 TCP 통신을 활용하여 서버와 클라이언트간 양방향 소통을 바탕으로 서로의 요청을 주고 받으며

    소통하는 채팅 프로그램을 제작할 것이다. 단 보안의 영역으로 DB는 클라이언트가 직접 접근할 수 없고

    서버로 요청을 보내 해당 요청에 대한 값만 받을 수 있도록 할 것이다.

     해당 프로젝트를 접하기 전에 중요하게 생각한 점이 몇 가지가 있는데, 그 중 하나는 원할한 협업이다.

     그리고 다른 하나는 완성도 높은 프로젝트가 목표가 아닌, 서로가 코드를 이해하는 것을 중요하게 생각했다.

    서로가 코드를 잘 이해해서 작성할 수 있다면 완성도 역시 따라온다고 생각했기 때문에, 사전에 느리더라도

    확실한 이해와 응용을 할 수 있는 것을 목표로 하였다. 

     

     

     


    개발 배경

     (1) c++, Database, MySQL, Socket, TCP통신을 연계하여 프로젝트를 개발한다.

     (2) git 을 이용한 코드 형상관리 방법을 활용 및 습득 한다

     (3) 팀원과의 소통과 협업을 통해 개발의 설계부터 구현까지 기획하고 개발한다.

     

     


    개발 목적

     (1) 기능을 설계하고 구상한 뒤 이를 실제로 코드로 작성하여 동작하는 것 까지 구현해본다.

     (2) mysql 과 C++을 연동하여 기능을 확장하여 사용하고 데이터베이스 활용 능력을 향상시킨다.

     (3) 팀원과의 github 공유를 통한 코드 관리와 병합을 위주로 github 능력을 함양한다.

     


    개발 기간

     < 2023-10-10 ~ 2023-10-11 > : DB 테이블, 유저 사용 흐름도, 인터페이스 및 기능 설계 및 기획

     < 2023-10-12 ~ 2023-10-13 > : 작업에 필요한 DB 생성 및 C++ 에서의 DB 함수 작성

     < 2023-10-14 ~ 2023-10-23> : 작업물 코딩 및 개발 

    < 2023-10-24 > : 발표 PPT 준비 및 작업물 코딩 완성

    < 2023-10-25> : 제작 프로젝트 발표

     

     


    개발 과정 (초안 작성)

    새로운 채팅 프로그램을 제작하기 전에 어떻게 만들 것인지 구상을 했다.

    채팅 프로그램 자체가 생소하거나 처음으로 제작되어지는 프로그램이 아니기에,

    기존의 프로그램들의 형식들을 보고 참고하여 사용자가 이를 처음 접할 때 사용에 어려움이 없길 바랬다.

    그렇기 때문에 처음 사용자가 접할 화면은 익숙한 느낌이 나도록 설계 및 디자인했다.

     

     

     

     

    데이터베이스의 테이블을 설계하는 것에도 많은 고민을 거듭했다.

    잘 짜여지고 설계되어서 사용하기 편하게 만들어진 DB는 C++에서 작업을 할 때도 용이하고,

    DB를 수정하거나 보완하는데에 있어서 용이하다는 생각을 하기 때문이다.

    작업하는 과정에서도 몇 번의 수정을 거쳤지만, 그럼에도 직관적이고 잘 짜여졌다고 생각한다.

     

     

     

     

    구상할 때는 항상 사용자의 입장에서 화면을 구상하고 어떤 식으로 사용하면 좋을지를 고민을 했다.

    사용자의 입장에서 어느 정도의 규격화된 행동이 생긴다면 그 행동에 대한 요청을 처리할 때 필요한 것이

    무엇일지, DB의 값과 또 이것을 어떤 식으로 값을 끌어오고 보내주면 될지 고민을 거듭했다.

     

     

     

     

    이 과정들을 거쳐서 채팅 프로그램의 초안을 작성을 다 한 내용이다.

    UI나 디자인적인 요소는 일단 예외하고 기능적인 요소만을 러프하게 디자인하였다.

     

     

     

    해당 러프한 초안을 보고 필요한 DB 기능들을 나열하고 이를 팀원과 분업하여 작성했다.

    서로의 작업이 끝나면 이를 git을 통해 병합하는 과정을 거쳤다.

     

     

     

     

    위의 러프한 DB 작업을 이제 C++에서 TCP 통신에 결합하는 과정이다.

    내가 예상한 기능들이 어떤 순서로 작동해야할지, 어떤 값들을 상호간에 주고 받아야할지를 고민해야 했다.

     

     

     

     

    익숙했던 작업도 아니었기에 첫 작업이 바탕이 되어 튼튼한 버팀목이 될 것이고,

    처음 작업이 더디더라도 후 작업은 속도가 가속될 것이라 판단해서

    많은 시간과 노력을 들여 팀원과의 회의를 통해 완성도를 높여갔다.

     

     

     

     

    클라이언트 두 명이 서로 양방향으로 실시간으로 채팅을 하는 과정을

    기획, 설계 그리고 구현까지의 과정에 정말 많은 시간과 노력을 기울였다. 

    mysql이 만약 mongoDB 처럼 유연한 형태로 데이터를 보내고 업데이트 하는 것이 된다면..

    한결 편했을 것 같기도 하지만 안된다면 비슷하게라도 구현을 해놓고 싶었다.

    A가 채팅을 입력하면 A와 B의 화면이 동시에 업데이트 되기를 원했다.

    해당 내용은 [개발]편에서 좀 더 구체화한 내용을 작성하겠다.

     

     

     

     

    마지막으로, 어느 정도 가닥이 잡혀서 방향이 정해졌을 때

    서버와 클라이언트 간 요청에 대한 내용에서 코드의 반복성이 어느 정도 생길 것이라 생각이 들었다. 

    그렇다면 사전에 작업을 하기 전에, 어느 정도 규칙을 생성해놓고 작성한다면 

    프로젝트가 완성되고 프로젝트를 보완하는 과정에서 코드 축약에 큰 도움이 될 것 같아 규칙을 정했다.

     

     

    모든 요청에 대한 규칙 >

    [ '요청에 대해 사전에 정의한 번호', '이 요청을 보낸 주체', '해당 요청에 대한 결과', '해당 요청에 대한 결과를 받을 주체', '추가적인 내용' ]

     

     

    사실 한글로 쓰니 난해한데, [ "1", "server", "succeed", "user_id", "someting" ] 이런 요청이 있다고 하자.

    그렇다면 이는, 로그인에 대한 요청을, 서버가 user_id 에게 성공했다는 내용을 전달한다는 뜻이다.

     

     


    마치며

    사실 처음에 참고할 만한 래퍼런스가 분명히 존재했기에 이를 참고한다면 프로젝트를 수행하는 것에 있어

    원할하게 빠른 속도로 끝낼 수 있을 것이란 생각이 계속해서 들었다.

    그럼에도 내가 래퍼런스를 참고하지 않아서 완성을 못할 것 이라는 생각은 전혀 들지 않았다. 

    또한 만약 이번엔 래퍼런스가 존재했지만, 다음에도 존재할 것이라는 보장이 없단 생각을 했다.

    이번처럼 마음이 맞는 팀원과 프로젝트를 해볼 수 있는 경험이 있을지도 미지수 였고,

    팀원과 나의 능력을 최대한 발휘하고 성장시킬 수 있는 좋은 기회였다.

    그리고 한 땀 한 땀 만들어 보는 경험도 생각보다 정말로 재밌었다.

     

     

    처음 초안의 코드를 작성하는 과정이 원활하게 흐르지 못해서 불안한 마음도 들었지만,

    그럼에도 계속해서 시도하고 될 때까지 다시 작동 과정을 생각하며 코드를 작성했던 것 같다.

    실제로 뼈대를 작성하고 난 후에는 작업의 속도가 많이 늘었고 완성도 할 수 있었다.

     

     

     


    댓글 (비로그인 댓글 허용하지 않습니다.)