
🔗 Redis PUB/SUB, WebSocket 실시간 채팅 개발기 1 : 설계하기 🔗 Redis PUB/SUB, WebSocket 실시간 채팅 개발기 2 : 채팅 기능 구현 🔗 Redis PUB/SUB, WebSocket 실시간 채팅 개발기 3 : 채팅방 리스트는 어떻게 최신화할까? 안녕하세요. 이번 포스팅에서는 채팅 기능을 어떻게 발전시켰는지 작성해 보겠습니다. 결과부터 보여드리자면, 저희의 채팅 기능 속도는 평균적으로 130ms -> 8ms 로 향상했습니다. 약 1500% 정도나 향상하였습니다. %로 하니까 숫자가 믿기지 않네요! [캐치룸]은 채팅서버와 메인서버가 분리된 간단한 MSA 구조를 갖고 있습니다. 채팅 메시지는 Mongo DB에 저장되어, 채팅 서버에 연결되어 있는 반면에, 채팅방 리스트..

🔗 Redis PUB/SUB, WebSocket 실시간 채팅 개발기 1 : 설계하기 🔗 Redis PUB/SUB, WebSocket 실시간 채팅 개발기 2 : 채팅 기능 구현 🔗 Redis PUB/SUB, WebSocket 실시간 채팅 개발기 4 : 채팅방 리스트 최신화 성능 개선기 안녕하세요! 저번 글에서는 채팅 기능 코드를 작성하였습니다. 채팅 메시지를 웹소켓과 Redis를 활용해서 구현하는 것은 이해를 했는데, 채팅 기능에서는 채팅방 리스트 또한 중요합니다. 카카오톡을 보면 마지막 메시지에 따라 채팅방이 정렬이 됩니다. 그렇다면 어떻게 채팅방 리스트의 최신화를 해야 할까요? 🌟 채팅방 리스트의 최신화? 사실 이 문제 때문에 저희는 몇 주를 고민했었습니다. 채팅에 대한 정보는 구글에 널리 퍼져있었지만..

🔗 Redis PUB/SUB, WebSocket 실시간 채팅 개발기 1 : 설계하기 🔗 Redis PUB/SUB, WebSocket 실시간 채팅 개발기 3 : 채팅방 리스트는 어떻게 최신화할까? 🔗 Redis PUB/SUB, WebSocket 실시간 채팅 개발기 4 : 채팅방 리스트 최신화 성능 개선기 안녕하세요! 전 글에서는 [캐치룸]의 채팅 기능이 어떠한 기술을 써서 설계했는지 작성하였습니다. 이번 글에서는 실제 코드와 함께 작성하겠습니다. 💻 준비물 Redis - 저는 로컬에서는 Docker에 깔아서 사용했고, EC2에서는 엘라스틱캐시에 연결하여 사용했습니다. Spring boot 특별한 건 없습니다. ✏️ 의존성 주입 //websocket implementation 'org.springframew..

안녕하세요. 숙박 거래 프로젝트 [캐치룸] 에서 일대일 실시간 채팅을 구현하였습니다. 웹소켓으로 실시간 채팅을 위한 기반을 다지고, Redis의 Pub/Sub를 활용해서 여러 서버에서도 채팅이 가능하도록 구현했습니다. 또한 저는 채팅방 실시간 정렬하는데에도 redis를 활용하였습니다. 다음 게시글로 이어집니다. Redis PUB/SUB, WebSocket 실시간 채팅 개발기 2 : 채팅 기능 구현 Redis PUB/SUB, WebSocket 실시간 채팅 개발기 3 : 채팅방 리스트는 어떻게 최신화할까? Redis PUB/SUB, WebSocket 실시간 채팅 개발기 4 : 채팅방 리스트 최신화 성능 개선기 이번 글 [1. 설계하기] 에서는 [캐치룸] 의 채팅 기능을 설계하기 위해 어떤 기술들을 왜 사용했..

레디스를 사용하면서 객체가 담긴 List를 저장해야하는 방법이다. 📌 RedisConfig redisTemplate.setValueSerializer 에 Jackson2JsonRedisSerializer(Object.class)); 가 중요하다! @RequiredArgsConstructor @Configuration public class RedisConfig { private final RedisProperties redisProperties; //생략 /** * 어플리케이션에서 사용할 redisTemplate 설정 */ @Bean public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate red..

📌 개요 캐치룸 프로젝트에서는 채팅 서버와 메인 서버를 나누어서 진행하고 있다. 하지만 채팅 서버에서도 메인 서버에 연결된 RDS를 사용해야하는 일이 있었고, 처음에는 채팅 서버에도 RDS를 연결하여 적용하고자 했다. 하지만 2개의 서버가 같은 RDS를 바라볼 경우 다음과 같은 의문점이 생긴다. 서버를 분리한 이유 자체가 특정 서버가 다운되더라도 다른 서버가 유지될 수 있도록 함인데, 두개의 서버가 같은 DB를 바라보는 것 자체가 위의 장점에 모순되는 것 아닌가? 만약 메인 서버의 문제로 인해 RDS가 다운되면, 채팅 서버 쪽에서도 문제가 생길 수 있다. 혹은 반대로 채팅 서버에서 RDS를 망가뜨리면, 메인 서버 또한 문제가 생길 수 있다. 그래서 채팅 서버의 RDS 참조를 과감하게 삭제하고, RDS를 ..

📌 개요 채팅 어플리케이션 개발 중 채팅 보낸 시간을 LocalDateTime.now() 로 보내고 있었다. 배포시에는 미국 시간으로 저장이 되는 문제가 발생 했다 📌 해결 방법 @SpringBootApplication public class ChatApplication { //추가 @PostConstruct public void started() { TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul")); } public static void main(String[] args) { SpringApplication.run(ChatApplication.class, args); } } 아예 부트를 실행할 때 제일 먼저 timezone을 서울로 지정해주었다.

전에 비관적 락을 이용해 동시성을 제어 했었다. (블로그 링크) 🌟 이 글의 목적 및 정리 사항 - 기존에 비관적 락을 걸어주어 주문 동시성 처리를 하였음. - 동일한 리소스에 1000개의 접근 (500개의 주문, 500개의 단순 조회)가 있다고 가정할 때, 주문에 대해 정상적으로 동시성 문제는 해결됐으나, 동시 조회는 안됐음. - redis 를 이용한 분산락을 이용해 해당 문제 해결 - 퍼사드 패턴을 이용했으나, 보다 더 확장성을 위해 AOP로 구현함. 📌 비관적 락과 분산락의 차이 비관적 락 (cf. 배타락) 해당 데이터(레코드) 읽고, 쓰는 모든 작업에 lock을 걸어서 다른 자원이 읽고 쓰는 접근을 못하게 함. 분산 락 여러 서버로 구성된 분산 시스템에서 데이터의 동시 접근을 제어하기 위한 메커니..
- Total
- Today
- Yesterday
- 카카오API
- 부트캠프
- 채팅기능개발
- qjzl
- 자료구조 #스택 #큐 #덱 #선형자료구조
- 야놀자X패스트캠퍼스부트캠프
- 데이터베이스
- 그룹스터디
- 국비지원
- 백준
- 백엔드
- 스터디후기
- springboot
- TiL
- boj
- 패스트캠퍼스강의
- 커리어멘토링
- 백엔드부트캠프
- 패스트캠퍼스
- #국비지원취업
- 국비지원취업
- be
- Java
- 프로젝트후기
- 자료구조
- 그룹스터디워크샵
- 과정중간회고
- 국비지원캠프
- 야놀자
- 백엔드개발자
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |