이렇게해서 네트워크 쪽을 알아보았는데
사실은 네트워크 쪽은 많이 알면 알 수록 도움이 많이 된다.
일반적으로 네트워크 공학은 학교에서 한학기 동안 배우는 내용이다.
그래서 굉장히 학습할 내용이 많다.
그래서 그 내용에 대해서 하나하나씩 다 얘기를 하면 몇십시간의 강의가 될 테니까
소켓 프로그래밍에 대해서 배우면서 실제로 코딩을 하는 시간을 가져보도록 하겠다.
처음에 막바로 보면은 멘붕이 올 수 있기때문에
흐름이 처음에 보기에는 복잡하기 때문이다.
그래서 이 흐름에 대해서 이해를 하기 위해서 PPT를 보도록 하자.
그래서 고급식당으로 돌아와보면은
이번 주제는 직원을 관리하고 그런게 아니라
왼쪽에 손님이 대기를 하고있는데
손님이 입장을 하는 == 통신하는 과정을 나타내고 있는 것이다.
그렇다면
{ 손님의 입장 != 식당의 입장 } 일 것이다.
일단
부터 알아보자면 인테리어도 끝내고 이제 영업을 개시를 하기 위해서는 뭐부터 해야할지 생각을 해보도록 하자.
그래서 지금보면은 신기하게도 "입구"가 없다는 것을 알 수 있다.
그래서 이렇게 문을 만들고 문지기를 고용을 해야한다.
그리고 나서는 이제
이런식으로 문지기를 교육을 시켜야 할 것이다.
일단은, 식당에 대한 전화번호나 주소를 알아야지만
응대를 할 수 있을 것이다.
지금 같은 경우 루키스 중화요리 서초점이라고 교육을 시킨것이고
경우에 따라서는 입구도 여러개 있을 수 있다.
니는 지금 정문에 있다는것 까지 교육을 시켜주었다.
그리고 대기를 하다가 손님한테도 연락이 올 수 있으니까 이런식으로 핸드폰도 하나 쥐어주게 하였다.
그러면 이제 준비가 다 된거 같으니까
이렇게 영업을 시작하면 될 것이다.
그러면 이제
문지기는
손님의 연락을 받을 준비 ok
손님이 오면 입장 안내도 ok
그리고 이제 이렇게 손님이 왔는데
(손님이 어떻게 왔는지는 나중에 손님 입장에서 알아 볼 것이다)
여차여차 해서 이렇게 문지기한테 연락이 왔다고 가정을 해보도록 하자.
그래서 문지기는 식당 상황을 보고 대기열이 없고 괜찮은거 같으면
이렇게 입장을 시켜 줄 것이다.
근데, 일반적인 식당의 경우 모든 일행들을 다 입장을 시켜 줄테지만
지금은, 손님한테 특별한 요구사항이 있어가지고
그냥 한명만 대리인의 자격으로 한명만 테이블에 앉혔다고 가정을 하자.
그래서 어쨋든 식당입장에서는 자리가 났으니까
앉혀 줄것이고
이런식으로 대리인 에게 핸드폰 하나를 쥐어주게 될 것이다.
이 핸드폰의 목적은 (식당에서 제공을 해준 것인데)
처음에 문의를 줬던 손님과 연락을 할 수 있게 하는 핸드폰이라고 가정을 하자.
그래서 이 대리인은 핸드폰을 통해서 자신의 일행과 연락을 할 수 있게 되었다.
그리고 당연히 원래 처음에 문의를 했던 손님도
이렇게하면 대리인과 연락을 할 수 있게 되었다.
그렇다면 손님은 어디서 와가지고 저 멀리 보이는 식당에다가 연락을 하기 위해서
이렇게 자신의 폰을 준비를 해와서
루키스 중화요리 서초점에다가 연락을 할 것이다.
그래서 입장이 가능한지의 여부를 물을 것이고,
그러면 이제 문지기가 입장이 가능하다는 사인을 내려 줄 것인데
그럼 아까와 마찬가지고 대리인이 입장을 할 것이다.
그리고 일반적으로 핸드폰을 전화를 걸 때를 생각을 해보면은
굳이 본인의 전화번호는 알릴필요 없이
전화건 사람의 연락처가 보이는데
마찬가지로 굳이 자신으 전화번호는 알려주지 않는다고 하더라도
이 문지기는 연락을 받음과 동시에
누가 자신한테(문지기) 연락을 했는지 알 수 있기 때문에
이제 대리인의 휴대폰에다가는 처음 연락한 손님의 주소 (전화번호를) 넣어 줄 수 있게 되는 것이다.
그래서
사실은 아까 이런식으로 연락을 할 수 있었던 이유는
문지기가 셋팅을 해줘가지고 연락이 가능하다고 보면 된다.
그래서 최종적으로 보면은
이 문지기의 역할은
"입구"에서 입구컷을 할지 말지의 결정이였다.
그래서 별 문제가 없으면 손님을 입장시켜서 대리인을 앉혀주고
손님과 손님의 대리인이 연락을 할 수 있게금 길을 뚫어 준것이다.
손님은 사실 별로 한게 없다.
그냥
1) 핸드폰 준비
2) 식당으로 연락 -> 입장가능한지 물어봄
이정도 일 것이다.
다음 부분은
다 식당과 식당의 문지기가 다 한 것이고
그래서 모든게 잘 풀렷다고 하면은
식당에 손님의 대리인이 들어가게해서 연락이 되게하고 식당과의 이슈가 생기면 대리인을 통해서 뭐 해결을 할 것이다.
그리고 반대로
식당의 입장에서 보면은 조금더 복잡하다.
식당은
1) 문지기 고용
2) 문지기 교육 (식당번호 알려줌)
3) 영업 시작 (손님한테 연락이 온다면 이제 > 4) 로 감)
4) 안내
그래서 이 4단계를 다 거치게 되면
최종적으로 손님의 대리인을 식당에 입장시키게 됨.
이전에 계속 나왔던 "핸드폰"이라는 것이 이제 "소켓" 이라는 용어로
변하게 될 것이다.
소켓 == 네트워크 통신을 하기 위한 "장치" 라고생각하셈.
(추상적인 장치 라고 생각하셈)
그래서 어디에다가 연락을 주고 받을 때는 반드시 이 소켓을 통해서 주고받게 될 것이다.
그리고 손님이 식당 전화번호로 전화를 해가지고 입장이 가능한지 물아본것은
"소켓"을 통해가지고, 서버 주소로 connect하게 되는것을 의미한다.
이렇게까지만 해주면
나머지 부분은 "서버"가 처리를 하게 되는 것이다.
그리고 손님은 클라 && 서버 구조에서 "클라"부분을 맡게 되는 것이고
그리고 아까 "대리인"은 이제 == "세션" 이라는 용어로 바뀌게 될 것이다.
그래서 결국,
클라이언트가 서버에 접속을 하면은
서버 (식당)에서 이런저런 처리를 해준다음에
"세션"을 하나 만들어 줄 것인데,
그 다음 모든 통신 (손님과 대리인의 연락)들은 이 "세션" (대리인)을 통해서 이루어 지게 된다는 것이다!
1) 문지기 고용 == Listener 소켓을 준비
2) 문지기 교육 (식당 전화번호 알려줌) == Bind (서버 주소 / Port를 소켓에 연동)
3) 영업 시작 == Listen (이라는 함수 사용)
4) 안내 == Accept (때리기)
그래가지고
최종적으로 Accept까지 다 끝났다면은,
클라이언트 세션이 하나 만들어 질 것인데
그 세션에도 똑같이 소켓(연락을 주고받을 장치 == 폰)이 하나 있을 것이다.
그래서 나중에 이 손님과 대화를 하고싶으면
이 손님을 대표하는 즉, 클라이언트의 소켓이랑 메세지를 주고받으면
그게 알아서 손님한테 전달이 된다는 말이다.
이게 그래서 큰 흐름이고 코드로 보면 조금더 간단할 것이다.
오늘은 중요했던것은
이 흐름만 보면된다.
클라 관점에서는 쉬웠지만
서버 관점에서는 할게 많았다 라는것을 알면되고
핸드폰의 존재 == 소켓의 존재 도 중요!
그래서 이제 코드로 넘어가보도록 하자!