Skip to content

SKplanet/libpw

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

52 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

#PW ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๊ฐœ์š”

  • PW ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” C++11 ํ‘œ์ค€์œผ๋กœ ์ž‘์„ฑํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ธํŠธ์ž…๋‹ˆ๋‹ค.
    • ๊ธฐ์กด QT, ACE ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋‹ฌ๋ฆฌ ํƒ€์ž… ์žฌ์ •์˜๋ฅผ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ๋ชจ๋“  ํ˜•ํƒœ์˜ ์• ํ”Œ๋ฆฌ์บ์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํ”„๋ž˜์ž„์›Œํฌ๋Š” ์•„๋‹ˆ๋ฉฐ, ๋งค์šฐ ์ œํ•œ์ ์ธ ํ˜•ํƒœ๋ฅผ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ๋ชฌ์„ ๊ฐœ๋ฐœํ•  ๋•Œ, ์ œ๋ฒ• ์ž˜ ์ •๋ˆํ•œ ํ”„๋ž˜์ž„์›Œํฌ๋กœ, ๊ฐœ๋ฐœ์ž๋Š” ๋กœ์ง์—๋งŒ ์ง‘์ค‘ํ•˜๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ์ง‘์ค‘๋ ฅ ํ–ฅ์ƒ ํ”„๋กœ๊ทธ๋žจ์€ ์•„๋‹™๋‹ˆ๋‹ค.
  • ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค+์‹ฑ๊ธ€์Šค๋ž˜๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ๋‹จ, ๋งค์šฐ ์ œํ•œ์ ์œผ๋กœ ๋ฉ€ํ‹ฐ์Šค๋ž˜๋“œ๋„ ์ง€์›ํ•˜์ง€๋งŒ, ๋งค์šฐ ๊นŒ๋‹ค๋กœ์šธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉํ™˜๊ฒฝ

์ €์žฅ์†Œ

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 { }
}

๊ณต์šฉ

common

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ „์ฒด์—์„œ ์‚ฌ์šฉํ•  ํƒ€์ž…(๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜• ...)์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • HTTP์‘๋‹ต์ฝ”๋“œ์„ ๋นŒ๋ ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‘๋‹ต์ฝ”๋“œ(ResultCode)๋กœ ์ •์˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ํ˜ธ์ŠคํŠธ ์ •๋ณด(host_type)๋‚˜, ํฌ์ธํ„ฐ์™€ ๊ธธ์ด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ์ฒด(blob_type) ๋“ฑ์„ ์ •์˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ๊ธฐํƒ€ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ํƒ€์ž…์„ ์ •์˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • ๊ฐ€๋Šฅํ•˜๋ฉด ๋ฏธ๋ฆฌ ์ •์˜ํ•œ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ, ๋ปฅํŠ€๊ธฐ(code-bloat)๋ฅผ ์ค„์—ฌ๋ด…์‹œ๋‹ค!
    • ๊ทธ๋Ÿฌ๋‚˜ ์š”์ฆ˜ C++ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” -O3 ์˜ต์…˜์— ์ตœ์ ํ™”๋ฅผ ์ œ๋ฒ• ์ž˜ ์ˆ˜ํ–‰ํ•˜๋‹ˆ, ๋„ˆ๋ฌด ์ŠคํŠธ๋ ˆ์Šค๋Š” ๋ฐ›์ง€ ๋งˆ์„ธ์š”.

์‹œ์Šคํ…œ

๊ณต์šฉ์— ๊ฐ€๊น์ง€๋งŒ, ๋‹ค์†Œ ์• ๋งคํ•˜์—ฌ ๋‹ฌ๋ฆฌ ๋ถ„๋ฅ˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

exception

์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

log

๊ฐ„๋‹จํ•œ ๋กœ๊ทธ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

  • ๋‚ ์งœ๋ณ„, ์‹œ๊ฐ„๋ณ„๋กœ ๋กœ๊ทธํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์ตœ๊ทผ ๋กœ๊ทธ๋Š” ํ•˜๋“œ๋งํฌ๋ฅผ ์ƒ์„ฑํ•˜๋‹ˆ, ๋กœ๊ทธ ๊ฐ์‹œ ์Šคํฌ๋ฆฝํŠธ ๋งŒ๋“ค ๋•Œ ์ž˜ ์จ๋ด…์‹œ๋‹ค.
  • ๋‚˜๋ฆ„ ๋ ˆ๋ฒจ์— ๋”ฐ๋ฅธ ์ถœ๋ ฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

timer

๊ฐ„๋‹จํ•œ ํƒ€์ด๋จธ์ž…๋‹ˆ๋‹ค.

  • ๊ฐ ํƒ€์ด๋จธ ์ด๋ฒคํŠธ ๊ฐ์ฒด(pw::Timer::Event)๋ฅผ ์ƒ์† ๋ฐ›์•„, ๊ฐ์ข… ๋กœ์ง๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sysinfo

์‹œ์Šคํ…œ ์ •๋ณด๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • OS, ํ˜ธ์ŠคํŠธ ์ด๋ฆ„, CPU, NIC, ๋ฉ”๋ชจ๋ฆฌ, ํŒŒ์ผ์‹œ์Šคํ…œ ์ •๋ณด๋ฅผ ๊ฐ„๋‹จํžˆ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๋Ÿฌํ•œ ์ž˜ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ, ํ•ด์‹œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์•”ํ˜ธํ™”์ชฝ์— ์‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

module

๊ณต์œ ๊ฐ์ฒด(Shared object, ์œˆ๋„์šฐ์ฆˆ ํ™˜๊ฒฝ์—์„œ DLL๋กœ ๋ถˆ๋ฆฌ์šฐ๋Š” ๊ทธ๊ฒƒ์ด์ฃ )๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • ํ”„๋ž˜์ž„์›Œํฌ์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.
    • ๋ฏธ๋ฆฌ ์ •์˜ํ•œ ํ•จ์ˆ˜ ์ด๋ฆ„์œผ๋กœ SO ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด, ํ”Œ๋Ÿฌ๊ทธ์ธ ๋“ฑ์œผ๋กœ ์‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด

๋ฌธ์ž์—ด์„ ๋‹ค๋ฃจ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ์ž…๋‹ˆ๋‹ค.

string

std::string, std::stream ๊ฐ์ฒด๋ฅผ ์ ๊ทน ํ™œ์šฉํ•œ ์žก๋‹คํ•œ ๋ฌธ์ž์—ด ์œ ํ‹ธ๋ฆฌํ‹ฐ์ž…๋‹ˆ๋‹ค.

tokenizer

๋ฌธ์ž์—ด์„ ํŠน์ • ๋ฌธ์ž๋กœ ์ž๋ฅด๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

ini

INI ํŒŒ์ผ ํ˜•์‹์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฝ๊ณ  ์”๋‹ˆ๋‹ค.

  • ์ฝ์„ ๋•Œ, ์ฃผ์„ ๋“ฑ์€ ๊ฐ€๋ณ๊ฒŒ ๋ฌด์‹œํ•˜๋‹ˆ ์ฃผ์˜ํ•˜์„ธ์š”.
  • XML/DOM์ฒ˜๋Ÿผ ์ „์ฒด๋ฅผ ์ฝ๊ณ , ์„น์…˜๊ณผ ์•„์ดํ…œ ์ด๋ฆ„์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • XML/SAX์ฒ˜๋Ÿผ ์ด๋ฒคํŠธ ๋ฐฉ์‹๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

encode

๋ฌธ์ž์—ด ์ธ์ฝ”๋”ฉ/๋””์ฝ”๋”ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

URL ์ธ์ฝ”๋”ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Hexa ์ธ์ฝ”๋”ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Base64 ์ธ์ฝ”๋”ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Escape ์ธ์ฝ”๋”ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

date

๋‚ ์งœ์™€ ์‹œ๊ฐ„ ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

  • ๋‹จ์ˆœํžˆ ASN.1 ํฌ๋งท ๋‚ ์งœ๋ฅผ time_t ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

key

std::string๊ณผ ๋น„์Šทํ•œ ๋ฌธ์ž์—ด ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

  • ๋ฉ€ํ‹ฐ์Šค๋ž˜๋“œ๋ฅผ ์œ„ํ•œ ๋ฝ์ด ์—†์Šต๋‹ˆ๋‹ค.
  • std::map ๋“ฑ์—์„œ ํ‚ค๋กœ ์‚ฌ์šฉํ•  ๋•Œ, std::string๋ณด๋‹ค ์ข‹์€ ์„ฑ๋Šฅ์„ ๊ฟˆ๊พธ์–ด๋ด…๋‹ˆ๋‹ค.

compress

Zlib ๋ž˜ํ•‘ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

region

๊ตญ๊ฐ€๋ณ„ ์ „ํ™”๋ฒˆํ˜ธ ๊ธฐ๋ฐ˜ ์‚ฌ์ „์ž…๋‹ˆ๋‹ค.

uri

URIParser ๋ž˜ํ•‘ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

  • RFC 3986์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ธฐ์—”...

strfltr

๋ฌธ์ž์—ด ํ•„ํ„ฐ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • ์ •๊ทœ์‹์„ ์ง€์›ํ•˜์ง€๋งŒ, std::regex๋Š” ์•„์ง(GCC-4.9) ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์•„ ๋ถ€๋“์ด ํ•˜๊ฒŒ boost::regex๋‚˜ POSIX C์˜ regex๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ

์†Œ์ผ“๊ณผ ๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

iopoller

๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ ์ธํ„ฐํŒจ์ด์Šค์ž…๋‹ˆ๋‹ค.

  • ํ˜„์žฌ๋Š” POSIX select์™€ Linux epoll๋งŒ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
  • ๋ฉ€ํ‹ฐ์Šค๋ž˜๋“œ ํ™˜๊ฒฝ์— ์ „ํ˜€ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

socket

์—ฌ๋Ÿฌ๊ฐ€์ง€ ์†Œ์ผ“ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • pw::IoPoller::Event๋ฅผ ์ƒ์† ๋ฐ›์•„, ๋ฉ€ํ‹ฐํ”Œ๋ž™์„œ์™€ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • pw::ChannelInterface์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
  • connectํ•  ๋•Œ, ๋„๋ฉ”์ธ๋„ค์ž„์œผ๋กœ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ, ์ ์ ˆํ•œ ์บ์‹œ๋ฐ๋ชฌ(nscd)๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ, DNS์— ๋ถ€ํ•˜๋ฅผ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ ๋‹นํžˆ /etc/hosts์— ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ๋„ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

iobuffer

์ฑ„๋„์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ„ํผ์ž…๋‹ˆ๋‹ค.

sockaddr

์†Œ์ผ“ ์ฃผ์†Œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

  • IPv4, IPv6, UNIX ํƒ€์ž…์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

iprange

IP ์ฃผ์†Œ๋ฅผ ๋ฒ”์œ„๋ณ„๋กœ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

  • IPv4/IPv6๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ„๋‹จํ•œ ACL์ด๋‚˜ GeoIP ๋“ฑ์œผ๋กœ ์‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

packet_if

๊ธฐ๋ณธ ํŒจํ‚ท ์ธํ„ฐํŒจ์ด์Šค์ž…๋‹ˆ๋‹ค.

listener_if

๋ฆฌ์Šค๋„ˆ ์ธํ„ฐํŒจ์ด์Šค์ž…๋‹ˆ๋‹ค.

msgpacket, msgchannel

์ž์ฒด ํ”„๋กœํ† ์ฝœ์ธ ๋ฉ”์‹œ์ง€ ํฌ๋งท์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

httppacket, httpchannel

HTTP/1.x๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

apnspacket, apnschannel

APNS(Apple Push Notification Service) ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

redispacket, redischannel

REDIS ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

simplechpool

๊ฐ„๋‹จํ•œ ์ฑ„๋„ ํ’€์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•”ํ˜ธํ™”

digest

OpenSSL EVP MD(Message Digest) ๋ž˜ํ•‘ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ํ•ด์‹œ๋ฅผ ๋‹ด๋‹นํ•˜์ฃ .

crypto

OpenSSL EVP Cipher ๋ž˜ํ•‘ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

ssl

OpenSSL SSL๊ณผ EVP ๋ž˜ํ•‘ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

  • ์ธ์ฆ์„œ, ๋น„๋ฐ€ํ‚ค, ๊ณต๊ฐœํ‚ค ๋“ฑ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
  • SSL ์„ธ์…˜์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค

๋ฐ๋ชฌ ๊ฐœ๋ฐœ ํ”„๋ž˜์ž„์›Œํฌ์ด๋ฉฐ, ์ด๋ฅผ pw::Instance๋ผ๊ณ  ์ด๋ฆ„ ๋ถ™์˜€์Šต๋‹ˆ๋‹ค.

jobmanager

Job(ํŠธ๋žœ์žญ์…˜)์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

multichannel_if

์„œ๋ฒ„๋ผ๋ฆฌ ์ ‘์† ์œ ์ง€ ์—ฐ๊ฒฐ์„ ํ•  ๊ฒฝ์šฐ, ํด๋ผ์ด์–ธํŠธ์ชฝ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฑ„๋„์ž…๋‹ˆ๋‹ค.

concurrentqueue_if

๋ฉ€ํ‹ฐ์Šค๋ž˜๋“œ์—์„œ ์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž ์‚ฌ์ด์— ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ํŒŒ์ดํ”„๋ผ์ธ์ž…๋‹ˆ๋‹ค.

instance_if

๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค ํ”„๋ž˜์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.

  • ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๋กœ ๋ฐ๋ชฌ์ด ์‹œ์ž‘ํ•ด์„œ, ํ™˜๊ฒฝ์„ค์ • ์ฝ๊ธฐ, ๊ฐ์ฒด ์ดˆ๊ธฐํ™”, ๋ฆฌ์Šค๋„ˆ ๊ฐœ๋ฐฉ, ๋กœ๊ทธ ๊ด€๋ฆฌ, ํƒ€์ด๋จธ ๊ด€๋ฆฌ, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋“ฑ์„ ํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

ํ”„๋ž˜์ž„์›Œํฌ

์ธ์Šคํ„ด์Šค

  1. ์ธ์Šคํ„ด์Šค๋Š” main() ํ•จ์ˆ˜์—์„œ start() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•œ๋‹ค.
  2. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
    1. OpenSSL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ์„ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.
  3. ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹์ธ์ง€ ํ™•์ธํ•œ๋‹ค. ์ด ์ž‘์—…์€ ํ–ฅํ›„ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , start() ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•  ๋•Œ, ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์—์„œ๋งŒ ์ดˆ๊ธฐํ™”ํ•  ๋‚ด์šฉ์„ ํฌํ•จํ•œ๋‹ค.
    1. ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋ผ๋ฉด ์‹œ๊ทธ๋„ ์ฝœ๋ฐฑ์„ ์„ค์ •ํ•œ๋‹ค.
    2. ์‹œ์Šคํ…œ ์ •๋ณด๋ฅผ ์ฝ์–ด์˜จ๋‹ค.
  4. loadConfig() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ™˜๊ฒฝ์„ค์ • ํŒŒ์ผ์„ ์—ด๊ณ , ์„ค์ • ํŒŒ์ผ์„ ์ฝ๋Š”๋‹ค.
    1. eventConfig() ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ, ์ตœ์ดˆ ํ˜ธ์ถœ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ์ธ์ž๋กœ ๋„˜๊ฒจ์ค€๋‹ค.
    2. ์‚ฌ์šฉ์ž๋Š” ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ์ƒ์† ๋ฐ›์•„ ๊ตฌํ˜„ํ•œ๋‹ค.
  5. eventInitLog() ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
    1. ์‚ฌ์šฉ์ž๋Š” ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ์ƒ์† ๋ฐ›์•„ ์ถ”๊ฐ€๋กœ๊ทธ ํŒŒ์ผ์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
    2. initializeLog() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ์ผ์ •ํ•œ ํ˜•ํƒœ๋กœ ์‰ฝ๊ฒŒ ๋กœ๊ทธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
    3. ๊ธฐ๋ณธ์œผ๋กœ ์ปค๋งจ๋“œ๋กœ๊ทธ์™€ ์—๋Ÿฌ๋กœ๊ทธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋ฉฐ, ์—๋Ÿฌ๋กœ๊ทธ๋Š” Log::s_setLibrary() ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ†ตํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์šฉ ๋กœ๊ทธ๋กœ ์ž๋™ ์„ค์ •ํ•œ๋‹ค.
  6. ๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ IoPoller๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    1. ํ™˜๊ฒฝ์„ค์ •์— ์ฃผ์–ด์ง„ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
    2. ์ฃผ์–ด์ง€์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ, epoll ํ™˜๊ฒฝ์—์„œ epoll์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ทธ์™ธ๋Š” ๋ชจ๋‘ select๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  7. eventInitChannel() ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ, ๋ฏธ๋ฆฌ ์ ‘์†ํ•ด์•ผํ•  ์ฑ„๋„์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
    1. ์‚ฌ์šฉ์ž๋Š” ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„ํ•œ๋‹ค.
    2. ๋ณดํ†ต MultiChannelInterface๋ฅผ ์ƒ์†๋ฐ›์€ ์ฑ„๋„์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
  8. eventInitListener() ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ, ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
    1. ํ”„๋กœ์„ธ์Šค ๊ตฌํ˜„์— ๋”ฐ๋ผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ํŽธํ•˜๋„๋ก eventInitListener() ๊ฐ€์ƒํ•จ์ˆ˜๋Š” ์•„๋ž˜ ์„ธ ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ์„ ๋ณ„ํ•˜์—ฌ ํ˜ธ์ถœํ•œ๋‹ค.
      1. eventInitListenerSingle() ์‹ฑ๊ธ€ ํ”„๋กœ์„ธ์Šค์ผ ๊ฒฝ์šฐ ํ˜ธ์ถœํ•œ๋‹ค.
      2. eventInitListenerParent() ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์ผ ๊ฒฝ์šฐ ํ˜ธ์ถœํ•œ๋‹ค.
      3. eventInitListenerChild() ์ž์‹ ํ”„๋กœ์„ธ์Šค์ผ ๊ฒฝ์šฐ ํ˜ธ์ถœํ•œ๋‹ค.
    2. ์‚ฌ์šฉ์ž๋Š” ๊ฐ€๋Šฅํ•˜๋ฉด ์œ„ ์„ธ ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„ํ•œ๋‹ค.
  9. ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ์ง€ ํ™•์ธํ•˜์—ฌ, ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ž‘์—…์„ ์‹œ์ž‘ํ•œ๋‹ค.
    1. eventInitChild() ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ, ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ forkํ•œ๋‹ค.
      1. InstanceInterface::fork() ํ•จ์ˆ˜๋Š” ์‹œ์Šคํ…œ fork()ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ, ์ž์‹๊ณผ ๋ถ€๋ชจ์‚ฌ์ด์— ํ†ต์‹ ์„ ์œ„ํ•ด socketpair๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
      2. ์ž์‹ ํ”„๋กœ์„ธ์Šค์—์„œ๋Š” eventForkChild() ๊ฐ€์ƒํ•จ์ˆ˜ ํ˜ธ์ถœํ•œ๋‹ค.
        1. eventForChild()๋Š” cleanUpForChild()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ, eventForkCleanUp์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
        2. ์ด๋“ค์ด ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๋Š” ์ผ์€ ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ ๋ณต์ œํ•œ ๊ฐ์ข… ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ๋“ฑ ๋ฆฌ์†Œ์Šค๋ฅผ ์ •๋ฆฌํ•˜๋Š” ์ผ์ด๋‹ค.
      3. start() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ, ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” 3๋ฒˆ๋ถ€ํ„ฐ ์žฌ์‹œ์ž‘ํ•œ๋‹ค. (์ˆœ์„œ๋„์—์„œ Child loop...๋กœ ํ‘œํ˜„ํ•˜์˜€๋‹ค)
      4. ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ •์ƒ ์ข…๋ฃŒํ•  ๊ฒฝ์šฐ, eventExitChild()๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  10. eventInitTimer() ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ, ํƒ€์ด๋จธ ์ด๋ฒคํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
    1. ์‚ฌ์šฉ์ž๋Š” ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„ํ•œ๋‹ค.
    2. ์ „์—ญ์—์„œ ์‚ฌ์šฉํ•  ํƒ€์ด๋จธ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  11. eventInitExtras() ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ, ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋ฏธ๋ฆฌ ์ •์˜ํ•˜์ง€ ์•Š์€ ๊ธฐํƒ€ ๋ชจ๋“ˆ์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
    1. ์‚ฌ์šฉ์ž๋Š” ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„ํ•œ๋‹ค.
  12. ์‹คํ–‰ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ฐธ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
    1. ๊ฑฐ์ง“์ด๋ผ๋ฉด, eventExit() ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค.
    2. USR1, USR2 ์‹œ๊ทธ๋„์„ ๋ฐ›์œผ๋ฉด, ์‹คํ–‰ ํ”Œ๋ž˜๊ทธ์„ ๊ฑฐ์ง“์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ๋ฅผ ๊พ€ํ•œ๋‹ค.
  13. ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃฝ์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
    1. CHLD ์‹œ๊ทธ๋„์„ ๋ฐ›์œผ๋ฉด, ์ž์‹ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด ์‹œ์Šคํ…œ wait()์„ ํ˜ธ์ถœํ•˜์—ฌ ์ฃฝ์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ชจ๋‘ ๊ฒ€์ถœํ•œ๋‹ค.
    2. ์ฃฝ์€ ํ”„๋กœ์„ธ์Šค์— ๋ฌผ๋ ค ์žˆ๋˜ socketpair๋ฅผ ์ •๋ฆฌํ•œ๋‹ค.
    3. fork()-eventForkChild()-... ๋“ฑ์„ ํ†ตํ•ด ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ ๋‹ค. (9๋ฒˆ ์ฐธ์กฐ)
  14. ํ™˜๊ฒฝ์„ค์ •์„ ๋‹ค์‹œ ์ฝ์–ด์•ผํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
    1. ํƒ€์ด๋จธ๊ฐ€ ์ผ์ •์‹œ๊ฐ„๋งˆ๋‹ค ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•œ๋‹ค.
    2. HUP ์‹œ๊ทธ๋„์„ ๋ฐ›์œผ๋ฉด ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•œ๋‹ค.
    3. eventConfig() ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  15. ๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ์— ์ด๋ฒคํŠธ๋ฅผ ํ™•์ธํ•˜๊ณ , ์ด๋ฒคํŠธ๋ฅผ ํ•ด๋‹น ๊ฐ์ฒด์— ์ „๋‹ฌํ•œ๋‹ค.
    1. IoPoller::Client::eventIo() ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
    2. ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๋Š” ์ด ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ์ƒ์†๋ฐ›์„ ์ผ์ด ์—†๋‹ค.
  16. Job๊ฐ์ฒด์—์„œ ํƒ€์ž„์•„์›ƒ์ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
    1. Job::eventTimeout() ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  17. ํƒ€์ด๋จธ ์ด๋ฒคํŠธ๋ฅผ ํ™•์ธํ•˜๊ณ , ์ด๋ฒคํŠธ๋ฅผ ํ•ด๋‹น ๊ฐ์ฒด์— ์ „๋‹ฌํ•œ๋‹ค.
    1. Timer::Event::eventTimer() ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  18. eventEndTurn() ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฃจํ”„๋ฅผ ํ•œ ๋ฒˆ ์‹คํ–‰ํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ฆฐ๋‹ค.
    1. ์‚ฌ์šฉ์ž๋Š” ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„ํ•œ๋‹ค.
  19. 12๋ฒˆ์œผ๋กœ ์ด๋™ํ•œ๋‹ค.

๋ณต์žกํ•ด ๋ณด์ด์ง€๋งŒ, ์‚ฌ์šฉ์ž๋Š” ์ด ์ „๋ถ€๋ฅผ ์ดํ•ดํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค~

Releases

No releases published

Packages

No packages published

Languages