Java를 배워보자/9. 심화 학습

자바 네트워킹 (Socket, ServerSocket)

_Blue_Sky_ 2024. 9. 27. 13:04
728x90
728x90

자바 네트워킹: Socket과 ServerSocket을 활용한 심층 분석

서론

자바는 강력한 네트워킹 기능을 제공하여 다양한 분야에서 활용되는 애플리케이션 개발을 가능하게 합니다. 특히, Socket과 ServerSocket 클래스는 클라이언트-서버 모델을 기반으로 하는 네트워크 통신의 핵심 요소입니다. 이 글에서는 자바 네트워킹의 기본 개념부터 Socket과 ServerSocket의 역할, 그리고 실제 예제를 통해 자세히 알아보겠습니다.

1. 네트워킹의 기본 개념

  • 클라이언트-서버 모델: 네트워크 통신에서 가장 일반적인 모델로, 클라이언트는 서비스를 요청하고 서버는 요청을 처리하여 응답하는 구조입니다.
  • Socket: 네트워크 상의 두 애플리케이션 간의 양방향 통신을 위한 연결점입니다. 소켓은 특정 IP 주소와 포트 번호로 식별됩니다.
  • ServerSocket: 서버 측에서 클라이언트의 연결 요청을 수락하기 위해 사용되는 소켓입니다. 특정 포트에서 클라이언트의 연결을 기다립니다.
  • TCP/IP: 네트워킹 프로토콜의 기본으로, TCP는 신뢰성 있는 연결을 보장하고 IP는 데이터 패킷을 목적지로 전달합니다.

2. ServerSocket 클래스

  • 역할: 서버 측에서 클라이언트의 연결 요청을 수락하고, 새로운 Socket 객체를 생성하여 통신을 시작합니다.
  • 주요 메소드:
    • accept(): 클라이언트의 연결 요청을 수락하고 Socket 객체를 반환합니다.
    • bind(SocketAddress address): 특정 주소와 포트에 바인딩합니다.
    • close(): 서버 소켓을 닫습니다.

3. Socket 클래스

  • 역할: 클라이언트와 서버 간의 실제 데이터 송수신을 담당합니다.
  • 주요 메소드:
    • getInputStream(): 입력 스트림을 얻어 서버에서 보낸 데이터를 읽습니다.
    • getOutputStream(): 출력 스트림을 얻어 서버로 데이터를 보냅니다.
    • close(): 소켓을 닫습니다.

4. 자바 네트워킹 예제

서버 코드

import java.net.*;
import java.io.*;

public class EchoServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(12345);
        System.out.println("Server listening on port 12345");

        while (true) {
            Socket clientSocket = serverSocket.accept();
            System.out.println("Client connected: " + clientSocket.getInetAddress().getHostAddress());

            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                out.println("Echo: " + inputLine);
            }

            clientSocket.close();
        }
    }
}
 

클라이언트 코드

import java.net.*;
import java.io.*;

public class EchoClient {
    public static void main(String[] args) throws IOException {
        Socket clientSocket = new Socket("localhost", 12345);
        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

        out.println("Hello, server!");
        String response = in.readLine();
        System.out.println("Server: " + response);

        clientSocket.close();
    }
}
 

5. 고급 주제

  • 멀티스레딩: 여러 클라이언트를 동시에 처리하기 위해 스레드를 활용합니다.
  • NIO: 비차단 I/O를 사용하여 효율적인 네트워킹을 구현합니다.
  • UDP: 비연결형 프로토콜인 UDP를 사용하여 실시간 통신을 구현합니다.
  • 보안: SSL/TLS를 사용하여 안전한 통신을 구현합니다.

결론

자바의 Socket과 ServerSocket 클래스를 이용하면 다양한 네트워크 애플리케이션을 개발할 수 있습니다. 이 글에서는 기본 개념과 예제를 통해 자바 네트워킹의 핵심을 살펴보았습니다. 더욱 심층적인 학습을 위해서는 멀티스레딩, NIO, 보안 등의 고급 주제를 추가적으로 공부하는 것이 좋습니다.

 

728x90
728x90