[스터디]Java의 정석 31일차

Kristopher·2022년 2월 4일
0

Java 스터디

목록 보기
31/31

(Ch16) 1. 네트워킹 ~

2.3 UDP소켓 프로그래밍

네트워킹이란?

네트워킹이란 두 대 이상의 컴퓨터를 케이블로 연결하여 네트워크를 구성하는 것을 말한다. 컴퓨터들끼리 데이터를 쉽게 주고받거나 주변기기를 함께 공유하고자 하는 목적으로 시작되었다. 자바에서 네공하는 java.net패키지를 사용하면 이러한 네트워크 어플리케이션의 데이터 통신 부분을 쉽게 작성할 수 있으며, 간단한 네트워크 어플리케이션은 단 몇 줄의 자바코드 만으로도 작성이 가능하다.

클라이언트/서버의 구분

서버는 서비스를 제공하는 컴퓨터, 클라이언트는 서비스를 이용하는 컴퓨터로 이해할 수 있다. 일반적으로 고사양의 하드웨어를 갖춘 컴퓨터가 서버지만, 하드웨어의 사양으로만 구분할 수는 없기에 서비스를 제공하는 소프트웨어가 실행되는 컴퓨터를 서버라고 한다. 서버에는 서비스의 종류에 따라 파일서버, 메일서버, 어플리케이션 서버 등이 있다. 네트워크 구성시 전용서버를 두는 것을 서버기반모델이라하고, 별도의 전용서버없이 각 클라이언트가 서버역할을 동시에 수행하는 것을 P2P모델이라 한다.

IP주소

IP주소는 컴퓨터를 구별하는데 사용되는 고유한 값으로 인터넷에 연결된 모든 컴퓨터는 IP주소를 갖는다. IP주소는 4byte의 정수로 구성되어 있으며, 4개의 정수가 마침표를 구분자로 표현된다. IP주소는 네트워크주소와 호스트주소로 나눌 수 있는데 각각이 몇 bit를 차지하는지는 네트워크 구성방식에 따라 달라진다.

자바에서 IP주소를 다루기 위한 클래스로 InetADdress를 제공한다.

URL

URL은 인터넷에 존재하는 여러 서버들이 제공하는 자원에 접근할 수 있는 주소를 표현하기 위한 것으로 다음과 같은 형식을 따른다

'프로토콜://호스트명:포트번호/경로명/파일명?쿼리스트링#참조'
프로토콜 : 자원에 접근하기 위해 서버와 통신하는데 사용되는 통신 규약(http)
호스트명 : 자원을 제공하는 서버의 이름
포트번호 : 통신에 사용되는 서버의 포트번호
경로명 : 접근하려는 자원이 저장된 서버상의 위치
파일명 : 접근하려는 자원의 이름
쿼리스트링 : URL에서 '?'이후의 부분
참조 : URL에서 '#'이후의 부분

어플리케이션과 URL간의 통신연결을 위해 URLConnection이라는 최상위 추상 클래스를 제공한다. URLConnection을 상속받아 구현한 클래스로 HttpURLConnection과 JarURLConnection이 있다.

소켓 프로그래밍

소켓 프로그래밍은 소켓을 이용한 통신 프로그래밍을 의미하는데, 소켓이란 프로세스간의 통신에 사용되는 양쪽 끝단을 의미한다. 자바에서는 java.net패키지를 통해 소켓 프로그래밍을 지원하는데, 소켓통신에 사용되는 프로토콜에 따라 다른 종류의 소켓을 구현하여 제공한다.

TCP와 UDP

TCP/IP 프로토콜은 이기종 시스템간의 통신을 위한 표준 프로토콜로 프로토콜의 집합이다. TCP와 UDP 모두 TCP/IP 프로토콜에 포함되어 있으며, OSI 7계층의 전송계층에 해당하는 프로토콜이다.

항목TCPUDP
연결방식연결 후 통신하는 연결기반(1:1)연결없이 통신하는 비연결기반(1:1,1:n,n:n)
특징데이터의 경계를 구분하지 않음, 신뢰성 있는 데이터 전송데이터 경계 구분, 신뢰성 없는 데이터 전송
클래스Socket, ServerSocketDatagramSocket, DatagramPacket,MulticastSocket

TCP 소켓 프로그래밍

서버 프로그램과 클라이언트 프로그램간의 통신과정을 단계별로 보면 다음과 같다.

  1. 서버 프로그램에서는 서버소켓을 사용하여 서버 컴퓨터의특정 포트에서 클라이언트의 연결요청을 처리할 준비를 한다.
  2. 클라이언트 프로그램은 접속할 서버의 IP주소와 포트 정보를 가지고 소켓을 생성해서 서버에 연결을 요청한다.
  3. 서버소켓은 클라이언트의 연결요청을 받으면 서버에 새로운 소켓을 생성해서 클라이언트의 소켓과 연결되도록 한다.
  4. 클라이언트의 소켓과 새로 생성된 서버의 소켓은 서버소켓과 관계 없이 일대일 통신을 한다.

소켓은 입력/출력스트림을 가지고 있으며, 이 스트림들은 연결된 상대편 소켓의 스트림과 교차연결된다. 자바에서 TCP를 이용한 소켓프로그래밍을 위해 Socket과 ServerSocket클래스를 제공한다.

UDP소켓 프로그래밍

UDP소켓 프로그래밍은 DatagramSocket과 DatagramPacket을 사용한다. 연결지향적 프로토콜이 아니기에 ServerSocket이 불필요하다. DatgramPacket은 헤더와 데이터로 구성되어있으며, 헤더에는 DatgramPacket을 수신할 호스트의 정보가 저장되어 있다.

Reference

Java의 정석
남궁성의 정석코딩

profile
개발자 지망생입니다.

0개의 댓글