-
Notifications
You must be signed in to change notification settings - Fork 3
Milal_ProjectBlog
- ์์ธ๋ ํ ์ฒด์ด ์ฌ์ฉ์
- ํ ์ฒด์ด ์ฌ์ฉ์๋ฅผ ์ํ ์ ๋ณด๋ ์ด๋์?
- ์ ๋ค์ดํฐ๋ธ ์ฑ ์ผ๊น?
- Android ํ๋ซํผ์ ๋ณํ: ์ด์ Kotlin
- Json, Jsoup
- Tensorflow๋
- Inception V3
- Android์ Tensorflow ์ฐ๋
- ์ด๋ฏธ์ง ๋ถ๋ฅ ์๊ณ ๋ฆฌ์ฆ
- ์๋๋ก์ด๋ & ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ฐ๋๋ฐฉ๋ฒ
- ์ฃผ์ ์ฝ๋
2017๋ , ๋ํ๋ฏผ๊ตญ์ ๋์ ๋ฌธํ๋ ์ด๋ฏธ ๋๋ถ์๊ฒ ๋ฐ์ ํ์๋ค. ์ธ๊ณ ์ด๋๋ฅผ ๋ณด์๋, ์ฐ๋ฆฌ๋๋ผ์ฒ๋ผ ๋ฒ์ค์ ์งํ์ฒ ๋ก ๋์ ์ด๋๋ ๋๋น ์ ์๊ณ , ๋ฆ์ ์๊ฐ์๋ ์ฆ๊ธธ ๊ฑฐ๋ฆฌ ๋จน์๊ฑฐ๋ฆฌ๊ฐ ์ฆ๋นํ๊ณ , ์น์ ๋ํ ํ๋ฅญํ ์ด๋ฐ ๊ณณ์ ํ์น ์๋ค.
ํ์ง๋ง ์ด๋ฌํ ๋ฉ์ง ๋์๋ฅผ ๋๋ฆด ๊ถ๋ฆฌ๋ฅผ ๋ฐํ๋นํ ์ฌ๋๋ค์ด ์๋ค. ๋ฐ๋ก ํ ์ฒด์ด ์ฌ์ฉ์๋ค์ด๋ค. ๋ฌด๊ฒ๊ณ ํฐ ๋ฐํด๋ฅผ ๋ชธ์ ๋ฌ๊ณ ์์ง์ฌ์ผ ํ๋ ํ ์ฒด์ด ์ฌ์ฉ์๋ค์๊ฒ ์ด ๋์๋ ์ฌ์ ํ ๋๋ฌด๋ ๋ถ์น์ ํ๋ค. ๊ทธ ์ด์ ๋ ๋ ๊ฐ์ง์ธ๋ฐ
์ฒซ์งธ๋ ๊ณ๋จ ๋ฑ์ ๋ฌผ๋ฆฌ์ ์ธ ์ด์ ๋ก ์ถ์ ์ด ๋ถ๊ฐ๋ฅํ ์์ค์ด ๋ง๊ธฐ ๋๋ฌธ์ด๊ณ , ๋์งธ๋ ์ถ์ ์ด ๊ฐ๋ฅํ ์์ค์ด๋ผ๋ ๊ทธ ์ฌ์ค์ ํ์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์ ํ์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
ํ ์ฒด์ด ์ฌ์ฉ์๋ค์ด ์ด๋ค ์์ค์ ์ด์ฉํ๊ธฐ ์ํด์๋ ์์ค์ ์ ๊ตฌ์ ํํ(๋ฌธํฑ์ด๋ ๊ฒฝ์ฌ๋ก๊ฐ ์๋์ง, ๊ณ๋จ์ด ์๋์ง, ํ ์ฒด์ด๊ฐ ๋ค์ด๊ฐ ๋งํผ ๋์์ง ๋ฑ)์ ์ฃผ์ฐจ์ฅ, ์ฅ์ ์ธ์ฉ ํ์ฅ์ค์ ์ฌ๋ถ ๋ฑ์ ์ ๋ณด๊ฐ ํ์ํ๋ค. ํ ์ฒด์ด ์ฌ์ฉ์๋ ์ผ์์์ ๊ฐ๋ณ๊ฒ ์ธ์์ ํ๊ณ ์ถ์ ์๊ฐ์๋ ์ด๋ฌํ ์์ค ์ ๋ณด๋ค์ด ํ์ธ๋์ง ์๋ ํ, ์๋ก์ด ์๋น์ ์ฐพ์๊ฐ ์ ์๋ค.
2016๋ 10์, UN์ โ์ฃผ๊ฑฐ ๋ฐ ์ง์๊ฐ๋ฅํ ๋์๋ฐ์ ์ ๊ดํ ์ ์ํ์โ์์ ๋น๋ฏผ๊ณผ ์ฝ์๋ฅผ ์ํ ๋์์ธ โํฌ์ฉ๋์โ๋ผ๋ ์์ ๋ฅผ ๋์ก๋ค. ์ง์๊ฐ๋ฅํ ๋์๊ฐ๋ฐ์ ๋ฌผ๋ก ์ด์, ๋์์ ์ฌ๋ ์ด๋ ํ ์๋ฏผ๋ ๋์ ์๋น์ค์ ๋ํ ์ ๊ทผ์์ ๋ฐฐ์ ๊ฐ ๋์ด์๋ ์ ๋๋ค๋ ๊ฐ๋ ์ด๋ค. ํ์ง๋ง ํ ์ฒด์ด ์ฌ์ฉ์๋ค์ โ์ ๋ณดโ๊ฐ ์๋ค๋ ์ด์ ๋ก, ๋ง์ ๋์ ์๋น์ค ์์์ ๋ฌธ์ ๋ฐ๋ ๋นํ๊ณ ์๋ค.
ํ ์ฒด์ด ์ฌ์ฉ์๋ค์ ๊ฒฐ๊ตญ ์ด๋ ํ ์์ค์ด โํ ์ฒด์ด๊ฐ ๋ค์ด๊ฐ ์ ์๋์ง ์๋์ง์ ๋ํ ์ ๋ณดโ๊ฐ ํ์ํ๋ค. ์ด๋ฌํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ณ ์ ํ๋ ๋ค์๊ณผ ๊ฐ์ ๋ค์ํ ๋ ธ๋ ฅ๋ค์ด ์์ง๋ง, ๋ชจ๋ ํฐ ํ๊ณ์ ๋ค์ด ์๋ค.
ํ ์ฒด์ด ์ฌ์ฉ์๋ค ์ค์ค๋ก ๋ง๋ ์ ๋ณด ๊ณต์ ์ปค๋ฎค๋ํฐ(ํฌํธ์ฌ์ดํธ ์นดํ, ๋ฐด๋ ๋ฑ)๋ค์ด ์ด๋ฏธ ๋๋ถ๋ถ ๊ฐ ์ง์ญ๋ง๋ค ์๋ค. ํ์ง๋ง ์ด๋ ํ๋๋ ์ ๋๋ก ํ์ฑํ๋ ๊ณณ์ด ์๋ค. ์๋ํ๋ฉด ์ด๋ค ์ง์ญ์ ์๋ ์์ค์ ๋ํ ์ ๋ณด๊ฐ ์ด๋ฏธ ๋ง์ด ์์ฌ์์ง ์์ ์ด์, ๊ทธ๊ณณ์ ๊ฐ์ ๊ฒ์ํด๋ดค์ ์๋ฃ๊ฐ ์์ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ์ ๊ฒฐ๊ตญ ์ง์์ ์ผ๋ก ์ฌ์ฉ์๊ฐ ์ค๋๋ก ํ ์ ์๋ค. ํ๋์ ์ง์์ ์ธ ํ๋ซํผ์ด ์๊ธฐ์, ํ ์ฒด์ด ์ฌ์ฉ์๋ค์ ์์ค์ ์ด์ฉํ ํ ํ๊ธฐ๋ฅผ ๊ณต์ ํ๊ณ ์ถ๋๋ผ๋ ๊ณต์ ํ ์ ์๋ค.
์์ ๊ฐ์ด ํ ์ฒด์ด ์ฌ์ฉ์๋ฅผ ์ํ ์ ๋ณด์ ๊ณต์ ํ๋ ์๋น์ค๋ค์ด ํ์ ํ๊ธฐ์ ๋ง์ ํ ์ฒด์ด ์ฌ์ฉ์๋ค์ ๊ทธ๋ฅ ๋ธ๋ก๊ทธ๋ ํฌํธ์ฌ์ดํธ๋ค์ ๊ฒ์ํ๋ฉฐ ์์ ๋ค์ด ์ํ๋ ์ ๋ณด๋ฅผ ์ฐพ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ํ์ง๋ง ์๋ง์ ๊ธ ์ค ์ด๋ ๊ธ์ ์ ๊ตฌ์ฌ์ง์ด ์๋์ง, ์ฃผ์ฐจ์ฅ ์ฌ๋ถ์ ๋ํ ์ ๋ณด๊ฐ ์๋์ง ์ ์ ์์ผ๋ฏ๋ก ๊ฒ์ ์๊ฐ์ด ๋ง์ด ์์๋๋ค. ๋ํ ๊ธ์ ์ด ๊ธ์ด์ด๋ ๋๋ถ๋ถ ํ ์ฒด์ด ์ฌ์ฉ์๊ฐ ์๋๊ธฐ์ ๊ทธ๋ค์ ์ ์ฅ์ ๊ณ ๋ คํ ์์ธํ ์ ๋ณด๋ฅผ ์ ๊ธธ์ด ์๋ค. ๊ฐ๋ น, ์ด๋ ํฌ์คํ ์์ ์๋น์ ์ ๊ตฌ์ฌ์ง์ ๋ณด๊ณ ๋ค์ด๊ฐ ์ ์๊ฒ ๋ค๊ณ ํ๋จ์ ํ๊ณ ๋ฐฉ๋ฌธ์ ํ๋๋ผ๋, ๋ด๋ถ ๋ฌธ์ ์๋ ๋ ๋ค๋ฅธ ๋ฌธํฑ์ ๋ฐ๊ฒฌํ ์๋ ์๋ค.
โข ์ง์์ฒด๊ฐ ์ ๊ณตํ๋ ๊ณต๊ณต ์ฌ์ดํธ ๋ฐ DB: ๋ถ์กฑํ๊ณ , ์ค๋๋ ์ ๋ณด / ์ ๊ทผ์ฑ ๋ถ์กฑ
์์ธ, ๋ถ์ฐ, ๋๊ตฌ์ ๊ฐ์ ๋๋์๋ค์ ์ง์์ฒด์์(๋๋ ์ธ๋ถ ๋จ์ฒด๋ฅผ ์ง์ํจ์ผ๋ก์จ) ํ ์ฒด์ด ์ฌ์ฉ์๋ฅผ ์ํ ์์ค์ ๋ณด ์ ๊ณต ์ฌ์ดํธ๊ฐ ์๋ค.
ํ์ง๋ง ์ด๋ฐ ์ฌ์ดํธ๋ค์ ์ด์ํ๋ ๋ช๋ช์ ์ํด์๋ง ์์ค์ ๋ณด๊ฐ ์ ๊ณต๋๊ธฐ์ ๊ทธ ์๊ฐ ํฑ์์ด ๋ถ์กฑํ๋ค. ๋๊ตฌ์์ ์น์ฌ์ดํธ๋ง ๋ณด๋๋ผ๋, ๋๊ตฌ์ ๋ด์ ๋ฑ๋ก๋ ์ ์ฒด ์ผ์ ์์์ ์๊ฐ 1531๊ฐ ์ธ๋ฐ(๋๊ตฌ๊ด์ญ์ ๊ณต๊ณต๋ฐ์ดํฐ ํฌํธ ์ ๊ณต), ์ฌ์ดํธ์ ๋ฑ๋ก๋ ์๋น ์๋ ๊ณ ์ 18๊ฐ๋ฟ์ด๋ค. ๋ํ ์๋น์ ํ๋ฃจ์๋ ์๋ฐฑ ๊ฐ๊ฐ ๋งํ๊ณ ๋ ์๋ก ์๊ธฐ๋๋ฐ, ๊ณต๊ณต์ฌ์ดํธ๋ ๊พธ์คํ๊ฒ ์ ๋ฐ์ดํธ๋ฅผ ํ๊ณ ์์ง ์๊ธฐ์ ์ ๋ณด์ ์ ๋ขฐ๋๊ฐ ๋ง์ด ๋จ์ด์ง๋ค. ์ง์์ฒด๋ ๋ํ ๋์ ๋ด ๋๋ถ๋ถ ์์ค์ ๋ํ ์ ๋ณด๋ฅผ DBํํ์ฌ ๊ฐ์ง๊ณ ์๋๋ฐ, ์ด๋ ์ผ๋ฐ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ๊ธฐ ์ด๋ ต๊ณ , ํ ์ฒด์ด ์ด์ฉ์ฑ์ ๋ํ ์ ๋ณด๊ฐ ์๋ค.
์์ 3๊ฐ์ง์ ๋ฐฉ์์ ํ๊ณ์์ ์ ์ ์๋ฏ์ด ํ ์ฒด์ด ์ฌ์ฉ์๋ค์ ์ํ ์ ๋ณด๋ ์ด๋๊ฐ ์๋๋ผ๋ ์ฐพ๊ธฐ๊ฐ ์ด๋ ต๊ณ , ๋ ๊ทธ๋ค๋ง์ ์ ๋ณด๊ฐ ๋ชจ์ฌ๋๋ ์ง์์ ์ธ ํ๋ซํผ์ด ์๋ค.
๊ฐ ๋์์ ํ ์ฒด์ด ์ฌ์ฉ์๋ค์ด ๋ค ํจ๊ป ๊ณต์ ํ๋ ํ๋ซํผ์ด ํ์ํ๋ค. ์๋ํ๋ฉด, ํ ์ฒด์ด ์ฌ์ฉ์๋ค์๊ฒ ๊ฐ์ฅ ์ข๊ณ ๋ฏฟ์ ๋งํ ์ ๋ณด๋ โํ ์ฒด์ด ์ฌ์ฉ์, ๋๋ ํ ์ฒด์ด ์ฌ์ฉ์์ ์ด์โ์ด ์ค์ค๋ก ์์ฐํ ์ ๋ณด์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ถ์ฐ๋ ์ปค๋ฎค๋ํฐ์์ ํ๋ํ๊ฑฐ๋, ์์ง ํ๋ํ์ง ์๋ ํ ์ฒด์ด ์ฌ์ฉ์๋ค์ ํ๋๋ก ๋ชจ์๋งํ โ์ ์ธ์ฑ โ์ด ์๋ ํ๋ซํผ์ด ํ์ํ๋ค.
๊ธฐ์กด์ ํฌํธ์ฌ์ดํธ๋ฅผ ๋๋ฉฐ ์ ๊ตฌ ์ฌ์ง, ๋ด๋ถ ๋ชจ์ต, ์ฃผ์ฐจ์ฅ ์์น๋ฅผ ์ฐพ๋๋ผ ์์ํ๊ณ ์๋ ๊ฒ์ ์๊ฐ์ ํ๊ฒฉ์ ์ผ๋ก ๋จ์ถ์์ผ์ผ ํ๋ค.
์ง์์ฒด๊ฐ ์์ค์ ๋ํ ์ ๋ณด๋ฅผ ๋ฐ์ ๋, ํ ์ฒด์ด ์ด์ฉ์ฑ์ ๋ํ ์ ๋ณด๋ ์ ๊ณต๋ฐ๊ณ , ๊ทธ ์ ๋ณด์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋ค๋ฉด ํ ์ฒด์ด ์ฌ์ฉ์๋ค์๊ฒ ๋งค์ฐ ์ ์ฉํ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ํํ ์ฌ์ฉํ๋ ์ค๋งํธํฐ์ ์ดํ๋ฆฌ์ผ์ด์ ์๋ ๊ฐ๋ฐ ๋ฐฉ์์๋ ํฌ๊ฒ 3๊ฐ์ง๊ฐ ์์ต๋๋ค. ๋ฐ๋ก ๋ค์ดํฐ๋ธ ์ฑ, ์น ์ฑ, ํ์ด๋ธ๋ฆฌ๋ ์ฑ ๋ฐฉ์์ธ๋ฐ์, ์ด 3๊ฐ์ง ๋ฐฉ์์ ์ฅ๋จ์ ๋ฐ ํน์ง ๋ค์ ๊ฐ์ค๋ฆฌ ํ๋ก์ ํธ ๋ธ๋ก๊ทธ ์์ ์ ์ค๋ช ํ๊ณ ์์ผ๋ ์ฌ๊ธฐ์๋ ๋์ด๊ฐ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด ์ค ์ ํฌ๊ฐ ํํ ๊ฐ๋ฐ ๋ฐฉ์์ ๋ฐ๋ก ๋ค์ดํฐ๋ธ ์ฑ์ด๊ณ ์, ๊ฐ์ฅ ๋ํ์ ์ธ ์ค๋งํธํฐ OS์ธ Android์ iOS ์ค Android ๊ธฐ๋ฐ์ ๋ค์ดํฐ๋ธ ์ฑ์ ๋๋ค. ๋ค์ดํฐ๋ธ์ฑ์ ์ฅ์ ์
- ๋น ๋ฅธ ๋ก๋ฉ ์๋
- ์ธํฐ๋ท ์ฐ๊ฒฐ ์์ด๋ ๊ธฐ๋ฅ ์๋ ๊ฐ๋ฅ
- ์ค๋งํธํฐ์ ํ๋์จ์ด์ ํจ๊ณผ์ ํ์ฉ
์ ๋ค ์ ์์ต๋๋ค.
์ ํฌ ํ๋ก์ ํธ์ ๋ํ์ ๊ธฐ๋ฅ์ธ '์ ๊ตฌ ์ด๋ฏธ์ง ๋ถ์'๊ณผ '๋ฆฌ๋ทฐ ๋จ๊ธฐ๊ธฐ'๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์๋ ๋น ๋ฅธ ๋ฐ์ ์๋๊ฐ ํ์ํ๊ณ , ๋ฆฌ๋ทฐ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด ์ค๋งํธํฐ์ ํ๋์จ์ด์ธ ์นด๋ฉ๋ผ์ ์ฐ๋ํ์ฌ ์ฌ์ง์ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ํ๋ ๊ฒ์ด ํ์์ ์ด์์ต๋๋ค. ๋ํ ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ์์ ๋์๋ user๊ฐ ๋ฏธ๋ฆฌ ์ ์ฅํ ์ ๋ณด ์ ๋๋ ์ ๊ณตํ ์ ์์ผ๋ฉด ์ข๊ฒ ๋ค๋ ์๊ฒฌ๋ ์์์ฃ .
๋ฌผ๋ก , ์์ดํฐ์ ํธํํ๊ธฐ ์ํด์๋ iOS ๋ฒ์ ์ ์ฑ์ ๋ฐ๋ก ๋ง๋ค์ด์ผ ํ๋ค๋ ๋ฒ๊ฑฐ๋ก์์ด ์์ง๋ง, ์ ํฌ๋ ๋ค์ดํฐ๋ธ ์ฑ์ด ๊ฐ์ง ์ฅ์ ์ด ์ด ํ๋ก์ ํธ์ ๊ฐ์ฅ ์ ํฉํ๋ค๊ณ ํ๋จํ์์ต๋๋ค.
์ด ์๋ฃ๋ ์์ฅ ์กฐ์ฌ ์
์ฒด ๊ฐํธ๋๊ฐ ๋ฐํํ ์๋ฃ๋ก 2017๋
๊ธฐ์ค, ์ค๋งํธํฐ ์ด์์ฒด์ ์ ์์ฅ ์ ์ ์จ์ ๋ณด์ฌ์ค๋๋ค. ๋ณด์๋ค์ํผ ํ์ฌ, Android๊ฐ 86%, iOS๊ฐ 14%๋ก ์ค๋งํธํฐ ์ด์์ฒด์ ๋ ์ฌ์ค์ ์ด ๋ ๊ฐ์ง๋ก ์๋ถ๋์์ต๋๋ค. ์ ํฌ๋ ๊ทธ๋ฆฌํ์ฌ ์ค๋งํธํฐ ์์ฅ์ ๊ฐ์ฅ ํฐ ๋ถ๋ถ์ ์ฐจ์งํ๊ณ ์๋ Android ํ๋ซํผ ๊ธฐ๋ฐ์ ๋ค์ดํฐ๋ธ ์ฑ์ผ๋ก ์ ๊ทผํ๊ฒ ๋์์ต๋๋ค.
Android ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ์ธ์ด๋ฅผ JAVA๋ก ์๊ณ ๊ณ์๋ ๋ถ์ด ์์ง ๋ง์ผ์คํ ๋ฐ์, 2017๋ 5์ 18์ผ, ๊ตฌ๊ธ์ Android์ ๊ณต์ ์ธ์ด๋ ์ด์ Kotlin ์ด๋ผ๋ ์ค๋ ๋ฐํ๋ฅผ ํฉ๋๋ค.
Kotlin์ JetBrains์ฌ์์ ๋ง๋ ์คํ์์ค ๊ฐ๋ฐ ์ธ์ด์ ๋๋ค. Kotlin์ ์ฅ์ ์ ๊ฐ๊ฒฐํจ, ์์ ํจ, ๋ค์ฌ๋ค๋ฅํจ, ํธํ์ฑ๋ฑ์ ๋ค ์ ์์ต๋๋ค. Java๋ก ๊ฐ๋ฐํ๋ ๊ฒ๋ณด๋ค ์ฝ๋์ ์์ด ์ค์ด๋ค๊ณ , ๋ ํฌ์ธํธ ์์ธ(NullPointerExceptions)์ ๋ํ ์์ ์ฑ์ด ์ฆ๊ฐํฉ๋๋ค. ๋ํ Java์ ํจ๊ป ์ฌ์ฉํ ์ ์๊ณ , JVM์ด ์คํํ ์ ์๋ ๋ฐ์ดํธ ์ฝ๋๋ก ์ปดํ์ผ์ด ๋ฉ๋๋ค.
Kotlin์ ์ฅ์ ์ ๋ํด ์ฝ๋๋ฅผ ํตํด ๊ฐ๋จํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Java์์๋ Click์์ doSomething()์ ํ๋ ๋ฒํผ์ ๊ตฌํํ ๋, ๋ค์๊ณผ ๊ฐ์ด ์ผ๋ค๋ฉด
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
doSomething();
}
});
(์์ฑ์ new๋ฅผ ์ด์ฉํ์ฌ ๋ฆฌ์ค๋๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ์์ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ๋ฐฉ์)
button.setOnClickListener {
doSomething()
}
Kotlin์์๋ ์ด๋ ๊ฒ ๋ฐ๋๋๋ค. ํจ์ฌ ์ง๊ด์ ์ด๊ณ ๊ฐ๊ฒฐํ์ฃ !
๋ํ Kotlin์์๋ ?๋ฅผ ํตํด nullable ์กฐ๊ฑด์ ๋ฌ ์ ์๋๋ก ํจ์ผ๋ก์จ null์์ ์ฑ์ ์ฆ๊ฐ์์ผฐ์ต๋๋ค.
val maybeString: String? = โHello"
maybeString?.length
(์ถ์ฒ: https://academy.realm.io/kr/posts/kotlin-does-java-droidcon-boston-2017-gonda)
๋ฌผ์ํ๋ ๋ฐ๋ก 'null์ผ ์ ์๋ค' ๋ ๊ฒ์ ๋งํฉ๋๋ค. ์ด๋ ๊ฒ ์ธ ๊ฒฝ์ฐ ๊ฐ์ฒด๊ฐ null์ด ์๋ ๊ฒฝ์ฐ .length๋ฅผ ํธ์ถํ๊ณ , ์๋๋ฉด null์ ๋ฐํํฉ๋๋ค.
Java์์ ํธํ๋ ์๋ฒฝํฉ๋๋ค. ์๋์ ๊ฐ์ด Kotlin์ ๋ฉ์๋๋ฅผ ๊ทธ๋๋ก Java์์ callํ๊ฑฐ๋, ๊ทธ ๋ฐ๋๋ ๊ฐ๋ฅํฉ๋๋ค.
// Calling Java code from Kotlin
class KotlinClass {
fun kotlinDoSomething() {
val javaClass = JavaClass()
javaClass.javaDoSomething()
println(JavaClass().prop)
}
}
==================================
// Calling Kotlin code from Java
public class JavaClass {
public String getProp() { return "Hello"; }
public void javaDoSomething() {
new KotlinClass().kotlinDoSomething();
}
}
Kotlin ๊ณต์ ๋ธ๋ก๊ทธ์ ์ํ๋ฉด, Kotlin์ ๋ชฉํ๋ ํ์คํ ์น ๊ฐ๋ฐ, Android์ iOS์ฑ, ๊ทธ๋ฆฌ๊ณ ์๋ฒ ๋๋์ IoT๋ฑ ๋ชจ๋ ๊ฐ๋ฐ์ ๋ค์ํ ํ๋ซํผ์์ Kotlin์ผ๋ก๋ง ๊ฐ๋ฐํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ผ๊ณ ํ๋งํผ Kotlin์ ๊พธ์คํ ์์ญ์ ๋ํ๊ฐ๋ฉฐ ๋ฐ์ ํด๊ฐ๊ณ ์๋ ์ถ์ธ์ ๋๋ค.
์ ํฌ๊ฐ Android ๊ฐ๋ฐ์ ๋ค์ด๊ฐ ์์ ์๋ Kotlin์ด ๋ฐํ๋์ง ์์์๊ณ , ์ผ๋ง ์ ๊น์ง๋ง ํด๋ ์ฐธ๊ณ ํ ๋งํ ์์ค๊ฐ ๋ง์ง ์์๊ธฐ์ ์ ํฌ ํ๋ก์ ํธ์๋ ์ ์ฉํ์ง ์์์ง๋ง, ์์ผ๋ก Android๋ฅผ ๋ค๋ฃจ๋ ๊ฐ๋ฐ์๋ผ๋ฉด Kotlin์ ์ฌ์ฉ๋ฒ์ ์ตํ๋ ๊ฒ์ ํ์๋ผ ํ ์ ์๊ฒ ์ต๋๋ค!
์น ํฌ๋กค๋ง์ด๋ ์ปดํจํฐ ์ํํธ์จ์ด ๊ธฐ์ ๋ก ์น ์ฌ์ดํธ๋ค์์ ์ํ๋ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์น์ ๊ธฐ๋ณธ์ ์ผ๋ก HTML ํํ๋ก ๋์ด ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ์ ํ๊ทธ๋ฅผ ์ด์ฉํ์ฌ ์ ํํ ๋์ด์๊ณ , ๊ท์น์ฑ์ด ์์ต๋๋ค. ์ด๋ฌํ ๊ท์น์ ๋ถ์ํ์ฌ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ ๋ณด๋ง์ ๋ฝ์์ค๋ ๊ฒ์ ๋๋ค.
์ ํฌ ํ๋ก์ ํธ์์๋ ๊ณต๊ณต์ฌ์ดํธ๋ฅผ ํฌ๋กค๋ง ํ์ฌ, ํ ์ฒด์ด ์ฌ์ฉ์๋ค์ด ํ์๋ก ํ๋ ์ ๋ณด๋ง์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ํ๋ด์ด ์ฃผ๊ธฐ ์ํด ์ด ๊ธฐ์ ์ ์ฌ์ฉํ์์ต๋๋ค. ๊ด์ญ์ ๊ฐ์ ๋๋์์์๋ ์ง๋ฐฉ์์น๋จ์ฒด์์ ํ ์ฒด์ด ์ฌ์ฉ์๋ค์ ์ํ ์์ค์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์นํ์ด์ง๋ฅผ ์ด์ํ๋ ๊ณณ์ด ์๋๋ฐ์, (๋ํ์ ์ผ๋ก ์์ธํน๋ณ์์ โํจ๊ป ์์ธ(http://disability.seoul.go.kr)โ, ๋ํ๋ฏผ๊ตญ ๊ด๊ด๊ณต์ฌ์ โ๋ํ๋ฏผ๊ตญ ๊ตฌ์๊ตฌ์(http://korean.visitkorea.or.kr)โ, ๋๊ตฌ๊ด์ญ์์ โํ ์ฒด์ด๋ก ์ฆ๊ธฐ๋ ๋๊ตฌ๊ด๊ด(http://wheeltour.or.kr)โ, ์ธ์ฐ์์ โ์ฅ์ ์ธํธ์์์ค ์ ๋ณด ๊ฒ์(http://usbf.kr)โ ๋ฑ)
์ด๋ฌํ ์ฌ์ดํธ๋ฅผ ๋ค์ ธ ์ฌ์ฉ์๊ฐ ์ํ๋ ์์ค์ ๋ํ ์ ๋ณด๊ฐ ์์ ์, ์ ๋ณด๋ฅผ Jsonํํ๋ก ํฌ๋กค๋งํ์ฌ ๊ฐ์ ธ์์ ํ์ฑํ๊ณ , ํ์ํ ์ ๋ณด๋ง์ ๊ฐ๊ณตํ์ฌ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค.
๊ฐ๋จํ ์์๋ฅผ ํตํด ์ด๋ป๊ฒ ์น์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ์ง๋ฅผ ์ดํด๋ณผ๊ฒ์.
Java์๋ Jsoup๋ผ๋ ํ์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
// ๊ฐ๋ตํ๋ GET, POST
Document google1 = Jsoup.connect("http://www.google.com").get();
Document google2 = Jsoup.connect("http://www.google.com").post();
// Response๋ก๋ถํฐ Document ์ป์ด์ค๊ธฐ
Connection.Response response = Jsoup.connect("http://www.google.com")
.method(Connection.Method.GET)
.execute();
Document google3 = response.parse();
Connect๋ฅผ ์ด์ฉํ์ฌ URL์ ์ ์ํ๊ณ ์ ๋ณด๋ฅผ Get์ด๋ Post ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ Document๋ฅผ ์ป์ด์ต๋๋ค. ์ด๋ ๊ฒ ํ์ง ์๊ณ Response๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์์ฌ ์๋ ์์ง์.
Document document = response.parse();
String html = document.html();
String text = document.text();
Document๋ text()๋ html()์ด๋ผ๋ ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ์ฝ๊ฒ String์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
html()์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์ ๋ชจ๋์์ ๋ณผ ์ ์๋ ๊ฒ๊ณผ ๊ฐ์ ํ์ด์ง์ html ํ๊ทธ์ ๊ทธ ์์ content๋ฅผ ๊ทธ๋๋ก ๊ฐ์ ธ์ค๊ฒ ๋๊ณ ์, text()๋ฅผ ์ฌ์ฉํ๋ฉด ํ๊ทธ ์ฌ์ด์ ๋ฌธ์์ด๋ง์ ๊ฐ์ ธ์ต๋๋ค.
ํน์ ํ html์์๋ฅผ ์ป์ด์ค๋ ค๋ฉด, select("query") ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Document googleDocument = response.parse();
Element btnK = googleDocument.select("input[name=btnK]").first();
String btnKValue = btnK.attr("value");
(์ถ์ฒ: http://partnerjun.tistory.com/42)
๊ตฌ๊ธ์์ ์ ๊ณตํ๋ Deep Learning ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Tensorflow ํ๋ฒ์ฏค์ ๋ค๋ค ๋ค์ด๋ณด์ จ์ ๊ฑฐ๋ผ ์๊ฐํด์! Tensorflow๋ ๊ตฌ๊ธ ๋ธ๋ ์ธํ์์ ๋ง๋ ์คํ์์ค ์ํํธ์จ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋จธ์ ๋ฌ๋์ ์ํด ๋ง๋ค์ด์ก์ด์. Tensorflow๋ ์๋๋ก์ด๋์ iOS ๊ฐ์ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์ ๋ฌผ๋ก ๋ฆฌ๋ ์ค, MacOS์ ๋ฐ์คํฌํ์ด๋ ์๋ฒ ์์คํ ์๋ ๊ตฌ๋๋ ์ ์์ด์. ๋ฐ์ดํฐ ํ๋ก์ฐ ๊ทธ๋ํ(Data Flow Graph) ๋ฐฉ์์ ์ฌ์ฉํ๋๋ฐ, ๋ฐ์ดํฐ ํ๋ก์ฐ ๊ทธ๋ํ๋ ์ํ ๊ณ์ฐ๊ณผ ๋ฐ์ดํฐ์ ํ๋ฆ์ ๋ ธ๋(Node) ์ ์ฃ์ง(Edge)๋ฅผ ์ฌ์ฉํ ๋ฐฉํฅ ๊ทธ๋ํ(Directed Graph)๋ก ํํํด์. ๋ ธ๋๋ ์ํ์ ๊ณ์ฐ, ๋ฐ์ดํฐ ์ ์ถ๋ ฅ, ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ์ ์ฝ๊ธฐ ์ ์ฅ ๋ฑ์ ์์ ์ ์ํํ๊ณ ์ฃ์ง๋ ๋ ธ๋๋ค ๊ฐ ๋ฐ์ดํฐ์ ์ ์ถ๋ ฅ ๊ด๊ณ๋ฅผ ๋ํ๋ ๋๋ค. ์ฃ์ง๋ ๋์ ์ฌ์ด์ฆ์ ๋ค์ฐจ์ ๋ฐ์ดํฐ ๋ฐฐ์ด์ ์ค์ด๋๋ฅด๋๋ฐ, ์ด ๋ค์ฐจ์ ๋ฐ์ดํฐ ๋ฐฐ์ด์ ํ ์(Tensor)๋ผ๊ณ ํฉ๋๋ค. ์ฌ๊ธฐ์ Tensorflow๋ผ๋ ์ด๋ฆ์ด ์ง์ด์ก์ต๋๋ค.
- ๋ฐ์ดํฐ ํ๋ก์ฐ ๊ทธ๋ํ๋ฅผ ํตํ ํ๋ถํ ํํ๋ ฅ
- ์ฝ๋ ์์ ์์ด CPU/GPU ๋ชจ๋๋ก ๋์ฅ
- ์์ด๋์ด ํ ์คํธ์์ ์๋น์ค ๋จ๊ณ๊น์ง ์ด์ฉ ๊ฐ๋ฅ
- ๊ณ์ฐ ๊ตฌ์กฐ์ ๋ชฉํ ํจ์๋ง ์ ์ํ๋ฉด ์๋์ผ๋ก ๋ฏธ๋ถ ๊ณ์ฐ์ ์ฒ๋ฆฌ
- Python/C++๋ฅผ ์ง์ํ๋ฉฐ, SWIG๋ฅผ ํตํด ๋ค์ํ ์ธ์ด ์ง์ ๊ฐ๋ฅ
- UNIX ๊ณ์ด OS (Linux/Max OSX)
- GPU๋ฒ์ ์ Linux ๋ง ์ง์
ํ ์ํ๋ก์ฐ๋ฅผ ์ค์นํ๊ธฐ์ ์์ PIP๋ฅผ ์ค์น ํด์ผ ํฉ๋๋ค.
ํ ์ํ๋ก์ฐ ํ์ผ ๋ฐ์ ์ฃผ์๋ฅผ ์ธํ ํฉ๋๋ค. Python ๋ฒ์ ์ ๋ฐ๋ผ ๋ง์ถ์ด ๊ณจ๋ผ์ฃผ๋ฉด ๋ฉ๋๋ค.
๊ทธ ๋ค์, ํ ์ํ๋ก์ฐ๋ฅผ ์ค์นํฉ๋๋ค.
(์ถ์ฒ: http://blog.danggun.net/4064)
Inception V3๋ ImageNet์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ จ๋ ๊ตฌ๊ธ์ด ๊ฐ๋ฐํ ์ด๋ฏธ์ง ์ธ์์ ๊ฐ์ฅ ์ต์ ๋ชจ๋ธ์ด์์. ImageNet์ ๊ตฌ์กฐํ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ผ๊ณ ์๊ฐํ์๋ฉด ๋์.
Inception V3 ๋ชจ๋ธ์ ๋ค์ด๋ฐ์ ๋ค ์ฌ์ง์ ์ธํ์ผ๋ก ์ฃผ์ด ๋ถ๋ฅํฉ๋๋ค.
์์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ๋ ์ดํด๊ฐ ์ฌ์ธ ํ ๋ฐ์, Inception V3 ๊ฐ ์ ๊ณตํ๋ ์ด๋ฏธ์ง ๋ถ๋ฅ ๋ผ๋ฒจ๊ณผ ํผ์ผํธ๋ก ๊ฐ๊ฐ ๋ํ๋๊ฒ ๋ฉ๋๋ค. ์ด๋ฏธ ํ์ต์ด ๋์ด์๋ ๋ชจ๋ธ์ด๊ธฐ ๋๋ฌธ์ ๋จ์ํ ์ฌ์ง์ ์ธํ์ผ๋ก ์ฃผ๋ ๊ฒ๋ง์ผ๋ก ์์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ ํฌ์ ๋ชฉ์ ์ธ ์ ๊ตฌ ํ๋ณ์ ์ํด์ ๋ฏธ๋ฆฌ ๋ชจ์๋ ์ ๊ตฌ ์ฌ์ง ์ฝ 1500์ฅ๊ณผ ์ ๊ตฌ๊ฐ ์๋ ์ฌ์ง ์ฝ 1500์ฅ์ ๊ฐ์ง๊ณ Inception V3 ๋ชจ๋ธ๋ก ๋ถ๋ฅํด ์ ๊ตฌ ์ฌ์ง์ผ ๋์ ์ด๋ค ๋ผ๋ฒจ์ด ๋์ ํ๋ฅ ๋ก ๋ํ๋๋์ง ์คํํด ๋ณด์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๊ตฌ๊ฐ ์๋ ์ฌ์ง๋ค์ ๋๋ ธ์ ๋๋ ๋์ผํ๊ฒ ์คํํด๋ณด์์ด์.
์ ๊ตฌ ์ฌ์ง 1380๊ฐ๋ฅผ ๋๋ ธ์ ๋ ๊ฒฐ๊ณผ๋ก ์ถ๋ ฅ๋ ๋ผ๋ฒจ๋ค์ด ์ ์ฒด ์ฌ์ง์์ ๋ช ํผ์ผํธ๋ฅผ ์ฐจ์งํ๋์ง, ๊ทธ๋ฆฌ๊ณ ๋ํ๋๋ ๋น๋์๋ฅผ ๋ถ์ํ ๊ฒฐ๊ณผ ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋ฌ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๊ตฌ๊ฐ ์๋ ์ฌ์ง์ ๋๋ ธ์ ๋ ๋ํ๋๋ ๋ผ๋ฒจ๋ค๋ ํจ๊ป ๋ถ์ํด ๋ณด์๋๋ฐ์, ์ ๊ตฌ ์ฌ์ง์ด ์๋์๋ ๋ถ๊ตฌํ๊ณ ์ ๊ตฌ์ธ ์ฌ์ง์์ ๋ง์ด ๋ํ๋๋ ๋ผ๋ฒจ๊ณผ ๊ฒน์น๋ ๊ฒ๋ค์ด ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์ ํฌ๊ฐ ์ค์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ Inception V3 ๊ทธ๋ํ๋ ๊ธฐ์กด์ ์ฝ ๋ง ๊ฐ ๋ผ๋ฒจ์ ๊ฐ์ง ๋ชจ๋ธ์ด ์๋๋ผ ์ข๋ ์๋๋ฅผ ๋ผ ์ ์๊ธฐ ์ํด์ ์ฒ ๊ฐ์ ๋ผ๋ฒจ์ ๊ฐ์ง ๊ทธ๋ํ๋ฅผ ์ฌ์ฉํ๋๋ฐ์, ์๋ ์ฌ์ง์ ์ ๊ตฌ์ ํด๋น๋๋ ๋ผ๋ฒจ์ ์ฒ ๊ฐ ๋ชจ๋ธ์ ๋ผ๋ฒจ์ ์ ์ฉ์์ผ ์ต์ข ์ ์ผ๋ก ๊ฑธ๋ฌ์ง ์ ๊ตฌ ๋ผ๋ฒจ์ ๋ณด์ฌ์ค๋๋ค.
์๋๋ก์ด๋ ์คํ๋์ค์์ ์์ ํ๋ ๊ธฐ์กด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ด ๋๋ค. Assets ํด๋๋ฅผ ์์ฑํด ์ค ๋ค ๊ทธ๋ํ ๋ผ๋ฒจ ์ ๋ณด๋ฅผ ๋ด์ imagenet_comp_graph_label_strings.txt ํ์ผ๊ณผ Inception V3 ๊ทธ๋ํ ํ์ผ์ tensorflow_inception_graph.pb๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ฃ์ด์ค๋๋ค.
๊ทธ๋ํ ์ด์ธ์ ์์ค ์ฝ๋๋ TensorFlowMachineLearningExample์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ์ผ๋ ๋ ๊ถ๊ธํ ๊ฒ ์์ผ์๋ค๋ฉด ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์! ํ์ํ ์์ค ์ฝ๋์ ๊ทธ๋ํ ํ์ผ์ ๊ฐ์ถ๋ฉด ์ด์ ์๋๋ก์ด๋์์ ์ฌ์ฉํ ์ค๋น๊ฐ ์๋ฃ๋์์ต๋๋ค!
์ค๋น๊ฐ ๋์๋ค๋ฉด ๊ตฌ์ฒด์ ์ผ๋ก ์์ค์ ๋ํ ์ด๋ฏธ์ง๋ฅผ ์ด๋ป๊ฒ ๊ฐ์ ธ์ค๋์ง ์ค๋ช ํด ๋๋ฆฌ๊ฒ ์ต๋๋ค. HTML parsing์ ํตํด ๊ฒ์ํ๊ณ ์ ํ๋ ์์ค์ ์ด๋ฏธ์ง url๋ค์ ๊ตฌ๊ธ ์ด๋ฏธ์ง ๊ฒ์์ผ๋ก ๊ฐ์ ธ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ url๋ค์ ๊ฐ์ผ๋ก ์ ๋ ฅ ๋ฐ์ Bitmap ํ์์ผ๋ก ๋ฐ๊พผ ๋ค Inception ๋ชจ๋ธ์ ๊ฑฐ์ณ ์ฌ์ง์ ํด๋น๋๋ ๋ผ๋ฒจ๋ค์ ๊ฐ์ ธ์ต๋๋ค. ์๋๋ ์ฌ์ง์ ๋ผ๋ฒจ๋ค์ ์ด๋ป๊ฒ ์ ๊ตฌ ์ฌ์ง์ผ๋ก ํ๋ณํ๋์ง์ ๋ํ ์๊ณ ๋ฆฌ์ฆ ์๊ฐํ ์๋ฃ์ ๋๋ค.
์ด์ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์ณ ํด๋น ์ฌ์ง์ด ์ ๊ตฌ ์ฌ์ง ํน์ ๊ฑด๋ฌผ ์ฌ์ง์ธ์ง๋ฅผ ํ๋ณํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๊ฒ ๋ฉ๋๋ค.
์ง๊ธ ๊น์ง ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ด๋ฏธ์ง ๋ถ์ ๋ถ๋ถ์ ์์๋ณด์๋๋ฐ์, ๋ค์์ผ๋ก ๋ฆฌ๋ทฐ๋ฅผ ๋ณด๊ฒ ์ต๋๋ค
Wheelric์ ๋ ๋ฒ์งธ ๊ธฐ๋ฅ์ ๋ฆฌ๋ทฐ ์์ฑ ๊ธฐ๋ฅ์ ๋๋ค. ์์ฑ๋ ์ ๋ณด๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ์ด์ฉํ๋๋ฐ์. ์ด ์์คํ ์ ์๋ฒ ์์ ์ค์น๋์ด, ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ ์ค์๊ฐ์ผ๋ก ์ํธ์์ฉํ๊ฒ ๋ฉ๋๋ค. ์ด๋ฒ ํํธ์์๋ ์๋๋ก์ด๋์ DB๋ฅผ ์ฐ๋ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
์ฐ๋์ ํ์ํ ๊ตฌ์ฑ์ ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค. ์๋๋ก์ด๋ App์ ์ ์ธํ ์์ ๋ค๊ฐ์ง ์์๋ฅผ ์ผ์ปฌ์ด LAMP๋ผ ๋ถ๋ฅด๋๋ฐ, ์ด๋ Linux(์๋ฒ), Apache(์น์๋ฒ), MySQL(๋ฐ์ดํฐ๋ฒ ์ด์ค), Php(์น ์คํฌ๋ฆฝํธ ์ธ์ด)๋ฅผ ์๋ฏธํฉ๋๋ค. AWS(Amazon Web Service)๋ ๋ค์ํ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ฉฐ, EC2 ์ธ์คํด์ค๋ ์ฝ๊ฒ ๋งํด ๊ฐ์์ ์ปดํจํฐ ํ๋๋ฅผ ๋น๋ฆฌ๋ ๊ฒ์ ๋๋ค. ์์ ์ ํ์์ ๋ฐ๋ผ OS๋ฅผ ์ ํํ ์ ์์ผ๋ฉฐ wheeliric์ Linux๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฆฌ๋ทฐ ํ๋ซํผ ์ด์ฉ์ ํ์ํ ๋ฐ์ดํฐ๋ ๋ชจ๋ MySQL ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ฉ๋๋ค. MySQL์ด ์๋๋ก์ด๋ application๊ณผ ํต์ ํ๊ธฐ ์ํด์๋ ์น์๋ฒ Apache๊ฐ ํ์ํ๋ฉฐ, php๋ ์น ์คํฌ๋ฆฝํธ ์ธ์ด๋ก, php ํ์ผ์ apache ์น์๋ฒ ๋ด์์ ๋์ํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ, ํน์ Eclipse๋ฅผ ์ฌ์ฉํด์ ์๋ฒ์ mysql๊ณผ ์ฐ๋๋๋ console ํ๋ก๊ทธ๋จ์ ์์ฑํด๋ณด์ จ๋์? ์ดํด๋ฆฝ์ค+ Java ํ๊ฒฝ์์๋ JDBC๋ผ์ด๋ธ๋ฌ๋ฅผ ์ฌ์ฉ, ์น์๋ฒ๋ฅผ ์ฐ์ง ์๊ณ ์๋์ ๊ฐ์ด ๋ฐ๋ก mysql๊ณผ ์ฐ๋ํ์ จ์๊ฒ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์น์๋ฒ, ์ ์จ์ผํ ๊น์? ๋ฐ๋ก, ์๋๋ก์ด๋์ ๊ฒฝ์ฐ, ๋ณด์์ ์ด์ ๋ก ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ง์ ์ฐ๋์ ๋ง์๋จ๊ธฐ๋๋ฌธ์ ๋๋ค. ๊ทธ๋์ ์ค๊ฐ์ ์น์๋ฒ๋ฅผ ํ๋ฒ ๊ฑฐ์ณ์ ์ ๋ณด๋ฅผ ๊บผ๋ด์ต๋๋ค.
Java ์ฝ๋๋ก Http ์์ฒญ์ ๋ณด๋ด๋ฉด, Apache ์น์๋ฒ๋ ์์ฒญ๋ฐ์ php ํ์ผ์ ์ฝ๊ณ , ์ด์ ๋ํ ์๋ต์ผ๋ก Json ํฌ๋ฉง์ ๋ฐ์ดํฐ๋ฅผ ์์ ๊ฐ์ด ๋ณด๋ ๋๋ค. ์์ json ๋ฐ์ดํฐ๋ ํ์ฑ๋ ํํ์ด๋ฉฐ, ์ค์ ๊ฐ์ฅ ์ฒ์์ ๋ฐ์์ง๋ ๋ฐ์ดํฐ์ ํํ๋ ์๋์ ๊ฐ์ด ๊ดํธ๋ก ์ค์ฒฉ๋์ ๋ํ๋ฉ๋๋ค.
์ด๋ ๊ฒ ํ๋์ string์ผ๋ก ๋ฐ์์ง ๋ฐ์ดํฐ๋, ์๋ฐ ์ฝ๋๋จ์์ ํ์ฑ์ ํตํด ์ฐ๋ฆฌ๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ง ๋ฝ์๋ด๊ฒ ๋ฉ๋๋ค. ์์ ๋ฐ์ดํฐ๋ฅผ ์๋ก ๋ค๋ฉด, John์ ๊ฐ์ ์ ๋ณด์ธ month, day, year๋ฑ๋ง ๋ฝ์๋ด๋ ๊ฒฝ์ฐ์ ๋๋ค.
MySQL๊ณผ์ ์ฐ๋ ์์ฃผ๋ก ์ด์ผ๊ธฐํด๋ณด๊ฒ ์ต๋๋ค.
(์์ ์๋ฒ ์ฃผ์๋ ํ์ฌ ๋ฐ์ํ์ ์๋ฒ ์ฃผ์์ ๋ค๋ฆ ๋๋ค.)
์ด๋ php ํ์ผ์ EC2 ์๋ฒ์ /var/html/www/html/์ ์ ์ฅ๋ฉ๋๋ค.
Ex. /var/www/html/getReview.php
๋ฐ์ดํฐ์ฐ๊ธฐ๋ ๋ฐ์ดํฐ ์ฝ๊ธฐ์ ๋ฐฉ๋ฒ์ด ๊ฑฐ์ ๊ฐ์ต๋๋ค. ๋ค๋ฅธ ์ ์ 2๊ฐ์ง์ ๋๋ค.
- ์๋ฐ ์ฝ๋ ์์ URL
๊ธฐ์กด์๋ php ํ์ผ๋ช ์ผ๋ก ์ฃผ์๊ฐ ๋๋ฌ๋ค๋ฉด, ์ด๋ฒ์๋ ์๋์ ๊ฐ์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋กํ๊ณ ์ํ๋ ํ๋ผ๋ฉํฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
signUp.php?ID=" + id +"&nick="+nick,
- Php ํ์ผ ์์ ์ฟผ๋ฆฌ๋ฌธ
๋ง์ ์ฃผ์์ฌํญ์ด ์๊ฒ ์ง๋ง, ์ ๊ฒฝ์ฐ ๊ฐ์ฅ ์ ๋ฅผ ๋จน์๋ ๊ฒฝ์ฐ๋ ์ธ์ฝ๋ฉ์ด์์ต๋๋ค. ํ๊ธ ๋ฐ์ดํฐ์ ๊นจ์ง์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ช๊ฐ์ง ์ค์ ์ด ํ์ํฉ๋๋ค.
- /etc/mysql/my.cnf ์์
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
(์ถ์ฒ: https://nesoy.github.io/articles/2017-05/mysql-UTF8)
*๊ธฐ์กด์ Database๋ table์ charset์ ๋ณ๊ฒฝ๋๋๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ง์ ๋ณ๊ฒฝ ํ์
ALTER DATABASE [DB๋ช
] DEFAULT CHARACTER SET utf8;
ALTER TABLE [ํ
์ด๋ธ ๋ช
] CONVERT TO CHARACTER SET utf8;
์ดํ mysql ์ฌ์์ ํด์ค์ผ ํ๋ค.
- ์๋ฐ ์ฝ๋๋จ
- Php ํ์ผ
์์ ์์ ์ค๋ ๊ธฐ๊ฐ ํ๋ก์ ํธ๋ฅผ ์ํํด์ค๋ฉด์ ๊ฐ์ฅ ๋ง์ด ํ๋ ๊ณ ๋ฏผ์ ์๋ก์ด ๊ธฐ์ ์ ๋ํ ์์ฌ๊ณผ ์ค์ง์ ์ฌ์ฉ์์ ํ์ ๋ฅผ ์ ์ถฉํ๋ ์ผ์ด์์ต๋๋ค. ์ฌ์ฉ์์ ์ ์ฅ์ ๋ง์ถ๋ค๋ณด๋, ์๊ฐ๋ณด๋ค ๊ฒฐ๊ณผ๋ฌผ์ด ๋ค๋ฅธ ํ๋ก์ ํธ์ฒ๋ผ ์ฐ์! ํ์ฑ์ด ๋์ค์ง ์๋ ๋จ์ํ ๊ตฌ์กฐ๋ก ๋ณด์ฌ ์์ํจ์ ๋๋ ๊ฒฝ์ฐ๋ ๋ง์์ต๋๋ค.
ํ์ง๋ง ํ๋ก์ ํธ๋ฅผ ๋ง๋ฌด๋ฆฌํ๋ฉฐ ๋ ์๊ฐ์ ๊ทธ๋๋ ์ฐธ ๋ฟ๋ฏํ๋ค๋ ์ ์ ๋๋ค. ์ธ์์ ์๋ง์ ์น ํ์ฐ๋ ํ ํจ์ ๋ฐ์์ด ๋๊ณ ์, ์์ํ ํ๋ก์ ํธ์ด๊ธฐ์, ์ฌ์ฉ์๋ถ์ ๊ณ ๋ง๋ค*๋ ๋ง ํ๋ง๋์ ์ ํฌ๋ ์ค๋๋ ๋ณด๋์ฐน๋๋ค. ๊ฐ์ฌํฉ๋๋ค.