총 삽질들 514

#003_MFC_메모리의 구성

안녕하세요 삽잡이 입니다. 이번 시간에는 코드 영역과 데이터 영역에 대해서메모리 구조에 대해서 MFC 관점으로 알아보겠습니다. 프로그램은 명령어와 데이터의 집합으로 이루어져 있습니다.데이터를 input 받고 명령어를 통해 가공을하여 output 하는 식이죠... MFC를 두고 예를 들어보도록 하겠습니다. MFC 주요 클래스인 'CFrameWnd', 'CView', 'CDocument' 등은 모두 동적 할당 을 통해 Heap 영역에 저장됩니다. 그리고 동적 할당을 통해 생성된 객체에서 사용하는 지역 변수들은 Stack영역에 만들어지고요... WM_LBUTTONDOWN과 같은 윈도우 메시지들은 코드영역에 자리를 잡습니다.이 외에도 함수들 즉, 메소드들도 코드영역에 자리를 잡습니다. 예를 들어 View라는 클..

#002_MFC_View (기본적인 입출력)

안녕하세요 삽잡이입니다. 이번시간에는 View 클래스에서 놀아보려고합니다...즉, I/O... 유저 인터페이싱을 한다 이겁니다. MFC에는 메시지 핸들러 함수가 있습니다.이 메시지 핸들러 함수는 윈도우 메시지가 발생시 호출되며, 우리는 재정의한 함수를 호출하여 우리가 작성한 코드로써 윈도우 메시지 처리를 할 수 있습니다. 예를 들어 '마우스 왼쪽 버튼 클릭'에 대해 메시지 핸들러 함수를 재정의하여 해당 윈도우 메시지가 발생시 어떻게 처리를 할지 구현할 수 있다는 소리입니다. API에서 사각형을 그리려면 DC를 만들어야됬던 기억이 나십니까...어디에 그릴지에 대해서 정했다면 해당 위치에 대한 DC를 구해야됬었습니다. 윈도우를 관리할 수 있도록 만든 객체와 C++ 객체를 혼동해서는 안됩니다.즉, APP, M..

#001_MFC_Intro

안녕하세요 삽잡이입니다. 이번시간부터는 MFC에 대해서 알아보려고 합니다. MFC는 OS즉, Windows 위에서 동작하는 라이브러리입니다..Net 이 등장하기 전까지는 Window 계열에서 가장 강력했던 언어라고 부르기는 뭐하지만... 뭐 언어였습니다...이제 곧 역사속으로 사라질 수도 있을 MFC... 허허... 뭐 미래는 모르져...아무튼... Visual C++ 안에 있는 라이브러리 중 하나가 바로 'MFC'입니다. OS위에 API 라이브러리가 있고, 이 API 라이브러리를 통해 MFC가 만들어졌습니다.따라서 MFC는 자신만의 라이브러리를 가지고 있지 않고, API를 100% 사용합니다.이것이 한계이지요...API는 함수 집합입니다. 즉, 라이브러리가 함수 단위로 만들어진 집합 말입니다.이걸 관련..

#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 쓰레드 하나..