1. 데스크톱 애플리케이션
데스크톱 애플리케이션은 PC에 설치한 후 실행한다.
프레젠테이션 로직(사용자 화면 출력), 비지니스 로직(업무관련 작업 실행), 데이터 로직(데이터 처리)을 모두 PC에서 수행한다. ex> 한글오피스, 알집 등등
문제점은 일부의 기능을 추가하거나 변경할 때마다 다시 배포해야하므로 번거롭고, 보안에 취약하다.
2. 클라이언트, 서버 애플리케이션
위의 문제점을 해결하기 위해 나온 클라이언트, 서버 애플리케이션는 기능을 클라이언트와 서버로 분리했다.
클라이언트는 프레젠테이션 로직을 서버는 비지니스로직과 데이터로직을 담당하게 된다.
그 결과 업무 변화에 대응하기가 쉽고(기능변경 및 추가 용이), 서버 쪽에서 데이터베이스의 보안이 강화 된다.
하지만 문제점은 다중 클라이언트 접속이 불가하다. 한번에 하나의 클라이언트 하고만 연결이 되기 때문에 현재 연결된 클라이언와 연결이 종료될 때까지 기다려야하는 불편함이 있다. 이 불편함을 해결하기 위해서는 멀티 프로세스 또는 멀티 스레드와 같은 병행처리 방식으로 처리를 해야한다.
*멀티 프로세스(Multi-Process)와 멀티 스레드(Multi-thread) 차이점
멀티 프로세스 방식은 클라이언트가 연결 요청을 하면 서버 프로그램은 자신을 복제하여 클라이언트에 대응하게 되고, 자신은 다른 클라이언트의 요청을 기다린다. 멀티 프로세스 방식은 원본프로세스의 메모리를 모두 복제하기 때문에 자원 낭비가 심하다.
멀티 스레드 방식은 클라이언트 요청을 처리하는 일부 코드만 별도로 분리하여 실행하기 때문에 전체 메모리를 복제할 필요가 없어 멀티 프로세스보다 메모리 낭비가 적다.
3. 다중 클라이언트 요청 처리
클라이언트의 요청 처리 부분을 별도의 작업으로 분리한다.
분리된 작업은 스레드에 정의한다.
다중 클라이언트의 요청이 동시에 병행 처리된다. 즉, 동시 작업이 가능해진다.
문제점은 소켓 및 스레드를 도입해야하는데 프로그래밍이 복잡해진다는 것이 있다. 데이터 통신을 위한 네트워크 프로그래밍, 다중 클라이언트 요청을 처리하기 위한 스레드 프로그래밍, DB연결을 관리하거나 트랙젝션, 보안, 자바빈 등 다양한 애플리케이션 자원을 관리하기 위한 프로그래밍도 필요하다.
4. 클라이언트, 서버 아키텍쳐의 진화
1) 전통적인 C/S 구조
전통적인 클라이언트, 서버의 구조는 서버에서 데이터를 처리를 하기 때문에 자료 중복 및 자료 불일치 문제 해결할 수 있다. 하지만 애플리케이션 변경 시 재배포가 필요하고 클라이언트에서 DBMS에 직접 접속을 해야되기 때문에 접속 아이디와 암호 노출 위험이 높다.
2) 애플리케이션 서버 도입
전통적인 C/S 구조의 단점을 개선하기 위해서 클라이언트의 비지니스 로직은 서버로 이관하고 클라이언트는 사용자와의 상호작용을 처리하는 UI만을 담당하게 되었다.
애플리케이션 서버는 비지니스 로직을 전문으로 처리하는 서버로 클라이언트는 실행 결과 출력만을 담당한다. 즉, 씬 클라이언트(thin client)가 가능해졌다. 또한 애플리케이션 서버에서 DBMS를 접근하기 때문에 전통적인 C/S구조 보다 보안이 강화되었고, 기능 추가 또는 변경 시에 서버 쪽만 변경하기 때문에 배포가 비교적 쉬워졌다.
5. 웹 애플리케이션
웹 애플리케이션 서버 구조
웹 표준 기술을 활용하여 클라이언트와 서버 간의 통신을 웹서버가 전담하게 되었다. 클라이언트 애플리케이션을 배포할 필요가 없어졌고, 네트워크 및 멀티스레드 프로그래밍으로부터 벗어나게 되었고, 애플리케이션 서버는 애플리케이션 실행 및 관리에 집중할 수 있게 되었다.
웹 애플리케이션의 특징
1) 배치
기존의 C/S환경은 비지니스로직은 서버에 배치하고, UI처리 부분은 클라이언트에 배치하였다. 업무가 변경되면 그에 따라 UI도 바뀌어야하기 때문에 기능이 추가되거나 변경될 때마다 클라이언트 프로그램을 다시 설치해야하는 번거로움이 있었다. 웹환경에서는 비지니스 로직과 UI로직이 모두 서버에 배치되기 때문에 기능이 추가되거나 변경이 되더라도 서버 쪽만 바꾸면 된다. 즉, 사용자는 재설치 없이 추가된 기능이나 변경된 기능을 이용할 수 있게 되었다. 하지만 애플리케이션을 실행할 때 마다 UI로직을 내려받아야하기 때문에 네트워크 오버헤드가 발생하게 된다.
2) 실행
웹 애플리케이션의 실행은 웹브라우저를 통해 이루어진다. 웹브라우저가 설치되어 있고, 인터넷만 연결되어 있다면 언제 어디서든 애플리케이션의 실행이 가능하다.
3) 개발
C/S 환경에서는 네트워크 프로그래밍과 멀티스레드 프로그래밍을 해야한다. 하지만 웹 환경에서는 웹 브라우저와 웹 서버가 그 부분을 대신 처리 해준다. 개발자는 단지 어떤 업무를 처리하고 무엇을 출력할 것인가에 대한 고민만 할 수 있게 되었다.
4) 클라이언트
웹 환경에서는 HTML과 더불어 CSS, JavaScript를 사용하여 UI를 비교적 손쉽고 빠르게 만들 수 있다.
5) 서버
네트워크와 멀티스레드는 모두 웹서버가 대신처리 해주기때문에 업무 처리에 집중할 수 있다.
웹 애플리케이션의 등장 이유
기존의 C/S환경에서는 치열한 경쟁과 변화에 빠르게 대처하는데 한계를 개선하기 위해서 웹어플리케이션 아키텍처가 등장하게 되었다.
웹 애플리케이션의 한계
웹 애플리케이션 사용자가 이리저리 화면을 옮겨다닌다면 서버는 같은 화면을 계속 반복해서 만들어야 하고, 클라이언트는 반복적으로 내려받음으로써 서버 및 네트워크 자원에 대한 오버헤드가 증가한다는 문제점이 발생하게 된다.
*AJAX(Asynchronous JavaScript and XML)
위의 문제점을 해결하기 위해 AJAX라는 기술이 등장하였다. 같은 화면에서 데이터만 바뀔 때는, 서버에서 UI전체를 받아오기보다는 데이터만 받아오는 것이 효율적이다. 즉, 화면은 그대로 놔두고 데이터만 받아오는 기숧을 의미한다.
출처: 자바웹개발워크북 23p~62p