네트워킹이란 두 대 이상의 컴퓨터를 케이블로 연결하여 네트워크를 구성하는 것을 말한다.
이 장에서는 가장 기본적인 네트워킹 예제들과 채팅 어플리케이션을 작성할 수 있을 정도 수준의 내용을 다룬다.
클라이언트/서버
컴퓨터간의 관계를 역할로 구분하는 개념이라고 이야기한다.
서버는 서비스를 제공하는 컴퓨터(service provider) 이고, 클라이언트는 서비스를 사용하는 컴퓨터가 된다.
서버에 접속하는 클라이언트에 따라 하나의 서버가 여러 서비스를 제공하기도 하고,
하나의 서비스를 여러 대의 서버가 제공하기도 한다.
네트워크를 구성할 때 전용 서버를 두는 것을 서버 기반 모델(server-based-model)이라고 하며
별도의 전용 서버 없이 각 클라이언트가 서버 역할을 동시에 수행하는 것을 P2P 모델(peer-to-peer)이라 한다.
IP주소
IP주소는 컴퓨터를 구별하는데 사용되는 고유의 값이다. 인터넷에 연결된 컴퓨터는 모두 IP 주소를 가진다.
IP주소를 표현하는 프로토콜은 IPv4 IPv6가 있으며 IPv4에서 IP주소는 4byte의 정수로 구성된다.
IP주소는 다시 네트워크 주소와 호스트 주소로 나뉘어 있는데, 네트워크를 어떻게 구성하였는지에 따라 달라진다.
서로 다른 두 호스트의 IP주소의 네트워크 주소가 갇다는 것은 두 호스트가 같은 네트워크에 포함되어 있다는 것을 의미한다.
자바는 IP주소를 다루기 위한 클래스로 InetAddress를 제공한다.
URL(Uniform Resource Locator)
URL은 인터넷에 존재하는 여러 서버들이 제공하는 자원에 접근할 수 있는 주소를 표현하기 위한 것이다.
자바는 URL을 다루기 위한 클래스로 URL이라는 이름의 클래스를 제공한다.
URL 클래스는 해당 url에 대한 정보와 URL에 의해 참조된 리소스에 연결한 스트림을 제공한다.
String address = "<https://www.대충프로젝트url.com/users>";
String line = "";
try{
URL url = new URL(address);
BufferedReader input = new BufferedReader(new InputStreamReader(url.openStream()));
while((line = input.readLine()) != null){
System.out.println(line);
}
input.close();
} catch(Exception e) {
e.printStackTrace();
}
}
URLConnection
URLConnection은 어플리케이션과 URL간의 통신연결을 나타내는 클래스의 최상위 추상 클래스이다.
HttpURLConnection 과 JarURLConnection과 같은 구현 클래스가 있다.
URL 객체를 생성한 후 url.getConnection() 메서드 사용시 지정된 URL에 대한 소켓을 열고 URLConnection 객체를 반환해준다.
URLConnection을 이용해 연결된 URL에 의해 참조된 리소스에 대한 정보를 얻을 수 있다.
(http 헤더값, content, 만료일자, 캐쉬 사용여부 등)
소켓 프로그래밍
소켓을 이용한 통신 프로그래밍을 뜻한다. 소켓이란 프로세스간의 통신에 사용되는 양쪽 끝단(end point)를 의미한다.
자바는 java.net 패키지를 통해 소켓 프로그래밍을 지원하는데, 소켓통신에 사용하는 프로토콜에 따라 다른 종류의 소켓을 구현하여 제공한다.
TCP와 UDP
TCP/IP 프로토콜은 이기종 시스템간의 통신을 위한 표준 프로토콜이다.
TCP와 UDP 모두 TCP/IP 프로토콜에 포함되어 있으며 OSI7계층의 전송 계층에 해당하는 프로토콜이다.
TCP와 UDP는 전송방식에 차이가 있으며 방식에 따른 장단점이 존재한다.
- TCP : 연결기반 통신, 신뢰성 있는 데이터 전송(전송 순서 보장, 수신여부 확인), 느린 속도
- UDP : 비연결기반 통신, 신뢰성 없는 데이터 전송(순서 보장 x, 수신여부 확인 x), 빠른 속도
TCP 소켓 프로그래밍
자바는 TCP를 이용한 소켓 프로그래밍을 위해 Socket, ServerSocket 클래스를 제공한다.
ServerSocket 객체가 포트와 연결되어 외부의 요청을 기다리다가,
요청이 들어오면 Socket 객체를 생성해 클라이언트 프로그램의 소켓과 연결한 후 통신이 이루어지게 한다.
Socket 클래스는 프로세스간의 통신을 담당하며 InputStream, OutputStream을 가지고 있다.
UDP 소켓 프로그래밍
UDP 소켓 프로그래밍은 DatagramSocket과 DatagramPacket을 사용한다.
UDP는 연결지향적 프로토콜이 아니므로 ServerSocket이 필요없다.
DatagramSocket에서 데이터를 DatagramPacket에 담아 전송한다.
DatagramPacket은 헤더와 데이터로 구성되어 있으며, 헤더에는 DatagramPacket을 수신할 호스트이 정보가 저장되어 있다.
패킷을 전송하면 패킷에 지정된 주소의 소켓에 도착한다.
마지막장은 짧기도 하고 예시 위주의 내용이 대부분이라 가볍게 보고 넘겼다.
네트워크에 관련된 공부는 나중에 따로 더 해봐야 할 것 같다.
'JAVA' 카테고리의 다른 글
JAVA의 정석 정독하기 #15 - I/O (입출력) (1) | 2023.11.27 |
---|---|
JAVA의 정석 정독하기 #14.2 - 스트림(stream) (2) | 2023.11.25 |
JAVA의 정석 정독하기 #14.1 - 람다식(lambda expression) (0) | 2023.11.24 |
JAVA의 정석 정독하기 #13 - 쓰레드(thread) (2) | 2023.11.24 |
JAVA의 정석 정독하기 #12.3 - Annotation (5) | 2023.11.20 |