[팀프로젝트] 채팅앱 프로그램 개발 프로젝트

이번 프로젝트는 Python과 PySide6를 활용하여 개발한 사내 채팅앱 프로그램입니다. CodeLike는 개발 교육 과정에서 팀원들이 같은 주제로 소통할 수 있도록 기획한 채팅 프로그램으로, 로그인, 회원가입, 사용자 목록, 채팅방, 실시간 채팅 기능을 중심으로 구현하였습니다.


1. 프로젝트 개요

  • 프로젝트명 : CodeLike
  • 개발 기간 : 2026.06.25 ~ 07/02
  • 개발 인원 : 5명 팀 프로젝트
  • 운영체제 : Ubuntu Linux
  • 언어 : Python 3.12
  • UI 프레임워크 : PySide6(Qt)
  • 데이터 저장 방식 : JSON Repository
  • 통신 : TCP Socket, Multi Thread
  • 개발 도구 : PyCharm, Qt Creator, Git, GitHub

2. 프로젝트 기여도

  • 프로젝트 기획 및 설계 : 상
  • 프로젝트 구조 및 UI 화면 설계 : 상
  • MVC 구조 설계 : 중
  • 이벤트 처리 및 기능 연동 : 상

3. 프로젝트 개요 및 개발 목적

CodeLike는 개발 교육 과정에서 팀원들이 같은 주제로 소통할 수 있도록 기획한 채팅 프로그램입니다. 로그인과 회원가입 기능을 통해 사용자를 구분하고, TCP Socket 통신을 이용해 실시간으로 메시지를 주고받을 수 있도록 구현하였습니다.

  • Python GUI와 네트워크 통신을 결합한 채팅 프로그램 구현
  • 로그인, 회원가입, 채팅 기능을 하나의 프로그램 안에서 연결
  • TCP Socket과 Thread를 활용한 실시간 통신 구조 이해
  • 화면, 기능, 데이터 역할을 분리하여 구조적인 프로그램 개발

4. 시스템 설계

Client GUI
   ↓
Controller
   ↓
Socket Client
   ↓
TCP Server
   ↓
Client Manager
   ↓
Other Client

클라이언트는 GUI를 통해 사용자 요청을 Controller에 전달하고, Socket Client가 서버와 통신하여 실시간으로 메시지를 주고받는 구조로 설계하였습니다. 서버는 접속한 클라이언트를 관리하고, 수신한 메시지를 다른 클라이언트에게 전달합니다.


5. 핵심 기능 및 UI 소개

① 사용자 목록

접속 중인 사용자 목록을 한눈에 확인할 수 있도록 구성하였습니다. 사용자의 접속 상태를 on/off 형태로 표시하여 현재 접속 여부를 확인할 수 있습니다.

 

② 채팅방 목록

생성된 채팅방 목록을 확인하고, 원하는 채팅방을 선택하여 입장할 수 있도록 구현하였습니다.

 

 

③ 채팅 화면

선택한 채팅방에서 실시간으로 메시지를 주고받을 수 있는 화면입니다. 사용자가 입력한 메시지는 서버를 통해 다른 클라이언트에게 전달됩니다.

 

 

 

④ 설정 화면

계정 관리, 알림 설정, 채팅 설정, 로그아웃 메뉴를 구성하여 사용자 관련 설정을 관리할 수 있도록 하였습니다.

 


6. 핵심 기술

  • TCP Socket
    클라이언트와 서버 간 실시간 메시지 송수신을 구현하였습니다.
  • Multi Thread
    여러 클라이언트가 동시에 접속할 수 있도록 처리하였습니다.
  • JSON Protocol
    메시지 타입, 보낸 사람, 내용 등을 정해진 형식으로 전달하도록 구성하였습니다.
  • MVC Pattern
    화면, 기능 처리, 데이터 관리를 역할별로 분리하여 유지보수성을 높였습니다.
  • PySide6 Signal & Slot
    버튼 클릭, 화면 전환, 메시지 출력 등 GUI 이벤트를 기능과 연결하였습니다.

7. 데이터 저장 구조

이번 프로젝트에서는 SQLite가 아닌 JSON 파일 기반 저장 구조를 사용하였습니다. Repository 패턴을 활용하여 데이터 접근을 관리하고, 사용자 정보, 채팅방 정보, 참여자 정보, 채팅 내역을 파일별로 분리하였습니다.

  • users.json
    사용자 계정 정보 저장
    아이디, 비밀번호, 닉네임, 사번, 전화번호, 이름, 접속 상태
  • room.json
    채팅방 정보 저장
    채팅방 ID, 채팅방 이름, 생성 시간 등
  • members.json
    채팅방 참여자 정보 저장
    채팅방 ID, 사용자 ID
  • chat.json
    채팅 내역 정보 저장
    채팅방 ID, 사용자 ID, 메시지, 시간 등

8. 프로젝트 개발 후기

01 개발 과정

  • 실시간 채팅을 위한 Client-Server 구조 설계
  • 로그인, 회원가입 및 사용자 정보 관리 기능 개발
  • JSON Repository 기반 데이터 저장 구조 구현
  • PySide6 기반 GUI 화면 개발 및 기능 연동
  • 서버-클라이언트 통신 및 메시지 처리 구현

기능 구현보다 구조를 먼저 설계하고, 단계적으로 개발하는 것이 효율적이라는 것을 배웠습니다.

02 어려웠던 점과 해결

  • TCP 패킷 경계 문제로 메시지가 끊기거나 합쳐지는 현상
  • 여러 클라이언트가 동시에 접속할 때 서버 안정성 유지
  • GUI와 서버 간 이벤트 연동 및 데이터 동기화

JSON 형식과 구분자를 적용하여 패킷 경계 문제를 해결하고, Multi Thread 구조를 적용하여 동시 접속을 처리하였습니다. 또한 Signal & Slot을 활용하여 GUI와 서버 이벤트를 안전하게 연동하였습니다.

03 결과 및 성과

  • 로그인, 회원가입 및 사용자 관리 기능 구현
  • 실시간 채팅 및 채팅방, 사용자 목록 기능 구현
  • JSON Repository 기반의 안정적인 데이터 관리
  • Client-Server 구조의 채팅 프로그램 완성

GUI와 네트워크, 데이터 관리까지 하나의 프로젝트로 구현하며 프로그램 설계와 문제 해결 능력을 키울 수 있었습니다.