IT 지식

여러 작업을 수행하는 애플리케이션

OIIUOI 2022. 9. 7. 04:31

애플리케이션은 운영체제를 플랫폼으로 삼아 작업을 수행하는 온갖 종류의 프로그램이나 소프트웨어 시스템을 총칭하는 용어다. 애플리케이션은 조그마할 수도 있고 클 수도 있다. 하나의 특정 과제에 집중할 수도 있고 폭넓은 기능을 처리할 수도 있다. 판매될 수도 있고 무료로 배포될 수도 있다. 애플리케이션의 코드는 소유권이 강하게 보호되거나, 자유롭게 사 용할 수 있는 오픈소스이거나, 사용에 아무런 제한이 없기도 한다.

 애플리케이션의 크기는 천차만별이다. 한 가지 기능만 수행하는 조그만 독립적인 프로그램부터 워드나 포토샵처럼 여러 가지 복잡한 작업을 수행하는 대형 프로그램까지 다양하다.

date 프로그램은 맥OS를 비롯한 유닉스 계열 시스템에서는 같은 방식으로 작동하고, 윈도우에서도 유사하게 작동한다. date의 구현 코드는 간단하다. 현재 날짜와 시간을 내부 형식으로 제공하는 시스템 콜(time)과 날짜를 형식화하고 텍스트를 출력하기 위한 라이브러리(각각 ctime과 printf)를 기반으로 작성되기 때문이다.

유닉스 시스템에는 디렉터리 내의 파일과 폴더를 나열하는 ls라는 프로그램이 있다. 이는 윈도우 파일 탐색기와 맥 OS 파인더 같은 프로그램과 유사하지만 골자만 남은 텍스트 전용 프로그램이다. 이외에도 파일을 복사하고, 이동하고, 이름을 바꾸는 등의 작업을 수행하는 다른 프로그램들이 있고, 파일 탐색기와 파인더에는 상응하는 기능이 그래픽으로 구현된다. 이 프로그램들도 역시 폴더 내용에 대한 기본 정보에 접근하기 위해 시스템 콜을 사용하며, 정보를 읽고 쓰고 형식화하고 화면에 표시하기 위해 라이브러리를 이용한다.

 워드 같은 애플리케이션은 파일 시스템 탐색용 프로그램보다 훨씬 더 규모가 크다. 사용자가 파일을 열고, 내용을 읽고, 파일 시스템에 문서를 저장할 수 있도록 파일 시스템 코드 일부가 분명히 포함될 것이다. 복잡한 알고리즘을 이용할 텐데, 예를 들면 텍스트가 바뀜에 따라 디스플레이를 계속해서 갱신하기 위한 알고리즘이 필요하다. 또한 정보를 화면에 표시하 고, 글자 크기, 글꼴, 색상, 레이아웃 등을 조정하는 방법을 제공하는 정교한 사용자 인터페이스를 지원한다. 워드를 비롯해서 상업적 가치가 높은 대형 프로그램은 새로운 기능이 추가되면서 지속적으로 발전한다. 워드의 소스 코드가 얼마나 큰지는 모르겠지만, C, C++와 다른 언어로 된 코드 1천만 행 정도라도 놀랍지 않을 것 같다. 특히 윈도우, 맥, 휴대전화와 브라 우저 버전의 코드까지 고려한다면 더욱 그렇다.

브라우저는 규모가 크고 무료이며 간혹 오픈소스로 개발되는 애플리케 이션으로, 어떤 측면에서는 다른 애플리케이션보다 훨씬 더 복잡하다. 여러분은 적어도 파이어폭스, 사파리 safari, 엣지나 크롬 중 한 가지는 확실히 써봤을 테고, 많은 사람들이 일상적으로 그중 몇 가지를 사용한다.

외부에서 보면 브라우저는 웹 서버에 요청을 보내고 화면에 표시할 정 보를 웹 서버에서 받아 온다. 어떤 점이 복잡한 것일까?

우선 브라우저는 비동기적asynchronous 이벤트를 처리해야 한다. 비동기적 이벤트란 예측할 수 없는 시점에 일정한 순서를 따르지 않고 발생하는 이벤트를 뜻한다. 예를 들어, 사용자가 링크를 클릭하면 브라우저는 페이 지에 대한 요청을 보내는데, 브라우저는 해당 응답을 기다리고 있을 수만 은 없다. 그 사이에 사용자가 현재 페이지를 스크롤하면 즉각 반응해야 하고, 뒤로 가기 버튼을 누르거나 다른 링크를 클릭하면 요청된 페이지가 오는 중일지라도 요청을 취소해야 한다. 사용자가 창의 모양을 바꾸면 디스플레이를 갱신해야 하고, 데이터가 오는 동안에 사용자가 이리저리 모양을 계속 바꾸면 계속해서 갱신해 줘야 한다. 페이지에 소리나 동영상이 포함돼 있다면 브라우저는 그러한 미디어의 재생도 처리해야 한다. 비동기적인 시스템을 프로그래밍하는 것은 항상 어려운데, 브라우저는 많은 비동기성을 다뤄야만 한다.

브라우저는 정적인 텍스트부터 페이지의 내용을 계속해서 바꾸려고 하는 대화형 프로그램에 이르기까지 많은 종류의 콘텐츠를 지원해야 한다. '이 중 일부는 확장 프로그램에 콘텐츠 처리를 위임할 수 있는데, PDF나

동영상 같은 표준 포맷을 처리하는 데는 이 방식이 일반적이다. 하지만 이를 위해 브라우저는 해당하는 확장 프로그램을 시작하고, 데이터 자체와 데이터에 대한 요청을 보내고 받고, 처리된 데이터를 디스플레이에 표시하기 위한 메커니즘을 제공해야 한다.

 브라우저는 여러 개의 탭과 여러 개의 창을 관리하는데, 이들 각각은 아마도 앞서 말한 작업 중 일부를 수행하고 있을 것이다. 브라우저는 수행한 작업의 이력과 함께 북마크, 즐겨찾기 등의 다른 데이터를 유지한다. 업로드, 다운로드, 이미지 캐싱을 하기 위해 로컬 파일 시스템에 접근하기도 한다. 브라우저는 여러 수준에서 기능을 확장하기 위한 플랫폼을 제공한다.

어도비 플래시 Adobe Flash 같은 플러그인, 자바스크립트용 가상 머신, 애드 블록 플러스 Adblock Plus와 고스터리 chostery 같은 애드온 프로그램 등이 확장 기능에 해당한다. 내부적으로 브라우저는 모바일 기기를 포함해서 다수 운영체제의 여러 버전에서 작동해야 한다.

이 모든 기능을 수행하기 위한 복잡한 코드를 포함하고 있기 때문에, 브라우저는 자체 구현 코드나 자신이 활성화하는 프로그램에 있는 버그를 이용한 공격에 취약하다. 사용자의 순진함, 무지함, 무분별한 행동도 브라우저가 공격을 받는 데 한몫한다. 대부분의 사용자는 무슨 일이 일어나는지 또는 어떤 위험이 있을지조차 거의 이해하지 못한다. 앞의 내용을 되짚어 보면 뭔가 떠오르지 않는가? 브라우저는 운영체제와 비슷하다. 자원을 관리하고, 동시에 일어나는 활동을 제어하고 조정한 다. 또한 다수의 출처에 정보를 저장하고 가져오며, 애플리케이션 프로그램이 실행될 수 있는 플랫폼을 제공한다.