본문 바로가기
Dev/[프로젝트] 2022 Winter Dev Camp

2022 스마일게이트 윈터데브캠프를 통해 성장하기 2 - 프로젝트 설계와 마음가짐

by javapp 자바앱 2023. 2. 26.
728x90

구현에 들어가기전

 

대규모일 경우 애자일 개발 프로세스로

짧은 주기로 나눠 반복적으로 개발해도 되지만

소규모 단기간 프로젝트이기 때문에

폭포수 개발처럼 SDLC를 따라 

요구분석 - 설계 - 구현 - 테스트 순으로 개발할 것

 

전체적으로 MSA구조로 인증,유저, 알림, 채팅, 접속상태 마이크로서비스가 있는데
제가 맡은 부분인 채팅, 접속상태 서비스 위주로 작성겠습니다.

 

1. 요구 분석

프로젝트 개요

소켓 통신을 활용한 메신저 앱 개발
1:1 채팅과 그룹 채팅 모두 지원하는 메시징 앱 서비스로
"페이스북 메신저"를 벤치마킹하여 로직을 참고하였습니다.

기술 스택

Java11

Spring Boot 2.7.8

kafka

mongoDB

Gradle

Git

JUnit5

AWS

Docker

 

주요 기능

● 채팅 서비스

1:1 채팅

그룹 채팅

채팅방 관리

 

접속상태 서비스

사용자 접속 상태 목록

접속상태변경 on&off

 


2. 설계

Project Architecture

 

채팅 서비스 아키텍처 설계시

"채팅시스템설계" 블로그 글 정리

 

https://app.diagrams.net 에서 작성

 

2.1. 클라이언트와 서버 사이의 실시간 통신

 

웹소켓

클라이언트와 서버 사이의 실시간 통신에는 웹소켓을 사용합니다.

웹소켓은 서버와 클라이언트에게 비동기 메시지 보낼 때 사용

 

STOMP

소켓 통신을 STOMP 프로토콜을 이용해 pub/sub 구조로 개발할 것입니다.

STOMP 프로토콜은 웹소켓 위에서 동작하고

Spring 에서 지원하는 STOMP는 In-Memory 브로커를 이용합니다. 그래서

다수 서버일 경우 다른 서버 사용자와 채팅불가 하기 때문에 외부 메시지 브로커를 사용합니다.

 

RabbitMQ와 kafka - 주키퍼

  • RabbitMQ : 메시지 브로커
    • 사용 예) e-commerce platform that uses MSA
    • 비교적 적은 양의 비스 내부 통신에 적합
  • Apache Kafka : 분산형 스트리밍 플랫폼 - pub/sub 모델 기반
    • To handle the large volume of data and real-time processing requirements, you could use Kafka as the data processing platform for the system.
    • Kafka’s distributed architecture, high performance, and support for real-time data processing make it a good choice for building systems that need to process and analyze large volumes of data in real time.
    • 초당 10만 건 데이터 다룰 때, 클라우드 서비스에 종속적
  • 발행-구독 모델은 비동기 메시지 패러다임
    • 느슨한 결합 : 발행자와 구독자는 서로 존재 알 필요 없고 서로를 고려하지 않은 채 동작을 지속할 수 있다. 이로인해 더 많은 확장성을 제공할 수 있다.
    • 발행-구독 모델로 병렬처리, 메시지 캐싱, 트리기반/네트워크 기반 라우팅 등 다양한 방식 제공

 

2.2. 외부 메시지 브로커

외부 메시지 브로커로 RabbitMQ  Redis pub/sub, kafka 중 Kafka 사용

토픽(채팅방)을 기준으로 메시지 주고 받음

producer, consumer 가 pub/sub 역할

 

 

2.2. Database

NoSQL 을 선택

키/값 저장소는 수평적 규모 확장이 쉽다.

키/값 저장소는 데이터 접근 지연시간(latency)가 낮다.

 

채팅 서버

채팅방, 채팅메시지 관리 : 몽고DB

 

접속 상태 서버

사용자 접속 상태 정보 : 몽고DB or Redis

 

2.3. API 명세

Plop 메신저 API 명세

 


 

 

3. 계획

To-do

채팅 서버

접속상태서버

테스트 통합, 성능

 

서버 세팅

채팅서버, 접속상태서버

컨트롤러 연결, entity, repository

 

채팅서버

카프카 연결

몽고디비연결

 

접속상태서버

카프카 연결

레디스 연결

 

개인 공부

카프카 예제

몽고 db예제

 

1/22~1/28 (1주) : 채팅 서버
29 (2주) : 채팅 서버
5 (3주) : 접속서버
12 (4주) : 통합, 성능
19 (5주) : 최종발표준비

 

 

 

4. 마음가짐

 

구현에만 집중되는 프로젝트가 되지 않았으면 좋겠다. 중요한 건 프로젝트는 성장하기 위한 도구일 뿐

 

"나" 나의 개발 성장! 목적성!에 초점을 맞추도록 노력하자.

 

내가 어떤 목적으로 프로젝트를 수행하는가?

 

좋은 목표는 좋은 실행에 있다. 실행은 프로젝트이고 성장하기 위한 좋은 도구이다.

익힌 것을 사용하면서 실질적인 것이여야된다.

기술을 사용하는 데에 실행과 잘 연결되어있는가

 

중간중간 나의 목표랑 하고 있는 것에 괴리가 있는지 점검

 

댓글