네트워킹이란?
네트워킹이란 두 대 이상의 컴퓨터를 케이블로 연결하여 네트워크를 구성하는 것을 말한다.
자바에서 제공하는 java.net 패키지를 사용하면 네트워크 어플레이케이션은 단 몇 줄의 자바 코드 만으로도 작성이 가능하다.
클라이언트 / 서버
클라이언트/서버는 컴퓨간의 관계를 역할로 구분하는 개념이다.
서버는 서비스를 제공하는 컴퓨터이고 클라이언트는 서비스를 사용하는 컴퓨터가 된다.
서버 기반 모델
네트워크를 구성할 때 전용 서버를 두는 것을 서버 기반 모델이라고 한다.
서버 기반 모델의 특징으로는 다음과 같다
- 안정적인 서비스의 제공이 가능하다.
- 공유 데이터의 관리와 보안이 용이하다.
- 서버구축비용과 관리비용이 든다.
P2P 모델
별도의 전용서버없이 각 클라이언트가 서버역할을 동시에 수행하는 것을 P2P모델이라고 한다.
P2P 모델의 특징은 다음과 같다.
- 서버구축 및 운용비용을 절잠할 수 있다.
- 자원의 활용을 극대화 할 수 있다.
- 자원의 관리가 어렵다.
- 보안이 취약하다.
IP주소
IP주소는 컴퓨터를 구별하는데 사용되는 고유한 값으로 인터넷에 연결된 모든 컴퓨터는 IP주소를 갖는다. IP주소는 4byte의 정수로 구성되어 있으며 4개의 정수가 마침표를 구분자로 'a, b, c, d'와 같은 형식으로 표현된다. 여기서 a, b, c, d는 부호 없는 1byte값, 즉 0~255사이의 정수이다.
IP주소는 다시 네트워크 주소와 호스트 주소로 나눌 수 있는데 32byte의 IP주소 중에서 네트워크 주소와 호스트 주소가 각각 몇 byte를 차지하는 지는 네트워크를 어떻게 구성하였는지에 따라 달라진다.
서로 다른 두 호스트의 IP주소의 네트워크 주소가 같다는 것은 두 호스트가 같은 네트워크에 포함되어 있다는 것을 의미한다. IP주소와 서브넷 마스크를 '&' 연산하면 네트워크 주소를 얻어낼 수 있어서 두 호스트가 같은 네트워크 상에 존재하는지를 쉽게 확인할 수 있다.
InetAddress
자바에는 IP주소를 다루기 위한 클래스로 InetAddress를 제공한다.
InetAddress에는 다음과 같은 메서드가 정의되어 있다.
메서드 | 설명 |
byte[] getAddress() | IP주소를 byte배열로 반환 |
static InetAddress[] getAllByName(String host) | 도메인명에 지정된 모든 호스트의 IP주소를 배열에 담아 반환 |
static InetAddress getByAddress(byte[] addr) | byte배열을 통해 IP주소를 얻는다 |
static InetAddress getByName(String host) | 도메인명을 통해 IP주소를 얻는다 |
String getCanonicalHostName() | FQND를 반환한다 |
String getHostName() | 호스트의 이름을 반환한다 |
String getHostAddress() | 호스트의 IP주소를 반환한다 |
static InetAddress getLocalHost() | 지역호스트의 IP주소를 반환한다 |
boolean isMulticastAddress() | IP주소가 멀티캐스트 주소인지 알려준다 |
boolean isLoopbackAddress() | IP주소가 loopback주소(127.0.0.1)인지 알려준다 |
활용 예제
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
public class NetworkEx1 {
public static void main(String[] args) {
InetAddress ip = null;
InetAddress[] ipArr = null;
try{
ip = InetAddress.getByName("www.naver.com");
System.out.println("getHostName() : " + ip.getHostName()); // getHostName() : www.naver.com
System.out.println("getHostAddress() : " + ip.getHostAddress()); // getHostAddress() : 223.130.195.95
System.out.println("toString() : " + ip.toString()); // toString() : www.naver.com/223.130.195.95
byte[] ipAddr = ip.getAddress();
System.out.println("getAddress() : " + Arrays.toString(ipAddr)); // getAddress() : [-33, -126, -61, 95]
String result = "";
for (int i = 0; i < ipAddr.length; i++) {
result += (ipAddr[i] < 0) ? ipAddr[i] + 256 : ipAddr[i];
result += ".";
}
System.out.println("getAddress() + 256 : " + result); // getAddress() + 256 : 223.130.195.95.
System.out.println();
ip = InetAddress.getLocalHost();
System.out.println("getHostName() : " + ip.getHostName()); // getHostName() : DESKTOP-71R57IK
System.out.println("getHostAddress() : " + ip.getHostAddress()); // getHostAddress() :
System.out.println();
ipArr = InetAddress.getAllByName("www.naver.com");
for (int i = 0; i < ipArr.length; i++) {
System.out.println("ipArr[" +i+"] : " + ipArr[i]);
}
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
'Programming Language > Java' 카테고리의 다른 글
[Java] 자바에서 GitHub REST API 사용하기 (0) | 2023.08.21 |
---|---|
[Java] Github API 사용하기 (0) | 2023.08.20 |
[JAVA] 소켓 프로그래밍, TCP 소켓 프로그래밍 (0) | 2023.07.19 |
[JAVA] 패키지와 접근제어자 (0) | 2023.04.13 |
[JAVA] 인터페이스(interface) (0) | 2023.04.11 |