Java & Spring/WebSocket & Stomp 8

[Spring] 웹소켓/Stomp 8

다중 서버에서의 Redis Pub & Sub 다중 서버 상황에서 서버 메모리에 의존적인 기능들은 대부분 문제가 생길 가능성이 크다. 문제A 서버와 B 서버가 있을 때 클라이언트1과 2가 실시간 채팅하는 상황에서 1은 A 서버에 발행, 2는 B 서버를 구독하게 되면A 서버는 클라이언트 2에 대한 정보를 알고 있지 않기 때문에 실시간 채팅 기능이 정상적으로 동작하지 않는다. 해결 - 서드 파티 솔루션으로 Redis Pub Sub 기능 사용 주로 Redis 또는 Kafka를 사용Redis는 pub sub 기능 외에도 캐싱, 리프레시 토큰 관리 등 여러 역할을 많이 수행한다. Redis Pub Sub : Redis가 제공하는 메시징 기능 - 실시간 통신에서 메시지를 전파해주는 목적으로 사용한다.- Redis..

[Spring] 웹소켓/Stomp 7

채팅 프로젝트 ERD 설계- member : chat_participant가 1 : N 연관관계인 이유 : 하나의 회원은 여러 채팅방을 가질 수 있기 때문 => 여러 채팅 방의 채팅 유저가 될 수 있다.- chat_room : isGroupChat 가 true라면 chat_participant가 3명 이상이라는 의미이다.- message_read_status 를 chat_message 테이블에서 정규화 & 1 : N 연관관계인 이유 [정규화]메시지 읽음 여부를 여러 사용자가 독립적으로 관리할 수 있도록 하기 위함모든 메시지에 isRead 컬럼을 두게 되면, 사용자가 많아질수록 이 컬럼을 관리하기 어려워지고, 데이터 중복 발생 가능메시지별로 다수의 참여자가 있어 각 읽음 여부를 개별적으로 다루기 위해 테이..

[Spring] 웹소켓/Stomp 6

https://nippyclouding.tistory.com/51 [Spring] 웹소켓/Stomp 5https://nippyclouding.tistory.com/49 [Spring] 웹소켓/Stomp 4Stomp는 순수 웹소켓과 다르게 각 room (주로 topic이라고 호칭)들을 구분하여 관리할 수 있다. (사용자마다 group화 되어있다)순수 웹소켓도 각 room을nippyclouding.tistory.com위와 이어진다. EventListener - Stomp에서는 순수 웹소켓과 다르게 직접 클라이언트 세션들을 개발자가 관리하지 않는다.- 클라이언트 세션들은 Stomp에서 자동으로 편리하게 관리하고 있다.- 웹소켓을 이용하며 발생한 사건(event)들을 catch하여 기록, 로깅할 수 있도록 돕는..

[Spring] 웹소켓/Stomp 5

https://nippyclouding.tistory.com/49 [Spring] 웹소켓/Stomp 4Stomp는 순수 웹소켓과 다르게 각 room (주로 topic이라고 호칭)들을 구분하여 관리할 수 있다. (사용자마다 group화 되어있다)순수 웹소켓도 각 room을 구분 가능하지만, 직접 모두 구현해주어야 한다.Snippyclouding.tistory.com Stomp Handler 웹소켓 / Stomp 4의 코드는 현재 JWT 토큰 검증을 하고 있지 않다.=> 로그인 여부와 관련없이 채팅 기능을 이용할 수 있다는 것이 문제이다. 현재는 security config 코드에서 "/connect" 요청은 인증에서 제외하고 있다.security filter에서는 http 요청에 대해서만 인증을 검증할 ..

[Spring] 웹소켓/Stomp 4

https://nippyclouding.tistory.com/48 [Spring] 웹소켓/Stomp 3https://nippyclouding.tistory.com/46 [Spring] 웹소켓/Stomp 2프로젝트 실습 (아래 강의를 수강하며 공부한 내용을 정리)https://www.inflearn.com/course/%EC%9B%B9%EC%86%8C%EC%BC%93-stomp-%EC%B1%84%ED%8C%85%EC%84%9C%EB%B9%84%EC%8A%A4?cidnippyclouding.tistory.com위와 이어진다. STOMP Stomp는 순수 웹소켓과 다르게 각 room (주로 topic이라고 호칭)들을 구분하여 관리할 수 있다. (사용자마다 group화 되어있다)순수 웹소켓도 각 room을 구..

[Spring] 웹소켓/Stomp 3

https://nippyclouding.tistory.com/46 [Spring] 웹소켓/Stomp 2프로젝트 실습 (아래 강의를 수강하며 공부한 내용을 정리)https://www.inflearn.com/course/%EC%9B%B9%EC%86%8C%EC%BC%93-stomp-%EC%B1%84%ED%8C%85%EC%84%9C%EB%B9%84%EC%8A%A4?cid=335899 웹소켓/STOMP 채팅서비스(spring, vue, redis)| brnippyclouding.tistory.com위와 이어진다. Spring에서 Stomp를 사용하지 않은 순수 웹소켓 환경 개발 1. Configimport lombok.RequiredArgsConstructor;import org.springframework.co..

[Spring] 웹소켓/Stomp 2

프로젝트 실습 (아래 강의를 수강하며 공부한 내용을 정리)https://www.inflearn.com/course/%EC%9B%B9%EC%86%8C%EC%BC%93-stomp-%EC%B1%84%ED%8C%85%EC%84%9C%EB%B9%84%EC%8A%A4?cid=335899 웹소켓/STOMP 채팅서비스(spring, vue, redis)| bradkim - 인프런 강의현재 평점 4.9점 수강생 502명인 강의를 만나보세요. 웹소켓/stomp, springboot를활용하여 채팅서비스를 개발합니다. 비교적 쉬운 프레임워크인 vue.js를 통해 간단한 화면도 함께 구성합니다. redis pub/suwww.inflearn.com 실습 환경 설정 1. Docker를 이용하여 MySQL, Redis 컨테이너에 업..

[Spring] 웹소켓 Stomp 1

0. 주요 개념과 용어HTTP - 비연결형, 클라이언트가 매 번 서버에 요청을 보내어 TCP 연결 시도, 요청 처리 후 연결을 끊는다.- 클라이언트의 요청 -> 서버 응답 구조- 서버가 먼저 클라이언트에 신호를 전달할 수 없다.- http:// 프로토콜 사용- TCP 기반 Web Socket - 클라이언트 서버 실시간 통신 구조- 서버가 먼저 클라이언트에 신호를 전달할 수 있다. - ws:// 프로토콜 사용 (Stomp 사용 시에는 생략)- TCP 기반 TCP는 기본적으로 양방향 연결 (3 way HandShake)3 way HandShake 과정이 끝나야 데이터 전송 가능- HTTP와 Web Socket은 기본적으로 TCP 기반이다.- HTTP는 3 way HandShake 이후 클라이언트 요청 -..