python 기반 채팅프로그램 - 0

김두현·2023년 6월 30일
0

python_chat

목록 보기
1/4
post-thumbnail

회사에서 일일 업무를 끝낸 와중에 남은 시간을 뭐할까 고민하다 CS의 기본인 네트워크를 가볍게 복습하는 의미로 cloude 서버에서 동작 가능한 Command-Line Interface(CUI: 터미널) 기반의 간단한 채팅 프로그램을 개발하자 마음먹었다!

개발 전에 가장 먼저 고민한 질문은

python 언어를 사용할 것인가? node js 기반으로 채팅 프로그램을 구현할 것인가?”

결론적으로 python 기반의 채팅 프로그램을 개발하기로 마음 먹었다. 거창한 이유는 아니지만 2가지 정도의 이유로 python을 선택했다.

💡 1. 직접 socket 프로그래밍을 할 수 있는가?
💡 2. Mulit Thread를 이용한 채팅 프로그램인가?

물론 실시간 채팅이라는 특성에서 node js도 훌륭한 방안이지만 node js는 단일 thread 기반의 런타임 환경으로 multi thread 프로그래밍과는 거리가 멀고 python과 같이 저수준의 socket 프로그래밍에는 제약이 있다고 판단해 python 선택!!

필요 기능

먼저 직접 코드를 짜기 전에 본 채팅 프로그램에서 어떤 기능이 필요한지 간략하게 아래와 같이 정리했다.

  1. Server-Client 구조
  2. CIL 기반 프로그램
  3. 3명의 이상의 사용자가 동시에 채팅 가능
  4. 접속한 클라이언트 모두에게 메시지를 전송
  5. 귓속말 기능
  6. 클라이언트가 처음 접속 시 닉네임 설정

개발 전 점검 사항

Python을 사용해 터미널 인터페이스를 이용한 채팅 프로그램을 계발할 예정이다. 채팅 프로그램을 구현하기 위해서는 아래와 같은 바탕 지식이 필요하다

  1. Python 문법
  2. 네트워크 osi 계층 이해
  3. Socket 프로그래밍
  4. Thread → Mulit Thread 프로그래밍

1, 2, 3의 지식은 내가 어느 정도는 가지고 있다고 판단했지만 thread를 직접 구현해서 프로그래밍 해본 기억은 가물가물해 thread 공부가 먼저 필요하다고 생각했다.

→ 먼저 thread 기법을 적용하지 않은 채팅 프로그램을 구현 후 thread 모듈을 적용하자고 결정!


Server-Client Model

먼저 구현한 코드를 먼저 보기 앞서 지금까지 계속 서버,서버 클라이언트, 클라이언트라고 언급했는데 server가 뭔지? client가 뭔지? 채팅 프로그램의 server-client 구조에 대해서 짚고 넘어가자!

위키백과에서는 server-client model을 아래와 같이 정의했다.

클라이언트 서버 모델(client–server model)은 서비스 요청자인 클라이언트와 서비스 자원의 제공자인 서버 간에 작업을 분리해주는 분산 애플리케이션  구조이자 네트워크 아키텍처를 나타낸다.

음… 쉽게 말해서 서버는 사용자, 즉 클라이언트 측으로 서비스를 제공하는 컴퓨터를 의미하는데 서버는 사용자 간의 채팅 서비스도 포함된다.

클라이언트는 서버와 반대로 서비스를 요청하는 사용자를 의미한다.

서비스를 요청하면 보통 클라이언트끼리 직접적으로 연결되지 않고 서버에서 요청을 처리한 후에 각 클라이언트에게 알맞은 서비스를 제공하는 것이 보편적이다

💡 여러 클라이언트가 서버에 요청할 수 있으므로 서버 개발자는 항상 이를 고려해 서버의 부하를 최대한 줄일 수 있는 방향으로 개발해야 한다.

Socket in Server-Client

소켓을 이용한 server-client 구조는 아래의 그림과 같다.

  1. 클라이언트는 서버의 ip 주소와 port를 통해 connet를 요청한다
  2. 서버에서는 요청을 수락하면 각 클라이언트마다 소켓을 할당해준다.
  3. 생성된 소켓을 통해 각 클라이언트마다 데이터를 주고 받는다.

💡 채팅 프로그램에서 서버는 각 클라이언트 마다 할당된 소켓을 잘 관리하는 것이 핵심이라고 볼 수 있다!!

  • 소켓에 대한 자세한 내용은 다음 post에서 확인하시길…

Reference

클라이언트 서버 모델

[Java] Socket을 이용한 Client/Server 채팅 프로그램

profile
끄적끄적

0개의 댓글

관련 채용 정보