Golang 100Lines 채팅(Chatting) 만들기
채팅에서 가장 중요한 요소는 최소 2명 이상의 사용자 간에 메시지를 양방향으로 교환하는 것이다. 한 명의 사용자가 입력한 메시지는 상대방 또는 여러 사용자에게 전달되어야 하고 누군가 입력한 메시지는 모두가 그 메시지를 수신할 수 있어야 한다.
또 다른 중요한 요소는 메시지를 입력한 사용자가 누구인지 다른 사용자가 알 수 있어야 한다는 것이다. 즉 채팅은 메시지를 보내는 이가 누구인지 알 수 있는 양방향 메시지 송/수신을 구현해야 한다.
이 포스트에서는 고언어를 사용하여 100 Lines 이하로 채팅 서버를 구현하고 개념을 설명한다. 채팅 서버는 tcp 통신으로 메시지를 교환하므로 클라이언트는 telnet을 활용한다.
TCP Port 수신 및 클라이언트 접속
1:1 채팅이 아닌 서버 기반의 다중 클라이언트 브로드캐스트 채팅을 만들것임
클라이언트는 telnet, nc 등을 사용할 수 있고, 여기서 만들 것은 채팅 서버임요
클라이언트가 telnet을 통해 서버에 접속하면 가장 먼저 대화명을 쓰고 채팅 서버에 들어가게 됨
채팅 서버에 접속하는 동안 사용자는 다른 사람이 작성한 채팅을 실시간으로 확인하면서 내가 작성한 채팅을 다른사람들이 볼 수 있도록 전송할 수 있음
기본 golang 패키지, 라이브러리만 사용할 것이고 필요에 따라 tls을 적용하거나 별도의 클라이언트를 만들거나 tcp 전문 전송이 아닌 http, grpc 등을 응용하여 기능을 개선할 수 있음
여기서는 매우 간단하게 go routine, channel 등을 이용하여 golang으로 채팅 서비스를 만드는 기초를 설명함
총 코드는 100라인이 되지 않도록 구조화와 리팩토링을 잘 하도록 함