[c++]채팅 프로그램 만들기 - 설계편

정제철·2023년 5월 13일
1

[포스코x코딩온]

목록 보기
9/16
post-thumbnail

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

  • 채팅프로그램 만들기(1) : 설계편 (링크텍스트)
  • 채팅프로그램 만들기(2) : 개발편 (링크텍스트)
  • 채팅프로그램 만들기(3) : 발표편 (링크텍스트)
    데이터베이스와 소켓 그리고 그간 배운 C++을 활용하여 채팅프로그램을 개발하라는 프로젝트를 수행하게 되었다. 소켓과 TCP통신을 활용하여 유저가 들어올 수 있는 채팅 서버를 개설하고 유저가 입장하여 client 소켓을 만들어 채팅방을 만들고, 유저정보를 데이터베이스에서 입력과 출력을 하여 로그인 및 다양한 기능을 수행하도록 만드는 것이다.
    처음 배정받은 팀프로젝트에 떨리기도 했지만 다른 사람들에게 결과물을 보여주고 평가받는 다는 생각에 너무 설레고 두근거렸다.
    더 잘보이고 남들보다 더 잘난 프로젝트를 만들기 위해 기획단계에서부터 의욕이 마구 넘쳤다.

개발배경

  • 팀원과 협업하여 하나의 프로젝트를 기획하고 개발한다.
  • c++, Database, MySQL, Socket, TCP통신을 연계하여 프로젝트를 개발한다.

개발목적

  • c++, Socket, TCP통신을 활용하여 채팅프로그램을 개발하고 활용능력을 익힌다.
  • MySQL를 사용하고 c++과 연계하여 데이터베이스 활용 능력을 익힌다.
  • 팀프로젝트를 수행하면서 협업능력을 높이고 팀장을 수행하면서 리더십을 익한다. 그리고 팀원과 GITHUB를 사용하여 소통하면서 github 능력을 함양하기 위함.

개발기간

  • <2023.04.29 ~ 2023.04.30> 기획 및 세부기능 고안, 설계
  • <2023.05.03 ~ 2023.05.09> 작업물 코딩 및 개발
  • <2023.05.10> PPT제작 및 발표를 위한 데이터베이스 설계
  • <2023.05.11> 제작 프로젝트 발표

개발과정


채팅 프로그램을 만들기에 앞서 기능이나 UI를 어떻게 구성할 것인지 생각하기 위해 네이트온과 카카오톡을 유심히 들여다봤고, 여러 기능이나 시간을 띄우는 곳을 어디로 할지 고민해봤다.


소켓을 활용하여 소켓의 각 기능별 들어가야할 내용과 어떻게 표기될 것인지에 대해 팀원과 상의했고, 함수명이나 구성에 대해 약속을 정하고 개발하기 시작했다.

소켓 구성을 통해 채팅방에서 대화를 나눴을때 Server측과 Client측이 무슨 기능을 구현할 것인지, 각각 코딩을 할 때 신경써야할 점이 무엇인지에 대해서도 협의했다.


시작화면과 메인화면으로 구성을 나누어서 각각 무슨기능을 넣어야할지 어떤 역할을 줄 것인지에 대해 상의한 회의록이다.

시작화면에서 로그인, 아이디찾기, 비밀번호 찾기, 회원가입의 기능을 수행하도록 하고,
메인화면에서 내정보, 친구, 채팅, 설정의 기능을 수행하도록 하였다. 각각의 기능에서 어떤 출력을 줄것인지에 대해 상의하면서 여러가지 의견을 바탕으로 좀 더 많은 기능을 추가하고자 하였다.

while문을 통하여 단편적인 방향이 아닌 다시 메인으로 돌아올 수 있는 양방향으로 이동이 가능하도록 설계하였다. 뒤로가기 버튼을 사용하여 항목에 들어갔다가 다시 뒤로 돌아갈 수 있는게 제일 중요하다고 생각하였고 무엇보다도 미적인 요소가 커야한다고 생각했다.

개발 단계에서 뺄 수 있으므로 최대한 많은 기능을 넣었다.


기획 마지막 부분에 정리한 화면이다.

- start

  1. 로그인 하기 -> ID/PW 입력

    아이디와 비밀번호를 입력하고 데이터베이스와 비교 후 일치하면 메인화면으로 넘어간다.

  2. ID 찾기 -> name, 'phone, birth

    아이디를 찾기위해 이름과 폰번호, 생일을 입력하고 일치하면 아이디를 출력해준다.
    'phone은 일치하는지 확인하기 위한 기본키 설정으로 표시해두었다.

  3. PW 찾기 -> 'ID, name, phone, birth

    비밀번호를 찾기위해 아이디, 이름, 폰번호, 생일을 입력한 후 맞다면 비밀번호를 찾게된다. 여기서 출력이 아닌 새로운 비밀번호로 업데이트 되는 방식을 사용하였다.

  4. 회원가입 -> 'ID, PW, name, phone, birth

    ID, PW, 이름, 폰번호, 생일을 입력하면 회원가입이 완료되고, ID를 기본키로 사용하기 위해 '표시를 해두었다.

- main

  1. 프로필

    1. 프로필 보기 -> ID, PW, name, phone, status, birth, song
      프로필에서는 상태메시지와 노래를 추가하여 설정하거나 출력될 수 있도록 설계했다.
      Null일 경우에 없음으로 조회될 수 있도록 설계했다.
    2. 상메 설정 -> 상태메시지 설정
    3. 노래 설정 -> 노래 설정
  2. 친구

    1. 친구목록 -> 회원가입 되어있는 유저의 이름(별명), 상태메시지, 노래, 생일, 번호, 송금을 출력
    2. 생일검색 -> 회원가입 할 때 입력했던 생년월일을 이용해 생일을 검색하여 기간 안에 존재하는 사람을 출력해준다.
  3. 채팅 -> 이전 채팅 내역을 출력, 채팅 수신/송신, 채팅 내용 검색

    • 대화방에 입장했을 시에 이전에 나눴던 대화내용을 출력해준다.
    • 소켓을 활용하여 채팅을 수신하고 송신 할 수 있도록 한다.
    • 과거 채팅 내용을 키워드를 활용하여 검색할 수 있도록 한다.
  4. 설정

    1. 비번 변경 -> 비밀번호 변경을 수행
    2. 회원 탈퇴 -> 회원 탈퇴 할 경우 데이터베이스에서 튜플을 delete한다.

마치며

처음으로 부여받은 팀프로젝트이고 혼자 하는 것이 아닌 팀원과 함께 협동하여 하는 프로젝트이기에 마음가짐이 달랐고, 열심히 해서 꼭 가장 잘해야겠다는 생각이 강했다.
그래서 설계부터 많은 시간과 힘을 쏟았고, 덕분에 빠른 시간안에 뼈대를 완성하게 되었다. 뼈대 설계를 마쳤다면 반은 했다고 생각했고, 코딩은 시간문제라고 생각했다.

profile
성공의 반대는 실패가 아닌 도전하지 않는 것이다.

0개의 댓글