소프트웨어 이해하기 3

타키탸키·2021년 1월 4일
1

컴퓨터 개론

목록 보기
9/9

소프트웨어 이해하기 마지막 시간입니다.

이번 시간에는 지금까지 배운 내용을 바탕으로 다시 처음으로 돌아가서 애플리케이션에 대해 더 자세히 배워보겠습니다.

🧮 플랫폼 파편화

플랫폼(Platform)의 사전적 정의는 기차나 전철 등의 승강장을 말하는데요. 프로그래밍에서 플랫폼은 프로그램이 실행되는 하드웨어와 소프트웨어의 환경을 말합니다.

앞서 애플리케이션이 운영체제가 제공하는 환경에서 실행된다고 배웠었죠? 따라서, 운영체제는 애플리케이션의 플랫폼이라고 할 수 있습니다. 운영체제도 소프트웨어의 일종이기 때문에 운영체제의 실행을 돕는 플랫폼이 있습니다. CPU와 같은 하드웨어가 바로 운영체제의 플랫폼입니다.

프로그램을 개발할 때는 항상 플랫폼을 고려해서 맞춤형으로 만들어야 합니다. 플랫폼이 맞지 않으면 실행 자체가 되지 않기 때문이죠. 그렇기 때문에 하나의 OS를 위해 만든 애플리케이션은 다른 애플리케이션에서 실행할 수 없습니다. 애플리케이션을 다운로드할 때, 윈도우용 프로그램과 맥용 프로그램이 나눠져 있는 이유가 바로 이 때문입니다. CPU 종류마다 머신코드가 다르기도 하죠.

이처럼 프로그램을 만들 때든, 실행할 때든 플랫폼의 영향을 받는 것플랫폼 의존성(Platfrom Dependency)이라고 합니다. 이러한 이유로 프로그램을 개발할 때는 플랫폼의 개수만큼 만들어야 합니다.

단계가 올라갈수록 이 문제는 더 복잡해집니다. 가장 위에 존재하는 애플리케이션 제작이 특히 그렇습니다. 운영체제를 만들 때는 CPU를 고려해야 합니다. 애플리케이션의 경우 운영체제와 CPU도 모두 고려해야 하죠. 이것이 바로 애플리케이션 개발자가 겪는 고충입니다.

모바일의 경우를 예로 들어 봅시다. iOS에는 아이폰과 아이패드가 있고 그 안에서도 1세대, 2세대 등 여러 버젼이 존재합니다. 안드로이드는 훨씬 더 다양한데요. 다양한 제조사에 따른, 다양한 기기와 그 버젼까지 고려할 게 너무 많습니다. 이 모두가 다 다른 플랫폼인데 이 많은 조건을 충족하는 애플리케이션을 개발하기란 쉽지 않을 겁니다.

일단 안드로이드 개발자, 아이폰 개발자를 모두 데리고 있어야 하고 각 휴대폰 버젼과 OS에 대해 다 다른 프로그램을 만들어야 하니까요. 그리고 프로그램을 만들기 위한 개발 환경도 각 플랫폼마다 따로따로 만들고 관리해야 합니다. 결과물을 테스트하기 위해서는 모든 휴대폰 모델을 다 가지고 있어야겠죠?

뿐만 아니라 출시 이후에도 수정이 필요할 경우 모든 모델에서 다 실행해 봐야 합니다. 마켓에 버젼별 배포를 올리는 것도 일일히 해야 될 거구요.

모든 인적 자원과 개발 환경, 장비, 기술을 가지고 있어야 가능한 일이라면 하나의 애플리케이션을 개발하는 일은 현실적으로 불가능해 보입니다. 실제로 이런 문제 때문에 특정 플랫폼을 아예 포기하고 일부 플랫폼만 지원하는 경우가 많습니다.

이러한 복잡한 상황을 두고 플랫폼의 파편화라고 합니다. 이 문제 역시 개발자들에 의해 해결이 됐는데요. 어떻게 극복했는지 한 번 알아볼까요?

🧮 표준의 필요성

플랫폼 표준화는 애플리케이션에 국한된 문제가 아닙니다.

유선 이어폰의 경우를 생각해봅시다. 만약 특정 휴대폰에 특정 이어폰만을 사용해야 한다면 둘 중 하나를 바꿀 경우 제약이 생길 것입니다. 이어폰의 종류가 다양하다고 해서 휴대폰 회사가 모든 이어폰의 단자를 고려하여 제품을 생산하는 것은 불가능합니다. 이는 이어폰 회사도 마찬가지 문제입니다.

이처럼 플랫폼의 문제는 늘 있었습니다. 그리고 이러한 문제를 해결하기 위해 표준이라는 개념이 나타났습니다. 표준은 규칙에 대한 상호 간의 약속입니다. 단일한 규칙에 맞춰 제품을 생산하면 굳이 매번 다른 제품을 생산할 필요가 없게 되는 것이죠.

이어폰 단자 외에도 블루투스, USB, HDMI 등 다양한 곳에서 표준을 정하고 있습니다.

🧮 크로스 플랫폼 1 - 가상 머신

소프트웨어의 플랫폼 파편화 문제 또한 표준으로 해결할 수 있습니다. 소프트웨어 개발 분야에서 표준의 역할을 하는 크로스 플랫폼을 사용하는 것이죠. 크로스 플랫폼이란, 여러 OS, CPU 등에서 동일하게 실행할 수 있는 환경을 말합니다. 다양한 플랫폼과 어플리케이션이 존재하는 만큼 현대에는 크로스 플랫폼의 역할이 매우 중요해졌습니다. 크로스 플랫폼의 원리에 대해 알아볼까요?

컴퓨터마다 실행 방식이 달랐기 때문에 개발자들은 가상의 컴퓨터를 만들었습니다. 다양한 플랫폼에 가상의 컴퓨터를 켜 놓으면 마치 동일한 컴퓨터에서 실행하는 것처럼 느껴지는 것이죠. 따라서, 애플리케이션 개발자들은 서로 다른 버젼을 만들 필요없이 가상의 컴퓨터에서 실행될 수 있는 프로그램 하나만 개발하면 됩니다. 이는 모니터 선의 연결이 맞지 않을 때, 어댑터를 꽂는 것과 같은 원리입니다.

이 방식을 제일 처음 시도한 것이 JAVA이고, JAVA가 사용한 가상의 컴퓨터가 JVM입니다. JVM을 풀어 쓴 것이 바로 Java Virtual Machin 즉, 자바를 이용한 가상의 컴퓨터입니다. JAVA의 슬로건인 'Write once, run anywhere'를 실행한 좋은 사례라고 할 수 있네요. 모든 플랫폼에 맞는 각각의 프로그램을 만드는 것이 아니라 JAVA 가상 머신에서 동작하는 단 한 개의 JAVA 프로그램만 만들면 되니까요.

이렇게 등장한 JAVA는 실제로 다양한 산업 분야에서 활용되고 있는데요. 이식성과 범용성이 좋기 때문입니다.

이처럼 가상의 컴퓨터는 사전에 들어올 것이라고 약속된 프로그램을 예상하며 동작합니다. 상호 간의 약속, 표준을 통해 플랫폼 의존성의 문제를 해결한 것이죠.

🧮 크로스 플랫폼 2 - 웹

JVM과 같이 소프트웨어 규격을 정하고 모든 환경에서 동일하게 사용할 수 있도록 만든 또 다른 사례가 있습니다. 바로 웹(WEB)입니다.

HTML이나 JavaScript 같은 웹 언어로 페이지를 작성하고 인터넷 익스플로러와 같은 브라우저로 실행합니다. 웹 브라우저가 JVM과 유사한 역할을 하고 있는 것이죠.

웹 규격에 맞춰 웹 페이지와 웹 브라우저를 만들면 웹 개발자들의 의도대로 완성된 웹 페이지가 브라우저를 통해 실제 사용자들에게 보여집니다.

휴대폰, 컴퓨터, 노트북 다양한 기기에는 웹 브라우저가 기본으로 깔려있어 별도 애플리케이션을 추가로 설치하지 않아도 인터넷만 연결되어 있으면 주소를 통해 웹 사이트에 접속할 수 있습니다. 접근성이 높고 간편하죠.

15인치 노트북과 스마트폰은 서로 다른 크기를 가지고 있습니다. 그럼에도 우리는 기기에 따라 최적화된 모습의 웹 페이지를 볼 수 있는데요. 사이즈에 맞게 최적화 되도록 프로그래밍 되었기 때문입니다. 이처럼 웹은 더 간편하게 크로스 플랫폼을 만들 수 있다는 장점이 있습니다. 이를 반응형 웹 디자인이라고 합니다.

웹이 지닌 또 하나의 큰 장점이 있는데요. 웹 규격은 국제 표준화 기구인 ISO에 등록되어 있습니다. 이를 웹 표준이라 합니다. 웹의 활용도가 높아진만큼 아예 모든 걸 웹 기술로 만들어 버리자는 움직임도 있습니다. 웹을 만들 수 있는 JavaScript도 덩달아 인기를 얻고 있죠.

개발을 하다보면 JS라는 단어를 자주 만날 텐데요. JS가 바로 JavaScript의 약어입니다. JS가 들어가지 않아도 JavaScript와 관련된 기술들이 많이 있습니다.

JavaScript가 많이 쓰이면서 웹 외에 다른 것들도 JS로 만들어지기 시작했습니다. Stackoverflow의 공동창립자이자 개발자인 제프 앳우드는 이런 말을 했습니다. "자바스크립트로 작성될 수 있는 모든 애플리케이션은 결국 자바스크립트로 작성될 것입니다." 이를 제프 앳우드 법칙이라고 부릅니다. 과거보다 더 크로스 플랫폼으로 애플리케이션이 각광 받는 현재, 제프 앳우드 법칙이 실현되고 있습니다.

웹이 완벽한 크로스 플랫폼을 완성하기 위해 넘어야 할 산이 있는데요. 바로 브라우저 호환성 문제입니다. 웹 사이트는 브라우저에 따라 코드가 다르게 동작하기 때문에 버젼이 낮거나 웹 표준을 지키지 않은 브라우저에서는 페이지를 원활히 실행할 수 없습니다. 버젼이 높은 브라우저를 권장하는 이유이죠.

브라우저는 여러 회사에서 만들어지고 있습니다. 모든 브라우저들이 웹 표준을 100% 지키면 좋겠지면 그렇지 않은 경우가 있는데요. 웹 표준의 내용이 사용자들의 수요나 환경에 따라 업그레이드되다 보니 바뀐 내용을 반영하는 게 늦어지거나 되지 않는 경우가 있고 다른 브라우저와의 차별점을 위해 일부러 다르게 만들기도 합니다. 따라서, 특정 사이트가 특정 브라우저에서 의도와 다른 모습으로 실행되곤 합니다.

브라우저의 종류 혹은 버젼마다 지원되는 기능에 차이가 있다보니 웹 표준을 얼마나 잘 지원하는지를 점수로 만들기도 했는데요. 현재는 크롬이 전체 브라우저 중에 가장 높은 점수를 받고 있습니다.

플랫폼 파편화 정도는 아니지만 웹이 완벽한 크로스 플랫폼이 되려면 상호 간의 약속인 웹 표준을 잘 따라야겠죠?

🧮 네이티브 애플리케이션과 웹 애플리케이션

웹의 장악력은 점점 증가하고 있습니다. 웹 기술이 발전하면서 단순한 웹 페이지를 넘어 다양한 기능을 동작할 수 있게 되었습니다. 웹을 통해 영화를 예매하거나 옷을 사거나 지도를 보는 등 사실상 일반 애플리케이션과 같이 동작하고 있습니다. 이를 웹 애플리케이션이라고 합니다.

웹 애플리케이션과 구분하여 기기의 OS에서 바로 실행할 수 있는 애플리케이션네이티브 애플리케이션이라고 부릅니다. 겉으로 보기에 둘 다 똑같이 보이지만 실행 방식에 있어 차이가 있습니다.

브라우저를 거쳐 OS에 맞닿아 있는 웹 애플리케이션과 달리 네이티브 애플리케이션은 바로 OS에 맞닿아 있습니다. 사실상 브라우저도 네이티브 애플리케이션이라 할 수 있겠네요. 사용자가 애플리케이션을 사용하기 위한 두 가지 방식이 있고 각자 장단점이 있습니다.

네이티브 애플리케이션을 사용하면 OS와 기기에 내장된 여러 기능을 더 쉽게 활용할 수 있고 컴퓨터에 설치하기 때문에 인터넷 연결 없이도 실행이 가능합니다. 그러나 설치와 배포의 과정을 무조건 거쳐야 한다는 불편함이 있습니다. 앞서 버젼을 수정할 때 배포를 새로 해야 한다고 배웠었죠? 이처럼 네이티브 애플리케이션은 수정과 배포, 심지어 마켓에 등록하는 데에 시간이 소요된다는 단점이 있습니다.

반면, 애플리케이션에서는 설치와 배포 과정이 없어 주소만 입력하면 바로 접근이 가능하고 수정 사항도 실시간으로 반영할 수 있어 접근성이 더 좋습니다. 링크로 웹을 공유하는 것도 가능하죠. 따라서, 간단한 기능만으로 이루어진 서비스는 굳이 네이티브 애플리케이션을 만들지 않고 웹으로만 서비스하는 경우가 많습니다. 적은 투자와 노력으로도 서비스 런칭이 가능하기 때문에 현재 많은 회사에서 선호하는 방식입니다.

🧮 웹을 활용하는 다양한 방법

웹 기술이 발전한만큼 웹을 활용한 다양한 응용이 가능해졌습니다.

❗ 웹을 활용하는 첫번째 방법은 싱글 페이지(Single-page) 애플리케이션입니다. 싱글페이지는 말그대로 하나의 페이지를 말하는데요. 일반적인 웹 페이지는 버튼을 클릭함에 따라 다른 페이지로 넘어가는 방식을 사용합니다. 그러나 싱글 페이지 애플리케이션의 경우 단일한 페이지에서 버튼을 클릭하면 그 자리에서 내용만 바뀝니다. 페이지 이동이 없으니 웹 사이트가 아니라 애플리케이션처럼 느껴집니다. 싱글 페이지 애플리케이션의 대표적인 예는 페이스북, Gmail, 구글 맵 등이 있습니다.

❗ 두번째는 하이브리드(Hybrid) 웹 애플리케이션입니다. 하이브리드 웹 애플리케이션이란, 네이티브 애플리케이션의 일부를 웹 사이트로 대체하는 것을 말합니다.

예를 들어 애플리케이션 안에 광고를 달고 싶다면 애플리케이션을 다운 받을 때 광고에 사용되는 이미지를 함께 다운 받아야겠죠? 그런데 시간이 지나 새로운 광고로 바꾸려고 하면 사용자가 앱을 새로 다운 받아야 하는데 광고 때문에 업데이트를 하는 사용자는 아마 없을 겁니다.

이런 경우 애플리케이션에서 자주 바꿔야 하는 부분에 빈 공간을 두고 그 위치에 웹 페이지 주소를 적어둡니다. 사용자는 그 공간에서 작은 웹 페이지를 볼 수 있게 됩니다. 만약 광고를 바꾸게 된다면 그 결과가 실시간으로 반영됩니다.

❗ 마지막으로 프로그레시브(Progressive) 웹 애플리케이션(PWA)이 있습니다. 웹 애플리케이션과 네이티브 애플리케이션의 장점만을 합친 결과물입니다.

즉, 웹 애플리케이션의 설치 없이 실행 가능, 주소만 입력하면 접근 가능, 실시간 업데이트라는 장점과 네이티브 애플리케이션의 인터넷 없이 실행 가능, OS 기능 사용 가능이라는 장점을 결합한 애플리케이션입니다.

웹 애플리케이션에 네이티브 애플리케이션 기능을 넣어 사실상 네이티브 애플리케이션과 차이를 못 느끼게 하려는 시도에서 등장한 기술입니다. 현재는 인터넷이 연결되지 않은 오프라인에서 동작하고 홈 화면에 설치 가능하며 OS 기능 사용이 가능하고 앱의 내용을 실시간으로 업데이트 가능한 프로그램을 PWA라 부릅니다.

이렇게 다양한 응용으로 애플리케이션의 기능을 갖춘 웹이 등장하자 웹을 기반으로 서비스를 런칭하려는 기업들이 늘어나고 있습니다. 동시에 웹 개발자의 수요가 넘쳐나고 있죠.


지금까지 소프트웨어의 일종인 애플리케이션과 이를 구현하기 위한 컴파일러와 인터프리터, 그리고 하드웨어와의 연결을 도와주는 운영체제까지 소프트웨어의 다양한 개념들을 배웠습니다.

컴퓨터 개론 강의는 여기까지입니다. 그동안 수고 많았습니다 :)

* 이 자료는 CODEIT의 컴퓨터 개론 강의를 기반으로 작성되었습니다.
profile
There's Only One Thing To Do: Learn All We Can

0개의 댓글