#PW ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- PW ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ C++11 ํ์ค์ผ๋ก ์์ฑํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ธํธ์
๋๋ค.
- ๊ธฐ์กด QT, ACE ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฌ๋ฆฌ ํ์ ์ฌ์ ์๋ฅผ ๊ฑฐ์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
- ๋ชจ๋ ํํ์ ์ ํ๋ฆฌ์บ์ด์ ๊ฐ๋ฐ์ ์ํ ํ๋์์ํฌ๋ ์๋๋ฉฐ, ๋งค์ฐ ์ ํ์ ์ธ ํํ๋ฅผ ๋ชฉํ๋ก ํ๊ณ ์์ต๋๋ค.
- ๋ฐ๋ชฌ์ ๊ฐ๋ฐํ ๋, ์ ๋ฒ ์ ์ ๋ํ ํ๋์์ํฌ๋ก, ๊ฐ๋ฐ์๋ ๋ก์ง์๋ง ์ง์คํ๋๋ก ๋์์ค๋๋ค.
์ง์ค๋ ฅ ํฅ์ ํ๋ก๊ทธ๋จ์ ์๋๋๋ค. - ๋ฉํฐํ๋ก์ธ์ค+์ฑ๊ธ์ค๋๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํฉ๋๋ค.
- ๋จ, ๋งค์ฐ ์ ํ์ ์ผ๋ก ๋ฉํฐ์ค๋๋๋ ์ง์ํ์ง๋ง, ๋งค์ฐ ๊น๋ค๋ก์ธ ๊ฒ ๊ฐ์ต๋๋ค.
- Linux
- CentOS >= 5
- http://www.centos.org/
- CentOS 5, 6 ์์ devtoolset-2๊ฐ ํ์. (GCC-C++ 4.7/C++11 ์๊ฑด)
- Fedora >= 21
- Ubuntu >= 14.04
- CentOS >= 5
- GCC-C++ >= 4.7
- CMake >= 3.0
- OpenSSL >= 0.9.8 (๊ฐ๋ฅํ๋ฉด 1.0.0 ์ด์ ์ฌ์ฉ)
- Zlib >= 1.0
- URIParser >= 0.7
- JsonCpp >= 0.9
- Sqlite >= 3.0
- Doxygen (๋ฌธ์ํ์ฉ)
- ๊ทธ๋ฆผ์ ์ํด Graphviz๋ Dot ๋ฑ ์ ํธ๋ฆฌํฐ๊ฐ ๋ ํ์ํ ์ ์์ต๋๋ค.
- http://www.stack.nl/~dimitri/doxygen/
- IDE
IDE๋ CMake์์ ํ๋ก์ ํธ ํ์ผ์ ๋ง๋ค์ด ์ค๋๋ค.
- Eclipse CDT (๋งค์ฐ ๋๋ฆผ)
- Kdevelop >= 4.7
- 4.7๋ฒ์ ๋ถํฐ๋ CMakeLists.txt ํ์ผ์ ์ง์ ์ํฌํธ ํ ์ ์์ต๋๋ค.
- https://www.kdevelop.org/
- Code Blocks
- Sublime Text (์ ๋ฃ, ์จ๋ณด๊ณ ์ถ์)
- CodeLite
- Kate
git clone https://github.com/skplanet/libpw.git
$ git clone https://github.com/skplanet/libpw.git
$ cd libpw
$ make ; build ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ , cmake๋ฅผ ํตํด ๋น๋๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
$ cd build
$ make ; ์ค์ ์ปดํ์ผ์ ํ์ฌ ๋น๋๋ฅผ ์์ํฉ๋๋ค.
ํจํค์ง๋ RPM๊ณผ DEB๋ฅผ ์ง์ํฉ๋๋ค.
$ cd build
$ make libpw.rpm ; RPM์ ๋ง๋ค๋ฉฐ, libpw/build/rpmbuild/RPMS/[ARCH]/ ๋๋ ํ ๋ฆฌ์ ์์ฑํฉ๋๋ค.
$ make libpw.deb ; DEB์ ๋ง๋ค๋ฉฐ, libpw/build/ ๋๋ ํ ๋ฆฌ์ ์์ฑํฉ๋๋ค.
๋๋ต์ ์ธ ๋ถ๋ฅ์ ๋๋ค. ์์ธํ ๊ฒ์ doxygen์ ํตํด ๋ง๋ค์ด์ง ๋ฌธ์๋, ํค๋ ํ์ผ์ ์๋ ์ฃผ์์ ์ฐธ๊ณ ํ์ธ์.
๋ค์์คํ์ด์ค๋ pw๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ถ๊ฐ ๋ค์์คํ์ด์ค๋ฅผ ํฌํจํฉ๋๋ค.
namespace pw {
namespace ssl { }
namespace crypto { }
namespace http { }
}
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฒด์์ ์ฌ์ฉํ ํ์ (๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ ...)์ ์ ์ํฉ๋๋ค.
- HTTP์๋ต์ฝ๋์ ๋น๋ ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋ต์ฝ๋(ResultCode)๋ก ์ ์ํ์์ต๋๋ค.
- ํธ์คํธ ์ ๋ณด(host_type)๋, ํฌ์ธํฐ์ ๊ธธ์ด๋ฅผ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ์ฒด(blob_type) ๋ฑ์ ์ ์ํ์์ต๋๋ค.
- ๊ธฐํ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ, ์์ฃผ ์ฌ์ฉํ๋ ํ์
์ ์ ์ํ์์ต๋๋ค.
- ๊ฐ๋ฅํ๋ฉด ๋ฏธ๋ฆฌ ์ ์ํ ํ์ ์ ์ฌ์ฉํ์ฌ, ๋ปฅํ๊ธฐ(code-bloat)๋ฅผ ์ค์ฌ๋ด ์๋ค!
- ๊ทธ๋ฌ๋ ์์ฆ C++ ์ปดํ์ผ๋ฌ๋ -O3 ์ต์ ์ ์ต์ ํ๋ฅผ ์ ๋ฒ ์ ์ํํ๋, ๋๋ฌด ์คํธ๋ ์ค๋ ๋ฐ์ง ๋ง์ธ์.
๊ณต์ฉ์ ๊ฐ๊น์ง๋ง, ๋ค์ ์ ๋งคํ์ฌ ๋ฌ๋ฆฌ ๋ถ๋ฅํ์์ต๋๋ค.
์์ธ ํด๋์ค๋ฅผ ์ ์ํ์์ต๋๋ค.
๊ฐ๋จํ ๋ก๊ทธ ์์คํ ์ ๋๋ค.
- ๋ ์ง๋ณ, ์๊ฐ๋ณ๋ก ๋ก๊ทธํ์ผ์ ์์ฑํฉ๋๋ค.
- ์ต๊ทผ ๋ก๊ทธ๋ ํ๋๋งํฌ๋ฅผ ์์ฑํ๋, ๋ก๊ทธ ๊ฐ์ ์คํฌ๋ฆฝํธ ๋ง๋ค ๋ ์ ์จ๋ด ์๋ค.
- ๋๋ฆ ๋ ๋ฒจ์ ๋ฐ๋ฅธ ์ถ๋ ฅ์ ์ง์ํฉ๋๋ค.
๊ฐ๋จํ ํ์ด๋จธ์ ๋๋ค.
- ๊ฐ ํ์ด๋จธ ์ด๋ฒคํธ ๊ฐ์ฒด(pw::Timer::Event)๋ฅผ ์์ ๋ฐ์, ๊ฐ์ข ๋ก์ง๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
์์คํ ์ ๋ณด๋ฅผ ํ์ธํฉ๋๋ค.
- OS, ํธ์คํธ ์ด๋ฆ, CPU, NIC, ๋ฉ๋ชจ๋ฆฌ, ํ์ผ์์คํ ์ ๋ณด๋ฅผ ๊ฐ๋จํ ํ์ธํ ์ ์์ต๋๋ค.
- ์ด๋ฌํ ์ ๋ณ๊ฒฝํ์ง ์๋ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก, ํด์๋ฅผ ์์ฑํ์ฌ ์ํธํ์ชฝ์ ์์ฉํ ์ ์์ต๋๋ค.
๊ณต์ ๊ฐ์ฒด(Shared object, ์๋์ฐ์ฆ ํ๊ฒฝ์์ DLL๋ก ๋ถ๋ฆฌ์ฐ๋ ๊ทธ๊ฒ์ด์ฃ )๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- ํ๋์์ํฌ์ ๊ฐ๊น์ต๋๋ค.
- ๋ฏธ๋ฆฌ ์ ์ํ ํจ์ ์ด๋ฆ์ผ๋ก SO ํ์ผ์ ๋ง๋ค์ด, ํ๋ฌ๊ทธ์ธ ๋ฑ์ผ๋ก ์์ฉํ ์ ์์ต๋๋ค.
๋ฌธ์์ด์ ๋ค๋ฃจ๋ ์ ํธ๋ฆฌํฐ์ ๋๋ค.
std::string, std::stream ๊ฐ์ฒด๋ฅผ ์ ๊ทน ํ์ฉํ ์ก๋คํ ๋ฌธ์์ด ์ ํธ๋ฆฌํฐ์ ๋๋ค.
๋ฌธ์์ด์ ํน์ ๋ฌธ์๋ก ์๋ฅด๋ ๊ธฐ๋ฅ์ ๋๋ค.
INI ํ์ผ ํ์์ ๊ฐ๋จํ๊ฒ ์ฝ๊ณ ์๋๋ค.
- ์ฝ์ ๋, ์ฃผ์ ๋ฑ์ ๊ฐ๋ณ๊ฒ ๋ฌด์ํ๋ ์ฃผ์ํ์ธ์.
- XML/DOM์ฒ๋ผ ์ ์ฒด๋ฅผ ์ฝ๊ณ , ์น์ ๊ณผ ์์ดํ ์ด๋ฆ์ผ๋ก ์ ๊ทผํ ์ ์์ต๋๋ค.
- XML/SAX์ฒ๋ผ ์ด๋ฒคํธ ๋ฐฉ์๋ ์ ๊ณตํฉ๋๋ค.
๋ฌธ์์ด ์ธ์ฝ๋ฉ/๋์ฝ๋ฉ์ ์ง์ํฉ๋๋ค.
URL ์ธ์ฝ๋ฉ์ ์ง์ํฉ๋๋ค. Hexa ์ธ์ฝ๋ฉ์ ์ง์ํฉ๋๋ค. Base64 ์ธ์ฝ๋ฉ์ ์ง์ํฉ๋๋ค. Escape ์ธ์ฝ๋ฉ์ ์ง์ํฉ๋๋ค.
๋ ์ง์ ์๊ฐ ๋ฌธ์์ด์ ๋ค๋ฃน๋๋ค.
- ๋จ์ํ ASN.1 ํฌ๋งท ๋ ์ง๋ฅผ time_t ํํ๋ก ๋ณํํฉ๋๋ค.
std::string๊ณผ ๋น์ทํ ๋ฌธ์์ด ํด๋์ค์ ๋๋ค.
- ๋ฉํฐ์ค๋๋๋ฅผ ์ํ ๋ฝ์ด ์์ต๋๋ค.
- std::map ๋ฑ์์ ํค๋ก ์ฌ์ฉํ ๋, std::string๋ณด๋ค ์ข์ ์ฑ๋ฅ์ ๊ฟ๊พธ์ด๋ด ๋๋ค.
Zlib ๋ํ ํด๋์ค์ ๋๋ค.
๊ตญ๊ฐ๋ณ ์ ํ๋ฒํธ ๊ธฐ๋ฐ ์ฌ์ ์ ๋๋ค.
URIParser ๋ํ ํด๋์ค์ ๋๋ค.
- RFC 3986์ ์ง์ ๊ตฌํํ๊ธฐ์...
๋ฌธ์์ด ํํฐ๋ฅผ ์ง์ํฉ๋๋ค.
- ์ ๊ท์์ ์ง์ํ์ง๋ง, std::regex๋ ์์ง(GCC-4.9) ์ ๋๋ก ๋์ํ์ง ์์ ๋ถ๋์ด ํ๊ฒ boost::regex๋ POSIX C์ regex๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ผ๊ณผ ๋ฉํฐํ๋ ์๋ฅผ ๋ค๋ฃน๋๋ค.
๋ฉํฐํ๋ ์ ์ธํฐํจ์ด์ค์ ๋๋ค.
- ํ์ฌ๋ POSIX select์ Linux epoll๋ง ๋ค๋ฃน๋๋ค.
- ๋ฉํฐ์ค๋๋ ํ๊ฒฝ์ ์ ํ ์์ ํ์ง ์์ต๋๋ค.
์ฌ๋ฌ๊ฐ์ง ์์ผ ์ ํธ๋ฆฌํฐ๋ฅผ ์ง์ํฉ๋๋ค.
- pw::IoPoller::Event๋ฅผ ์์ ๋ฐ์, ๋ฉํฐํ๋์์ ์ฐ๋ํ ์ ์์ต๋๋ค.
- pw::ChannelInterface์ ๋ถ๋ชจ ํด๋์ค์ ๋๋ค.
- connectํ ๋, ๋๋ฉ์ธ๋ค์์ผ๋ก ํธ์ถํ ๊ฒฝ์ฐ, ์ ์ ํ ์บ์๋ฐ๋ชฌ(nscd)๋ฅผ ์ฌ์ฉํ์ง ์์์ ๊ฒฝ์ฐ, DNS์ ๋ถํ๋ฅผ ์ค ์ ์์ต๋๋ค.
- ์ ๋นํ /etc/hosts์ ๋ฑ๋กํ๋ ๊ฒ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ฑ๋์์ ์ฌ์ฉํ๋ ๋ฒํผ์ ๋๋ค.
์์ผ ์ฃผ์๋ฅผ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
- IPv4, IPv6, UNIX ํ์ ์ ์ง์ํฉ๋๋ค.
IP ์ฃผ์๋ฅผ ๋ฒ์๋ณ๋ก ๋ฌถ์ด์ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
- IPv4/IPv6๋ฅผ ์ง์ํฉ๋๋ค.
- ๊ฐ๋จํ ACL์ด๋ GeoIP ๋ฑ์ผ๋ก ์์ฉํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ํจํท ์ธํฐํจ์ด์ค์ ๋๋ค.
๋ฆฌ์ค๋ ์ธํฐํจ์ด์ค์ ๋๋ค.
์์ฒด ํ๋กํ ์ฝ์ธ ๋ฉ์์ง ํฌ๋งท์ ๊ตฌํํ ๊ฒ์ ๋๋ค.
HTTP/1.x๋ฅผ ๊ตฌํํ ๊ฒ์ ๋๋ค.
APNS(Apple Push Notification Service) ํ๋กํ ์ฝ์ ๊ตฌํํ ๊ฒ์ ๋๋ค.
REDIS ํ๋กํ ์ฝ์ ๊ตฌํํ ๊ฒ์ ๋๋ค.
๊ฐ๋จํ ์ฑ๋ ํ์ ๊ตฌํํ ๊ฒ์ ๋๋ค.
OpenSSL EVP MD(Message Digest) ๋ํ ํด๋์ค์ ๋๋ค. ํด์๋ฅผ ๋ด๋นํ์ฃ .
OpenSSL EVP Cipher ๋ํ ํด๋์ค์ ๋๋ค.
OpenSSL SSL๊ณผ EVP ๋ํ ํด๋์ค์ ๋๋ค.
- ์ธ์ฆ์, ๋น๋ฐํค, ๊ณต๊ฐํค ๋ฑ์ ๋ค๋ฃน๋๋ค.
- SSL ์ธ์ ์ ๋ค๋ฃน๋๋ค.
๋ฐ๋ชฌ ๊ฐ๋ฐ ํ๋์์ํฌ์ด๋ฉฐ, ์ด๋ฅผ pw::Instance๋ผ๊ณ ์ด๋ฆ ๋ถ์์ต๋๋ค.
Job(ํธ๋์ญ์ )์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด์ ๋๋ค.
์๋ฒ๋ผ๋ฆฌ ์ ์ ์ ์ง ์ฐ๊ฒฐ์ ํ ๊ฒฝ์ฐ, ํด๋ผ์ด์ธํธ์ชฝ์์ ์ฌ์ฉํ๋ ์ฑ๋์ ๋๋ค.
๋ฉํฐ์ค๋๋์์ ์์ฐ์์ ์๋น์ ์ฌ์ด์ ์์ฒญ๊ณผ ์๋ต์ ๋ณด๋ด๊ธฐ ์ํ ํ์ดํ๋ผ์ธ์ ๋๋ค.
๋ฐ๋ชฌ ํ๋ก์ธ์ค ํ๋์์ํฌ์ ๋๋ค.
- ์ฑ๊ธํค ๊ฐ์ฒด๋ก ๋ฐ๋ชฌ์ด ์์ํด์, ํ๊ฒฝ์ค์ ์ฝ๊ธฐ, ๊ฐ์ฒด ์ด๊ธฐํ, ๋ฆฌ์ค๋ ๊ฐ๋ฐฉ, ๋ก๊ทธ ๊ด๋ฆฌ, ํ์ด๋จธ ๊ด๋ฆฌ, ํธ๋์ญ์ ๊ด๋ฆฌ ๋ฑ์ ํ๋ ๊ฐ์ฒด์ ๋๋ค.
- ์ธ์คํด์ค๋ main() ํจ์์์ start() ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ผ๋ก ์์ํ๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด๊ธฐํํ๋ค.
- OpenSSL ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ ์ด๊ธฐํ ํ๋ค.
- ํ์ฌ ํ๋ก์ธ์ค๊ฐ ์์์ธ์ง ํ์ธํ๋ค. ์ด ์์
์ ํฅํ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๊ณ , start() ํจ์๋ฅผ ๋ค์ ํธ์ถํ ๋, ๋ถ๋ชจ ํ๋ก์ธ์ค์์๋ง ์ด๊ธฐํํ ๋ด์ฉ์ ํฌํจํ๋ค.
- ๋ถ๋ชจ ํ๋ก์ธ์ค๋ผ๋ฉด ์๊ทธ๋ ์ฝ๋ฐฑ์ ์ค์ ํ๋ค.
- ์์คํ ์ ๋ณด๋ฅผ ์ฝ์ด์จ๋ค.
- loadConfig() ํจ์๋ฅผ ํธ์ถํ์ฌ ํ๊ฒฝ์ค์ ํ์ผ์ ์ด๊ณ , ์ค์ ํ์ผ์ ์ฝ๋๋ค.
- eventConfig() ๊ฐ์ํจ์๋ฅผ ํธ์ถํ๋ฉฐ, ์ต์ด ํธ์ถ์ธ์ง ์ฌ๋ถ๋ฅผ ์ธ์๋ก ๋๊ฒจ์ค๋ค.
- ์ฌ์ฉ์๋ ๊ฐ์ํจ์๋ฅผ ์์ ๋ฐ์ ๊ตฌํํ๋ค.
- eventInitLog() ๊ฐ์ํจ์๋ฅผ ํธ์ถํ๋ค.
- ์ฌ์ฉ์๋ ๊ฐ์ํจ์๋ฅผ ์์ ๋ฐ์ ์ถ๊ฐ๋ก๊ทธ ํ์ผ์ ์ด๊ธฐํํ๋ค.
- initializeLog() ํจ์๋ฅผ ์ด์ฉํ๋ฉด ์ผ์ ํ ํํ๋ก ์ฝ๊ฒ ๋ก๊ทธ๋ฅผ ์ด๊ธฐํํ ์ ์๋ค.
- ๊ธฐ๋ณธ์ผ๋ก ์ปค๋งจ๋๋ก๊ทธ์ ์๋ฌ๋ก๊ทธ๋ฅผ ์ด๊ธฐํํ๋ฉฐ, ์๋ฌ๋ก๊ทธ๋ Log::s_setLibrary() ํจ์ ํธ์ถ์ ํตํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฉ ๋ก๊ทธ๋ก ์๋ ์ค์ ํ๋ค.
- ๋ฉํฐํ๋ ์ IoPoller๋ฅผ ์์ฑํ๋ค.
- ํ๊ฒฝ์ค์ ์ ์ฃผ์ด์ง ๊ฐ์ผ๋ก ์ด๊ธฐํํ๋ค.
- ์ฃผ์ด์ง์ง ์์์ ๊ฒฝ์ฐ, epoll ํ๊ฒฝ์์ epoll์ ์ฌ์ฉํ๋ฉฐ, ๊ทธ์ธ๋ ๋ชจ๋ select๋ฅผ ์ฌ์ฉํ๋ค.
- eventInitChannel() ๊ฐ์ํจ์๋ฅผ ํธ์ถํ์ฌ, ๋ฏธ๋ฆฌ ์ ์ํด์ผํ ์ฑ๋์ ์ด๊ธฐํํ๋ค.
- ์ฌ์ฉ์๋ ๊ฐ์ํจ์๋ฅผ ์์๋ฐ์ ๊ตฌํํ๋ค.
- ๋ณดํต MultiChannelInterface๋ฅผ ์์๋ฐ์ ์ฑ๋์ ์ด๊ธฐํํ๋ค.
- eventInitListener() ๊ฐ์ํจ์๋ฅผ ํธ์ถํ์ฌ, ๋ฆฌ์ค๋๋ฅผ ์ด๊ธฐํํ๋ค.
- ํ๋ก์ธ์ค ๊ตฌํ์ ๋ฐ๋ผ ๊ตฌ๋ถํ๊ธฐ ํธํ๋๋ก eventInitListener() ๊ฐ์ํจ์๋ ์๋ ์ธ ๊ฐ์ํจ์๋ฅผ ์ ๋ณํ์ฌ ํธ์ถํ๋ค.
- eventInitListenerSingle() ์ฑ๊ธ ํ๋ก์ธ์ค์ผ ๊ฒฝ์ฐ ํธ์ถํ๋ค.
- eventInitListenerParent() ๋ถ๋ชจ ํ๋ก์ธ์ค์ผ ๊ฒฝ์ฐ ํธ์ถํ๋ค.
- eventInitListenerChild() ์์ ํ๋ก์ธ์ค์ผ ๊ฒฝ์ฐ ํธ์ถํ๋ค.
- ์ฌ์ฉ์๋ ๊ฐ๋ฅํ๋ฉด ์ ์ธ ๊ฐ์ํจ์๋ฅผ ์์๋ฐ์ ๊ตฌํํ๋ค.
- ํ๋ก์ธ์ค ๊ตฌํ์ ๋ฐ๋ผ ๊ตฌ๋ถํ๊ธฐ ํธํ๋๋ก eventInitListener() ๊ฐ์ํจ์๋ ์๋ ์ธ ๊ฐ์ํจ์๋ฅผ ์ ๋ณํ์ฌ ํธ์ถํ๋ค.
- ์์ ํ๋ก์ธ์ค๊ฐ ํ์ํ์ง ํ์ธํ์ฌ, ์์ ํ๋ก์ธ์ค๋ฅผ ์ด๊ธฐํํ๋ ์์
์ ์์ํ๋ค.
- eventInitChild() ๊ฐ์ํจ์๋ฅผ ํธ์ถํ์ฌ, ์์ ํ๋ก์ธ์ค๋ฅผ forkํ๋ค.
- InstanceInterface::fork() ํจ์๋ ์์คํ fork()ํจ์๋ฅผ ํธ์ถํ๋ฉฐ, ์์๊ณผ ๋ถ๋ชจ์ฌ์ด์ ํต์ ์ ์ํด socketpair๋ฅผ ์์ฑํ๋ค.
- ์์ ํ๋ก์ธ์ค์์๋ eventForkChild() ๊ฐ์ํจ์ ํธ์ถํ๋ค.
- eventForChild()๋ cleanUpForChild()๋ฅผ ํธ์ถํ์ฌ, eventForkCleanUp์ผ๋ก ์์ํ๋ ๊ฐ์ํจ์๋ฅผ ํธ์ถํ๋ค.
- ์ด๋ค์ด ๊ธฐ๋ณธ์ผ๋ก ํ๋ ์ผ์ ๋ถ๋ชจ๋ก๋ถํฐ ๋ณต์ ํ ๊ฐ์ข ํ์ผ ๋์คํฌ๋ฆฝํฐ ๋ฑ ๋ฆฌ์์ค๋ฅผ ์ ๋ฆฌํ๋ ์ผ์ด๋ค.
- start() ํจ์๋ฅผ ํธ์ถํ์ฌ, ์์ ํ๋ก์ธ์ค๋ 3๋ฒ๋ถํฐ ์ฌ์์ํ๋ค. (์์๋์์ Child loop...๋ก ํํํ์๋ค)
- ์์ ํ๋ก์ธ์ค๋ฅผ ์ ์ ์ข ๋ฃํ ๊ฒฝ์ฐ, eventExitChild()๋ฅผ ํธ์ถํ๋ค.
- eventInitChild() ๊ฐ์ํจ์๋ฅผ ํธ์ถํ์ฌ, ์์ ํ๋ก์ธ์ค๋ฅผ forkํ๋ค.
- eventInitTimer() ๊ฐ์ํจ์๋ฅผ ํธ์ถํ์ฌ, ํ์ด๋จธ ์ด๋ฒคํธ๋ฅผ ์ด๊ธฐํํ๋ค.
- ์ฌ์ฉ์๋ ๊ฐ์ํจ์๋ฅผ ์์๋ฐ์ ๊ตฌํํ๋ค.
- ์ ์ญ์์ ์ฌ์ฉํ ํ์ด๋จธ๋ฅผ ๋ฑ๋กํ๋ ๊ฒ์ด ์ข๋ค.
- eventInitExtras() ๊ฐ์ํจ์๋ฅผ ํธ์ถํ์ฌ, ํ๋ ์์ํฌ์์ ๋ฏธ๋ฆฌ ์ ์ํ์ง ์์ ๊ธฐํ ๋ชจ๋์ ์ด๊ธฐํํ๋ค.
- ์ฌ์ฉ์๋ ๊ฐ์ํจ์๋ฅผ ์์๋ฐ์ ๊ตฌํํ๋ค.
- ์คํ ํ๋๊ทธ๊ฐ ์ฐธ์ธ์ง ํ์ธํ๋ค.
- ๊ฑฐ์ง์ด๋ผ๋ฉด, eventExit() ๊ฐ์ํจ์๋ฅผ ํธ์ถํ๊ณ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ๋ค.
- USR1, USR2 ์๊ทธ๋์ ๋ฐ์ผ๋ฉด, ์คํ ํ๋๊ทธ์ ๊ฑฐ์ง์ผ๋ก ์ค์ ํ์ฌ ํ๋ก์ธ์ค ์ข ๋ฃ๋ฅผ ๊พํ๋ค.
- ์์ ํ๋ก์ธ์ค๊ฐ ์ฃฝ์๋์ง ํ์ธํ๋ค.
- CHLD ์๊ทธ๋์ ๋ฐ์ผ๋ฉด, ์์ ํ๋ก์ธ์ค์ ๋ํด ์์คํ wait()์ ํธ์ถํ์ฌ ์ฃฝ์ ํ๋ก์ธ์ค๋ฅผ ๋ชจ๋ ๊ฒ์ถํ๋ค.
- ์ฃฝ์ ํ๋ก์ธ์ค์ ๋ฌผ๋ ค ์๋ socketpair๋ฅผ ์ ๋ฆฌํ๋ค.
- fork()-eventForkChild()-... ๋ฑ์ ํตํด ์์ ํ๋ก์ธ์ค๋ฅผ ๋ค์ ๋ง๋ ๋ค. (9๋ฒ ์ฐธ์กฐ)
- ํ๊ฒฝ์ค์ ์ ๋ค์ ์ฝ์ด์ผํ๋์ง ํ์ธํ๋ค.
- ํ์ด๋จธ๊ฐ ์ผ์ ์๊ฐ๋ง๋ค ํ๋๊ทธ๋ฅผ ์ค์ ํ๋ค.
- HUP ์๊ทธ๋์ ๋ฐ์ผ๋ฉด ํ๋๊ทธ๋ฅผ ์ค์ ํ๋ค.
- eventConfig() ๊ฐ์ํจ์๋ฅผ ํธ์ถํ๋ค.
- ๋ฉํฐํ๋ ์์ ์ด๋ฒคํธ๋ฅผ ํ์ธํ๊ณ , ์ด๋ฒคํธ๋ฅผ ํด๋น ๊ฐ์ฒด์ ์ ๋ฌํ๋ค.
- IoPoller::Client::eventIo() ๊ฐ์ํจ์๋ฅผ ํธ์ถํ๋ค.
- ๋๋ถ๋ถ์ ์ฌ์ฉ์๋ ์ด ๊ฐ์ํจ์๋ฅผ ์์๋ฐ์ ์ผ์ด ์๋ค.
- Job๊ฐ์ฒด์์ ํ์์์์ด ๋ฐ์ํ๋์ง ํ์ธํ๋ค.
- Job::eventTimeout() ๊ฐ์ํจ์๋ฅผ ํธ์ถํ๋ค.
- ํ์ด๋จธ ์ด๋ฒคํธ๋ฅผ ํ์ธํ๊ณ , ์ด๋ฒคํธ๋ฅผ ํด๋น ๊ฐ์ฒด์ ์ ๋ฌํ๋ค.
- Timer::Event::eventTimer() ๊ฐ์ํจ์๋ฅผ ํธ์ถํ๋ค.
- eventEndTurn() ๊ฐ์ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ฃจํ๋ฅผ ํ ๋ฒ ์คํํ๋ค๋ ๊ฒ์ ์๋ฆฐ๋ค.
- ์ฌ์ฉ์๋ ๊ฐ์ํจ์๋ฅผ ์์๋ฐ์ ๊ตฌํํ๋ค.
- 12๋ฒ์ผ๋ก ์ด๋ํ๋ค.
๋ณต์กํด ๋ณด์ด์ง๋ง, ์ฌ์ฉ์๋ ์ด ์ ๋ถ๋ฅผ ์ดํดํ ํ์๊ฐ ์์ต๋๋ค~