[์ƒˆ์‹น ์•ˆ๋“œ๋กœ์ด๋“œ-1] ์•ˆ๋“œ๋กœ์ด๋“œ์™€ ๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ ํŠธ๋ Œ๋“œ๋ฅผ ์ดํ•ดํ•˜์ž
๋ฐ˜์‘ํ˜•

 

์ƒˆ์‹น ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐ•์˜๋Š” ๊นก์ƒ˜์˜ ๊ฐ•์ขŒ๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž„

 

 

1๊ฐ•. ๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ


Native App

•Platform(OS)์— ์ข…์†์ ์ธ ๊ธฐ์ˆ ์„ ์ด์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ๋˜๋Š” App
•Android (Java, Kotlin), iOS(Objective-C, Swift) ๋“ฑ์œผ๋กœ ๊ฐœ๋ฐœ
•Platform ์— ์ตœ์ ํ™” ๋œ ๊ธฐ์ˆ ์„ ์ด์šฉํ•จ์œผ๋กœ ๋†’์€ ํผํฌ๋จผ์Šค์™€ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๊ฐ€๋Šฅ

๋‹จ์ : Kotlin ์–ธ์–ด๋ผ๋Š” ๊ฑธ ์ƒˆ๋กœ ํ•™์Šตํ•ด์•ผ ํ•˜๊ณ , ์•ˆ๋“œ๋กœ์ด๋“œ์˜ ๊ธฐ์ˆ ์„ ํ•™์Šตํ•˜๊ณ  ๋งŒ๋“  ๋‹ค์Œ
iOS์•ฑ์„ ์œ„ํ•œ ์–ธ์–ด/๊ธฐ์ˆ ์„ ์ƒˆ๋กœ ํ•™์Šตํ•ด์„œ ๋งŒ๋“ค์–ด์•ผ ํ•จ
๋”ฐ๋กœ๋”ฐ๋กœ ์œ ์ง€๋ณด์ˆ˜ -> ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ/์œ ์ง€๋ณด์ˆ˜์„ฑ ๋‹จ์ 

์ฐธ๊ณ : ์—ฌ์ „ํžˆ ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฒค๋”๋“ค ๋งŽ์Œ(๊ธฐ๋Šฅ ๋•Œ๋ฌธ)


Cross Platform App

•ํ•˜๋‚˜์˜ ๊ธฐ์ˆ ๋กœ ๋งŒ๋“œ๋Š” App (๋™์ผ ์ฝ”๋“œ)
•HTML, CSS, Javascript, C#, Kotlin, Swift, Dart ๋“ฑ
•ํ•˜๋‚˜์˜ ๊ธฐ์ˆ ๋กœ ๋‹ค์–‘ํ•œ Platform ์„ ์œ„ํ•œ ์•ฑ์„ ์ž‘์„ฑํ•จ์œผ๋กœ ๋†’์€ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ

์ฐธ๊ณ : ํฌ๋กœ์Šคํ”Œ๋žซํผ์œผ๋กœ ์•ฑ์„ ๊ฐœ๋ฐœํ•œ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„, ๊ฐœ๋ฐœ์ž๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ/iOS์˜ ๋„ค์ดํ‹ฐ๋ธŒ ์ง€์‹์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•จ.


ํฌ๋กœ์Šคํ”Œ๋žซํผ ํ”„๋ ˆ์ž„์›Œํฌ1: Ionic

WebApp ๋ฐฉ์‹. (์•ˆ๋“œ๋กœ์ด๋“œ ์›น๋ทฐ, iOS UI์›น๋ทฐ) ๋Ÿฐํƒ€์ž„์‹œ ์•ฑ์˜ ๋‚ด์žฅ ๋ธŒ๋ผ์šฐ์ €์— ์˜ํ•ด ์‹คํ–‰. (html,css,js)
• ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์ธ Angular, Vue ๋ฅผ ์ด์šฉํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ œ๊ณต
• ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ•  ์ˆ˜ ์—†๋Š” ์ผ ๋•Œ๋ฌธ์— ๋„ค์ดํ‹ฐ๋ธŒ์™€ ์—ฐ๋™ํ•˜๋Š” ๊ธฐ์ˆ  ํ•„์š”: Cordova๋ฅผ ์ด์šฉํ•œ Native Feature Access
•Nodejs ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœํ™˜๊ฒฝ


ํฌ๋กœ์Šคํ”Œ๋žซํผ ํ”„๋ ˆ์ž„์›Œํฌ2: React Native

์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ž‘ ๋งตํ•‘ ๋˜๊ธฐ ์œ„ํ•œ Native ์ ์ธ ์œ„์ ฏ ์กด์žฌ, ํ•ด๋‹น ์œ„์ ฏ ์‹คํ–‰์ด ๋ผ์„œ ํ™”๋ฉด์ด ์ œ๊ณต

•React.js(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋ ˆ์ž„์›Œํฌ) ๊ธฐ๋ฐ˜์˜ Mobile Cross Platform Framework
Javascript ๋กœ App ๊ฐœ๋ฐœ (์ฐธ๊ณ : ์›น์•ฑ๋ฐฉ์‹ ์•„๋‹˜! ์–ธ์–ด๊ฐ€ JS์ผ ๋ฟ์ž„)
•Runtime ์‹œ JS ๊ฐ€ Javascript Environment ์— ์˜ํ•ด ์‹คํ–‰
•Native Code ์™€ ์—ฐ๋™


ํฌ๋กœ์Šคํ”Œ๋žซํผ ํ”„๋ ˆ์ž„์›Œํฌ3: Flutter

๋„ค์ดํ‹ฐ๋ธŒ ์œ„์ ฏ์„ ์ด์šฉํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, Skia๋ฅผ ์ด์šฉํ•ด์„œ Low Level์—์„œ ์ง์ ‘ ํ™”๋ฉด์„ ๊ทธ๋ ค๋ฒ„๋ฆฌ๋Š” ํ”Œ๋žซํผ

•Dart ์–ธ์–ด๋กœ ๊ฐœ๋ฐœ
•Cross Platform ์„ ๋ชฉ์ ์ž„์œผ๋กœ Platform ์— ์ข…์†์ ์ด์ง€ ์•Š์€ ์–ธ์–ด๊ฐ€ ํ•„์š”ํ–ˆ๊ณ  ๊ทธ๋กœ ์ธํ•ด Dart ์ฑ„ํƒ.
•Runtime ์‹œ Skia ๋ฅผ ์ด์šฉํ•ด ํ™”๋ฉด ์ถœ๋ ฅ


 

2๊ฐ•. ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ๊ฐœ๋ฐœ

 


Android

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

์ฒ˜์Œ์—” Java๋งŒ ์ œ๊ณตํ–ˆ์œผ๋‚˜, 2017๋…„๋„ ๊ตฌ๊ธ€์—์„œ Kotlin์„ ๊ณต์‹ ์–ธ์–ด๋กœ ์ง€์ • (๊ฐœ๋ฐœ์ž์˜ ์ทจ์‚ฌ ์„ ํƒ)
Kotlin: IntelliJ๋ผ๊ณ  ํ•˜๋Š” IDE๋ฅผ ๋งŒ๋“  JetBrains ์—์„œ ๋งŒ๋“  ์†Œํ”„ํŠธ์›จ์–ด ์–ธ์–ด (2011๋…„๋„)

1. ์ž๋ฐ”๋กœ ๋งŒ์•ฝ์— ์•ฑ์„ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜๋ฉด ์†Œ์ŠคํŒŒ์ผ(ํ…์ŠคํŠธํŒŒ์ผ) ~.java๊ฐ€ ์ƒ๊น€
์ด๊ฑธ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„  ์ปดํŒŒ์ผ์ด๋ผ๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋˜๊ณ , ์ž๋ฐ”๊ฐ€ ์ปดํŒŒ์ผ ๋˜๋ฉด ~.class๊ฐ€ ๋งŒ๋“ค์–ด์ง
์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ํด๋ž˜์Šค ํŒŒ์ผ์„ JVM์ด๋ผ๊ณ  ํ•˜๋Š” ์ž๋ฐ” ๋ฒ„์ถ”์–ผ๋จธ์‹ ์— ์˜ํ•ด ์‹คํ–‰ ๋จ
-> ์ž๋ฐ”์˜ ์‹คํ–‰ํ™˜๊ฒฝ์„ JVM์ด ์ œ๊ณตํ•ด ์ฃผ๋Š” ๊ฒƒ

2. ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜๋ฉด ์†Œ์ŠคํŒŒ์ผ์ด ~.kt ๊ฐ€ ์ƒ๊น€
์ปดํŒŒ์ผ ์‹œ์ผœ์„œ ๋Œ๋ ค์ค˜์•ผ ํ•˜๋Š”๋ฐ, ์ฝ”ํ‹€๋ฆฐ์€ ๋…์ž ์‹คํ–‰ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ
์ปดํŒŒ์ผํ•˜๋ฉด ์ž๋ฐ”์˜ ํด๋ž˜์Šค์ธ ~.class๊ฐ€ ๋˜์–ด JVM ํ™˜๊ฒฝ์œผ๋กœ ๋–จ์–ด์ง.
์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ฝ”ํ‹€๋ฆฐ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋‹ค๋ฅด์ง€๋งŒ, ๊ฒฐ๊ตญ ์‹คํ–‰ํ™˜๊ฒฝ์„ JVM์ด ์ œ๊ณตํ•ด ์คŒ = JVM๋ฒ ์ด์Šค์˜ ์–ธ์–ด

๊ฒฐ๊ตญ 1(์ž๋ฐ”)์™€ 2(์ฝ”ํ‹€๋ฆฐ)์€ ๋˜‘๊ฐ™์ด JVM๋ฒ ์ด์Šค์˜ ์–ธ์–ด
๊ฐœ๋ฐœํŒ€์ด ๋ˆ„๊ตฐ๊ฐ€๋Š” ์ž๋ฐ”๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐœ๋ฐœ์„ ํ•˜๊ณ , ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ๋ˆ„๊ตฐ๊ฐ€๋Š” ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒŒ ๊ฐ€๋Šฅํ•œ๊ฐ€?

-> ๊ฐ€๋Šฅํ•˜๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ์–ธ์–ด์™€ ๋ฌธ๋ฒ•์— ์ฐจ์ด๊ฐ€ ์žˆ๋Š”๊ฒƒ์ด์ง€, ์–ด์จŒ๋“  ๋Ÿฐํƒ€์ž„์€ JVM์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค๋ณด๋‹ˆ
์ž๋ฐ”๋กœ ๋งŒ๋“  ์ฝ”๋“œ ๋‚ด์—์„œ ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ๋งŒ๋“  ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฐ˜๋Œ€๋„ ๊ฐ™์Œ
์•ฑ ๊ฐœ๋ฐœ์˜ ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ๋ดค์„ ๋•Œ ์ด๋ฏธ ์ž๋ฐ”๋กœ ๋งŒ๋“ค์–ด์ง„ ์•ฑ์—์„œ ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ!

์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ๊ฐœ๋ฐœํ•  ๋•Œ ์ˆ˜๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ,API,์˜คํ”ˆ์†Œ์Šค ํ™œ์šฉํ•ด์„œ ๊ฐœ๋ฐœ์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ
ํ”Œ๋žซํผ์—์„œ ์ œ๊ณต๋˜๋Š” API๊ฐ€ ์ž๋ฐ”๊ณ , ์˜คํ”ˆ์†Œ์Šค๊ฐ€ ์ž๋ฐ”์ธ๋ฐ ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ์•ฑ ๊ฐœ๋ฐœ๋„ ์–ผ๋งˆ๋“ ์ง€ ๊ฐ€๋Šฅํ•˜๋‹ค.


Platform Architecture

์ƒ์‹์„ ์—์„œ '์•ˆ๋“œ๋กœ์ด๋“œ ํ”Œ๋žซํผ์ด ์„ค๊ณ„๋œ ๊ตฌ์กฐ๋Š” ์ด๋ ‡๊ตฌ๋‚˜' ์ •๋„ ์ดํ•ด๋งŒ ํ•˜๋ฉด ๋จ
- ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ฐ˜ OS - Linux Kernel
- ์•ˆ๋“œ๋กœ์ด๋“œ ๋ฒ„์ถ”์–ผ๋จธ์‹  ART(android runtime)
- ์ด ๋ฒ„์ถ”์–ผ๋จธ์‹ ์—์„œ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š” ์˜จ๊ฐ– ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ = ํ”Œ๋žซํผ์—์„œ ์ œ๊ณต๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜น์€ API, Java API Framework 

์ฐธ๊ณ : ART๋ž‘ JVM์ด ๋ญ” ์ฐจ์ด๋ƒ. ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ์‹คํ–‰์„ ํ•  ๋•Œ๋Š” JVM์„ ์“ฐ์ง€๋งŒ, ์•ฑ์„ ๋งŒ๋“ค์–ด์„œ ๋ฐฐํฌํ•  ๋•Œ๋Š” ํด๋ž˜์Šค ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ ์ง์ ‘ ๋ฐฐํฌํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, class -> dex๋ผ๋Š” ํŒŒ์ผ ํฌ๋งท์œผ๋กœ ๋ณ€ํ˜•๋˜์–ด์„œ ์•ฑ์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋จ.
์ด dex๋ผ๋Š” ํŒŒ์ผ ํฌ๋งท์„ ํ•ด์„ํ•ด์„œ ๋Œ๋ ค์ฃผ๋Š” ๊ฑด ART๋ผ๋Š” ๋ฒ„์ถ”์–ผ ๋จธ์‹ .


Android Version

์•ˆ๋“œ๋กœ์ด๋“œ ๋ฒ„์ „(OS๋ฒ„์ „) ์ฝ”๋“œ๋„ค์ž„ API Level ๋‚ ์งœ
Android 5.x Lollipop 21~22 2014๋…„
Android 6.x Marshmallow 23 2015๋…„
Android 7.x Nougat 24~25 2016๋…„
Android 8.x Orao 26~27 2017๋…„
Android 9.0 Pie 28 2018๋…„
Android 10 Q 29 2019๋…„
Android 11 R 30 2020๋…„
Android 12 S 31 2021๋…„
Android 13 Tiramisu 33 2022๋…„
Android 14 Upside Down Cake 34 2023๋…„

 

๊ฐœ๋ฐœ์ž๋Š” ๋ณดํ†ต API Level๋กœ ๋ฒ„์ „์„ ์–˜๊ธฐํ•จ
์‹ฌํ•˜๋ฉด ์ฝ”๋“œ ๋‚ด์—์„œ ๋ฒ„์ „ ๊ฐ€์ง€๊ณ  if๋ฌธ์„ ๊ฑฐ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋Š”๋ฐ, if๋ฌธ ์•ˆ์—์„œ ๋ช…์‹œํ•  ๋•Œ๋Š” API๋ ˆ๋ฒจ๋กœ ๋ช…์‹œํ•˜๊ธฐ ๋•Œ๋ฌธ.

๋ฐ˜์‘ํ˜•
 ๐Ÿ’ฌ C O M M E N T