개발 Q&A

제목 실시간 채팅 서비스를 이렇게 만든다면.. 과연 효용성이 있을까요?
카테고리 서버
글쓴이 하늘치 작성시각 2022/06/22 13:28:04
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 5007   RSS

오랜만에 질문 들고 돌아왔습니다.

대략 12년 전 쯤.. 일하던 회사에서 실시간 채팅을 위해 아이프레임 무한 리프레쉬 기술을 사용하는 걸 본 기억이 있습니다. 

그 당시 php 와 javascript 만으로는 소규모용으로 충분했을 것 같기는 합니다. 

 

그런데, 만약.. 아래와 같이 만든다면 서버 부하 분산에 과연 얼마나 도움이 될런지 궁금해서 여쭙습니다.

 

1. 채팅방 생성시 채팅방용 디렉토리에 채팅방 고유파일 생성(빈 파일 또는 생성 timestamp 기록)

2. 채팅방에서 누구가 글을 남기면 DB 에 기록하고, 채팅방 고유파일 업데이트(빈 파일 또는 업데이트 timestamp 기록)

3. 채팅방 참여한 유저에게는 입장시 채팅방 고유파일의 생성/수정 일시를 세션으로 기록

4. javascript 로 채팅방 고유파일의 생성/수정 일시를 확인하여 참여 유저의 채팅방 참여 세션값과 비교를... 무한반복;;

5. 다르면 세션값 업데이트, 디비에서 채팅 기록 가져와서 출력.

 

디비에 무한 접속하는 것 보다는 파일에 무한 접속하는 게 더 낫지 않을까 하는 짧은 생각으로 써봤습니다.

 

단, 배움이 짧은 탓에..

이게 과연 서버에 부하를 줄여줄 수 있는 방법인 건지는 잘 모르겠네요.

검색해봐도 제가 아는 선에서는 관련 정보를 얻기가 쉽지 않고요. 

 

다른 실시간 채팅 소스들과 비교해보다면야.. 뭐 말이 안되는 구식 방법이겠습니다만, 

제가 궁금한 건, 이렇습니다.

 

과연..

똑같은 비동기식으로 무한 반복을 시켰을 때, 

데이터베이스를 계속 확인하게 하는 것과,

디렉토리의 파일 계속 읽어들이는 것 사이에 

어느 것이 서버 자원을 덜 먹고 부하를 덜 주는지 궁금합니다.

 

웹서버 디비서버를 따로 두는 경우엔, 각 서버의 사양에 당연히 영향을 많이 받겠지만.. 

여기서는 그냥 서버 하나에서 다 돌아간다고 가정하겠습니다~ 

 

어떤 글에서는 DB 도 결국 파일이다. 디렉토리도 파일이고, 모든 게 결국 파일이다 라고 써 있던데, 그럼 결국 다를 게 없는건가 싶기도 하다가요..

DB를 사용하는 이유는 더 빠른 검색을 위해서이다 라는  글을 보면 또 내가 영 잘못 알고 생각했나 싶기도 하고요.

근데, 로드밸런서를 사용해야 하는 홈페이지라면.. 제가 생각한 건 별도의 NAS 를 쓰지 않는 이상 불가능하기도 하겠구나 싶기도 하고..

 

하하..생각이 복잡하네요. 

 

고수님들의 현명한 답변을 기다립니다~ ^^

 

 다음글 모델에서 변수값 못받는 상항 (2)
 이전글 여러 도메인에서 하나의 세션을 갖는 경우 (2)

댓글

변종원(웅파) / 2022/06/22 15:07:21 / 추천 0

롱폴링 방식인데 서버부하도 그렇고 클라이언트도 부하가 갑니다.

db에서 파일로 쓰면 db에서 읽어서 파일 쓰기 - 그 시간 갭에는 표현안되는 문제 발생, 부하 분산이라기 보다는 가중

node.j나 소켓 방식으로 구현하는게 훨씬 부하가 덜합니다. 이미 나와있는 라이브러리들도 있구요.

하늘치 / 2022/06/23 14:17:27 / 추천 0

@웅파님 감사합니다. 

node.js 보다는 소켓 방식을 알아보는 게 아무래도 허들이 낮을 것 같네요.