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
'Java를 배워보자 > 9. 심화 학습' 카테고리의 다른 글
자바 Swing (GUI 프로그래밍) (0) | 2024.09.27 |
---|---|
자바 JDBC (Java Database Connectivity) (0) | 2024.09.27 |
자바 컬렉션 프레임워크 심화 (0) | 2024.09.27 |