본문 바로가기
Study/Java Study

자바스터디 12주차 (1)

by hongchii 2021. 8. 1.
728x90
반응형

1. 네트워킹(Networking)

두 대 이상의 컴퓨터를 연결하여 네트워크를 구성하는 것을 말한다. 손쉽게 데이터를 주고받거나 자원을 함께 공유하고자 하는 노력에서 시작되었다. 자바에서 제공하는 java.net 패키지를 이용하여 온라인게임이나 메신저와 같은 인터넷을 이용한 다양한 네트워크 애플리케이션을 만들 수 있다.

 

1.1클라이언트/서버 (Client/Server)

- 서버(Server) : 서비스(Service)를 제공하는 컴퓨터를 이야기 한다. (provider)
- 클라이언트(Client) : 서비스를 사용하는 컴퓨터가 된다. (user)

서버가 서비스를 제공하려면 서버 프로그램이 있어야 하고 클라이언트가 서버에 연결하려면 클라이언트 프로그램이 있어야 한다.

네트워크를 구성할 때 전용 서버를 두는 것을 서버기반 모델(server-based model)이라 하며 각 클라이언트가 서버역할도 동시에 수행하는 것을 P2P 모델(peer-to-peer model)이라 한다.

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

1.2 IP 주소(IP Address)

컴퓨터를 구별하는데 사용되는 고유한 값으로 인터넷에 연결된 모든 컴퓨터는 IP 주소를 갖는다. 4 Byte(32 bit)로 구성되어 있고 (0.0.0.0 ~ 255.255.255.255) 범위의 숫자이다.

 

1.3 InetAddress

자바에서는 IP주소를 다루기 위한 클래스로 InetAddress를 제공하며 다음과 같은 메서드가 정의되어 있다.

메서드 설명
byte[] getAddress() IP주소를 byte배열로 반환한다.
static InetAddress[]
getAllByName(String host)
도메인명(host)에 지정된 모든 호스트의 IP주소를 배열에 담아 반환한다.
static InetAddress getByAddress(byte[] addr) byte배열을 통해 IP주소를 얻는다.
static InetAddress
getByName(String host)
도메인명(host)을 통해 IP주소를 얻는다.
String getCanonicalHostName() FQDN(fully qualified domain name)을 반환한다.
String getHostAddress() 호스트의 IP주소를 반환한다.
String getHostName() 호스트의 이름을 반환한다.
static InetAddress getLocalHost() 지역호스트의 IP주소를 반환한다.
boolean isMulticaastAddress() IP주소가 멀티캐스트 주소인지 알려준다.
boolean isLoopbackAddress() IP주소가 loopback 주소(127.0.0.1)인지 알려준다.

 

1.4 URL(Uniform Resource Location)

인터넷에 존재하는 여러 서버들이 제공하는 자원에 접근할 수 있는 주소를 표현하기 위한 것으로 아래의 형태를 따른다.

프로토콜://호스트명:포트번호/경로명/파일명?쿼리스트링#참조

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

 

2. 소켓 프로그래밍

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

 

2.1 TCP와 UDP

TCP를 이용한 통신은 전화에, UDP를 이용한 통신은 소보에 비유된다. TCP는 데이터를 전송하기 전에 먼저 상대편과 연결을 한 후에 데이터를 전송하며 잘 전송되었는지 확인하고 전송에 실패했다면 해당 데이터를 재전송하기 때문에 신뢰있는 데이터의 전송이 요구되는 통신에 적합하다. (예시 : 사진, 문서 등의 파일 전송)

UDP는 상대편과 연결하지 않고 데이터를 전송하며, 데이터를 전송하지만 바르게 수신되었는지 확인하지 않기 때문에 데이터가 전송되었는지 확인할 길이 없다. 또한 보낸 메시지를 순서대로 수신한다는 보장이 없다. 대신 TCP보다 빠른 전송이 가능하다. 게임이나 동영상의 스트리밍 데이터를 전송하는 경우와 같이 데이터가 중간에 손실되어 좀 끊기더라도 빠른 전송이 필요할 때 적합하다. 뒤 늦게 도착한 데이터는 무시하면 된다.

 

2.2TCP소켓 프로그래밍

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

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

 

2.3. UDP소켓 프로그래밍

TCP에서는 Socket과 ServerSocket을 사용하지만 UDP소켓 프로그래밍에서는 DatagramSocket과 DatagramPacket을 사용한다. 앞서 살펴본 바와 같이 UDP는 연결지향적인 프로토콜이 아니기 때문에 ServerSocket이 필요하지 않다. UDP통신에서 사용하는 소켓은 DatagramSocket이며 데이터를 DatagramPacket은 헤더와 데이터로 구성되어 있으며, 헤더에는 DatagramPacket을 수신할 호스트의 정보가 저장되어 있다. 소포(Packet)에 수신할 상대편의 주소를 적어서 보내는 것과 같다고 이해하면 된다. 그래서 DatagramPacket을 전송하면 DatagramPacket에 지정된 주소의 DatagramSocket에 도착한다.

 

 

자바의 정석을 토대로 공부 후 정리한 내용입니다.

728x90
반응형

'Study > Java Study' 카테고리의 다른 글

자바스터디 후기  (0) 2021.08.12
자바스터디 11주차 (1) - 입출력IO  (0) 2021.07.25
자바스터디 10주차 (1)  (0) 2021.07.12
자바스터디 9주차 (1)  (0) 2021.07.05
자바스터디 8주차 (2)  (0) 2021.07.04

댓글