3.1.2 에피소드 코드에는 어떤 논리 오류가 들어 있을까?
용이의 분배 로직은 파이썬 asyncio 기반 비동기 환경에서 동작하고 있었습니다. 주요 함수는 async def로 선언되어 있었고, 필요한 비동기 호출에는 await도 빠짐없이 사용되었습니다. 문법적으로 틀린 부분은 없었습니다. 순번에 따라 GPU 파드를 선택하는 구문도 구현되어 있었습니다. 그래서 더더욱 문제를 의심하기 어려웠습니다.
하지만 이 코드에는 하나의 홀(hole)이 있었습니다. 비동기로 동작하는 흐름 안에서 분배를 결정하는 핵심 판단이 ‘동기적으로 안전하다고 가정된 상태’ 위에서 이루어지고 있었기 때문입니다. 용이의 분배 로직은 요청을 받으면 먼저 현재 순번에 해당하는 GPU 파드를 가리킵니다. 그리고 그 파드가 그 순간 사용 가능한 상태인지 확인합니다. 만약 사용 중이라면 다음 파드를 확인하고, 그 다음 파드도 사용 중이면 또 다음 파드를 확인합니다. 즉, 이 로직은 순번을 기준으로 돌되, 각 단계마다 현재 파드의 상태를 읽고 판단하는 방식이었습니다. 순수한 라운드 로빈도 아니고 완전한 상태 기반 분배도 아닌 두 방식이 섞인 하이브리드 분배 방식이었습니다.