웹 애플리케이션
이 문서의 {{#은는:내용}} 출처가 분명하지 않습니다. (2014년 3월) |
웹 애플리케이션(영어: web application), 줄여서 웹 앱(web app)은 인터넷이나 인트라넷을 통해 웹 브라우저에서 이용할 수 있는 응용 프로그램이다.
웹 애플리케이션은 클라이언트로서 웹 브라우저를 사용하는 사람이 많기 때문에 인기를 누리고 있다. 수천만 대의 PC에 굳이 소프트웨어를 배포해서 설치하지 않아도 웹 애플리케이션을 유지 관리할 수 있다는 점이 장점 중의 하나로 꼽힌다. 웹 애플리케이션은 웹 메일, 온라인 전자상거래 및 경매, 위키, 인터넷 게시판, 블로그 및 MMORPG 게임 등 다양한 기능을 구현할 수 있다.
정의
일반적으로 특정한 종류의 동적 웹 페이지와 웹 애플리케이션을 구별하는 것은 불분명하다. 웹사이트는 대개 "웹 애플리케이션"을 가리킬 가능성이 높은데, 데스크톱 응용 소프트웨어나 모바일 앱과 비슷한 기능을 갖추고 있기 때문이다. HTML5는 웹 페이지로 로드되는 애플리케이션을 만들 수 있는 명시적인 언어 지원을 도입하였으나 로컬로 데이터를 저장하여 오프라인 상태에서도 기능할 수 있다.
모바일 웹 애플리케이션
웹 애플리케이션을 만들 때 모바일 장치를 대상으로 하는 여러 방법이 있다.
- 반응형 웹 디자인
- 프로그레시브 웹 앱: 일반 웹 페이지(웹사이트) 및 모바일 앱의 하이브리드.
- 네이티브 앱 (모바일 앱)
- 하이브리드 앱: 모바일 웹 사이트를 네이티브 앱 안으로 임베드하며, 아파치 코도바와 Ionic, 또는 Appcelerator Titanium과 같은 하이브리드 프레임워크를 사용할 수 있다. 네이티브 앱의 특정 이점을 그대로 유지하면서(예: 장치 하드웨어로의 직접 접근, 오프라인 작업, 앱 스토어 표시) 웹 기술(기존 모바일 웹 사이트로부터 코드를 직접 복제할 수 있음)을 사용하여 개발할 수 있게 한다.
역사
초기의 클라이언트-서버 컴퓨팅 환경에서 각 응용 소프트웨어들은 저만의 사용자 인터페이스를 가지고 있고 사용자 PC마다 따로 설치하여야 했다. 서버 환경이 바뀌면 클라이언트 응용 프로그램도 업그레이드해야 하고 이에 따라 기술 지원 비용은 증가하고 생산성은 떨어지게 되었다.
이와 대조적으로 웹 애플리케이션은 웹 브라우저가 지원하는 HTML/XHTML 같은 표준 형식의 웹 문서 조합을 동적으로 만들어 내는 것이다. 동적 기능을 수행하는 자바 스크립트라는 표준 언어가 클라이언트 동작을 담당한다. 일반적으로 개별 웹 페이지는 정적 문서로 웹 브라우저로 배포되지만, 웹 문서가 연속적으로 전달되고 문서 마크업에 포함된 웹폼을 통해 정보를 주고 받을 수 있기 때문에 사용자에게 인터렉티브한 경험을 얻게 한다. 웹 브라우저는 웹 문서를 해석하는 기능을 수행한다.
인터페이스
웹 인터페이스가 클라이언트의 기능에 제한을 주는 일은 거의 없다. 자바, 자바스크립트, DHTML, 플래시와 기타 기술들을 활용하면 응용 프로그램에 특정적인 방법, 이를테면 화면에 그림을 그리거나 소리를 재생하거나 키보드와 마우스에 접근하는 것이 모두 가능하다. 드래그 앤드 드롭과 같은 일반적인 기법도 앞의 기술로 가능하다. 웹 개발자는 클라이언트측 스크립트를 활용해서 기능을 추가하는 경우가 많은데, 특히 페이지를 다시 불러오지 않으면서 인터렉티브한 경험을 구현하는 것이 그러한 경우이다. 최근에는 클라이언트측 스크립트와 서버측 기술(이를테면 PHP)을 함께 활용하는 기술들이 개발되고 있다. 다양한 기술을 조합한 웹 개발 기법인 Ajax는 더욱 인터렉티브한 경험을 제공하는 기술의 예이다.
기술적 고려
웹 애플리케이션을 만들 때 중요한 점은 클라이언트의 운영 체제의 종류나 버전에 상관 없이 작동되도록 표준 브라우저 기능을 사용해야 한다는 것이다. 이는 마이크로소프트 윈도우, OS X, 리눅스 등의 운영 체제에 각각의 클라이언트를 만드는 것보다 한 번 만들어서 거의 모든 곳에 쓰일 수 있도록 해야 한다는 것이다. 하지만 HTML, CSS, DOM 등과 같은 다양한 기술들의 불완전한 구현은 웹 애플리케이션의 개발에 많은 문제를 야기할 수 있다. 웹 애플리케이션의 사용자 인터페이스를 디자인 할 때에는 사용자들이 글자 크기, 색, 글꼴을 바꿀 수 있다는 점을 염두에 두고 레이아웃을 구현하여야 한다.
덜 흔하게 쓰이지만, 다른 접근 방법은 어도비 플래시나 자바 애플릿를 사용하여 사용자 인터페이스의 전부나 일부를 구현하는 것이다. 많은 웹 브라우저들이 이러한 기술들을 플러그인과 같은 기능을 통해 지원하고, 이것들은 브라우저의 설정 문제를 비켜나가게 할 수 있게 됨으로써, 클라이언트마다 다른 자바나 플래시의 구현이 문제가 될 수는 있겠지만 플래시나 자바에 기반한 애플리케이션들은 쉽게 구현될 수 있다. 구성이 클라이언트가 더 많은 역할을 하는 전통적인 클라이언트-서버 구조와 비슷하므로 "웹 애플리케이션"이란 용어가 논쟁거리가 되었다. 이에 따른 대체 용어는 "리치 인터넷 애플리케이션"이다.
구조
다양한 변형이 존재하지만, 웹 애플리케이션은 주로 3계층 애플리케이션으로 구축된다. 가장 흔한 구성으로, 웹 브라우저가 첫 번째 계층이고, 동적 웹 콘텐츠 기술(ASP, ASP.NET, CGI, ColdFusion, JSP, PHP, 파이썬, 루비 온 레일즈) 과 같은 것들의 엔진이 중간 계층이며, 데이터베이스가 세 번째 계층이다. 웹 브라우저는 데이터베이스에 쿼리를 보내고, 자료를 업데이트하며, 사용자 인터페이스를 만드는 중간 계층에게 요청을 보낸다.
사업 용도
최근 응용 소프트웨어 회사에서 취하는 전략은 이전에 로컬 응용 프로그램으로 배포된 소프트웨어에 웹 접근을 제공하는 것이다. 응용 프로그램의 종류에 따라, 완전히 다른 브라우저 기반의 인터페이스를 요구할 수도 있으며, 아니면 기존의 응용 프로그램에 적응하여 다른 프레젠테이션 기술을 사용해야 할 수도 있다. 이러한 프로그램들은 사용자가 로컬 하드 드라이브에 별도의 프로그램을 설치하지 않고 달마다, 또는 해마다 응용 소프트웨어 사용비를 내게 한다. 이러한 전략을 따르는 회사는 애플리케이션 서비스 제공업체 (ASP)로 알려져 있으며 ASP들은 현재 소프트웨어 산업에서 크나큰 집중을 받고 있다.
웹 애플리케이션 작성
많은 웹 애플리케이션 프레임워크들이 프로그래머가 프로그램의 고수준 설명을 정의하게 함으로써 빠른 애플리케이션 개발을 용이하게 해 준다. 또한, 이 모델에 맞는 플랫폼이 많지는 않지만, 인터넷 운영 체제에 기반한 애플리케이션의 개발에 대한 잠재성도 있다.
웹 애플리케이션 프레임워크의 사용은 코드를 단순하게 만들고, 한 팀이 기반에만 집중하게 함으로써 프로그램의 에러를 줄일 수 있다. 외부의 해커의 공격 시도에 노출된 애플리케이션들은 프로그램의 오류에 의한 보안 문제는 큰 문제이다. 웹 애플리케이션 프레임워크는 POST 후 GET과 같은 것들의 사용을 촉진할 수 있다.
Web Application Security Consortium (WASC), CGI Security, OWASP과 같은 프로젝트는 웹 애플리케이션의 보안 문제를 어떻게 피하는지에 대한 문서를 작성하는 데 주의를 기울여 개발되었다.
같이 보기
- Ajax
- ASP
- ASP.NET
- CSS
- 다이내믹 웹 문서
- 소프트웨어 개발
- DHTML
- XHTML
- HTML
- HTML5
- CSS3
- 웹 애플리케이션 서버
- 자바스크립트
- 웹 2.0
- 웹 서비스
- 웹 애플리케이션 프레임워크
- 파이썬
- 펄
- PHP
외부 링크
- 마이크로소프트가 API 전쟁에서 어떻게 졌는가 ? 어떻게 웹 애플리케이션이 윈도 응용 프로그램을 대체하고 있는지에 대해 논한다.
- 웹 애플리케이션 1.0은 어떻게 웹 애플리케이션이 동작할 것인지에 대해 기록해 놓은 미완성 문서이다.
- 웹 클라이언트 소프트웨어 팩토리 ? 마이크로소프트 운영 체제에서 컴포지트 웹 및 페이지 플로 응용 프로그램을 만드는 법에 대해 논한다.
모듈:Authority_control 159번째 줄에서 Lua 오류: attempt to index field 'wikibase' (a nil value).
- 스크립트 오류가 있는 문서
- 잘못된 파일 링크가 포함된 문서
- 출처가 필요한 글/2014년 3월
- 영어 표기를 포함한 문서
- 한국어 위키백과의 링크가 위키데이터와 다른 위키공용분류
- 위키데이터 속성 P18을 사용하는 문서
- 위키데이터 속성 P41을 사용하는 문서
- 위키데이터 속성 P94를 사용하는 문서
- 위키데이터 속성 P117을 사용하는 문서
- 위키데이터 속성 P154를 사용하는 문서
- 위키데이터 속성 P213을 사용하는 문서
- 위키데이터 속성 P227을 사용하는 문서
- 위키데이터 속성 P242를 사용하는 문서
- 위키데이터 속성 P244를 사용하는 문서
- 위키데이터 속성 P245를 사용하는 문서
- 위키데이터 속성 P268을 사용하는 문서
- 위키데이터 속성 P269를 사용하는 문서
- 위키데이터 속성 P271을 사용하는 문서
- 위키데이터 속성 P347을 사용하는 문서
- 위키데이터 속성 P349를 사용하는 문서
- 위키데이터 속성 P350을 사용하는 문서
- 위키데이터 속성 P373을 사용하는 문서
- 위키데이터 속성 P380을 사용하는 문서
- 위키데이터 속성 P396을 사용하는 문서
- 위키데이터 속성 P409를 사용하는 문서
- 위키데이터 속성 P428을 사용하는 문서
- 위키데이터 속성 P434를 사용하는 문서
- 위키데이터 속성 P435를 사용하는 문서
- 위키데이터 속성 P436을 사용하는 문서
- 위키데이터 속성 P454를 사용하는 문서
- 위키데이터 속성 P496을 사용하는 문서
- 위키데이터 속성 P549를 사용하는 문서
- 위키데이터 속성 P650을 사용하는 문서
- 위키데이터 속성 P651을 사용하는 문서
- 위키데이터 속성 P691을 사용하는 문서
- 위키데이터 속성 P716을 사용하는 문서
- 위키데이터 속성 P781을 사용하는 문서
- 위키데이터 속성 P791을 사용하는 문서
- 위키데이터 속성 P864를 사용하는 문서
- 위키데이터 속성 P865를 사용하는 문서
- 위키데이터 속성 P886을 사용하는 문서
- 위키데이터 속성 P902를 사용하는 문서
- 위키데이터 속성 P906을 사용하는 문서
- 위키데이터 속성 P947을 사용하는 문서
- 위키데이터 속성 P950을 사용하는 문서
- 위키데이터 속성 P966을 사용하는 문서
- 위키데이터 속성 P982를 사용하는 문서
- 위키데이터 속성 P1003을 사용하는 문서
- 위키데이터 속성 P1004를 사용하는 문서
- 위키데이터 속성 P1005를 사용하는 문서
- 위키데이터 속성 P1006을 사용하는 문서
- 위키데이터 속성 P1015를 사용하는 문서
- 위키데이터 속성 P1045를 사용하는 문서
- 위키데이터 속성 P1048을 사용하는 문서
- 위키데이터 속성 P1053을 사용하는 문서
- 위키데이터 속성 P1146을 사용하는 문서
- 위키데이터 속성 P1153을 사용하는 문서
- 위키데이터 속성 P1157을 사용하는 문서
- 위키데이터 속성 P1186을 사용하는 문서
- 위키데이터 속성 P1225를 사용하는 문서
- 위키데이터 속성 P1248을 사용하는 문서
- 위키데이터 속성 P1273을 사용하는 문서
- 위키데이터 속성 P1315를 사용하는 문서
- 위키데이터 속성 P1323을 사용하는 문서
- 위키데이터 속성 P1330을 사용하는 문서
- 위키데이터 속성 P1362를 사용하는 문서
- 위키데이터 속성 P1368을 사용하는 문서
- 위키데이터 속성 P1375를 사용하는 문서
- 위키데이터 속성 P1407을 사용하는 문서
- 위키데이터 속성 P1556을 사용하는 문서
- 위키데이터 속성 P1584를 사용하는 문서
- 위키데이터 속성 P1695를 사용하는 문서
- 위키데이터 속성 P1707을 사용하는 문서
- 위키데이터 속성 P1736을 사용하는 문서
- 위키데이터 속성 P1886을 사용하는 문서
- 위키데이터 속성 P1890을 사용하는 문서
- 위키데이터 속성 P1907을 사용하는 문서
- 위키데이터 속성 P1908을 사용하는 문서
- 위키데이터 속성 P1960을 사용하는 문서
- 위키데이터 속성 P1986을 사용하는 문서
- 위키데이터 속성 P2041을 사용하는 문서
- 위키데이터 속성 P2163을 사용하는 문서
- 위키데이터 속성 P2174를 사용하는 문서
- 위키데이터 속성 P2268을 사용하는 문서
- 위키데이터 속성 P2349를 사용하는 문서
- 위키데이터 속성 P2418을 사용하는 문서
- 위키데이터 속성 P2456을 사용하는 문서
- 위키데이터 속성 P2484를 사용하는 문서
- 위키데이터 속성 P2558을 사용하는 문서
- 위키데이터 속성 P2750을 사용하는 문서
- 위키데이터 속성 P2980을 사용하는 문서
- 위키데이터 속성 P3223을 사용하는 문서
- 위키데이터 속성 P3233을 사용하는 문서
- 위키데이터 속성 P3348을 사용하는 문서
- 위키데이터 속성 P3372를 사용하는 문서
- 위키데이터 속성 P3407을 사용하는 문서
- 위키데이터 속성 P3430을 사용하는 문서
- 위키데이터 속성 P3544를 사용하는 문서
- 위키데이터 속성 P3562를 사용하는 문서
- 위키데이터 속성 P3563을 사용하는 문서
- 위키데이터 속성 P3601을 사용하는 문서
- 위키데이터 속성 P3723을 사용하는 문서
- 위키데이터 속성 P3788을 사용하는 문서
- 위키데이터 속성 P3829를 사용하는 문서
- 위키데이터 속성 P3863을 사용하는 문서
- 위키데이터 속성 P3920을 사용하는 문서
- 위키데이터 속성 P3993을 사용하는 문서
- 위키데이터 속성 P4038을 사용하는 문서
- 위키데이터 속성 P4055를 사용하는 문서
- 위키데이터 속성 P4114를 사용하는 문서
- 위키데이터 속성 P4143을 사용하는 문서
- 위키데이터 속성 P4186을 사용하는 문서
- 위키데이터 속성 P4423을 사용하는 문서
- 위키데이터 속성 P4457을 사용하는 문서
- 위키데이터 속성 P4534를 사용하는 문서
- 위키데이터 속성 P4535를 사용하는 문서
- 위키데이터 속성 P4581을 사용하는 문서
- 위키데이터 속성 P4613을 사용하는 문서
- 위키데이터 속성 P4955를 사용하는 문서
- 위키데이터 속성 P5034를 사용하는 문서
- 위키데이터 속성 P5226을 사용하는 문서
- 위키데이터 속성 P5288을 사용하는 문서
- 위키데이터 속성 P5302를 사용하는 문서
- 위키데이터 속성 P5321을 사용하는 문서
- 위키데이터 속성 P5368을 사용하는 문서
- 위키데이터 속성 P5504를 사용하는 문서
- 위키데이터 속성 P5587을 사용하는 문서
- 위키데이터 속성 P5736을 사용하는 문서
- 위키데이터 속성 P5818을 사용하는 문서
- 위키데이터 속성 P6213을 사용하는 문서
- 위키데이터 속성 P6734를 사용하는 문서
- 위키데이터 속성 P6792를 사용하는 문서
- 위키데이터 속성 P6804를 사용하는 문서
- 위키데이터 속성 P6829를 사용하는 문서
- 위키데이터 속성 P7293을 사용하는 문서
- 위키데이터 속성 P7303을 사용하는 문서
- 위키데이터 속성 P7314를 사용하는 문서
- 위키데이터 속성 P7902를 사용하는 문서
- 위키데이터 속성 P8034를 사용하는 문서
- 위키데이터 속성 P8189를 사용하는 문서
- 위키데이터 속성 P8381을 사용하는 문서
- 위키데이터 속성 P8671을 사용하는 문서
- 위키데이터 속성 P8980을 사용하는 문서
- 위키데이터 속성 P9070을 사용하는 문서
- 위키데이터 속성 P9692를 사용하는 문서
- 위키데이터 속성 P9725를 사용하는 문서
- 위키데이터 속성 P9984를 사용하는 문서
- 위키데이터 속성 P10020을 사용하는 문서
- 위키데이터 속성 P10299를 사용하는 문서
- 위키데이터 속성 P10608을 사용하는 문서
- 위키데이터 속성 P10832를 사용하는 문서
- 위키데이터 속성 P11249를 사용하는 문서
- 위키데이터 속성 P11646을 사용하는 문서
- 위키데이터 속성 P11729를 사용하는 문서
- 위키데이터 속성 P12204를 사용하는 문서
- 위키데이터 속성 P12362를 사용하는 문서
- 위키데이터 속성 P12754를 사용하는 문서
- 위키데이터 속성 P13049를 사용하는 문서
- 월드 와이드 웹
- 소프트웨어 구조
- 웹 애플리케이션
- 웹 개발