Project2021

2021_07_04) 채팅 오류(하나의 컨트롤러에서 insert와 insert한 데이터 select)

뱅타 2021. 7. 4. 23:11

Error


  • 채팅방 추가할 시 해당 date를 elastic에서 받아오지 못함.
  • 그래서 채팅방 추가 할 시 오류가 나면서 sidebar와 채팅방 자체가 뜨지 않음

 

문제

  • 항상 생성한 방의 date만 받아오지 못함.
  • 연결수립을 요청하면 이전데이터는 잘 받아오는데 해당 데이터는 받아오지 못함.

 

 

가설

  • 채팅방 생성 시 elastic에 insert를 하는데 insert와 거의 동시에 select 전송이 가버려서 반응이 느림.
  • 현재는 가능성이 가장 높아 보임
  • 이유는 debug 모드로 실행시켰을 시 데이터가 잘 받아와짐. 문제가 전혀 보이지 않음.
  • 그래서 select를 일으키는 시간을 조금 미뤄보기로 함.
try {
				Thread.sleep(500);
				currentChat = service.getMessageListbyChatRoomOne(roomInfo.getChatroom_no(), 1);
			} catch (InterruptedException e) { e.printStackTrace(); }

 

 

원인을 알아챌 수 있었던 hint

for(ChatRoomVO chatRoom : roomList) {
			// chatRoomVO의 chatList에 대화 내용들 담기.
			int chatRoom_no = chatRoom.getChatroom_no();
			// 만약 elastic에서 데이터를 못 받아온다면 직접 날짜값 집어넣기.
			if(chatRoom_no == roomInfo.getChatroom_no()){
				chatRoom.setChatList(currentChat);
			}
			// elastic에서 chatList 뽑기.
			lateChat = service.getMessageListbyChatRoomOne(chatRoom_no, 1);
			
			// 뽑은 chatList를 해당 room의 chatList에 담기.
			chatRoom.setChatList(lateChat);
		}
  • 여기의 service 부분에서 해당 채팅방 번호 조회 시 for문에서 튕겨져 나와 버림.
  • 아마 elastic에 데이터가 존재하지 않아서 그런 듯 함.(insert는 했지만 select 문 속도가 비슷하게 작동해서 그런듯)

 

 

solution

  • elastic에 insert와 select를 거의 비슷한 속도로 전달하기 때문에 받아오는 과정에서 오류가 일어난 듯함
  • thread로 실행 속도를 늦춰주니 잘 작동함.

 

Summary


  • 데이터 insert를 하고 그 값을 select를 할 시에는
  • controller를 따로 사용하거나(이거 조금 더 나은 방법인 듯 함. 그렇지만 실제 실행 시 잘 작동할 지는 확실할 수 없음.)
  • 시간을 지연시키는 thread를 사용하여 데이터가 전송되고 도달할 시간을 늦추자.
  • while문을 사용해서 값을 받아올때까지 요청하는 것 도 있을 듯 한데...
  • 어느것이 더 나은지 확실히 판단하기에는 지금의 내 수준에서 어려운 듯 하다.

 

 

Etc


  • 다른 오류를 찾음.
  • 맴버 초대 시 이름을 입력하면 session 이 만료됨...
  • 다음에 수정해야지...
728x90
반응형

'Project2021' 카테고리의 다른 글

2021_07_02) RESTful API?.  (0) 2021.07.02
2021_07_01) 통합검색 한글 깨짐현상.  (0) 2021.07.01
[Git] github 라이센스 추가하기  (0) 2021.06.16
[Gaia] project 흐름도.  (0) 2021.06.14
[javascript] ajax로 form data 보내기  (5) 2021.06.12