def serve(port: int = 50054):
"""
gRPC 서버를 시작하는 함수
Args:
port: 서버가 리스닝할 포트 번호 (기본값: 50054)
"""
# ThreadPoolExecutor를 사용하여 최대 10개의 워커 스레드로 요청 처리
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
# CriteriaServiceServicer 인스턴스를 서버에 등록
agents_pb2_grpc.add_CriteriaServiceServicer_to_server(CriteriaServiceServicer(), server)
# IPv6 모든 인터페이스([::])에 지정된 포트로 바인딩 (insecure 연결)
server.add_insecure_port(f"[::]:{port}")
# gRPC는 secure, insecure 연결 모두 지원하지만, insecure 연결은 개발 및 테스트 환경에서 주로 사용됩니다.
# 여기서는 하나의 환경에서 연결하므로 insecure 연결을 사용하지만, 실제 프로덕션 환경에서는 secure 연결을 사용해야 합니다.
# 서버 시작 로그 출력
print(f"[CriteriaService] gRPC server listening on {port}")
# 서버 시작
server.start()
# 서버가 종료될 때까지 대기
server.wait_for_termination()
if __name__ == "__main__":
# 스크립트가 직접 실행될 때 서버 시작
serve()