๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ด‘๊ณ  ๋ฐฐ๋„ˆ
IT/tutorials

[ ์›น ๋ธŒ๋ผ์šฐ์ € ์ž๋™ํ™” ] ํšจ์œจ์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ Selenium ๋ชจ๋“ˆ

๋ฐ˜์‘ํ˜•

seleium ์›น ๋ธŒ๋ผ์šฐ์ € ์ž๋™ํ™” ๋„๊ตฌ ํ™œ์šฉ๋ฒ• [ Python์œผ๋กœ ์›น ์ž‘์—… ์ž๋™ํ™” ]

Selenium์œผ๋กœ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ์™€ ์›น ์Šคํฌ๋ž˜ํ•‘ ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ

Selenium์€ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ ์†Œ์Šค [ ์›น ๋ธŒ๋ผ์šฐ์ € ์ž๋™ํ™” ๋„๊ตฌ]๋กœ, ์ฃผ๋กœ Python๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Selenium์€ ๋‹ค์–‘ํ•œ ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ํ˜ธํ™˜๋˜๋ฉฐ, ์‚ฌ์šฉ์ž๋Š” ์ง์ ‘ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์›น ํŽ˜์ด์ง€์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›น ๋ธŒ๋ผ์šฐ์ € ์ž๋™ํ™”

์ด๋Š” ์›น ์Šคํฌ๋ž˜ํ•‘, ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํ˜ธ์ž‘์šฉ ๋“ฑ ์—ฌ๋Ÿฌ ์ž‘์—…์—์„œ ์ž๋™ํ™” ์ž‘์—…์„ ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›น ๋ธŒ๋ผ์šฐ์ € ์ž๋™ํ™”

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

์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์€ ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ์ค„์ด๊ณ , ํ…Œ์ŠคํŠธ ๋˜๋Š” ์Šคํฌ๋ž˜ํ•‘ ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

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

์›น ์Šคํฌ๋ž˜ํ•‘

Selenium์€ ์›น ํŽ˜์ด์ง€์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋ฐ์—๋„ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ „ํ†ต์ ์ธ ์›น ์Šคํฌ๋ž˜ํ•‘ ๋„๊ตฌ์™€ ๋‹ฌ๋ฆฌ, Selenium์€ JavaScript๋กœ ๋™์ ์œผ๋กœ ๋ Œ๋”๋ง๋˜๋Š” ์›น ํŽ˜์ด์ง€๋„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋กœ ์ธํ•ด ๋ณต์žกํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ Ajax๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŽ˜์ด์ง€์—์„œ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๋ฐ ๊ฐ•์ ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

Selenium์„ ์›น ์Šคํฌ๋ž˜ํ•‘์— ์‚ฌ์šฉํ•  ๋•Œ๋Š”, ์›น ์‚ฌ์ดํŠธ์˜ ๋กœ๋ด‡ ๋ฐฐ์ œ ํ‘œ์ค€(Robots.txt) ๋ฐ ๋ฒ•์  ์ œํ•œ์„ ์ค€์ˆ˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋งคํฌ๋กœ ์ž๋™ํ™” ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์‚ฌ์šฉ์‹œ ์ฃผ์˜ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ

Selenium์€ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ์—์„œ๋„ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ํ’ˆ์งˆ ๋ณด์ฆ(QA)๊ณผ ์ง€์†์ ์ธ ํ†ตํ•ฉ(CI) ํ™˜๊ฒฝ์—์„œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. Selenium์„ ํ†ตํ•ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๋ฉด ์ˆ˜๋™ ํ…Œ์ŠคํŠธ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์ค„์ด๊ณ , ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ์˜ ์ผ๊ด€์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Selenium์€ ๋ฒ„ํŠผ ํด๋ฆญ, ์ž…๋ ฅ ํ•„๋“œ ์ž‘์„ฑ, ํŽ˜์ด์ง€ ํƒ์ƒ‰ ๋“ฑ์˜ ๋™์ž‘์„ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ฒฐํ•จ์„ ๋น ๋ฅด๊ฒŒ ๋ฐœ๊ฒฌํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํ˜ธ์ž‘์šฉ

Selenium์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐ ์žˆ์–ด ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ์‹ค์ œ ์‚ฌ์šฉ์ž ํ–‰๋™์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜์—ฌ ๋ณต์žกํ•œ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹ค์ œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Selenium ๋ชจ๋“ˆ
Selenium ๋ชจ๋“ˆ

Selenium ๋ชจ๋“ˆ์˜ ๊ตฌ์„ฑ

Selenium์€ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์—ฌ๋Ÿฌ ํ•˜์œ„ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ฐ ๋ชจ๋“ˆ์€ ํŠน์ •ํ•œ ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

selenium.webdriver

์ด ๋ชจ๋“ˆ์€ Selenium์˜ ํ•ต์‹ฌ ๋ชจ๋“ˆ๋กœ, ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ œ์–ดํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Selenium์€ Chrome, Firefox, Safari ๋“ฑ ๋‹ค์–‘ํ•œ ๋ธŒ๋ผ์šฐ์ €์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ฐ ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ๋ณ„๋„์˜ WebDriver๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์ด WebDriver๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์„ ์—ด๊ณ , ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

selenium.webdriver.common.by

์ด ๋ชจ๋“ˆ์€ ์›น ์š”์†Œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“คBy.ID,By.NAME,By.XPATH,By.CSS_SELECTOR๋“ฑ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์„ ํ†ตํ•ด ํŠน์ • ์›น ์š”์†Œ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋ณด๋‹ค ์ •๊ตํ•˜๊ฒŒ ์›น ํŽ˜์ด์ง€ ๋‚ด ์š”์†Œ๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

selenium.webdriver.common.keys

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

selenium.common.exceptions

Selenium์€ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๋ชจ๋“ˆ์€ ๊ทธ๋Ÿฐ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. NoSuchElementException์€ ํŠน์ • ์š”์†Œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์„ ๋•Œ ๋ฐœ์ƒํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๊ฐ€ ์ค‘๋‹จ๋˜์ง€ ์•Š๊ณ  ์˜ˆ์™ธ ์ƒํ™ฉ์— ์ ์ ˆํžˆ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

selenium.webdriver.support.ui.WebDriverWait

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

selenium.webdriver.support.expected_conditions

์ด ๋ชจ๋“ˆ์€ ํŠน์ • ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š”WebDriverWait๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด, ์›น ํŽ˜์ด์ง€์˜ ํŠน์ • ์š”์†Œ๊ฐ€ ํ‘œ์‹œ๋˜์—ˆ๋Š”์ง€, ๋˜๋Š” ํด๋ฆญํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

from selenium import webdriver  # ์›น ๋ธŒ๋ผ์šฐ์ € ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ๋ชจ๋“ˆ
from selenium.webdriver.common.by import By  # ์š”์†Œ ์ฐพ๊ธฐ๋ฅผ ์œ„ํ•œ ๋ชจ๋“ˆ 
from selenium.webdriver.common.keys import Keys  # ํŠน์ˆ˜ ํ‚ค ์ž…๋ ฅ์„ ์œ„ํ•œ ๋ชจ๋“ˆ 
from selenium.common.exceptions import NoSuchElementException  
# ์š”์†Œ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ชจ๋“ˆ
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
๋ฐ˜์‘ํ˜•

'IT > tutorials' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๊ตฌํ˜• ์ปดํ“จํ„ฐ์— ์œˆ๋„์šฐ 11 ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ Tiny11 -๋ฌด๋ฃŒ ์šด์˜์ฒด๊ณ„  (1) 2024.11.30
[ ์ˆ˜์ตํ˜• ๋ธ”๋กœ๊ทธ ๋งŒ๋“ค๊ธฐ ] ์›Œ๋“œํ”„๋ ˆ์Šค ์„œ๋ฒ„ ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ธํŒ…  (0) 2024.11.15
์ˆ˜์ตํ˜• ์›Œ๋“œํ”„๋ ˆ์Šค ๋ธ”๋กœ๊ทธ ํ…Œ๋งˆ ์†Œ๊ฐœ [ GENERATE PRESS ํ…Œ๋งˆ ]  (0) 2024.10.19
์œˆ๋„์šฐ11 ์—์„œ 3Dํ”„๋ฆฐํ„ฐ ํด๋ฆฌํผ ์„ค์น˜ ๋ฐฉ๋ฒ• ๋ฐ ์‚ฌ์šฉ๋ฒ• ์†Œ๊ฐœ  (0) 2024.09.25
3D ํ”„๋ฆฐํ„ฐ ์ตœ์ ํ™” ์ถœ๋ ฅ๋ฌผ ํ–ฅ์ƒ์„ ์œ„ํ•œ [ PID ํŠœ๋‹ ] ๋ฐฉ๋ฒ•  (0) 2024.09.23
๋„คํŠธ์›Œํฌ ์—†์ด๋„ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ฐจ์„ธ๋Œ€ ์ธ๊ณต์ง€๋Šฅ ์˜จ๋””๋ฐ”์ด์Šค(On-device) AI ์†Œ๊ฐœ  (0) 2024.09.23
์ˆ˜๋ฅ™์ด์ฐฉ๋ฅ™ ๊ฒฝ๋น„ํ–‰๊ธฐ ICON Aircraft ICON A5 ์†Œ๊ฐœ ๋ฐ ํŠน์ง•  (0) 2024.09.21