네트워킹이란? 두 대 이상의 컴퓨터를 케이블로 연결하여 네트워크를 구성하는 것을 말한다. 네트워킹 개념은 컴퓨터들을 서로 연결하여 데이터를 주고받거나 자원을 공우하고자 하는 노력에서 시작됐다.
초기에는 네트워크라하면 몇 대의 컴퓨터로 소규모로 구성됐으나, 지금은 전 세계의 컴퓨터가 인터넷이라는 거대한 네트워크를 구성하고 있으며 이에 맞춰 자바에서도 네트워크 어플리케이션의 데이터 통신 부분을 쉽게 작성할 수 있다.
'클라이언트/서버'는 컴퓨터간의 관계를 역할로 구분한 개념이다. 서버는 서비를 제공하는 컴퓨터고, 서비스를 사용하는 컴퓨터는 클라이언트라고 한다.
일반적으로 서버는 고사양 하드웨어를 통해 다수의 클라이언트에게 서비스를 제공한다.
클라이언트는 하드웨어 사양과 상관없이 서버를 통해 서비스를 제공받는다.
서비스는 서버가 클라이언트로받은 요청 작업을 처리하고 결과를 제공하며, 서비스의 종류에 따라 파일 서버, 메일 서버, 어플리케이션 서버 등이 있다.
서버가 서비스를 제공하기 위해 서버 프로그램이 필요하고, 클라이언트가 서버의 서비스를 제공받기 위해서는 서버와 연결할 수 있는 클라이언트 프로그램이 필요하다.
우리가 자주 사용하는 웹을 예시로 들면 서버는 스프링 프레임웤등의 서버 프로그램이 필요한 것이고, 클라이언트는 웹브라우저가 필요하다.
파일을 전송받기 위해서는 FTP서버와 알FTP와 같은 FTP클라이언트 프로그램이 필요하다.
일반 PC의 경우 주로 서버에 접속하는 클라이언트 역할을 수행하나, FTP Serv-U와 같은 FTP서버 프로그램이나 Tomcat과 같은 웹서버 프로그램을 설치하면 일반PC로도 서버의 역할을 수행할 수 있다.
Torrent와 같은 파일 공유 프로그램은 클라이언트와 서버를 하나로 합쳐 이를 설치한 컴퓨터는 클라이언트인 동시에 서버가 되어 다른 컴퓨터로부터 파일을 가져오며 제공한다.(따라서 다운로드 목적으로 토렌트 사용하다가 불법 공유로 처벌받는 경우도 다분하다.)
네트워크를 구성할 때 전용서버를 두는 것을 서버기반모델(server-based model)이라 하고 별도의 전용서버없이 각 클라이언트가 서버역할을 동시에 수행하는 것을 P2P모델(peer-to-peer)라 한다.
IP주소는 컴퓨터를 구별하는데 사용되는 고유한 값이며 인터넷에 연결된 모든 컴퓨터는 IP주소를 갖는다. IP는 4byte의 정수로 구성되고 4개의 정수가 마침표를 구분자로 'a.b.c.d'와 같은 형식으로 표현된다. 여기서 a, b, c, d는 부호없는 1byte(0~255)사이의 정수이다.
IP주소는 다시 네트워크주소와 호스트주소로 나눌 수 있는데, 32bit(4byte)의 IP주소 중에서 네트워크주소와 호스트주소가 각각 몇 bit를 차지하는 지는 네트워크를 어떻게 구성했는지에 따라 달라진다. 서로 다른 두 호스트의 IP주소의 네트워크주소가 같다는 것은 두 호스트가 같은 네트워크에 포함돼 있다는 것을 의미하게 된다.
cmd에서 ipconfig를 입력하면 나의 ip를 확인할 수 있다.
예시로 IP주소가 192.168.10.100, 서브넷 마스크가 255.255.255.0인 경우
2진수로 표현하면 아래와 같다
IP주소
서브넷 마스크
이렇게 뽑아낸 IP주소와 서브넷 마스크를 비트연산자'&'로 연산하면 IP주소에서 네트워크 주소만을 뽑아낼 수 있다.
이 결과로 부터 앞에 24bit(192.168.10)이 네트워크 주소이며, 호스트 주소는 마지막8bit(100)이라는 것을 알 수 있다.
IP주소에서 네트워크주소가 차지하는 자리수가 많을수록 호스트 주소의 범위는 줄어들기에 네트워크의 규모가 작아진다. 위 경우 호스트 주소의 자리수가 8자리이기 때문에 256(2^8)의 호스트만 이 네트워크에 포함될 수 있게 된다.
호스트 주소가 0인 것은 네트워크 자신을 나타내고, 255는 브로드캐스트 주소로 사용되기 때문에 실제로는 네트워크에 포함 가능한 소트스 개수는 254개이다.
이처럼 IP주소와 서브넷 마스크를 연산하여 서로 다른 두 호스트의 IP주소를 서브넷 마스크로 연산을 수행하여 비교하면, 이 두 호스트가 같은 네트워크 상에 존재하는지의 여부를 쉽게 확인할 수 있게 된다.
자바에서는 IP주소를 다루기 위한 클래스로 InetAddress를 제공한다.
URL은 인터넷에 존재하는 여러 서버들이 제공하는 자원에 접근할 수 있는 주소를 표현하기 위한 것이다.
'프로토콜://호스트명:포트번호/경로명/파일명?쿼리스트링#참조' 의 형태로 이루어져 있다.
http://www.codechobo.com:80/sample/hello.html?referer=codechobo#index1
프로토콜
자원에 접근하기 위해 서버와 통신하는데 사용되는 통신규약(http)
호스트명
자원을 제공하는 서버의 이름(www.codechobo.com)
포트번호
통신에 사용되는 서버의 포트번호(80)
경로명
접근하려는 자원이 저장된 서버상의 위치(/sample/)
파일명
접근하려는 자원의 이름(hello.html)
쿼리(query)
URL에서 '?'이후의 부분(referer=codechobo)
참조(anchor)
URL에서 '#'이후의 부분(index1)
※ 프로토콜마다 기본 포트가 있으며 생략시 기본포트가 적용된다 http는 80을 사용한다.
자바에서는 URL을 다루기 위한 클래스인 URL클래스를 제공한다.
URL 인스턴스를 생성자를 통해 만들어 여러가지 메서드를 사용할 수 있다.
URLConnection은 어플리케이션과 URL간의 통신연결을 나타내는 클래스의 최상위 클래스이자 추상 클래스이다. URLConnection을 구현한 클래스는 HttpURLConnection클래스와 JarURLConnection이 있고 URL의 프로토콜이 http프로토콜이라면 openConnection()은 httpURLConnection을 반환한다. URLConnection을 사용해서 연결하고자 하는 자원에 접근하고 읽고 쓰기가 가능하다.
※ openConnection()은 URL클래스의 메서드이다.
※ HttpURLConnection은 sun.net.www.protocol.http패키지에 속해있다.
더 많은 URLConnection의 메서드는 API를 참조하자.. 너무많다.