๐Ÿ’ป๊ฐ€๊ตฌ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ- ๊ตฌํ˜„ (์ž๋ฐ” ์„œ๋ฒ„ + ํŒŒ์ด์ฌ OpenCV)

hyeondoongeยท2021๋…„ 1์›” 13์ผ
1
post-thumbnail

์ง€๋‚œ ๊ณ„ํš๋‹จ๊ณ„ ์Šคํ† ๋ฆฌ์— ์ด์–ด ๊ตฌํ˜„์„ ํ•˜๋ฉด์„œ ์‚ฌ์šฉํ–ˆ๋˜ ๊ธฐ์ˆ ๋“ค์„ ์ค‘์‹ฌ์œผ๋กœ ๊ธ€์„ ์จ๋‚ด๋ ค๊ฐ€๋ณด๊ณ ์ž ํ•œ๋‹ค.

[๊ฐœ๋ฐœ์–ธ์–ด]
ํด๋ผ์ด์–ธํŠธ: javascript
์„œ๋ฒ„: java + spring ํ”„๋ ˆ์ž„์›Œํฌ
์ด๋ฏธ์ง€์ฒ˜๋ฆฌ: python

๐Ÿค” 1. ์ž๋ฐ”์™€ ํŒŒ์ด์ฌ ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹ 

์ด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•œ ์ด์œ ?

๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•  ๋•Œ ์ปดํ“จํ„ฐ๋น„์ „์„ ์ˆ˜๊ฐ•ํ•˜๋Š” ์ค‘์ด์˜€๊ณ  OpenCV๋ฅผ python์„ ์‚ฌ์šฉํ•ด์„œ ๊ณผ์ œ๋ฅผ ์ œ์ถœํ•˜๋ฉด์„œ ์ด์— ์ต์ˆ™ํ•œ ์ƒํ™ฉ์ด๊ธฐ๋„ ํ–ˆ๊ณ  ์˜คํ”ˆ์†Œ์Šค ๋Œ€๋ถ€๋ถ„์„ ๋ณด๋ฉด c++์ด๋‚˜ python์œผ๋กœ ์ž‘์„ฑ๋œ๊ฒŒ ๋งŽ์•˜๋‹ค.
ํ•˜์ง€๋งŒ ์„œ๋ฒ„๋Š” java์–ธ์–ด๋กœ ๊ฐœ๋ฐœ ์ค‘์ด์—ˆ๊ธฐ์— ๋ฐ˜๋“œ์‹œ ํ†ต์‹ ์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์ด์—ˆ๋‹ค.

๋ฐฉ๋ฒ•์„ ์ฐพ๊ธฐ ๊ฐ€์žฅ ํž˜๋“  ํŒŒํŠธ์˜€๋‹ค.
๋ฐฉ๋ฒ•์€ ๋งŽ์ง€๋งŒ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋งž๋Š” ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•ด์•ผํ–ˆ๊ธฐ์—, ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ (?) ๋ฐฉ๋ฒ•๋“ค์„ ์จ๋ณด๋Š” ๊ฒฝํ—˜์„ ํ–ˆ๋‹ค.

(1, 2๋ฒˆ์€ ํ†ต์‹ ๊ณผ ๊ด€๋ จ์—†๋Š” ๋‚ด์šฉ์ด๊ธด ํ•˜๋‚˜, ๋„์›€์ด ๋ ๊นŒ ์‹ถ์–ด ๋„์ ์—ฌ๋ณธ๋‹ค.)

1. java opencv - opencv๊ฐ€ ์ง€์›ํ•˜๋Š” ์–ธ์–ด๋Š” java, python, c++์ด ์žˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ํ†ต์‹ ์ด ํ•„์š”์—†๊ฒ ์ง€๋งŒ, ์ด๋ฏธ์ง€์ฒ˜๋ฆฌ ๊ด€๋ จ ์ฝ”๋“œ๋“ค์„ ๋ณด๋ฉด ๋Œ€๋ถ€๋ถ„ c++ ๋˜๋Š” python์œผ๋กœ ์ž‘์„ฑ์ด ๋˜์–ด์„œ java๋กœ ๋‚ด๊ฐ€ ๋ฒˆ์—ญ์„ ํ•ด์•ผํ–ˆ๋‹ค.
๋˜ํ•œ python์—๋Š” ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ java์—์„œ๋„ ๋ฌด์กฐ๊ฑด ์žˆ์„๊ฑฐ๋ผ๋Š” ๋ณด์žฅ๋„ ๋˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์•˜๊ณ , ์ œ๊ณต๋œ๋‹ค ํ•˜๋”๋ผ๋„ ํ•จ์ˆ˜๋ช…์— (์ ์ง€์•Š์€?)์ฐจ์ด๋ฅผ ๋ณด์ธ๋‹ค.

2. cmd๋กœ python ์ฝ”๋“œ ์‹คํ–‰ - ์ž๋ฐ”๋Š” cmd๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. cmd๋กœ ์‹คํ–‰ํ•˜๋ ค๋‹ˆ python์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” ๋ชจ๋“ˆ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์„œ(print ๊ฐ™์€ ํ•จ์ˆ˜) ๋ถˆํŽธํ–ˆ๋‹ค.

3. jython - java + python. ํ†ต์‹ ์ด ํ•„์š”์—†๊ฒŒ๋˜๋Š” ๊ฒƒ์—์„  ์ข‹์•˜์ง€๋งŒ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ์ด ์ƒ๊ฐ๋ณด๋‹ค ์ œํ•œ์ ์ด์—ˆ๋‹ค.

4. WebSocketAPI - html5์˜ ํ‘œ์ค€๊ธฐ์ˆ ์ด๋ฉฐ TCP๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์›น์„œ๋ฒ„ ์‚ฌ์ด์˜ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์ง€์›ํ•œ๋‹ค. ๋‚˜๋Š” ํŒŒ์ด์ฌ ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์ด ํ•„์š”ํ–ˆ์–ด์„œ ๋ถ€ํ•ฉํ•œ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ์˜€๋‹ค.

5. HttpURLConnection - ๋‹จ๋ฑกํ•ญ ํ†ต์‹ ์ด๋ฉฐ statelessํ•œ ๋ฐฉ์‹์ด๋‹ค. ๊ฐ๊ฐ ํ•œ ๋ฒˆ์˜ Client์˜ ์š”์ฒญ๊ณผ Server์˜ ์‘๋‹ต์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

6. Socket - ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด๋ฉด์„œ statefulํ•œ ๋ฐฉ์‹์ด๋‹ค. ๋‹คํ–‰์ด๋„ java์™€ python ๋ชจ๋‘ socket์„ ์ง€์›ํ•œ๋‹ค. ์ŠคํŠธ๋ฆฌ๋ฐ์ด๋‚˜ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์‹œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

Socket ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ ํƒ โ•
์ง€๊ธˆ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๊ตณ์ด socket ํ†ต์‹ ์„ ํ•˜์ง€์•Š๊ณ  Http ํ†ต์‹ ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ–ˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.
๋‹น์‹œ์—๋Š” ์‹œ๊ฐ„์ด ์ด‰๋ฐ•ํ•ด์„œ stateless, stateful์— ์ƒ๊ด€์—†์ด ๊ตฌํ˜„๋งŒ๋˜๋ฉด...! ์ด๋Ÿฐ ์ƒ๊ฐ์œผ๋กœ socketํ†ต์‹ ์„ ์„ ํƒํ–ˆ๋Š”๋ฐ,
๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—์„  ์ด๋Ÿฐ ๊ฒƒ ๊นŒ์ง€ ๊ณ ๋ คํ•ด์„œ ํ†ต์‹ ์„ ํ•ด์•ผ๊ฒ ๋‹ค...!

๐Ÿ˜ฎ 2. API ์‚ฌ์šฉ

๊ธฐ์ˆ ? ์ด๋ผ๊ณ  ๋ด๋„ ๋˜๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ ๋œ ๊ฒƒ๋“ค์ด๋‚˜ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์–˜๊ธฐํ•ด๋ณด๋ คํ•œ๋‹ค.

2-1. ๊ฐ์ฒด์ธ์‹ API

์šฐ์„  ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ์ฒด์ธ์‹์„ ํ•„์š”๋กœ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์—ˆ๋‹ค.

๋‹คํ–‰ํžˆ AI hub๋ผ๋Š” ํ”Œ๋žซํผ์—์„œ ๊ด€๋ จ API๋ฅผ ์ œ๊ณตํ•ด์คฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌํ˜„์„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋ณดํ†ต API๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์–ด๋–ค ์‹์œผ๋กœ ์š”์ฒญํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ตฌํ˜„์˜ˆ์ œ๋“ค์„ ์‚ฌ์ดํŠธ์—์„œ ์นœ์ ˆํ•˜๊ฒŒ ์ œ๊ณต์„ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์— ์ „ํ˜€ ์–ด๋ ค์›€์„ ๋Š๋ผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
๋˜ํ•œ API๋ฅผ ์‚ฌ์šฉํ•  ๋• ๊ณ ์œ ์˜ Key๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•„ ์ „์†ก์„ ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊ผญ ๊ธฐ์–ตํ•˜์ž!

AI hub ๐Ÿ‘‰ AI ์„œ๋น„์Šค ์‚ฌ์šฉ์„ ์œ„ํ•œ API ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์œ ์šฉํ•œ ๋ฐ์ดํ„ฐ๋“ค๋„ ์ œ๊ณตํ•œ๋‹ค. ์ฐธ๊ณ ๋กœ API๋Š” AI SW์นดํ…Œ๊ณ ๋ฆฌ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

2-2. ๋„๋กœ๋ช…์ฃผ์†Œ API

์œ„ API๋ง๊ณ ๋„ ๋„๋กœ๋ช… ์ฃผ์†Œ API๋„ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ด API๋Š” ์ฐธ ์“ธ ๋ฐ๊ฐ€ ๋งŽ์€ ๊ฒƒ ๊ฐ™๋‹ค. ํšŒ์›๊ฐ€์ž…ํ•  ๋•Œ๋‚˜, ์ƒํ’ˆ ์ฃผ๋ฌธ์„œ ์ž‘์„ฑํ•  ๋•Œ ๋“ฑ๋“ฑ..

๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ ํŒ์—…์œผ๋กœ ๊ฒ€์ƒ‰ API๋ฅผ ๋„์–ด์ค„ ๊ฑฐ ์˜€๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋ชจ์™€ ์ž์‹์ฐฝ ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ํ•„์š”ํ–ˆ๋‹ค.
๋Œ€์ถฉ ํ๋ฆ„์€ ๋ถ€๋ชจ ์ฐฝ์—์„œ ์ž์‹ ์ฐฝ(ํŒ์—… ์ฐฝ)์„ ๋„์šด ํ›„ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ๋ถ€๋ชจ ์ฐฝ์—๋‹ค๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค.

๋„๋กœ๋ช… ์ฃผ์†Œ ๐Ÿ‘‰ ๋Œ€ํ‘œ์ ์œผ๋กœ ๋„๋กœ๋ช…์ฃผ์†Œ API, ์˜๋ฌธ์ฃผ์†Œ API, ์ขŒํ‘œ์ œ๊ณต API๋ฅผ ์ œ๊ณตํ•˜๊ณ ์žˆ๋‹ค.

์นœ์ ˆํ•œ ์ด API ๋•๋ถ„์— ๊ตณ์ด ์šฐ๋ฆฌ์˜ DBMS์—๋‹ค ๋ฐฉ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์„ ํ•„์š”๊ฐ€ ์—†์–ด์กŒ๋‹ค.

์ด API๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ตฌํ˜„๋ฐฉ์‹์— ๋”ฐ๋ผ ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ํ•ด๊ฒฐํ•ด์ฃผ๋ฉด๋œ๋‹ค.
๋‚˜๋Š” CORS ์ด์Šˆ๋ฅผ ๋งž๋‹ฅ๋œจ๋ ธ๋‹ค.
์ด๋Š” ํ˜„์žฌ ๋„๋ฉ”์ธ์ด ๋‹ค๋ฅธ ๋„๋ฉ”์ธ (ex. ํŒ์—…์ฐฝ)์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ํฌ๋กฌ์—์„œ ๋ณด์•ˆ์ ์ธ ์ด์œ ๋กœ ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ๋Œ€๋น„ํ•ด ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ๋ง‰๋„๋ก ๋˜์–ด์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ์œ„์™€ ๊ฐ™์ด ํ˜„์žฌ ์œˆ๋„์šฐ(์ฐฝ)์˜ ๋„๋ฉ”์ธ์„ ์ƒ์„ฑํ•  ์ž์‹ ์ฐฝ์˜ ๋„๋ฉ”์ธ๊ณผ ๊ฐ™๋„๋ก ๊ฐ’์„ ๊ฐ™๊ฒŒ ํ•ด์ฃผ์–ด์„œ ๊ฐ™์€ ๋„๋ฉ”์ธ์ธ ์ฒ™ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด๋œ๋‹ค.
ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ ์ด ๋ฐฉ๋ฒ• ๋ง๊ณ ๋„ ๋งŽ์œผ๋‹ˆ ํ•ด๋‹น ๊ธ€์„ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. ๐Ÿ‘‰ CORS์— ๊ด€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…๋˜์–ด์žˆ๋Š” ์ข‹์€ ๊ธ€

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