๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

์•ž์„œ ํ•„์š”ํ•œ ๋ฐฐ๊ฒฝ๋“ค์— ๋Œ€ํ•ด์„œ ์–ด๋Š์ •๋„ ์‚ดํŽด๋ณด๊ณ  ๋‚˜๋‹ˆ ๊ด€๋ จ๋œ ์ž๋ฃŒ๋“ค์„ ๋ณด๋Š”๋ฐ ํ›จ์”ฌ ์ˆ˜์›”ํ•จ์„ ๋Š๊ผˆ๋‹ค. ์‚ฌ์‹ค asyncio์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ = ๋ฐฐ๊ฒฝ์ง€์‹ ๊ณต๋ถ€ํ•˜๊ธฐ ์ด๊ฒƒ์ธ ๊ฒƒ ๊ฐ™๋‹ค. ์•„์ง ๋ถ€์กฑํ•œ ๊ฐœ๋…๋“ค์€ ์ถ”ํ›„ ํ•„์š”ํ•œ ๋ฐฐ๊ฒฝ์ง€์‹ ์‹œ๋ฆฌ์ฆˆ๋กœ ์ž‘์„ฑํ•ด๋ณด๋„๋ก ํ• ๊ฒƒ์ด๋‹ค. 1. Asyncio๋ž€? - ์ผ๋‹จ Async (๋น„๋™๊ธฐ) + input/output (์ž…์ถœ๋ ฅ) ์ด๋ผ๋Š” ๋œป์ด๋‹ค. - ๋น„๋™๊ธฐ๋ผ๋Š” ๊ฒƒ์€ ์ด๋ฏธ์ง€๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. - ๋™๊ธฐ๋Š” ์ž‘์—…1์ด ๋๋‚˜๋Š” ๊ฒƒ์„ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์ž‘์—…2๋ฅผ ํ•˜๋Š” ๋ฐ˜๋ฉด ๋น„๋™๊ธฐ๋Š” ์ž‘์—…1์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ ์ž‘์—…2๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€์‹œ์ ์œผ๋กœ๋งŒ ๋ด๋„ ์‹œ๊ฐ„์ด ํ˜„์ €ํžˆ ์ ˆ์•ฝ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. - ๊ทธ๋Ÿผ ์™œ io(์ž…์ถœ๋ ฅ)์ด๋ƒ๋ฉด CPU๊ฐ€ ํ•˜์œ„์˜ ๋ฉ”๋ชจ๋ฆฌ ์žฅ์น˜๋“ค๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ์†๋„ ์ฐจ์ด๋กœ ์ธํ•ด CPU์˜ ์ž‘์—…..
1. ์“ฐ๋ ˆ๋“œ (Thread)๋ž€? - ํ”„๋กœ๊ทธ๋žจ(ํ”„๋กœ์„ธ์Šค)์˜ ์‹คํ–‰ ๋‹จ์œ„์ด๋ฉฐ, ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. - ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๋“ค์€ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ, ์ž์› ๋“ฑ์„ ๊ณต์œ ํ•œ๋‹ค. - ํ”„๋กœ์„ธ์Šค์™€ ๊ฐ™์ด ์‹คํ–‰, ์ค€๋น„, ๋Œ€๊ธฐ ๋“ฑ์˜ ์‹คํ–‰ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๋ฉฐ ์‹คํ–‰ ์ƒํƒœ๊ฐ€ ๋ณ€ํ• ๋•Œ๋งˆ๋‹ค ์“ฐ๋ ˆ๋“œ ๋ฌธ๋งฅ๊ตํ™˜(context switching)์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. - ๊ฐ ์“ฐ๋ ˆ๋“œ๋ณ„๋กœ ์ž์‹ ๋งŒ์˜ ์Šคํƒ๊ณผ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๊ฐ€์ง„๋‹ค. 2. ํ”„๋กœ์„ธ์Šค ์™€ ์“ฐ๋ ˆ๋“œ (1) Process - ํ”„๋กœ์„ธ์Šค๋Š” ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜์–ด ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ CPU์˜ ์‹œ์Šคํ…œ ์ž์›์„ ํ• ๋‹น ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. (2) Thread - ์“ฐ๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ๋‹จ์œ„๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. - ํ•œ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๋™์ž‘๋˜๋Š” ์—ฌ๋Ÿฌ ์‹คํ–‰ ํ๋ฆ„..
asyncio๋ฅผ ๊ณต๋ถ€ํ•˜๋ ค๋‹ค๊ฐ€ ์ž˜ ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„์ด ๋งŽ์•„์„œ ๊ทธ๋ƒฅ ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„๋ถ€ํ„ฐ ๊ณต๋ถ€ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ณ ์ž ํ•œ๋‹ค. 1. ์ฝ”๋ฃจํ‹ด(coroutine) ์ด๋ž€? - cooperative routine์„ ์˜๋ฏธํ•˜๋Š”๋ฐ, ์„œ๋กœ ํ˜‘๋ ฅํ•˜๋Š” ๋ฃจํ‹ด์ด๋ผ๋Š” ๋œป์ด๋‹ค. - ์šฐ์„  ๋ฃจํ‹ด์ด๋ผ๋Š” ๊ฐœ๋…๋ถ€ํ„ฐ ์‚ดํŽด๋ณธ๋‹ค. def add(a, b): c = a + b # add ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๋ฉด ๋ณ€์ˆ˜์™€ ๊ณ„์‚ฐ์‹์€ ์‚ฌ๋ผ์ง print(c) print('add ํ•จ์ˆ˜') def calc(): add(1, 2) # add ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๋ฉด ๋‹ค์‹œ calc ํ•จ์ˆ˜๋กœ ๋Œ์•„์˜ด print('calc ํ•จ์ˆ˜') calc() ์ด ์ฝ”๋“œ์—์„œ calcํ•จ์ˆ˜์—์„œ add๋ฅผ ๋ถˆ๋ €๊ณ , addํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๋ฉด calc๋กœ ๋‹ค์‹œ ๋Œ์•„์˜จ๋‹ค. ์ด๋•Œ, calc๊ฐ€ ๋ฉ”์ธ ๋ฃจํ‹ด์ด๊ณ , add๋Š” ์„œ๋ธŒ๋ฃจํ‹ด์ด ๋˜๋Š” ๊ฑฐ๋‹ค. - ์ด๋Ÿฐ์‹์˜..
์•ž์„œ ์˜ํ˜ผ์„ ๊ฐˆ์•„ ์ •๋ฆฌํ•œ OSI ๋ชจ๋ธ๊ณผ TCP/IP ์ •๋ฆฌ๋Š” MQTT๋ฅผ ์œ„ํ•จ์ด์—ˆ๋‹ค. 1. MQTT(๋ฉ”์‹œ์ง€ ํ์ž‰ ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ ํŠธ๋žœ์ŠคํฌํŠธ, Message Queuing Telemetry Transport)๋ž€? - ์šฐ์„ , Telemetry Transport์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž๋ฉด, ์ „์†ก์€ ์ „์†ก์ธ๋ฐ.. ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ ์ด๊ฒŒ ํ•ฉ์„ฑ์–ด์ด๋‹ค. - ์›๊ฒฉ์„ ์˜๋ฏธํ•˜๋Š” 'Tele'์™€ ์ธก์ •์„ ์˜๋ฏธํ•˜๋Š” 'Metry'์˜ ํ•ฉ์„ฑ์–ด๋กœ ์›๊ฒฉ์ง€์˜ ์ƒํƒœ๋ฅผ ๊ฐ์‹œ ๋ฐ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๊ณ„๊ฐ„ ๊ฐ์ข… ๋ฐ์ดํ„ฐ๋ฅผ ๋””์ง€ํ„ธ ์‹ ํ˜ธ๋กœ ๋ฐ”๊ฟ”์„œ ์›๊ฒฉ์œผ๋กœ ์†ก์ˆ˜์‹ ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. - ์ฆ‰, ์• ์ดˆ์— M2M(Machine-to-Machine)์„ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ์ธ ์…ˆ์ด๋‹ค. ๋˜ํ•œ, ์š”์ฆ˜์€ ์‚ฌ๋ฌผ์ธํ„ฐ๋„ท์—๋„ ์“ฐ์ด๋Š” ๊ฒฝ๋Ÿ‰ ๋ฉ”์„ธ์ง€ ์ „์†ก ํ”„๋กœํ† ์ฝœ์ด๋‹ค. - ์œ„ํ‚คํ”ผ๋””์•„๋ฅผ ๋ณด๋ฉด MQTT๋ฅผ 7๊ณ„์ธต์˜ 7๋ฒˆ์งธ์ธ ..
ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ œ์ผ ์ค‘์š”ํ•œ ๊ฒƒ์ด '์„ค๊ณ„'์ด๋‹ค. ์„ค๊ณ„๋ฅผ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•ด์•ผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ตฌ๋ฉ์ด ์—†๋Š” ์ฝ”๋”ฉ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. ๋ผ๊ณ  ๋ฐฐ์› ๋‹ค. (ใ…‹ใ…‹) ์—ฌํŠผ ์•„์ง ๋‚ด ์ง€์‹์œผ๋กœ๋Š” ์„ค๊ณ„๋ฅผ ํ•˜๊ธฐ์—๋Š” ๋ฌด๋ฆฌ์ด์ง€๋งŒ, ์„ค๊ณ„๋ฅผ ์œ„ํ•œ ๋ฐฐ๊ฒฝ์ง€์‹์œผ๋กœ ๊ผญ ํ•„์š”ํ•œ OSI 7Layer ์™€ TCP/IP ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•ด ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. 1. OSI model ์ด๋ž€? - Open Systems Interconnection Reference Model ์˜ ์ค„์ž„๋ง๋กœ ๊ตญ์ œ ํ‘œ์ค€ํ™”๊ธฐ๊ตฌ์—์„œ ๊ฐœ๋ฐœํ•œ ๋ชจ๋ธ์ด๋ฉฐ, ํ˜ธํ™˜์„ฑ์˜ ๊ด€์ ์—์„œ 'ํ‘œ์ค€' ์ด๋ผ๋Š” ๋‹จ์–ด๋Š” ๊ต‰์žฅํžˆ ์ค‘์š”ํ•˜๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„์˜ ์„ค๊ณ„๊ฐ€ ์ด ๋ชจ๋ธ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. 2. WHY? - ํฐ ํ‹€์—์„œ ์ด ๋ชจ๋ธ์„ ์ฐธ์กฐํ•˜๋Š” ์ด์œ ๋Š” ํ˜ธํ™˜์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. - ์ •ํ•ด์ง„ ๊ธฐ์ค€์ด ์—†์œผ๋ฉด AํšŒ์‚ฌ..
์‹ ์ž…์ด๊ธด ํ•˜์ง€๋งŒ 6๊ฐœ์›”์˜ ๊ฒฝ๋ ฅ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๊ณ  ๊ผด์— ์ž๋งŒํ–ˆ๋‚˜๋ณด๋‹คใ…  logging ์‹œ์Šคํ…œ์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ์•ˆ์ผํ–ˆ๋˜ ๊ฑฐ ๊ฐ™๋‹น ๊ทธ๋™ํ•œ ๋‚˜์—๊ฒŒ log๋Š” ์™ธ๋ถ€์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์œผ๋กœ์„œ ๋””๋ฒ„๊ทธํ•  ๋•Œ ๋ฐ”๋กœ๋ฐ”๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ทธ๋Ÿฐ ๊ทธ ์ด์ƒ๋„ ์ดํ•˜๋„ ์•„๋‹ˆ์—ˆ๋Š”๋ฐ ์›น ๋ฐฑ์—”๋“œ๋ฅผ ํ•˜๋‹ค์™€์„œ ๊ทธ๋ ‡๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด๊ณ ์‹ถ๋‹ค.. ์—ฌํŠผ ํ”„๋กœ๊ทธ๋žจ์—” ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ฒŒ ์—†๋‹จ ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค. 3๋…„ ํ›„์ธ ์ง€๊ธˆ ์ด ๊ธ€์„ ์ฝ์œผ๋‹ˆ๊นŒ ๋„ˆ๋ฌด ์ฐฝํ”ผํ•˜๋‹ค ํ•˜ํ•˜^^.. ๋กœ๊ทธ๋Š” ๊ต‰์žฅํžˆ ์ค‘์š”ํ•˜๋ฏ€๋กœ ๋ชฐ๋ž๋˜ ๋‚ด ์ž์‹ ์ด ์ž˜๋ชป๋œ ๊ฒƒ์ด๋‹ค ํŒŒ์ด์ฌ์—์„œ ์ฝ˜์†” ์ถœ๋ ฅ๋ฐฉ๋ฒ•์€ print() ์ด๋ ‡๊ฒŒ ์“ฐ๋ฉด๋˜๋Š”๋ฐ, ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์žˆ๋Š” logging ์„ ์“ฐ๋ฉด ๋กœ๊ทธ๋กœ์จ ๊ด€๋ฆฌ๊ฐ€ ๋œ๋‹ค. logging.error("์—๋Ÿฌ๋ฉ”์„ธ์ง€") ์ด๋Ÿฐ์‹์œผ๋กœ ์“ฐ๋ฉด ๋œ๋‹ค. ๋กœ๊น…๋ ˆ๋ฒจ ๋กœ๊น…์—๋Š” print()์™€๋Š” ๋‹ฌ๋ฆฌ ๋กœ๊ทธ์— ๋ ˆ๋ฒจ์ด ์žˆ๋‹ค. D..
โ€ป๋ชจ๋“  ์ถœ์ฒ˜๋งํฌ๋Š” ๋”๋ณด๊ธฐ๋ฅผ ์ด์šฉํ•˜์„ธ์š”. 1. TTA ์ธ์ฆ : ํ•œ๊ตญ์ •๋ณดํ†ต์‹ ๊ธฐ์ˆ ํ˜‘ํšŒ(TTA)์—์„œ ์‹œํ–‰ํ•˜๋Š” ์‹œํ—˜์„ ํ†ตํ™”ํ•˜๋ฉด ์ฃผ๋Š” ์ธ์ฆ, ๊ตญ๋‚ด ์œ ์ผ ์ •๋ณดํ†ต์‹  ๋‹จ์ฒดํ‘œ์ค€ ์ œ์ •๊ธฐ๊ด€์ด๋ฉฐ ํ‘œ์ค€์ œํ’ˆ์˜ ์‹œํ—˜์ธ์ฆ์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ธฐ๊ด€์ž„. ์ฃผ๋กœ ์˜์ƒ๋ณด์•ˆ์‹œ์Šคํ…œ ๊ด€๋ จ์ธ ๊ฒƒ ๊ฐ™๋‹ค. 2. PJSIP : PJSIP๋Š” ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์ธ SIP, SDP, RTP, STUN, TURN ๋ฐ ICE๋ฅผ ๊ตฌํ˜„ํ•œ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ํ†ต์‹  ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ์‚ฌ์šฉ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋ฒ„ํผ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ํ˜„์ƒ์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ์ถœ์ฒ˜ ๋งํฌ๋กœ ๊ฐ€๋ฉด ๋œ๋‹ค. ๋”๋ณด๊ธฐ ์ถœ์ฒ˜: https://engineering.linecorp.com/ko/blog/buffer-overflow-in-pjsip-a-voip-open-source-library/ 3. SNMP (๊ฐ„์ด ๋ง ๊ด€๋ฆฌ ํ”„๋กœํ† ์ฝœ, Sim..
ํ‚จ์ง€ (Kinzie)
'๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (13 Page)