본문 바로가기
포트폴리오 소개/I'm doing this just for fun.

고, 플러터, 라즈베리파이5로 채팅 서비스 만들기 - 2(서버 설계 편)

by 신재은👩🏼‍💻 2024. 2. 1.

병아리 개발자이기 때문에 내용이 굉장히 전문적이고 막 그러지 않을 수 있다.

그래도 이건 내 생각을 현실화하는 일이기 때문에 어떠한 눈치도 보지 않고 '내 생각'대로 기술할 것이다.

 

채팅 서버를 빠르게 구축하려면 유튜브에 있는 거 아무거나 내 구상에 가장 가까운 거 집어서 그걸 베끼든 참고하든 하면 될 것이다.

그런데 이번에는 나름의 정도를 밟아 본다.

인터넷에 있는 자료를 참고하는 건 중간 중간에 하면 된다.

 

개발 전에는 우선 설계를 해야 한다.

그런데 나는 지금 절대 틀리지 않을 청사진을 그려 놓고 그걸 바로 구현하기만 하면 되는 수준(상황)이 아니다.

 채팅 서버에는 정말 다양한 기능이 들어가는데

지금 당장은 필요한 것 같아도 별 쓸모가 없는 기능이 발견될 수도 있고

단 한 번도 도입을 생각하지 않았는데 막상 개발이 진행될수록 '이건 꼭 넣어야 된다'는 기능이 나올 수도 있다.

고로, 초반의 설계는 가능한 한 유연해야 한다.

 

나중에 여기에 뭔 짓을 해도 별 문제가 되지 않을 정도로 유연해야 한다.

 

===

 

1. 본 채팅 서버에 필요한 기능은?

이 기능을 정하기 위해 센드버드에서 제공하는 기능을 다 뜯어 본 적이 있다.

지금은 '대충' 아래 정도로 생각하고 있다.

1:1 채팅, 그룹 채팅, 파일 전송, 온라인 상태 표시, 메시지 알림, 사용자 인증, 메시지 암호화, 메시지 기록 및 검색, 사용자 설정

 

러프하게 적었는데 이 정도만 해도 기능이 꽤 많다고 생각한다.

저거 구현하는 데 시간 꽤 걸릴 거다.

힘들지 않다면 개발 중간에 신규 기능이 더 추가될 것 같다.

 

2. 프로토콜 결정

어떤 통신 프로토콜을 사용할 것인가?

웹소켓, MQTT은 확정이고 XMPP랑 HTTP/HTTPS는 용도에 따라 차후 도입을 결정하자.

 

3. 아키텍처 설계

서버 구조 어떻게 할 건지,

각 컴포넌트가 어떻게 상호 작용할지,

어떻게 데이터가 흐를지 등을 설계하자.

확장성, 보안, 장애 대응 같은 비기능적 요구사항도 고려하자.

 

아키텍처 설계는 지금 당장 하기에는 심사숙고해야 하는 부분이 많아서

시간이 날 때까지 여기에서 멈춰 놓겠다.