Skip to content

Commit fe8aeef

Browse files
committed
docs: README.md 수정
1 parent 1e07e9a commit fe8aeef

3 files changed

Lines changed: 18 additions & 388 deletions

File tree

client/README.md

Lines changed: 10 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,18 @@
11
# 체스 클라이언트 기능명세
22

33
- 여러 화면과 다이얼로그가 존재. 추후 확장성을 고려해야함.
4-
- 모든 화면은 가장자리에 테두리가 존재함.
54
- 서버와의 연동을 고려하여 확장성 고려해서 제작 (서버와의 통신은 common/PROTOCOL.md 참조)
65
- 유니코드 문자를 사용한다는 점을 고려
7-
- 프로덕션 레벨에 준하는 수준으로 제작 (단, 너무 많은 기능을 구현하지는 말것 (점진적으로 개발 예정이므로))
86

97
## 구현된 기능
108

119
### 🎮 메인 화면
1210
- 게임 시작, 옵션, 종료 메뉴가 존재하고 게임 시작 메뉴에서 다이얼로그로 유저이름을 입력받음
13-
- 키보드 (1, 2, 3) 또는 마우스로 메뉴 선택 가능
14-
- SIGINT(Ctrl+C) 신호 무시로 의도치 않은 종료 방지
1511

1612
### 🔍 매칭 화면
1713
- 매칭이 시작되면 매칭 대기 중 메시지가 표시되고 업타임을 보여줌
1814
- 취소 버튼(ESC)을 누르면 취소됨
19-
- 매칭이 완료되면 게임 화면으로 이동 (현재는 5초 후 자동 이동)
15+
- 매칭이 완료되면 게임 화면으로 이동
2016

2117
### ♟️ 게임 화면
2218
- 체스 보드가 왼쪽에 표시되고, 오른쪽에 채팅과 게임 메뉴가 표시됨
@@ -26,142 +22,30 @@
2622
- 선택된 기물은 하이라이트로 표시
2723

2824
#### 📢 채팅 시스템
29-
- 채팅 메시지가 표시되고, 시스템 메시지 지원
30-
- 최대 50개 메시지 저장, 12개까지 화면에 표시
31-
- 오래된 메시지는 자동으로 제거
32-
33-
#### 🎯 게임 메뉴
34-
- 기권, 무승부 제안, 게임 저장, 메인으로 돌아가기 기능
35-
- 현재 턴 표시
36-
- 키보드 단축키 지원 (1-4번)
25+
- 채팅 메시지가 표시되고, 시스템 메시지 또한 표시
3726

3827
### 🎨 UI/UX 특징
39-
- 유니코드 체스 기물 사용 (♔♕♖♗♘♙♚♛♜♝♞♟)
4028
- 체스판 흑백 칸 색상 구분
29+
- 현재 턴 표시
4130
- 선택된 기물과 칸 하이라이트
42-
- 테두리가 있는 윈도우 기반 UI
4331
- 반응형 레이아웃
4432

4533
## 빌드 및 실행
4634

47-
### 요구사항
48-
- Linux 환경
49-
- 최소 터미널 크기: 90x25
50-
- ncurses 라이브러리 (ncursesw)
51-
- pthread 라이브러리
52-
5335
### 빌드 방법
5436
```bash
5537
# 루트 디렉터리에서
56-
./build.sh client
57-
58-
# 또는 클라이언트만 빌드
59-
cd build
6038
make client
39+
40+
# 또는
41+
./build.sh client
6142
```
6243

6344
### 실행 방법
6445
```bash
6546
# 빌드 완료 후
66-
./build/client/client
67-
68-
# 또는 build 디렉터리에서
69-
cd build/client
70-
./client
71-
```
72-
73-
## 사용법
74-
75-
### 메인 화면
76-
1. `1` 키 또는 마우스 클릭으로 게임 시작
77-
2. 사용자명 입력 다이얼로그에서 닉네임 입력
78-
3. `3` 키 또는 `q`로 프로그램 종료
79-
80-
### 매칭 화면
81-
- 자동으로 상대방을 찾습니다 (현재는 5초 후 시연용 게임 시작)
82-
- `ESC` 키로 매칭 취소 가능
83-
84-
### 게임 화면
85-
- **기물 선택**: 체스판의 기물을 마우스로 클릭
86-
- **기물 이동**: 선택된 기물을 다른 위치로 클릭하여 이동
87-
- **선택 해제**: 같은 기물을 다시 클릭
88-
- **게임 메뉴**:
89-
- `1`: 기권
90-
- `2`: 무승부 제안
91-
- `3`: 게임 저장 (미구현)
92-
- `4` 또는 `ESC`: 메인 화면으로 돌아가기
93-
- **채팅**: `Enter` 키로 간단한 인사말 전송
94-
95-
## 향후 구현 예정 기능
96-
- [ ] 실제 서버 연동
97-
- [ ] 완전한 체스 규칙 구현 (캐슬링, 앙파상, 프로모션 등)
98-
- [ ] 실시간 채팅 입력
99-
- [ ] PGN 형식 게임 저장/불러오기
100-
- [ ] 타이머 기능
101-
- [ ] 게임 리플레이
102-
- [ ] 옵션 설정 화면
103-
104-
## 파일 구조
105-
```
106-
client/
107-
├── main.c # 메인 프로그램 파일
108-
├── game_state.h # 게임 상태 관리 헤더
109-
├── game_state.c # 게임 상태 관리 구현
110-
├── CMakeLists.txt # 빌드 설정
111-
└── README.md # 이 파일
112-
```
113-
114-
# ♟️ Multiplayer Chess Game (멀티플레이 체스 게임)
115-
116-
2025-1 시스템프로그래밍 001분반 1팀 팀프로젝트
117-
118-
Linux에서 C로 구현된 터미널 기반 멀티플레이어 체스 게임입니다. 컴파일하는 동안 가벼운 체스 게임을 즐기고 싶은 개발자를 위해 설계되었습니다 — GUI 오버헤드 없이 순수한 CLI의 매력을 경험하세요.
119-
120-
## 🔍 로그 시스템
121-
122-
ncurses를 사용하는 환경에서는 표준 출력이 보이지 않기 때문에, 파일 기반 로그 시스템을 구현했습니다.
123-
124-
### 로그 파일 위치
125-
- **클라이언트 로그**: `logs/chess_client_[PID].log` (프로젝트 루트의 logs 폴더)
126-
127-
### 로그 레벨
128-
- `DEBUG`: 상세한 디버그 정보
129-
- `INFO`: 일반 정보 메시지
130-
- `WARN`: 경고 메시지
131-
- `ERROR`: 오류 메시지
132-
- `FATAL`: 심각한 오류 메시지
133-
134-
### 실시간 로그 모니터링
135-
136-
1. **별도 터미널에서 로그 확인**:
137-
```bash
138-
# 실시간 로그 모니터링 (권장)
139-
./watch_logs.sh
140-
141-
# 또는 직접 tail 사용
142-
tail -f logs/chess_client_[PID].log
143-
```
144-
145-
2. **특정 레벨만 필터링**:
146-
```bash
147-
# 에러만 보기
148-
tail -f logs/chess_client_[PID].log | grep ERROR
149-
150-
# 워닝 이상만 보기
151-
tail -f logs/chess_client_[PID].log | grep -E "(WARN|ERROR|FATAL)"
152-
```
153-
154-
3. **로그 파일 검색**:
155-
```bash
156-
# 특정 함수의 로그만 보기
157-
grep "connect_to_server" logs/chess_client_[PID].log
158-
159-
# 네트워크 관련 로그만 보기
160-
grep -i "network\|connect\|socket" logs/chess_client_[PID].log
161-
```
162-
163-
### 개발자를 위한 팁
47+
./run.sh client
16448

165-
- 클라이언트를 실행하기 전에 다른 터미널에서 `./watch_logs.sh`를 실행하세요
166-
- 문제가 발생하면 로그 파일에서 `ERROR``FATAL` 메시지를 확인하세요
167-
- 네트워크 연결 문제는 `connect_to_server` 함수 로그를 확인하세요
49+
# 또는
50+
./run.sh client -h 192.168.1.100 -p 8080
51+
```

server/README.md

Lines changed: 8 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -1,147 +1,31 @@
11
# 🔧 Chess Server
22

3-
Linux에서 C로 구현된 멀티플레이어 체스 게임의 서버 컴포넌트입니다.
3+
멀티플레이어 체스 게임의 서버
44

55
## 🚀 빌드 및 실행
66

77
### 빌드
88
```bash
99
# 서버만 빌드
10-
./build.sh server
10+
make server
1111

12-
# 전체 빌드
13-
./build.sh
12+
# 또는
13+
./build.sh server
1414
```
1515

1616
### 실행
1717
```bash
1818
# 기본 포트(8080)로 서버 실행
19-
./build/server/server
19+
./run.sh server
2020

2121
# 특정 포트로 서버 실행
22-
./build/server/server --port 9090
23-
```
24-
25-
## 📋 로그 시스템
26-
27-
서버는 콘솔에 색상이 있는 로그를 직접 출력합니다. 별도의 로그 파일을 생성하지 않으며, 실시간으로 서버 상태를 확인할 수 있습니다.
28-
29-
### 로그 출력 특징
30-
- **실시간 콘솔 출력**: 서버 실행 시 터미널에 바로 표시
31-
- **색상 구분**: 로그 레벨별로 다른 색상 적용
32-
- **상세한 정보**: 타임스탬프, 파일명:라인번호, 함수명 포함
33-
34-
### 로그 레벨
35-
- `DEBUG`: 상세한 디버그 정보 (네트워크 이벤트, 메시지 처리 등)
36-
- `INFO`: 일반 정보 메시지 (클라이언트 연결, 게임 시작 등)
37-
- `WARN`: 경고 메시지 (매칭 실패, 잘못된 요청 등)
38-
- `ERROR`: 오류 메시지 (네트워크 오류, 처리 실패 등)
39-
- `FATAL`: 심각한 오류 메시지 (서버 종료 필요한 오류)
40-
41-
### 🎨 색상 구분
42-
43-
- 🔴 **빨간색**: ERROR, FATAL 메시지
44-
- 🟡 **노란색**: WARN 메시지
45-
- 🟢 **초록색**: INFO 메시지
46-
- 🔵 **파란색**: DEBUG 메시지
47-
- 🔵 **하늘색**: 타임스탬프
48-
- 🟣 **자주색**: 파일명:라인번호
49-
-**회색**: 함수명
50-
51-
### 로그 출력 예시
52-
53-
```
54-
[2025-06-03 20:16:58] [INFO] main.c:41 main() - Chess server starting... (PID: 159598)
55-
[2025-06-03 20:16:58] [DEBUG] server_network.c:55 create_and_bind_listener() - Socket created: fd=3
56-
[2025-06-03 20:16:58] [INFO] server_network.c:161 event_loop() - Starting event loop...
57-
[2025-06-03 20:17:20] [INFO] server_network.c:156 handle_new_connection() - New client connected: fd=7
58-
[2025-06-03 20:17:21] [INFO] ping.c:18 handle_ping_message() - Ping received from fd=7: Hello Server!
59-
[2025-06-03 20:17:25] [INFO] match_manager.c:178 add_player_to_matching() - Player Alice(fd=7) added to waiting queue
22+
./run.sh server -p 8081
6023
```
6124

6225
## 🏗️ 아키텍처
6326

6427
### 핵심 컴포넌트
6528

6629
1. **server_network.c**: epoll 기반 네트워크 이벤트 처리
67-
2. **protocol.c**: protobuf 메시지 직렬화/역직렬화
68-
3. **match_manager.c**: 매칭 시스템 및 게임 관리
69-
4. **handlers/**: 메시지 타입별 처리 핸들러들
70-
5. **common/logger.c**: 스레드 안전 로그 시스템 (콘솔 출력)
71-
72-
## 🛠️ 개발자 가이드
73-
74-
### 실시간 로그 모니터링
75-
76-
서버 실행 시 터미널에서 실시간으로 로그를 확인할 수 있습니다:
77-
78-
```bash
79-
# 서버 실행 - 로그가 실시간으로 콘솔에 출력됨
80-
./build/server/server --port 8080
81-
```
82-
83-
### 디버깅 팁
84-
85-
1. **서버 시작 시 로그 확인**:
86-
```bash
87-
# 서버 실행하면 초기화 과정이 로그로 표시됨
88-
./build/server/server
89-
```
90-
91-
2. **연결 문제 진단**:
92-
- 클라이언트 연결 시 `New client connected` 메시지 확인
93-
- 네트워크 에러 시 빨간색 ERROR 메시지 확인
94-
95-
3. **매칭 시스템 디버깅**:
96-
- 매칭 요청 시 `Match request from player` 메시지 확인
97-
- 게임 시작 시 `Match found! Game started` 메시지 확인
98-
99-
### 성능 모니터링
100-
101-
```bash
102-
# 동시 연결 수 확인
103-
netstat -an | grep :8080 | grep ESTABLISHED | wc -l
104-
105-
# 서버 프로세스 리소스 사용량
106-
ps aux | grep server
107-
```
108-
109-
## 🐛 문제 해결
110-
111-
### 일반적인 문제들
112-
113-
1. **포트 이미 사용 중**:
114-
```bash
115-
# 포트 사용 프로세스 확인
116-
lsof -i :8080
117-
118-
# 다른 포트로 실행
119-
./build/server/server --port 9090
120-
```
121-
122-
2. **메모리 누수 디버깅**:
123-
```bash
124-
# valgrind로 메모리 검사
125-
valgrind --leak-check=full ./build/server/server
126-
```
127-
128-
### 로그를 통한 문제 진단
129-
130-
서버 실행 중 터미널에서 다음 항목들을 확인하세요:
131-
132-
- **초기화 과정**: 서버 시작 시 나타나는 INFO 메시지들
133-
- **클라이언트 연결**: `New client connected` 메시지
134-
- **매칭 시스템**: 매칭 요청과 게임 생성 관련 메시지
135-
- **에러 메시지**: 빨간색으로 표시되는 ERROR/FATAL 메시지
136-
137-
### 로그 출력 리다이렉션
138-
139-
필요한 경우 로그를 파일로 저장할 수 있습니다:
140-
141-
```bash
142-
# 모든 출력을 파일로 저장
143-
./build/server/server 2>&1 | tee server_output.log
144-
145-
# 에러만 파일로 저장
146-
./build/server/server 2> server_errors.log
147-
```
30+
2. **match_manager.c**: 매칭 시스템 및 게임 관리
31+
3. **handlers/**: 메시지 타입별 처리 핸들러들

0 commit comments

Comments
 (0)