JAVA/Java와 최신 기술

Java RMI(Remote Method Invocation) 기초: 초보자도 쉽게 배우는 분산 컴퓨팅 가이드

CodeCaine Explorer 2024. 12. 22. 23:00
728x90
반응형
SMALL

안녕하세요! 😊 오늘은 Java의 RMI(Remote Method Invocation)에 대해 배워볼 거예요!

RMI는 네트워크를 통해 다른 컴퓨터에 있는 메서드를 호출하는 기술이에요. 마치 내 컴퓨터에 있는 메서드를 호출하듯이 사용할 수 있죠. 이 글에서는 비전공자와 초보자도 이해할 수 있도록 쉽게 풀어 설명드릴게요. 끝까지 함께하면 RMI를 사용하는 방법을 알 수 있어요! 😊


RMI란 무엇인가요?

RMI(Remote Method Invocation)는 Java에서 분산 컴퓨팅을 지원하기 위한 기술입니다.

  • 분산 컴퓨팅: 여러 컴퓨터가 협력해서 작업을 처리하는 방식이에요.
  • Remote(원격): 다른 컴퓨터에 있는 객체나 메서드에 접근하는 것을 말해요.

쉽게 말하면! 😊

내 컴퓨터에서 다른 컴퓨터에 있는 메서드를 호출하고, 결과를 받을 수 있는 기술이에요.
예를 들어:

  1. A 컴퓨터: add(3, 5) 메서드를 가지고 있음.
  2. B 컴퓨터: A 컴퓨터의 add 메서드를 호출해서 3 + 5의 결과인 8을 받아옴.

RMI를 구성하는 주요 요소

  1. RMI 서버: 원격 메서드를 제공하는 컴퓨터입니다.
  2. RMI 클라이언트: 서버의 원격 메서드를 호출하는 컴퓨터입니다.
  3. Registry(레지스트리): 서버와 클라이언트를 연결해주는 중개 역할을 합니다.

RMI 예제: 간단한 덧셈 서비스 만들기

1. 인터페이스 정의

RMI는 먼저 원격 호출할 메서드를 정의하는 인터페이스가 필요합니다.

import java.rmi.Remote;
import java.rmi.RemoteException;

// 원격 메서드 정의를 위한 인터페이스 (Remote 상속 필요)
public interface Calculator extends Remote {
    // 원격으로 호출할 메서드 선언 (throws RemoteException 필수)
    int add(int a, int b) throws RemoteException;
}

2. 서버 구현

RMI 서버는 위 인터페이스를 구현하고, 메서드를 실제로 정의합니다.

import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;

public class CalculatorImpl extends UnicastRemoteObject implements Calculator {
    // 생성자
    protected CalculatorImpl() throws RemoteException {
        super();
    }

    // 원격 메서드 구현
    @Override
    public int add(int a, int b) throws RemoteException {
        System.out.println("😊 클라이언트 요청으로 덧셈 실행: " + a + " + " + b);
        return a + b;
    }
}

3. 서버 시작

RMI 서버는 객체를 생성하고, 레지스트리에 등록합니다.

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class RMIServer {
    public static void main(String[] args) {
        try {
            // CalculatorImpl 객체 생성
            Calculator calculator = new CalculatorImpl();

            // RMI 레지스트리 생성 및 객체 등록
            Registry registry = LocateRegistry.createRegistry(1099); // 1099는 기본 포트 번호
            registry.rebind("CalculatorService", calculator);

            System.out.println("😊 RMI 서버가 시작되었습니다!");
        } catch (Exception e) {
            System.out.println("😢 서버 에러: " + e.getMessage());
        }
    }
}

4. 클라이언트 구현

클라이언트는 RMI 서버의 원격 메서드를 호출합니다.

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class RMIClient {
    public static void main(String[] args) {
        try {
            // 레지스트리에서 CalculatorService 찾기
            Registry registry = LocateRegistry.getRegistry("localhost", 1099);
            Calculator calculator = (Calculator) registry.lookup("CalculatorService");

            // 원격 메서드 호출
            int result = calculator.add(5, 10);
            System.out.println("😊 서버로부터 받은 결과: " + result);
        } catch (Exception e) {
            System.out.println("😢 클라이언트 에러: " + e.getMessage());
        }
    }
}

코드 동작 방식

  1. 서버: CalculatorImpl 객체를 생성하고 레지스트리에 등록합니다.
  2. 클라이언트: 레지스트리에서 CalculatorService를 찾아 메서드를 호출합니다.
  3. 네트워크 통신 :
    • 클라이언트가 호출한 요청이 네트워크를 통해 서버로 전달됩니다.
    • 서버는 계산 결과를 클라이언트로 반환합니다.

결과

  1. 서버 출력 :

    😊 클라이언트 요청으로 덧셈 실행: 5 + 10
  2. 클라이언트 출력 :

    😊 서버로부터 받은 결과: 15

조금 어려워도 괜찮아요! 😊

RMI는 네트워크와 객체 지향 개념이 결합된 기술이라 처음엔 복잡하게 느껴질 수 있어요. 하지만 한 번 이해하면 여러 컴퓨터 간 작업을 효율적으로 처리할 수 있어요! 💪

728x90
반응형
SMALL