Skip to content

Refactoring

soyeon edited this page Feb 29, 2024 · 1 revision

Chat

참고) Chat 총 정리


WebSocket

기존엔 WebSocket으로만 채팅을 진행했으나

사용자별로 채팅방을 구분하고 front에서 보내주는 MessageType에 따라 실행되는 로직을 구분할 수 있도록

Stomp 프로토콜을 적용하여 개선했다.

참고) WebSocket 정리 글



File

참고) JMH 정리 글

파일 저장 방식 변경

파일에 데이터를 저장할 때 가독성을 위해 설정 변수들을 각각 한 줄에 하나씩 넣었다.

{
    "roomId": 123,
    "type" : "TALK",
    "sender": "nickname",
    "message" : "hi",
    "adminChat": 1,
    "userChat": 0
}, {
    "roomId": 123,
    "type" : "TALK",
    "sender": "nickname",
    "message" : "hi",
    "adminChat": 2,
    "userChat": 0
}

그러다 보니 마지막 글을 가져올때 끝에서부터 7줄을 읽어야 했다.


수정 후에는 모든 값을 한 줄에 넣는 방식으로 변경하여 가독성과 편의성을 개선했다.



JMH를 사용한 성능 테스트 결과


이러한 변경으로 "testImproved"의 실행 시간이 평균 1.860 ms/op로 개선되었다. 에러 범위는 ±0.465 ms/op다.

반면에 "testOriginal"의 실행 시간은 평균 154.466 ms/op로 나타났으며, 에러 범위는 ±51.680 ms/op다.

따라서 testImproved와 testOriginal 간의 실행 시간 차이가 대략 150배이며, 에러 범위도 50배 정도 줄었다.


마지막 글 조회 최적화

채팅방을 키고 닫기를 자주하면서 계속 파일을 열고 마지막 글을 조회하는 횟수가 많아졌다.

조회하는 횟수를 줄이기 위해 파일에 채팅 기록을 저장할 때 Map에 해당 글을 저장하고

마지막 글을 조회할때 해당 Map에 값을 꺼내오는 방식으로 파일을 조회하는 횟수를 줄였다.



Broker

초반에는 내장된 SimpleBroker를 사용했으나, 채팅 이용자 수의 증가는 메모리 부담이 커지게 된다.

Redis로 broker를 변경하여 데이터를 빠르게 읽고 쓸 수 있게 하고, 또한 서버의 부담을 줄일 수 있었다.

참고) Redis pub/sub




Clone this wiki locally