[레포트 - 네트워크 프로그래밍Ⅱ] 자바 네트워크 프로그래밍의 이해

류명운

·

2015. 8. 20. 05:42

반응형

[레포트 - 네트워크 프로그래밍Ⅱ] 자바 네트워크 프로그래밍의 이해

* 네트워크 프로그래밍Ⅱ 수업에 앞서 예습한 내용들을 토대로 동기들에게 공유하려고 작성해본 보고서 자료 입니다.


목차

  1. 서버 / 클라이언트 개념의 이해 + 네트워크란?
  2. 프로토콜이란?
  3. OSI 7계층, 전송계층 이란?
  4. TCP와 UDP란 무엇인가?
  5. 포트(Port) 란?
  6. 소켓(Socket) 이란?
  7. java.net 패키지란?

1. 서버 / 클라이언트 개념의 이해 + 네트워크란?

정보를 제공하는 쪽(Server) ↔ 정보를 요청하는 쪽(Client)

서버와 클라이언트가 서로 정보를 주고 받을수 있게 통신할 수 있도록 만들어주는 선로나 연결망이 필요 → 네트워크

다음은 흔히 아는 인터넷 홈페이지 중 네이버(http://www.naver.com) 를 예로 클라이언트와 서버간의 통신을 다루어 보도록 하겠습니다. 



  • [1] [Client] 컴퓨터에서 인터넷 네이버(http://www.naver.com)에 접속함(네이버 서버에게 네이버 메인페이지를 요청)
  • [2] [Server]요청 내용에 따라 네이버 메인페이지를 클라이언트에게 반환
  • [3] [Client] 네이버 메인페이지 화면을 얻음

네트워크를 기반으로 통신이 이루어지게 하기 위해선 최소한 두대 이상의 컴퓨터가 필요하며, 이를 연결해주는 연결망이 필요하다는 것을 알 수 있습니다.

여기서 중요한 것은, 이러한 네트워크 통신이 가능하기 위해서는 사전에 클라이언트와 서버가 서로 알아들을수있는? 메시지를 사용해야 통신이 가능하다는 것입니다. 그러기 위해 미리 규칙을 정해놓았는데 이러한 규칙으로 만든 통신 규약을 '프로토콜(Protocol)'이라고 합니다.

2. 프로토콜이란?

네트워크 상에서 정보기기(컴퓨터끼리 or 컴퓨터와 단말기) 사이에 메시지를 주고받기 위하여 정한 여러 가지 통신규칙과 방법에 대한 약속 즉, 통신의 규약을 뜻합니다.


자 그럼, 저희가 다루어야할 인터넷에서는 어떤 프로토콜을 사용하는지 알아보겠습니다. 


인터넷에서는 IP(Internet Protocol)라는 이름의 프로토콜을 사용합니다. IP에 대해서는 다들 많이 아시겠지만, 기본적인 개념을 짚고 넘어가자면 IP는 4바이트의 이루어저 있으며 . 으로 숫자를 네개 공간으로 나누어 표현합니다. 예) 127.0.0.1 

  • * 1byte = 8bit = 2^8 = 0~255 까지의 숫자표현이 가능
  • * 4byte로 구성된 IP는 [0~255].[0~255].[0~255].[0~255]의 구조를 가질수 있음

이러한 IP는 흔히 IP 주소라고 불립니다. 그 이유는 네트워크 상에서 각각의 컴퓨터들을 구분할 수 있는 주소로써 사용되기 떄문입니다.


여기까지해서 네트워크에 대한 전반적인 그림이 머리속에 그려졌으리라 생각하고 이제부터는 조금 더 깊이 있는 개념을 알아보도록 하겠습니다.


앞서 배운내용을 요약하자면, 클라이언트측 프로그램에서 서버측 프로그램으로 정보를 요청하면 이를 수락하고 관련 정보를 제공하는 등의 네트워크 서비스가 이루어지는데 이는 제가 작년에 네트워크 수업을 통해 지겹도록 들었던, OSI 7계층 중 4계층에 해당하는 전송 계층(Transport Layer)을 통해 이루어지게 됩니다.


다음으로 OSI 7계층에 대해 간단히 그림을 통해 살펴보고 넘어가도록 하겠습니다.

3. OSI 7계층, 전송계층 이란?

OSI 7계층은 모든 네트워크 통신에서 생기는 여러가지 충돌 문제를 완하하기 위하여, 국제표준화기구(ISO)에서 표준화된 네트워크 구조를 제시한 기본 모델입니다.


여러분들과 저는 이번 포스팅에서 자바 네트워크 프로그래밍을 위해 필요한 개념을 공부하는 것이기 떄문에 관련 개념과 모든 계층을 알아보기에는 제한이 따르기때문에 여러 계층들 중 4계층에 해당하는 전송계층에 대해서 중점적으로 다루도록 하겠습니다.

 

전송계층(Transport Layer)는 TCP/IP(Transport Control Protocol/Internet Protocol)라고 부르며, 앞서 배웠듯이 클라이언트측과 서버측 간의 정보 교환 등의 네트워크 서비스를 가능케 해주는 계층이라고 이해하시면 됩니다.

여기서 중요한 것은 이러한 네트워크 서비스를 가능케 해주는 전송계층은 두 가지 프로토콜로 나뉜다는 점입니다. 하나는 TCP(Transport Control Protocol)고 다른 하나는 UDP(User Datagram Protocol) 입니다. 이를 프로그래밍 상에서는 소켓(Socket)이라고 부르게 됩니다.

(여기까지 이해가 되셨다면 우리가 네트워크 애기만 하면 흔히 소켓 소켓하는지 감을 잡았을 것입니다. 그러지 못한 분을 위해 이해를 돕자면 TCP, UDP를 이용한 프로그래밍을 소켓 프로그래밍이라고 생각하시면 됩니다)

  

자 여기서 잠깐 중간 정리를 하고 가도록 하겠습니다.

중간정리

  • 네트워크 통신은 클라이언트와 서버간에 미리 약속된 프로토콜을 기반으로 메시지를 통하여 이루어진다.
  • 이러한 통신은 인터넷상에서는 IP(Internet Protocol)라는 프로토콜을 사용하며, 이를 기반으로 여러 네트워크 서비스가 이루어지기 위해서는 국제표준화기구(ISO)에서 지정한 OSI 7계층 중 4계층에 해당하는 전송계층을 통해 이루어진다.
  • 전송계층(Transport Layer)은  TCP(Transport Control Protocol)와 UDP(User Datagram Protocol) 프로토콜로 나뉘게 된다. 이를 프로그래밍 상에서는 우리가 네트워크 관련 애기를 하면 흔히 말하는 소켓(Socket)이라고 부른다.

여기까지 이해가 안되셨다면 다시 천천히 본문을 읽어보시길 바랍니다. 이해가 되신분들은 다음으로 TCP와 UDP가 무엇인지 알아보도록 하겠습니다.

4. TCP와 UDP란 무엇인가?

TCP는 연결지향 프로토콜(Connection-Oriented Protocol)로 두 컴퓨터 간의 데이터 흐름의 신뢰성을 보장합니다. 즉 두 컴퓨터가 연결이 되었다면 통신은 물론이고 데이터 교환시 손실없이 주고받을 수 있다는 것을 보장한다는 것입니다. TCP는 파일이나 데이터를 네트워크에서 여러개의 작은 조각으로 나누어서 보내거나 반대로 이를 재조립하는 기능을 합니다. 네트워크에서 이렇게 파일이나 데이터를 여러개로 쪼개는 것을  패킷(Packet)이라고 합니다. 이러한 TCP와 관련된 서비스 프로그램의 예로는 ftp, telnet 등을 들수 있습니다.

* 패킷: 네트워크 상에서 전송되는 최소한의 데이터 단위를 뜻합니다. 예를 들자면, ftp 사이트에서 영화를 다운로드 받을때 해당 영화파일이 한번에 전송되는 것이 아니라 수천, 수만 단위 이상의 패킷으로 쪼개져 전송되는 것입니다.


요약하자면, TCP는 두 컴퓨터가 연결이 되었다면 통신과 데이터를 손실없이 주고 받을수 있는 기능을 담당한다는 것입니다.


UDP는 데이터의 독립적인 패킷을 보내는 프로토콜입니다. 이는 데이터그램(Datagrams)이라고도 불르는데, 한 컴퓨터에서 다른 컴퓨터로 데이터를 주고받을 때 TCP와는 다르게 연결성도 없고 신뢰성도 없는 한 마디로 데이터 교환시 손실여부를 보장할 수 없는 패킷을 말합니다. 이러한 UDP와 관련된 서비스 프로그램의 예로는 Clock Server나 Ping을 들수 있습니다.


TCP와 마찬가지로 요약하자면, UDP는 두 컴퓨터가 연결이 안되어있어도 바로 통신이나 데이터를 보낼 수 있으나, 이에 따라 손실이 발생할 수 있다는 것입니다.

 

여기서 잠깐, 여러가지 개념에 대한 설명으로 지쳤을 구독자를 위해 우리가 왜 지금 TCP며, UDP며 이러한 개념을 다루고 있는가에 대한 답을 드리자면 저희가 앞으로 다룰 자바는 TCP(Socket 클래스)와 UDP(DatagramSocket 클래스)를 모두 지원하기 떄문입니다. 그러니 이러한 기본개념에 대한 이해가 어느정도 있어야 프로그래밍이 수월해집니다.


여기서 중요한 것은 이러한 TCP와 UDP 프로토콜 처럼 컴퓨터의 특정 프로세스를 통해 전송되는 데이터는 포트(Port)를 이용하여 전송합니다(TCP와 UDP는 OSI 7계층 중 4계층 인, 전송계층에 해당하며 포트는 7계층, 응용프로그램 계층에 해당하는 것을 인지하고 이해해주세요). 

5. 포트(Port) 란?

포트는 프로그래밍에서는 논리적인 접속장소를 뜻하며, 특히 TCP/IP(앞서 전송계층을 TCP/IP라 불른다고 배웠습니다)를 사용할 때에는 클라이언트 프로그램이 네트워크 상의 특정 서버 프로그램을 지정하는 방법으로 사용됩니다. 이러한 포트는 포트번호라는 16bit 정수로 표현이 되며 값은 0 ~ 65535까지 지정이 가능합니다.


여기서 우리가 알아야 될것은 TCP/IP의 상위 프로토콜을 사용하는 응용프로그램에서는 인터넷번호 할당 허가위원회(LANA)에 의해 미리 지정된 포트번호들을 가지고 있습니다. 이런 포트번호들을 '잘 알려진 포트들'이라고 불르며 이번 자바 네트워크 프로그래밍을 위해 저희가 사용하는 'http' 서비스 또한 포트넘버 80/TCP,UDP로 지정되어 있습니다. (0~1023가 이에 해당하여 예약되어 있습니다)


따라서 우리가 앞으로 자바 소켓 프로그래밍을 하며 포트넘버를 설정할 일이 있을때는 이미 예약되어 사용되고 있는 1023까지의 포트넘버는 충돌방지를 위해 사용하지 말고 1024부터 그 이상의 포트넘버를 사용해야 합니다.

 

이제 포트에 대한 전반적인 이해가 되셨으리라 생각됩니다.

(TCP/IP를 사용하여 프로그래밍을 할 때에는 UDP, TCP 프로토콜과는 다른 상위 프로토콜을 사용하는 응용프로그램 간에 통신을 하기 위해 포트번호를 통하여 통신하려는 해당 서버프로그램을 지정하여야 한다는 점)

 

+(짚고 넘어가야될 점) 우리가 앞으로 자바 프로그래밍으로 작성할 프로그램은 Application 인 7계층에 해당한다고 보시면 되며, 실제적인 네트워크를 통해 데이터를 주고 받는 역할은 Transport 계층인 4계층에서 지원하는 TCP와 UDP를 사용하여 개발합니다. 하지만 여러 데이터를 목적지로 보냈는데 대체 어떤 Application을 위한 데이터인지 어떻게 알 수 있을까요? 이때 사용되는 것이 포트넘버 입니다. 하나의 포트는 하나의 응용프로그램을 담당하여 데이터를 받아들이는 출입구로 생각하면 됩니다.

 

그렇다면 실제적으로 네트워크상에서 패킷이 어떻게 전달되는지 살펴보도록 하겠습니다.


예를 들자면, ftp 서비스를 사용하기 위해선 클라이언트측에서 서버측의 ftp 포트에 해당하는 포트넘버 21로 연결을 시도합니다. 마찬가지로, http 서비스를 사용하려고 한다면 이에해당하는 포트넘버 80으로 연결을 시도합니다. 즉 서버에서 포트넘버로 클라이언트가 ftp를 요청한 것인지 http를 요청한 것인지 알수 있다는 것입니다. 클라이언트 측에서 포트넘버 21로 연결을 요청하면 이에 해당하는 ftp서버를 연결해주면 되는 것이고 80으로 요청하면 http 서버로 연결하는 식입니다.


자 이렇게 설명해도 이해가 되지 않는다는 분들은 다음의 그림을 참고하여 이해하시기 바랍니다.

6. 소켓(Socket) 이란?

포트와 응용프로그램들을 연결시켜주는게 앞서 TCP,UDP 부분에서 잠깐 언급했던 소켓(Socket)입니다. 왜 이렇게 같은 애기를 이리하고 저리하고 했느냐면 우리가 자바에서 공부할 부분이 바로 Socket 클래스이기 때문입니다. 자바에서는 통신 네트워크 프로그램을 Socket 클래스로 구현이 가능합니다. 쉽게 말해서 서버와 클라이언트가 서로 정보를 주고 받을 수 있는 통신프로그램을 우리가 Socket을 이용해 만들수 있다는 것입니다.

 

자바 프로그래밍 관점에서 소켓을 간단히 설명하자면 클라이언트에서 사용하는 소켓(Socket)과 서버에서 사용하는 소켓(Socket)이 있는데 중간에서 이를 연결시켜주는 서버소켓(ServerSocket)이 있습니다.

이는 제가 지난 학기에 채팅프로그램을 구현하기 위해 사용했었는데, 클라이언트가 접속하기를 기다리고 접속을 시도하면 서버의 소켓을 만들어서 클라이언트의 소켓과 연결해주는 작업을 반복하게 됩니다.

 

중요한 부분이기 때문에 다시한번 짚고 가자면, 클라이언트와 서버는 각각 소켓을 통해 통신을 하는데 이를 서버소켓(ServerSocket)이 클라이언트가 접속할 때마다 각 소켓을 생성해주는 역할을 수행해준다고 생각하시면 됩니다.

이해가 잘 안되시는 분을 위해 조금 더 이해를 돕기위해 그림을 만들어 봤습니다. 참고하시기 바랍니다.

(아직까지 이해가 안된 분들을 위해 간략하게 설명을 덧붙이자면 소켓끼리 놀도록 만들면 연결이 된다는 것입니다)

 

자바에서 이렇게 Socket 클래스를 이용해서 프로그래밍하는 것을 Socket 프로그래밍 혹은 TCP 프로그래밍이라고 합니다(이 부분도 앞에서 언급했었죠? TCP는 자바에서 Socket 클래스를 사용하고 UDP는 DatagramSocket 클래스를 사용하여 구현이 가능한다는 점)

 

이와 관련되어 자바 네트워크에서 가장 중요한 것으로는 자바 패키지가 있습니다. 바로 'java.net' 패키지입니다. 이름에서도 알수 있듯이 net → 네트워크와 관련된 클래스들로 이루어진 패키지입니다. 

7. java.net 패키지란?

java.net 패키지는 자바 네트워크 프로그래밍에서 우리가 앞으로 만들 클라이언트 응용프로그램과 서버 응용프로그램들을 보다 심플하고 빠르게 구현할 수 있는 최적의 클래스를 제공하여 줍니다.

 

이에 해당하는 클래스들은 다음 사진을 참고하시기 바랍니다.


이상으로 자바 네트워크 프로그래밍의 이해에 대한 포스팅을 마치기로 하겠습니다.

반응형