더북(TheBook)
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()