[java] 쓰레드 풀과 클라이언트-서버 모델

이번에는 자바에서 쓰레드 풀과 클라이언트-서버 모델을 알아보겠습니다.

쓰레드 풀

쓰레드 풀은 다수의 작업을 처리하기 위해 미리 정해진 개수의 쓰레드를 풀에 저장해놓고, 작업을 처리할 때마다 풀에서 쓰레드를 가져와 작업을 처리하는 메커니즘입니다. 이를 통해 쓰레드 생성 및 삭제에 따른 오버헤드를 줄일 수 있고, 시스템 자원을 효율적으로 사용할 수 있습니다.

아래는 쓰레드 풀을 생성하는 간단한 예제 코드입니다.

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPoolExample {
    public static void main(String[] args) {
        // 쓰레드 풀을 생성합니다. 최대 10개의 쓰레드를 가집니다.
        ExecutorService executor = Executors.newFixedThreadPool(10);
        
        // 작업을 제출합니다.
        executor.submit(() -> System.out.println("작업 실행"));

        // 쓰레드 풀을 종료합니다.
        executor.shutdown();
    }
}

클라이언트-서버 모델

클라이언트-서버 모델은 네트워크 상에서 서비스를 제공하는 서버와 이를 이용하는 클라이언트로 구성됩니다. 클라이언트는 서버에 요청을 보내고, 서버는 해당 요청에 응답하는 구조입니다.

아래는 간단한 클라이언트-서버 소켓 통신 예제 코드입니다.

서버

import java.net.ServerSocket;
import java.net.Socket;
import java.io.IOException;

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(12345);
        System.out.println("서버 대기 중...");

        while (true) {
            Socket clientSocket = serverSocket.accept();
            System.out.println("새로운 클라이언트가 연결되었습니다.");

            // 클라이언트 소켓을 이용한 작업 수행
            // ...

            clientSocket.close();
        }
    }
}

클라이언트

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

public class Client {
    public static void main(String[] args) throws IOException {
        String serverAddress = "127.0.0.1";
        int serverPort = 12345;

        Socket socket = new Socket(serverAddress, serverPort);

        // 서버 소켓으로부터 데이터를 받아오는 작업 수행
        // ...

        socket.close();
    }
}

위의 예제 코드는 간단한 소켓 통신을 통해 클라이언트가 서버에 접속하고, 서버가 클라이언트를 받아들이는 과정을 보여줍니다.

쓰레드 풀과 클라이언트-서버 모델은 많은 애플리케이션에서 중요한 개념이므로, 학습에 신경써야 합니다.

참고 자료