๋ชฉ๋ก์ ์ฒด ๊ธ (1099)
KoreanFoodie's Study
[C++ ๊ฒ์ ์๋ฒ] 4-2. IocpCore ํต์ฌ : 1. IOCP ๋ชจ๋ธ์ ํฐ ๊ทธ๋ฆผ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํ๋ค. Completion Port, Socket, Session ๋ฑ์ ๊ฐ๋ ์ ์ ์์๋์. 2. ์์ผ๋ก๋ IocpCore ๋ฅผ ํ์ฉํ์ฌ API ๋ฅผ ์บก์ํํ API ๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค. IocpCore ๋ IocpObject ๋ฅผ ๊ฐ์ ์ ์ผ๋ก ํ์ฉํ๋ค. 3. OVERLAPPED ๋ฅผ ์์๋ฐ์ IocpEvent ์, HANDLE ์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋ IocpObject ๋ฅผ ์์๋ฐ์ ์ธ๋ถ ์ฌํญ์ ๊ตฌํํ ๊ฒ์ด๋ค. ์ด์ IOCP ๋ชจ๋ธ์ ๊ตฌํํจ์ ์์ด ์ค๊ณง ์ฌ์ฉํ IOCP ๊ด๋ จ ๊ฐ์ฒด๋ค์ ๋ง๋ค์ด๋ณด์. ์ฌ์ค IocpCore ๋ผ๊ณ ๊ฑฐ์ฐฝํ๊ฒ ์ด๋ฆ์ ์ง์์ง๋ง, ์ค์ ๊ธฐ์กด์ ์ฌ์ฉํ๋ HANDLE, Socket, Sessi..
[C++ ๊ฒ์ ์๋ฒ] 4-1. Socket Utils ํต์ฌ : 1. IOCP ์๋ฒ ๊ตฌ์ถ์ ์ํด, ::InetNtopW, ::setsockopt ํจ์ ๋ฑ์ ํ์ฉํ์ฌ ํ์ํ ๋คํธ์ํฌ ํจ์๋ค์ Wrapping ํ ํฌํผ ํจ์๋ค์ ๋ง๋ค์ด ๋ณด์. 2. ์์ผ์ ์ฌ์ฉํ ๋, Connect/Disconnect/Accept ์ ํด๋นํ๋ ํจ์ ํฌ์ธํฐ๋ฅผ ๋ง๋ค๊ณ , ์์ผ๊ณผ ๋ฐ์ธ๋ฉํ์ฌ ํด๋น ์ฃผ์๋ฅผ ์ป์ด ์ ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์๋ค. ::WSAIoctl ํจ์๋ฅผ ์ฐธ๊ณ ํ์. ์ด๋ฒ 4 ์ฑํฐ๋, ๋คํธ์ํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ํ๋ ๋ถ๋ถ์ด๋ค. ์ฌ์ค ์ด๋ฒ ์ฑํฐ๋ ์กฐ๊ธ ์์ํด ๋ณด์ด๋ API ๋ค์ ์ฌ์ฉํ๋ฉด์, ์์ผ๋ก ๊ตฌ์ถํ IOCP ์๋ฒ๋ฅผ ์ํ ๋ฐ์์ ์ ํ๋ ๋ถ๋ถ์ด๋ค. ๊ทธ๋ฌ๋ ๋ฏ์ค์ด ๋ณด์ด๋ ๋ ์๋ค์ด ๋ง์ด ๋ณด์ด๋๋ผ๋ '๊ทธ๋ ค๋ ค๋...' ํ๋ฉด์, ๋ฌธ์๋ฅผ ๋ณด..
[C++ ๊ฒ์ ์๋ฒ] 3-12. Completion Port ๋ชจ๋ธ ํต์ฌ : 1. IOCP ๋ชจ๋ธ์ ์ค๋ ๋๋ง๋ค ๊ฐ๊ณ ์๋ APC ๋์ , Completion Port ๋ฅผ ์ค์์์ ํ๋ ๊ด๋ฆฌํ๋ค. 2. ์ค๋ ๋๋ Alertable Wait ์ํ๋ก ๋์ ํ๋ ๊ฒ ๋์ , ์๋ฒ๋ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ ๋ GetQueuedCompletionStatus ๋ฅผ ํธ์ถํ์ฌ ์ ๋ณด๋ฅผ ์กฐํํด ์๋ง์ ๋์์ ์ํํ๋ค. 3. ๋ง์ฝ ํน์ ์ฐ๋ ๋๊ฐ ํน์ ์ด๋ฒคํธ๋ฅผ ํ ๋ฒ ๋ ๋ฐ๊ธธ ์ํ๋ค๋ฉด, iocpHandle ๊ณผ ๋ฐ์ธ๋ฉํ ํจ์ ๋ด๋ถ์์ WSARecv ๋ฑ์ ํธ์ถํด ์ด๋ฒคํธ๋ฅผ ๋ ๋ฐ์ ์ ์๋๋ก ์ค์ ํด ์ฃผ์ด์ผ ํ๋ค. ๋๋์ด... ์ธ๋ฒ์งธ ์ฑํฐ์ ๋ง์ง๋ง์ด์ ์ ์ผ ์ค์ํ, IOCP ๋ชจ๋ธ์ ๋ํด์ ์์๋ณด์. ๋จผ์ , ๋ฐ๋ก ์ ์ ์์๋ณด์๋ Overlapped..
[C++ ๊ฒ์ ์๋ฒ] 3-11. Overlapped ๋ชจ๋ธ (์ฝ๋ฐฑ ๊ธฐ๋ฐ) ํต์ฌ : 1. ์ฝ๋ฐฑ์ ํ์ฉํ์ฌ Overlapped ๋ชจ๋ธ์ ๋ง๋ค๋ฉด, ์ด๋ฒคํธ์ ๊ฐฏ์ ์ ํ ์์ด(64๊ฐ) ์ค๋ ๋๊ฐ ํน์ ๋คํธ์ํฌ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ ๋ ์ํ๋ ํจ์๋ฅผ ํธ์ถํ๊ฒ ๋ง๋ค ์ ์๋ค. 2. ๋น๋๊ธฐ ์ ์ถ๋ ฅ์ ์์ํ๊ณ ๋์ ์ค๋ ๋๋ Alertable Wait ์ํ๋ก ๋ค์ด๊ฐ๊ฒ ๋๊ณ , OS ์์ ๋น๋๊ธฐ ์ ์ถ๋ ฅ์ด ์๋ฃ๋ ํ, APC ํ๋ฅผ ๋น์์ฃผ๋ฉฐ(ํ๊บผ๋ฒ์ ๋น์์ค๋ค) ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉด, ์ค๋ ๋๋ Alertable Wait ์ํ๋ฅผ ๋น ์ ธ๋๊ฐ๋ค. 3. ์ฝ๋ฐฑ ๊ธฐ๋ฐ์ ์ด๋ฒคํธ์ ๋ํ ๊ฐฏ์ ์ ํ(64๊ฐ)๊ฐ ์์ผ๋, ๋ชจ๋ ๋น๋๊ธฐ ์์ผ ํจ์์์ ์ฌ์ฉ ๊ฐ๋ฅํ์ง๋ ์์ผ๋ฉฐ(accept), Alertable Wait ์ํ๋ก ๋น๋ฒํ๊ฒ ์ ํ๋์ด ์ฑ๋ฅ์ด ์ ํ๋ ์ ..
[C++ ๊ฒ์ ์๋ฒ] 3-10. Overlapped ๋ชจ๋ธ (์ด๋ฒคํธ ๊ธฐ๋ฐ) ํต์ฌ : 1. ๋ธ๋กํน ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ํจ์ ํธ์ถ ํ, ์์ ์๋ฃ์๊น์ง ๋๊ธฐ๋ฅผ ํ๋ฉฐ ๋ ผ๋ธ๋กํน ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ์์ ์ ํ๋ค. 2. ๋ ผ๋ธ๋กํน/๋น๋๊ธฐ ๋ฐฉ์์ ๋ชจ๋ธ์ด AIO(Overlapped IO) ๋ชจ๋ธ๋ก, ์ด์์ฒด์ ๋ ์ด๋ฒคํธ ๊ฐ์ฒด๋ฅผ Signaled ์ํ๋ก ๋ง๋ค์ด ์๋ฃ ์ํ๋ฅผ ์๋ ค์ค๋ค. 3. WSAWaitForMultipleEvents ํจ์๋ฅผ ํธ์ถํด์ ์ด๋ฒคํธ ๊ฐ์ฒด์ Signal ์ ํ๋ณ ํ, WSAGetOverlappedResult ๋ฅผ ํธ์ถํด ๋น๋๊ธฐ ์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ค. ์ด์ ๊ธ์์ ์ ๋ฆฌํ๋ Select ๋ชจ๋ธ ๋ง๊ณ , ์ค์ ๋ก ์ฌ์ฉํ IOCP ๋ชจ๋ธ์ ์ํ ๊ธฐ์ด ์์ ์ ํด ๋ณด์. ์ด๋ฒ ๊ธ์์๋ Overlapped ๋ชจ๋ธ์ ๋ํด ๋ค๋ฃฐ ๊ฒ์ธ๋ฐ..
[C++ ๊ฒ์ ์๋ฒ] 3-9. WSAEventSelect ๋ชจ๋ธ ํต์ฌ : 1. WSAEventSelect ๋ชจ๋ธ์ ์ฌ์ฉํ๋ฉด, ํน์ ์์ผ๊ณผ ํน์ ๋คํธ์ํฌ ์ด๋ฒคํธ๋ฅผ ์ฐ๊ฒฐํด, ์ค์ ์ด๋ฒคํธ๊ฐ ๋ฐ๋ํ์ ๋ ๋ฐ์ธ๋ฉ๋ ์์ผ์ผ๋ก๋ถํฐ ์ํ๋ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค. 2. Select ๋ชจ๋ธ๊ณผ ๋ฌ๋ฆฌ, ๋งค๋ฒ Set ์ ๋ง๋ค์ง ์๊ณ ์ฌ์ฉํ ์์ผ์ ํด๋นํ ์ด๋ฒคํธ๋ง Reset ํด ์ฃผ๋ฉด ๋๋ค. 3. ์ด๋ฒคํธ ๋ฐ๋ ์, ์ ์ ํ ํจ์๋ฅผ ํธ์ถํด ์ฃผ์ด์ผ ํด๋น ์ด๋ฒคํธ๋ฅผ ๋ค์ ์ฌ์ฉํ ์ ์๋ค. ์ฐ๋ฆฌ๋ ์ด์ ๊ธ์์ Select ๋ชจ๋ธ์ ๋ํด ๋ฐฐ์ ๋ค. ๊ฐ๋จํ ์๊ธฐํด์, Select ๋ชจ๋ธ์ ํ์ฉํ๋ฉด ํน์ ์ญํ ์ ํ๋ SET(READ_SET/WRITE_SET)์ ํน์ ์์ผ์ ๋ฃ์ด '๊ด์ฐฐ' ํ ์ ์๊ฒ ๋ง๋ฆ์ผ๋ก์จ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ํน์ ๋์์ ํน์ ์์ผ์ด ์ํํ๋..
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ํด ์์๋ณด๋ฉฐ ์ด๋ฅผ C++ ๋ฅผ ์ด์ฉํ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ด๋ป๊ฒ ์ ์ฉํ๋ฉด ์ข์์ง ์์๋ณด๊ฒ ์ต๋๋ค. ํต์ฌ : 1. ํน์ฑ ๊ธฐ๋ฐ ํ ์คํธ๋ฅผ ์ ๋ ํ ์คํธ์ ํจ๊ป ํ์ฉํ๋ฉด ํ ์คํธ๋ฅผ ๊ฐ๋ตํํ๋ฉด์ ๊ฒฌ๊ณ ํ ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๋ค. 2. ๋ชจ๋๋๋ ํน์ ์ธ์๋ฅผ ํ์ ์ผ๋ก ๋ฐ์, unit/bind operator ๋ฅผ ํตํด ํน์ ์ค๋ณต์ ์ ๊ฑฐํ๋ ๊ฒ์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์๋ค. 3. ์ด๋ฒคํธ ์์ฑ์ ํ์ฉํ๋ฉด, ๋ฐ์ดํฐ๊ฐ ์ด๋ค ์ฐ์ ๋ก ํ์ฌ ์ํ์ ์ด๋ฅด๊ฒ ๋์๋์ง ์ฝ๊ฒ ํ์ ์ด ๊ฐ๋ฅํ๋ค. ํน์ฑ ๊ธฐ๋ฐ ํ ์คํธ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ์ ๋ ํ ์คํธ๋ ๋งค์ฐ ์ค์ํ๋ค. ๊ฒฐ๊ตญ ํ๋ก๊ทธ๋จ์ด๋ผ๋ ๊ฒ์ด ํน์ ์ ๋ ฅ์ ๋ฃ์ผ๋ฉด ํน์ ์ถ๋ ฅ์ด ๋์ค๋๋ก ํ๋ ๊ฒ์ด๋ฏ๋ก, ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋์ง ๋ฐฐํฌ ์ ์ ํญ์ ์ ๊ฒํด์ผ ํ๋ค. ๊ธฐ์กด์๋ ์ฌ์ค ํน์ ์ํฉ์ ๋..
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ํด ์์๋ณด๋ฉฐ ์ด๋ฅผ C++ ๋ฅผ ์ด์ฉํ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ด๋ป๊ฒ ์ ์ฉํ๋ฉด ์ข์์ง ์์๋ณด๊ฒ ์ต๋๋ค. ํต์ฌ : 1. ๋ฉ๋ชจ์ด์ ์ด์ ์ ํ์ฉํ๋ฉด, ์ฌ๊ท์ ์ธ ์ฐ์ฐ์์ ์ด์ ์ฐ์ฐ์ ์บ์ฑ๊ฐ์ ์ด์ฉํด ๋ถํ์ํ ์ฐ์ฐ์ ์ค์ผ ์ ์๋ค. 2. ๊ผฌ๋ฆฌ ์ฌ๊ท ์ต์ ํ๋ ์ปดํ์ผ๋ฌ ์ต์ ํ ํ๋๊ทธ๋ฅผ ํ์ฑํํ๋ฉด ๋๋ค. ์ด๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ๋ฎ์ถ ์ ์๋ค. 3. ์์ ํจ์์ ๋ถ๋ณ์ฑ์ ์ด์ฉํด ๋ณ๋ ฌ ์ฐ์ฐ์ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋ค. ํ์ง๋ง future ๋ฑ์ ์ฌ์ฉํ์ฌ ๋ณ๋ ฌ ์ฐ์ฐ์ ํ๋ ๊ฒ๋ณด๋ค, sequential ํ ๋ฐฉ์์ ์ฑ๋ฅ์ด ๋ ๋์ ๋๋ ์๋ค. ํผํฌ๋จผ์ค ์ต์ ํ ์ฌ์ค ๋ชจ๋ ๊ฒฝ์ฐ์ ์ํฉ์ ์๋ง์ ์ต์ ํ ๋ฐฉ๋ฒ์ด๋ ์๋ค. ์ด๋ค ๊ฒฝ์ฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํฌ์ํด์๋ผ๋ ์๋๋ฅผ ๋์ฌ์ผ ํ ์๋ ์๊ณ , ๋ค๋ฅธ ๊ฒฝ์ฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ผ๊ธฐ ์ํด ๋น ..
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ํด ์์๋ณด๋ฉฐ ์ด๋ฅผ C++ ๋ฅผ ์ด์ฉํ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ด๋ป๊ฒ ์ ์ฉํ๋ฉด ์ข์์ง ์์๋ณด๊ฒ ์ต๋๋ค. ํต์ฌ : 1. ํจ์ํ ์ฐ์ฐ์๋ฅผ ํ์ฉํด ์ค๋ณต์ ์ ๊ฑฐํ๊ณ DRY ์์น์ ์งํฌ ์ ์๋ค. 2. ํ๋ผ๋ฏธํฐ ์ ์ฌ์ฑ์ด๋ ํจ์ ์ค๋ณต ์ฌ์ฉ์ ์ ์ฌ์ฑ์ ํ์ ์ ํ๋ฆฌ์ผ์ด์ ํน์ํ๋ ํจ์ํ ํฉ์ฑ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค. 3. ๊ณ ์ฐจ์ ํจ์๋ฅผ ํตํด ๊ตฌ์กฐ์ ์ ์ฌ์ฑ๊ณผ ์จ์ ๋ฃจํ๋ฅผ ์ ๊ฑฐํ ์ ์์ง๋ง, ๊ณผ๋ํ ์ถ์ํ๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋จธ๋ค์๊ฒ ์ง์ ์ฅ๋ฒฝ์ ๋์ผ ์ ์์์ ์ ์ํ์. ํจ์ํ ์ฐ์ฐ์๋ฅผ ํ์ฉํ ์ค๋ณต ์ ๊ฑฐ ํจ์ํ ์ฐ์ฐ์๋ฅผ ์ ๊ทน ํ์ฉํจ์ผ๋ก์จ, ์ค๋ณต์ ์ ๊ฑฐํ๊ณ DRY ์์น์ ์งํฌ ์ ์๋ค. DRY ์์น์ Don't Repeat Yourself ์ ์ฝ์๋ก, ์ฝ๋๊ฐ ์ง์์ ๋ณด๊ดํ๋ ๋ฐฉ์์ด๋ผ๋ ์ดํด์ ๋ฐํ์ ๋๋ค. ์ด์์ ..
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ํด ์์๋ณด๋ฉฐ ์ด๋ฅผ C++ ๋ฅผ ์ด์ฉํ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ด๋ป๊ฒ ์ ์ฉํ๋ฉด ์ข์์ง ์์๋ณด๊ฒ ์ต๋๋ค. ํต์ฌ : 1. ๋ชจ๋ ํ๋ก๊ทธ๋จ์ ์์ ํจ์์ ์งํฉ์ผ๋ก ํํ๋ ์ ์์ผ๋ฉฐ, ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ด ์ํธ ์์ฉํ๋ ํจ์ ์งํฉ์ผ๋ก ์ ์ํ ์ ์๋ค. 2. ์ ๋ ฅ๊ณผ ์ถ๋ ฅ ์ค์ฌ์ผ๋ก ์ฌ๊ณ ํ๋ฉฐ, ์ค๊ฐ ๋จ๊ณ์ ๋ณํ ๊ณผ์ ์ ์ฐจ๋ก๋๋ก ๊ตฌํํด ๋ณด์. ํจ์ํ์ผ๋ก ์ฌ๊ณ ํ๊ธฐ ๋ชจ๋ ํ๋ก๊ทธ๋จ์ ์์ ํจ์์ ์งํฉ์ผ๋ก ํํ๋ ์ ์์ผ๋ฉฐ, ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ด ์ํธ ์์ฉํ๋ ํจ์ ์งํฉ์ผ๋ก ์ ์ํ ์ ์๋ค. ํจ์๋ฅผ ์ค๊ณํ ๋, ๋ค์ ์คํ ์ ๋ฐ์ผ๋ฉด ํจ์๋ฅผ ๊ฐ๋จํ๊ฒ ์ค๊ณํ ์ ์๋ค. ์ ๋ ฅ ๋ฐ์ดํฐ๋ก๋ถํฐ ์ถ๋ฐํ๋ค. ์ถ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๋ค. ์ผ๋ จ์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ ๋ฐ์ดํฐ๋ก ๋ณํํ๋ ๊ฐ ๋จ๊ณ์ธ ๋ณํ ๊ณผ์ (์์ ํจ์)๋ฅผ ์ ์ํ๋ค. ์ฌ์ค ์ ๋ด์ฉ์..