본문 바로가기
Project/socket_chat_server

[CPP] 소켓 통신 채팅 서버 만들기

by 블로블로글 2024. 3. 18.

소켓 채팅 구현에 관심이 생겨 여러가지 검색을 해본 후 CPP와 window를 사용해 구현해보기로 결정했다!

우선 역시 코드를 짜기로 마음 먹었으니 git에 repository 부터 만들고 시작했다.

cpp를 학교에서 수업을 듣고 난 뒤 시간이 좀 지났지만 42서울에서 꾸준히 C를 해오기도 했고 요즘 프로젝트를 하면서 oop에 대해서도 어느정도 감을 잃지 않고 있다고 생각해서 두려움은 없었는데 문제는 소켓 프로그램이 감이 안잡혔다 ㅠㅠ

그래서 우선 gpt를 통해서 감을 잡기로 했다!

 

TCP/IP 소켓 채팅 서버를 데이터베이스, 로그인 서비스, 다중 사용자 환경을 지원하는 형태로 구축하는 작업을 C++을 사용하여 고성능 서버로 시작하는 튜토리얼을 계획해보겠습니다. 이 튜토리얼은 한 주 내에 완료할 수 있도록 구성됩니다.
1일차: 연구 및 계획 수립
TCP/IP 소켓 이해하기: TCP/IP 프로토콜이 네트워크 통신을 어떻게 가능하게 하는지 연구합니다. 소켓이 서버와 클라이언트 간의 연결을 어떻게 설정하는지에 대해 집중해보세요.기술 스택 선택: 서버, 클라이언트, 데이터베이스에 사용할 프로그래밍 언어와 도구를 결정합니다. C++은 고성능 네트워킹 애플리케이션에 적합합니다.데이터베이스 선택: 사용자 자격 증명 및 채팅 로그를 저장할 수 있는 데이터베이스를 선택합니다. SQLite, PostgreSQL, MongoDB 등의 데이터베이스가 좋은 출발점이 될 수 있습니다.
2일차: 설계 단계
프로토콜 정의: 통신 프로토콜을 스케치합니다. 메시지 구조, 사용자 로그인 방법, 데이터 전송 및 수신 방식을 정의하세요.데이터베이스 스키마 디자인: 데이터베이스 스키마를 설계합니다. 사용자(로그인 정보 저장) 및 채팅 메시지(메시지 기록 저장) 테이블을 포함시키세요.
3-4일차: 개발 환경 설정
환경 설정: 선택한 프로그래밍 언어, 데이터베이스, 필요한 개발 도구나 라이브러리를 설치합니다.기본 서버 및 클라이언트: 서버와 간단히 연결할 수 있는 기본 TCP 서버와 클라이언트를 설정합니다.
5일차: 핵심 기능 구현
인증: 서버에 로그인 시스템을 구현합니다. 사용자가 사용자 이름과 비밀번호로 등록하고 로그인할 수 있도록 합니다.데이터베이스 통합: 사용자 자격 증명 및 채팅 기록을 저장하기 위해 데이터베이스를 통합합니다.
6일차: 다중 사용자 지원 및 테스트
다중 연결 처리: 서버가 동시에 여러 클라이언트를 처리할 수 있도록 수정합니다. 모든 연결된 클라이언트 간에 메시지를 보낼 수 있는지 확인하세요.테스트: 애플리케이션을 테스트하기 시작합니다. 여러 사용자가 채팅하는 시나리오, 사용자 로그인 및 등록, 메시지 영속성 등을 테스트하세요.
7일차: 개선 및 배포 준비
버그 수정 및 개선: 테스트 중에 식별된 모든 버그를 처리합니다. 필요한 경우 서버의 효율성과 신뢰성을 개선하세요.배포 준비: 애플리케이션을 배포할 준비를 합니다. 이는 서버 설정 또는 클라우드 서비스 제공업체 선택을 포함할 수 있습니다.
추가 팁:
문서화: 개발 과정 전반에 걸쳐 디자인 결정, API 사용법, 설정 지침을 문서화합니다.보안 고려사항: 사용자 인증 및 데이터 전송에 대한 보안 모범 사례를 구현합니다.확장성: 미래에 많은 수의 사용자를 지원할 계획이라면 확장성을 염두에 두세요.
이 구조화된 접근 방식을 따르면 한 주 내에 기능적인 TCP/IP 소켓 채팅 서버를 구축할 수 있습니다. 성공의 열쇠는 철저한 계획, 일관된 진행 및 모든 단계에서의 테스트입니다.

위의 내용이 gpt가 준 내용이었는데 이 중에서 몇가지만 채택하여 목표로 삼기로 했다.

 

목표

0단계: 개발 환경 설정

  1. OS: windows 활용 (평소 맥을 사용해, windows 코딩에 익숙하지 않을 뿐만아니라 winsocket도 사용해보기 위함)
  2. 에디터: visual studio 사용

1단계: 기본적인 TCP/IP 소켓 서버 / 클라이언트 만들기

  1. TCP/IP 소켓 이해하기: TCP/IP 프로토콜이 네트워크 통신을 어떻게 가능하게 하는지 연구합니다. 소켓이 서버와 클라이언트 간의 연결을 어떻게 설정하는지에 대해 집중해보세요.
  2. 기본 구현: 서버 - 클라이언트 사이에서 연결이 되었는지 확인하는 프로그램 작성

2단계: TCP/IP 소켓 채팅 서버 / 클라이언트 + DB 연결

  1. 기능 : 간단한 채팅, 채팅 기록을 db에 저장, 로그인 기능은 구현 x 
  2. 데이터베이스 스키마 디자인: 테이블 하나만을 사용해, 채팅 기록, 아이디, 시간을 저장

물론 처음에는 이렇게까지 단순하지는 않았는데 공부를 거듭할수록 내용을 정리하다보니 단촐해지게 되었다... ㅋㅋㅋ

그래도 목표를 적어두고 시작하니 공부하는 기간 내내 큰 도움이 되었었다. :)