
본 프로젝트는 해시태그 기능이 포함된 채팅 서버와 클라이언트를 구현하는 것을 목표로 합니다. 사용자는 특정 해시태그를 팔로우하고, 해당 해시태그가 포함된 메시지만 수신할 수 있습니다. 이를 통해 대규모 채팅 환경에서 사용자의 관심사에 맞는 메시지만을 효율적으로 전달할 수 있습니다.
최근 SNS와 메신저 서비스에서 해시태그를 통한 관심사 기반의 콘텐츠 필터링이 중요한 기능으로 자리잡고 있습니다. 해시태그를 통해 사용자는 원하는 주제만을 선택적으로 받아볼 수 있어, 정보의 과부하를 줄이고 필요한 정보만을 효율적으로 얻을 수 있습니다. 따라서 본 프로젝트는 이러한 해시태그 기능을 채팅 서버에 도입하여 사용자 경험을 향상시키고자 합니다.
서버 모듈
void * handle_clnt(void * arg) {
// 클라이언트 소켓을 받아 메시지를 수신하고 처리
while ((str_len = read(clnt_sock, msg, sizeof(msg) - 1)) != 0) {
// 메시지 처리
if (tag_start) {
// 해시태그 메시지 전송
send_msg(formatted_msg, strlen(formatted_msg), clnt_sock, tag);
} else {
// 일반 메시지 전송
send_msg(formatted_msg, strlen(formatted_msg), clnt_sock, "");
}
}
}
void send_msg(char * msg, int len, int sender_sock, char * tag) {
// 모든 클라이언트에게 메시지 전송
for (i = 0; i < clnt_cnt; i++) {
if (clients[i].sock != sender_sock) {
write(clients[i].sock, msg, len);
}
}
}
클라이언트 모듈
void * send_msg(void * arg) {
// 사용자 입력을 받아 서버에 메시지 전송
while (1) {
fgets(msg, BUF_SIZE, stdin);
write(sock, msg, strlen(msg));
}
}
void * recv_msg(void * arg) {
// 서버로부터 메시지를 받아 출력
while (1) {
str_len = read(sock, name_msg, NAME_SIZE + BUF_SIZE - 1);
fputs(name_msg, stdout);
}
}
그림 1. 서버 연결
그림 2. 클라이언트 연결
서버 실행
./hash_serv 8080 명령어로 서버를 실행합니다.
서버는 클라이언트의 접속을 기다리며, 클라이언트가 접속하면 해당 클라이언트의 접속 메시지를 출력합니다.
클라이언트 실행
./hash_clnt 127.0.0.1 8080 client1, ./hash_clnt 127.0.0.1 8080 client2, ./hash_clnt 127.0.0.1 8080 client3
명령어로 각 클라이언트를 실행합니다.클라이언트는 서버에 접속하며, 접속 시 클라이언트의 이름을 서버에 등록합니다.


그림 5. 실제 예시 1번
그림 6. 실제 예시 2번
해시태그 추가:
클라이언트 1은 해시태그 #공부를 추가합니다.
클라이언트 2는 해시태그 #공부를 추가합니다.
클라이언트 3은 해시태그를 추가하지 않습니다.
메시지 송수신:
클라이언트 1이 해시태그 #공부를 포함한 메시지 "안녕하세요"를 보냅니다.
클라이언트 2는 해당 해시태그를 구독 중이므로 메시지를 수신합니다.
클라이언트 3은 해당 해시태그를 구독하지 않으므로 메시지를 수신하지 않습니다.
일반 메시지 송수신:
클라이언트 1이 일반 메시지 "안녕하세요"를 보냅니다.
모든 클라이언트가 메시지를 수신합니다.
한계점
향후 발전 가능성
본 프로젝트는 해시태그 기능이 포함된 채팅 서버를 구현하여, 사용자가 관심 있는 주제에 대해서만 메시지를 수신할 수 있도록 했습니다. 이를 통해 대규모 채팅 환경에서 정보 과부하를 줄이고, 효율적인 메시지 전달을 가능하게 했습니다. 향후 성능 개선 및 기능 확장을 통해 더 나은 사용자 경험을 제공할 수 있을 것입니다.