목차
- 프로젝트 소개
- 프로젝트 구조
- 기술 스택 및 개발 환경
프로젝트 소개
Go 및 백엔드에서 사용하는 전반적인 기술을 익히는 것을 목표로 하는 프로젝트로, 최종 결과물로는 다수의 사용자들이 실시간으로 채팅을 주고받을 수 있는 웹 어플리케이션을 개발하는 것을 목표로 합니다.
채팅은 다수의 유저가 동시에 접속해서 실시간으로 메시지를 주고 받는 기능을 필요로 합니다. 이 때문에 현대 서버 기술에서 중요하게 여겨지는 동시성, 캐시, 데이터베이스 등의 기술의 필요성을 느낄 수 있는 프로젝트라고 생각했습니다. 동시에 이런 기능을 테스트하는 방법을 만들어보는 것도 목표로 하고 있습니다.
여기서 다수란 약 15000명의 사용자가 동시에 접속할 수 있는 서비스로, 이는 스팀 서비스에서 인기 게임 100위 안에 들어가는 게임의 동시 접속자 수와 비슷한 수치입니다. 이와 관련해서 세부적인 테스트 환경은 추후에 다시 정의할 예정입니다.
프로젝트 구조
메인 서버: 회원 가입, 로그인 등의 유저 관리 기능 처리. 채팅 서버로 유저와의 연결 담당. 캐시 및 데이터베이스 서버와의 연결 담당.
캐시 서버: 로그인 정보, 채팅 메시지 등을 저장하고 조회하는 서버.
데이터베이스 서버: 유저 정보, 채팅 메시지 등을 저장하고 조회하는 서버.
기술 스택 및 개발 환경
1. 서버 개발 언어: Go
2. 사용 프레임워크: Gin
3. 배포 환경: Microsoft Azure
4. 데이터베이스: PostgreSQL
5. 채팅 메시지 전달 및 로그인 캐시 서버: Redis
6. 채팅 메시지 저장 및 조회: MongoDB
7. 테스트 방법: Postman, websocket king
서버 개발 언어: Go
- Go가 서버단에서 개발 편리성이 높고, 빠른 속도로 동작하는 것으로 알려져 있는데 이를 체험해보기 위해
- Go 루틴과 같은 기능을 통해 동시성 처리를 쉽게 할 수 있기 때문에, 채팅 서버에서 동시성 처리가 많이 필요한 부분이 있을 것으로 예상되기 때문에
- Go의 수요가 높아질 것으로 예상되는데, 이에 대한 경험을 쌓기 위해
사용 프레임워크: Gin
- Go를 활용한 웹 프레임워크 중에서 가장 인기 있는 프레임워크 중 하나로 학습자료가 많고, 현업에서 사용하는 곳도 많아서
배포 환경: Microsoft Azure
- 배포를 위해 사용되는 클라우드 서비스는 크게 AWS, Azure, GCP가 있습니다.
- 그런데 Azure를 제외하고는 이전에 사용해 본다고 무료 크레딧을 이미 다 활용했기 때문에 이 참에 Azure를 사용해보기로 했습니다.
데이터베이스: PostgreSQL
- MySQL과 비교했을 때, 한글 처리가 더 용이해서 문제가 덜 발생했기 때문.
- 최초에는 MySQL을 통한 개발 환경을 구축했으나, 한글 처리에 문제가 발생해서 변경함.
채팅 메시지 전달 및 로그인 캐시 서버: Redis
- 캐시 서버로 현재 가장 많이 쓰이는 솔루션 중 하나이기 때문에
- Azure에서도 Redis를 제공하기 때문에
채팅 메시지 저장 및 조회: MongoDB
- 개발 목적 중 하나는 NoSQL 데이터베이스를 경험해보는 것이었기 때문에
- 채팅 어플리케이션으로 기획을 한 것도 이러한 이유
- MongoDB는 Azure에서도 제공한다.
- MongoDB는 채팅 메시지와 같은 비정형 데이터를 저장하기에 적합하고 알려져 있다.
테스트 방법: Postman, websocket king
- Postman은 기존에 사용해본 경험이 있고, websocket king은 웹소켓을 테스트하기 위한 툴로 알려져 있기 때문에
- 이외의 것을 하려면 클라이언트를 개발해야 하는데, 클라이언트 개발 경험 자체가 없어 이를 개발하려하면 시작 자체가 어려울 것으로 예상되기 때문에.
- 때문에 해당 부분은 개발에서 목표로 하고 있는 수치인 15000명의 동시 접속자 수를 테스트하기에 현재 부적합하며, 추후에 다시 정의할 예정입니다.
- 15000명의 동시 접속 역시도 해당 접속자들이 어느 정도의 메시지를 주고받는지, 어느 정도의 메시지를 저장하는지에 따라서 달라질 수 있기 때문에, 이에 대한 테스트 방법 또한 추후에 다시 정의할 예정입니다.
- 대략적으로 생각중인 것은 얼마 전 아프리카 tv에서 7만명의 동접자가 1분에 1번의 채팅을 소화하지 못해서 방송이 다운되는 사태가 있었기 때문에, 이와 비슷한 수치를 목표로 테스트를 진행할 예정입니다.
2024-02-25