**웹 애플리케이션**(영어: 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과 같은 프로젝트는 웹 애플리케이션의 보안 문제를 어떻게 피하는지에 대한 문서를 작성하는 데 주의를 기울여 개발되었다.