자바의 강점은 API가 잘 만들어져 있다는 점!
특히, I/O Network 이런 쪽의 API가 잘 만들어져 있다.
Java를 Network 지향언어라고도 많이 부른다.
네트워크 공부하다 보면 소켓(Socket)이라는 단어가 많이 나온다.
소켓을 어떻게 만들어서 PC와 PC가 데이터를 주고 받고 하는지에 대해 공부할 것이다.
Socket은 Java, C, Python에서도 다 나오는 용어이다.
1. Socket(소켓)이 만들어 지는 과정(TCP 3-way Handshake)
3-way Handshake : 3번의 악수를 통해서 서로가 데이터를 주고 받고 할 수 있는 그런 관계를 맺을 수 있다.
★ EX) 사람도 처음에 만난 사람하고 바로 이야기를 하기가 껄끄러울 때가 있다. 이 후에 얼굴을 보고 인사를 하고
내가 누굽니다, 저는 누구누구 입니다. 이렇게 서로 의사소통(식별)을 한다음에 서로 데이터를 주고 받고 하는
일련의 절차가 있다.
이 절차를 "3번의 악수를 한다". 라는 표현으로 해서 3 HandShake라고 부르는 것!
또 하나 알아두어야 할 점 !
PC와 PC가 서로 데이터 통신을 하려면 소켓을 통해서 데이터가 주고 받고 한다는 점.
과연 소켓이 무엇일까?
EX) 소켓하면 전구를 꼽을 때 소켓이라는 꽂는 홈이 있다. 소켓을 연결하게 되면 전기가 흘러가 빛이 켜진다.
https://m.post.naver.com/viewer/postView.naver?volumeNo=12661999&memberNo=23759239
EX) 형광등도 양쪽 끝 점(EndPoint)에 소켓이 있다. 소켓에 형광등을 꽂아주면 전기가 흘러서 불이 들어온다.
즉, PC와 PC 사이에 있는 양 끝 점(Socket)에 랜선(LAN)이 연결되어 있다.
== 랜선에 UTP 케이블 (PC에 꽂은 부분) 이 끝 점을 하나의 소켓이라고 부른다.
그래서 PC와 PC가 서로 주고 받고 하려면 이 EndPoint(끝점)에 있는 Socket 대 Socket으로 데이터를 주고받고 한다.
소켓은 LAN선을 통해서 주고 받고 한다.
어떤 PC와 PC가 서로 데이터를 주고 받고 하려면 LAN선이 연결되어 있는 IP와 Port번호로 주고 받고한다.
IP주소와 Port번호 이 두개가 실제로는 하드웨어적인 부분.
자바에서는 이런 하드웨어적인 부분을 객체(class)로 다룬다. 객체 지향이기 때문에
IP주소와 Port 번호를 가지고 있는 물리적인 LAN 카드의 위치 부분을 실제로는 자바에서는
어떤 클래스로 관리하냐면 -> 소켓 이라는 class로 관리를 하게 되어 있음.
소켓 하면 소켓은 IP주소와 Port 정보로 이루어진 클래스로 보면 된다.
데이터를 주고 받고 하는 것은 I/O로 한다.
Input/Output
또는 read/write 로 소켓을 통해서 I/O로 주고 받고 한다.
소켓이라 하는 것은 데이터를 주고 받고 해야 하기 때문에
소켓에는 상대방의 정보를 알고 있어야 한다. (제일 중요)
Client와 Server가 있다.
Client - 정보를 요청
Server - 정보를 제공하는 쪽
Client가 Server에 요청을 하면 Server는 정보를 Client에게 제공.
Client가 서버에 접속해야 한다.
EX)
Server의 IP주소가 172.173.8.1이라고 가정
이 서버가 Client의 접속을 대기하기 위해서 가장 먼저 서버 소켓이라는 것을 만든다.
소켓도 두가지가 있다.
(Socket) (Server Socket)
그냥 소켓도 있고, 서버 소켓도 있다.
서버 소켓은 통신을 하기 위한 소켓이 아니라 / 서버 쪽에만 만들어지는 소켓.
클라이언트의 접속을 받아들이기 위해서 만들어주는 소켓.
서버 소켓을 만드려면 클라이언트가 접속을 할 수 있도록 포트 번호를 하나 열어줘야 한다. (9000으로 가정)
Server - IP : 172.173.8.1 Port : 9000(서버가 열어준 고정 PORT, 클라이언트가 서버 접속하기 위한 출입문)
이제 Server Socket은 클라이언트의 접속을 대기한다.
Client가 접속을 어떻게 하는가?
Client1의 IP : 172.173.8.2라고 가정
이 Client1도 서버 쪽으로 접속을 하려면 서버의 IP주소(172.173.8.1)와 PORT번호(9000)를 알고 있으면 된다.
- 접속 시도 (첫번째 만남)
첫번째 클라이언트가 서버를 만났다.
이때 Client1이 서버에 접속할 때 그냥 가는게 아니다.
자신의 정보, Client1의 정보를 가지고 넘어간다. (핵심)(IP와 PORT)
중요한 것은 Client1도 서버로 접속을 하려고 나갈 때 여기도 마찬가지로 포트가 하나 열려야 한다.
(서버로 접속하기 위해 열리는 내부 PORT) 9005번으로 가정(사용하지 않는 포트)
어떤 클라이언트가 서버로 접속을 할 때 그냥 가는 것이 아니라 자신의 IP주소와 열린 포트정보, 서버의 IP, 포트정보를 가지가야 한다.
서버가 클라이언트에 접속이 됨.
서버가 식별을 한다. 어디서 왔구나~ 어떤 포트로 나(서버)한테 접근 했구나~
통신을 하려면 서로 소켓이 만들어져야 한다.
근데 서버 소켓은 통신을 할 수 있는게 아니다. 이 서버 소켓은 클라이언트에 접속을 대기하는 소켓이다.
서버 소켓으로 서로 이야기 하는 것이 아니다. 통신을 할 수 있는 소켓이 아니다.
EX) 은행에 간다.
은행에 갈 때 출입문이 열려 있고 안내원이 있다. 이 안내원 역할을 하는 게 바로 서버 소켓. 고객은 클라이언트
안내원이 고객이 들어오면 누구십니까? 무슨일 처리를 하려고 왔죠? 물어본다.
대출 업무를 하러 왔습니다. 안내원은 대출 업무를 하는 장소는 저곳 입니다.
이 안내원이 한 고객하고 계속 이야기를 하고 있으면 다른 고객이 요청이 왔을 때 처리를 못하는 것.
안내원을 클라이언트를 식별하고 실제적으로 통신을 할 수 있는 다른 곳으로 안내해주는 역할을 서버 소켓이 한다.
서버는 다른 쪽으로 포트를 열어서 하나의 소켓을 만든다. (Client1과 통신하기 위한 다른 포트(9001로 가정)로 연결)
포트를 개방(서버가 열어준 내부 PORT 9001)
서버 소켓에서 이 서버가 열어준 내부 포트로 가세요. 이 부분을 바인딩이라고 부른다. (예시에서 안내원이 안내해주는 것과 동일) - 두번째 만남(Socket이 완전하게 만들어 지는 것)
중요한 것은 이 Socket은 데이터 통신을 할 수 있다. Client와 통신을 하는 것
서버에서는 이 소켓 안에 클라이언트의 정보가 저장되어 있다. (Client 1의 IP: 172.173.8.2, Port:9005)
이런 정보를 소켓에서 가지고 있어야 클라이언트와 통신 할 수 있다.
마지막으로 Client에도 무슨 정보를 넘겨줘야 할까? 서버 정보를 줘야 한다. (IP:172.173.8.1 , Port: 9001)
소켓은 상대방의 정보를 알고 있어야 하기 때문 ! 이게 세번째 만남
드디어 Client에 소켓이 완성이 되는 것.
Client도 서버의 정보를 저장하고 있는 상태(넘어 왔던 서버 IP, PORT) - 서버 소켓의 정보X, 서버가 열어준 내부 PORT
'자바TPC 프로젝트' 카테고리의 다른 글
P4. iText API를 이용한 PDF table 만들기(2) (0) | 2022.02.07 |
---|---|
P4. iText API를 이용한 PDF table 만들기(1) (0) | 2022.02.07 |
P3. Excel에 cell의 DataType 알아보기(3) (0) | 2022.02.06 |
P3 Excel에 이미지 저장하기(2) (0) | 2022.02.06 |
P3 Excel파일 Reading하기 (1) ClassNotFoundException: org.apache.xmlbeans.XmlObject 에러해결 (0) | 2022.02.06 |