network 32

#025_Window_Network_비동기 소켓 입출력 모델_IOCP모델

안녕하세요 삽잡이입니다. 이번시간에는 지금까지 배워왔던 모델들의 장단점을 총 종합해서 만들었다고 해도 과언이 아닌, 마지막 모델 IOCP 모델에 대해서 알아보려고 합니다.I/O Completion Port 모델이라고도 부를 수 있습니다. Window 서버로 만들어지는 경우가 많이 없지만,만약 Window 계열로 서버가 만들어 지는 경우의 거의 90% 이상은 IOCP 모델로 만들어진다고 생각하셔도 된다고 합니다. 기존에 Overlapped 모델과는 차이점이 뭘까요?Overlapped 모델 중 Completion Routine를 사용할 경우에는 Thread 하나를 가지고 작업을 진행했었습니다.하지만, 이 작업을 진행하는 쓰레드를 여러대 생성할 수 있을 경우에 그 만큼 동시 작업 처리에 효율성이 생기지요.....

#024_Window_Network_비동기 소켓 입출력 모델_Overlapped 모델 (2)

안녕하세요 삽잡이입니다. 이번 시간에는 완료 루틴(Completion Routine)을 사용하는 Overlapped 모델에 대해서 알아보고자 합니다. 이번 모델은 비동기 방식을 사용하는 I/O 작업을 전문 쓰레드에 맡깁니다.이처럼 I/O 작업만을 전문적으로 받는 쓰레드가 여러대 있다고 한다면, 이전 모델들은 A, B 클라이언트들에서 데이터가 들어오면A 클라이언트의 작업을 처리하고, B 클라이언트의 작업을 처리해줘야했었는데,이 모델은 I/O 작업을 전문적으로 받는 쓰레드를 사용하기 때문에 A, B 각각 동작하도록 한다 이겁니다...결과적으로, I/O 작업을 쓰레드로 만들어 놓으면 여러 작업을 효율적으로 처리할 수 있게 됩니다. 이번 Overlapped 모델에서는 Completion Routine을 사용합니..

#023_Window_Network_비동기 소켓 입출력 모델_Overlapped 모델 (1)

안녕하세요 삽잡이입니다. 이번 시간에는 비동기 소켓 입출력 모델 중 Overlapped 모델 방식에 대해서 알아보려고 합니다.선 동작을 수행하는 함수들의 종류가 있는 입출력 모델 방식말입니다.이 '선 동작을 수행하는 함수'들은 모두 비동기 함수라고 부릅니다.곧, MS에서는 overlapped 함수라고 부른다 이겁니다. 이 모델 방식에서는 overlapped 구조체를 사용합니다. 첫번째, 두번째 인자는 OS가 사용합니다.두번째 인수는 OS가 얼마나 Read하고 Write했는지에 대한 길이를 저장한다고 생각하시면 됩니다.그리고 이 둘은 우선 사용전 초기화를 해줘야합니다. 어플리케이션에서 사용하는 세번째 네번째 인수를 알아봅시다.Offset은 데이터 입출력을 시작하고자하는 위치를 의미합니다.일반적으로 처음부터..

#022_Window_Network_비동기 소켓 입출력 모델

안녕하세요 삽잡이입니다. 이번시간에는 비동기 입출력 모델에 대해서 알아보려고합니다. 우리는 이전시간까지 쓰레드, Select, WSAAsyncSelect, WSAEventSelect 모델에 대해서 알아봤었습니다.사실, 쓰레드를 제외한 세 모델들은 모두 '비동기'와 관련성이 있는 모델들은 아닙니다. 위에 모델들에서 붙은 WSA는 Window Socket의 2.0 이상 버전에서 만들어 졌음을 명시하는 줄임말입니다.즉, 2.0대 이상의 소켓에서 핵심은 바로 '비동기'입니다.그래서 Window Socket Async를 붙였습니다. 단지 표시를 한 것이지요...기존의 함수들은 비동기 방식의 모델이 없었지요... 2.0 대 부터 만들어졌구요... 아무튼... 2.0 버전 이상부터 만들어진 함수는 WSA가 붙기 때문..

#021_Window_Network_소켓 입출력 모델_WSAEventSelect 모델

안녕하세요 삽잡이입니다. 이번 시간에는 WSAEventSelect 모델에 대해서 알아보려고합니다. WSAEventSelect모델은 지난 시간에 배운 WSAAsyncSelect 모델과 비슷합니다. 하지만, WSAAsyncSelect 모델은 윈도우가 없으면 안됩니다. 어떤 윈도우의 메시지를 발생시켜 프로시저를 호출 할 것이냐 하는 것이 WSAAsyncSelect 모델이기 때문입니다. 네트워크 처리 속도가 좀 걸리는 것(?)들은 윈도우 메시지 메시지 처리와 함께 해줘야 하기 때문에 쓰레드 하나로 모든 처리를 하기 벅찰 수 있습니다. 그러니 쓰레드 하나로 벅차다 해서 윈도우 없이도 동작할 수 있는 동기 입출력 방식을 만들어 냈습니다. 그게 바로 WSAEventSelect 모델이구요... 그렇다면 WSAEvent..

#020_Window_Network_소켓 입출력 모델_WSAAsynvSelect 모델

안녕하세요 삽잡이입니다. 이번 시간에는 네트워크 입출력 모델 중 WSAAsyncSelect 모델에 대해서 알아보겠습니다. Async 에는 '비동기적인' 라는 뜻이 있습니다.그렇다면 이번 시간에 알아볼 WSAAsyncSelect 모델은 비동기적 모델일까요? 다음 시간에 언급하겠지만, 우선 WSAAsyncSelect 모델의 Async는 여러 작업을 처리할 수 있다는 개념을 나타낸 것입니다.즉, I/O (입출력) 방식이 비동기 방식이 아니라,한 클라이언트의 작업이 다 처리되지 못했더라도,여러 클라이언트들을 같이 작업할 수 있다는 의미에서 Async입니다...동시 처리가 아닌 여러 작업을 처리한다는 것을 말하는 것이죠. 이해가 안간다면 이전 시간에 배웠던 동기/비동기에 대해서혹은, 다음에 다시 언급할 때 참고하..

#019_Window_Network_소켓 입출력 모델_Select 모델

안녕하세요 삽잡이입니다. 이번 시간에는 네트워크 I/O 모델 방식 중 Select 모델 방식에 대해서 알아보겠습니다. linux 같은 OS들에서도 모든 시그널이 다 select 모델 방식으로 되어있다고하네요하지만 우리는 Windows의 select 모델을 알아본다는 점~!자 그러면 지금부터 개념을 알차게 알아가보도록 하겠습니다. Select 모델 방식의 핵심은 말 그대로 Select() 함수입니다. 이런 모델을 쓰는 이유는,'넌 블로킹 소켓을 사용해서 얻는 이점' + '이런 모델 방식을 사용해서 넌 블로킹 소켓이 아주 유연하게 동작하게 하는 것' 이와 같이 시너지를 내기 위함이 핵심이기 때문입니다... select 모델에서는 쓰레드를 단 하나 가지고즉, Main 함수를 움직이는 Primary 쓰레드 하나..

#018_Window_Network_네트워크 I/O(입출력) 모델

안녕하세요 삽잡이입니다. 이번 시간에는 Window Socket Programming에서 배우는 내용중에입출력 즉, 네트워크 통신을 하기 위한 효율적인 여러가지 모델들에 대해서 알아보도록 하겠습니다.즉, MS사에서 제공하는 다른 기능들에 대해서 차례대로 알아보자 이겁니다. 지금부터 배워볼 모델들은 효율적인 네트워크 프로그램을 만들기 위함입니다.우리가 알아볼 I/O 통신 방식은 6가지인데이 중에서 이미 한가지 모델 방식을 친숙할 것입니다... 그 하나가 바로 '쓰레드 모델링'을 사용한 네트워크 입출력 통신이니깐 말입니다...이 외에도 Window Socket Library에서 제공하는 모델 방식이 5가지가 더 있다 이겁니다... 블로킹 소켓은 무조건 쓰레딩 방식을 사용하냐 하면 그건 아니지만 대부분 쓰레딩..

#017_Window_Network_Non Blocking Socket

안녕하세요 삽잡이입니다. 이번 시간에는 Non Blocking Socket에 대해서 배워보려고합니다. 소켓에는 두 가지의 종류가 있습니다.바로, '블록킹 소켓'과 '넌 블록킹 소켓'이 있는 것입니다. 필자가 Nework Programming 에 대해서 글을 올리며 사용했던 방식은 모두 블록킹 소켓이었습니다.블록킹 소켓을 사용한다면,블록킹 소켓 내 IO 함수들은 자신의 목적(기능)을 완료할 때 까지 Blocking 상태에 놓입니다.이 블록킹 상태에 놓이는 I/O 함수들은 accept(), recv(), send(), connect() 함수등과 UDP에서 사용하는 recvfrom(), sendfrom()함수 등이 있습니다.즉, 이와 같은 I/O 함수들이 자신의 목적을 완료할 때 까지 Blocking 상태로 ..

#016_Window_Network_고정 길이 전송 방식과 가변 길이 전송 방식

안녕하세요 삽잡이입니다.이번시간에는 가변 길이 전송 방식에 대해서 알아보려고합니다. 고정 길이 전송 방식이란, 동일한 길이의 데이터를 날리고 동일한 데이터의 길이를 받는 전송 방식을 말합니다.예를 들어서 512바이트를 전송하게 되면, 이 바이트를 넘지 않아야된다는 것입니다. TCP 네트워크 송신은 데이터의 경계가 없기 때문에우리가 그 경계를 만들어줘야할 필요성이 있어서 이와 같은 방법을 사용하는 것입니다.즉, 몇 바이트가 보내질지, 우리가 몇 바이트를 받게 될지 모르니깐오류를 방지하고자... 정확한 데이터 송수신을 하고자 '고정 길이 전송 방식'을 사용한다는 것입니다. 그런데 사실, 데이터의 길이가 얼마나 올지 모를 때는 고정 길이 방식을 잘 사용하지 않습니다.예를 들어 512 바이트만큼 고정 길이로 사..