출처 : http://round1tko.tistory.com/64




웹 서버와 WAS(Web Application Server)의 정의 ]

웹서버와 WAS는 비슷한 개념이기 때문에 같이 또는 다르게 사용되는 단어 가운데 하나이다. 인터넷 확산 초기에는 웹서버라는 개념으로 통칭해서 사용했지만, 시간이 지남에 따라 WAS를 더 많이 사용하고 있다. 인터넷 사용자가 증가함에 따라, 각 웹 사이트는 보다 많은 사용자에게 원활한 서비스를 제공하기 위해 기능적인 layer를 나누게 되었고 여기서 웹서버와 WAS의 구분점이 생기게 된 것이다.

기능적으로만 본다면, 거의 대부분의 웹 서버가 웹 애플리케이션을 동작시킬 수 있겠지만 모두 웹 서버 혹은 WAS라고 부르는 것보다는 어떤 기능을 수행하는지에 따라, 즉 기능상의 분류를 통해 구분지어 사용해야 할 것이다.

 

구분

웹서버

WAS

설명

1. 웹브라우저(Web Client)에게 컨텐츠를 제공하는 서버이다.  정적인 HTML이나 jpeg, gif같은 이미지를 HTTP 프로토콜을 통해 웹 브라우저에 제공한다.


2. 
최근에는 웹서버에서도 내부 애플리케이션을 동작시킬 수 있는 컨테이너를 내장하고 있다.

서버단에서 애플리케이션을 동작할 수 있도록 지원한다. 일반적으로 컨테이너라는 용어로 쓰인다. 초창기에는 CGI, 그 이 후에는 Servlet, ASP, JSP, ASP, PHP등의 프로그램으로 사용되고 있다.

 

 

[ 웹 서버와 WAS(Web Application Server)의 구성에 따른 분류 ]

 

1.     기본적인 웹 사이트 구성

  

<그림 1> 웹 사이트의 가장 기본적인 구성 환경이다. 모든 콘텐츠를 한 곳에 집중시켜 웹 서버와 WAS의 역할을 동시에 수행한다. 사용자가 많지 않거나 트래픽이 적을 때 효율적이며 간단한 구조로 개발 및 테스트 시스템 구성시 활용의 가치가 높다.

 

장점 : 사용자 증가에 따라 스위치 장비를 통해 로드 밸런싱을 수행하고, 여러대의 WAS를 통해 지원이 가능하다. 필요시에 추가로 WAS를 증설하는 구조라고 볼 수 있다.

단점 : WAS가 정적인 데이터(HTML/Image)의 처리와 동적인 데이터(웹 애플리케이션)의 처리를 동시에 수행하기 때문에 최적화 측면에선 바람직하지 않다. 또한 정적데이터의 입출력 처리를 위해 웹 애플리케이션의 수행을 방해할 수 있고, 그 반대의 경우도 있다.

 

2.     웹 서버와 WAS로 구성된 환경

 


 
<그림 2>는 웹 서버와 WAS의 기능적 분류를 통해 효과적인 분산을 유도한 형태이다. 정적인 데이터는 구조적으로 앞에 존재하는 웹 서버에서 처리하고, 동적인 데이터는 뒷단의 WAS가 처리한다.

사용자의 요청에 대해서 정적 데이터인 HTML과 자바스크립트 파일, CSS, Image 등을 앞단의 웹 서버에 위치시켜 처리함으로써 WAS로 서비스 요청이 넘어가지 않게 한다.

또한 웹 애플리케이션 서비스를 위치적으로 뒤편에 존재하는 WAS에 넘겨줌으로써 WAS는 웹 애플이케이션의 수행이 집중할 수 있다.

웹 서버 단에서 처리할 것과 WAS에게 넘겨질 것을 처리하는 방식은 웹 서버 단의 Configuration을 통해 처리할 수 있다. 특정 확장자나 디렉토리 업무를 WAS로 넘길지 여부는 웹 서버 단에서 처리한다.


 

3.     특정기능에 대한 서버를 별도로 두고 있는 환경


 

점점 화려해지는 UI를 자랑하는 페이지들이 많아짐에 따라 이미지의 비중이 증가하고, 이런 이미지들이 전체 네트워크 비중의 상당부분을 차지한다. 따라서 이미지 서버를 따로 구성해 네트워크 비중도 줄이면서 웹 서버와 WAS를 좀 더 효과적으로 사용할 수 있는 구조라 할 수 있다.

또는 특정 콘텐츠에만 집중적인 요청을 받는 경우도 있다. 예를 들어, 대학 입시 때 경쟁률 조회는 상당히 많은 사용자에 의해 조회가 되고, Reload 또한 빈번하게 일어나므로 특정시간 간격으로 HTML을 생성하고, 페이지를 특정 서버에 위치시켜 적절하게 부하를 분산시켜 해결이 가능하다.

 

장점 : 다양한 환경에 대한 대처가 빠름

 

단점 : 구조를 정확하게 이해하지 않았을 경우에는 개발 및 테스트에 많은 시간이 쓰임

  

 

4.     WAS단을 Logic으로 구분하여 구성

 

      

 

        <그림 4> <그림 2>의 변경된 형태이다. WAS단의 프로그램이 많은 비중을 차지하는 경우, Presentation Logic을 담당하는 프로그램과 Business Logic을 담당하는 프로그램을 구분하는 구성이다.이런 구성은 특정 로직 부분의 부하에 따라 적절한 대응을 할 수 있으나 구조가 복잡해지는 단점이 있다.

  

 

[ WAS 관련 용어 정의 ]

 

1.     자바 서블릿(Java Servlet)

자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히서블릿이라고 한다.

        자바 서블릿은 Java EE사양의 일부분으로, 주로 이 기능을 이용하여 쇼핑몰이나 온라인 뱅킹 등의 다양한 웹 시스템이 구현되고 있다.

        비슷한 기술로는 펄 등을 이용한 CGI, PHP를 아파치 웹 서버 프로세스에서 동작하게 하는 mod_php, 마이크로소프트사의 IIS에서 동작하는 ASP 등이 있다. CGI는 요청이 있을 때마다 새로운 프로세스가 생성되어 응답하는 데 비해, 자바 서블릿은 외부 요청마다 프로세스보다 가벼운 쓰레드로써 응답하므로 보다 가볍다. 또한 자바 서블릿은 자바로 구현되므로 다양한 플랫폼에서 동작한다.

 

2.     엔터프라이즈 자바빈즈(Enterprise JavaBeans, EJB)

EJB는 기업환경의 시스템을 구현하기 위한 서버측 컴포넌트 모델이다. , EJB는 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션이다. EJB사양은 Java EE의 자바 API중 하나로, 주로 웹 시스템에서 JSP는 화면 로직을 처리하고, EJB는 업무 로직을 처리한다.

EJB의 종류는 세션 빈(Session Bean), 엔티티 빈(Entity Bean), 메시지 구동 빈(Message-driven Bean)이 있다.

 

3.     자바 메시지 서비스(Java Message Service, JMS)

JMS는 자바 프로그램이 네트워크를 통해 데이터를 송수신하는 자바 API이다.

 

4.     자바 가상 머신(Java Virtual Machine, JVM)

JVM 자바 바이트코드를 수행할 수 있는 환경이다. 자바 바이트코드는 주로 자바를 컴파일하여 생성하지만, 다른 언어의 컴파일러에서도 생성할 수 있다. 자바 가상 머신은 자바 플랫폼의 기반을 이루며 다양한 하드웨어 기반 플랫폼에 포팅된다. JVM 자바 플랫폼의 주요한 부분이며 마이크로소프트 윈도(95/98/NT), 리눅스, 유닉스,  오에스  등 대부분의 운영체제는 물론, 인터넷 익스플로러와 넷스케이프 등과 같은 웹 브라우저 등 여러 가지 플랫폼에 설치되어 사용될 수 있으며, 휴대전화나 가전기기에도 설치할 수 있다. 따라서 자바 플랫폼은 여러 플랫폼을 지원하여 미들웨어로서의 역할과 플랫폼 스스로의 역할을 동시에 수행할 수 있다. 사용자는 자바 바이트코드로 컴파일된 자바 프로그램을 실행시키기 위해서 이 자바 가상머신을 이용하면 된다.

원 개발사인 썬 마이크로시스템즈에서 자바 가상 머신의 기준이 되는 표준판(Java SE) 과 표준판을 핸드폰이나 PDA 등 임베디드 기기용인 축소판(Java ME) 으로 구분하여 가상 머신을 배포하고 있다. 기업판(Java EE)의 경우에는 표준판의 자바 가상 머신을 기반으로 확장된 라이브러리 집합을 정의한 것이기 때문에 자바 가상 머신의 종류로 분류하기 애매하다.  마이크로시스템즈에서 제공하는 자바 가상 머신 말고도 각 운영체제 개발사가 제공하는 자바 가상 머신이 있으며, GNUGCJ 아파치 소프트웨어 재단(ASF: Apache Software Foundation) 하모니(Harmony)와 같은 오픈 소스 자바 가상 머신도 존재한다. 이러한 공개 소프트웨어 단체의 움직임에 따라 썬 마이크로시스템즈에서도 자사의 자바 가상 머신 및 개발 도구 킷을 오픈 소스 정책에 맞추어 공개한 상황이다.

 

5.     힙 메모리(heap memory)

프로그램을 사용할 수 있는 자유 메모리. 프로그램 실행 시에 함수로 보내는 데이터 등을 일시적으로 보관해 두는 소량의 메모리와 필요시 언제나 사용할 수 있는 대량의 메모리가 있다. 이때, 소량의 메모리를 스택이라 하고 대량의 메모리를 이라 한다.  이 없어지면 메모리 부족으로 이상 종료하게 된다.

 

6.     자바 서버 페이지(JavaServer Pages, JSP)

HTML내에 자바 코드를 삽입하여  서버에서 동적으로 웹 페이지를 생성하여  브라우저에 돌려주는 언어이다. Java EE 스펙 중 일부로  애플리케이션 서버에서 동작한다. 자바 서버 페이지는 실행시에는 자바 서블릿으로 변환된 후 실행되므로 서블릿과 거의 유사하다고 볼 수 있다. 하지만, 서블릿과는 HTML 표준에 따라 작성되므로 웹 디자인하기에 편리하다. 이와 비슷한 구조인 것인 PHP, ASP, ASP.NET 등도 있다. 아파치 스트럿츠 자카르타 프로젝트 JSTL 등의 JSP 태그 라이브러리를 사용하는 경우에는 자바 코딩없이 태그만으로 간략히 기술이 가능하므로 생산성을 높일 수 있다.

클라이언트에서 서비스가 요청되면, JSP의 실행을 요구하고, JSP  애플리케이션 서버의 서블릿 컨테이너에서 서블릿 원시코드로 변환된다. 그 후에 서블릿 원시코드는 바로 컴파일된 후 실행되어 결과를 HTML 형태로 클라이언트에 돌려준다.

 

7.     Java Database Connectivity(JDBC)

자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다. JDBC Java로 작성된 프로그램을, 일반 데이터베이스에 연결하기 위한 응용프로그램 인터페이스 규격입니다. 이 응용프로그램 인터페이스는 데이터베이스 관리 시스템에 넘겨질 SQL 형태의 데이터베이스 접근요구 문장을, 각 시스템에 맞도록 바꾸어준다. API는 동적으로 올바른 Java 패키지를 로드하고, JDBC 드라이버 매니저에 등록하기 위한 메커니즘을 제공합니다. 드라이버 매니저가, JDBC connection을 생성하기 위한 connection factory로서 사용됩니다.

 

8.     Java Management eXtensions(JMX)

응용 프로그램 소프트웨어/객체/장치 (프린터 등) 및 서비스 지향 네트워크 등을 감시 관리를 위한 도구를 제공하기 위한 자바 API이다. 이러한 리소스는 MBean(Managed Bean)이라는 객체로 표현된다.

 

9.     Java Naming and Directory Interface(JNDI)

디렉터리 서비스에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup)하기 위한 자바API이다.



'프로그래밍 > 웹 프로그래밍' 카테고리의 다른 글

HTML 기초  (0) 2016.02.21
비즈니스 로직(Business logic)?  (0) 2016.02.14
웹서버(Web Server) / 웹 서버 어플리케이션(WSA)  (0) 2016.02.14
웹 프로그래밍 기초  (0) 2016.02.14
ASP(Active Server Page)  (0) 2016.01.28
IIS란?  (0) 2016.01.25
Posted by GENESIS8

댓글을 달아 주세요


출처 : 

http://webcache.googleusercontent.com/search?q=cache:http://kbp.kongju.ac.kr/cg_edu/cnu/web_server_basic.htm&gws_rd=cr&ei=7fK_Vu-JJqiHmgWGq43oAg


http://j2enty.tistory.com/entry/JSP-Chapter1-%EC%9B%B9-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EA%B8%B0%EC%B4%88-2



 웹 서 버   구 축 을   위 한   기 초


웹서버(web Server)란 : 웹서버 간단히 웹을 서비스하는 컴퓨터라고 할 수 있다. 웹페이지는 HTML이므로 웹서버는 "HTML파일들을 모아놓고 서비스하는 컴퓨터"라고 할 수도 있다.  모든 컴퓨터는 서버가 될 수 있으므로 웹 서버가 될 수도 있지만, 어떤 컴퓨터를 웹 서버로 만드려면 먼저 웹 서버 프로그램을 설치해야 한다. 웹 서버 프로그램으로는 PWS, IIS, 아파치 등이 있다.


웹 클라이언트(Web Client)란 : 서버와는 상대되는 개념으로 클라이언트는 어떤 서비스를 요청하는 역할을 하게 된다. 그러므로 웹 클라이언트는 "웹 서버에 자료를 요청하기 위해 "HTTP"를 사용하는 클라이언트 프로그램"이라고 할 수 있다.  웹 페이지를 요청하는 것도 클라이언트라고 할 수 있다. 그런데 웹 페이지 요청은 대부분 웹 브라우저가 하게 된다. 그러므로 일반적으로 웹 클라이언트를 웹 브라우저라고 일컫기도 한다.  


서버 사이드(server Side)란 : 서버사이드(Sever-Side)란 간단히 "웹 서버측에서 하는 작업들"이라고 말할 수 있다.  여기서 말하는 작업이란 구체적으로 웹 브라우저(클라이언트)에서 넘어온 자료를 데이터베이스에 저장 한다든지, 어떤 수학적인 계산을 하여 결과를 만들어 낸다든지 하는 것을 말한다. 이런 작업을 담당하는 것이 웹 프로그램이다. 웹 프로그램의 종류는 PHP, ASP, Perl, Python등이 많이 쓰인다.


클라이언트 사이드(Client Side)란 : 웹 브라우저(클라이언트 사이드)를 사용하면 서버의 작업량을 줄일 수 있다. 서버가 작업해야 할 부분중에서 클라이언트가 할 수 있는 작업을 스스로 처리하기 때문에 서버의 작업량을 줄여줄 수 있어 효율적이다. 이렇게 "클라이언트 스스로 일을 처리할 수 있도록 하여 서버의 효율성을 높일 수 있도록 하는 것"이 클라이언트 사이드 언어이다.  클라이언트 사이드 언어로는 자바스크립트(Java Script)와 이외의 대부분의 스크립트 언어가 있다. 플래시 액션(Action) 스크립트도 클라이언트 사이드 언어라고 할 수 있다. 이런 스크립트 언어는 웹 서버에서 웹 브라우저로 전송된 후 실행된다.



■ 계열별 웹서버의 종류

- Windows : IIS, PWS, httpds, NCSA httpd For Windows, SerWeb, Web4Ham

- Unix, Linux : Apache, CERN httpd, NCSA httpd, EIT httpd, GN Gopher/http, Plexus perl server, WebWorks Enterprise server,

  Netsite Communication Server and Netsite Commercial Server

- Mac : MacHTTP

- NETWare : httpd nlm



■ 각 계열별 대표적인 웹서버

- Windows 계열 : IIS(Internet Information Services)

NT급에서 기본적으로 지원되는 웹서버로 ASP(Active Server Page)라는 개발 언어를 지원한다. 1995년 말 윈도우 NT용 웹서버로 출시 되었으며 윈도우 4.0이 출시되면서 IIS 2.0을 기본적으로 탑재 하였지만 얼마 후 ASP기술이 나오면서 IIS3.0이 새로 출시되었다. 윈도우 NT에서 IIS3.0이상 버전을 설치하기 위해서 별도의 OPTION PACK과 SERVICE PACK을 설치해 주어야 한다.

Windows 2000서버 및 Windows XP Pro에는 IIS 5.0이 포함되어있다.

- Unix, Linux 계열 : Apache, NCSA

아파치 프로젝트의 시작은 처음 1995년경 대중의 사랑을 받던 NCSA의 개발자중 일부가 모여 시작 했습니다. 이것을 시발로 NCSA HTTPD 개발자와 아파치 개발자들이 합류되고 이전에 만들어졌던 아파치 0.6.2를 완전히 개선한 0.8.8을, 그리고 아파치 1.0을 1995년10월에 만들어 냈습니다. 현재(2000년기준)는 60%이상의 사용자를 확보 하고 있다.


■ 웹서버 구축에 필요한 것들 (PHP, APACHE, MySQL)

- PHP(Professional HyperText Preprocessor) : 서버에서 해석되는 HTML에 내장되어 동작하는 스크립트 언어이다.  C, Java, Perl 등에서 많은 문장 형식을 빌려왔으며 웹 브라우저 등으로 실제 코드를 볼 수 없다는 것에 보안상 유리한 점도 있습니다. PHP와 ASP는 근본적으로 서버용 객체 지향적인 스크립트 언어라는 점에서 같지만, ASP의 경우 IIS, PWS와 같은 윈도우 환경에서 움직이는 서버를 지원하는데 반해 PHP는 Apache, IIS, PWS, 서버 등과 유닉스 윈도우 환경에서 움직이는 모든 서버를 지원합니다.

- APACHE : 대중의 힘을 바탕으로 가장 큰 인지도를 얻을 만큼 사용자가 이끌어 가는 무료 웹 서버입니다.

- MySQL : 무료 데이터베이스(DB)

 


웹 프로그래밍 기

1. 웹 어플리케이션과 웹 프로그래밍
 -.웹 어플리케이션 : 웹을 기반으로 실행되는 어플리케이션
 -.일반적으로 웹 브라우저에 기능을 요청하고 요청을 받은 웹 어플리케이션은 요청한 기능에 알맞은 결과 화면을 생성해서 웹   브라우저에 전송한다. 일반적으로 웹 브라우저가 요청한 기능을 제공하기 위해서는 웹 서버, 어플리케이션 서버, 데이터   베이스 와 같은 구성요소들을 필요로 한다. 



-.웹 서버 : 웹 브라우저의 요청을 받아 알맞은 결과를 웹 브라우저에 전송한다. 만약 프로그램의 처리가 필요하다면 어플리케이션 서버를 사용하거나 프로그램을 직접 호출하여 결과를 생성한다. 주로 정적인 HTML, CSS, 이미지 자바 스크립트를 웹 브라우저에 제공할 때 웹 서버가 사용된다. (아파치)

// IIS 등.
-.웹 어플리케이션 서버 (WAS): 게시글 목록, 로그인 처리와 같은 기능을 실행(처리)하고 그 결과를 응답으로 웹 서버에 전달한다.  (톰캣, 웹로직, JBoss 등) // ASP 등이 포함됨
-.데이터베이스 : 웹 어플리케이션이 필요로 하는 데이터를 저장한다. (오라클, MySQL, MS-SQL 등)
-.웹 브라우저 : 웹 서버에 서비스 실행을 요청하며 웹 서버의 처리 결과를 사용자에게 보여준다. (익스플로러, 크롬 등) 


 -.어플리케이션 서버도 웹 서버와 마찬가지로 정적인 HTML, CSS 등을 제공할 수 있다. 하지만 웹 서버에서 정적인 HTML, 이미지 등을 제공하고 어플리케이션 서버가 프로그램을 제공하는 이유는 성능 때문이다. 일반적으로 아파치와 같은 웹 서버는 정적인 HTML, CSS를 제공하는데 초점이 맞춰져 있고, 톰캣이나 웹 로직과 같은 어플리케이션 서버는 JSP, 서블릿과 같은 프로그램을 실행하여 결과를 제공하는 데 초점이 맞춰저 있기 때문이다.

1.1 CGI방식과 어플리케이션 서버 방식
 -. 웹 어플리케이션은 웹 브라우저의 요청을 알맞게 처리하고 그에 대한 결과를 웹 브라우저에 전달한다. 웹 어플리케이
션이 실행되는 과정은 아래의 그림과 같다. (요청-처리-응답)


 위 그림의 2번에서 웹 서버는 웹 어플리케이션 프로그램을 사용해서 우베 브라우저의 요청을 처리한다. 이 때 웹 서버가 웹 어플리케이션을 실행하는 방식에 따라서 CGI방식, 어플리케이션 서버 방식으로 동작방식을 구분할 수 있다.
(Common Gateway Interface, CGI : 웹 서버와 프로그램 사이에 정보를 주고받는 규칙을 의미. 흔히 CGI 프로그래밍이라고 하면 Perl, C/C++언어 등을 사용하여 웹 서버를 통해서 실행할 수 있는 프로그램을 의미한다.)

 CGI 방식과 어플리케이션 서버 방식간의 차이점웹 서버가 직접 프로그램을 호울하는지의 여부에 있다. 먼저 CGI방식은 웹 서버가 어플리케이션을 호출하는 구조를 갖는다. 이에 반해 어플리케이션 서버 방식은 웹 서버가 직접 프로그램을 호출하기보다는 웹 어플리케이션 서버를 통해서 간접적으로 어플리케이션 프로그램을 실행한다.
 접속자가 많은 서비스의 경우 CGI방식보다 어플리케이션 서버 방식의 성능이 좋게 나타난다. 그 이유는 CGI방식의 경우에는 요청 받은 기능이 같은 프로그램을 실행하는 경우라 하더라도 요청이 발생하는 숫자만큼 프로그램을 실행하기 때문에 메모리를 많이 차지하게 된다. 반면에 어플리케이션 서버방식의 경우에는 동시에 여러 웹 브라우저가 동일한 프로그램을 요청하더라도 한 개에 해당하는 메모리만 사용하기 때문에 전체적으로 사용하는 메모리가 적다. 
 
1.2 스크립트 방식과 실행 코드 방식
 웹 어플리케이션 프로그래밍은 구현하는 방식에 따라 실행 코드 방식과 스크립트 방식으로 구분할 수 있다. 

비교 항목 실행 코드 방식 스크립트 방식 
코드 형태  컴파일 된 실행 프로그램  컴파일 되지 않은 스크립트 코드 
실행 방식 컴파일 된 기계어 코드 직접 실행  스크립트 코드를 해석한 뒤 실행 
코드 변경  소스 코드를 다시 컴파일 해야 함  스크립트 코드만 고치면 됨 
종류  C기반 CGI 프로그램 JSP, ASP.net, PHP, Ruby ... 



-.스크립트 코드의 번역은 최초 요청에 대해서 한 번만 발생하며, 이후의 요청에 대해서는 번역 과정 없이 앞서 번역된 코드를 실행하도록 함으로써 번역 횟수를 최소화한다.
-.실행코드 방식의 경우 일반적으로 CGI방식이고 스크립트 코드 방식인 JSP나 ASP는 어플리케이션 서버 방식이기 때문에 전체 처리량에서는 JSP/ASP 기반의 스크립트 코드 방식이 앞선다.
-.기술의 발달로 스크립트 언어를 번역한 코드가 일반 프로그램과 동일한 수준의 성능을 제공하고 있다. 




2. URL과 웹 어플리케이션 주소
 -.사이트에 연결할 때 다음과 같은 형식의 주소를 웹 브라우저에 입력한다.
  이 주소는 자원을 구분할 때 사용되는 문자열로서 이런 문자열을 URL(Uniform Resource Locator)라고 부른다.

http://java.sun.com/javase/6/docs/api./index.html

[프로토콜]://[호스트][:포트][경로][파일명][.확장자][쿼리문자열] 

-.프로토콜 : 서버와 클라이언터의 통신 규약(http. https)
-.호스트 : 클라이언트가 접속할 서버 주소
-.포트 : 서버와 클라이언트가 통신할 때 사용할 포트. 일반적으로 입력하지 않으며 입력하지 않을 경우 기본포트(80)이 사용
-.[경로][파일명][.확장자] : 서버에서 가져올 자원의 위치를 입력하낟. 
-.[쿼리문자열] : 주소 뒤에 붙는 정보로 '파라메터'라고 불리는 데이터를 웹 어플리케이션에 전달할 때 사용된다. [쿼리문자열]은 물음표(?)를 이용하여 경로 부분과 구분되며 1개이상의 파라메터 이름과 값을 같는다. 



3. 자바와 웹 프로그래밍
3.1 서블릿과 JSP
 -.서블릿 : 자바를 개발한 Sun에서 웹 개발을 위해 만든 표준, 이러한 서블릿 규약에 따라 만든 클래스를 서블릿 이라 부름
 -.서블릿을 만들기 위해선 자바 코드를 작성하고 컴파일 하여 클래스 파일을 만들게 된다.(앞서 말한 실행코드 방식) 이런 방식은 데이터를 조금만 바꾸고 싶어도 코드를 수정하고 컴파일하고 클래스를 알맞는 곳에 복사해줘야 하는 작업을 해야한다.

 -.JSP : 위와 같은 서블릿의 단점을 보완하여 만든 스크립트 방식의 표준
 -.JSP는 서블릿 표준을 기반으로 만들어졌다. 때문에 내부적으로 JSP파일이 변역되면 최종 결과물로 서블릿이 만들어진다. 

3.2 JSP (JavaServer Pages) 란?
 -.자바 언어를 기반으로 하는 스크립트 언어로 자바가 제공하는 기능을 그대로 사용 할 수 있다.
 -.HTTP와 같은 프로토콜에 따라 클라이언트의 요청을 처리하고 응답한다.
 -.HTML, XML등 클라이언트가 요청한 문서를 생성하는 데 주로 사용된다.
 -.서블릿/EJB등의 엔터프라이즈 기술들과 잘 융합된다.
 -.표현언어, 표현식, 스크립트릿 등 다양한 스크립트 요소와 액션 태그 등을 제공함으로써 보다 쉽게 웹 어플리케이션을 프로그래밍 할 수 있도록 도와준다.

3.3 웹 컨테이너(Web Container)
 -.웹 컨테이너 : 이름 그대로 웹 어플리케이션을 실행 할 수 있는 컨테이너.
 

JSP 컨테이너 + 서블릿 컨테이너 = 웹 컨테이너

현재 서블릿 규약의 버전은 2.5이고, JSP 규약 버전은 2.1이다. 이 두 규약의 버전 차이에서 알 수 있듯이 서블릿 규익이 먼저 발표되고 그 후 JSP규익이 발표되었다. 처음 서블릿 규약이 발표되었을 때는 JSP가 존재 하지 않았기 때문에 서블릿이 실행 가능한 서버를 서블릿 컨테이너라고 불렀으며 이후 JSP 규약이 발표될 때는 서블릿과 구분하는 의미에서 JSP가 실행 가능한 서버를 JSP 컨테이너 라고 불렀다. 하지마 이 후 거의 모든 엔진이 서블릿과 JSP를 동시에 지우너하면서 이 두 컨테이너를 구분하는게 무의미 해졌으며, 이 후 부터는 서블릿 컨테이너와 JSP 컨테이너를 웹 컨테이너 라고 부르기 시작했다.


3.4 JSP를 사용하는 이유

-.자바 언어를 기반으로 하고 있기 때문에 플랫폼에 상관없이 사용할 수 있다.
-.자바 언어에 대한 깊은 이해가 없더라도 빠르게 배울 수 있다.
-.대규모 어플리케이션을 구현 할 때 사용되는 스프링, 스트럿츠와 같은 프레임워크와 완벽하게 연동되며, 금융권에서 많이 사용하는 EJB기술과도 완벽하게 연동된다. 






'프로그래밍 > 웹 프로그래밍' 카테고리의 다른 글

HTML 기초  (0) 2016.02.21
비즈니스 로직(Business logic)?  (0) 2016.02.14
웹서버(Web Server) / 웹 서버 어플리케이션(WSA)  (0) 2016.02.14
웹 프로그래밍 기초  (0) 2016.02.14
ASP(Active Server Page)  (0) 2016.01.28
IIS란?  (0) 2016.01.25
Posted by GENESIS8

댓글을 달아 주세요

http://chaoxifer.tistory.com/82


저도 스트림에 대해 그다지 알고 있다는 생각은 들지 않지만 그래도 전혀 모르는 미로인을 위해 약간 적어 보려고 합니다.

프로그램을 실행 할때 키보드를 통해서 입력을 하고, 모니터를 통해서 출력을 하고 있죠? 우리는 별다른 무리 없이 간단하게 입출력을 합니다. 생각을 해보면 키보드에서 입력을 받고, 하드웨어적인 부분을 처리하여야 입력이 되고 화면으로 출력이 되겠죠? 예로 A라는 문자를 눌렀다고 가정해 봅시다. 그러면 키보드에서 신호가 나갈것이고, 그것을 컴퓨터에서 처리하여, 출력 장치인 모니터로 신호를 보내 결과적으로 화면에 A라는 문자가 찍힐것입니다.


그러나, 우리는 이렇게 하드웨어적인 세세한 부분까지 신경을 쓰지는 않습니다. 입출력을 도와주는 스트림( Stream )이란 녀석이 있기 때문이죠.


스트림을 사용하는 입출력 장치( Input/Output Device )는 많죠. 조금 전 예로든 키보드나 모니터 뿐만 아니라 파일, 프린터, 마우스, 네트워크, 메모리 등등 많은 입출력 장치에서 쓰입니다. 물론 스트림의 종류도 입출력 장치의 종류만큼 다양합니다. 파일에 데이터를 쓰고 싶다고 한다면 파일관련 스트림을 찾아서 목표지점으로 삼을 것입니다. 목표지점이란 입력 스트림의 경우 입력받을 데이터가 위치 하는 곳을 말하고, 출력 스트림의 경우 데이터가 저장될 곳을 말합니다.

입출력 장치에 데이터를 입력하거나 출력하는 처리를 하기 위해 스트림이 존재 한다고 했었습니다. 스트림은 방향에 따라 2가지로 나눌수 있는데, 사용자의 입장에서 데이터가 들어오면 입력 스트림( input Stream )이고, 데이터가 나가면 출력 스트림( Output Stream )이 됩니다.


입력 스트림은 데이터를 스트림으로 읽어 들입니다. 그리고 스트림에 존재하는 데이터를 하나하나 읽어들입니다. 예를 들어봅시다. 음료수가 있고, 거기에 빨대가 꽂혀 있네요. 빨대에 입을 갖다대고 쭉 빨아 당기면 음료수가 빨대에 모이게 되고, 계속 빨아 당기면 입안으로 음료수가 들어오게 됩니다.


출력 스트림은 출력될 데이터를 스트림으로 보냅니다. 그리고 스트림에 있는 데이터를 비워 버립니다. 비워진 데이터는 모두 목표지점에 저장이 되는 것 입니다. 위와 같은 예를 들자면, 입안에 들어 있던 음료수를 빨대로 보냅니다. 빨대로 가겠죠? 빨대에 있던 음료수를 불어 버립니다. (fflush) 음료수가 다시 음료수 통으로 들어 갑니다.


정리를 해보자면, 스트림은 데이터의 입출력 처리의 중간자 역할을 합니다. 데이터의 목표지점은 중요치 않습니다. 네트워크건 메모리건 프린터건 전혀 상관이 없습니다. 그저 해당되는 데이터를 스트림으로 읽어 들이거나 스트림으로 내보내면 끝인 것 입니다. 하드웨어적인 복잡한 작업은 스트림이 알아서 해주고 사용자는 편하게 사용만 하면 되는 것입니다

.



출처

http://www.ktword.co.kr/abbr_view.php?m_temp1=1311




1. 스트림(Stream) 이란? 일반적으로 데이터,패킷,비트 등의 일련의 연속성을 갖는 흐름을 의미 - 음성,영상,데이터 등의 작은 조각들이 하나의 줄기를 이루며 전송되는 데이터 열(列) . 호스트 상호간 또는 동일 호스트프로세스 상호간 통신에서 에 의한 메세지 전달방식을 이용한 가상 연결 통로를 의미하기도 함 2. 멀티미디어 스트리밍 기술전송 방식 구분 - 다운로드 방식 : 재생(Play) 전에 데이타를 완전히 다운로드 받는 방식 . (웹 서버)/HTTP/TCP/IP 상에서 동작 - 스트리밍 방식 : 데이타 수신과 동시에 재생. 사용자에게 동시성 제공. 실시간 전송기술 . (미디어 서버)/RTP/UDP/IP 상에서 동작 * [참고] . 비디오 파일 포멧 : 디지털 비디오 데이터를 저장,복원하기 위한 파일 포멧 .. 例) AVI, MKV, MP4, ASF, MOV, WMV 등 . 스트리밍 미디어 : 즉시 재생 가능 미디어 .. 전체 다운로드 없이도, 실시간 실행이 가능한 미디어를 말함 ㅇ 스트리밍 종류 - [RTP 스트림] 인터넷 스트리밍 프로토콜 . RTP/UDP/IP 패킷에 실릴 수 있도록 한 스트리밍 프로토콜 . 오디오,비디오 등의 정보를 담은 일련의 패킷화된 정보 앞에 RTP 헤더를 붙힌 스트림 - [MPEG 스트림] 주로, 디지털 방송용 스트리밍 프로토콜 . MPEG 다중화 방식에 의해 패킷 스트림화된 것 .. 인터넷 상에서는 MPEG 다중화 스트림이 RTP 스트림 위에 또한 실릴 수 있음 . MPEG 스트림 종류 .. PS(Program Stream), TS(Transport Stream), ES(Elementary Stream), PES(Packetized Elementary Stream) 등 ㅇ 스트리밍 관련 프로토콜 - 인터넷 실시간 미디어 흐름 및 제어 관련 프로토콜 . 물리적 정보의 빠른 흐름 및 제어 : RTP(빠른 수송) / RTSP(수송 제어) . 스트리밍 재생 제어 : RTSP(RTP 스트림 전반에 대한 제어) - 디지털 방송용 . 비디오 압축 전송프로토콜 : MPEG-2, H.264 등 . 음성 압축 전송용 프로토콜 : MPEG-2 오디오, AC-3 등 ㅇ 멀티미디어 스트림 재생 Player 例) - RealNetworks社의 RealPlayer, MS社의 Windows Media Player, Apple社의 QuickTime 등 3. 프로그래밍 언어상의 스트림C 언어에서 스트림 - 연속된 문자 또는 데이터 . 크게 텍스트(바이트) 스트림 및 바이너리(이진) 스트림으로 구분 - `ANSI C` 의 표준 파일 스트림 例 : stdin, stdout, stderr 등 ㅇ 스트림 사용 이유 - 물리 디스크상의 파일,장치들을 통일된 방식으로 다루기 위한 가상적인 개념 . 따라서, 스트림은 어디서 나왔는지 어디로 가는지 신경을 쓸 필요없이 자유롭게 어떤 장치 및 프로세스, 화일들과 연결될 수 있어 프로그래머에게 많은 편리성 줌

http://blog.lifeis.gift/101


입/출력은 소스를 제공하는 입력이나 목적지로의 출력을 의미합니다. 스트림은 디스크 파일이나, 장치, 다른 프로그램들, 그리고 메모리 배열들과 같은 많은 종류의 소스들과 목적지들을 표시 할 수 있습니다. 

스트림은 간단한 바이트나 primitive 데이터 타입, 글자들의 모음과 객체들과 같은 많은 종류의 다른 데이터를 지합니다. 어떤 스트림들은 단순히 데이터를 넘겨주는 역할만 합니다. 또 다른 스트림들은 유용한 방법들로 데이터를 변형하고 가공합니다.

내부적으로 어떻게 스트림들이 작동하는지는 중요하지 않습니다, 모든 스트림들은 같은 단순한 모델을 스트림을 사용하는 프로그램으로 표시합니다. 스트림은 데이터들의 연속입니다. 프로그램은 input stream을 사용하여 한개의 데이터를 동시에 소스로 부터 읽어들입니다.



결론적으로 스트림의 메모리가 어떻게 잡히는 지 라던가, 어떤 원리 라던가 같은 내부 구조에 대한 내용은 찾을 수 없었다. 좀 더 찾아봐야할 듯..







'프로그래밍 > 프로그래밍 공부' 카테고리의 다른 글

스레드(Thread)의 기본적인 특성  (0) 2016.02.15
프로세스(Process) , 스케쥴링(Scheduling)  (0) 2016.02.15
스트림(Stream)이란  (0) 2016.02.05
압축  (0) 2016.01.28
statement란?  (1) 2016.01.27
DAO / VO / DTO란?  (2) 2016.01.27
Posted by GENESIS8

댓글을 달아 주세요

http://hellogk.tistory.com/32


MySQL 시퀀스 생성 및 초기화하기

MySQL의 경우 시퀀스 생성이 간단합니다.

테이블 생성 시 auto_increment라는 속성을 시퀀스로 지정해줄 컬럼에 적용만 해주면 됩니다.

예를들어보도록 하겠습니다.


auto_increment를 적용한 임시 테이블생성

CREATE TABLE sequence_table(
   seq int auto_increment primary key,
   title varchar(20)
)

위와같이 임의의 테이블을 생성해보았습니다.



코드를 보시면 seq 컬럼에 auto_increment라는 속성이 지정되어있습니다.

INSERT 문을 통해서 title 컬럼만 데이터 추가를 해주면 알아서 seq 컬럼에는 1씩 자동증가하는 넘버가 부여가 됩니다.



한번 데이터를 삽입해보도록 하겠습니다.


INSERT 데이터

insert into sequence_table(title)
values('제목1');
insert into sequence_table(title)
values('제목2');


실행결과






title 컬럼만 insert함으로써 seq컬럼에 자동으로 1씩증가되어 등록이 되었습니다.

하지만 현재 상태에서 모든 데이터들을 삭제를 한다음에 다시 insert 쿼리를 시도 하게 된다면 

seq컬럼에 insert되는 데이터는 3부터 등록이 되게 됩니다.



하다가 실수로 시퀀스 값을 대입해서 넣어서 이전 자료와 격차가 생겨버렸다던가 할 때

다음의 방법으로 고친다.


http://www.cyberpr.co.kr/community/community.php?act=v&bid=database&seq=1052


MySQL 자동증가, auto increment 값 초기화 하기

 

※ 경고
높이뜬새의 모르는 사람이 없는 팁시리즈 입니다.
이 팁시리즈는 지면낭비라는 항의시에 즉각 중단됩니다.


테이블 생성시에 아래와 같이 auto_increment 라고 지정해주면 그 컬럼(필드)는 
자동 증가 값을 가지게 되는데요..

create table test_table (
idx int NOT NULL auto_increment,
name varchar(255),
... 블라 블라,
... 블라 블라,
... 블라 블라,  
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=euckr;


가끔은 이놈을 초기화 시켜야 할때가 있습니다. 초기화 시키기 위한 꼬라
지는 아래와 같습니다.

ALTER TABLE [테이블명] AUTO_INCREMENT=[시작할려는 순서]


예) test_table의 자동증가를 1부터 시작하게 초기화 
ALTER TABLE test_table AUTO_INCREMENT=1 

'프로그래밍 > MySQL' 카테고리의 다른 글

MySql DB 작성해보기  (1) 2016.03.13
MySQL 저장 프로시져 내에서 발생한 에러 처리 (Error Handling)  (0) 2016.02.23
MySql 설치하기  (0) 2016.02.21
Auto Increment란  (0) 2016.02.05
MySql 주석을 달자  (0) 2016.02.01
MY SQL 데이터 타입  (0) 2016.01.21
Posted by GENESIS8

댓글을 달아 주세요


#은 대상 줄을 주석화한다.


/* */ 는 /*에서부터 */까지를 주석처리한다.


'프로그래밍 > MySQL' 카테고리의 다른 글

MySql DB 작성해보기  (1) 2016.03.13
MySQL 저장 프로시져 내에서 발생한 에러 처리 (Error Handling)  (0) 2016.02.23
MySql 설치하기  (0) 2016.02.21
Auto Increment란  (0) 2016.02.05
MySql 주석을 달자  (0) 2016.02.01
MY SQL 데이터 타입  (0) 2016.01.21
Posted by GENESIS8

댓글을 달아 주세요