728x90
반응형
SMALL
안녕하세요! 😊 오늘은 Java의 RMI(Remote Method Invocation)에 대해 배워볼 거예요!
RMI는 네트워크를 통해 다른 컴퓨터에 있는 메서드를 호출하는 기술이에요. 마치 내 컴퓨터에 있는 메서드를 호출하듯이 사용할 수 있죠. 이 글에서는 비전공자와 초보자도 이해할 수 있도록 쉽게 풀어 설명드릴게요. 끝까지 함께하면 RMI를 사용하는 방법을 알 수 있어요! 😊
RMI란 무엇인가요?
RMI(Remote Method Invocation)는 Java에서 분산 컴퓨팅을 지원하기 위한 기술입니다.
- 분산 컴퓨팅: 여러 컴퓨터가 협력해서 작업을 처리하는 방식이에요.
- Remote(원격): 다른 컴퓨터에 있는 객체나 메서드에 접근하는 것을 말해요.
쉽게 말하면! 😊
내 컴퓨터에서 다른 컴퓨터에 있는 메서드를 호출하고, 결과를 받을 수 있는 기술이에요.
예를 들어:
- A 컴퓨터:
add(3, 5)
메서드를 가지고 있음. - B 컴퓨터: A 컴퓨터의
add
메서드를 호출해서 3 + 5의 결과인 8을 받아옴.
RMI를 구성하는 주요 요소
- RMI 서버: 원격 메서드를 제공하는 컴퓨터입니다.
- RMI 클라이언트: 서버의 원격 메서드를 호출하는 컴퓨터입니다.
- 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());
}
}
}
코드 동작 방식
- 서버:
CalculatorImpl
객체를 생성하고 레지스트리에 등록합니다. - 클라이언트: 레지스트리에서
CalculatorService
를 찾아 메서드를 호출합니다. - 네트워크 통신 :
- 클라이언트가 호출한 요청이 네트워크를 통해 서버로 전달됩니다.
- 서버는 계산 결과를 클라이언트로 반환합니다.
결과
서버 출력 :
😊 클라이언트 요청으로 덧셈 실행: 5 + 10
클라이언트 출력 :
😊 서버로부터 받은 결과: 15
조금 어려워도 괜찮아요! 😊
RMI는 네트워크와 객체 지향 개념이 결합된 기술이라 처음엔 복잡하게 느껴질 수 있어요. 하지만 한 번 이해하면 여러 컴퓨터 간 작업을 효율적으로 처리할 수 있어요! 💪
728x90
반응형
SMALL