자바로 웹 프로그램을 만드려면 자바에서 Servlet만 추가하면 된다. 그런데 Servlet만 가지고 프로그램을 만들면 HTML 코드를 출력하는데 문제가 있기 때문에 여기에 HTML 코드를 간결화 시킬 수 있는 도구인 JSP를 더한다.
여기서 JSP까지만 사용하면 코드가 스파게티처럼 되는 문제가 있기 때문에 여기에 더해 코드를 나눠 정리하는 JSP MVC를 이용한다. 이 전체를 아울러 더욱 간편하게 사용할 수 있는 방법이 바로 Spring MVC이다.
프로그램은 사용자인터페이스에서 받은 걸 적절하게 DB쿼리해서 다시 결과물을 문서로 출력해 보내주는게 업무용 데이터베이스 프로그램이었다.
그런데 시간이 지나면서 본점, 지점, 생산지점 등 이렇게 다양한 곳에서 데이터가 만들어지고 정보를 조회하는 곳도 다르고 데이터를 실시간으로 보고싶기 때문에 자연스럽게 네트워크를 이용하게 되면서 공급자와 제공자, 즉 서버와 클라이언트로 나뉘어지게 된다.
불편한점이 생긴다. 서버데이터가 바뀌면 클라이언트도 동시에 바뀌어야하는데 바뀔때마다 소프트웨어 업데이트가 설치와 재설치의 반복이 필요했다. 그런 동기화를 위해서 그것이 다른 것에 영향을 끼치는 주문제점이기도 했다.
이런 문제를 해결하기 위해서, 여러 데이터 전송 방법에원활하게 하는 방법을 찾다 웹이라는 것을 이용하게 됐다.
웹이라는 것은 이미 브라우저가 있어서 클라이언트 프로그램이 필요가 없었다. 그리고 브라우저에서 하는 요청에 대해 서버가 바로 응답을 할 수가 있다. 처음에 이 메커니즘을 약간 변경만하면 웹프로그래밍을 이용해서 클라이언트와 서버를 만들수있다고 생각했다.
웹 프로그래밍이라는 것은 곧 서버 클라이언트 프로그램이 아니라 서버클라이언트 프로그램을 웹프로그램에 올릴 수 있따는 이야기이다.
웹이라는 것은 페이지를 요청하고 페이지를 찾아서 페이지를 제공하는 것이엇는데 페이지라는 것은 윈도우 프로그램의 화면이 어떻게보면 웹에서 다루고있는 웹페이지와 다르지 않다.
웹서버에서 문서를 브라우저로 전달하기 때문에 클라이언트 프로그램도 필요없다. 클라이언트 프로그램을 재설치할 필요가 없다.
그래서 웹개발을 이용한 서버프로그램을 만들기 시작한거다.
과거에는 클라이언트와 서버프로그램을 줄여서 C(lient)S(erver)프로그램이라고 했는데 웹으로 오면서 클라이언트가 사라진다.
그래서 CS프로그램 만들던 사람이 웹서버프로그램을 만들면서 자연스럽게 웹개발자라 하면 서버프로그래머 서버개발자라고 했었는데 요즘에는 자바스크립트가 생기면서 페이지를 요청하는게아니라 데이터요청으로 바뀌게 된다. 그리고 브라우저에서, 윈도우프로그램을 만드는거처럼 자바스크립트를 이용해서 윈도우프로그램 만들고 있는 시대가 찾아왓기에 클라이언트 프로그램이 웹기반으로 클라이언트 프로그램을 만드는 시대가 오다보니까 클라이언트 프로그래머라 안하고 웹의 프론트 단을 개발하는 살마이라해서 프론트엔드 개발자, 백엔드개발자라고 불리게 됐다.
웹이라는 것을 이용해서 CS프로그램을 만드려면, 서버에서 추가적인 내용이 필요하다. 사용자가 요구하는 것은 예를드렁 회원에 대한 목록을 달라고한다면 과거방식으로 웹만을 이용해서 그것을 한다면 서버는 디렉토리에 그 목록이 있는지 찾을 것이다.
그리고 찾아서 꺼내보면 그것은 웹문서일것이다. 그런데 회원목록은 문서로 미리만들엊있는게 불가능하다. 즉 정적이 아니라 동적이다. 그래서 목록을 만들어내기 위한 코드가 들어있어야하는 것이다.
그 코드를 찾았으면 이걸 실행해서 디비에서 문서화를 해서 돌려줘여한다. 그래서 코드를 가공해야하는 환경이 추가적으로 필요한 것이다.
그 필요한 것을 WAS 라고 한다. 이런 서비스를 할 수 있는것이 추가적으로 설치되어 있어야한다.
어쨋든, 이런식으로 서버에서 문서를 다시 만들어서 돌려주게되는 식으로 CS프로그램을 만들어야하는 것이다.
동적으로 문서를 만드는 코드를 서버 어플리케이션이라고한다. 이것을 실행시키기 위한 환경이 웹서버이고 그 코드를 실행해줄 수 있게 하는 환경 WAS이 필요하다. 이것이 서버어플리케이션을 만들기위한 기본 구성이 된다.
사용자는 무언가를 서버에 요청한다. 서버에 의해서 그것에 맞는 코드가 읽혀질것이다. 사용자 요청이 어떤 것을 요청했냐에따라 파편화 되어있는 것들이 실행, 전달되면 프로그램이 끝나기 때문에 조각나있는 서버어플리케이션을 명칭화한게 Servlet이라고 한다. 서버 어플리케이션 조각을 줄여서말하면 아마도 Servlet일것이다. (Let 조각)
서버어플리케이션에 대한 내용을 서블릿단위로 만들건데 서블릿을 만들기위한 환경(톰캣)이 필요하다
톰캣은 뭘까? WAS이기도 하고 WAS에다가 자바어플리케이션 개발할떄 사용하는 웹서비스 기능이 포함되어잇기때문에 웹서버라고도 볼수있다.
웹서버라면 웹문서를 제공하는 서버라는 이야기이다. 어떻게 웹문서를 제공할까?
웹이 커지면 디렉토리가 많아진다. 디렉토리가 엄청 많아지면 동시에 개발을 할 수가 없기 때문에 물리적으로는 2개사이트이지만 마치 서비스는 같은사이트의 경로로 서비스할수잇는 서비스가 context 사이트이다.
서버 어플리케이션을 만드는 것. 이건 기능별로 코드가 나뉘어져있고 필요따라 선택적으로 실행될 수 있게 만들어져있다. 웹이라는 환경을 통해서 실행되어지기 때문에 그렇다.
예를 들어, 사용자가 공지사항을 달라고하면 공지사항이라는 servlet만 실행된다. 수많은 기능이 있기때문에 요청이오면 해당되는거만 실행된다.
서버 어플리케이션이라해서 모든걸 다 개발 할 필요없고 필요한거 하나하나씩 만들면된다. 자바프로그램은 메인함수를 통해 만드는데 서블릿은 서비스를 통해 만든다. 자바콘솔어플리케이션과 흡사하다. 또 하나는 웹출력과 입력을 받기위한 도구만 추가된다
일단 클래스와 함수를 정의해야한다. 모든 클래스는 WAS에 의해 로드되고 결과를 클라이언트에 보낸다. 클래스이름을 일일이 다 알수가없기때문에 약속되어 있는 인터페이스명이나 추상클래스명을 보고 호출한다.
추상클래스를 통해서 호출하는것은 정해져있는 약속되어있는 이름 service()를 사용해야한다. service()가 메인메서드라고 생각하면 된다. 클래스이름이 kyu이면 이 클래스는 kyu servlet이 된다.
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class Kyu extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
System.out.println("Hello Servlet");
}
}
서블릿 class가 들어가야하는 곳은 약속되어 있다.
아래 경로에 넣으면 된다
루트/WEB-INF/classes
물론 사용자가 주소에 Kyu.class 를 입력해서 접근할 수 있는 것은 아니다.
이 폴더에 있는 자원들은 서버쪽에서만 사용할 수 있도록 되어있고 클라이언트쪽에서는 요청할수도 없고 들여다볼수도 없다.
그래서 다른 방법으로 요청하도록 해야한다. 그 방법은 웹서버+WAS만 알면된다.
그래서 사용자가 요청할때 사용하는 이름을 웹서버+WAS가 URL과 매핑된 Servlet 코드를 찾아서 실행한다.
사용자로부터 받은 요청의 이름을 web.xml 을 통해서 사용자는 브라우저에 이렇게 요청하면 xml에서 hello가 오면 이렇게 실행하겠다고 매핑정보를 톰캣에 설정하는 것이다.
사용자가 직접 요청하는게 아니라 사용자가 요청할때는 hello로 요청하도록 하고 톰캣이 요청이 왔을때 그 요청에 해당하는 서블릿클래스를 찾아서 실행하겠다는 것이다.
참고&출처
뉴렉처 Servelet&JSP 1~8강