친구를 통해 냅다 사이드 프로젝트 서버 개발 파트로 납치당했다.
프로젝트를 시작하며, 초기에 대략적으로 어떤 형태로 서비스를 운영할 서버의 구조를 잡았는지, 부족하지만 한번 선보여보도록(?) 하겠다. 당연히 최종 구조는 아니며, 최종 구조는 기회가 된다면 프로젝트 회고를 통해 얘기해보도록 할 예정이다.
너 납치된거야. -내친구가 한말임
본 어플은 C2C(Customer to Customer)기반 중고 물품 대여 서비스이다. 사용자들은 중고거래 물품 올리듯이 게시물을 올려, 사용자간의 대여 일정을 잡고 주변인들 간의 물품 대여를 진행한다.
위의 내용은 간단하게 정리해본 1차로 구현할 어플의 MVP 기능들이다. 이렇게 크게 3파트로 나뉘며, 1차 개발이 완료되면 서비스 시작과 함께 추가 기능 개발에 들어갈 것 같다.

위와같이 서버의 구조를 잡아보았다.
대부분의 REST API는 이 API Server에 구현한다. 회원관리, 게시물 관리 등 채팅내역을 제외한 대부분의 데이터는 API Server를 통해 MySQL 에 저장하여 관리할 예정이다.
Java 17SpringBoot 3.3.3MySQLRedisAWS EC2 DockerAmazon S3Firebase FCMRedis와 FCM은 제대로 사용해본 적이 없기에 개발을 진행하면서 추가 구조를 잡아갈 계획이다. FCM의 경우 추후 확장할 때, 별도의 Push Server를 구현할 생각이다.
Chat기능은 실시간성이 중요하고, 해당 기능에 사용자들의 트래픽이 많이 몰릴 것으로 예상이 되기 때문에, 별도의 서버를 분리하기로 결정한다. 따라서 다음과 같이 구성한다.
Java 17SpringBoot WebfluxMongoDBAWS EC2 DockerDatabase를 MongoDB를 사용한 이유는, 채팅 내역을 다루기에 RDB보다 NoSQL 구조가 훨씬 편하기 떄문에 MongoDB를 사용했다.
또한 트래픽이 몰릴 서버이기 때문에 처리가 늦어지면 곤란하여, 채팅에 들어가는 image 파일들도, API Server 를 통해 Amazon S3에 업로드하여 링크를 받아온 후, 해당 링크를 MongoDB 에 저장하는 방식으로 운용할 예정이다.
현재는 아직 서비스를 시행하지 않는 초기 개발 단계이기 때문에, 개발서버와 운영서버를 따로 분리하지 않고, 추후 서비스를 배포할 때, 서버들을 개발서버와 운영 서버, 데이터베이스 또한 개발DB와 운영용DB로 분리하여 운용할 예정이다.