-
Notifications
You must be signed in to change notification settings - Fork 3
Gasree_Project_Blog
๊ฐ์ค๋ฆฌ = { ๊ถ์งํ, ๋ฏผ์งํธ, ์ ์งํธ, ์์์ง }
- ์๋ก | ๋ฌธ์ ์ ์ ๋ฐ ํ๋ก์ ํธ ๊ฐ์
- ๋ณธ๋ก |
- ์์คํ ๋ฐฐ๊ฒฝ ๋ฐ ๊ธฐ๋ฐ ๊ธฐ์
- ์ฌ์ฉ ๊ธฐ์
- ์ธํฐํ์ด์ค ๊ตฌํ
- ๊ฒฐ๋ก | ์์ฝ ๋ฐ ํ์ฅ
[๋ฌธ์ ์ ์]
ํ๊ตญ์ธ 5000๋ง๋ช
์ค 25๋ง๋ช
์ด ์๊ฐ ์ฅ์ ์ธ์ด๋ค. 84%๊ฐ ์ ์๋ ฅ์์ด๊ณ 16%๊ฐ ์ ๋งน์ธ์ด๋ค. ์ด์ค 95.6%๊ฐ ์ํ 1๋
์ดํ์ ๋ฐ์ํ ํ์ฒ์ฑ ์ฅ์ ์ธ๋ค์ด๋ค. ๋ํ ํ์ฒ์ฑ ์ฅ์ ์ ์ ๋ฐ์ด 40์ธ ์ดํ์ ์๊ธด๋ค.
์ ์๋ ฅ์๋ค์ ์์กด์๋ ฅ์ ์กฐ๊ธ์ด๋ผ๋ ์์งํ ์ ์์ด, ์์ ์ ์ฅ์ ๋ฅผ ์ฝ๊ฒ ์์ฉํ์ง ์๊ณ ๋ฌด์์ด๋ ์ง ์ค์ค๋ก ํ๊ณ ์ถ์ดํ๋ค.
์๊ฐ์ฅ์ ์ธ์ด ์ฅ์ ๋ก ์ธํ์ฌ ์ผ์ ์ํ์ ์ฌ๋ฌ ๋ถํธํจ์ ๊ฒช๊ณ ์๋ค. ํนํ ์ฅ์ ๋ก ์ธํด ์๋น ํ๋์ ๋ฅ๋์ ์ผ๋ก ํ ์ ์๋ค. ๋ฐ๋ผ์ ํ์ฌ๋ ๋๋๋ถ์ ์๊ฐ์ฅ์ ์ธ์ ๋ํ์ธ๊ณผ ํจ๊ป ์ผํ์ ํ๋ ํํ์ด๊ฑฐ๋ , ํผ์ ์๋นํ๋์ ํ๊ธฐ๋ ํ์ง๋ง ์ด๋ ค์์ ๊ฒช๊ณ ์๋ค. ๋ฐ๋ผ์ ์๋นํ๋์ ์ํ ๋ ๋์์ ์ค ์ ์๋ ๋ํ์ธ์ด ๋น์ฅ ์๊ฑฐ๋ ๋ํ์ธ์ด ์๋ค๊ณ ํด๋ ๋ชจ๋ ํ๋์ ๊ฐ์ดํด์ผ ํ๋ ๊ฒ์ ๋ํด ๋ฏธ์ํจ๊ณผ ๋ถํธํจ์ ๋๋ผ๊ณ ์๋ค.
-> ๋๋ถ๋ถ์ด ์คํ๋ผ์ธ ์ผํ์ ์์กดํ๊ณ ์์ง๋ง, ์๋ฅ ์ ๋ณด ํ์
์ ์ทจ์ฝ
์ต์ข ๋ชฉํ
- ๋ชจ๋ฐ์ผ ์ฑ์ ํตํด ์๊ฐ์ฅ์ ์ธ์ด ๋ ๋ฆฝ์ ์ผ๋ก ์ผํํ ์ ์๋๋ก ํ๋ค.
- ์ผํ์ ์ฆ๊ฑฐ์์ ๋๋ ์ ์๋๋ก ํธ์์ฑ์ ์ ๊ณตํ๋ค.
Objectives
- ์๊ฐ์ฅ์ ์ธ๋ค์ด ์ฝ๊ฒ ์ ๋ณด๋ฅผ ์ ๊ณต๋ฐ์์ผ ํ๋ค(์๊ฐ์ฅ์ ์ธ์ ์ํ UI)
- ์ท์ผ๋ก ๊ฐ๋ ์ ํํ ์์น์ ์ต๋จ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํด์ผ ํ๋ค
- ์ท ๊ฐ๊ฐ์ ์ ๋ณด๋ฅผ ์ ๊ณตํด์ผ ํ๋ค
- ์ท์ ์ถ์ฒํด์ผ ํ๋ค
- ์ผํ์ ์ ์ฉํ ์ ๋ณด๋ฅผ ์ ๊ณตํด์ผ ํ๋ค
- ์ผํ ์ ๋ณด๋ฅผ ์ ์ฅํ ์ ์์ด์ผ ํ๋ค
- ์ฅ์๋ฅผ ๋ ๋ ์ดํ์๋ ํด๋น ๋ฐ์ดํฐ์ ์ ๊ทผ์ด ๊ฐ๋ฅํด์ผ ํ๋ค
- ์ฌ๋์ด ๋ง์ ๊ณณ์์๋ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค
- ๋น์ฉ์ ์ต์๋ก ํ๋ค
Constraint
- ์ค๋งํธํฐ์ ์ฌ์ฉํ์ฌ์ผ ํ๋ค
- ์ถ๊ฐ์ ํ๋์จ์ด๊ฐ ์์ผ๋ฉด ์๋๋ค
- ์ค๋ด์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค(์ค๋ด ์ธก์)
- ์์ด ์์ ๋ก์์ผ ํ๋ค
Selction / Recommendation Module

์ฒ์์๋ Selection / Recommendation ๋ชจ๋์
๋๋ค. ๋จผ์ 2๊ฐ์ง์ ์๋๋ฆฌ์ค๊ฐ ์์ต๋๋ค:
- ์ ์ ์๊ฒ ํน์ ์นดํ ๊ณ ๋ฆฌ์ ๋ํ ๊ธฐ์ค์ ์ ๋ ฅ ๋ฐ์ ํด๋น๋๋ ๋ฆฌ์คํธ๋ค๋ฅผ ๋์ด
- ์ ์ ๊ฐ ์์ ์ ๊ตฌ๋งค ํ๋ ์ท๋ค์ด๋ ํ์ฌ ์ฐ ์ท๋ค๊ณผ ์ด์ธ๋ฆด๋งํ ์ท๋ค ์ถ์ฒ ๋๊ฐ์ง ์๋๋ฆฌ์ค์ ๋ชจ๋์ ํตํด ์ท์ ๋ฆฌ์คํธ์ ๊ทธ์ ๋ํ ์ ๋ณด๋ฅผ ๋ฐ๋๋ค.
IndoorAtlas / Navigation Module

์ ๋ชจ๋๋ค์ ํตํด ์ท์ ์ ํ๊ฒ ๋ ํ
๋ฐ, ๊ทธ ์ท์ด ์ด๋์ ์์นํ๊ณ ์๋์ง ์ ๋ณด๋ฅผ ๋ฐ์ ๊ทธ ์ฅ์๊น์ง์ ์ต๋จ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํ๋ Navigation ๋ชจ๋์ด๋ค. ์ด๋ ์ฌ์ฉํ๋ ์ด๋ด ์ธก์ ๊ธฐ์ ๋ก๋ ์๊ธฐ์ฅ์ผ์๋ฅผ ์ฌ์ฉํ๋ IndoorAtlas๋ผ๋ ๊ธฐ์ ์ ์ฌ์ฉํ ๊ฒ์ด๋ค.
NFC Module

์ท ์ฃผ๋ณ์ ๋์ฐฉ ํ์ ๋ ๋ด ์์ ์๋ ์ท์ด ๊ทธ ์ท์ด ๋ง๋์ง ์ฒดํฌํ๊ฑฐ๋ ์ธ๋ถ ์ ๋ณด์ ๋ํด์ ๋ ๋ฃ๊ธฐ๋ฅผ ์ํ ๋ NFC ๋ชจ๋์ ์ฌ์ฉํ๊ธฐ๋ก ํ์๋ค. ๋ํ ๊ตฌ๋งคํ์ ์ธ ์ท๋ค์ด๋ ์ฆ๊ฒจ์ฐพ๊ธฐ ๊ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด Server์ ์ ์ฅํ ๊ฒ์ด๋ค.
์ ์ฒด ์์คํ ๊ฐ์๋
Module(๋ชจ๋)
- ์ปดํฌ๋ํธ(component), ๊ตฌ์ฑ์์, ๋ถํ, ์ฑ๋ถ ๊ฐ๋ ์ผ๋ก ๋ณด๋ฉด ๋ ๊ฒ ๊ฐ๋ค
- ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ๋ ํ ๋ถ๋ถ์ผ๋ก ๋ณผ ์ ์๋ค.
Library(๋ผ์ด๋ธ๋ฌ๋ฆฌ)
- ์ปดํจํฐ ํ๋ก๊ทธ๋จ์์ ์์ฃผ ์ฌ์ฉ๋๋ ๋ถ๋ถ ํ๋ก๊ทธ๋จ๋ค์ ๋ชจ์๋์ ๊ฒ์ด๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ๋ฅ
- ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๋์ ๋งํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๋์ ๋ก๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์ปดํ์ผ๋ฌ๊ฐ ์์คํ์ผ์ ์ปดํ์ผํ ๋ ์ฐธ์กฐ๋๋ ํ๋ก๊ทธ๋จ ๋ชจ๋
- ๋น๋ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๊ณตํ๋ ์ฝ๋๋ฅผ ์คํํ์ผ์ ๋ฃ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์์คํ ํ๊ฒฝ์ด ๋ณํด๋ ์ฑ์๋ ์๋ฌด ์ํฅ ์์ผ๋ฉฐ, ์์ฑ๋ ์ฑ์ ์์ ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- ์ฌ์ฉํ๋ ๋ชจ๋ ์ค๋ธ์ ํธ ์ฝ๋๋ฅผ ์คํํ์ผ์ ๋ด์ฅํ๋ฏ๋ก, ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋๋ ์ฑ ์ฝ๋๊ฐ ๋ง์์ง๋ค.
๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ํ๋ก๊ทธ๋จ ์ํ ๋์ค ํด๋น ๋ชจ๋์ด ํ์ํ ๋ ํธ์ถํด ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ ๋ชจ๋ ์ฑ์ ๋น๋ํ ๋ ์กด์ฌํ์ง ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ํ๋ฌ๊ทธ์ธ ํ์์ผ๋ก ๊ฒฝ๋ก๋ฅผ ์ค์ ํด์ผ ํ๋ฉฐ, ์ค์น๊ฐ ๋ฐ๋ก ํ์ํ๋ค.
- ๋์ ๋งํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์คํํ์ผ๊ณผ ๊ด๋ จ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฝ๋๋ฅผ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฝ์ด๋ค์ฌ ํธ์ถ๊ด๊ณ๋ฅผ ์กฐ์ ํ ๋ค์ ์ฑ์ด ์คํ๋๋ค.
- ๋์ ๋ก๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์คํํ์ผ ์คํ ์ ์ฝ์ด ๋ค์ด์ง ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์ด์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Framework(ํ๋ ์์ํฌ)
- ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํ ์ถ์์ ์ค๊ณ๋ฅผ ๊ตฌ์ฒดํํ ํด๋์ค์ ์งํฉ.
- ์ค๊ณ, ๊ตฌํ์ ์ฌ์ฌ์ฉํ๊ฒ๋ ํ์ ํ๋ ํํ๋ก ํด๋์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฌ๋ฆฌ ์ฑ์ ํ๊ณผ ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ ํ๋ฉฐ, ๊ทธ ์์ ๊ฐ๋ฐ๋ ๊ฐ๋ฐ์์ ์ฝ๋๋ฅผ ์ ์ดํ๋ค.
- ๊ตฌ์ฒด์ ์ด๊ณ , ํ์ฅ ๊ฐ๋ฅํ ๊ธฐ๋ฐ ์ฝ๋๋ฅผ ๋ณด์ ํ๋ค. ์ค๊ณ์๊ฐ ์๋ํ๋ ์ฌ๋ฌ ๋์์ธ ํจํด์ ์งํฉ์ผ๋ก ๊ตฌ์ฑ๋ผ์๋ค.
API(Application Programming Interface)
- ์ฑ์ ๊ฐ๋ฐํ๊ธฐ ์ํ ๊ท์น.
- ์ฑ์์ ์ฌ์ฉํ ์ ์๋๋ก, ์ด์์ฒด์ ๋ ํ๋ก๊ทธ๋๋ฐ์ธ์ด๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ ์ดํ ์ ์๊ฒ ๋ง๋ ์ธํฐํ์ด์ค.
- ๊ฐ๋ฐ์๋ฅผ ์ํ ์ธํฐํ์ด์ค.
- ์ฑ ๊ฐ์ ์ฐ๋์ ๊ฐ๋ ์ด ๋ง์์ง์ ์๋ก ๋ค๋ฅธ ์ฑ ๊ฐ ๊ธฐ๋ฅ์ ๊ณต์ ํ ์ ์๋๋ก ๊ฐ๋ฐํ๋ค.
- SDK์ ๊ฑฐ์ ๊ฐ์ ๋ป์ผ๋ก ์ฐ์ธ๋ค.
SDK(Software Development Kit)
- ์ํํธ์จ์ด ๊ฐ๋ฐ ๋๊ตฌ ๋ชจ์
- SDK ์์๋ ๊ฐ๋ฐ์ ๋์์ด ๋ ๊ฐ๋ฐ ๋๊ตฌ ํ๋ก๊ทธ๋จ, ๋๋ฒ๊น ํ๋ก๊ทธ๋จ, ๋ฌธ์, API ๋ฑ์ด ์๋ค.
์ถ์ฒ: http://waaan.tistory.com/16 [waaan]
๋ค์ดํฐ๋ธ ์ฑ์ ์ฌ์ฉ์๋ค์ด ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ๊ธฐ ์ํด ์ค๋งํธํฐ์ ์ค์นํด์ผ ํ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋งํฉ๋๋ค. ๋ค์ดํฐ๋ธ ์ฑ์ ๊ฐ๋ฐ ์ธ์ด๋ฅผ ์ค๋งํธํฐ์ ์ต์ ํ๋ ๊ฐ๋ฐ ์ธ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ค๋งํธํฐ์์ ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ํ ๋ ๋งค์ฐ ๋น ๋ฅด๊ณ , ์์ ์ ์ ๋๋ค. ์ค๋งํธํฐ์ ์ต์ ํ ๋์ด ์์ด ์นด๋ฉ๋ผ๋ ์ค๋งํธํฐ์ ์ผ์๋ฅผ ๋ค๋ฃจ๊ธฐ๋ ์ฉ์ดํ๋ฉฐ, GPS๋ ๋ธ๋ฃจํฌ์ค์ ๊ฐ์ ์ธ์ฅ๊ธฐ๊ธฐ๋ค๊ณผ์ ์ฐ๊ฒฐ์๋ ๋์ ์ฑ๋ฅ์ ๋ณด์ผ ์ ์์ต๋๋ค.
ํ์ง๋ง ๋ค์ดํฐ๋ธ ์ฑ์ ์๋๋ก์ด๋์ IOS์ ํธํ์ด ๋์ง ์๊ธฐ ๋๋ฌธ์ ๋ณ๋๋ก ์ ์์ ํด์ผ ํฉ๋๋ค. ์ดํ๋ฆฌ์ผ์ด์ ์ด ์ ๊ทธ๋ ์ด๋๊ฐ ๋๋ฉด ์ ๊ณต์๋ ๊ฐ ์คํ ์ด์ ๋ค์ ์ ๋ก๋๋ฅผ ํด์ฃผ์ด์ผ ํ๊ณ , ์ฌ์ฉ์๋ ์คํ ์ด์์ ์ ๋ฐ์ดํธ๋ฅผ ํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์ต๋๋ค. ๋ํ ๊ฐ๋ฐ ์๊ฐ๊ณผ ๋น์ฉ๋ ์๋์ ์ผ๋ก ๋ง์ด ํ์ํ๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
์น ์ฑ์ ์ค๋งํธํฐ์ผ๋ก ๋ณผ ์ ์๋ ๋ชจ๋ฐ์ผ ์น ์ฌ์ดํธ๋ฅผ ๋งํฉ๋๋ค. ์ค๋งํธํฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ์ธํฐ๋ท ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์ฃผ์๋ฅผ ์ ๋ ฅํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์น ์ฑ์ ๋ชจ๋ฐ์ผ ์น ์ฑ์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ฉฐ HTML, CSS, JavaScript๋ก ๋ง๋ค์ด ์ง ์ ์์ต๋๋ค. ์น ์ฑ์ ๋ฉํฐ ํ๋ซํผ์ ์ง์ํ๋ฉฐ ๊ฐ๋ฐ ๋น์ฉ์ด ์ ๊ฒ ๋ ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
ํ์ง๋ง ์น ์ฑ์ OS์ ์ง์ ์ฐ๋ํ์ฌ ๋ ๋ฆฝ์ ์ผ๋ก ์คํํ๋ ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ๋ฌ๋ฆฌ ๋ธ๋ผ์ฐ์ ๋ด์์ ์คํํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ๊ทธ ์์ฒด๊ฐ OS API์ ์ง์ ์ก์ธ์คํ๋ ๋ค์ดํฐ๋ธ ์ฑ์ด์ง๋ง ๋ธ๋ผ์ฐ์ ๋ด์์ ์คํ๋๋ ์น ์ฑ์ด ์ก์ธ์คํ ์ ์๋ API์ ์์๋ ์ ํ์ด ์์ต๋๋ค. ๋ค์ดํฐ๋ธ ์ฑ์ ๋๋ฐ์ด์ค์ ๋ํด ์ ์ฒด ์ก์ธ์ค ๊ถํ์ ๊ฐ์ง๋ง ์น ์ฑ์์๋ ๋ง์ ๊ธฐ๋ฅ๋ค์ด ์ ํ๋ฉ๋๋ค.
ํ์ด๋ธ๋ฆฌ๋ ์ฑ์ ๋ค์ดํฐ๋ธ ๊ฐ๋ฐ๊ณผ ์น ๊ธฐ์ ์ ํผํฉํ ๊ฒ์ ๋๋ค. ์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๊ฐ ๋ชจ๋ฐ์ผ ํ๋ซํผ๊ณผ ์๊ด์์ด ์น ๊ธฐ์ ๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์์ผ๋ฉฐ, ํ์ ์ ๋ค์ดํฐ๋ธ API์ ์ง์ ์ก์ธ์ค ํ ์ ์์ต๋๋ค. ์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋ค์ดํฐ๋ธ๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ๊ฐ ์ ๊ณตํ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ๋ชจ๋ ํ์ฉํ ์ ์์ผ๋ฉฐ, ์น ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ ์ฝ๋๋ฅผ ๋ฉํฐ ํ๋ซํผ์์ ๊ณต์ ํ์ฌ ๊ฐ๋ฐ ๋ฐ ์ง์์ ์ธ ๊ด๋ฆฌ๋ฅผ ์ค์์์ ๋ณด๋ค ๋น ๋ฅด๊ณ ๊ฒฝ์ ์ ์ผ๋ก ์ํํ ์ ์์ต๋๋ค. ์ด ์ญ์ HTML, CSS, JavaScript์ ๊ฐ์ ์ธ์ด๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
์๋์ ์ฌ์ง๋ค์ ์์์ ์ค๋ช ํ ์ธ ๊ฐ์ง ๊ฐ๋ฐ ๋ฐฉ์์ ์์ฝํ ์ฌ์ง์ ๋๋ค.
๋ค์ดํฐ๋ธ ์ฑ์ ๋๋ฐ์ด์ค API์ ์ง์ ์ฐ๊ฒฐ๋ ์ ์๋ค๋ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์น ์ฑ์ ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ ์์ ์ฌ๋ผ์ ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ํ์ด๋ธ๋ฆฌ๋ ์ฑ์ ์น ์ฝ๋๋ฅผ ๋ค์ดํฐ๋ธ ์ปจํ ์ด๋๊ฐ ๊ฐ์ธ๋ฉฐ ์ด ๋ํ ๋๋ฐ์ด์ค API์ ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค.
์, ์ด์ ๊ทธ๋ผ ํ์ด๋ธ๋ฆฌ๋ ์ฑ์ ํ๋ ์ ์ํฌ์ธ ์์ด์ค๋์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์์ด์ค๋2 framework๋ angular js 2, cordova๋ฅผ ์ค์ฌ์ผ๋ก ๋ค์ํ UI components, API๋ฅผ ์ ๊ณตํด์ฃผ๋ ํ๋ ์์ํฌ์ ๋๋ค. ์์ด์ค๋์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋จผ์ ์๋์ ์์๋ค์ ๋ํ ์ง์์ด ์์ด์ผ ํฉ๋๋ค.
- ์ต๊ทค๋ฌ
- ํ์ ์คํฌ๋ฆฝํธ
- ์ฝ๋๋ฐ
์์๋๋ก ์ค๋ช ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
- ์ต๊ทค๋ฌ๋?
ํ์ฌ ๊ตฌ๊ธ์ด ๊ด๋ฆฌํ๊ณ ์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ ์ชฝ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋๋ฐ ํ์ํ ํ๋ ์์ํฌ ์ ๋๋ค.
- ํ์ ์คํฌ๋ฆฝํธ๋?
๋ง์ดํฌ๋ก์ํํธ๊ฐ ๊ด๋ฆฌํ๊ณ ์์ผ๋ฉฐ, ์ค์ผ์ผ ํ์ฅ์ด ๊ฐ๋ฅํ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋๋ค. ์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ์์ ํ์ ์ด ์๊ธด ์ธ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
- ์ฝ๋๋ฐ๋?
์ํ์น ์ฌ๋จ์์ ๋ง๋ค์์ผ๋ฉฐ ์น ๊ธฐ์ ์ ์ฌ์ฉํด์ ์ฑ์ ๋ง๋ค ์ ์๊ฒ ํด์ค๋๋ค. ์ฝ๋๋ฐ๋ ํ๋ฌ๊ทธ์ธ์ ํตํด ํ๋์จ์ด์ ์นด๋ฉ๋ผ์ ๊ฐ์ ๋ค์ดํฐ๋ธ ๊ธฐ๋ฅ๋ค์ ์ธ ์ ์๊ฒ ํด์ค๋๋ค.
์์ ๊ทธ๋ฆผ์์ ๋ณด์ด๋ฏ์ด, ์ฝ๋๋ฐ๋ฅผ ํตํด์ ๊ธฐ์ ์ ๋ง๋ค๊ณ ๊ทธ ๊ธฐ์ ์ ํ์ ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ์ธ ์ต๊ทค๋ฌ๊ฐ ํ์ ๋ง๋ค๊ณ ์์ด์ค๋์ด ๊ทธ ํ์ ๊ฐ์ธ์ ๋์๊ฐ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
์์ด์ค๋์ ์ฝ๋๋ฐ์ ์ต๊ทค๋ฌ๊ฐ ํ๋ ์ผ๋ค์ ๋ฌถ์ด์ฃผ๋ ๊ธฐ๋ฅ๋ฟ๋ง ์๋๋ผ ์ฌ์ฉ์๋ค์๊ฒ ํธํ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํด์ฃผ๊ณ ์์ต๋๋ค.
์์ด์ค๋ ๊ณต์ documents(https://ionicframework.com/docs/) ์์ ๋ค์ํ UI components, API์ ๋ํ ์์ธํ ์ค๋ช ์ ์ ๊ณตํด์ฃผ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์์ด์ค๋์์๋ ion โ slides ์ ๊ฐ์ ๋ค์ํ ion - tag๋ค์ ์ ๊ณตํด ๊ฐ๋ฐ์๋ค์๊ฒ ๋น ๋ฅด๊ฒ ๊ตฌํํ ์ ์๊ฒ ํฉ๋๋ค
Reference
- http://i.wik.im/280311
- IBM ์ํํธ์จ์ด WebSphere Thought Leadership ๋ฐฑ์
- http://sisir.tistory.com/17
- https://ionicframework.com/
์ ํฌ ํ๋ก์ ํธ์์ ํ ์ถ์ ๋ด๋นํ๋ ์ค๋ด์ธก์ ๊ธฐ์ ์ cordova plugin SDK๋ก ๋ ์์ด์ค๋ ์ธ๋ถ๋ชจ๋์ ์ด์ฉํด ๋ง๋ค์ด์ง๋๋ค. ๋จผ์ ionic framework์์ cordova๋ฅผ ์ด์ฉํด native ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ, ๋์๊ฐ SDK๋ฅผ ๋์ด์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๊ณ ์ค๋ด ์ธก์ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํ๊ฒ ์ต๋๋ค.
์์ ์ค๋ช
๋ค์ผ์ ๋๋ก ionic framework ๋ ์น์ฑ๊ณผ ์ค๋งํธํฐ๊ณผ์ ์ค๊ฐ๋ค๋ฆฌ ์ญํ ์ ํ๋ cordova ์์์ ๋์ํฉ๋๋ค.
Cordova๊ฐ ํ๋ ์ฃผ๋ ์ญํ ์ค์ ํ๋๊ฐ ์น์ฑ ํ๋ก์ ํธ์์ ์ค๋งํธํฐ์ native๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋๋ก ํด์ฃผ๋ ๊ฒ์ธ๋ฐ์.
Cordova plugin์ด ๊ทธ ์ญํ ์ ํฉ๋๋ค.
์ ์ค๋ช
๋๋ก cordova plugin์ ํ๋ซํผ๋ณ native ๊ธฐ๋ฅ์ ๋ํด JavaScript๋ก ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. Cordova plugin์ ์ง์ ๋ง๋ค ์๋ ์๊ณ , ๋๊ตฐ๊ฐ ๋ง๋ค์ด ๋์ ๊ฒ์ ๊ฐ์ ธ๋ค ์ธ ์๋ ์์ต๋๋ค. ์ ํฌ ํ๋ก์ ํธ์์๋ cordova plugin์ผ๋ก ๋ง๋ค์ด์ ธ ์๋ indooratlas SDK, NFC, TTS, STT ๋ฑ์ ๋ชจ๋์ ๊ฐ์ ธ์์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
Cordova plugin์ ionic ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด ํ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์๊น๋๋ค. Ionic2 ๋ถํฐ๋ javascript๊ฐ ์๋ typescript๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ธ๋ฐ์, typescript๋ javascript์ type์ ๋ง๋ค์ด ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ javascript์ superset์
๋๋ค. ์ฌ์ค์ javascript์ ๋์ผํ ์ธ์ด์ด์ง๋ง ๋ฌธ๋ฒ์ด ๋ฌ๋ผ cordova plugin์ ๊ทธ๋๋ก ๊ฐ์ ธ์ ์ฌ์ฉํ๊ธฐ์๋ ๋ฌด๋ฆฌ๊ฐ ์์ต๋๋ค. ๊ทธ๋์ ionic framework์์๋ โionic-nativeโ๋ฅผ ์ ๊ณตํฉ๋๋ค.
Ionic-native๋ cordova plugin์ typescript๋ก ๊ฐ์ธ ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ์ญํ ์ ํฉ๋๋ค. ์ ๋ฆฌํด๋ณด๋ฉด native ์ฝ๋๋ฅผ cordova๊ฐ javascript ์ธํฐํ์ด์ค๋ก ๊ฐ์ธ๊ณ , ionic framework์์๋ ๊ทธ๊ฒ์ typescript ์ธํฐํ์ด์ค๋ก ๊ฐ์ธ๋ ๊ฒ์ด์ฃ . ํ์ง๋ง ์ฌ๊ธฐ์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ๋ค์ ํ์ ์ ์ด๊ธฐ ๋๋ฌธ์ ์ด์ธ์ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ ๋๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ ํฌ ํ๋ก์ ํธ์์ ํ ์ถ์ ๋ด๋นํ๊ณ ์๋ IndoorAtlas๋ ๊ทธ๋ฐ ๊ฒฝ์ฐ ์๋๋ฐ์. ๋ชจ๋์ ๋ํ ์ค๋ช
๊ณผ ๊ฐ์ด ์ฌ์ฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
์ ํฌ ํ๋ก์ ํธ์ ๊ธฐ๋ฅ ์ค ํ๋์ธ ์ค๋ด ๋ด๋น๊ฒ์ด์
๊ตฌํ์ ์ํด ์ค๋ด์ธก์ ๊ธฐ์ ์ด ํ์ํฉ๋๋ค. ์ฌ๋ฌ๋ถ๋ค์ด ํํ ์๊ณ ๊ณ์๋ GPS๋ ๊ฑด๋ฌผ ๋ด์์๋ GPS๊ฐ ์ ํํ ์์น๋ฅผ ์ฐพ์ง ๋ชปํด, ๋ค๋ฅธ ๋์์ด ํ์ํฉ๋๋ค. ํ์ฌ ๋ง์ ๊ธฐ์ ๋ค์ ์ด์ฉํ์ฌ ์ค๋ด์ธก์๋ฅผ ๊ตฌํํ๊ณ ์๋๋ฐ, ๊ทธ ์๋ก Beacon์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ, wifi๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ ๋ฑ์ด ์์ต๋๋ค.
๊ทธ ์ค ์ ํฌ๊ฐ ์ ํํ ๊ธฐ์ ์ ์๊ธฐ์ฅ์ ์๊ณก์ ์ด์ฉํ๋ ๊ฒ์
๋๋ค. ์ฒ ์๋ค์ด ๊ธธ์ ์ฐพ์ ๋ ์ง๊ตฌ์ ์๊ธฐ์ฅ์ ์ด์ฉํ๋ ๊ฒ์์ ํํธ๋ฅผ ์ป์ด ๋ง๋ ๊ฒ์ธ๋ฐ์. ๋ค์์ ์ค๋ช
ํ๊ฒ ์ง๋ง ์ฒ ์๊ฐ ์๊ธฐ์ฅ ์ง๋๋ฅผ ํ์ตํ๊ณ ๊ธธ์ ์ฐพ์๊ฐ๋ ๊ณผ์ ์ด ์๊ธฐ์ฅ ์ค๋ด์ธก์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ๋งค์ฐ ํก์ฌํฉ๋๋ค. ์ค์ํ ๋ด์ฉ์ ์๋์ง๋ง ์ ๊ธฐํด์โฆ ๋๊ฐ ํ๋์ง ์ฒ ์๋ ์ ์ฝ๋ฉ ๋์ด์๊ตฐ์!
์๋ ๊ทธ๋ฆผ ์ฒ๋ผ ์๊ธฐ์ฅ์ด ์ค๋ด ์ฒ ์ ๊ตฌ์กฐ๋ฌผ์ ๋ง๋ ์๊ณก๋๋ฉด, ๋ง์น ์ง๋ฌธ์ฒ๋ผ ๊ณ ์ ํ ๊ฐ์ ๊ฐ์ง๊ณ ๋ํ๋๋ค๊ณ ํฉ๋๋ค. ์ด๊ฒ์ ์ค๋งํธํฐ์ ์๋ ์ง๊ตฌ์๊ธฐ์ฅ ์ผ์๋ฅผ ํตํด ๋งคํํ๊ณ ๊ทธ๊ณณ์ ์๊ธฐ์ฅ์ ํ๋์ ์ขํ๋ก ์ด์ฉํ๋ ๊ฒ์ด ์ง์๊ธฐ๋ฅผ ์ด์ฉํ ์ค๋ด์ธก์์ ํต์ฌ์
๋๋ค.
์๋์ ๊ทธ๋ฆผ์ ์ฌ๋ฌ๊ฐ์ง ์ค๋ด์ธก์ ๊ธฐ์ ์ ๋น๊ตํ ๊ฒ์ธ๋ฐ, ํ๋ฅผ ๋ณด์๋ฉด ์๊ธฐ์ฅ ์ค๋ด์ธก์ ๋ฐฉ๋ฒ์ด ๋น๊ต์ ์ ํํ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์์ธํ ๋ด์ฉ์ด ๊ถ๊ธํ์ ๋ถ๋ค์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค!
http://www.indooratlas.com/wp-content/uploads/2016/03/magnetic_positioning_opus_jun2014.pdf
์ด๋ฌํ ์๊ธฐ์ฅ ์ธก์๋ฒ์ ์ด์ฉํด์ ์ค๋ด์ธก์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ํ์ฌ๊ฐ IndoorAtlas ์ ๋๋ค. ๊ณ ๋ง๊ฒ๋ SDK๋ฅผ ์๋๋ก์ด๋์ iOS, ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ์ํ๋ Cordova Plugin์ผ๋ก๋ ์ ๊ณต์ ํด์ค๋๋ค.
๋ค์์ผ๋ก indoorAtlas๋ฅผ ์ด์ฉํด ionic framework๋ก ์ค๋ด ์ธก์๋ฅผ ์ ๊ณตํ๋ ์ดํ์ ๋ง๋๋ ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค. indoorAtlas ์ด์ฉํ๋ ค๋ฉด ํฌ๊ฒ ์ธ๊ฐ์ง ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ผ ํฉ๋๋ค.
1) ์ค๋ด์ธก์๋ฅผ ํ๊ณ ์ ํ๋ ๊ฑด๋ฌผ์ ์์น์ ์ธต๋ณ ์ค๋ด ์ง๋ ์
๋ ฅ ๋จ๊ณ(floor plan)
https://app.indooratlas.com/ ์ฌ์ดํธ์ ๋ค์ด๊ฐ๋ฉด ์ํ๋ ์ฅ์์ ์ํ๋ ์ง๋๋ฅผ ๋ฃ์ ์ ์์ต๋๋ค. Google Map์ ํตํด ๋ดํดํ์ ์์น๋ฅผ ์ฐพ๊ณ , ๋ดํดํ3์ธต์ ๋ํ ์ค๋ด ์ง๋๋ฅผ ์ ๋ ฅํ ๋ชจ์ต์ ๋๋ค. ์ด ์์ ์ floor plan์ด๋ผ๊ณ ํฉ๋๋ค.
2) ๊ณต๊ฐ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๊ณ ์ ํธ ์ ๋ณด๋ฅผ ๋ชจ์ผ๋ ๋จ๊ณ
Android์ Map creator ์ดํ์ ์ด์ฉํ์ฌ waypoint๋ฅผ ์ค์ ํ๊ณ , waypoints ๊ฐ์ ๊ฒฝ๋ก๋ฅผ ๊ฑธ์ด๊ฐ๋ฉด์ ๋งต์ ์ ์ฅํฉ๋๋ค
- calibration
- waypoint ์ค์ ๋ฐ ๊ฒฝ๋ก ์ ์ฅ
- positioning test
์ค์ ๋ก ๋งคํ์ ์๋ฃํ ๋ดํดํ ๋ณต๋์์ ์์ง์ฌ๋ณธ ๊ฒฐ๊ณผ์
๋๋ค. ์ด๋ก์์ผ๋ก ์น ํด์ง ๋ถ๋ถ์ด mapping์ด ์ ๋ ๋ถ๋ถ์ด๋ผ๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค.
3) SDK๋ฅผ ์ดํ๋ฆฌ์ผ์ด์
์ ํฉ์น๋ ๋จ๊ณ
๋ง์ง๋ง์ผ๋ก ionic ํ๋ก์ ํธ์ cordova plugin์ผ๋ก ๋ SDK๋ฅผ ๋ค์ด๋ฐ์ ๋ฃ๊ณ ์ฝ๋ฉ์ ํ๋ ๋จ๊ณ์
๋๋ค.
1. ์ปค๋งจ๋์ฐฝ์์ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ platform์ ์ถ๊ฐํ๊ณ ํ๋ฌ๊ทธ์ธ์ ์ค์นํฉ๋๋ค.
cordova platform add android
cordova plugin add cordova-plugin-indooratlas
์ค์น๊ฐ ์๋ฃ๋๋ฉด ์์ ๊ฐ์ด ํ๋ก์ ํธ์ ํ๋ฌ๊ทธ์ธ์ด ๋ค์ด๊ฐ ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
2. ์ค์ ๋ก ์ ํฌ๊ฐ ์ฌ์ฉํ ํจ์๋ค์ jsํ์ผ์ ๋ค์ด ์์ต๋๋ค.
์ ์ค์ IndoorAtlas ํ์ผ์ ์ด์ด๋ณด๊ฒ ์ต๋๋ค.
IndoorAtlas๊ฐ ์ ์๋์ด ์๊ณ ๊ทธ ์์ ์ฌ๋ฌ๊ฐ์ง ํจ์๋ค์ด ์ ์๋์ด ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ ๋ถ๋ถ์ด module.exports๋ก ์ด ํ์ผ ์ธ์์๋ ์ฌ์ฉํ ์ ์๋๋ก ๋์ด์๋ค์.
3. ์ด์ ์๋ ๊ทธ๋ฆผ์ฒ๋ผ ์ฌ์ฉํ๊ณ ์ ํ๋ typescript ํ์ผ์ ๊ฐ์ ์ ์ธํ ํ ํจ์๋ฅผ ๊ฐ์ ธ๋ค ์ฌ์ฉํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ์ฌ์ฉํ initialize ํจ์๋ ์๊น ์
๋ ฅํ floorplan์ API key๋ฅผ ๋ฐ์์์ โ์ด ๋ถ๋ถ์ ๋ํ ์ค๋ด์ธก์๋ฅผ ์คํํ๊ฒ ๋คโ ๋ผ๊ณ ์ด๊ธฐํ์์ผ์ฃผ๋ ํจ์์
๋๋ค.
๊ทธ๋ฐ์ SDK ํจ์๋ค์ http://docs.indooratlas.com/develop/cordova/api/ ์์ ํ์ธํ์ค ์ ์์ต๋๋ค!
์์์ ์ค๋ช
๋๋ฆฐ ๋ถ๋ถ์ indooratlas๋ฅผ ์ดํ๋ฆฌ์ผ์ด์
๋ด์ ๋์ด์ค๋ ๋ถ๋ถ ๊น์ง ์
๋๋ค. ์ ํฌ ํ๋ก์ ํธ์์๋ indooratlas๋ฅผ ํตํด ์ค๋ด ์์น ์ ๋ณด๋ฅผ ๋ฐ์ ์ค๊ณ , ๊ทธ ์ ๋ณด๋ฅผ ํตํด ์ผํ๋ชฐ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์๋ดํด์ฃผ๋ ๋ด๋น๊ฒ์ด์
์ ์ ๊ณต ํฉ๋๋ค.
๋ฐ๋ผ์ ํฅํ ๊ณผ์ ๋ ์๊ธฐ์ฅ์ด ๋งคํ๋ ์ค๋ด ์ง๋์ ์ขํ์ ๋ฐ๋ฅธ ์ผํ ์ ๋ณด๋ฅผ ์ง์ด ๋ฃ๊ณ , ๊ฐ๊ฐ ์ผํ๋ชฐ ์ฌ์ด์ ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๊ตฌํํ๋ ๊ฒ์
๋๋ค.
์๊ฐ์ฅ์ ์ธ์ ์ฃผ ์ฌ์ฉ์๋ก ์ค์ ํ ์ ํฌ์ ์๋ฃจ์
์์ User Interface๋ ๋งค์ฐ ์ค์ํ ์์์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก โ์ธํฐํ์ด์คโ๋ผ๊ณ ํ๋ฉด ๋ ์ฌ๋ฆฌ๋, ๋์ ๋ณด์ด๋ ํ๋ฉด ๊ตฌ์ฑ๊ณผ ๋์์, ๋ณด์ด์ง ์๋ ๋ถ๋ถ์์์ interaction ๋ํ ์๊ตฌ๋๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด์ ์ ํฌ๋ ์ฝํ
์ธ ์ตํฉ๋์์ธํ๋ถ์ โ์ฃผ์ฌโ ํ๊ณผ ํ์
์ ์งํํ์ฌ ํ๋ฉด ๊ตฌ์ฑ ์์ฑ๋๋ฅผ ๋์์ต๋๋ค.
์๊ฐ์ฅ์ ์ธ์ ๋ชจ๋ฐ์ผ ์ฌ์ฉ์ฑ์ ๋์ด๊ธฐ ์ํด ์ ํฌ๊ฐ ์ฌ์ฉํ ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ ํฐ ๊ธ์จ, ์ ์ค์ฒ, TTS์
๋๋ค. ์ด ์ฅ์์๋, UI์ ์ด๋ก ์ ์ธ ๋ถ๋ถ๋ณด๋ค๋ ์ค์ ๊ตฌํ ๋ถ๋ถ์ ์ด์ ์ ๋ง์ถ๊ณ ์ ํฉ๋๋ค.
์ ํฌ๋ ํฐ ๊ธ์จ๋ก ๋ง๋ค์ด์ง ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์์ ํ๋ฉด ๊ตฌ์ฑ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์์ต๋๋ค.
๋ํ ํ๋ก์ ํธ ๊ธฐ๊ฐ ๋ฌธ์ ๋ก ์ธํด์ ํน์ ํ๋ซํผ์ ํ์ ํ ํ๋ฉด ๋์์ธ์ ๊ตฌ์ฑํ์ต๋๋ค.
์ด๋ฏธ์ง๋ฅผ ํ๋ก์ ํธ ๋ด ๊ฒฝ๋ก์ ์ ์ฅํ ํ, html ํ์ผ์์ ๊ฒฝ๋ก์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
<div [@nav1]="nav1State" class="cShadow"><img src="assets/t2img/Navigator1.png"></div>
css ํ์ผ์์ ํด๋น ์ด๋ฏธ์ง์ ์์น ๋ฑ์ ์ค์ ํ ์ ์์ต๋๋ค. ์ด ๋ ๋ณดํต์ ์ ๋์์น์ธ pt ๋จ์๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๋๋ฐ, ์ ํฌ๋ px ๋จ์๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์์น ์ค์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
.cShadow{
position: absolute;
padding: 0;
border: 0;
width: 765px;
height: 765px;
left: -372px;
top: -7px;
}
๋ค์๊ณผ ๊ฐ์ด ์๋ฃ๋ฅผ ๋ฐ์
๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ ๋ง๋ค์ด ๋ผ ์ ์์ด์!
์๊ฐ์ฅ์ ์ธ์ ํฌํจํ ๋ชจ๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ ์ฌ์ฉ์๋ค์ ์ ์ค์ฒ๋ฅผ ํตํด ํด๋ํฐ์ input์ ๋ฃ์ต๋๋ค. ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ๋ฅผ ์ฌ์ฉํ ๋๋ฅผ ์๊ฐํด ๋ณด์ธ์. ํ๋ฉด์ ํด๋ฆญํ๊ณ , ์ฐ์ธก์ผ๋ก, ๋๋ ์ข์ธก์ผ๋ก ํ๋ฉด์ ์์ง์ด๊ณ , ํด๋ํฐ์ ํ๋๋ ๋ฑ์ ํ๋์ ํจ์ผ๋ก์จ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์ ์ ๋ ฅ์ ํ ์ ์์ต๋๋ค.
์ ์ค์ฒ์ ๊ฒฝ์ฐ native ๋จ์์ ๊ตฌํ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด ๋ ๋ง๊ณ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
2.1 ๊ธฐ๋ณธ ์ ์ค์ฒ
Angular์ Event binding์ ํตํด ์ฌ์ฉ์์ ํ๋์ ์ธ์ํ๊ณ ์ดํ ํ๋์ ์ ์ํ ์ ์์ต๋๋ค. ๊ฐ๋จํ ๊ธฐ๋ณธ ์ ์ค์ฒ๋ ์ฝ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ๊ฐ๋ น click์ ํ์ ๋ ํน์ ํจ์๊ฐ ์คํ๋๊ฒ ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ๋ฉด ๋ฉ๋๋ค.
<button (click)="onSave()">Save</button>
์ด ๊ฒฝ์ฐ, Save๋ผ ์ ํ ๋ฒํผ์ ํด๋ฆญํ๋ฉด (click ์ด๋ฒคํธ), onSave() method๊ฐ ์คํ์ด ๋ฉ๋๋ค. ์ด๋ ๊ฒ ์์ฑ ๊ฐ๋ฅํ ์ด๋ฒคํธ ๋ชฉ๋ก์ ๋ค์์ ์ฐธ์กฐํ์ธ์. https://coursetro.com/posts/code/59/Angular-4-Event-Binding
์ ์ ๊ฐ ์ด๋ฒคํธ๋ฅผ ์์ฑํ๋ฉด ์ด์ ๋ฐ๋ฅธ ์์คํ
๋ฐ์์ด ์๊ฒ ์ฃ ? ๊ฐ๋ น, ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ฐ์ผ ์ฌ์ฉ ์ ํ๋ ํ๋๋ค์ ์๊ฐํด๋ณด๋ฉด, ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ค์ ํ์ด์ง๋ก ๋์ด๊ฐ๋ค๋๊ฐ, ํน์ ํ์ผ์ด ์คํ๋๋ค๋๊ฐ ํ๋ ์ด๋ค action์ ์ํํ ๊ฒ์
๋๋ค. ์ด๋ฅผ ์ํด ํด๋น event์ ๋ํ ๋ฐ์ดํฐ ๊ฐ ๋ฑ์ ์ ๋ฌํด์ฃผ๋ ๊ฒ์ด event object $event์
๋๋ค.
<button (click)="myEvent($event)">My Button</button>
๊ดํธ ์์ $event object๋ฅผ ํตํด ํจ์์ parameter๋ก ์ด๋ฒคํธ ๋ณ์๋ค์ ์ ๋ฌํ ์ ์์ต๋๋ค.
2.2 custom event ๊ตฌ์ฑ
ํ๋ฉด ์ ์ฒด์์ ์๋ํ๋ ์ค์์ดํ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด ์ ํฌ๋ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ๊ตฌ์ฑํ์ต๋๋ค.
T4-to-right.ts(directive)
import { Directive, Input, ElementRef, Renderer, Output, EventEmitter } from '@angular/core';
import { DomController } from 'ionic-angular';
@Directive({
selector: '[t4-to-right]' // Attribute selector
})
export class T4ToRightDirective {
@Input('startLeft') startLeft: any;
@Input('startTop') startTop: any;
@Output() overDrag: any = new EventEmitter();
@Output() aaa: number = 0;
@Output() dighdigh: any = new EventEmitter();
triggered: boolean = false;
@Output()
panpan: EventEmitter<any> = new EventEmitter();
constructor(public element: ElementRef, public renderer: Renderer, public domCtrl: DomController ) {
}
ngOnInit(){
// this.renderer.setElementStyle(this.element.nativeElement, 'position', 'absolute');
let hammer = new window['Hammer'](this.element.nativeElement);
hammer.get('pan').set({ direction: window['Hammer'].DIRECTION_ALL});
hammer.on('pan', (ev) => {
this.handlePan(ev);
this.panpan.emit(ev);
})
}
}
์ด directive ๋ ์ฝ๋ ๋ด์์ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ๋ฉ๋๋ค.
<ion-content t4-to-right (pan)="panEvent($event)" (click)="onLongPress($event)">
๋ค์๊ณผ ๊ฐ์ด html ํ์ผ ํ๋ฉด ์ ์ฒด์ directive๋ฅผ ์ ์ํ์ฌ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ฌ ์ ์๊ฒ ํฉ๋๋ค.
<div class="interationCircle" [style.left] = "position + 'px'"> <img src="assets/t2img/navCircle2.png"></div>
์ด๋ฒคํธ๋ก ์์ฑ๋ ๊ฐ์ด ๋ค์ ํ๋ฉด ๊ตฌ์ฑ์ ์ฌ์ฉ๋๋ ๋ถ๋ถ์ ๋๋ค.
constructor(public navCtrl: NavController, public navParams: NavParams, private tts: TextToSpeech) {
this.triggered = false;
this.position = this.defaultX;
}
constructor์์ ํฌ์ง์ ์ ์๋ฅผ ํด ์ค๋๋ค.
panEvent(e) {
if (e.deltaX <= -140 && !this.triggered) {
this.triggered = true;
this.position = 66.5;
//event ์คํ
this.navCtrl.push(T5Page, {}, { animate: false });
}
else if (this.position > 66.5) {
this.position = this.defaultX + e.deltaX;
if (e.isFinal == true) {
this.position = this.defaultX;
this.triggered = false;
}
}
}
๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํฉ๋๋ค.
์ด ์ฝ๋์ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
https://drive.google.com/uc?id=0B1b8Ja-hvDJ2X2ZSSFF1WUJQRnc
์์ด์ค๋ ๊ณต์ documents(https://ionicframework.com/docs/) ์์ ํ์ํ Native plugin์ ์ค๋ช
์ ์ฝ๊ณ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ํ๋ ํ๋ฌ๊ทธ์ธ์ ๋ํ Usage, Supported Platforms์ ๋ํ ์ค๋ช
์ ๋จผ์ ์ฝ์ด๋ณด์ ํ ํ์ํ ๊ธฐ๋ฅ์ ์ฐพ์ ์ฌ์ฉํ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ณดํต ์ ๊ณตํ๋ ํจ์์ ๋ํ ์ค๋ช
๋ ๋ชจ๋ ์์ด document๊ฐ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ์ด ๋งค์ฐ ์ฉ์ดํฉ๋๋ค.
Ionic ์์ ์ง์ํ๋ native plugin์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ฃผ๋ก ๋ค์์ ์ ์ฐจ๋ฅผ ๊ฑฐ์นฉ๋๋ค. ์ฌ๊ธฐ์ ์ ํฌ๊ฐ ์ฌ์ฉํ Text to speech ๊ธฐ๋ฅ์ ์๋ฅผ ๋ค์ด ์ค๋ช
ํด ๋ณด๊ฒ ์ต๋๋ค.
1) Cordova plugin์ ์ค์นํ๋ค.
๊ฐ์ฅ ๋จผ์ ์ค์น ๊ณผ์ ์ ๋๋ค.
$ ionic cordova plugin add cordova-plugin-tts
$ npm install --save @ionic-native/text-to-speech
๋๋ถ๋ถ์ native plugin์ ์์ ๊ฐ์ ๋ ๊ฐ์ง๋ฅผ ์ค์นํ๋๋ก ๋์ด ์์ต๋๋ค. ์ด๋ฅผ ํฐ๋ฏธ๋ ๋ฑ์์ ์ ๋ ฅํ๋ฉด ์ค์น๊ฐ ์ด๋ฃจ์ด์ง๋๋ค.
2) appโs module์ ์ด ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํ๋ค.
๋ค์์ผ๋ก ์ด ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๊ธฐ ์ํ์ฌ appโs NgModule์ ํด๋น ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํด์ฃผ์ด์ผ ํฉ๋๋ค.
๊ฒฝ๋ก๋ ํ๋ก์ ํธ์ /src/app/app.module.ts ์
๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ํ๋ฌ๊ทธ์ธ์ import ํด์ฃผ์ธ์.
import { TextToSpeech } from '@ionic-native/text-to-speech';
๊ทธ ํ NgModule ๋ด์ providers์ ์ถ๊ฐํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
@NgModule({
โฆ
providers: [
โฆ
TextToSpeech,
โฆ
]})
์ด์ ๋ชจ๋ ์ฌ์ฉ ์ค๋น๋ฅผ ๋ง์ณค์ต๋๋ค!
3) ์ฌ์ฉํ๊ณ ์ ํ๋ ํ์ด์ง์ .ts ํ์ผ์์ ์ฌ์ฉํ๋ค.
ํ์ผ ์๋จ import๋ฅผ 2)๊ณผ ๋์ผํ๊ฒ ํ๊ณ ,
import { TextToSpeech } from '@ionic-native/text-to-speech';
constructor์์ ์ ์ํ ํ์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
constructor(public navCtrl: NavController, public navParams: NavParams, private tts: TextToSpeech) {
}
์ ํฌ๋ ๋ค์๊ณผ ๊ฐ์ ํจ์๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ์ต๋๋ค.
async speak(line): Promise<any> {
try {
await this.tts.speak({
text: line,
locale: 'ko-KR',
rate: 1
});
console.log('speak function start!');
}
catch (e) {
console.log(e);
}
}
์ค์ ์ฌ์ฉ์ ๋ค์๊ณผ ๊ฐ์ด ํฉ๋๋ค. ์ฐธ ์ฝ์ฃ ?
this.speak(`์คํ์ผ์ฒดํฌ๋ฅผ ์์ํด๋ณผ๊ฒ์. ๋จผ์ ์์ฑ์๋ด๋ฅผ ๋ฐ์, ์คํ์ผ์ฒดํฌ ๋ธ๋ก ์ฅํ์ผ๋ก ์ด๋ํด ์ฃผ์ธ์!
์คํ์ผ์ฒดํฌ ๋ณผ๋ก ์ฅํ์ ๋ฐ๋ฅด๊ฒ ์๋ฉด ํจ๊ณผ์๊ณผ ํจ๊ป ์คํ์ผ์ฒดํฌ๋ฅผ ์์ํฉ๋๋ค.
๋ค, ์คํ์ผ ๋ณผ๋ก ์ฅํ์ ์์
จ์ด์. ๋๋ฒ ํญํ์๋ฉด ์คํ์ผ ์ฒดํฌ๊ฐ 5์ด ํ์ ์์๋ฉ๋๋ค.`);
`(backtick/backquote)๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ์ค์ ๋์์ string์ผ๋ก ์ธ์ํ๊ฒ ํ ์ ์์ต๋๋ค.
๋ณดํต์ ๊ฐ๋ฐ ํ๋ก์ ํธ์ ๋ค๋ฅด๊ฒ UI ์์์ ์ด์ ์ ๋ง์ถ์ด ๋จผ์ ๊ฐ๋ฐ์ ์งํํ๊ฒ ๋์์ต๋๋ค. ์ด์ UI์ ๋ถ๋ถ์ ์์ด์๋ ๊ธฐ์ฌ๋ฅผ ํ์ง๋ง, ์ ํ๋์ด์ผ ํ๋ ๊ธฐ์ ์ ์ธ ๋ถ๋ถ์ ๋จผ์ ๊ตฌ์ถํ์ง ๋ชปํ ๊ฒ์ด ์์ฌ์์ผ๋ก ๋จ์ต๋๋ค.
ํ์ฌ ์ ํฌ ํ๋ก์ ํธ์์ ์๊ฐ์ฅ์ ์ธ์ผ๋ก ํน์ ๋์ด ์๋ ์ฌ์ฉ์๋ฅผ ํ์ฅํด๋ณด๋ ค ํฉ๋๋ค. ์๊ฐ์ฅ์ ์ธ ์ค์ค๋ก๋ โ์ฅ์ ์ธ์ ์ํ ์ดํโ์ด ์๋๋ผ โ์ฅ์ ์ธ์ ์ฌ์ฉ์ฑ์ด ๋์ ๋ชจ๋๊ฐ ์ฌ์ฉํ๋ ์ดํโ ์ ์ํ๊ณ ์๋ ๋งํผ, ๊ทธ์ ์ด์ ์ ๋ง์ถ์ด ๋ชจ๋ ์ฌ๋๋ค์ด ํจ๊ป ์ผํ์ ์ฝ๊ณ ์ฌ๋ฏธ์๊ฒ ์ฆ๊ธธ ์ ์๋ ์๋ฃจ์
์ ๋ง๋ค์ด๋ณด๊ณ ์ ํฉ๋๋ค.
์๋ฅ ์ ๋ณด์ ์ค๋ด ์์น ์ธ์์ ์ ํฌ์ ์๋ฃจ์
์ ์ํ ๊ธฐ๋ฐ ๊ธฐ์ ์ด๊ธฐ ๋๋ฌธ์, ์ฐจํ์๋ ์ค๋ด ๋ค๋น๊ฒ์ด์
๊ณผ ์๋ฅ ์ถ์ฒ ๊ธฐ์ ์ ๋ํ ์ฐ๊ตฌ๋ฅผ ์งํํ๋ ค๊ณ ํฉ๋๋ค.