Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Java
- 다익스트라
- Spring Cloud Config
- 유레카
- ZuulFilter
- dp
- 스프링 시큐리티
- 이분 탐색
- 플로이드 와샬
- 구현
- Gradle
- 메모이제이션
- 백트래킹
- 달팽이
- docker-compose
- 이분 매칭
- 완전 탐색
- 도커
- Logback
- 스택
- 트리
- 비트마스킹
- 서비스 디스커버리
- 구간 트리
- BFS
- spring boot
- Zuul
- 게이트웨이
- spring cloud
- 주울
Archives
- Today
- Total
Hello, Freakin world!
[채팅앱] 메세지 서버에서 치명적인 결함을 발견하다 본문
프로젝트 막바지에 중요한 결함을 발견하고,
결국 코드를 리셋하기로 마음먹었습니다ㅠㅠ (남는게 시간인 백수라 쌉가능)
(빨리 완성하고 스프링 프로젝트를 시작하고 싶었지만...)
결함은 허술한 아키텍쳐 설계가 원인이었습니다.
하지만 이 당시엔 이벤트 방식의 논블로킹 서버에 대한 지식이 전무했기 때문에
어떻게보면 이와 같은 결정이 필연적인 수순 같기도 하네요.
문제점을 간단하게 설명하자면,
처음 설계된 구조는 서버에서 하나의 EventLoop(전달 받은 이벤트를 처리하는 스레드)를 이용해 모든 이벤트를 처리하려고 했습니다. 이렇게 할 경우, 이벤트를 read 하는건 상관없지만 write 해야되는 경우에 난감해집니다.
채팅방에 있는 사람들에게만 write하려면 채널들을 선별하는 과정이 필요합니다.
고민해본 결과, 식별정보를 추가하고, write 작업마다 검색과정을 거치면 O(n^2)의 복잡도로 해결이 가능합니다. 하지만 채팅방 수가 늘어남에 따라 급격하게 느려질겁니다. 직관적으로 생각해도 하나의 채팅방 메세지를 보내는데 서버에 연결된 모든 채널을 순회하는 방식은 비효율적입니다.
개선사항
- ChatRoomServer와 통신하는 코드를 추가
- 채팅방 생성시 ChatServer에 메세지를 보내 RoomThread 생성 요청.
- ChatServer는 채팅방마다 RoomThread를 가지고, RoomThread는 각 하나의 EventLoop 스레드를 가집니다.
'Toy Project > 채팅 앱 만들기' 카테고리의 다른 글
[채팅앱] 최종 완성된 아키텍쳐 (0) | 2020.05.02 |
---|---|
[채팅앱] 드디어 완성하다 우오오오오오오옷!!!! (0) | 2020.05.02 |
[채팅앱] 클라이언트와 채팅룸 서버 1차 연결 완료 (0) | 2020.04.16 |
[채팅앱] 자바 모듈 프로그래밍의 필요성을 느끼다 (0) | 2020.04.14 |
[채팅앱] 채팅룸 서버 테스트 추가 및 진행 상황 (0) | 2020.04.08 |
Comments