본문 바로가기
웹 프로그래밍 기초/자바기반의 웹&앱 응용SW 개발자

자바기반의 웹&앱 응용 SW개발자 양성과정 36일차 -57

by oncerun 2020. 4. 20.
반응형

우리는 자바를 통해서  프로그램을 만들 때 3가지의 기준이 존재합니다.

콘솔이냐, 웹이냐 윈도의 3가지의 UI가 존재하고 있으며 우리는 웹 기반의 프로그램을 만들기 위해 공부합니다.

그럼 콘솔, 웹, 윈도의 자바 기반의 프로그램의 차이는 무엇일까요?

바로 사용자의 입출력차이입니다.

사용자에게 보여주는 UI가 윈도냐 콘솔이냐 웹이냐 차이이다.

프로그램은 그대로이고 사용자의 UI차이만 존재할 뿐이다.

우리는 게임 프로젝트를 하면서 윈도 기반의 자바 프로그램을 만들어봤으며

콘솔 창으로 Input, OutputStream을 이용해 콘솔 기반의 프로그램 또한 만들어보았습니다.

웹 기반이라 하면 단지 웹 기반의 함수를 이용해 코드를 작성하기만 하면 됩니다.

 

웹 서버 프로그램이란

 

웹 프로그램 이전에는 윈도 기반과 콘솔 기반의 프로그램을 사용했는데 그 당시 환경을 살펴보면

사용자의 컴퓨터와 서버용 컴퓨터 두 개가 존재해 직접적으로 연결되었습니다.

사용자가 윈도 폼에 원하는 데이터를 요청하게 되면 DB에서 응답해 데이터를 보내주는 형식이었습니다.

 

왜 클라이언트 프로그램 /서버 프로그램을 나누었을까?

 

예를 들어 화장품 공장에서 모든 데이터들을 한 번에 관리를 하고 있었습니다.

그런데 마케팅 차원에서 강남에 본점을 새로 오픈하게 되었는데 본점에서는 공장에 있는 데이터가 필요합니다.

본점은 공장에다 정보를 요구해야 하고 공장은 정보를 제공해야 한다.

여기서 요청하는 쪽 본점은 클라이언트가 되며 응답하는 공장은 서버가 되어 둘로 나 누집니다.

본점은 사용자 환경 UI를 사용하는 것이며, 서버 쪽에서는 UI보다는 데이터베이스 업무 로직을 가지고 있습니다.

이러한 환경에서 프로그램이 목적에 따라 분리되게 되었습니다.

 

과거에서는 소켓을 이용해 클라이언트와 서버를 연결해주었습니다.

소켓이란 소프트웨어로 작성된 추상적인 개념의 통신 접속점이라고 할 수 있는데

네트워크 응용 프로그램은 소켓을 통하여 통신망으로 데이터를 송수신하게 됩니다.

소켓은 TCP/IP 기반을 이용해 응용 프로그램과 소켓 사이의 인터페이스 역할을 하고 있습니다.

 

직접적으로 클라이언트와 서버를 연결해 사용하다 보니 문제가 발생했는데 

클라이언트와 서버 프로그램의 문제는 데이터 전송에 대해 실패와 전송 과정에서도 문제가 있었다.

소켓으로 직접 설정해야만 했고 RPC 같은 마샬링 작업도 표준화, 플랫폼화 돼있는 방법을 사용해야 했다.

또 클라이언트 프로그램이 업데이트가 어려웠다.

서버를 업데이트했다면 클라이언트까지 재배포해야 하는 환경이었다. 

다시 설치하게 되면 기존 것이 삭제되거나 오류가 발생하는 일이 잦았다.

 

데이터가 아닌 문서를 전달하는 웹을 사용한다면?

웹은 이미 서버와 클라이언트 사이에서 문서 형태로 요청과 응답을 하고 있었는데 이 환경위에 데이터를 전송하는 방식을 적용시킨 것이 웹 서버이다.

브라우저는 서버에게 값을 전달할 수도 있었다 호스트 방식으로 서버 쪽은 데이터를 줄 수 있다. 단 문서로 준다.

데이터를 격자형으로 데이터를 목록으로 보내주기만 하면 된다

CS 프로그램을 웹이라는 환경을 사용하면 어떤 장점이 있을까?

CS가 미리 구축되어있는 웹을 이용하게 되면 CS 프로그램을 원활하게 이용할 수 있지 않을까 해서 시작했다.

우리가 HTML 파일을 보내는 방식으로 보낸 코드는 사실 실행코드를 보내게 된 것이다.

웹서버에다가 코드를 전달하면  요청된  코드의 실행결과를 응답하게 된다.

웹서버에 추가적으로 코드를 실행할 수 있도록 하는 실행환경을 설치하게 됩니다.

바로 WAS(Web Application Server )인데 HTTP를 통해 컴퓨터나 장치에 애플리케이션을 실행시켜주는 미들 웨어입니다.

WEB 서버는 HTTP 프로토콜을 이용해 읽힐 수 있는 HTML 문서 같은 정적 문서를 처리하기 위함이고

WAS는 사용자가 이벤트를 발생했을 때 동적으로 발생하는 콘텐츠, 웹 응용 프로그램 서비를 처리하는 기능이다

예전에는 기능이 나누어져 있었지만 요새 WAS는 WEB서버 기능을 포함하고 있다고 합니다.

동적 문서란 요청할 때 만들어지는 문서를 동적 문서라고 한다. 메모리 할당을 할 때도 프로그램이 시작되자마자 생성되는 것은 정적이고 프로그램이 실행될 때 할당하면 동적 메모리 할당이라고 한다.

 

보통 Apache로 웹서버를 담당하며, Tomcat은 WAS로 사용된다.

WAS는 WEB서버의 기능들을 구조적으로 분리하여 처리하고자 하는 목적으로 제시되었기에

WEB 서버의 기능과 컨테이너의 기능으로 구성된다. 여기서 컨테이너란

JSP와 Servlet을 실행시킬 수 있는 SW를 웹 컨테이너라고 합니다.

 

왜 그럼 WAS하나만 사용하지 않고 WAS와 웹서버를 동시에 사용할까?

개발자가 만드는 웹페이지에는 정적 콘텐츠와 동적 콘텐츠가 동시에 존재하게 된다

동시에 존재하는 콘텐츠를 분산 처리하기 위해서 동시에 사용하는 것이다.

 

구조는 사용자가 클라이언트에게 요청을 하게 되면 요청받은 데이터를 웹서버에 반응해서 WAS의 처리를 거친 다음 다시 웹서버에서 클라이언트에 응답하게 됩니다.

우리는 메모장과 컴파일러만 있으면 웹서버에 전송하는 코드를 만들 수 있다.

 

서블릿은 왜 서블릿인가??

 

우리가 톰캣 웹서버에서 웹페이지를 요청할 때 url이다.

get : /notice /list

get : /notice /reg

get : /notice /edit

get : /notice /del 

로써 요청을 하면 각 list, reg edit, del를 응답을 담당할 코드가 필요하다.

웹 서버는 전부 띄울 필요 없이 요청받은 목록을 출력하는 함수만 사용하면 된다.

우리는 웹서버의 특징을 이용하기 때문에 클라이언트가 서버에게 요청을 할 때만 연결이 되게 된다.

우리는 기능만 만들어 놓기만 하면 사용자가 요청할 때마다 서블릿을 제공해준다.

서버 애플리케이션을 조각조각해서 만들어지기 때문에 서블릿이라 명칭 한다.

 

서블릿의 구조는

  1. 사용자(클라이언트)가 URL을 클릭하면 HTTP Request를 Servlet Container로 전송합니다.
  2. HTTP Request를 전송받은 Servlet Container는 HttpServletRequest(요청), HttpServletResponse(응답) 두 객체를 생성합니다.
  3. web.xml은 사용자가 요청한 URL을 분석하여 어느 서블릿에 대해 요청을 한 것인지 찾습니다.
  4. 해당 서블릿에서 service메서드를 호출한 후 클리아 언트의 POST, GET여부에 따라 doGet() 또는 doPost()를 호출합니다.
  5. doGet() or doPost() 메서드는 동적 페이지를 생성한 후 HttpServletResponse객체에 응답을 보냅니다.
  6. 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킵니다.

web.xml이란?

개발자가 작성한 Sevlet코드가 저장되는 곳입니다.

톰캣을 다운로드하여 압출을 풀면 WEB-INF라는 폴더가 존재합니다.

우리가 배포할 때 WebContent 디렉터리 전체가. war로 묶어서 보내집니다.

WebContent 안에는 3가지의 폴더가 존재합니다.

1. lib : 추가한 모든 라이브러리 또는 드라이버가 이곳에 모두 저장됩니다.

2. classes : 작성한 Java Servlet 파일이 나중에. class로 이곳에 모두 저장됩니다.

3. web.xml : SUN에서 정해놓은 규칙에 맞게 작성해야 하며 모든 WAS에 대하여 작성방법이 동일합니다.

실습--

우선 아파치 톰캣을 설치합니다.

 

 

 

 

톰캣이 실행해준다. was는 실행 환경이다. 

클라이언트 환경에 종속받지 않는다.

실행하는 주체에 약속되어있는 부분이 있다.

HttpServlet인 추상 클래스를 반드시 상속받아야 한다.

service가 메인 함수로 생각하면 된다

 

 

Javax. servlet.* , javax.servlet.http.*; 라이브러리는 jdk가 아니고 서블릿 라이브러리이다.

우리가 톰캣을 받으면 그 안에 존재한다.

콘솔 창에서 연습을 할 것이므로 우선  vsc에 수기로 전부 적어준다. 

//was 서버 이해하기


import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class Nana extends HttpServlet{
    public void service(HttpServletRequest request,  //입력도구
                        HttpServletResponse response,  //출력도구
                        throws IOException,  
                        ServletException){

    System.out.println("Hello Servlet");
}
}

폴더를 생성해 만들어진 Nana파일을 넣어준다.

그런 뒤 콘솔 창에서 컴파일을 합니다.

import javax.servlet.*;

import javax.servlet.http.*;

는  Servlet라이브러리이므로 Classpath를 통해 컴파일을 시켜준다.

모든 라이브러리는 lib파일에 존재한다.

 

 

 

ROOT라는 폴더 안에 있는 WEB-INF 폴더 그 안에 classes라는 폴더를 만든 뒤 생성된 Nana.class파일을 넣습니다.

우리는 WAS의 디렉터리에 동적 파일을 저장해야 한다.

WEB-INF는 비공개 영역입니다. 사용자는 직접 WEB-INF안에 있는 파일을 직접 요청할 수 없습니다. 운영하기 위한 설정 정보를 두는 곳 WEB-INF입니다.

요청에 대한 허락은 WAS인 미들 소프트웨어가 관리합니다. 여기서는 톰캣입니다.

 

만약 패키지가 존재한다면 com.asd.app이라면

예약된 폴더인 classes폴더 안에 com이라는 폴더 안에 asd폴더를 만들고 app이라는 폴더를 또 넣고 그 안에 실행 파일을 넣어야 한다.

패키 지명을 그대로 만들어주어야 한다

이러한 과정이 애플리케이션을 만들어서 배포하는 것이다.

 

이제 우리는 웹서버에 간단한 문자열을 전달할 것입니다.

그러기 전에  web.xml의 기본 설정을 해야 합니다.

web.xml의 역할은 배포할 때 서블릿의 정보를 설정해주며

브라우저가 서블릿에 접근하기 위해서 WAS에 필요한 정보를 전해줘야 해당하는 서블릿을 호출할 수 있습니다.

정보란 배포할 서블릿 객체와 해당 객체가 어떤 URL에 매핑되는지입니다.

여기서 매핑이란 URL을 서블릿 이름과 연결합니다. 

EX) localhost:8080/nana/setting.html

 

서블릿 코드를 url과 매핑하기

<servlet>
<servlet-name>객체이름 </servlet-name>
<servlet-class>클래스이름</servlet-class> //root기준으로 절대경로
</servlet>

우리가 코드를  작성하게 되면 톰캣이 자동적으로 객체를 생성해 메모리에 할당합니다.

그런 뒤 이름을 적습니다. 사용자들이 어떻게 가상 url에 접근할 것인지 적어줍니다.

객체 이름과 매핑의 이름은 동일해야 합니다.

<servlet>
<servlet-name>객체이름</servlet-name>
<servlet-class>패키지명.클래스명</servlet-class> //root기준으로 절대경로
</servlet>
<servlet-mapping>
<servlet-name>객체이름</servlet-name>
<url-pattern>/hello</url-pattern>//url을 절대경로로 적어주기.
</servlet-mapping>

 

톰캣의 startup.bat 파일을 실행한 뒤 url창에 localhost/hello 쳐주게 되면 서버 프로그램이 실행됩니다.

 

반응형

댓글