Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 구현하는 XML-RPC 서버와 클라이언트 완벽 가이드

XML-RPC 프로토콜을 활용하면 운영체제나 프로그래밍 언어에 종속되지 않는 크로스 플랫폼·언어 독립형 서버를 손쉽게 만들 수 있습니다. Python에서는 표준 라이브러리에 포함된 SimpleXMLRPCServer 모듈을 사용해 서버 인스턴스를 생성하고, 들어오는 요청을 대기하도록 설정합니다. 이후 서비스에 포함시킬 함수들을 정의하고 등록(register)하면, 서버가 해당 함수들을 호출하는 방법을 알게 됩니다.

서버 실행하기

다음 예제에서는 SimpleXMLRPCServer 인스턴스를 생성하여 서버를 만들고, 기본 제공 함수와 사용자 정의 함수를 함께 등록합니다. 마지막으로 무한 루프에 진입하여 클라이언트의 요청을 계속해서 수신하고 응답하도록 구성합니다.

예제 코드

from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCRequestHandler
class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ('/RPC2',)
with SimpleXMLRPCServer(('localhost', 9000),
                        requestHandler=RequestHandler) as server:
    server.register_introspection_functions()
    # 내장 len() 함수 등록
    server.register_function(len)
    # 다른 이름으로 함수 등록
    @server.register_function(name='rmndr')
    def remainder_function(x, y):
        return x // y
    # 함수 이름 그대로 등록
    @server.register_function
    def modl(x, y):
        return x % y
    server.serve_forever()

위 서버가 실행되면, 클라이언트 프로그램에서 등록된 함수들을 참조하여 원격 호출(remote call)을 수행할 수 있습니다.

클라이언트 실행하기

클라이언트 측에서는 xmlrpc.client 모듈의 ServerProxy 객체를 사용해 서버에 연결합니다. 프록시 객체를 통해 메서드를 호출하면, 실제로는 XML-RPC 요청이 서버로 전송되고 결과가 반환됩니다.

예제 코드

import xmlrpc.client
s = xmlrpc.client.ServerProxy('https://localhost:9000')
print(s.len("Tutorialspoint"))
print(s.rmndr(12,5))
print(s.modl(7,3))
# 사용 가능한 메서드 목록 출력
print(s.system.listMethods())

실행 결과

위 코드를 실행하면 다음과 같은 결과를 확인할 수 있습니다.

14
2
1
['len', 'modl', 'rmndr', 'system.listMethods', 'system.methodHelp', 'system.methodSignature']

출력 결과를 보면 문자열 길이 계산(14), 나눗셈 몫(2), 나머지 연산(1)이 각각 원격으로 처리되었으며, system.listMethods()를 통해 서버에 등록된 전체 메서드 목록도 조회할 수 있음을 알 수 있습니다.