네이티브 애플리케이션과 웹 애플리케이션
플랫폼의 파편화
애플리케이션 개발자들이 겪는 고충이 있다.
플랫폼이란 프로그래밍에서는 프로그램이 실행되는 하드웨어, 소프트웨어 환경을 말한다.
예를 들어, 애플리케이션은 운영 체제가 제공해 주는 환경 그 위에서 실행된다.
그렇다면 애플리케이션의 플랫폼은 운영 체제인 것이다.
그리고 운영 체제도 소프트웨어 인데
이 운영 체제는 CPU 같은 여러 하드웨어를 사용해서 그 위에서 동작한다.
그렇다면 운영 체제의 플랫폼은 하드 웨어인 것이다.
프로그램을 만들 때는 항상 플랫폼을 고려해서 맞춤형으로 딱 맞게 만들어줘야 한다.
플랫폼이 맞지 않으면 아예 실행되지 않는다.
이렇게 프로그램을 만들 때든 실행할 때든 플랫폼의 영향을 받게 된다.
이것을 '플랫폼 의존성' 이라고 한다.
플랫폼 의존성 때문에 프로그램을 만들 때는 플랫폼의 개수 만큼 만들어 줘야 한다.
플랫폼 의존성은 애플리케이션에서 가장 골치 아파진다.
모든 플랫폼을 맞추기 위해 모든 인적자원과 개발환경, 장비와 기술을 가지고 있어야 비로소 하나의 앱을 런칭할 수 있는 것이다.앱을 하나 출시하기가 너무나도 어려운 것이다.
유지보수 비용 또한 많이 든다.
실제로 이런 문제 때문에 특정 플랫폼을 아예 포기하고 일부 플랫폼만 지원하는 경우도 많다.
이게 플랫폼 의존성의 고충이다.
이런 상황을 보고 '플랫폼이 파편화되었다.' 이렇게 말하기도 한다.
표준의 필요성
플랫폼 파편화 문제는 최근의 문제가 아니다.
이 문제를 해결하기 위해서 나타난 개념이 표준(상호간의 약속) 이다.
규칙들을 정해놓고 서로 이것을 지키자는 하나의 약속이다.
소프트웨어에 있어서의 플랫폼 파편화도 이런 방식으로 해결 가능하다.
크로스 플랫폼1 : 가상머신
개발을 하다보면 플랫폼 파편화 문제를 겪게 된다 했는데
이것을 해결하기 위해 나온 개념이 '크로스 플랫폼' 이다.
크로스 플랫폼이란 여러 OS, CPU 등에서 동일하게 실행할 수 있는 환경을 말한다.
크로스 플랫폼은 플랫폼 파편화의 문제를 해결하기 위해 나온 개념으로,
하나의 프로그램만으로 여러 플랫폼에서 실행 할 수 있는 것을 의미한다.
요즘은 우리가 워낙 다양한 플랫폼을 사용하고 있고,
원하는 애플리케이션도 워낙 다양하니까 크로스 플랫폼이 매우 중요해졌다고 할 수 있다.
크로스 플랫폼은 다양한 플랫폼 위에 소프트웨어로 만든 또 하나의 가상컴퓨터를 실행시켜서
다양한 플랫폼을 마치 하나의 컴퓨터처럼 만드는 것이다.
크로스 플랫폼의 원리를 알아보면
컴퓨터 마다 프로그램의 실행 방식이 다르기 때문에 항상 여러 버전의 프로그램을 만들었어야 했는데
이 문제를 해결하기 위해 가상의 플랫폼 가상의 컴퓨터를 만들었다.
개발자들은 이 가상의 컴퓨터에 맞춰서 프로그램을 개발하면 된다.
이것을 시도한 언어가 JAVA 이고 그 가상의 컴퓨터가 JVM 이다.
JVM의 의미를 살펴보면 JAVA Virtual Machine 자바를 이용한 가상의 컴퓨터 정도로 이해하면 된다.
즉 모든 플랫폼에 대해 각각 프로그램을 만드는게 아니라 JAVA 가상 머신에서 동작하는 단 한개의 프로그램만 작성한다.
그리고 JVM은 JAVA로 쓰여진 프로그램이 들어오길 기다리는 것이다.
상호 간의 약속, 규격을 통해 플랫폼 의존성 문제를 해결했다.
자바는 다양한 플랫폼에 이식성이 좋고 범용적으로 사용할 수 있기 때문에 지금의 인기를 얻게 된것이다.
크로스 플랫폼2 : 웹
JAVA가 JVM을 통해 플랫폼 의존성 문제를 해결할 수 있었던 건 표준이 있었기 때문이다.
이런 방식으로 소프트웨어 규격을 정하고 모든 환경에서 동일하게 사용할 수 있도록 만든 것이 또 있다.
바로 웹이다.
자바로 작성하고 JVM으로 실행 한 것처럼
웹의 경우 HTML 이나 JavaScript 같은 웹 언어로 페이지를 작성하고 웹 브라우저로 실행한다.
JVM과 비슷한 역할을 웹브라우저가 하고 있는 것이다.
웹 개발자들은 웹의 규격에 맞춰서 웹 페이지를 코딩하고
웹 브라우저도 웹 규격에 맞춰서 만들면 양쪽이 맞아떨어져서
웹 개발자들의 코드가 작성한 의도대로 브라우저를 통해 실제 사용자들에게 보이게 된다.
웹은 더 간편하게 크로스 플랫폼을 만들 수 있다.
이런것을 반응형 웹 디자인 이라고 한다.
이렇게 좀 더 간단하게 크로스 플랫폼을 구현할 수 있다는게 웹의 장점 이다.
웹의 또 하나의 큰 장점이 있다.
JVM은 자바 언어에 국한된 규격이 었지만 웹은 이 규격이 더 나아가서 국제 표준화 기구인 ISO에 등록되어 있다.
이것을 '웹표준'이라고 부른다.
국제적 표준이 있고 웹의 활용도도 높다보니 아예 모든 것을 웹 기술로 만들어 버리자는 그런 움직임도 생겨나고 있다.
그 중에서도 특히 웹 어디든 들어가는 JavaScript가 대새 언어로 떠오르게 되었다.
개발을 하다보면 JS 라는 표현을 상당히 많이 접할 수 있는데 이 JS가 JavsScript를 의미한다.
이렇게 JavaScript가 많이 쓰이다 보니 웹을 넘어서 다른 것들도 JavaScript로 만들기도 한다.
"자바스크립트로 작성될 수 있는 모든 애플리케이션은 결국 자바스크립트로 작성될 것이다."
최근에는 과거보다 더 크로스 플랫폼의 구현 방식으로 웹이 더 각광받고 있기 때문이다.
웹이 완벽한 크로스 플랫폼을 완성하기 위해 넘어야 할 산이 있는데 즉 웹의 단점은
바로 브라우저 호환성 문제이다.
웹 사이트는 브라우저에 따라서 코드가 다르게 동작하기 때문에 브라우저에 따라 문제가 생길 수도 있다.
이런 것들을 방지하기 위해서 버전이 낮거나, 웹 표준을 지키지 않은 브라우저 보다
웹 표준을 잘 준수한 브라우저 사용을 권장하는 것이다.
브라우저는 여러 회사에서 만드는데 모든 브라우저들이 웹 표준을 100% 정확하게 지키면 좋겠지만 그렇지 않은 경우가 있다.
웹 표준의 내용이 계속 사용자들의 수요나 환경에 따라 업그레이드 되다 보니 브라우저의 웹 표준 내용을 반영하는 게
늦거나 되지 않는 경우도 있고, 다른 브라우저와의 차별점을 위해 일부러 다르게 만들기도 한다.
브라우저의 종류 혹은 버전마다 지원되는 기능에 차이가 있어서 얼마나 웹 표준을 잘 지원하는지를 점수로 만들기도 한다.
플랫폼이 파편화된 만큼은 아니지만 브라우저에서도 어떤 브라우저를 쓰느냐
버전이 몇이냐에 따라 동작의 차이가 발생하기 때문에 이 부분이 잘 보완되어야
웹이 완벽한 크로스 플랫폼이 될 수 있다.
네이티브 애플리케이션과 웹 애플리케이션
웹의 시장 장악력은 점점 증가하고 있다.
사실 웹이 일반 애플리케이션 처럼 동작할 수 있는 것이다.
웹을 활용해서 애플리케이션 처럼 동작하는 것을 '웹 애플리케이션' 이라고 한다.
그리고 웹 애플리케이션과 구분하기 위해
기기의 OS에서 바로 실행할 수 있는 애플리케이션을 '네이티브 애플리케이션' 이라고 부른다.
웹 애플리케이션은 브라우져를 거쳐서 OS에 맞닿아있고
네이티브 애플리케이션은 바로 OS에 맞닿아 있다.
참고로 브라우저도 하나의 네이티브 애플리케이션인 셈이다.
정리하면 앱을 사용자에게 쓰게 하려면 네이티브 애플리케이션과 웹 애플리케이션 두 가지 방식이 있는 것이다.
각각 장단점이 있는데
기기에서 바로 실행하는 네이티브 애플리케이션의 경우 OS와 기기에 내장된 여러 기능을 더 쉽게 활용 가능하다.
OS에 바로 맞닿아 있기 때문이다.
그리고 다운받아서 내 컴퓨터에 설치해 두기 때문에 인터넷 연결 없어도 실행 가능하다.
하지만 단점도 있다.
설치 또는 배포 라는 과정을 반드시 거쳐야 한다는 점이다.
웹 애플리케이션에서는 설치 혹은 배포 라는 과정이 없기 때문에 이런 단점이 해결된다.
웹 페이지처럼 주소만 입력하면 바로 접근이 가능하고 수정 사항이 있어도 실기간으로 반영된다.
접근성이 더 좋은 것이다.
링크로 웹을 공유할 수 도 있다.
비록 기기를 사용하는 기능에는 제한 사항이 있다.
그래서 간단한 기능만으로 이루어진 서비스는 굳이 네이티브 앱을 만들지 않고 웹 앱으로 서비스 하는 경우가 많다.
웹 앱은 적은 투자와 노력으로 서비스를 런칭하고 싶은 회사들의 대안이 되고 있다.
웹을 활용하는 여러 가지 방법
웹의 기술이 발전하고 활용 가능성이 더 많아지면서 웹을 활용한 다양한 방식의 응용이 나타나고 있다.
첫 번째로 '싱글 페이지 애플리케이션(Single-page Application)' 이다.
싱글 페이지 의미는 하나의 페이지 하는 의미인데
어떤 웹 사이트를 보면 여러 개의 페이지가 있고 버튼을 클릭함에 따라 다른 페이지로 이동하는 식으로 사용된다.
일반적인 이런 웹사이트와 다르게 싱글 페이지 애플리케이션은 하나의 페이지가 있는데
버튼을 클릭하면 내용만 그 자리에 갈아 끼워지는 방식이다.
페이지 이동이 없으니까 웹 사이트가 아니라 애플리케이션처럼 느껴지게 된다.
예시로는 페이스북, 트위터, G메일, 구글맵 같은 것들이 있다.
두 번째로는 '하이브리드 웹 애플리케이션(Hybrid Web Application)' 이다.
일반적인 네이티브 애플리케이션의 일부를 웹 사이트로 대체하는 것을 말한다.
예를 들어 애플리케이션에 광고를 달고 싶다라고 할 때,
이런 경우 애플리케이션에서 자주 바꾸고 싶은 부분에 구멍을 뚫어 두고
그 위치에 웹 페이지 주소를 적어 두는 것이다.
그리고 사용자가 볼 때 그 구멍에 작은 웹 페이지를 보여주면 된다.
만약 이 웹 페이지의 보여주고 싶은 내용을 바꾸고 싶다면 실시간으로 반영 가능하다.
즉 사용자가 직접 애플리케이션을 업데이트 하지 않아도 된다.
이 방법은 정해진 특정 공간만 내용을 바꿀 수 있다는 단점이 있지만 여러 경우에 꽤나 유용하게 활용할 수 있다.
세 번째는 '프로그레시브 웹 애플리케이션(Progressive Web Application)' 이다.
웹 애플리케이션의 장점과 네이티브 애플리케이션의 장점을 합치려는 시도가 PWA 이다.
일반적인 웹 애플리케이션은 앱 스토어를 거쳐서 설치하지 않고도
매우 간편하게 실행가능하고 주소만 입력하면 접근 가능하다.
또한 사용자에게 실시간 업데이트해 줄 수 있다는 장점이 있다.
네이티브 앱은 이러한 장점은 없는 대신 인터넷 없이도 실행이 되고 OS가 제공해 주는 기능이 사용 가능하다.
웹 애플리케이션에 네이티브 애플리케이션의 기능까지 추가해서
네이티브 애플리케이션과 사실상 차이를 못 느끼게 하려는 것이 PWA 이다.
위 이미지에 해당되는 아래의 요소들을 많이 만족하면 PWA 이다.
웹을 더 애플리케이션처럼 만드는 세 가지 방식을 살펴봤다.
이런 다양한 응용 가능성이 있기 때문에 많은 사업과 서비스가 웹을 기반으로 하고 있다.
'컴퓨터 개론' 카테고리의 다른 글
Codeit_컴퓨터개론을 완강하고 ;) (0) | 2021.06.28 |
---|---|
Codeit_운영 체제 (0) | 2021.06.23 |
Codeit_컴파일러와 인터프리터 (0) | 2021.06.21 |
Codeit_트렌드를 읽는 능력 (0) | 2021.06.21 |
Codeit_개발자의 필수 프로그램 IDE (0) | 2021.06.21 |