본문 바로가기
language/JSP

웹 프로그래밍의 이해

by 스파이디웹 2020. 2. 24.
728x90

※간단한 웹 페이지에 표시할 때: HTML태그

 

※데이터베이스에 저장된 내용 등을 웹 페이지에 표시 할 때: (동적으로 변화하는 데이터를 처리하고 표시하기위해)CGI,ASP,PHP,JSP등 웹 프로그래밍 언어

 

※웹 프로그래밍은 기본적으로 C/S방식(client/server), 클라이언트(웹 브라우저)가 특정 페이지를 웹 서버에 요청(request)하게 되면 웹 서버가 이를 처리한 후 결과를 다시 클라이언트(웹 브라우저)에게 응답(response)하게 되는 구조

 

인터페이스(interface):

하나의 시스템을 구성하는 2개의 구성 요소(하드웨어,소프트웨어) 또는 2개의 시스템이 상호 작용할 수 있도록 접속되는 경계,또는 이 경계에서 상호 접속하기 위한 하드웨어, 소프트웨어, 조건, 규약 등을 포괄적으로 가리키는 말

 

플랫폼(platform):

운영체제(OS)가 설치된 개발환경, 예를 들어 윈도기반에서는 윈도 플랫폼이라고 부름

 

※프로세스(process):

메모리 할당을 받은 프로그램, 즉 실행 중인 프로그램,

프로세스는 메모리 할당을 받으므로 과도한 프로세스는 시스템에 부하를 줌,

즉 시스템의 성능이 떨어짐

 

※쓰레드(thread):

프로세스 내의 명령어 블록으로, 프로세스 내에 있는 것,

프로세스가 이미 메모리를 할당받았으므로 쓰레드는 따로 메모리를 할당받지 않는다,

멀티 쓰레딩이란 하나의 프로세스를 여러 개의 쓰레드로 나누어 동시에 처리하는 것,

메모리는 점유하지 않으면서 프로그램의 수행 속도를 향상시킨다.

 

컴포넌트(component):

-컴포넌트는 프로그래밍의 한 부분을 의미하며 재사용이 가능한 최소 단위를 말한다. 그래서 객체지향언어를 사용할 때 자주 사용되며 재사용이 가능하기 때문에 컴포넌트 단위로 분류하거나 이동 가능하다는 특징이 있다.

-이는 모듈(Module)과 혼동될 수 있는데 모듈은 특정 기능을 온전히 수행할 수 있도록 만들어 졌다면 그 모듈 내에서도 재사용이 가능한 단위가 컴포넌트라 할 수 있다.

-웹사이트를 구축할 경우 모든 것을 새로 만드는 웹 사이트를 상상조차 할 수 없는게 현실이다. 대부분이 라이브러리, 플러그인, 모듈 그리고 컴포넌트로 재사용이 되는 부분들이 대단히 많다 하겠으며 이를 얼만큼 효과적으로 가장 적합한 어떤 것을 찾고 적용하는 역량이 더 중요해졌다 말할 수 있다.

 

※AJAX(Asynchronous JavaScript+XML):

자바스크립트에 비동기적인 통신으로, 클라이언트인 웹 브라우저와 서버 사이에서 XML기반인 데이터를 교환하는 방법,

여기서 비동기적인 통신이란 서버가 응답을 받을 준비가 된 상태인지의 여부에 상관없이 웹 브라우저가 서버로 정보를 전송하는 것으로, 사용자는 언제 정보가 전송되었는지 알지 못한다. 이와 같은 비동기적인 통신 방법을 사용하는 Ajax는 정보를 더 빨리 전송할 수 있다는 장점이 있음.

 

※XML(eXtensible Markup Language):

태그 등을 이용하여 문서나 데이터의 구조를 명기하는 언어의 한 가지,

일반적으로 데이터를 기술하는 정도로만 사용되기에 프로그래밍 언어와는 구별

 

※비연결성(connectionless):

클라이언트의 요청에 응답한 후 바로 연결을 끊음

 

※비상태성(stateless):

서버의 상태가 어떤지에 상관 없이 요청을함

 

※웹 프로그래밍 언어의 종류

1.CGI(Common Gateway Interface):

웹 페이지에 동적으로 변하는 데이터를 처리하고 표시하기 위해서 가장 먼저 개발된 언어,

웹 서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약들을 말함.

웹 브라우저가 웹 서버를 통해 데이터베이스 서버에 질의를 요구하는 작업을 처리하는 대화형(동적) 웹 페이지를 작성할 때 사용된다.

 

2.ASP(Active Server Page):

마이크로소프트사에서 개발한 비주얼 베이직이라는 언어를 기반으로 사용

스크립트 방식으로 동적인 웹 페이지를 작성할 수 있도록 지원하는 기술로, 서버에서 실행하는 스크립트 언어

ActiveX라는 제공된 컴포넌트를 사용할 수도 있음, 보안에 약하므로 Ajax로 대체.

국내에서는 비즈니스 로직으로 EJB(Enterprise Java Bean)을 채용하고 있어서 사용률이 높지 않음

오직 windows플랫폼에서 IIS(Internet Information Server) 웹 서버만 사용함

 

3.PHP(Personal Homepage tools, Professional Hypertext Preprocessor):

어떤 플랫폼이든지 동작, C언어의 문법과 유사, 적은 명령어만으로 프로그래밍이 가능, 편리성 측면에서 이점이 많음,

컴포넌트를 지원하지 않음, 보안에 취약해 해킹의 대상이 되므로 소규모 웹 사이트에서만 사용,스타트업이 빠르게 만들 때 사용

 

4.JSP(Java Server Pages) & Servlet(server+applet):

-서블릿은 오라클사에서 발표한 기술로서, 자바언어를 기반으로 하는 동적 웹 페이지를 작성할 수 있도록 지원,

-multi threading에 의해 사용자 요구를 처리하고 가공해서 이에 대한 결과를 사용자에게 응답,

-자바 프로그램과 작성하는 형식이 거의 같다, 자바 코드 안에 HTML 태그가 혼재되어 있음

 

-JSP는 서블릿과 마찬가지로 자바를 기반으로 하는데, 서블릿보다는 자바 코드에 덜 의존적이라서 좀 더 쉽고 편하게 프로그래밍함,

-JSP와 서블릿은 같은 처리 구조를 가지며, 페이지의 요청이 있을 시 최초 한 번 자바 코드로 변환된 후 서블릿 클래스로 컴파일됨

-JSP는 실행 시 서블릿으로 변환, 단 한번만 서블릿으로 변경되면 코드를 수정하기 전까지 재변환 작업이 일어나지 않기 때문에 수행 속도에서는 JSP나 서블릿이나 별 차이 없음,

-최근에는 JSP는 주로 사용자용 화면인 뷰(view)의 구현에 사용, 서블릿은 사용자용 뷰와 프로그램 로직 사이를 제어하는 역할로 주로 사용

 

※웹 애플리케이션의 구조 및 구성 요소

1.웹 브라우저가 웹 서버에 어떠한 페이지를 요청한다

2.해당 웹 서버는 웹 브라우저의 요청을 받아서 요청된 페이지의 로직 및 데이터베이스와의 연동을 위해 웹 애플리케이션 서버에 이들의 처리를 요청한다.

3.웹 애플리케이션 서버는 데이터베이스와의 연동이 필요한 경우 이를 수행한다.

4.로직 및 데이터베이스 작업의 처리 결과를 웹 서버에 돌려보낸다.

5.그러면 웹 서버는 웹 브라우저에 결과를 응답하게 된다.

 

※웹 애플리케이션 구성 요소

1.웹 브라우저:

웹에서 클라이언트이며, 사용자의 작업창

(Internet Explorer, safari,firefox)

 

2.웹 서버:

웹 브라우저의 요청을 받아들이는 곳으로 작업의 결과도 웹 브라우저에게 응답을 하는 곳,

요청된 레이지의 로직 및 데이터베이스와의 연동을 위해 애플리케이션 서버에 이들의 처리를 요청하는 작업을 수행

(아파치,IIS)

 

3.웹 애플리케이션 서버(Web Application Server):

요청된 페이지의 로직 및 데이터베이스와의 연동을 처리하는 부분,

영어권에서는 그냥 애플리케이션 서버라고 부름

(웹 로직, 웹스피어, 제우스, 레진, 글래스피시, 아파치의 톰캣)

 

4.데이터베이스

데이터의 저장소로 웹에서 발생한 데이터는 모두 이곳에 저장,

게시판의 글들,회원의 정보 등,

사용자 입장에서 가장 안쪽에 있기 때문에 데이터베이스 서버를 Back-end Server라고 부름

(Oracle,Sybase,informix,DB2,Mssql,MySQL)

 

※JSP 웹 프로그래밍

-웹 서버, 웹 애플리케이션 서버, 웹 컨테이너가 필요함

 

※웹 애플리케이션 처리방식

1.CGI방식:

-웹 서버가 애플리케이션 프로그램을 직접 호출하는 구조.

-1개의 요청에 대해 1개의 프로세스가 생성되어 그 요청을 처리한 뒤 종료.

-프로세스 기반.

-많은 사용자가 몰리는 웹사이트에 요청되는 수많은 요청에 대해서 하나의 요청마다 새로운 프로세스가 생성,처리,종료(많은 부하)

 

2.웹 애플리케이션 서버 방식:

-웹 서버가 애플리케이션 프로그램을 직접 처리하지 않음

-웹 애플리케이션 서버가 처리하도록 넘기는 방식

-여러 명의 사용자가 동일한 페이지를 요청하여 같은 애플리케이션 프로그램을 처리할 때 오직 한 개의 프로세스만을 할당하고, 사용자의 요청을 쓰레드방식으로 처리함.(메모리의 절약)

-대기업의 웹사이트나 포털 사이트들은 이 방식을 채택)

-JSP,ASP 모두 웹 애플리케이션 서버 방식을 취함

 

※웹 애플리케이션 구현 방식

1.실행 코드 방식:

미리 컴파일된 실행 프로그램을 사용자의 요청에 따라 실행.

 

2.스크립트 코드 방식:

-사용자의 요청이 있을 때 스크립트 코드를 번역하여 번역된 코드를 실행.

-해당 페이지가 청므으로 요청되었을 때 단 한번만 번역이 실행되고, 이후에는 해당 페이지의 요청이 있는 경우에는 번역된 코드가 실행된다.

-CGI 방식의 실행 코드 방식 보다 전체적인 성능이 뛰어나다.

-쉽고 빠르게 웹 애플리케이션을 구현할 수 있다.(스크립트언어)

 

1)클라이언트 사이드 스크립트(client side script)

-Javascript,VBscript

2)서버 사이드 스크립트(server side script)

-ASP,JSP,PHP

 

※JSP 및 서블릿

JSP:

-자바 서블릿기술을 확장시킨 웹 환경상에서 100%순수한 자바만으로 서버 사이드 모듈을 개발하기 위한 기술

-서블릿과 마찬가지로 서버 사이드에서 DBMS와 같은 백 엔드 서버와 연동하여 이들 백 엔드 서버의 데이터를 가공하여 화면에 표시 할 수 있고, 여러 조건에 따라 표시할 수 있는 내용들을 동적으로 처리할 수 있는 기능을 제공

-1.객체 지향적이다.

 2.플랫폼에 독립적이다.

 3.네트워크 지향적이다.

 4.보안성이 뛰어나다.

 5.멀티 쓰레드를 지원한다.

 6.코드가 친근하다.

-JSP는 자바의 J2EE을 구성하는 기술 중 하나이다.

 

J2EE(Java enterprise edition):

-컨테이너가 관리하는 컴포넌트 그룹과 서비스 API 그룹으로 나누어진다.

-컨테이너는 여러 가지 컴포넌트를 가지고 있고, 컴포넌트들이 제공하는 각종 서비스를 관리하는 런타임 환경을제공

-서비스 API는 실제로 사용하는 각종 서비스 환경을 제공

-컨테이너 측면과 서비스 API측면을 구별하는 이유는, 이미 개발되어 제공되는 서비스들 및 컨테이너를 연계하여 집중적인 튜닝을 통해 성능을 향상할 수 있기 때문이다.

-커넥션 풀링(connection pooling)과 같이 전반적으로 사용되늰 컴포넌트나 서비스는 그쪽 전문가에게 맡기고, 개발자들은 비즈니스 로직 개발에 집중

 

컨테이너(container):

-프로그래밍에서 가장 중요한 요소는 재사용 가능한 비즈니스 로직을 작성할 수 있게 도와주는 컴포넌트이다.

-J2EE에서는 비즈니스 로직을 위해 1.웹 컨테이너와 2.EJB 컨테이너를 제공

-웹컨테이너: 서블릿과 JSP에 대한 실행 환경을 제공

-EJB 컨테이너: Enterprise JavaBean에 대한 실행 환경을 제공

 

※컨테이너를 구성하는 3가지 기술

1.servlet:

-서버쪽에서 실행되는 프로그램

 

2.JSP:

-컴포넌트를 웹 페이지에 내장시켜 통합시킬 수 있다.

-JSP는 HTML,Java 코드, JavaBean 컴포넌트 등을 하나의 웹 페이지 내에 모두 포함

-서블릿을 한 차원 더 확장시킨 버전.

 

3.EJB:

-EJB 스펙은 확장 가능하고(Scalable),다중 사용자 처리에 안전하며,트랜잭션 기능을 인식하는 분산된 비즈니스 애플리케이션 컴포넌트를 개발하기 위해 필요한 표준화된 모델을 제공.

-비즈니스 로직을 구현한 각종 컴포넌트들을 서버에 분산시켜놓고, 지속성 있는 데이터를 객체 지향적인 방식으로 표현.

 

서비스 API:

1.JDBC(java database connectivity):

-J2EE의 구성요소로 포함된 JDBC2.0 API는 DataSource나 분산 트랜잭션 지원과 같은 향상된 기능을 제공

-DataSource 객체는 데이터베이스 리소스 풀링을 처리하고, 분산 트랜잭션 지원 기능은 몇몇 분산된 비즈니스 컴포넌트들이 하나의 단일 트랜잭션을 이룰 수 있게 한다.

 

2.XML(eXtensible Markup Language):

-J2EE에서는 deployment descriptors를 작성하는 포맷으로 XMl을 사용

-deployment descriptors는 j2EE 애플리케이션의 환경을 설정할 때 사용하는 것으로, 톰캣을 설치하면 확인가능

-톰캣에서는 web.xml , server.xml등이 해당

 

3.JTA(Java Transaction API):

-EJB 등과 같은 컴포넌트들에 대한 트랜잭션 관리를 자동화할 수 있는 스펙을 정의

-컨테이너 내에 상주하면서, 다중 컴포넌트들과 다중 데이터 원본들에 대해서까지도 트랜잭션을 적용할 수 있도록 확장된 트랜잭션의 범위를 제공

 

Servlet의 개요:

 

HTTP 프로토콜:

-연결을 유지하지 않고(connectionless),서버의 상태에 상관하지 않는(stateless)특징을 갖고 있음.

-웹 브라우저는 HTTP 프로토콜에 맞게 요청을 웹 서버에 전송하고, 웹 서버 역시 HTTP 프로토콜에 맞게 요청에 따른 응답을 웹 브라우저에 전송.

 

※웹 서버에 요청을 전송하기 위한 HTTP 메소드

1.Get

-http header 정보를 실어 보냄

-메소드 생략 시 기본값

-url 뒤에 요청 쿼리가 붙음

-전달 속도 빠름

-256byte 한계

-적은 양의 데이터 전송 시 좋음

 

2.Post

-http의 body에 정보를 실어 보냄

-데이터 크기의 제한이 없음

-보안에 좋음

 

3.Head

-header(서버)의 정보만 얻어낼 때 사용

 

4.Put

-Resource를 저장할 때 사용

 

5.Delete

-Resource를 제거할 때 사용

-Put과 Delete를 허용하면 서버의 안정성이 떨어짐

 

6.Trace

-클라이언트에서 서버까지 가는 경로를 추적

 

7.Options

-서버의 성능 등을 확인할 때 사용

 

서블릿의 동작원리:

-HTTP Servlet이나 다른 종류의 Servlet을 생성하려면 서블릿 API를 사용해야 한다.

-서블릿은 Javax.servlet이나 javax.servlet.http 패키지의 클래스와 인터페이스를 사용해 만듬.

-javax.servlet 패키지는 프로토콜에 독립적인 서블리시을 만들기 위한 클래스를 제공하고,

-javax.servlet.http패키지는 HTTP 프로토콜의 고유한 기능(GET,POST 등)을 제공하는 서블릿을 만드는 클래스를 제공

-모든 서블릿은 javax.servlet.Servlet 인터페이스를 구현해서 생성해야함.

-이 인터페이스는 서블릿을 직접 생성할 수 없기 때문에 하위 클래스인 javax.servlet.GenericServlet 또는 javax.servlet.http.HttpServlet 클래스 중 하나를 상속받아 작성

-프로토콜에 독립적인 서블릿은 GenericServlet 클래스를 상속받아 작성하고, HTTP 서블릿은 HttpServlet 클래스를 상속받아 작성함.

-자바 applet처럼 서블릿도 main()메소드를 갖지 않는다.

서블릿의 특정 service()메소드가 호출되어 사용자의 요청을 처리함.

-프로토콜에 독립적인 generic 서블릿은 요청을 처리하기 위해 service()메소드를 재정의해야함

-service()메소드는 request객체와 response객체를 매개 변수로 가진다.

-requset객체는 클라이언트의 요청을 처리, response객체는 그 요청을 처리한 결과를 클라이언트에 반환하기 위해 사용.

-HTTP 서블릿은 일반적으로 service()메소드를 재정의하지 않음.

-대신에 GET 요청을 다루기 위해 doGet()메소드를, POST요청을 다루기 위해 doPost()메소드를 재정의함.

-javax.servlet 패키지 안에 있는 ServletRequest와 ServletResponse 클래스는 제너릭 서블릿의 request와 response에 대한 접근을 제공하는 반면, javax.servlet.http 패키지안에 있는 HTTPservletRequest와 HttpServletResponse 클래스는 HTTP요청과 응답에 대한 기능을 제공.

 

-HTTP 서블릿의 요청과 응답 과정

1.클라이언트의 서비스 요청→객체 생성의 유무 체크:only one

2.Yes면 생성 안 함, no면 객체 생성(메모리에 올린다)

3.Invoker를 실행, thread를 하나 만듦-작업용 request당 1개씩

4.Invoker에서 생성된 thread에서 service 메소드(response의 내용이 담김) 호출.

thread의 run 메소드와 유사, 클라이언트당 1개씩 생성

5.결과를 클라이언트에게 보냄. 이때 결과를 mime type으로 보내는데 웹 브라우저의 mime type은 text/html임

 

container는 객체 생성의 유무를 체크해서 객체가 없으면 생성하는 역할을 함.

 

-서블릿의 요청과 응답의 과정에서 containter가 하는 일의 순서

1.객체의 유무를 판단, 없으면 생성

2.thread 생성

3.service()호출

4.service()(Httpservlet class의 메소드)가 doGet()자동 호출

 

-서블릿의 요청과 응답의 과정에서 service()메소드가 하는 일의 순서

1.Request가 올 때마다 doGet()을 호출

2.doGet()은 HttpServlet에 의해 지원 받는 메소드 중 하나로 요청을 처리

 

 

 

※ DD(Deployment Descriptor : 배포서술자)를 살펴보기 전에 자바 개발환경에서의 약속된 폴더구조를 알아보자.>>> eclipse 개발환경에서의 폴더구조

 

 

① 서블릿파일들을 소스형태로 저장한다. 주로 비지니스로직을 구현한다.
② 서블릿파일들이 빌드되어 class형태로 자동 생성된다.
③ 사용자에게 보여지는 부분을 html로 구성한다.
④ 배포서술자는 없어서는 안되는 파일이다.
⑤ 개발시 사용될 라이브러리들을 다운받아 추가하고 사용한다.

>>> Tomcat 서비스 환경에서의 폴더구조

 

 

서비스 환경에서는 소스파일은 필요가 없고 빌드된 형태로 WEB-INF/Classes 폴더에 존재하게 된다.


●DD(Deployment Descriptor : 배포서술자)는 WEB-INF폴더 아래 web.xml이라는 파일명으로 항상 존재해야 하며 서버 시작시 메모리에 로딩된다. 클라이언트 요청에 대해 컨테이너는 DD를 참조하여 해당 서블릿에 맵핑시켜 준다. 또한 DD는 다음의 여러가지 환경정보를 설정할 수 있도록 한다.- ServletContext 설정 - Session이 유지되는 시간 설정 - Servlet/JSP에 대한 정의 - Servlet/JSP 매핑 - Mime Type 매핑 - Welcome File list - Error Pages 처리 - 리스너/필터 설정 - 보안설정 (에러처리)

728x90

댓글