[java] 자바 소켓 프로그래밍을 이용한 분산 컴퓨팅

분산 컴퓨팅은 여러 컴퓨터를 네트워크로 연결하여 작업을 분산시키고 병렬로 처리하는 방식입니다. 이를 위해 소켓 프로그래밍은 많이 사용되는데, 소켓을 통해 서로 다른 컴퓨터 간에 데이터를 주고받을 수 있습니다. 이번 포스트에서는 자바 소켓 프로그래밍을 이용하여 분산 컴퓨팅을 구현하는 방법에 대해 알아보겠습니다.

소켓 프로그래밍의 기본 개념

소켓 프로그래밍은 네트워크를 통해 데이터를 송수신하는 방법을 제공하는 API입니다. 소켓은 클라이언트와 서버 간의 통신을 담당하는 객체로, 클라이언트 소켓과 서버 소켓으로 나뉩니다.

자바 소켓 프로그래밍 예제

이제 간단한 예제를 통해 자바 소켓 프로그래밍을 구현해보겠습니다. 예제에서는 서버의 현재 시간을 클라이언트에 전송하는 간단한 분산 컴퓨팅 시스템을 구현합니다.

서버 소스코드:

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Server {
    public static void main(String[] args) {
        try {
            // 서버 소켓 생성
            ServerSocket serverSocket = new ServerSocket(8080);
            System.out.println("서버 시작");

            while (true) {
                // 클라이언트 연결 대기
                Socket socket = serverSocket.accept();
                System.out.println("클라이언트 연결됨");

                // 현재 시간 정보 생성
                Date now = new Date();
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String currentTime = format.format(now);

                // 클라이언트에 시간 데이터 전송
                PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
                writer.println(currentTime);
                writer.close();

                // 클라이언트 연결 해제
                socket.close();
                System.out.println("클라이언트 연결 해제됨");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

클라이언트 소스코드:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        try {
            // 서버에 연결
            Socket socket = new Socket("localhost", 8080);
            
            // 서버에서 전송된 시간 데이터 수신
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String currentTime = reader.readLine();
            System.out.println("서버 시간: " + currentTime);

            // 소켓 연결 해제
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 예제에서는 서버가 클라이언트의 연결 요청을 받으면 현재 시간 정보를 생성하고, 클라이언트에게 전송합니다. 클라이언트는 서버에 연결한 뒤 서버에서 전송한 시간 데이터를 수신하여 출력합니다.

결론

자바 소켓 프로그래밍을 이용하면 분산 컴퓨팅을 구현할 수 있습니다. 소켓을 이용하여 클라이언트와 서버 간의 데이터 송수신을 가능하게 하고, 이를 통해 여러 대의 컴퓨터를 활용한 병렬 처리를 할 수 있습니다. 자바 소켓 프로그래밍을 공부하고 응용하여 다양한 분산 컴퓨팅 시스템을 개발해보세요!

참고 자료