- 웹 서버
- 인터넷 웹브라우저의 요청이 들어오면 그에 해당하는 웹페이지를 찾아서 보내주는 일을 하는 컴퓨터를 지칭한다.
- 정확히 표현하면 인터넷 사용자의 URL요청을 받아서 그에 해당하는 웹페이지(HTML문서나 이미지)를 찾아서 다시 웹브라우저로 보내주는 것이다.
- 웹어플리케이션 서버(WAS)
- 웹어플리케이션 서버는 웹서버에 웹어플리케이션을 합친 것이다.
- 우리가 웹페이지를 볼때 화면이 동적일 때가 있을 것이다. 동적이란 말은 이를테면 특정 URL을 요청했을 때 뉴스페이지 같은 곳에서는 각각의 기사에 대하여 다른 기사제목과 내용들이 표시 되는일들을 말하는데 정적인 웹 서버로는 이것을 처리가 불가능하다. 웹 서버가 웹어플리케이션 프로그램을 호출해야 가능한 일이다. JSP같은 기술이 웹어플리케이션의 역할을 담당한다.
웹 서버 : 정적인 처리 담당 html, 이미지등 ex) Apache
웹 어플리케이션 서버 (WAS) : jsp, 서블릿 담당(동적처리) ex) Tomcat
|
- JSP(Java Server Pages)
- JSP 는 자바 Servlet 기술을 확장시켜 웹 환경 상에서 자바만으로 서버 사이드 모듈을 개발하기 위한 기술이다.
- JAVA기반으로 만들어서 JAVA의 모든 기능을 사용할 수 있어 발전 가능성이 무한하다.
- ASP, PHP 처럼 HTML 태그 사이 사이에 동적인 contents 생성 을 담당할 JAVA 코드가 들어 있는 형태로 Servlet 의 형태와 다른 모습을 취하고 있다.
- 커스텀 태그를 만들어 사용할 수 있으며, JSTL(JSP Standard Tag Library)과 같은 태그 라이브러리를 이용할 수 있어 개발이 용이하다.
- 서블릿으로 컴파일된 후 메모리에서 처리되기 때문에 많은 사용자의 접속도 원활하게 처리할 수 있디.
- Java Beans를 이용해 JSP 또는 다른 서블릿 간의 데이터를 쉽게 공유 할 수 있다.
- Servlat(Server + Applet)
- JAVA를 이용한 서버 프로그래밍 기술이다.
- JAVA 언어를 기반으로 동적인 contents 를 생성하는 기술로 JAVA 프로그램을 작성하는 형식과 거의 같다.
- JAVA 코드 안에 HTML 태그가 섞여 있어 작업에 대한 분리적인 측면으로 볼 때 효율성이 떨어진다.
- 프로그래머가 프로그래밍하기 어려우며 수정하기 어려운 단점이 있다.
- JSP와 서블릿 차이
- JSP는 HTML과 같은 일반적인 텍스트 파일 구조
- 서블릿은 자바 소스로 작성된 클래스 파일 구조
- JSP는 서블릿 컨테이너에 의해 서블릿 형태의 자바 소스로 변환되어 클래스로 컴파일 됨
- 서블릿 컨테이너
- 서블릿 컨테이너는 서블릿을 실행하고 JSP를 서블릿 코드로 변환하는 기능을 수행
- 변환된 JSP의 서블릿 클래스를 실행하고 웹 서버의 메모리에 적재하고 사용자 요청에 따라 실행
- 예: Tomcat, WebLogic, JBoss, Jetty 등
- HTTP 서버
- URL 주소의 해석을 하는 역활
- HTTP 서버는 단순히 어떤 주소(URL) 요청이 들어왔을 경우 그 주소에 미리 매핑되어 있는 콘텐츠(HTML 파일이나 이미지 등)를 사용자의 브라우저에 응답 형태로 전송하는 역할을 한다. 이 때 만일 요청된 URL이 서블릿 클래스 또는 JSP파일(ex. http://www.sevlet.com/servlet 또는 http://www.wervlet.com/home.jsp)일 경우 HTTP 서버는 이를 웹 컨테이너에서 처리하도록 클라이언트의 요청을 넘겨준다.
- 웹 컨테이너(Web Container)
- 서블릿 클래스 또는 JSP 파일의 실행 요청을 처리해주역활
- 웹 컨테이너에서는 요청된 URL에 맞는(미리 설정된) 서블릿 클래스 또는 JSP 파일을 실행하여 그 결과를 HTTP 서버에 넘겨주게 되고 이는 응답 메시지의 형태로 사용자의 브라우저에 전성된다.
- JSP 처리 과정
- 사용자가 브라우저 주소창에 도메인을 입력하면 브라우저는 그 도메인에 해당하는 IP 주소를 찾기 위해서 DNS 서버에 접속한다.
- DNS 서버는 도메인에 대한 IP 주소를 알려준다.
- IP 주소를 획득한 브라우저는 인터넷에 접속해서 IP 주소에 있는 서버에 HTTP 프로토콜로 요청한다.
- 웹 서버가 요청 내용을 분석하고 서블릿 컨테이너에 요청을 넘겨 처리한다
- HTML인 경우와 JSP인 경우 구분하여 처리한다.
- HTML인 경우 HTML, CSS 등등 추가적인 행위가 필요없는 정적인 파일을 찾아서 사용자에게 전달한다.
- JSP인 경우 웹 서버의 서블릿 컨테이너를 이용한 처리 과정이 필요하다.
- 찾은 파일을 서블릿으로 파싱한다.(hello.jsp -> helloServlat.java)
- 만약 이미 변환 되어있는 파일이 있다면 그 파일을 바로 실행한다. (helloServlat.class)
- 이전에 요청했던 페이지일 경우 파싱할 필요 없이 파싱했던 클래스파일을 메모리에 적재한다.
- 서블릿 파일을 실행가능한 class파일로 컴파일 한다. (helloServlat.java -> helloServlat.class)
- 클래스 파일은 메모리에 적재가 되어 실행된다.
- 컴파일된 .class는 컴퓨터에서 실행할 수 있는 형태로 특정한 기능을 수행할 수 있게 된다. 이후 소스 변경 전까지 해당 파일은 메모리에 상주하면서 다시 컴파일 되지 않고 서비스된다.
- 데이터베이스 처리 혹은 별도의 기능을 위한 클래스 호출 등이 있다면 실행하고 결과를 취합한다. (Java Beans)
- 웹서버는 취합한 결과를 기반으로 브라우저가 인식할수 있는 정적페이지(HTML)를 구성하여 웹 브라우저에 전송한다.
- 모델 1
- JSP, Servelt, Bean 등으로 구성되는 형태로 JSP에는 프리젠테이션 레이어 & 비즈니스 레이어를 포함하고 업무부분을 JavaBean이나 Servlet에서 구현하기도 한다.
- Model - View - Controller로 구분하기 모호하긴하지만 궂이 따지자면 그림과 같이 JSP에서는 주로 View와 Controller의 역할을 JavaBean / Servlet에서는 주로 Model의 역할을 하지만Controller의 역할을 하기도 한다.
- 장점
- 페이지 흐름이 단순해 개발팀원의 수준이 높지 않아도되 중소형 프로젝트에 적합하다.
- 단점
- 웹어플리케이션이 복잡해 질수록 유지 보수가 힘들어진다.
- 완벽히 분리되지 않아 디자이너와 개발자가 원활히 의사소통 되지 않으면 충돌이 발생한다.
- 모델 2
- 사용자 요청에 대하여 Controller는 Model에게 데이터 조회, 비즈니스 로직의 처리를 요청하고 Model로 부터 정보를 받아 View에게 전달한다. 최종적으로 View는 정적데이터를 구성하여 사용자에게 전달한다.
- 장점
- 효과적으로 분리되어 구성된다면 개발자와 디자이너의 작업이 분리되어 역할과 책임 구분이 명확해진다.
- 로직과 디자인 개발의 분리로 인해 웹어플리케이션이 구조화되어 유지보수 및 확장이 용이해진다.
- 단점
- 구조화를 위해 개발의 복잡도가 증가함에 따라 개발기간도 증가한다.
- 개발팀원이 MVC구조에 대한 높은 수준의 이해가 요구되 고급개발자가 필요하다.
- MVC 패턴
- Model
- 데이터베이스와의 관계를 담당한다. 클라이언트(웹브라우저)의 요청에서 필요한 자료를 데이터베이스로부터 추출하거나 수정하여 Controller로 전달한다.
- DAO(Data Access Object) : sql문으로 질의응답 하는 클래스
- DTO(Data Transe Object) : 데이터의 틀을 만들고 저장하는 클래스
- View
- 사용자한테 보여지는 UI화면이다. Controller에서 어떤 view 컴포넌트를 보여줄지 결정한다.
- 주로 .jsp로 작성한다.
- Controller
- 클라이언트(웹브라우저)의 요청을 받고 적절한 Model에 지시를 내리며 Model에 전달된 데이터를 적절한 view에 전달 한다.
- 매니저 같은 역할로 클라이언트로부터 요청받으면 이 요청이 그냥 보여주면되는건지 DB를 거쳐 보여야하는건지 판단하고 알맞게 작업진행을 한다.
- 네트워크 통신
- 자바스크립트를 이용한 웹브라우저의 통신 기능 사용
- Ajax(Asynchronous JavaScript and XML)
- Ajax는 웹브라우저와 웹서버가 내부적으로 데이터 통신을 한다.
- 페이지 리로드 없이 웹페이지의 내용을 변경할 수 있다.
- 자바스크립트를 이용해서 비동기적으로 서버와 브라우저가 데이터를 주고 받는 방식을 의미한다.
- XML과 JSON은 구조화된 문서를 전송 가능하게 만든 텍스트 포멧 형식을 말한다.
- Json
- 장점
- 내용이 함축적으로 최소한의 정보만을 가지고있다.
- 그렇기때문에 XML대비 용량이 획기적으로 줄어들고 속도는 그만큼 빨라지게된다.
- 객체구조와 {} 배열구조의 [] 적절한 만남으로 아주 효율적인 데이터 구성이 가능하다.
- 파싱이 매우 간편하고, 때로는 일반적인 변수처럼 사용도 가능하다.
- 즉, 사용하기 쉽다.
- 단점
- 내용이 함축적이다 보니 내용의 의미파악은 힘들수 있다.
- 적은규격의 데이터 전송에 적합한 방식이기때문에 XML보다는 빠르지만 대용량급의 데이터 송수신엔 부적합 모습도 있다.
- xml
- 장점
- 작성하기가 간편하다(tag구조)
- Json에 비해 XML이 사람이 읽기가 쉽다. (즉 각 장보들이 의미하는 바를 한눈에 보기가 좋다.
- DTD 등 XML자체의 기능을 확장할 여지가 많이 있다.
- 단점
- 문서의 양이 필요이상으로 많다.(실 데이터가 아닌 tag글자)
- 배열형식이나 반복구조의 경우 불필요한 데이터가 계속 해서 나타난다.
- 결국 이로인해 파싱이 힘들어지고 속도는 느려진다.
- Json과 XML 차이점
- XML 문서는 XML DOM(Document Object Model)을 이용하여 해당 문서에 접근한다.
- 하지만 JSON은 문자열을 전송받은 후에 해당 문자열을 바로 파싱하므로, XML보다 더욱 빠른 처리 속도를 보여준다.
- 따라서 HTML과 자바스크립트가 연동되어 빠른 응답이 필요한 웹 환경에서 많이 사용되고 있다.
- 하지만 JSON은 전송받은 데이터의 무결성을 사용자가 직접 검증해야 한다.
- 따라서 데이터의 검증이 필요한 곳에서는 스키마를 사용하여 데이터의 무결성을 검증할 수 있는 XML이 아직도 많이 사용되고 있다.
- 참고자료