본문 바로가기
개념

[JAVA의 정석] Chapter16

by cook_code 2024. 9. 8.
반응형

교재 목차

Chapter16. 네트워킹

Chapter16. 네트워킹

 

1. 네트워킹 

네트워킹이란 두 대 이상의 컴퓨터를 케이블로 연결하여 네트워크를 구성하는 것을 말한다.

1-1. 클라이언트/서버(client/server)

서버 : 서비스를 제공하는 컴퓨터

클라이언트 : 서비스를 사용하는 컴퓨터

서비스 : 서버가 클라이언트로부터 요청받은 작업을 처리하여 그 결과를 제공하는 것을 뜻하며

서버가 제공하는 서비스의 종류에 따라 파일서버, 메일서버, 어플리케이션 서버 등이 있다.

서버가 서비스를 제공하기 위해서는 서버프로그램이 있어야 하고 클라이언트가 서비스를 제공받기 위해서는

서버프로그램과 연결할 수 있는 클라이언트 프로그램이 있어야 한다.

예를 들어 웹서버에 접속하여 정보를 얻기 위해서는 웹브라우저(클라이언트 프로그램)가 있어야 하고,

FTP 서버에 접속해서 파일을 전송받기 위해서는 알FTP와 같은 FTP클라이언트 프로그램이 필요하다.

 

일반 PC의 경우 주로 서버에 접속하는 클라이언트 역할을 수행하지만, FTP Serv-U와 같은 FTP 서버 프로그램이나

Tomcat과 같은 웹서버 프로그램을 설치하면 서버역할도 수행할 수 있다.

파일공유프로그램인 소리바다나 푸르나와 같은 프로그램은 클라이언트프로그램과 서버프로그램을 하나로 합친 것으로

이를 설치한 컴퓨터는 클라이언트인 동시에 서버가 되어 다른 컴퓨터로부터 파일을 가져오는 동시에

또 다른 컴퓨터에게 파일을 제공할 수 있다.

네트워크를 구성할 때 전용서버를 두는 것을 서버기반모델(server-based model)이라하고 별도의 전용서버없이

각 클라이언트가 서버역할을 동시에 수행하는 것을 P2P 모델(peer-to-peer)라고 한다.

 
서버기반 모델(server-based model)
P2P 모델(peer-to-peer)
안정적인 서비스의 제공이 가능하다.
서버구축 및 운용비용을 절감할 수 있다.
공유 데이터의 관리와 보안이 용이하다.
자원의 활용을 극대화 할 수 있다.
서버구축비용과 관리비용이 든다.
자원의 관리가 어렵다.
보안이 취약하다.

1-2. IP주소(IP Address)

IP주소는 컴퓨터(호스트, host)를 구별하는데 사용되는 고유한 값으로 인터넷에 연결된 모든 컴퓨터는 IP주소를 갖는다.

IP주소는 4바이트(32비트)의 정수로 구성되어 있으며, 4개의 정수가 마침표를 구분자로 a,b,c,d 와 같은 형식으로 표현된다.

여기서 a,b,c,d는 부호없는 1바이트 값, 즉 0~255 사이의 정수이다.

IP주소는 다시 네트워크 주소와 호스트 주소로 나눌 수 있는데, 32비트(4바이트)의 IP주소 중에서 네트워크주소와 호스트주소가 각각 몇 비트를 차지하는지는 네트워크를 어떻게 구성하였는지에 따라 달라진다. 그리고 서로 다른 두 호스트의 IP 주소의 네트워크 주소가 같다는 것은 두 호스트가 같은 네트워크에 포함되어 있다는 것을 의미한다.

1-3. InetAddress

자바에서 IP주소를 표현할때 사용하는 클래스.

1-4. URL(Uniform Resource Locator)

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

'프로토콜://호스트명:포트번호/경로명/파일명?쿼리스트링#참조'의 형태로 이루어져 있다.

1-5. URLConnection

URLConnection은 어플리케이션과 URL간의 통신연결을 나타내는 클래스의 최상위 클래스로 추상클래스이다.

클라이언트 프로그램은 URL을 통해 서버와 통신할 때 다음 단계를 따른다.

  • URL 객체 만들기
  • URL에서 URL Connection 객체 얻기
  • URL 연결 구성
  • 헤더 필드 읽기
  • 입력 스트림 가져오기 및 데이터 읽기
  • 출력 스트림 가져오기 및 데이터 쓰기
  • 연결 닫기
[요약] Java URLConnection과 HttpURLConnection 사용 방법

URL(대부분 HTTP 프로토콜 사용)을 통해 서버와 통신하는 Java 프로그램을 개발 하기 위 해 URLConnection 및 HttpURLConnection 클래스를 사용한다. 예를들어 파일, 웹 페이지를 업로드 및 다운로드, HTTP 요청 및 응답 전송 및 검색 등을 위한 코드를 작성할 수 있다. URLConnection과 HttpURLConnection 클래스 URLConnection은 Java 애플리케이션과 URL 간의 연결 관련한 모든 클래스의 수퍼클래스이다. URLConnection의 클래스는 일반적인 URL에 대한 A...

blueyikim.tistory.com

 

2. 소켓 프로그래밍

소켓 프로그래밍은 소켓을 이용한 통신 프로그래밍을 뜻하는데,

소켓이란 프로세스간의 통신에 사용되는 양쪽 끝단을 의미한다.

자바에서는 java.net패키지를 통해 소켓 프로그래밍을 지원한다.

2-1. TCP와 UDP

TCP/IP 프로토콜은 이기종 시스템간의 통신을 위한 표준 프로토콜로 프로토콜의 집합이다.

TCP와 UDP 모두 TCP/IP 프로토콜(TCP/IP protocol suites)에 포함되어 있으며, OSI 7계층의 전송계층에 해당하는 프로토콜이다.

TCP: 연결 지향적, 데이터 순서 보장, 신뢰성 높음, 속도 느림
UDP: 비연결 지향적, 데이터 순서 보장 안 함, 신뢰성 낮음, 속도 빠름

TCP/UDP 차이

TCP를 이용한 통신은 전화에, UDP를 이용한 통신은 소포에 비유된다.


TCP
UDP
연결방식
연결기반
- 연결 후 통신
- 1:1 통신방식
비연결기반
- 연결 없이 통신
- 1:1, 1:n, n:n 통신방식
특징
데이터의 경계를 구분하지 않는다.(byte-stream)
신뢰성 있는 데이터 전송
- 데이터의 전송 순서가 보장됨
- 데이터의 수신여부를 확인
- 패킷을 관리할 필요가 없음
UDP보다 전송속도가 느림
데이터의 경계를 구분함(datagram)
신뢰성 없는 데이터 전송
- 데이터의 전송순서가 바뀔 수 있음
- 데이터의 수신여부를 확인안함
- 데이터가 손실되어도 알 수 없음
- 패킷을 관리해주어야함
TCP보다 전송속도가 빠름
관련 클래스
Socket
ServerSocket
DatagramSocket
DatagramPacket
MulticastSocket

TCP는 데이터를 전송하기 전에 먼저 상태편과 연결을 한 후에 데이터를 전송하며 잘 전송되었는지 확인하고

전송에 실패했다면 해당 데이터를 재전송하기 때문에 신뢰있는 데이터의 전송이 요구되는 통신에 적합하다.

UDP는 상대편과 연결하지 않고 데이터를 전송하며, 데이터를 전송하지만

데이터가 바르게 수신되었는지 확인하지 않기 때문에 데이터가 전송되었는지 확인할 길이 없다.

또한 데이터를 보낸 순서대로 수신한다는 보장이 없다.

2-2. TCP소켓 프로그래밍

TCP소켓 프로그래밍 = 클라이언트와 서버 간의 일대일 통신

TCP소켓 통신과정

⑴ 서버 프로그램에서는 서버소켓을 사용해서 서버 컴퓨터의 특정 포트에서 클라이언트의 연결요청을 처리할 준비를 한다.

⑵ 클라이언트 프로그램은 접속할 서버의 IP주소와 포트 정보를 가지고 소켓을 생성해서 서버에 연결을 요청한다.

⑶ 서버소켓은 클라이언트의 연결요청을 받으면 서버에 새로운 소켓을 생성해서 클라이언트의 소켓과 연결되도록 한다.

⑷ 이제 클라이언트의 소켓과 새로 생성된 서버의 소켓은 서버소켓과 관계없이 일대일 통신을 한다.

Socket : 프로세스 간의 통신을 담당하며, InputStream과 OutputStream을 가지고 있다. 이 두 스트림을 통해 프로세스간의 통신(입출력)이 이루어진다.

ServerSocket : 포트와 연결되어 외부의 연결요청을 기다리다 연결요청이 들어오면, Socket 을 생성해서 소켓과 소켓간의 통신이 이루어지도록 한다. 한 포트에 하나의 ServerSocket만 연결할 수 있다. (프로토콜이 다르면 같은 포트를 공유할 수 있다.)

 

반응형

'개념' 카테고리의 다른 글

[JAVA의 정석] Chapter15  (0) 2024.09.08
[JAVA의 정석] Chapter14  (2) 2024.09.08
[JAVA의 정석] Chapter13  (1) 2024.09.08
[JAVA의 정석] Chapter12  (1) 2024.09.08
[JAVA의 정석] Chapter11  (1) 2024.09.08