[이것이 자바다] 18. 네트워크 입출력
안녕하세요. 이번에는 자바의 네트워크 입출력에 대해 정리한 내용입니다. 네트워크를 쓸때 꼭 필요한 기본적인 지식입니다. 여기나오는 내용을 외우지 않고 자바가 네트워크 입출력을 처리하는 방식을 알아두기만 해도 큰 도움이 될거 같습니다.
1. 네트워크 기초
- IP 주소: 네트워크 상에서 컴퓨터(Host)를 식별하는 주소입니다. (
192.168.0.1등) - 포트(Port): 한 컴퓨터 내에서 실행 중인 프로그램을 구분하는 번호입니다. (
8080,3306등) - 프로토콜(Protocol): 통신 규약입니다.
- TCP: 연결 지향, 신뢰성 보장 (느림) -> 전화
- UDP: 비연결 지향, 신뢰성 낮음 (빠름) -> 편지/방송
2. 자바 네트워킹 클래스
InetAddress
- IP 주소를 다루는 클래스입니다.
getLocalHost(): 내 PC IP 확인getByName("도메인"): 도메인 이름으로 IP 확인
TCP 통신 (Socket)
TCP는 연결을 먼저 맺고 데이터를 주고받습니다.
- 서버 (
ServerSocket)- 포트를 열고 클라이언트의 연결을 기다립니다 (
accept()).
- 포트를 열고 클라이언트의 연결을 기다립니다 (
- 클라이언트 (
Socket)- 서버의 IP와 포트로 연결을 시도합니다.
- 데이터 입출력
- 연결이 되면
Socket객체의InputStream,OutputStream을 통해 데이터를 주고받습니다.
- 연결이 되면
UDP 통신 (Datagram)
UDP는 연결 없이 패킷(Packet) 단위로 데이터를 던집니다.
DatagramSocket: 우체통 역할DatagramPacket: 편지(데이터+수신자주소) 역할
3. TCP 채팅 서버 예제 흐름
간단한 에코 서버(Echo Server) 구조입니다.
서버 (Server)
ServerSocket serverSocket = new ServerSocket(5001); // 1. 포트 열기
while(true) {
// 2. 연결 수락 (클라이언트 올 때까지 대기)
Socket socket = serverSocket.accept();
// 3. 스트림 얻기
InputStream is = socket.getInputStream();
DataInputStream dis = new DataInputStream(is);
// 4. 데이터 받기
String message = dis.readUTF();
System.out.println("받은 메시지: " + message);
socket.close();
}
클라이언트 (Client)
// 1. 서버 접속
Socket socket = new Socket("localhost", 5001);
// 2. 스트림 얻기
OutputStream os = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
// 3. 데이터 보내기
dos.writeUTF("Hello Server!");
socket.close();
4. Java NIO (New I/O)
- 기존 IO(블로킹) 방식의 한계를 극복하기 위해 나온 고성능 네트워킹 방식입니다.
- 채널(Channel), 버퍼(Buffer), 셀렉터(Selector)를 사용합니다.
- 넌블로킹(Non-blocking) 방식을 지원하여, 적은 수의 스레드로 수많은 클라이언트 연결을 효율적으로 처리할 수 있습니다.
핵심 포인트
- 네트워크 통신의 핵심은 IP(주소)와 Port(문)를 찾아가서 연결하는 것입니다.
- TCP는
Socket을 사용해 연결 후 스트림으로 통신합니다. (안정성 중요) - UDP는
Datagram을 사용해 소포 던지듯이 통신합니다. (속도/실시간성 중요)
ch18을 끝으로 '이것이 자바다' 책은 마무리 되었습니다. 자바의 기초부터 여러 클래스들을 사용하는것을 지나 백엔드 맛보기까지 긴 과정을 따라가며 정리해 보았습니다. 저도 확실하게 이해못하거나 헷갈리는 부분도 있어서 정리한 내용을 계속 다시보며 배워나갈것 같습니다.
끝까지 읽어 주셔서 감사합니다.
'Language > JAVA' 카테고리의 다른 글
| [이것이 자바다].ch17.데이터 입출력 (0) | 2026.01.02 |
|---|---|
| [이것이 자바다].ch16.스트림 요소 처리 (0) | 2026.01.01 |
| [이것이 자바다].ch15.람다식 (0) | 2026.01.01 |
| [이것이 자바다].ch14.컬렉션 (0) | 2025.12.30 |
| [이것이 자바다].ch13.스레드 (0) | 2025.12.30 |