
구현에 들어가기전
대규모일 경우 애자일 개발 프로세스로
짧은 주기로 나눠 반복적으로 개발해도 되지만
소규모 단기간 프로젝트이기 때문에
폭포수 개발처럼 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

2.1. 클라이언트와 서버 사이의 실시간 통신
웹소켓
클라이언트와 서버 사이의 실시간 통신에는 웹소켓을 사용합니다.
웹소켓은 서버와 클라이언트에게 비동기 메시지 보낼 때 사용
STOMP
소켓 통신을 STOMP 프로토콜을 이용해 pub/sub 구조로 개발할 것입니다.
STOMP 프로토콜은 웹소켓 위에서 동작하고
Spring 에서 지원하는 STOMP는 In-Memory 브로커를 이용합니다. 그래서
다수 서버일 경우 다른 서버 사용자와 채팅불가 하기 때문에 외부 메시지 브로커를 사용합니다.
- 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 명세
3. 계획
To-do
채팅 서버
접속상태서버
테스트 통합, 성능
서버 세팅
채팅서버, 접속상태서버
컨트롤러 연결, entity, repository
채팅서버
카프카 연결
몽고디비연결
접속상태서버
카프카 연결
레디스 연결
개인 공부
카프카 예제
몽고 db예제
1/22~1/28 (1주) : 채팅 서버 |
29 (2주) : 채팅 서버 |
5 (3주) : 접속서버 |
12 (4주) : 통합, 성능 |
19 (5주) : 최종발표준비 |
4. 마음가짐
구현에만 집중되는 프로젝트가 되지 않았으면 좋겠다. 중요한 건 프로젝트는 성장하기 위한 도구일 뿐
"나" 나의 개발 성장! 목적성!에 초점을 맞추도록 노력하자.
내가 어떤 목적으로 프로젝트를 수행하는가?
좋은 목표는 좋은 실행에 있다. 실행은 프로젝트이고 성장하기 위한 좋은 도구이다.
익힌 것을 사용하면서 실질적인 것이여야된다.
기술을 사용하는 데에 실행과 잘 연결되어있는가
중간중간 나의 목표랑 하고 있는 것에 괴리가 있는지 점검
'Dev > [프로젝트] 2022 Winter Dev Camp' 카테고리의 다른 글
2022 스마일게이트 윈터데브캠프를 통해 성장하기 6 - 프로젝트 배포 (0) | 2023.03.04 |
---|---|
2022 스마일게이트 윈터데브캠프를 통해 성장하기 5 - MongoDB 쿼리 자유롭게 사용하기 (0) | 2023.03.03 |
2022 스마일게이트 윈터데브캠프를 통해 성장하기 4 - 구현 : 접속상태 서비스 (0) | 2023.03.01 |
2022 스마일게이트 윈터데브캠프를 통해 성장하기 3 - 구현 : 채팅 서비스 (0) | 2023.02.28 |
2022 스마일게이트 윈터데브캠프를 통해 성장하기 1 - 좋은 목표는 좋은 실행에서 나온다. (0) | 2023.02.25 |
댓글