사실 비즈니스할거면 고민 안해도 됨
근데 개발자라면 정합성을 존나 체크하고 가는게 맞거든.
그니까 내가 지금
방에 접속하면, 최초로 채팅기록과 참여인원을 로딩하고, 그 이후로부터는 소켓으로부터 즉시즉시 하나씩 append를 하거나 참여인원같은 경우도 append 혹은 remove를 단건으로 진행함.
이때, 최초 로딩시에 수신되는 메세지들을 로딩시점 이후로 지연하지 않으면 로딩시점의 메세지가 소실되어버리거든.
메세지같은 경우는 메세지 소실로 끝나지만
방 참여인원같은경우는
영원히 동기화가 안된채 좀비가 남아버릴 수 있음.
물론 아주 적은 확률로 발생하는 것이기 때문에 무시하는게 맞지.
근데 이거를 해결하려고 보니까
이게 참 만만치가 않다....
내 지금 계획은
처음 방에 집어넣어줄때 방에 lock count를 1 증가시키고
로딩이 완료되면 프론트가 lock count를 1 감소시키고
lock count가 1 이상일 경우에는 모든 이벤트가 로깅되어서 지연상태가 되고
이 락카운트 감소시 카운트가 0이라면, 이벤트들을 모두 발생시키기
이게 내가 할 수 있는 최선이거든?
근데 이거 도입했다간 코드가 존나 불어나버린다....
그리고 더 큰 문제가
이게 최선이라는 보장도없어서..
참 난감하다.... 어렵다.... 이거 혼자 하는 프로젝트에서는 이정도 퀄리티 챙기기가 쉽지가 않아
진짜 작정하고 동시성프로그래밍 연습하려는게 아닌이상
왜 무시하는게 맞음?
그러면 lock count와 이벤트 지연. 실행 해?
lock count를 변경함으로서 update lock을 활용하는것
필요하면 해야겠지만 채팅방 정도면 싱글 스레드로 돌리거나 lock-free queue 같은거 써서 채팅방에 대해 원자성 보장할 듯
messages, participants 이 2개 컬렉션을 초기화가 끝나고 사용해야만하는 이유가 있나?
초기화 과정중에 메세지가 도착하면 유실됨
내가 설계 자체를 잘못한걸수도 있긴 한데, 나는 초기화과정에서 db쪽 메세지들이 들어오고 나면 채팅방 전체 메세지가 set up 됨. 최초상태는 빈 벡터고, 셋업 후에는 벡터가 초깃값이 담기고, 그 이후부터는 하나씩 append 됨. 근데 초기화 이전에 들어오면 빈 벡터에 append가 되고, 그게 셋업하면서 소멸됨
그 벡터가 초기화 과정하고 강하게 커플링되어있는데, 그걸 어떻게든 해결해야되겠는 걸
나 제자로 받아줘 ㅠㅠㅠ 1년만 밑에서 배울게. 너가 다니는 회사 내가 지원할게
나 지금 부족하다. 이대로는 대규모트래픽은 커녕 소규모트래픽 창업도 못하게생겼어
lock 을 왜 잡어 그냥 queue 에다가 때려넣고 클라에서는 로딩부터 처리하고나서 큐에 쌓인 애들 차례차례 처리하면 되지
그런쪽으로 생각을 해봐야겠네. 근데 결과론적으로 락이 필요가 없나?
큐에는 전부 다 소실없이 들어가는거 확실함?
그런 비동기 메시지를 큐잉하는 전역 event queue를 둔다면 문제 없을듯
하 존나빡세네.. 나 그냥 기본기조차 안되어있는거같은데 어떡함... 어디가서 배우면 돼? 네이버가면 돼?
너희들 왤케 똑똑하냐
아무래도 이거 카프카같은거 많이 다뤄본애들이 또 잘하는거같네 그쪽이랑 접점이 있나보다
나 지금 진짜 너무어려워... 프론트도 존나 어렵고... 존나어려워 진짜... 동시성프로그래밍
딱꾹 띱때야 설대 알라딘 맞은편 스타벅스로 텨와
MQ나 카프카 써서 이벤트 드리븐하게 해라 - dc App
ㅂㅅ인가 ㅇㅇ