Tiny Bunny
본문 바로가기

Language/Java

[Java] 자바 네트워크 기초

728x90

 네트워크(Network) 

 

네트워크란 다른 장치로 데이터를 이동시킬 수 있는 컴퓨터들과 주변 장치들의 집합으로, 여러 대의 컴퓨터들을 통신 회선으로 연결한 것을 말한다. 조금 더 쉽게 말하자면, 서로 다른 디바이스가 연결되어 데이터를 주고 받는 것을 네트워크라고 정의할 수 있다.

 

예를들어 서로 다른 디바이스 A, B가 있을 때 A와 B가 연결된 그 자체를 네트워크라고 부른다고 생각하면 된다. (= 장치들의 연결 -> 네트워크)

 

이때 연결된 모든 장치를 노드라고 하는데, 다른 노드에게 하나 이상의 서비스를 해주는 노드를 호스트라 부른다. 즉 각각의 디바이스를 노드(node) 또는 호스트(host)라고 부른다고 보면 된다.

* 주로 호스트(host)라고 부름

 

  • LAN (Local Area Network) : 가정, 회사, 건물 등 특정 영역에 존재하는 컴퓨터를 통신 회선으로 연결한 것
  • WAN (Wide Area Network) : 지역 네트워크를 통신 회선으로 연결한 것. 흔히 말하는 인터넷(Internet)을 말함

하나의 컴퓨터에서 다른 컴퓨터로 데이터를 이동시킬 때 복잡한 계층을 통해 데이터를 전송하는데, 대표적인 모델이 OSI 계층 모델이다. OSI 계층은 7계층으로 이루어져 있으며, 데이터 통신을 이해하는데 OSI 계층 모델은 상당한 역할을 하지만, 자바의 경우 인터넷 기반의 표준 모델로 사용하는 TCP/IP 계층 모델을 사용하고 있다. 즉, 자바(JAVA)에서 얘기하는 네트워크는 TCP/IP 모델을 얘기하는 것이다.

 

기존 7계층은 복잡한 관계로 자바에서 사용하는 TCP/IP 계층 모델은 층을 합쳐 단순화한 4계층을 사용하고 있다.

 

 

 

 

 서버(Server)와 클라이언트(Client) 

 

  • 서버(Server): 서비스를 제공하는 프로그램
  • 클라이언트(Client): 서비스를 요청하는 프로그램

유/무선으로 컴퓨터가 연결되어 있다면(네트워크) 실제로 데이터를 주고받는 행위는 프로그램들이 한다. 인터넷에서 두 프로그램이 통신하기 위해서는 ① 클라이언트가 서비스를 요청한 후에 ② 서버가 처리 결과를 응답으로 제공해주는 구조이다. 

 

 

 

 

 IP(Internet Protocol) 주소 

 

IP가 무엇이고 어떨 때 사용하는 건지는 몰라도 IP 주소라고 들어는 봤을 것이다. IP의 약자를 생각해보면 의미가 좀 더 와닿을 것이다. IP의 약자는 인터넷 프로토콜(Internet Protocol)의 약자로 internet은 알아도 protocol은 "이게 뭐지?" 싶을 텐데, 네트워크를 공부할 때 중요한 개념 중 하나이므로 잘 알아두도록 하자.

 

protocol 뜻은 "규약"으로 통신 규약, 전송 규약라고 하는데 "이게 대체 무슨 말이야?" 싶을 것이다. 중간다리 역할을 한다고 이해하면 되는데 비유를 하자면 우리가 외국인과 대화를 할 때 한국어, 영어, 중국어, 프랑스어 등등 서로 사용하는 언어가 다를 것이다. 이때 소통하기 위해서 일반적으로 영어를 사용할 텐데 여기서 영어가 protocol이라고 생각하면 된다.

 

집 주소를 보고 우편이나 택배가 정확하게 목적지에 배달되는 것처럼 컴퓨터에도 고유한 주소가 있는데 이게 바로 IP이며, IP는 통신을 할 수 있는 주소로 고유 번호를 갖고 있다.

 

IP 주소는 네트워크 어댑터(LAN 카드)마다 할당되는데, 만약 컴퓨터에 두 개의 네트워크 어댑터가 장착되어 있다면 두 개의 IP 주소를 할당받을 수 있다. 즉, IP는 목적지로 데이터를 전송하기 위해 어떤 경로를 거쳐갈지 결정하는 프로토콜이다. 이는 연결할 상대방 컴퓨터의 IP 주소를 모르면 프로그램들이 서로 통신할 수 없다는 뜻이다. 때문에 모든 호스트는 인터넷 주소를 필요로 한다.

 

네트워크 어댑터에 어떤 IP 주소가 부여되어 있는지 확인하려면 명령 프롬프트(cmd)에서 ipconfig 명령어를 입력하면 된다. 명령어를 입력하면 xxx.xxx.xxx.xxx와 같은 형식으로 출력되는데 여기서 xxx는 0~255 사이의 정수이다. IPv4는 10진수(0~255 사이의 정수)까지 표현이 가능하며 IPv6는 16진수까지 표현이 가능해 더 많은 IP를 표현할 수 있다.

 

그러나 우리가 모든 IP를 외울 수 없으니... 도메인이라는 걸 사용한다. 여기서 DNS(Domain Name System)라는 새로운 용어가 나오는데,  DNS는 도메인 이름으로 IP를 등록하는 저장소이다. DNS를 이용해서 컴퓨터의 IP 주소를 검색한다고 보면 된다. 네이버와 같이 대중에게 서비스를 제공하는 대부분의 컴퓨터는 아래와 같이 도메인 이름으로 IP를 DNS에 미리 등록해 놓는다.

 

네이버의 IP 주소인 222.122.195.5를 외우고 다닐 수는 없으니 네이버라는 도메인을 하나 만든 셈이다.

 

여기서 도메인 서버(DNS 서버)는 사용자가 입력한 도메인을 IP로 바꿔주고 바꾼 IP를 클라이언트에게 보내주고 클라이언트는 받은 IP를 통해서 사이트를 왔다갔다 하는 구조이다.

 

 

 

 

 포트(Port) 번호 

 

포트는 크게 두 가지로 나뉜다. 컴퓨터의 주변 장치를 접속하기 위한 물리적인 포트와 프로그램에서 사용되는 접속 장소인 논리적인 포트가 있고 오늘은 논리적인 포트에 대해 다룰 것이다.

 

Port란 운영체제가 관리하는 서버 프로그램의 연결 번호이다.

 

이렇게 말하면 어려우니 먼저 포트 번호가 필요한 이유에 대해 알아보자. 한 대의 컴퓨터에는 다양한 서버 프로그램들이 실행될 수 있다. 예를 들어 웹 서버, 데이터베이스 관리 시스템(DBMS), FTP 서버 등이 하나의 IP 주소를 갖는 컴퓨터에서 동시에 실행될 수 있다.

 

만약 내 PC가 네이버 서버와 통신을 하는데 해당 서버의 데이터베이스와 연결할지, 해당 홈페이지에 연결할지, 기타 다른 기능에 연결할지에 따라 접속 포트가 모두 다르기 때문에 클라이언트는 어떤 서버와 통신할지 결정해야 하고 이때 필요한 게 포트 번호이다. 용도에 맞는 포트 번호에 연결하는 것이다.

 

포트 번호는 인터넷 번호 할당 허가 위원회에 의해 예약된 포트 번호를 가진다. 이러한 포트 번호를 잘 알려진, 혹은 예약된 포트라고 부른다. www.naver.com은 웹 서버와 통신하는 포트 번호인 80을 이용하는 것이다. 시스템에 의해 예약된 포트 번호는 될 수 있는 한 사용하지 않는 것이 바람직하다.

 

* 프로그램에서 사용할 수 있는 전체 포트 번호의 범위는 0~65535

사용 목적에 따라 아래와 같은 세 가지 범위를 가진다.

 

구분명 범위 설명
Well Know Port Numbers 0 ~ 1023 이미 예약된 Port
Registered Port Numbers 1024 ~ 49151 회사에서 등록하여 사용할 수 있는 Port
Dynamic Or Private Port Numbers 49152 ~ 65536 운영체제가 부여하는 동적 Port 또는
개인적인 목적으로 사용할 수 있는 Port

 

 

 

 

 TCP(Transmission)와 UDP(User Datagram Protocol) 

 

위에서 protocol에 대해 조금 얘기했는데, IP 주소로 프로그램들이 통신할 때는 약속된 데이터 전송 규약이 있고 이것을 전송용 프로토콜이라고 부른다. 인터넷에서 전송용 프로토콜은 TCP와 UDP가 있다.

 

# TCP 네트워킹

TCP는 연결형 프로토콜로 상대방이 연결된 상태에서 데이터를 주고 받는다. 쉽게 말하면 상대방의 응답이 와야 다음 통신을 보낼 수 있다는 의미다. "ㅇㅇ아~" 하고 불렀는데 상대방의 대답이 없으면 다음 데이터를 보낼 수 없다. 전화를 할 때 상대방이 받을 때까지 신호음만 유지되고 대화를 할 수 없는 것과 같다.

 

클라이언트가 연결 요청을 하고 서버가 연결을 수락하면 통신 회선이 고정되고 데이터는 고정 회선을 통해 전달된다. 때문에 TCP는 보낸 데이터가 순서대로 전달되며 데이터 손실이 발생하지 않는다.

*TCP는 IP와 함께 사용되어 TCP/IP라고도 한다.

 

TCP의 예로, 상대방과 대화를 주고 받는 채팅이 있다.

 

# UDP 네트워킹

UDP는 발신자가 일방적으로 수신자에게 데이터를 보내는 방식으로, TCP처럼 연결 요청 및 수락 과정이 없기 때문에 데이터 전송 속도가 상대적으로 빠르다.

 

그러나 UDP는 TCP처럼 고정 회선이 아니라 여러 회선을 통해 데이터가 전송되기 때문에 특정 회선의 속도에 따라 데이터가 순서대로 전달되지 않거나 잘못된 회선으로 인해 데이터 손실이 발생할 수 있다.

 

UDP의 예로, 실시간 영상 스트리밍에서 한 컷의 영상이 손실되어도 영상은 계속 수신되므로 문제가 되진 않는다. 따라서 영상과 같은 대용량의 경우 속도가 더 중요하기 때문에 UDP 방식을 사용하는 것이다.

 

즉, TCP는 항상 검증하기 때문에 신뢰성이 높으나 속도가 느리고 UDP는 일방적으로 전송하기 때문에 신뢰성이 낮으나 속도가 빠르기 때문에 상황에 알맞게 쓰는 것이 중요하다.

728x90

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

[Java] 자바 변수(Variable)  (0) 2023.08.25