00. 개발완료보고서
|
개발완료보고서
|
||||
|
팀원
|
나윤성(팀장), 이재은, 임혜린, 양승준, 이명진
|
|||
|
활동일시
|
7월 14일 ~ 7월 21일
|
장소
|
공학 1관 드론융합실
|
|
|
프로젝트명
|
C 언어와 TCP/IP 프로토콜, DB(MySQL)를 사용한 채팅 프로그램 구현
|
|||
|
개발 환경
|
Language : C / gcc
OS : Ubuntu linux
|
|||
|
구현기능
|
회원가입(ID, 비밀번호, 닉네임), 로그인(ID 중복 방지), 프로그램 종료
로그인 시 공개 채팅방 이동
사용자 목록 및 채팅방 목록 조회
채팅 시 현재시간, 본인 여부 출력
귓속말 기능을 이용하여 전체 클라이언트 중 특정 클라이언트에 메시지 전달
채팅방 개설 및 채팅방에 입장한 클라이언트끼리 채팅
개별 채팅방 개설, 입장, 나가기
로그아웃 시 로그인 화면으로 이동
서버에서 실시간으로 클라이언트 IP접속, 회원가입, 로그인 여부 표시
회원정보, 채팅로그, 방생성 여부 DB에 저장
비밀번호 암호화(hash 사용) 구현
|
|||
|
문제점
|
암호화 기능에 salt기능이 빠져서 보안에 취약할 수 있음
|
|||
|
개발파트
|
나윤성
|
채팅방 개설 및 채팅방에 입장한 클라이언트끼리 채팅, 개설된 채팅방 입장 및 나가기
|
||
|
이재은
|
회원가입(ID, 비밀번호, 닉네임), 로그인(ID 중복 방지), 프로그램 종료, 로그인 시 공개 채팅방 이동
|
|||
|
임혜린
|
귓속말 기능을 이용하여 전체 클라이언트 중 특정 클라이언트에 메시지 전달
|
|||
|
양승준
|
로그인 시 공개 채팅방 이동, 사용자 목록 및 채팅방 목록 조회, 로그아웃 시 로그인 화면으로 이동
|
|||
|
이명진
|
서버에서 실시간으로 클라이언트 IP접속, 회원가입, 로그인 여부 표시, 회원정보, 채팅로그, 방생성 여부 DB에 저장, 비밀번호 암호화(hash 사용) 구현
|
|||
|
후기
|
나윤성
|
지금까지 팀원으로 팀프로젝트를 수행하다가 이번 프로젝트에는 팀장을 맡아 프로젝트를 수행하게 되었는데 지금까지는 주어진 임무만 수행하다가 이번엔 프로젝트를 책임져야 하는 입장이 되다보니 많은 부담감을 가졌던 것 같다. 월래 묵묵히 자기 임무에만 집중해왔었는데 이번에 팀장하면서 팀원을 이끄는 부분에서는 조금 아쉬웠었지만 팀원들의 적극적인 프로젝트 수행 의지 덕분에 프로젝트가 무사히 마무리 되었던 것 같다. 팀장을 하면서 아쉬웠던 부분은 경험을 쌓게되면 다음에 더 잘할 수 있다고 생각이 된다. 그리고 이번 C언어로 TCP/IP와 DB를 구현하는 데 많은 로직과 구조 설계가 들어 갔기 때문에 프로젝트를 완료했다고 끝내는 게 아닌 완성된 코드의 구조 파악과 코드 분석을 위한 공부도 많이 필요할 것 같고 추후 배우게 될 공부도 열심히 하고 혼자 프로젝트를 수행하는 것이 아닌 협업능력을 키우기 위한 소통능력도 키워서 다음 프로젝트 때는 더 잘할 수 있도록 준비 해야 할 것 같다.
|
||
|
이재은
|
이번 프로젝트는 서버와 클라이언트 통신,db(데이터베이스)연동에 멀티스레드를 써서 채팅프로그램을 만들게되었다.
진행하면서 현재 사람들이 쓰고있는 채팅 프로그램들은 대부분 이런식으로 만들어져있구나라는걸 알게됐다.
그리고 채팅 프로그램 하나에 수많은 기능들이 들어가있다는것을 다시 한번 알게되었다.
나는 이번 프로젝트에서 초반부분인 회원가입/로그인 구현 부분을 맡게되었다
한번 해봤던것이라서 쉽게 할 수 있을거라고 생각했는데 생각보다 어려워서 당황했다
팀원들이 잘 이끌어주고 기존에 했던것들을 참고하면서 차근차근해나가다보니 무사히 프로젝트를 마무리할 수 있었다.
다음에는 좀 더 발전된 기술으로 다양한 기능들을 구현할 수 있게되면 좋겠다.
|
|||
|
임혜린
|
이번 팀 프로젝트에서 저는 채팅 프로그램을 개발할 때 처음에는 단순히 메시지만 주고받으면 될 줄 알았는데, 실제로 구현해보니 생각보다 복잡한 부분이 많았습니다.
일반 채팅은 클라이언트에서 입력한 메시지를 서버가 받아서, 모든 클라이언트에게 동시에 전달하는 방식으로 만들었습니다. 여러 명이 동시에 접속하니까 서버 쪽은 멀티스레드로 처리했습니다.
귓속말은 특정 사용자한테만 메시지를 보내는 기능인데, 대상 클라이언트를 찾아서 따로 전송하고, 오류 처리나 연결 상태 확인 같은 예외 상황도 따로 신경 써야 했습니다. 이 부분에서 문자열 처리랑 동기화 문제가 가장 헷갈렸는데, 테스트를 반복하면서 점점 감이 잡혔습니다.
작은 기능 같지만 직접 구현해보니까 처리해야 할 게 정말 많았고, 특히 다른 팀원들과 연결되는 부분까지 생각해야 해서 더 복잡했습니다. 그래도 기능이 잘 작동하는 걸 보고 나니까 꽤 뿌듯했고, 네트워크 프로그래밍에 대한 자신감도 조금 생겼습니다.
|
|||
|
양승준
|
이번 팀 프로젝트에서는 서버, 클라이언트, 데이터베이스를 연동해 콘솔 기반의 채팅 프로그램을 만드는 작업을 진행했다. 처음엔 단순한 채팅 기능일 거라고 생각했지만, 막상 시작해보니 실시간 통신, 사용자 관리, 명령어 처리 등 신경 써야 할 부분이 정말 많았다.
나는 그중에서도 전체 채팅방 입장 기능과 /Q 명령어를 중심으로 기능 구현을 맡았다. /Q 명령어 하나에 접속자 목록 확인, 현재 채팅방 정보 조회, 채팅방 생성, 채팅방 나가기 같은 다양한 기능이 들어가 있어, 단순히 문자열을 받아 처리하는 걸 넘어서 서버와의 구조적인 연동이 필요했다.
처음엔 명령어 파싱부터 막혔다. 입력값을 어떻게 분기 처리할지, 사용자 상태에 따라 어떤 정보를 보여줄지 정리하는 것도 쉽지 않았다. 특히 사용자마다 소속된 채팅방이 다를 수 있고, 나가거나 생성할 때도 여러 가지 예외 상황이 생기다 보니 조건문이 점점 복잡해졌다. 중간중간 내가 뭘 하고 있는지 헷갈릴 정도로 머리가 지끈거렸지만, 그래도 조금씩 기능이 돌아가는 걸 보면서 성취감을 느낄 수 있었다.
특히 접속자 확인 기능은 단순 출력이 아닌 서버의 연결 리스트나 세션 정보를 실시간으로 받아와야 했기 때문에, 서버와 클라이언트 간의 통신 구조도 깊게 이해해야 했다. 그 과정에서 팀원들과 자주 소통하며 서버 구조를 공부하게 된 점도 큰 수확이었다.
이 프로젝트를 통해 단순히 코드만 짜는 게 아니라 사용자 입장에서 생각하며 시스템을 설계하는 경험을 할 수 있었고, 앞으로 어떤 프로그램을 만들든 ‘기획-구현-테스트’까지의 흐름을 훨씬 더 명확히 떠올릴 수 있게 되었다. 다음 프로젝트에서는 이번 경험을 바탕으로 채팅방 내부 로직뿐 아니라 UI/UX나 로그 시스템 같은 부분에도 도전해보고 싶다.
|
|||
|
이명진
|
이번 프로젝트를 진행하면서 느꼈던 점들을 정리해보자면, 크게 두 가지 측면에서 어려움과 배움을 경험했습니다.
첫째, 가장 큰 문제는 바로 데이터베이스(DB)였습니다. 프로젝트를 시작하기 전까지는 TCP 통신에 대해 어느 정도 기초적인 이해가 있었기 때문에 서버와 클라이언트 간의 기본적인 통신 과정에서는 큰 어려움을 겪지 않았습니다. 실제로 패킷을 주고받거나 연결을 유지하는 부분에서는 비교적 수월하게 진행할 수 있었습니다. 하지만 데이터베이스는 저에게 낯선 영역이었고, 이로 인해 프로젝트 초반에 많은 시간을 소모하게 되었습니다. SQL 문법을 정확히 이해하지 못한 채 쿼리를 작성하다 보니 에러가 자주 발생했고, 이를 해결하는 데 많은 시행착오를 겪어야 했습니다. 그러나 프로젝트를 지속하면서 점차 익숙해졌고, 결국 서버 측에서 데이터베이스에 접속한 뒤 필요한 쿼리문만 잘 전달하고 응답을 처리하면 된다는 구조를 이해하게 되면서 점차 자신감도 생겼습니다. 특히 사용자 등록, 로그인, 정보 조회/수정, 메시지 저장 등 다양한 기능을 데이터베이스와 연동하며, 실질적인 프로그래밍 감각도 키울 수 있었습니다. 결과적으로 DB가 프로젝트 초반에는 가장 큰 장애물이었지만, 동시에 가장 많은 성장을 이끌어낸 요소였다고 생각합니다.
둘째는 팀원 간의 협업 문제였습니다. 본 프로젝트는 클라이언트와 서버 간의 통신이 핵심이 되는 구조였기 때문에, 기능 구현을 순차적으로 진행해야 하는 특성이 있었습니다. 예를 들어, 회원가입 기능이 완성되어야 그 다음 로그인 기능을 제대로 테스트할 수 있고, 로그인 이후에야 채팅 기능으로 넘어갈 수 있는 흐름이었습니다. 문제는 이러한 순차적인 진행 과정에서 팀원 간의 업무 분담과 진행 상황 공유가 제대로 이루어지지 않으면서, 다음 단계로 넘어가지 못해 대기 상태로 머무는 시간이 길어졌다는 점입니다. 중간에 소통이 원활하지 않아 충돌이 생기거나, 중복 작업이 발생하기도 했고, 일부 팀원은 본인이 맡은 기능 외에는 프로젝트 전반에 대한 이해도가 낮아져 협업 효율이 떨어지는 문제가 발생했습니다.
이러한 경험을 바탕으로, 다음 팀 프로젝트에서는 몇 가지 개선이 필요하다고 느꼈습니다. 우선 모든 팀원이 프로젝트의 전체 구조와 흐름을 어느 정도 이해하고 있어야 하며, 자신이 맡은 기능이 전체 구조에서 어떤 역할을 하는지 정확히 인지할 수 있도록 해야 합니다. 그리고 각 기능의 구현 순서를 미리 정하되, 그 과정과 상태를 팀원 모두가 실시간으로 공유할 수 있는 시스템(예: 칸반 보드, 구글 문서 등)을 활용하는 것이 중요하다고 생각합니다. 이를 통해 다음 담당자가 앞선 작업을 원활히 이어받아 개발을 지속할 수 있도록 만드는 것이 협업의 핵심이라고 느꼈습니다.
이번 프로젝트는 단순한 기능 구현을 넘어서 실전적인 문제 해결 능력과 협업의 중요성을 몸소 체감할 수 있었던 값진 경험이었습니다. 부족한 점도 많았지만, 그만큼 얻은 교훈도 많았고, 이후 더 나은 팀워크와 기술 역량으로 성장할 수 있는 계기가 되었습니다.
|
|||
01. 수정문서
2.1 요구사항 분석서
|
유형
|
요구분석 내용
|
|||
|
분류
|
세부내용
|
|||
|
시작화면
|
회원가입
|
ID, PW, 닉네임 (ID 중복체크)
|
||
|
로그인
|
ID, PW 입력
|
|||
|
프로그램 종료
|
ctrl + c와 동일 기능
|
|||
|
서버화면
|
로그표시
|
데이터베이스에 저장되는 로그 표시
|
||
|
채팅
|
채팅 기능
|
멀티 채팅 구현(채팅 텍스트마다 user의 ID 표시)
|
||
|
전체 채팅방
|
채팅 기능
|
로그인 후 처음 들어온 모든 사용자가 채팅할 수 있는 기능 구현
|
||
|
개별 채팅방
|
채팅 기능
|
생성된 채팅방에 채팅방 목록을 통해 들어온 사용자만 채팅이 가능한 기능 구현
|
||
|
메인 메뉴
|
기능 표시
|
1. 채팅방 생성
|
||
|
2. 채팅방 나가기
|
||||
|
3. 사용자 목록 정보
|
||||
|
4. 채팅방 목록 보기
|
||||
|
5. 채팅방 입장
|
||||
|
6. 귓속말 보내기
|
||||
|
7. 사용자 정보 변경(ID/비밀번호)
|
||||
|
8. 로그아웃
|
||||
|
9. 프로그램 종료
|
||||
|
10. 메뉴 다시 보기
|
||||
|
데이터베이스 테이블
|
User
|
로그인 및 회원관리, 가입 일시(ID, PW, 회원가입한 시간 저장)
|
||
|
chat_message
|
채팅 로그 저장 및 누가, 언제, 어떤 메시지를 어디서 보냈는지 기록
(메시지 고유번호, 메시지 보낸 사용자의 ID, 메시지가 속한 채팅방 이름, 채팅 내용, 메시지 보낸 시간, user의 ID)
|
|||
|
chatroom
|
오픈 채팅방과 그룹(전체)채팅방을 구분하여 저장,
오픈 채팅방은 서버 시작 시 미리 만들어 둘 수 있고 채팅 외의 기능을 통해 번호 입력 후 생성 가능
(채팅방 ID, 채팅방 이름, 전체 채팅방과 그룹 채팅방 구분, 채팅방 생성자 ID, 시간)
|
|||
|
chatroom_user
|
방 참가자 관리
|
|||
2.2 유스케이스

2.3 순서도

2.4 일정표

02. 스크린샷 및 기능 설명

서버(왼쪽)화면과 클라이언트(오른쪽)의 회원가입, 로그인 화면

접속자 정보 출력

채팅방 입장

회원 정보 변경
03. 실행영상
04. 소스코드
'C > Project' 카테고리의 다른 글
| [LMS7 10/28주차] 0714 C언어와 MySQL을 활용한, 채팅 구현 프로젝트, 5팀 + 개발 계획서 (0) | 2025.08.24 |
|---|---|
| [LMS7 07/28주차] 0628 C언어 콘솔 게임 프로젝트, 3팀 + 완료 보고서 (7) | 2025.08.11 |
| [LMS7 07/28주차] 0623 C언어 콘솔 게임 프로젝트, 3팀 + 개발 계획서 (1) | 2025.08.11 |