상세 컨텐츠

본문 제목

DeadLock 발생 및 해결

출장 자동화 시스템

by myeongjaechoi 2025. 9. 12. 17:12

본문

문제 발생

이전에 비동기와 논블로킹으로 코드를 변경하고, 교착상태에 빠졌다.

 현재 코드에서는 hotel.py에서 전역변수로 Browser-Session을 사용하고 있어서 사용자가 다중 호텔 예약 시 하나의 브라우저 세션을 사용하여 여러 개를 예약하려고하여 교착상태에 빠졌다.

 사용자에게 가상 모니터를 띄어줄 때 새 탭으로 여러 호텔 예약이 가능하게 할 것인지, 아니면 새 창으로 여러 호텔 예약을 가능하게 할 것인지 고민하였다.

문제 해결 과정

새 탭으로 하려면 하나의 브라우저 세션으로 처리해야돼서 user_id 및 session_id를 받고 요청이 들어올 때 마다 user_id 및 session_id를 조회하여 새탭을 생성해야 되고 시나리오가 3가지 정도 였다.

시나리오 1
호텔 A : 카드 번호 페이지
호텔 B : 카드 번호 페이지
A만 입력 후 에이전트 다시 시작
호텔 B는 강제적으로 카드번호 입력 실패

시나리오 2
호텔 A : 카드 번호 페이지
호텔 B : 카드 번호 페이지
A,B 입력 후 에이전트 다시 시작
호텔 A가 먼저 카드 번호 페이지에 진입했어도 호텔 B가 카드 번호 페이지에 진입할 때까지 기다려야함
-> return을 한 번에 묶어서 보냄


시나리오 3
호텔 A : 카드 번호 페이지
호텔 B : 예약 중
A만 입력 후 에이전트 다시 시작
A는 완료돼어 return 보내고 B는 계속 예약중

그래서 새 창으로 해결하기로 했다.

문제 해결

 hotel.py에서 전역변수로 Browser-Session을 사용하고 있던 것을 main.py의 fastapi 요청 받을 때마다 생성하고 session을 넘겨주는 방식으로 교착상태를 해결하였다.

관련글 더보기