์›น์บฃ๐Ÿ˜บ Issue ๊ธฐ๋ก์žฅ๐Ÿ“

Siwon Yooยท2022๋…„ 11์›” 12์ผ
3

์›น์บฃ๐Ÿ˜บ

๋ชฉ๋ก ๋ณด๊ธฐ
2/3
post-thumbnail

๐Ÿˆ ๊ฐ„๋‹จํ•œ ์„œ๋ก 

์•ž์„  ํฌ์ŠคํŠธ์—์„œ ์†Œ๊ฐœํ•œ ๊ณต์ง€์‚ฌํ•ญ ์ˆ˜์‹ ๊ธฐ ์Šฌ๋ž™ ๋ด‡ ์›น์บฃ์„ ๋งŒ๋“ค๋ฉฐ ๋งŒ๋‚œ ์ด์Šˆ๋“ค์„ ๊ธฐ๋กํ•œ๋‹ค.

์ด๋ฒˆ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ Workaround๋ผ๋Š” ํ‘œํ˜„์„ ์œ ๋… ๋งŽ์ด ๋งˆ์ฃผ์ณค๋˜ ๊ฒƒ ๊ฐ™๋‹ค.
๋‹น์žฅ ์™„๋ฒฝํ•œ ํ•ด๊ฒฐ์ด ์‚ฌ์‹ค์ƒ ์–ด๋ ค์šด ์ด์Šˆ๋“ค์„ ๋งˆ์ฃผํ•˜๋ฉฐ Workaround๋ฅผ ์ฐพ๊ฒŒ ๋˜๋Š” ์ˆœ๊ฐ„์—” ์ •๋ง ๋ฐ˜๊ฐ€์› ๋‹ค๐Ÿ˜….

์ธ์ƒ์ด ๊ฐ•๋ ฌํ•˜๊ฒŒ ๋‚จ๋Š” ์ด์Šˆ ์ˆœ์„œ๋Œ€๋กœ ์ ์–ด ๋‚ด๋ ค๊ฐ„๋‹ค.

๐Ÿˆ Issues

๐Ÿพ 1. iOS device์—์„œ์˜ ์Šฌ๋ž™ api ์ด์Šˆ ๋ฐœ๊ฒฌ

๐Ÿงถ ์ด์Šˆ ์†Œ๊ฐœ

์Šฌ๋ž™ ๋ด‡์ด ๋ณด๋‚ธ ๋ฉ”์‹œ์ง€์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋งํฌ๊ฐ€, ios device์—์„œ ์ œ๋Œ€๋กœ ์ ‘์†๋˜์ง€ ์•Š๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

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

๐Ÿงถ ๋ฐœ์ƒ ์›์ธ

URI ์ธ์ฝ”๋”ฉ๊ณผ ๊ด€๋ จ๋œ ์Šฌ๋ž™ iOS app์˜ ์ด์Šˆ์˜€๋‹ค.

URI์— ํฌํ•จ๋œ ๋„์–ด์“ฐ๊ธฐ๋‚˜ ํŠน์ˆ˜๊ธฐํ˜ธ, ํ•œ๊ธ€ ๋“ฑ์˜ ๋ฌธ์ž๋Š”, UTF-8 ์ธ์ฝ”๋”ฉ์— ๋”ฐ๋ผ ๊ฐ character์— ๋งž๋Š” ๊ธฐํ˜ธ๋กœ ์ธ์ฝ”๋”ฉ๋œ๋‹ค.

๋ฒจ๋กœ๊ทธ ๊ธ€ ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ ๋ญ”๊ฐ€ ๋’ค์— ์ž”๋œฉ ๋ถ™์–ด์„œ ๋‚˜์˜ค๋Š” ์ด์œ ๋„, URI์— ํฌํ•จ๋œ ํ•œ๊ธ€ ํฌ์ŠคํŠธ ์ œ๋ชฉ์ด ์ธ์ฝ”๋”ฉ๋˜์–ด์„œ ๊ทธ๋ ‡๋‹ค.
์•„๋ž˜ ๋‘ ๋งํฌ๋Š” ๋‹ฌ๋ผ ๋ณด์ด์ง€๋งŒ ๊ฐ™์€ ์›นํŽ˜์ด์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”, ๊ฐ™์€ URI์ด๋‹ค.

https://velog.io/@seewon/๊ณต์ง€์‚ฌํ•ญ-์•Œ๋ ค์ฃผ๋Š”-๊ณ ์–‘์ด-์›น์บฃ-๊ฐœ๋ฐœ๊ธฐ

https://velog.io/@seewon/%EA%B3%B5%EC%A7%80%EC%82%AC%ED%95%AD-%EC%95%8C%EB%A0%A4%EC%A3%BC%EB%8A%94-%EA%B3%A0%EC%96%91%EC%9D%B4-%EC%9B%B9%EC%BA%A3-%EA%B0%9C%EB%B0%9C%EA%B8%B0

์ด๋ ‡๊ฒŒ ์ธ์ฝ”๋”ฉ๊ณผ ๊ด€๋ จํ•ด์„œ, ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ampersand๋ผ๊ณ  ๋ถ€๋ฅด๋Š” & ๊ธฐํ˜ธ๋Š”, URI ์ƒ์—์„œ &์™€ ๊ฐ™๋‹ค. ๋”ฐ๋ผ์„œ URI ์ƒ์˜ & ๊ธฐํ˜ธ๋ฅผ ์ฃ„๋‹ค &๋กœ ๋ฐ”๊ฟ”๋ฒ„๋ ค๋„ ๋ฌธ์ œ ์—†์ด ๊ฐ™์€ ํŽ˜์ด์ง€๋กœ ์ ‘์†๋œ๋‹ค.

์„œ๊ฐ•๋Œ€ํ•™๊ต ์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ ์ฃผ์š”๊ณต์ง€์˜ ๊ฐ ๊ฒŒ์‹œ๊ธ€์— ์ ‘๊ทผํ•˜๋Š” URI๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

https://scc.sogang.ac.kr/front/cmsboardview.do?currentPage=1&searchField=ALL&searchValue=&searchLowItem=ALL&bbsConfigFK=1905&siteId=cs&pkid=886557

searchLowItem=ALL ์ดํ›„์˜ URI ์ฟผ๋ฆฌ๋ฅผ ์ž˜ ์‚ดํŽด๋ณด๋ฉด, bbsConfigFK=1905&siteId=cs&pkid=886557๋ผ๊ณ  ๋˜์–ด ์žˆ๋‹ค. DB์—์„œ bbsConfig๋ผ๋Š” ์ด๋ฆ„์˜ Foreign key๊ฐ€ 1905์ธ ํ•ญ๋ชฉ ์ค‘, siteID๊ฐ€ cs์ด๊ณ , Primary key๊ฐ€ 886557์ธ ํ•ญ๋ชฉ์„ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

์ด์ฒ˜๋Ÿผ ํ•™๊ต ํ™ˆํŽ˜์ด์ง€๋Š” DB์— ์ €์žฅ๋œ ํ•ญ๋ชฉ์„ URI ์ฟผ๋ฆฌ๋กœ ์ง์ ‘ ์กฐํšŒํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.

URI ์ธ์ฝ”๋”ฉ ์ƒ์—์„œ๋Š” &์™€ &๋Š” ๊ฐ™์€ ์˜๋ฏธ์˜€์ง€๋งŒ, DB(SQL)์—์„œ๋Š” &๋งŒ์ด and๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์—ฐ์‚ฐ์ž์ด๊ณ , &๋Š” ๊ทธ์ € syntax error์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ตฌ๋ฌธ์ด๋‹ค.

Slack API๋ฅผ ํ†ต๊ณผํ•œ ํ•™๊ต ๊ณต์ง€์‚ฌํ•ญ ๋งํฌ์˜ &๊ฐ€ ์Šฌ๋ž™ iOS ์•ฑ์—์„œ๋Š” ์ฃ„๋‹ค &๋กœ ๋ฐ”๋€Œ์–ด ๋ฒ„๋ ค ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

๐Ÿงถ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

Slack ์ธก์— ์ด์Šˆ ๋ฆฌํฌํŒ… ํ›„์—, ์ฃผ๋ณ€ ์‚ฌ๋žŒ๋“คํ•œํ…Œ ์กฐ์–ธ๋„ ๊ตฌํ•˜๊ณ , ๋‹ค๋ฐฉ๋ฉด์œผ๋กœ ๊ณ ๋ฏผํ•œ ๊ฒฐ๊ณผ Short URL์„ ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

๋„๋ฉ”์ธ์„ ํ•˜๋‚˜ ๋”ฐ์„œ, ๋‚ด๊ฐ€ ์ƒˆ๋กœ ๋งŒ๋“  ๋„๋ฉ”์ธ์„ ๊ฑฐ์น˜๋ฉด ํ•™๊ต ๊ณต์ง€์‚ฌํ•ญ ๋งํฌ๋กœ redirect๋˜๋„๋ก ๊ตฌํ˜„ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์•˜๋‹ค. ์ƒˆ๋กœ ๋งŒ๋“  ๋„๋ฉ”์ธ์—๋Š” &๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š๊ฒŒ ํ•˜๊ณ , ์„œ๋ฒ„์—์„œ ๊ณต์ง€์‚ฌํ•ญ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๋„๋ก ๊ตฌํ˜„ํ•  ์ƒ๊ฐ์ด์—ˆ๋‹ค.

๊ณ„ํš๋งŒ ์„ธ์›Œ ๋‘๊ณ  ์‹œํ—˜๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์Šฌ๋ž™ ์ธก์—์„œ ์ œ์ถœํ•œ ์ด์Šˆ์— ๋Œ€ํ•œ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์„ ๋•๊ฒ ๋‹ค๋ฉฐ ์ด์Šˆ์— ๋Œ€ํ•œ ํ™•์ธ ๋ฉ”์ผ์ด ์™”๋‹ค.

์‚ฌ์‹ค short URL ๊ตฌํ˜„์„ ์—ผ๋‘์— ๋‘๊ณ  ์žˆ์–ด ํฌ๊ฒŒ ๋„์›€ ๋ฐ›์„ ์ƒ๊ฐ์€ ์—†์—ˆ์ง€๋งŒ, ๋ฒ„๊ทธ ๊ฐœ์„ ์„ ์œ„ํ•ด ์ด์Šˆ ์žฌํ˜„ ๋ฐฉ๋ฒ• ๋“ฑ์„ ํฌํ•จํ•ด ๋‹ต์žฅ์„ ๋ณด๋ƒˆ๋‹ค.

์ „๋ฌธ๊ฐ€๋ฅผ ๋ฐฐ์ •ํ•ด ์ฃผ๊ฒ ๋‹ค๋Š” ๋ช‡ ํ†ต์˜ ๋ฉ”์ผ์ด ๋” ์˜ค๊ฐ€๊ณ ,
๋ฉฐ์น  ํ›„ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ™•์ธํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค๊ณผ ํ•จ๊ป˜ Workaround ์šฐํšŒ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•ˆ๋‚ด๋ฅผ ๋‹ด์€ ๋ฉ”์ผ์ด ์™”๋‹ค.

API ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ plain text๊ฐ€ ์•„๋‹Œ, Blocks์— ๋‹ด์€ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋ฉด ๋œ๋‹ค๋Š” ๋‹ต๋ณ€์ด์—ˆ๋‹ค.
(Blocks๋Š” ์Šฌ๋ž™ API์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.)
์ ์šฉํ•ด ๋ณด์•˜๋”๋‹ˆ, ๋ฌธ์ œ๊ฐ€ ์ž˜ ํ•ด๊ฒฐ๋˜์–ด ์•„์ง๊นŒ์ง€ ์ž˜ ์“ฐ๊ณ  ์žˆ๋‹ค.

Slack์˜ ๊ณต์‹ Github ๋ ˆํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด contributor๊ฐ€ ๋  ์ˆ˜ ์žˆ์—ˆ์„ํ…๋ฐ๐Ÿ˜† ์—†๋‹ค๋Š” ๊ฒŒ ๋‚ด์‹ฌ ์•„์‰ฌ์› ๋‹ค.

๊ทธ๋ž˜๋„ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ณธ์‚ฌ ์ธก์— ์„ฑ๊ณต์ ์ธ issue reporting์„ ํ•ด๋ณด๋Š” ์ƒˆ๋กœ์šด ๊ฒฝํ—˜์„ ํ–ˆ๋‹ค.

๐Ÿพ 2. /var/run ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ฒฝ๋กœ ์ด์Šˆ๋กœ ์ธํ•œ Cron Daemon ์ž‘๋™ ์ค‘๋‹จ

๐Ÿงถ ์ด์Šˆ ์†Œ๊ฐœ

์–ด๋Š์ˆœ๊ฐ„ ์ž˜ ๋Œ๋˜ Cron ๋ฐ๋ชฌ์ด ์ฃฝ์—ˆ๋‹ค.
๋ฉ”์ผ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•ด ๋ณด๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์—ˆ๋‹ค.

selenium.common.exceptions.WebDriverException: Message: Service {chromedriver ๊ฒฝ๋กœ} unexpectedly exited. Status code was: 1

ํฌ๋กฌ ๋“œ๋ผ์ด๋ฒ„์˜ unexpected exit์ด์—ˆ๋‹ค.
์ข€ ๋” ์ž์„ธํ•œ ํ™•์ธ์„ ์œ„ํ•ด์„œ, Cron log๊ฐ€ ์ฐํžˆ๋Š” ํŒŒ์ผ์„ ์ฐพ์•˜๋‹ค.
/var/log/cron-20221023 ์˜ ๊ฒฝ๋กœ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ํŒŒ์ผ์—์„œ ๊ตฌ์ฒด์ ์ธ ์˜ค๋ฅ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.


Cron์ด ์ž‘์—… ์ˆ˜ํ–‰์„ ์œ„ํ•ด์„œ ์ฐธ์กฐํ•˜๋Š” crond.pid ํŒŒ์ผ์ด ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒฝ๋กœ /var/run/crond.pid์—์„œ ์ฐพ์„ ์ˆ˜ ์—†์–ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

๐Ÿงถ ๋ฐœ์ƒ ์›์ธ

crond.pid๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•˜๋Š” ํ•ด๋‹น ๊ฒฝ๋กœ๋กœ ๊ฐ€์„œ ํ™•์ธํ•ด ๋ณด๋‹ˆ, ์›๋ž˜ ๋ฉ€์ฉกํ•˜๊ฒŒ ์กด์žฌํ•˜๋˜ /var/run ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋นจ๊ฐ„ ์ƒ‰์œผ๋กœ ๊นœ๋นก์ด๊ณ  ์žˆ์—ˆ๋‹ค.

๋””๋ ‰ํ† ๋ฆฌ ์˜† ํ™”์‚ดํ‘œ ํ‘œ์‹œ๋Š”, ๋ฆฌ๋ˆ…์Šค์˜ symbolic link๋กœ, ์œˆ๋„์šฐ์—์„œ ํด๋” ๋ฐ”๋กœ๊ฐ€๊ธฐ์™€ ๊ฐ™์ด ์›๋ž˜ ๊ฒฝ๋กœ๋กœ ์ด์–ด ์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š”๋ฐ ์ด ๋ถ€๋ถ„์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด ๊ฒƒ์ด๋‹ค.

๋ฆฌ๋ˆ…์Šค์—์„œ /run ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์›๋ž˜ /var ๋””๋ ‰ํ† ๋ฆฌ ํ•˜์œ„์— ์žˆ๋‹ค๊ฐ€, /run ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•  ์ผ์ด ๋งŽ์•„ depth ๊ฐ์†Œ๋ฅผ ์œ„ํ•ด ์–ธ์  ๊ฐ€๋ถ€ํ„ฐ ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์˜ฎ๊ธฐ๊ณ , /var ๋””๋ ‰ํ† ๋ฆฌ ํ•˜์œ„์—๋Š” symbolic link๋กœ ๋‚จ๊ฒจ๋‘์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

๐Ÿงถ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

Broken Symbolic link๋ฅผ ์–ด์ฐŒํ•ด์•ผ ํ•˜๋‚˜ ๊ตฌ๊ธ€๋ง์„ ๋งŽ์ด ํ–ˆ๋Š”๋ฐ ๋ช…์พŒํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชปํ•ด์„œ.. ๊ทธ๋ƒฅ /run ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ /var ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์œผ๋กœ ์˜ฎ๊ฒผ๋‹ค. ์˜› ๊ฒƒ ๊ฐ์„ฑ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด๋ณด์ž๋Š” ์ทจ์ง€๋กœ..ใ…Ž

์˜ฎ๊ธฐ๊ณ  ๋‚˜๋‹ˆ ๋‹ค์‹œ cron์ด ์ž˜ ๋™์ž‘ํ–ˆ๋‹ค.
์™œ ๊ฐ‘์ž๊ธฐ ๋ฉ€์ฉกํ•˜๋˜ symbolic link๊ฐ€ ๊นจ์ง„ ๊ฑด์ง€๋Š” ์—ฌ์ „ํžˆ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค..

๐Ÿพ 3. ๊ฐ€์ƒ ํ™˜๊ฒฝ์—์„œ์˜ /dev/shm ํŒŒํ‹ฐ์…˜ ํ• ๋‹น ํฌ๊ธฐ ๋ถ€์กฑ์œผ๋กœ Selenium ๋™์ž‘ ์ด์Šˆ

๐Ÿงถ ์ด์Šˆ ์†Œ๊ฐœ

์–ด๋Š ์ˆœ๊ฐ„ ssh ์ ‘์†์ด ์•ˆ๋๋‹ค.
AWS console์— ์ ‘์†ํ•ด ์„œ๋ฒ„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ™”๋ฉด์„ ์ผœ ๋ณด์•˜๋Š”๋ฐ, CPU ์‚ฌ์šฉ๋Ÿ‰์ด ๊ฑฐ์˜ 100%๋ฅผ ๋‹ฌ์„ฑํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

๊ธ‰ํ•˜๊ฒŒ ์ธ์Šคํ„ด์Šค๋ฅผ ์ค‘์ง€ํ•˜๊ณ , ๋‹ค์Œ ๋‚  ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ณ  ์ ‘์†ํ•ด ๋กœ๊ทธ๋ฅผ ํ™•์ธํ–ˆ๋”๋‹ˆ ์•„๋ž˜ ์ด์Šˆ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

selenium.common.exceptions.WebDriverException: Message: unknown error: DevToolsActivePort file doesn't exist

DevTools Active Port๊ฐ€ ํ•„์š”ํ•˜๊ตฌ๋‚˜.. ํ•˜๊ณค ๋ช‡ ๋ฒˆ์˜ ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ํฌ๋กฌ ์›น๋“œ๋ผ์ด๋ฒ„ ์˜ต์…˜์œผ๋กœ ๋””๋ฒ„๊น… ํฌํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ๋‹ค.

chrome_options.add_argument('--remote-debugging-port=9222')

์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ์ž˜ ๋™์ž‘ํ•˜๊ธธ๋ž˜, ๋œ ์ค„ ์•Œ์•˜์œผ๋‚˜ ๋‹ค์Œ ๋‚ ์—๋Š” ์•„๋ž˜ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

selenium.common.exceptions.WebDriverException: Message: disconnected: unable to connect to renderer

Stackoverflow์—์„œ, ์–ด๋–ค ์‚ฌ๋žŒ์€ ๋‚ด๊ฐ€ ์ „ ๋‚  ์ถ”๊ฐ€ํ•œ ์˜ต์…˜์ด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์žˆ์—ˆ๋‹ค๊ณ  ํ–ˆ๋‹ค.

--remote-debugging-port=9222 ์˜ต์…˜์ด ์—†์œผ๋ฉด DevToolsActivePort file doesn't exist ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ , ํ•ด๋‹น ์˜ต์…˜์ด ์žˆ์œผ๋ฉด unable to connect to renderer ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

๊ทธ๋Ÿผ ๋‚˜๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋Š”๊ฐ€!!!

๋ญ์ง€.. ๋ญ˜๊นŒ.. ํ•˜๋ฉด์„œ ์กฐ์‚ฌ์— ์ฐฉ์ˆ˜ํ–ˆ๋‹ค.

๐Ÿงถ ๋ฐœ์ƒ ์›์ธ

ํž˜๋“ค๊ฒŒ ์ฐพ์€ ํฌ๋กฌ ์ด์Šˆ ๋ฆฌํฌํŒ…์— ๋”ฐ๋ฅด๋ฉด,

On most desktop Linux distributions, the default /dev/shm partition is large enough. However, on many cloud providers using Docker containers (such as the Google App Engine Flexible Environment) or Heroku, the default /dev/shm size is appreciably smaller (64MB and 5MB, respectively). On these platforms it's impossible to change the size of /dev/shm, which makes using Chrome difficult or impossible. This is particularly an issue for those who want to take advantage of its new headless mode.

The /dev/shm partition is too small in certain VM environments, causing Chrome to fail or crash (see http://crbug.com/715363). Use this flag to work-around this issue (a temporary directory will always be used to create anonymous shared memory files).

๋‚ด ํ™˜๊ฒฝ๊ณผ ๊ฐ™์ด AWS EC2์™€ ๊ฐ™์€ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” /dev/shm ํŒŒํ‹ฐ์…˜์— ํ• ๋‹น๋œ ์šฉ๋Ÿ‰์ด ๋ถ€์กฑํ•ด ํ•ด๋‹น ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๋‚ด์šฉ์ด์—ˆ๋‹ค.

์‹ค์ œ๋กœ ํ•ด๋‹น ๊ฒฝ๋กœ์— ํ• ๋‹น๋œ ํฌ๊ธฐ๋ฅผ ํ™•์ธํ•ด ๋ดค๋”๋‹ˆ, ์•„์˜ˆ 0์ด์—ˆ๋‹ค.

๐Ÿงถ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

ํฌ๋กฌ๋“œ๋ผ์ด๋ฒ„ ์˜ต์…˜ ์ค‘ --disable-dev-shm-usage ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ด์„œ ํ•ด๊ฒฐํ–ˆ๋‹ค. ํ•ด๋‹น ์˜ต์…˜์€ ์ฐธ๊ณ  ๋งํฌ ์— ๋”ฐ๋ฅด๋ฉด,

The /dev/shm partition is too small in certain VM environments, causing Chrome to fail or crash

๊ฐ€์ƒ ๋จธ์‹  ํ™˜๊ฒฝ์—์„œ ๋‚˜์™€ ๊ฐ™์€ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ณ ,

Use this flag to work-around this issue (a temporary directory will always be used to create anonymous shared memory files

shared memory files์„ ์œ„ํ•ด ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•ด์ค€๋‹ค.

Work around๋กœ ํƒˆ์ถœ๊ตฌ๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋‘” ํฌ๋กฌ ์ธก์— ๋ฌดํ•œํ•œ ๊ฐ์‚ฌ๋ฅผ ํ‘œํ•œ๋‹ค.
์ด๊ฒŒ ์—”์ง€๋‹ˆ์–ด๋ง์ด์ง€

๐Ÿพ 4. ํ”„๋ฆฌ ํ‹ฐ์–ด EC2 ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ์„ฑ๋Šฅ ์ œํ•œ์œผ๋กœ ์ธํ•œ crashing

๐Ÿงถ ์ด์Šˆ ์†Œ๊ฐœ

๋„์›Œ ๋‘” EC2 ์ธ์Šคํ„ด์Šค๋กœ ssh๋กœ ์ ‘์†ํ•ด ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

์›ํ™œํ•œ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด VSCode์˜ remote SSH ํ™•์žฅ์„ ์ด์šฉํ•ด ๊ฐœ๋ฐœํ•˜๋‹ค, python lint(pylint์™€ pyright), python code formatter๊นŒ์ง€ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ™•์žฅ์— ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ, ์–ด๋Š ์ˆœ๊ฐ„ ๋žจ์ด ๋ฒ„ํ‹ฐ์ง€ ๋ชปํ•ด ๊ณ„์† ์ธ์Šคํ„ด์Šค๊ฐ€ ๋จนํ†ต์ด ๋˜์—ˆ๋‹ค.

๐Ÿงถ ๋ฐœ์ƒ ์›์ธ

์ฒ˜์Œ์—๋Š” ์™œ ์•ˆ ๋˜๋Š”์ง€๋„ ์ž˜ ๋ชฐ๋ž๋‹ค.
๋ช‡ ๋ฒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ–ˆ์„๊นŒ..
์ž˜ ์•ˆ ๋˜๊ธฐ ์‹œ์ž‘ํ•œ ์‹œ์ ์ด ํ™•์žฅ์„ ๋ช‡ ๊ฐœ ์ถ”๊ฐ€ํ•œ ์ดํ›„๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๊ณ  ํ™•์žฅ์„ ์ง€์šฐ๊ณ  ๋‚˜๋‹ˆ ๊ทธ์ œ์„œ์•ผ ๋‹ค์‹œ ์ •์ƒ์œผ๋กœ ๋Œ์•„์™”๋‹ค.

Lint ๋“ฑ์˜ ์›ํ™œํ•œ ์‚ฌ์šฉ์„ ์œ„ํ•ด ๋กœ์ปฌ์—์„œ ๊ฐœ๋ฐœํ•˜๊ณ  ์„œ๋ฒ„์— ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ์•ˆ๋„ ์‚ฌ์‹ค ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ณ ๋ คํ–ˆ์—ˆ์œผ๋‚˜,

Selenium์€ linux์—์„œ์™€ ๋‚ด ๋กœ์ปฌ ํ™˜๊ฒฝ์ธ windows์—์„œ ์›น๋“œ๋ผ์ด๋ฒ„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด, ๋Œ€๋ถ€๋ถ„์˜ ๋™์ž‘ ํ™˜๊ฒฝ์ด ์ƒ์ดํ–ˆ๋‹ค.

WSL์„ ํ†ตํ•ด ๋กœ์ปฌ์˜ Ubuntu์—์„œ ๊ฐœ๋ฐœํ•ด๋ณผ๊นŒ ํ–ˆ์œผ๋‚˜, ์ธ์Šคํ„ด์Šค์˜ OS๋Š” amazon linux2์˜€๊ณ , ๊ทธ๊ฐ„์˜ ๊ฒฝํ—˜์œผ๋กœ ๋ดค์„ ๋•Œ ๋ถ„๋ช… ๊ฒฝ๋กœ๋‚˜ ํŒจํ‚ค์ง€ ๋“ฑ ๋งŽ์€ ์„ค์ •๊ฐ’๋“ค์ด ๋‹ฌ๋ผ Ubuntu ๋กœ์ปฌ์—์„œ์˜ ๋™์ž‘๊ณผ Amazon Linux 2 ์„œ๋ฒ„์—์„œ์˜ ๋™์ž‘์ด ๊ฐ™๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•˜๊ธฐ ์–ด๋ ค์šธ ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•˜๊ฒŒ ๋Š๊ปด์กŒ๋‹ค.

๐Ÿงถ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

ํ”„๋ฆฌ ํ‹ฐ์–ด EC2 ์ธ์Šคํ„ด์Šค์—์„œ 1๊ธฐ๊ฐ€ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ RAM ์šฉ๋Ÿ‰์„ ๋งŽ์ด ์žก์•„๋จน๋˜ Lint ๊ด€๋ จ extension๋“ค์„ ๋น„ํ™œ์„ฑํ™”ํ–ˆ๋‹ค.

Remote SSH, ์ฝ”๋“œ ํฌ๋งคํ„ฐ ํ™•์žฅ๋งŒ ์‚ฌ์šฉํ•˜๊ณ , ๋ฆฐํŠธ๋Š” ์•„์ง ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค. Docker ๋“ฑ์„ ํ™œ์šฉํ•˜๋ฉด ๋กœ์ปฌ WSL ํ™˜๊ฒฝ์—์„œ๋„ ์„œ๋ฒ„์—์„œ์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ๊ฑฐ์˜ ๋™์ผํ•˜๊ฒŒ ๊ตฌ์„ฑํ•ด ์•ˆ์ •์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ์ถ”ํ›„์— ๋” ํ•„์š”์„ฑ์„ ๋Š๋ผ๋ฉด, ๋„์ปค๋ฅผ ํ™œ์šฉํ•œ ๊ฐœ๋ฐœํ™˜๊ฒฝ๋„ ๊ตฌ์ถ•ํ•ด์•ผ๊ฒ ๋‹ค.

๐Ÿพ 5. default ์‰˜ zsh ์„ค์ • ๊ณผ์ •์—์„œ์˜ ์ด์Šˆ๋กœ ์ธํ•œ VScode ssh ์ ‘์† ๋ถˆ๊ฐ€

๐Ÿงถ ์ด์Šˆ ์†Œ๊ฐœ

VScode์—์„œ remote SSH ํ™•์žฅ์„ ์ด์šฉํ•œ ์„œ๋ฒ„๋กœ์˜ ์ ‘๊ทผ์ด ์‹คํŒจํ–ˆ๋‹ค.

์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋”ฐ๋กœ ์บก์ฒ˜ํ•ด ๋‘์ง€ ์•Š์•˜์œผ๋‚˜, ํ„ฐ๋ฏธ๋„์—์„œ๋Š” ์ž˜ ์ ‘์†์ด ๋˜์—ˆ์œผ๋‚˜ VScode๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌดํ•œ ๋กœ๋”ฉ๋งŒ ์ผ์–ด๋‚˜๊ณ , ์ ‘๊ทผ์— ์‹คํŒจํ–ˆ๋‹ค.

๐Ÿงถ ๋ฐœ์ƒ ์›์ธ

Shell๋กœ zsh๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, .bashrc ํŒŒ์ผ์—์„œ exec zsh๋ฅผ ํ†ตํ•ด default shell์„ zsh๋กœ ์„ค์ •ํ•œ ๊ฒƒ์ด ์›์ธ์ด์—ˆ๋‹ค.

๐Ÿงถ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๋น„์Šทํ•œ ์ด์Šˆ๋ฅผ ๊ฒช๋Š” ์‚ฌ๋žŒ์˜ ๊ฒฝ์šฐ๋ฅผ ์ฐธ๊ณ ํ•ด ๊ธฐ๋ณธ ์‰˜ ์„ค์ •์„ chsh๋ฅผ ์‚ฌ์šฉํ•ด ์ˆ˜ํ–‰ํ–ˆ๋‹ค.
Amazon Linux 2์—๋Š” chsh๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์•„
sudo yum install util-linux-user -y์„ ํ†ตํ•ด ์„ค์น˜ํ–ˆ๊ณ , chsh -s $(which zsh)๋ฅผ ์ˆ˜ํ–‰ํ•ด ๊ธฐ๋ณธ ์‰˜์„ zsh๋กœ ์„ค์ •ํ•ด ์ฃผ๋‹ˆ VScode์—์„œ๋„ ์ ‘๊ทผ์ด ๋˜์—ˆ๋‹ค.

ํ˜น ์ธ์ฆ ๋ฌธ์ œ๋กœ ๊ธฐ๋ณธ ์‰˜์„ ๋ฐ”๊พธ์ง€ ๋ชปํ•˜๋Š” ๋ถ„์ด ๊ณ„์‹œ๋‹ค๋ฉด, ์ดˆ๊ธฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ •์„ sudo passwd ์‚ฌ์šฉ์ž ์ด๋ฆ„์œผ๋กœ ์ œ๋Œ€๋กœ ์ˆ˜ํ–‰ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

๋‚˜์˜ ๊ฒฝ์šฐ์—.. ์‚ฌ์šฉ์ž ์ด๋ฆ„์ด ec2-user์ด์—ˆ์œผ๋‚˜ ๊ทธ๋ƒฅ ๋ฃจํŠธ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๋ฉด ๋˜๋Š” ์ค„ ์•Œ๊ณ  sudo passwd root๋งŒ ๋ฐ˜๋ณตํ•˜๋‹ค ์ž ๊น์˜ ์ ˆ๋ง์„ ๋ง›๋ณด์•˜๋‹ค.
๊ธˆ๋ฐฉ ๊นจ๋‹ฌ์•˜๊ธฐ์— ๋ง์ •์ด๋‹ค.

๐Ÿพ 6. Iframe ํƒœ๊ทธ ์Šคํฌ๋ž˜ํ•‘

๐Ÿงถ ์ด์Šˆ ์†Œ๊ฐœ

BeautifulSoup์„ ํ™œ์šฉํ•ด HTML์„ ํŒŒ์‹ฑํ–ˆ๊ณ , select ํ˜น์€ find๋ฅผ ํ†ตํ•ด ์ฐพ๊ณ ์ž ํ•˜๋Š” ์„ ํƒ์ž์— ์ ‘๊ทผํ–ˆ๋Š”๋ฐ, ์ž๊พธ ~~~ has no attribute ### ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.
์Šคํฌ๋ฆฐ์ƒท์„ ์ฐ์–ด๋‘์ง€ ์•Š์•„์„œ, ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋Š” ๊ธฐ์–ต์— ์˜์กดํ•˜๋Š” ์  ์–‘ํ•ด ๋ฐ”๋ž€๋‹ค.

๋ถ„๋ช… ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์—ด์–ด ํ™•์ธํ–ˆ์„ ๋•Œ๋Š” ๋‚ด๊ฐ€ ์ฐพ๊ณ ์ž ํ•˜๋Š” id๋ฅผ ๊ฐ€์ง„ ์š”์†Œ๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ, BeautifulSoup๊ฐ€ ์ฐพ์•„๋‚ด์ง€๋ฅผ ๋ชปํ•˜๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๋‹ค.

๐Ÿงถ ๋ฐœ์ƒ ์›์ธ

Iframe์€ HTML ์•ˆ์—์„œ ์ธ๋ผ์ธ์œผ๋กœ HTML์„ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์š”์†Œ์ด๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด, HTML์—์„œ <iframe> ํƒœ๊ทธ ์ดํ›„์—๋Š”, ์ƒˆ HTML ํŒŒ์ผ์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ Œ๋”๋ง๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ iframe ํƒœ๊ทธ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ตฌ์กฐ์—์„œ, BeautifulSoup์œผ๋กœ HTML ํŒŒ์‹ฑ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด <iframe> ํƒœ๊ทธ ๋‚ด๋ถ€ ์š”์†Œ๋“ค์€ ๊ฐ€์ ธ์˜ค์ง€ ๋ชปํ•œ๋‹ค.

๐Ÿงถ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

ifrmae ํƒœ๊ทธ๋ฅผ ์ž˜ ์‚ดํŽด๋ณด๋ฉด, ์–ด๋–ค source์—์„œ ์ƒˆ HTML ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ฌ์ง€ src๊ฐ€ attribute๋กœ ์กด์žฌํ•˜๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์„ ๋„๋ฉ”์ธ ๋’ค์— ์—ฐ๊ฒฐํ•ด source HTML ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๐Ÿพ 7. ๋ช‡ ๊ฐ€์ง€ ์‚ฌ์†Œํ•œ ๊ฒƒ๋“ค..

๊ฐœ๋ฐœ ์ค‘ ์‹ค์ˆ˜๋กœ ํ…Œ์ŠคํŠธ์šฉ ํŒŒ์ผ์— ํ•˜๋“œ์ฝ”๋”ฉ๋œ Slack ๋ด‡ ์ธ์ฆ ํ† ํฐ์ด Github์— ๋…ธ์ถœ๋˜์–ด ๋ด‡์ด ๊ฐ•์ œ๋กœ ๋น„ํ™œ์„ฑํ™”๋˜๊ฑฐ๋‚˜,

์…€๋ ˆ๋‹ˆ์›€์„ ์“ฐ๋ฉด์„œ driver.quit()๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์•„ ํ”„๋กœ์„ธ์Šค ๋ฐ /tmp ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ํฌ๋กฌ ์›น๋“œ๋ผ์ด๋ฒ„ ๊ด€๋ จ ๋””๋ ‰ํ† ๋ฆฌ๋“ค๋กœ ์ ๋ น๋‹นํ•˜๋Š” ์‚ฌ์†Œํ•œ ์ด์Šˆ๋“ค๋„ ๋งŽ์•˜๋‹ค.

๋‹ค์‹œ ์•ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋“œ๋ผ์ด๋ฒ„๋ฅผ quit์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ–ˆ๊ณ , ์ด์ƒ์˜ ๊ฐ„๋‹จํ•œ ์ด์Šˆ๋“ค์€ ์ƒ๋žตํ•œ๋‹ค!

๐Ÿˆ ํ›„๊ธฐ

์ ˆ๋Œ€์ ์œผ๋กœ ๋ชจ๋“  ๊ฑธ ๋‹ค ์•Œ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์€ ์—†๊ณ , ํŠนํžˆ ์ง€๊ธˆ์˜ ๋‚˜๋Š” ์•„๋Š” ๊ฒƒ๋ณด๋‹ค ๋ชจ๋ฅด๋Š” ๊ฒŒ ํ›จ์”ฌํ›จ์”ฌ ๋งŽ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ฐ๋งŒ ํ•˜๊ธฐ๋ณด๋‹ค ๊ฒฝํ—˜ํ•ด ๋ณด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ณ ,
์‹คํ–‰๋ ฅ์ด ์ข‹์€ ๋‚ด ์„ฑํ–ฅ์€ ํฐ ๊ฐ•์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

์ƒ๊ฐํ•˜๋Š” ๊ฒƒ๊ณผ ํ•ด๋ณด๋Š” ๊ฒƒ์€ ์ •๋ง ๋‹ค๋ฅด๊ณ , ๊ทธ ๊ณผ์ • ์†์—์„œ ์ƒ๊ฐ์ง€๋„ ๋ชปํ•œ ๊ฒƒ๋“ค์„ ๋งŽ์ด ๋ฐฐ์šฐ๊ฒŒ ๋œ๋‹ค. ํŠนํžˆ ๋งค๋ฒˆ ์ด์Šˆ๋“ค์„ ๋งˆ์ฃผํ•˜๋ฉด์„œ ์™œ ํ•™๊ต ๊ณต๋ถ€๊ฐ€ ์ค‘์š”ํ•œ์ง€ ๋‚˜๋‚ ์ด ๊นจ๋‹ซ๊ฒŒ ๋œ๋‹ค๐Ÿ˜…
๋‚ด๋…„ ํ•™๋ถ€ 3ํ•™๋…„ ๋•Œ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์šด์˜์ฒด์ œ, ๋„คํŠธ์›Œํฌ์™€ ๊ฐ™์€ ํ•ต์‹ฌ CS ๊ณผ๋ชฉ๋“ค์„ ๋งŽ์ด ๋“ค์„ ์˜ˆ์ •์ธ๋ฐ, ๋ฒŒ์จ ๊ธฐ๋Œ€๊ฐ€ ๋œ๋‹ค.

2019๋…„ 1ํ•™๋…„ ๋•Œ ์ฒ˜์Œ C์–ธ์–ด๋ฅผ ๋ฐฐ์šธ ๋•Œ์—๋Š” ์™œ ๋ฐฐ์›Œ์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋‚ฉ๋“์„ ํ•˜์ง€ ๋ชปํ–ˆ์—ˆ๋‹ค.

C์–ธ์–ด ์“ธ๋ฐ์—†๊ณ  ์–ด๋ ต๊ธฐ๋งŒ ํ•œ๋ฐ ์™œ ์•Œ์•„์•ผ ํ• ๊นŒ ํŒŒ์ด์ฌ ์“ฐ๋ฉด ํฌ์ธํ„ฐ ๋ชฐ๋ผ๋„ ๋˜๋Š”๊ฑธ

๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ณ , ๋ถˆ๋งŒ๋งŒ ๊ฐ€๋“ํ•ด ์žฌ๋ฏธ๋„ ๋Š๋ผ์ง€ ๋ชปํ•˜๊ณ  ๊ณผ์ œ๋„ ์ •๋ง ์–ต์ง€๋กœ ํ–ˆ๋‹ค.

๊ทผ 1๋…„๊ฐ„ ์žฌ๋ฏธ๋ฅผ ๋ถ™์—ฌ ์ด๋Ÿฐ์ €๋Ÿฐ ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ๋งŒ๋“ค์–ด ๋ณด๋ฉด์„œ 1๋…„ ์ „์˜ ๋‚˜๋ณด๋‹ค ์ •๋ง ๋งŽ์ด ์„ฑ์žฅํ–ˆ๋Š”๋ฐ, ์ƒˆ๋กœ์šด ๊ฒƒ๋“ค์„ ๋ฐฐ์šฐ๋Š” ๊ณผ์ • ์†์—์„œ ๋Š˜ ๋ถ€์กฑํ•œ ์ ์ด ๋งŽ์€ ๊ฒƒ๋“ค์„ ๋Š๋ผ๊ณ , ์•ž์œผ๋กœ๋„ ๋‹ฌ๋ ค๋‚˜๊ฐˆ ๊ธธ์ด ๋งŽ์ด ๋‚จ์€ ๊ฒƒ ๊ฐ™์•„ ๊ธฐ๋Œ€๊ฐ€ ๋œ๋‹ค.

์•ž์œผ๋กœ ๋” ์„ฑ์žฅํ•  ๋‚ด ๋ชจ์Šต์„ ๊ธฐ๋Œ€ํ•˜๋ฉฐ ๊ธ€์„ ๋งˆ๋ฌด๋ฆฌํ•œ๋‹ค๐Ÿ˜Ž

์—ฌ๋‹ด) 2022๋…„ 11์›” ๊ธฐ์ค€ ์ง€๊ธˆ์€ C์–ธ์–ด๋Š” ์ตœ๊ณ ์˜ ์–ธ์–ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๋ˆ„๊ฐ€ ์“ธ๋ฐ์—†๋‹ค๊ณ  ํ–ˆ๋ƒ

profile
์„ธ์ƒ์€ ๋„“๊ณ  ๋ฐฐ์šธ ๊ฑด ์–ธ์ œ๋‚˜ ๋งŽ๋‹ค๐Ÿ˜ƒ

0๊ฐœ์˜ ๋Œ“๊ธ€