InterSystems IRIS์˜ Python ๊ฒŒ์ดํŠธ์›จ์ด

์ด ๋ฌธ์„œ๋Š” InterSystems IRIS ๋ฐ์ดํ„ฐ ํ”Œ๋žซํผ์„ ์œ„ํ•œ ์˜คํ”ˆ ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”„๋กœ์ ํŠธ์ธ Python Gateway์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด Python(๋งŽ์€ ๋ฐ์ดํ„ฐ ๊ณผํ•™์ž์˜ ๊ธฐ๋ณธ ํ™˜๊ฒฝ)์—์„œ ์ƒ์„ฑ๋œ ๋ชจ๋“  ๊ธฐ๊ณ„ ํ•™์Šต ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์กฐ์œจํ•˜๊ณ  ์ˆ˜๋งŽ์€ ๊ธฐ์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ InterSystems IRIS ํ”Œ๋žซํผ์—์„œ ์ ์‘ํ˜• ๋กœ๋ด‡ ๋ถ„์„ AI/ML ์†”๋ฃจ์…˜์„ ์‹ ์†ํ•˜๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” InterSystems IRIS๊ฐ€ Python ํ”„๋กœ์„ธ์Šค๋ฅผ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ํ•˜๊ณ  ํšจ์œจ์ ์ธ ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ์ง€๋Šฅํ˜• ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๊ณ„ํš

  1. ์†Œ๊ฐœ.
  2. ๋„๊ตฌ.
  3. ์„ค์น˜
  4. API.
  5. ์ƒํ˜ธ ์šด์šฉ์„ฑ.
  6. ์ฃผํ”ผํ„ฐ ๋…ธํŠธ๋ถ.
  7. ๊ฒฐ๋ก .
  8. ์—ฐ๊ฒฐ.
  9. M.L.ํˆดํ‚ท.

์†Œ๊ฐœ

Python์€ ๊ฐœ๋ฐœ์ž ์ƒ์‚ฐ์„ฑ ๋ฐ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ์— ์ค‘์ ์„ ๋‘” ๊ณ ๊ธ‰ ๋ฒ”์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ ์‹œ๋ฆฌ์ฆˆ์—์„œ๋Š” InterSystems IRIS ํ”Œ๋žซํผ์—์„œ Python ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์ด ๊ธฐ์‚ฌ์˜ ์ฃผ์š” ์ดˆ์ ์€ ๊ธฐ๊ณ„ ํ•™์Šต ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ณ  ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์–ธ์–ด๋กœ Python์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ML(Machine Learning)์€ ์ธ๊ณต์ง€๋Šฅ ๋ฐฉ์‹์˜ ํ•œ ์ข…๋ฅ˜๋กœ์„œ ๋ฌธ์ œ๋ฅผ ์ง์ ‘์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋น„์Šทํ•œ ๋ฌธ์ œ๋ฅผ ๋งŽ์ด ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•™์Šตํ•˜๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค.

๊ธฐ๊ณ„ ํ•™์Šต ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋ชจ๋ธ์€ ์ ์  ๋” ๋ณดํŽธํ™”๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์ง€๋งŒ ๋ชจ๋‘ ์ ‘๊ทผ์„ฑ, ๋‹จ์ˆœ์„ฑ ๋ฐ ์‹ค์งˆ์ ์ธ ๊ฒฐ๊ณผ ๋‹ฌ์„ฑ์œผ๋กœ ๊ท€๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋˜๋Š” ์‹ ๊ฒฝ๋ง ๋ชจ๋ธ๋ง์ด ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์ž…๋‹ˆ๊นŒ?

๋ฌผ๋ก  ๊ทธ๋ ‡์ง€๋Š” ์•Š์ง€๋งŒ ์š”์ฆ˜์—๋Š” ํ•˜๋‚˜์˜ ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜์‹ญ๋งŒ ์ค„์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋น„์šฉ์ด ์ ์  ์ค„์–ด๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋„๊ตฌ๋Š” ์ง„ํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์™„์ „ํ•œ GUI ์ง€ํ–ฅ AI/ML ๋„๊ตฌ๋Š” ์—†์ง€๋งŒ, BI์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋งŽ์€ ์ •๋ณด ์‹œ์Šคํ…œ ํด๋ž˜์Šค(์ฝ”๋“œ ์ž‘์„ฑ์—์„œ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ GUI ์ง€ํ–ฅ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ ์†”๋ฃจ์…˜ ์‚ฌ์šฉ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€)์—์„œ ์šฐ๋ฆฌ๊ฐ€ ๋ณธ ์ง„๋ณด๋„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. AI/ML ์ƒ์„ฑ ๋„๊ตฌ์—์„œ. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ฝ”๋“œ ์ž‘์„ฑ ๋‹จ๊ณ„๋ฅผ ํ†ต๊ณผํ–ˆ์œผ๋ฉฐ ํ˜„์žฌ๋Š” ๋ชจ๋ธ ๊ตฌ์ถ• ๋ฐ ๊ต์œก์„ ์œ„ํ•ด ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ตœ์ข… ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ชจ๋ธ ๊ต์œก์„ ์™„๋ฃŒํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋Š” ๋ฏธ๋ฆฌ ๊ต์œก๋œ ๋ชจ๋ธ์„ ์ „ํŒŒํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๊ฐœ์„  ์‚ฌํ•ญ๋„ ๋จธ์‹  ๋Ÿฌ๋‹ ์ ์šฉ์„ ๋” ์‰ฝ๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐœ์ „์œผ๋กœ ์ธํ•ด ์ „๋ฌธ๊ฐ€์™€ ํšŒ์‚ฌ ์ „์ฒด๊ฐ€ ๊ธฐ๊ณ„ ํ•™์Šต์„ ํ›จ์”ฌ ๋” ์‰ฝ๊ฒŒ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— ์šฐ๋ฆฌ๋Š” ์ ์  ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค. InterSystems IRIS์™€ ๊ฐ™์€ ํ†ตํ•ฉ ๋ฐ์ดํ„ฐ ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ฆ‰์‹œ ์ค€๋น„ํ•˜์—ฌ ๊ธฐ๊ณ„ ํ•™์Šต ๋ชจ๋ธ์˜ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ๋กœ ์ „ํ™˜ํ•˜๋ฉด์„œ AI/ML ํ”„๋กœ์ ํŠธ๋ฅผ ๊ทธ ์–ด๋Š ๋•Œ๋ณด๋‹ค ์‰ฝ๊ฒŒ โ€‹โ€‹์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•„์š”ํ•œ ์ž์›๋งŒ ์†Œ๋น„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์ด ์ œ๊ณตํ•˜๋Š” ๋ณ‘๋ ฌํ™” ๋•๋ถ„์— ๋‚ญ๋น„๋˜๋Š” ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ฒฐ๊ณผ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ์ƒํ™ฉ์ด ๋” ๋ณต์žกํ•ด์ง€๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ๋ชจ๋ธ ๊ตฌ์ถ•์„ ์œ„ํ•œ ๋งŽ์€ ๋„๊ตฌ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ์— ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ข‹์€ ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์ง€๋งŒ ๊ทธ ๋‹ค์Œ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋น„์ฆˆ๋‹ˆ์Šค์—์„œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ต์„ ์–ป๋Š” ๊ฒƒ ๋˜ํ•œ ์ค‘์š”ํ•œ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ์˜ ๊ทผ์›์€ ๋ถ„์„ ๋ฐ ํŠธ๋žœ์žญ์…˜ ์›Œํฌ๋กœ๋“œ์™€ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์˜ ๋ถ„๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋ชจ๋ธ์„ ๊ต์œกํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ตฌ์„ฑ๋œ ๋ชจ๋ธ์˜ ์œ„์น˜๋Š” ํŠธ๋žœ์žญ์…˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์ž…๋‹ˆ๋‹ค. ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ ์‹คํ–‰ํ•˜๋ฉด ์ตœ๊ณ ์˜ ์‚ฌ๊ธฐ ๊ฑฐ๋ž˜ ํƒ์ง€ ๋ชจ๋ธ์ด ๋ฌด์Šจ ์†Œ์šฉ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์‚ฌ๊ธฐ๊พผ๋“ค์€ ์ด๋ฏธ ๋ˆ์„ ๊ฐ€์ง€๊ณ  ๋– ๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ๋กœ ๋ชจ๋ธ์„ ๊ต์œกํ•ด์•ผ ํ•˜์ง€๋งŒ, ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ชจ๋ธ์˜ ์˜ˆ์ธก์— ๋”ฐ๋ผ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ƒˆ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ML Toolkit์€ ๋ฐ”๋กœ ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„๊ตฌ ํ‚คํŠธ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋ชจ๋ธ์„ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ค๊ณ  ํŠธ๋žœ์žญ์…˜ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜์—ฌ ๊ตฌ์ถ•ํ•œ ๋ชจ๋ธ์„ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค์—์„œ ์ง์ ‘ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Python Gateway๋Š” ML Toolkit์˜ ์ผ๋ถ€์ด๋ฉฐ Python ์–ธ์–ด์™€์˜ ํ†ตํ•ฉ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(R Gateway์™€ ์œ ์‚ฌํ•˜๊ฒŒ ML Toolkit์˜ ์ผ๋ถ€๊ฐ€ R ์–ธ์–ด์™€์˜ ํ†ตํ•ฉ์„ ์ œ๊ณตํ•จ).

ํˆดํ‚ท

๊ณ„์†ํ•˜๊ธฐ ์ „์— ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ๋ช‡ ๊ฐ€์ง€ Python ๋„๊ตฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธฐ์ˆ 

  • Python์€ ํ•ด์„๋œ ๋ฒ”์šฉ ๊ณ ๊ธ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์–ธ์–ด์˜ ์ฃผ์š” ์žฅ์ ์€ ์ˆ˜ํ•™, ML ๋ฐ AI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋Œ€๊ทœ๋ชจ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ObjectScript์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์ด์ง€๋งŒ ๋ชจ๋“  ๊ฒƒ์ด ์ •์ ์œผ๋กœ ์ •์˜๋˜์ง€ ์•Š๊ณ  ๋™์ ์œผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ดํ›„ ๊ธฐ์‚ฌ๋Š” ์–ธ์–ด์— ๋Œ€ํ•ด ์ผ์‹œ์ ์ธ ์นœ์ˆ™ํ•จ์„ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋‹ค์Œ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์„ ์  ์„œ๋ฅ˜ ๋น„์น˜.
  • ๋‹ค์Œ ์—ฐ์Šต์„ ์œ„ํ•ด ๋‹ค์Œ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ 3.6.7 64๋น„ํŠธ.
  • IDE: ์‚ฌ์šฉ PyCharm, ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ฐ˜์ ์œผ๋กœ ะผะฝะพะณะพ. Atelier๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Python ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ Eclipse ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. VS Code๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Python์šฉ ํ™•์žฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋…ธํŠธ๋ถ: IDE ๋Œ€์‹  ์˜จ๋ผ์ธ ๋…ธํŠธ๋ถ์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ๊ฒƒ์€ ์ฃผํ”ผํ„ฐ.

๋„์„œ๊ด€

๋‹ค์Œ์€ ๊ธฐ๊ณ„ ํ•™์Šต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ (์ผ๋ถ€) ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

  • ๋ˆ„ํ”ผ โ€” ์ •ํ™•ํ•œ ๊ณ„์‚ฐ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ํŒจํ‚ค์ง€.
  • ํŒ๋‹ค โ€” ๊ณ ์„ฑ๋Šฅ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋„๊ตฌ.
  • ๋งคํŠธํ”Œ๋กฏ๋ฆฝ - ์ฐจํŠธ ์ƒ์„ฑ.
  • ์”จ๋ณธ - matplotlib ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”.
  • ์Šคํด๋Ÿฐ โ€” ๊ธฐ๊ณ„ ํ•™์Šต ๋ฐฉ๋ฒ•.
  • XGBoost โ€” Gradient Boosting ๋ฐฉ๋ฒ•๋ก  ๋‚ด์˜ ๊ธฐ๊ณ„ ํ•™์Šต ์•Œ๊ณ ๋ฆฌ์ฆ˜.
  • ๊ฒ์‹ฌ โ€” NLP.
  • ์ผ€ ๋ผ์Šค - ์‹ ๊ฒฝ๋ง.
  • ํ…์„œ ํ”Œ๋กœ์šฐ ๊ธฐ๊ณ„ ํ•™์Šต ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.
  • ํŒŒ์ด ํ† ์น˜ Python์— ์ดˆ์ ์„ ๋งž์ถ˜ ๊ธฐ๊ณ„ ํ•™์Šต ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.
  • nyoka - ๋‹ค์–‘ํ•œ ๋ชจ๋ธ์˜ PMML.

AI/ML ๊ธฐ์ˆ ์€ ๋น„์ฆˆ๋‹ˆ์Šค๋ฅผ ๋ณด๋‹ค ํšจ์œจ์ ์ด๊ณ  ์ ์‘๋ ฅ ์žˆ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋˜ํ•œ ์˜ค๋Š˜๋‚  ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์€ ๊ฐœ๋ฐœ ๋ฐ ๊ตฌํ˜„์ด ๋” ์‰ฌ์›Œ์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. AI/ML ๊ธฐ์ˆ ๊ณผ ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์ด ์กฐ์ง์˜ ์„ฑ์žฅ์— ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋˜๋Š”์ง€ ์•Œ์•„๋ณด์‹ญ์‹œ์˜ค.

์„ค์น˜

Python Gateway๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • OS
    • Windows
    • Linux
    • Mac
  • ๋„์ปค
    • DockerHub์˜ ์ด๋ฏธ์ง€ ์‚ฌ์šฉ
    • ๋‚˜๋งŒ์˜ ์ด๋ฏธ์ง€ ๋งŒ๋“ค๊ธฐ

์„ค์น˜ ๋ฐฉ๋ฒ•์— ๊ด€๊ณ„์—†์ด ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์žฅ์†Œ๋Š” ๋ฆด๋ฆฌ์Šค ํŽ˜์ด์ง€. ์—ฌ๊ธฐ์—๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์นœ ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์Šค๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ตœ์‹  ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค์‹ญ์‹œ์˜ค. ํ˜„์žฌ๋Š” 0.8์ด์ง€๋งŒ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด ๊ฐ’์ด ์ถ”๊ฐ€๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œ/๋‹ค์šด๋กœ๋“œํ•˜์ง€ ๋ง๊ณ  ์ตœ์‹  ๋ฆด๋ฆฌ์Šค๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค.

OS

์šด์˜ ์ฒด์ œ์— Python Gateway๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ์šด์˜ ์ฒด์ œ์— ๊ด€๊ณ„์—†์ด ๋จผ์ € Python์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด:

  1. Python 3.6.7 64๋น„ํŠธ ์„ค์น˜. ๊ธฐ๋ณธ ๋””๋ ‰ํ„ฐ๋ฆฌ์— Python์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  2. ๋ชจ๋“ˆ ์„ค์น˜ dill: pip install dill.
  3. ObjectScript ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) ์ œํ’ˆ์ด ์žˆ๋Š” ๋ชจ๋“  ์˜์—ญ์—. ๊ธฐ์กด ์˜์—ญ์—์„œ ์ œํ’ˆ์„ ์ง€์›ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. ์žฅ์†Œ ์ฝœ์•„์›ƒ DLL/SO/DYLIB ํด๋”๋กœ bin InterSystems IRIS ์ธ์Šคํ„ด์Šค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ์€ ๋‹ค์Œ์—์„œ ๋ฐ˜ํ™˜๋œ ๊ฒฝ๋กœ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. write ##class(isc.py.Callout).GetLib().

Windows

  1. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ๋‹ค์Œ์ธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. PYTHONHOME Python 3.6.7์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.
  2. ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ๋‹ค์Œ์ธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. PATH ๋ณ€์ˆ˜๋ฅผ ํฌํ•จ PYTHONHOME (๋˜๋Š” ๊ทธ๊ฒƒ์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๋””๋ ‰ํ† ๋ฆฌ).

๋ฆฌ๋ˆ…์Šค(๋ฐ๋น„์•ˆ/์šฐ๋ถ„ํˆฌ)

  1. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ PATH ํฌํ•จํ•˜๋‹ค /usr/lib ะธ /usr/lib/x86_64-linux-gnu. ํŒŒ์ผ ์‚ฌ์šฉ /etc/environment ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ undefined symbol: _Py_TrueStruct ์„ค์ •์„ ์ง€์ • PythonLib. ๋˜ํ•œ ์ถ”๊ฐ€ ์ •๋ณด ๋ฌธ์ œ ํ•ด๊ฒฐ ์„น์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Mac

  1. ํ˜„์žฌ Python 3.6.7๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ.org. ๋ณ€์ˆ˜ ํ™•์ธ PATH.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•œ ๊ฒฝ์šฐ InterSystems ์ œํ’ˆ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

๋„์ปค

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด์‹์„ฑ
  • ํšจ๊ณผ
  • ์ ˆ์—ฐ
  • ๊ฐ€๋ฒผ์›€
  • ๋ถˆ๋ณ€์„ฑ

์ด๊ฒƒ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค ์ผ๋ จ์˜ ๊ธฐ์‚ฌ InterSystems ์ œํ’ˆ๊ณผ ํ•จ๊ป˜ Docker๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€

๋ชจ๋“  Python ๊ฒŒ์ดํŠธ์›จ์ด ๋นŒ๋“œ๋Š” ํ˜„์žฌ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์ž…๋‹ˆ๋‹ค. 2019.4.

์ค€๋น„๋œ ์ด๋ฏธ์ง€

๋‹ฌ๋ฆฌ๋‹ค: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestInterSystems IRIS Community Edition๊ณผ ํ•จ๊ป˜ Python Gateway๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๋‹ค์•ผ.

๋‚˜๋งŒ์˜ ์ด๋ฏธ์ง€ ๋งŒ๋“ค๊ธฐ

๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋ ค๋ฉด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋ฃจํŠธ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. docker build --force-rm --tag intersystemscommunity/irispy:latest ..
๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋ฏธ์ง€๋Š” ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค. store/intersystems/iris-community:2019.4.0.383.0, ๊ทธ๋Ÿฌ๋‚˜ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. IMAGE.
InterSystems IRIS์—์„œ ๋นŒ๋“œํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest'.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker run -d 
  -p 52773:52773 
  -v /<HOST-DIR-WITH-iris.key>/:/mount 
  --name irispy 
  intersystemscommunity/irispy:latest 
  --key /mount/iris.key

InterSystems IRIS Community Edition ๊ธฐ๋ฐ˜ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ‚ค๋ฅผ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€

  • ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค isc.py.test.Process ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€๋ฅผ ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ๋กœ๋ฅผ ๋งˆ์šดํŠธ๋œ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์„ค์ •์„ ํŽธ์ง‘ํ•˜์‹ญ์‹œ์˜ค. WorkingDir ๋งˆ์šดํŠธ๋œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ํ„ฐ๋ฏธ๋„์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. docker exec -it irispy sh.
  • ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด ์‹œ์Šคํ…œ ๊ด€๋ฆฌ ํฌํ„ธ์— ์•ก์„ธ์Šค SuperUser/SYS.
  • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. docker stop irispy && docker rm --force irispy.

์„ค์น˜ ํ™•์ธ

Python Gateway๋ฅผ ์„ค์น˜ํ•œ ํ›„์—๋Š” ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. InterSystems IRIS ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

set sc = ##class(isc.py.Callout).Setup() 
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).
write var

๊ฒฐ๊ณผ๋Š” HELLO - ํŒŒ์ด์ฌ ๋ณ€์ˆ˜์˜ ๊ฐ’ x. ๋ฐ˜ํ’ˆ ์ƒํƒœ๋ผ๋ฉด sc ์‹ค์ˆ˜์ด๊ฑฐ๋‚˜ var ๋น„์–ด ์žˆ์Œ, ํ™•์ธ ์ฝ์–ด๋ณด๊ธฐ - ๋ฌธ์ œ ํ•ด๊ฒฐ ์„น์…˜.

API

Python Gateway๊ฐ€ ์„ค์น˜๋˜์—ˆ์œผ๋ฉฐ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์„ ์‹œ์ž‘ํ•  ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค!
Python์˜ ์ฃผ์š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. isc.py.Main. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์„œ๋“œ ๊ทธ๋ฃน์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(๋ชจ๋‘ ๋ฐ˜ํ™˜ %Status):

  • ์ฝ”๋“œ ์‹คํ–‰
  • ๋ฐ์ดํ„ฐ ์ „์†ก
  • ๋ณด์กฐ์ž

์ฝ”๋“œ ์‹คํ–‰

์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž„์˜์˜ Python ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ˆœ ๋ฌธ์ž์—ด

SimpleString ์ฃผ์š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. 4๊ฐœ์˜ ์„ ํƒ์  ์ธ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • code ์‹คํ–‰ํ•  ์ฝ”๋“œ ์ค„์ž…๋‹ˆ๋‹ค. ๋ผ์ธ ํ”ผ๋“œ ๋ฌธ์ž: $c(10).
  • returnVariable ๋ฐ˜ํ™˜ํ•  ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • serialization - ์ง๋ ฌํ™” ๋ฐฉ๋ฒ• returnVariable. 0 - ๋ฌธ์ž์—ด(๊ธฐ๋ณธ๊ฐ’), 1 - repr.
  • result - ๊ฐ’์ด ๊ธฐ๋ก๋œ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ByRef ์ฐธ์กฐ returnVariable.

์œ„์—์„œ ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).

์ด ์˜ˆ์—์„œ๋Š” Python ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. x ๊ฐ€์น˜ Hello Python ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. x ObjectScript ๋ณ€์ˆ˜์— var.

์‹คํ–‰ ์ฝ”๋“œ

ExecuteCode๋Š” ๋” ์•ˆ์ „ํ•˜๊ณ  ๋œ ์ œํ•œ์ ์ธ ๋Œ€์•ˆ์ž…๋‹ˆ๋‹ค. SimpleString.
InterSystems IRIS ํ”Œ๋žซํผ์˜ ๋ผ์ธ์€ 3์ž๋กœ ์ œํ•œ๋˜๋ฉฐ ๋” ๊ธด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋‘ ๊ฐ€์ง€ ์ธ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • code โ€” ์‹คํ–‰ํ•  Python ์ฝ”๋“œ์˜ ๋ฌธ์ž์—ด ๋˜๋Š” ์ŠคํŠธ๋ฆผ.
  • variable - (์„ ํƒ ์‚ฌํ•ญ) ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. code ์ด ํŒŒ์ด์ฌ ๋ณ€์ˆ˜.

์‚ฌ์šฉ ์ œ์•ˆ:

set sc = ##class(isc.py.Main).ExecuteCode("2*3", "y").

์ด ์˜ˆ์—์„œ๋Š” 2์— 3์„ ๊ณฑํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ Python ๋ณ€์ˆ˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. y.

๋ฐ์ดํ„ฐ ์ „์†ก

Python๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์Šต๋‹ˆ๋‹ค.

ํŒŒ์ด์ฌ -> InterSystems IRIS

ํ•„์š”ํ•œ ์ง๋ ฌํ™”์— ๋”ฐ๋ผ InterSystems IRIS์—์„œ Python ๋ณ€์ˆ˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • String ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜• ๋ฐ ๋””๋ฒ„๊น…์šฉ.
  • Repr ๊ฐ„๋‹จํ•œ ๊ฐœ์ฒด๋ฅผ ์ €์žฅํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • JSON InterSystems IRIS ์ชฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Pickle ๊ฐœ์ฒด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŒŒ์ด์ฌ์—์„œ ๋ณ€์ˆ˜๋ฅผ ๋ฌธ์ž์—ด์ด๋‚˜ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • GetVariable(variable, serialization, .stream, useString) - ์–ป๋‹ค serialization ๋ณ€ํ•˜๊ธฐ ์‰ฌ์šด variable ะฒ stream. ๋งŒ์•ฝ useString ๊ฐ€ 1์ด๊ณ  ์ง๋ ฌํ™”๊ฐ€ ๋ฌธ์ž์—ด์— ๋ฐฐ์น˜๋˜๋ฉด ์ŠคํŠธ๋ฆผ์ด ์•„๋‹Œ ๋ฌธ์ž์—ด์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
  • GetVariableJson(variable, .stream, useString) โ€” ๋ณ€์ˆ˜์˜ JSON ์ง๋ ฌํ™”๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.
  • GetVariablePickle(variable, .stream, useString, useDill) -๋ณ€์ˆ˜์˜ Pickle(๋˜๋Š” Dill) ์ง๋ ฌํ™”๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๋ณ€์ˆ˜๋ฅผ ์–ป์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•ฉ์‹œ๋‹ค y.

set sc = ##class(isc.py.Main).GetVariable("y", , .val, 1)
write val
>6

InterSystems IRIS -> ํŒŒ์ด์ฌ

InterSystems IRIS์—์„œ Python์œผ๋กœ ๋ฐ์ดํ„ฐ ๋กœ๋“œ.

  • ExecuteQuery(query, variable, type, namespace) - ๋ฐ์ดํ„ฐ ์„ธํŠธ ์ƒ์„ฑ(pandas dataframe ๋˜๋Š” list) SQL ์ฟผ๋ฆฌ์—์„œ Python ๋ณ€์ˆ˜๋กœ ์„ค์ • variable. ๋น„๋‹ ๋ด‰ํˆฌ isc.py ํ•ด๋‹น ์ง€์—ญ์—์„œ ์ด์šฉ ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ namespace - ์š”์ฒญ์ด ๊ทธ๊ณณ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - ์ „์—ญ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. global ์ฒจ์ž์—์„œ start ์— end Python์—์„œ ์œ ํ˜• ๋ณ€์ˆ˜๋กœ type: list, ๋˜๋Š” ํŒ๋‹ค dataframe. ์„ ํƒ์  ์ธ์ˆ˜์— ๋Œ€ํ•œ ์„ค๋ช… mask ์™€ labels ์ˆ˜์—… ๋ฌธ์„œ ๋ฐ ์ €์žฅ์†Œ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฌธ์„œ.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ ๋กœ๋“œ class ์•„์ด๋””์—์„œ start ์— end Python์—์„œ ์œ ํ˜• ๋ณ€์ˆ˜๋กœ type: list, ๋˜๋Š” ํŒ๋‹ค dataframe. properties โ€” ๋ฐ์ดํ„ฐ ์„ธํŠธ์— ๋กœ๋“œํ•  ํด๋ž˜์Šค ์†์„ฑ ๋ชฉ๋ก(์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„). ์ง€์›๋˜๋Š” ๋งˆ์Šคํฌ * ะธ ?. ๊ธฐ๋ณธ - * (๋ชจ๋“  ์†์„ฑ). ์žฌ์‚ฐ %%CLASSNAME ๋ฌด์‹œํ–ˆ๋‹ค.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ๋กœ๋“œ table ์•„์ด๋””์—์„œ start ์— end ํŒŒ์ด์ฌ์—์„œ.

ExecuteQuery - ๋ฒ”์šฉ(์œ ํšจํ•œ SQL ์ฟผ๋ฆฌ๋Š” Python์œผ๋กœ ์ „๋‹ฌ๋จ). ํ•˜์ง€๋งŒ, ExecuteGlobal ๊ทธ๋ฆฌ๊ณ  ๊ทธ์˜ ๋žฉ ExecuteClass ะธ ExecuteTable ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ œํ•œ ์‚ฌํ•ญ์„ ๊ฐ€์ง€๊ณ  ์ž‘์—…ํ•˜์‹ญ์‹œ์˜ค. ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค(ODBC ๋“œ๋ผ์ด๋ฒ„๋ณด๋‹ค 3-5๋ฐฐ ๋น ๋ฅด๊ณ  20๋ฐฐ ๋น ๋ฆ„). ExecuteQuery). ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฌธ์„œ.
์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋ฐฉ๋ฒ•์€ ๋ชจ๋“  ์˜์—ญ์—์„œ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋น„๋‹ ๋ด‰ํˆฌ isc.py ๋Œ€์ƒ ์ง€์—ญ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ์‹คํ–‰

ExecuteQuery(request, variable, type, namespace) - ์œ ํšจํ•œ SQL ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋ฅผ Python์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ€์žฅ ๋Š๋ฆฐ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ฒฝ์šฐ์— ์‚ฌ์šฉ ExecuteGlobal ๋ž˜ํผ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ธ์ˆ˜ :

  • query - SQL ์ฟผ๋ฆฌ.
  • variable - ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธฐ๋ก๋˜๋Š” Python ๋ณ€์ˆ˜์˜ ์ด๋ฆ„.
  • type - list ๋˜๋Š” ํŒ๋‹ค dataframe.
  • namespace - ์š”์ฒญ์ด ์‹คํ–‰๋  ์˜์—ญ.

๊ธ€๋กœ๋ฒŒ ์‹คํ–‰

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - Python์— ์ „์—ญ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

์ธ์ˆ˜ :

  • global ์—†๋Š” ๊ธ€๋กœ๋ฒŒ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ^
  • variable - ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธฐ๋ก๋˜๋Š” Python ๋ณ€์ˆ˜์˜ ์ด๋ฆ„.
  • type - list ๋˜๋Š” ํŒ๋‹ค dataframe.
  • start โ€” ์ „์—ญ์˜ ์ฒซ ๋ฒˆ์งธ ์ฒจ์ž. ๋ฐ˜๋“œ์‹œ %Integer.
  • end ์ „์—ญ์˜ ๋งˆ์ง€๋ง‰ ์ฒจ์ž์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ %Integer.
  • mask โ€” ์ „์—ญ ๊ฐ’์˜ ๋งˆ์Šคํฌ. ๋งˆ์Šคํฌ๋Š” ์ „์—ญ์˜ ํ•„๋“œ ์ˆ˜๋ณด๋‹ค ์งง์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด ๊ฒฝ์šฐ ๋์— ์žˆ๋Š” ํ•„๋“œ๋Š” ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค). ๋งˆ์Šคํฌ ํฌ๋งท ๋ฐฉ๋ฒ•:
    • + ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
    • - ๊ฐ’์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.
    • b โ€” ๋ถ€์šธ ์œ ํ˜•(0 - False, ๋‚˜๋จธ์ง€๋Š” - True).
    • d โ€” ๋‚ ์งœ($horolog์—์„œ, Windows์˜ ๊ฒฝ์šฐ 1970๋…„๋ถ€ํ„ฐ, Linux์˜ ๊ฒฝ์šฐ 1900๋…„๋ถ€ํ„ฐ).
    • t - ์‹œ๊ฐ„($horolog, ์ž์ • ์ดํ›„ ์ดˆ).
    • m โ€” ํƒ€์ž„์Šคํƒฌํ”„(YEAR-MONTH-DAY HOUR:MINUTE:SECOND ํ˜•์‹ ๋ฌธ์ž์—ด).
  • labels - ์—ด ์ด๋ฆ„์˜ %๋ชฉ๋ก. ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋Š” ์ฒจ์ž์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • namespace - ์š”์ฒญ์ด ์‹คํ–‰๋  ์˜์—ญ.

์‹คํ–‰ ํด๋ž˜์Šค

๊ฐ์‹ธ๋‹ค ExecuteGlobal. ํด๋ž˜์Šค ์ •์˜์— ๋”ฐ๋ผ ํ˜ธ์ถœ์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. ExecuteGlobal ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ฅผ ๋ถ€๋ฅธ๋‹ค.

ExecuteClass(class, variable, type, start, end, properties, namespace) - ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ๋ฅผ Python์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

์ธ์ˆ˜ :

  • class - ํด๋ž˜์Šค ์ด๋ฆ„
  • variable - ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธฐ๋ก๋˜๋Š” Python ๋ณ€์ˆ˜์˜ ์ด๋ฆ„.
  • type - list ๋˜๋Š” ํŒ๋‹ค dataframe.
  • start โ€” ID๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • end - ์ตœ์ข… ์•„์ด๋””
  • properties โ€” ๋ฐ์ดํ„ฐ ์„ธํŠธ์— ๋กœ๋“œํ•  ํด๋ž˜์Šค ์†์„ฑ ๋ชฉ๋ก(์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„). ์ง€์›๋˜๋Š” ๋งˆ์Šคํฌ * ะธ ?. ๊ธฐ๋ณธ - * (๋ชจ๋“  ์†์„ฑ). ์žฌ์‚ฐ %%CLASSNAME ๋ฌด์‹œํ–ˆ๋‹ค.
  • namespace - ์š”์ฒญ์ด ์‹คํ–‰๋  ์˜์—ญ.

์œ ํ˜• ์†์„ฑ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์†์„ฑ์€ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. %Date, %Time, %Boolean ะธ %TimeStamp - ํ•ด๋‹น Python ํด๋ž˜์Šค๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ” ์‹คํ–‰

๊ฐ์‹ธ๋‹ค ExecuteClass. ํ…Œ์ด๋ธ” ์ด๋ฆ„์„ ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ํ˜ธ์ถœ ExecuteClass. ์„œ๋ช…:

ExecuteTable(table, variable, type, start, end, properties, namespace) - ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋ฅผ Python์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

์ธ์ˆ˜ :

  • table - ํ…Œ์ด๋ธ” ์ด๋ฆ„.
    ๋‹ค๋ฅธ ๋ชจ๋“  ์ธ์ˆ˜๋Š” ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ExecuteClass.

์ฐธ๊ณ 

  • ExecuteGlobal, ExecuteClass ะธ ExecuteTable ๋˜‘๊ฐ™์ด ๋นจ๋ฆฌ ์ผํ•˜์‹ญ์‹œ์˜ค.
  • ExecuteGlobal ๋ณด๋‹ค 20๋ฐฐ ๋น ๋ฅธ ExecuteQuery ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์„ธํŠธ(์ „์†ก ์‹œ๊ฐ„ >0.01์ดˆ).
  • ExecuteGlobal, ExecuteClass ะธ ExecuteTable ๋‹ค์Œ ๊ตฌ์กฐ๋กœ ์ „์—ญ์—์„œ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค. ^global(key) = $lb(prop1, prop2, ..., propN) ์–ด๋””์—์„œ key ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ์— ExecuteGlobal, ExecuteClass ะธ ExecuteTable ์ง€์›๋˜๋Š” ๊ฐ’ ๋ฒ”์œ„ %Date ๋ฒ”์œ„์— ํ•ด๋‹น mktime OS์— ๋”ฐ๋ผ ๋‹ค๋ฆ„์ฐฝ: 1970-01-01, ๋ฆฌ๋ˆ…์Šค 1900-01-01, ๋งฅ). ์‚ฌ์šฉ %TimeStamp์ด ๋ฒ”์œ„ ๋ฐ–์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ pandas ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์ œํ•œ์€ ๋ชฉ๋ก์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์— ExecuteGlobal, ExecuteClass ะธ ExecuteTable ๋ฐ์ดํ„ฐ ์†Œ์Šค(์ „์—ญ, ํด๋ž˜์Šค ๋˜๋Š” ํ…Œ์ด๋ธ”) ๋ฐ ๋ณ€์ˆ˜๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์ธ์ˆ˜๋Š” ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

์˜ˆ

ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค isc.py.test.์‚ฌ๋žŒ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ „์†ก ์˜ต์…˜์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

set global = "isc.py.test.PersonD"
set class = "isc.py.test.Person"
set table = "isc_py_test.Person"
set query = "SELECT * FROM isc_py_test.Person"

// ะžะฑั‰ะธะต ะฐั€ะณัƒะผะตะฝั‚ั‹
set variable = "df"
set type = "dataframe"
set start = 1
set end = $g(^isc.py.test.PersonD, start)

// ะกะฟะพัะพะฑ 0: ExecuteGlobal ะฑะตะท ะฐั€ะณัƒะผะตะฝั‚ะพะฒ
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)

// ะกะฟะพัะพะฑ 1: ExecuteGlobal ั ะฐั€ะณัƒะผะตะฝั‚ะฐะผะธ    
// ะŸั€ะธ ะฟะตั€ะตะดะฐั‡ะต ะณะปะพะฑะฐะปะฐ ะฝะฐะทะฒะฐะฝะธั ะฟะพะปะตะน ะทะฐะดะฐัŽั‚ัั ะฒั€ัƒั‡ะฝัƒัŽ
// globalKey - ะฝะฐะทะฒะฐะฝะธะต ัะฐะฑัั‚ะบั€ะธะฟั‚ะฐ 
set labels = $lb("globalKey", "Name", "DOB", "TS", "RandomTime", "AgeYears", "AgeDecimal", "AgeDouble", "Bool")

// mask ัะพะดะตั€ะถะธั‚ ะฝะฐ 1 ัะปะตะผะตะฝั‚ ะผะตะฝัŒัˆะต ั‡ะตะผ labels ะฟะพั‚ะพะผัƒ ั‡ั‚ะพ "globalKey" - ะฝะฐะทะฒะฐะฝะธะต ัะฐะฑัะบะธะฟั‚ะฐ
// ะŸั€ะพะฟัƒัะบะฐะตะผ %%CLASSNAME
set mask = "-+dmt+++b"

set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)

// ะกะฟะพัะพะฑ 2: ExecuteClass
set sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)

// ะกะฟะพัะพะฑ 3: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)

// ะกะฟะพัะพะฑ 4: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)

ํ˜ธ์ถœ ๋ฐฉ๋ฒ• do ##class(isc.py.test.Person).Test() ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐฉ๋ฒ•์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋„์šฐ๋ฏธ ๋ฉ”์„œ๋“œ

  • GetVariableInfo(variable, serialization, .defined, .type, .length) - ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ: ์ •์˜ ์—ฌ๋ถ€, ํด๋ž˜์Šค ๋ฐ ์ง๋ ฌํ™” ๊ธธ์ด.
  • GetVariableDefined(variable, .defined) - ๋ณ€์ˆ˜๊ฐ€ ์ •์˜๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€.
  • GetVariableType(variable, .type) - ๋ณ€์ˆ˜์˜ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • GetStatus() - Python ์ชฝ์—์„œ ๋งˆ์ง€๋ง‰ ์˜ˆ์™ธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  • GetModuleInfo(module, .imported, .alias) โ€” ๋ชจ๋“ˆ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) - ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

์ƒํ˜ธ ์šด์šฉ์„ฑ

ํ„ฐ๋ฏธ๋„์—์„œ Python ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ์œผ๋‹ˆ ์ด์ œ ํ”„๋กœ๋•์…˜์—์„œ ์‚ฌ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“œ์—์„œ Python๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. isc.py.ens.Operation. ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ์—๊ฒŒ ๋‹ค์Œ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค:

  • Python ์ฝ”๋“œ ์‹คํ–‰
  • Python ์ปจํ…์ŠคํŠธ ์ €์žฅ/๋ณต์›
  • Python์—์„œ ๋ฐ์ดํ„ฐ ๋กœ๋“œ ๋ฐ ์ˆ˜์‹ 

๊ธฐ๋ณธ์ ์œผ๋กœ Pyhton ์ž‘์—…์€ ๋ž˜ํผ์ž…๋‹ˆ๋‹ค. isc.py.Main. ์ž‘์—… isc.py.ens.Operation InterSystems IRIS ์ œํ’ˆ์—์„œ Python ํ”„๋กœ์„ธ์Šค์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์„ฏ ๊ฐ€์ง€ ์š”์ฒญ์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค.

  • isc.py.msg.ExecutionRequest Python ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ณด๊ณ  isc.py.msg.ExecutionResponse ์‹คํ–‰ ๊ฒฐ๊ณผ์™€ ์š”์ฒญ๋œ ๋ณ€์ˆ˜์˜ ๊ฐ’์œผ๋กœ.
  • isc.py.msg.StreamExecutionRequest Python ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ณด๊ณ  isc.py.msg.StreamExecutionResponse ์‹คํ–‰ ๊ฒฐ๊ณผ ๋ฐ ์š”์ฒญ๋œ ๋ณ€์ˆ˜์˜ ๊ฐ’. ๋น„์Šทํ•œ ๋ฌผ๊ฑด isc.py.msg.ExecutionRequest, ํ•˜์ง€๋งŒ ๋ฌธ์ž์—ด ๋Œ€์‹  ์ŠคํŠธ๋ฆผ์„ ์ˆ˜๋ฝํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • isc.py.msg.QueryRequest SQL ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ๋ณด๊ณ  Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest ์ „์—ญ/ํด๋ž˜์Šค/ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋ณด๊ณ  Ens.Response.
  • isc.py.msg.SaveRequest Python ์ปจํ…์ŠคํŠธ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ณด๊ณ  Ens.StringResponse ์ปจํ…์ŠคํŠธ ID๋กœ.
  • isc.py.msg.RestoreRequest Python ์ปจํ…์ŠคํŠธ๋ฅผ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.

    ๋˜ํ•œ, isc.py.ens.Operation ๋‘ ๊ฐ€์ง€ ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค.

    • Initializer - ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค ์„ ํƒ isc.py.init.Abstract. ํ•จ์ˆ˜, ๋ชจ๋“ˆ, ํด๋ž˜์Šค ๋“ฑ์„ ๋กœ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ํ•œ ๋ฒˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    • PythonLib - (Linux์—๋งŒ ํ•ด๋‹น) ๋ถ€ํŒ… ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ํ•ด๋‹น ๊ฐ’์„ ๋‹ค์Œ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. libpython3.6m.so ๋˜๋Š” Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ „์ฒด ๊ฒฝ๋กœ์—์„œ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ

๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค ๊ฐœ๋ฐœ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ํด๋ž˜์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • isc.py.ens.ProcessUtils ๋ณ€์ˆ˜ ๋Œ€์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™œ๋™์—์„œ ์ฃผ์„์„ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • isc.py.util.BPEmulator Python์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค๋ฅผ ์‰ฝ๊ฒŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค(Python ๋ถ€๋ถ„)๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ€์ˆ˜ ๋Œ€์ฒด

์—์„œ ๋ฌผ๋ ค๋ฐ›์€ ๋ชจ๋“  ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค isc.py.ens.ProcessUtils, ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค GetAnnotation(name) ์ด๋ฆ„์œผ๋กœ ํ™œ๋™ ์ฃผ์„์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ํ™œ๋™ ์ฃผ์„์—๋Š” Python์œผ๋กœ ์ „๋‹ฌ๋˜๊ธฐ ์ „์— InterSystems IRIS ์ธก์—์„œ ํ‰๊ฐ€๋  ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ณ€์ˆ˜ ๋Œ€์ฒด ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.

  • ${class:method:arg1:...:argN} - ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
  • #{expr} - ObjectScript ์–ธ์–ด๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค์—์„œ ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. isc.py.test.Process, ์˜ˆ๋ฅผ ๋“ค์–ด ํ™œ๋™์—์„œ Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). ์ด ์˜ˆ์—์„œ:

  • #{process.WorkDirectory} ๊ฐœ์ฒด์˜ WorkDirectory ์†์„ฑ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. process, ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๋‹ค. isc.py.test.Process ์ €๊ฒƒ๋“ค. ํ˜„์žฌ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค.
  • ${%PopulateUtils:Integer:1:100} ๋ฐฉ๋ฒ•์„ ํ˜ธ์ถœ Integer ํด๋ž˜์Šค %PopulateUtils, ์ธ์ˆ˜ ์ „๋‹ฌ 1 ะธ 100, ๋ฒ”์œ„์—์„œ ์ž„์˜์˜ ์ •์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ 1...100.

ํ…Œ์ŠคํŠธ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค

ํ…Œ์ŠคํŠธ ์ƒ์‚ฐ ๋ฐ ํ…Œ์ŠคํŠธ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Python Gateway์˜ ์ผ๋ถ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๋ ค๋ฉด:

  1. OS ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. pip install pandas matplotlib seaborn.
  2. InterSystems IRIS ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. do ##class(isc.py.test.CannibalizationData).Import() ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฑ„์›๋‹ˆ๋‹ค.
  3. ์ œํ’ˆ ์ถœ์‹œ isc.py.test.Production.
  4. ์š”์ฒญ ์œ ํ˜• ๋ณด๋‚ด๊ธฐ Ens.Request ะฒ isc.py.test.Process.

๋ชจ๋“  ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ด…์‹œ๋‹ค. ์—ด๋ ค ์žˆ๋Š” isc.py.test.Process BPL ํŽธ์ง‘๊ธฐ์—์„œ:

InterSystems IRIS์˜ Python ๊ฒŒ์ดํŠธ์›จ์ด

์ฝ”๋“œ ์‹คํ–‰

๊ฐ€์žฅ ์ค‘์š”ํ•œ ํ˜ธ์ถœ์€ Python ์ฝ”๋“œ ์‹คํ–‰์ž…๋‹ˆ๋‹ค.

InterSystems IRIS์˜ Python ๊ฒŒ์ดํŠธ์›จ์ด

์‚ฌ์šฉ๋œ ์š”์ฒญ isc.py.msg.ExecutionRequest, ์†์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Code โ€” ํŒŒ์ด์ฌ ์ฝ”๋“œ.
  • SeparateLines - ์‹คํ–‰์„ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ค„๋กœ ๋ถ„ํ• ํ• ์ง€ ์—ฌ๋ถ€. $c(10) (n) ๋ฌธ์ž์—ด์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์— ์ „์ฒด ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์ฒ˜๋ฆฌ ์ „์šฉ์ž…๋‹ˆ๋‹ค. def ์œ ์‚ฌํ•œ ์—ฌ๋Ÿฌ ์ค„ ํ‘œํ˜„. ๊ธฐ๋ณธ 0.
  • Variables ์‘๋‹ต์— ์ถ”๊ฐ€๋  ๋ณ€์ˆ˜์˜ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
  • Serialization - ๋ฐ˜ํ™˜ํ•˜๋ ค๋Š” ๋ณ€์ˆ˜๋ฅผ ์ง๋ ฌํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•. ์˜ต์…˜: Str, Repr, JSON, Pickle ะธ Dill, ๊ธฐ๋ณธ Str.

์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” ์†์„ฑ๋งŒ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Code, ๋‹ค๋ฅธ ๋ชจ๋“  ์†์„ฑ์ด ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ํ˜ธ์ถœํ•˜์—ฌ ์„ค์ • process.GetAnnotation("Import pandas"), ๋Ÿฐํƒ€์ž„ ์‹œ ๋ณ€์ˆ˜ ๋Œ€์ฒด๊ฐ€ ์ˆ˜ํ–‰๋œ ํ›„ ์ฃผ์„์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฝ”๋“œ import pandas as pd Python์œผ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. GetAnnotation ์—ฌ๋Ÿฌ ์ค„ Python ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ์—๋Š” ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ์†์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Code ์–ด๋–ค ์‹์œผ๋กœ๋“  ๋‹น์‹ ์—๊ฒŒ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋ณ€์ˆ˜ ์–ป๊ธฐ

์‚ฌ์šฉํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ํฅ๋ฏธ๋กœ์šด ๋„์ „ isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

InterSystems IRIS์˜ Python ๊ฒŒ์ดํŠธ์›จ์ด

ํŒŒ์ด์ฌ ์ธก์—์„œ ์ƒ๊ด€ ํ–‰๋ ฌ์„ ๊ณ„์‚ฐํ•˜๊ณ  ๋ณ€์ˆ˜๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. corrmat ์š”์ฒญ ์†์„ฑ์„ ์„ค์ •ํ•˜์—ฌ JSON ํ˜•์‹์˜ InterSystems IRIS๋กœ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค.

  • Variables: "corrmat"
  • Serialization: "JSON"

Visual Trace์—์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

InterSystems IRIS์˜ Python ๊ฒŒ์ดํŠธ์›จ์ด

๊ทธ๋ฆฌ๊ณ  BP์—์„œ ์ด ๊ฐ’์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. callresponse.Variables.GetAt("corrmat").

๋ฐ์ดํ„ฐ ์ „์†ก

๋‹ค์Œ์œผ๋กœ InterSystems IRIS์—์„œ Python์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ „์†ก ์š”์ฒญ์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. isc.py.msg.DataRequest, ๋‹ค์Œ ์†์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • Variable ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธฐ๋ก๋˜๋Š” Python ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.
  • Type - ๋ณ€์ˆ˜ ์œ ํ˜•: dataframe (ํŒฌ๋” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„) ๋˜๋Š” list.
  • Namespace - ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ์˜์—ญ. ๋น„๋‹ ๋ด‰ํˆฌ isc.py ์ด ์˜์—ญ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ œํ’ˆ ์ง€์›์ด ์—†๋Š” ์˜์—ญ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ 4๊ฐ€์ง€ ์š”์ฒญ ํด๋ž˜์Šค๊ฐ€ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

  • isc.py.msg.QueryRequest - ์†์„ฑ ์„ค์ • Query SQL ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • isc.py.msg.ClassRequest - ์†์„ฑ ์„ค์ • Class ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • isc.py.msg.TableRequest - ์†์„ฑ ์„ค์ • Table ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • isc.py.msg.GlobalRequest - ์†์„ฑ ์„ค์ • Global ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค์—์„œ ํ™œ๋™ ์‚ดํŽด๋ณด๊ธฐ RAW์–ด๋””์—์„œ isc.py.msg.QueryRequest ํ–‰๋™์œผ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

InterSystems IRIS์˜ Python ๊ฒŒ์ดํŠธ์›จ์ด

Python ์ปจํ…์ŠคํŠธ ์ €์žฅ/๋ณต์›

๋งˆ์ง€๋ง‰์œผ๋กœ InterSystems IRIS์— Python ์ปจํ…์ŠคํŠธ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. isc.py.msg.SaveRequest ์ธ์ˆ˜ ํฌํ•จ:

  • Mask โ€” ๋งˆ์Šคํฌ๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๋ณ€์ˆ˜๋งŒ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ง€์› * ะธ ?. ์˜ˆ: "Data*, Figure?". ๊ธฐ๋ณธ *.
  • MaxLength โ€” ์ €์žฅ๋œ ๋ณ€์ˆ˜์˜ ์ตœ๋Œ€ ๊ธธ์ด. ๋ณ€์ˆ˜์˜ ์ง๋ ฌํ™”๊ฐ€ ๋” ๊ธธ๋ฉด ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ธธ์ด์˜ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด 0์œผ๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค. ๊ธฐ๋ณธ $$$MaxStringLength.
  • Name โ€” ์ปจํ…์ŠคํŠธ ์ด๋ฆ„(์„ ํƒ ์‚ฌํ•ญ).
  • Description โ€” ์ปจํ…์ŠคํŠธ ์„ค๋ช…(์„ ํƒ ์‚ฌํ•ญ).

๋ณด๊ณ  Ens.StringResponse ั Id ์ €์žฅ๋œ ์ปจํ…์ŠคํŠธ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค์—์„œ ํ™œ๋™ ์‚ดํŽด๋ณด๊ธฐ Save Context.

๊ด€๋ จ ์š”์ฒญ isc.py.msg.RestoreRequest InterSystems IRIS์—์„œ Python์œผ๋กœ ์ปจํ…์ŠคํŠธ๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

  • ContextId ์ปจํ…์ŠคํŠธ ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.
  • Clear โ€” ๋ณต์›ํ•˜๊ธฐ ์ „์— ์ปจํ…์ŠคํŠธ๋ฅผ ์ง€์›๋‹ˆ๋‹ค.

์ฃผํ”ผํ„ฐ ์ˆ˜์ฒฉ

์ฃผํ”ผํ„ฐ ์ˆ˜์ฒฉ ์ฝ”๋“œ, ์‹œ๊ฐํ™” ๋ฐ ํ…์ŠคํŠธ๊ฐ€ ํฌํ•จ๋œ ๋…ธํŠธ๋ถ์„ ๋งŒ๋“ค๊ณ  ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ ์†Œ์Šค ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค. Python Gateway๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด BPL ํ”„๋กœ์„ธ์Šค๋ฅผ Jupyter ๋…ธํŠธ๋ถ์œผ๋กœ ๋ณด๊ณ  ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ Python 3 ์‹คํ–‰๊ธฐ๊ฐ€ ํ˜„์žฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํ™•์žฅ์€ ์ฃผ์„์— Python ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๊ณ  ์„ ํ–‰ ์ œ๋ชฉ์œผ๋กœ ํ™œ๋™ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ Jupyter Notebook์—์„œ PythonGateway ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ƒˆ๋กœ์šด ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ
  • ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค ์‚ญ์ œ
  • ์ƒˆ ํ™œ๋™ ๋งŒ๋“ค๊ธฐ
  • ๋ณ€๊ฒฝ ํ™œ๋™
  • ํ™œ๋™ ์‚ญ์ œ

์—ฌ๊ธฐ์— ๋ฐ๋ชจ ๋น„๋””์˜ค. ๊ทธ๋ฆฌ๊ณ  ์ผ๋ถ€ ์Šคํฌ๋ฆฐ์ƒท:

ํ”„๋กœ์„ธ์Šค ํƒ์ƒ‰๊ธฐ

InterSystems IRIS์˜ Python ๊ฒŒ์ดํŠธ์›จ์ด

ํ”„๋กœ์„ธ์Šค ํŽธ์ง‘๊ธฐ

InterSystems IRIS์˜ Python ๊ฒŒ์ดํŠธ์›จ์ด

์„ค์น˜

  1. InterSystems IRIS 2019.2+๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  2. PythonGateway v0.8+ ์„ค์น˜(๋‹จ์ง€ ํ•„์š”ํ•จ isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints ะธ isc.py.ens.ProcessUtils).
  3. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ObjectScript ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  4. ์‹คํ–‰ํ•˜๋‹ค do ##class(isc.py.util.Jupyter).Install() ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

ะ”ะพะบัƒะผะตะฝั‚ะฐั†ะธั.

์กฐ์‚ฌ ๊ฒฐ๊ณผ

MLToolkit์€ ๊ตฌ์ถ•๋œ ๋ชจ๋ธ์„ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค์—์„œ ์ง์ ‘ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ชจ๋ธ๊ณผ ํŠธ๋žœ์žญ์…˜ ํ™˜๊ฒฝ์„ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๋„๊ตฌ ์„ธํŠธ์ž…๋‹ˆ๋‹ค. Python Gateway๋Š” MLToolkit์˜ ์ผ๋ถ€์ด๋ฉฐ Python ์–ธ์–ด์™€์˜ ํ†ตํ•ฉ์„ ์ œ๊ณตํ•˜์—ฌ Python(๋งŽ์€ ๋ฐ์ดํ„ฐ ๊ณผํ•™์ž์˜ ๊ธฐ๋ณธ ํ™˜๊ฒฝ)์—์„œ ์ƒ์„ฑ๋œ ๊ธฐ๊ณ„ ํ•™์Šต ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ํ•˜๊ณ  ์ˆ˜๋งŽ์€ ๊ธฐ์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ ์‘ํ˜• ๋กœ๋ด‡ ๋ถ„์„ AI/ InterSystems ํ”Œ๋žซํผ IRIS์˜ ML ์†”๋ฃจ์…˜.

์ฐธ์กฐ

MLํˆดํ‚ท

MLToolkit ์‚ฌ์šฉ์ž ๊ทธ๋ฃน์€ InterSystems ๊ธฐ์—… GitHub ์กฐ์ง์˜ ์ผ๋ถ€๋กœ ์ƒ์„ฑ๋œ ๋น„๊ณต๊ฐœ GitHub ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค. Python ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ํฌํ•จํ•˜์—ฌ MLToolkit ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์„ค์น˜, ํ•™์Šต ๋˜๋Š” ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ธ ์™ธ๋ถ€ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ทธ๋ฃน์€ ๋งˆ์ผ€ํŒ…, ์ œ์กฐ, ์˜ํ•™ ๋ฐ ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ์‚ฐ์—… ๋ถ„์•ผ์—์„œ ์ˆ˜๋งŽ์€ ๊ตฌํ˜„ ์‚ฌ๋ก€(์†Œ์Šค ์ฝ”๋“œ ๋ฐ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ํฌํ•จ)๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ML Toolkit ์‚ฌ์šฉ์ž ๊ทธ๋ฃน์— ๊ฐ€์ž…ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์ฃผ์†Œ๋กœ ๊ฐ„๋‹จํ•œ ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด์ฃผ์‹ญ์‹œ์˜ค. [์ด๋ฉ”์ผ ๋ณดํ˜ธ] ํŽธ์ง€์— ๋‹ค์Œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์‹ญ์‹œ์˜ค.

  • GitHub ์‚ฌ์šฉ์ž ์ด๋ฆ„
  • ์กฐ์ง(์ผํ•˜๊ฑฐ๋‚˜ ๊ณต๋ถ€)
  • ์ง์œ„(์กฐ์ง์—์„œ์˜ ์‹ค์ œ ์ง์œ„, "ํ•™์ƒ" ๋˜๋Š” "๋…๋ฆฝ").
  • ๊ตญ๊ฐ€

๊ธฐ์‚ฌ๋ฅผ ์ฝ๊ณ  ์ธ๊ณต ์ง€๋Šฅ ๋ฐ ๊ธฐ๊ณ„ ํ•™์Šต ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ฐœ๋ฐœํ•˜๊ฑฐ๋‚˜ ํ˜ธ์ŠคํŒ…ํ•˜๊ธฐ ์œ„ํ•œ ํ”Œ๋žซํผ์œผ๋กœ์„œ InterSystems IRIS์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๊ท€์‚ฌ์—์„œ ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๋„๋ก ์ดˆ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ท€์‚ฌ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ฆ‰์‹œ ๋ถ„์„ํ•˜๊ณ  ๊ณต๋™์œผ๋กœ ์‹คํ–‰ ๊ณ„ํš์„ ๊ฒฐ์ •ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. AI/ML ์ „๋ฌธ๊ฐ€ ๊ทธ๋ฃน์˜ ์—ฐ๋ฝ์ฒ˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ โ€“ [์ด๋ฉ”์ผ ๋ณดํ˜ธ].

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€