Spring : servlet,jsp,spring에 대해서 설명할 수 있는가?
servlet, jsp, spring에 대해서 누군가 나에게 물어본다면 설명할 수 있는가? 애매하게 설명할 것 같아서 정리를 한번 해보려고 한다.
Servlet
서블렛이란 단어는 일단 Server + Let의 합성어 or Server + Applet 으로 말할 수 있다.
옛날의 웹 서버에는 그냥 정적인 페이지로만 응답할 수 있었음 (html 파일?).
그래서 웹 서버에 프로그램을 붙여서 동적인 페이지를 생성하기 시작했음.
서블릿도 동적인 페이지를 만들기 위해서 웹서버에 붙이는 프로그램 중 하나이다.
😞 흠 그래도 아직 무슨 말인지 잘 모르겠다
개발자가 서블릿을 사용하면 어떤 좋은점이 있을까?
만약에 http형태의 요청을 직접 파싱(해독(?)) 하는 것은 비즈니스 로직에 집중해야 하는데 시간이 낭비 될 수 있다고 생각한다.
HttpServletRequest.getMethod(); 같이 http servlet request의 메서드를 호출하면 HTTP의 요청 정보를 쉽게 사용할 수 있고 규약도 지키기 때문에 개발자는 비즈니스 로직에 더 집중할 수 있기 때문에 사용한다.
서블릿은 이렇게 생겼다.
서블릿이 생성이 되면 init 메서드가 호출이 되고, 소멸될 때 destory메서드가 호출됨.
근데 진짜 중요한 부분은 service부분 요청을 처리할 때 호출이 되는 메서드.
우리가 처리하고 싶은 요청 메서드에 해당하는 doXXX 메서드를 찾아서 재정의 해주는 것.
마이 서블릿이고 url로 겟 요청이 들어오면 response에다가 헬로 디스위스 코기를 담아서 보내주는 것이다!
아하😀 요청을 재정의해서 다시 보내주는 것이구나 ~
서블릿은 어떻게 호출되고 관리될까?
서블릿 컨테이너가 있다고 치자( ex 바구니 )
사용자의 요청이 들어오면 서블릿 컨테이너(바구니)는 해당 요청과 매핑된 서블릿을 찾게 됨.
근데 어떤 요청과 매핑되어있는지 알 수 있을까?
hello라는 요청이 들어오면 HelloServlet이란 서블릿으로 처리를 하겠다 이 말임.
그래서 이제 매핑이 되면 인스턴스가 있는지 확인을 하고, 그 인스턴스가 있으면 그대로 사용, 없으면 생성해서 가져가 사용하게 되는 것.
생성하면 init() 메서드 호출! 그럼 아까 서비스를 요청하고 이후에는 response와 request객체를 소멸시키고 끝이 난다.
그럼 서블릿은 생성했는데 왜 소멸시키지는 않는가?
서블릿은 싱글톤으로 관리되고 있기 때문.
서블릿은 소멸되지 않고 있다가 다음번 같은 요청이 들어왔을 때 서블릿 컨테이너에 의해서 또 호출돼서 사용되는 것.
서블릿 컨테이너 (바구니)는 서블릿의 생명주기(life-cycle)를 관리하는 객체
만약 여러 요청이 들어오면 멀티 스레드를 이용해서 요청을 처리하게 됨.
멀티스레딩은 조심해서 사용해야 함. (스레드 비용이 많이 들고, 사용하기 어려움)
Dispatcher Servlet, Spring
Dispatcher servlet은 그냥 servlet과 다르게 어떻게 처리하는지 설명해 주겠음.
군인으로 예시를 들자면
디스 패쳐 서블릿이라는 지휘 통제관이 있고, 분대를 담당하는 분대장이 있고, 직접 뛰어나가는 군인들과 뒤에서 상황을 통제하는 상황병이 있을 것이다. 이런 식으로 분리를 하면 효율적임.
스프링을 이용하지 않았으면 Handler Mapping , View , HandlerAdapter 부분을 개발자가 직접 처리하게 되므로 비즈니스 로직에 집중을 하지 못함.
스프링 컨테이너도 프로그램이 동작하는 동안 자바 객체들을 프레임워크가 대신 관리하고 보관하기 위해서 사용하는 바구니이다.
서블릿 웹 애플리케이션 콘텍스트는 웹 요청 처리 관련
루트 웹 애플리케이션 컨텍스트는 서비스,레포지토리 관련 객체들이 관리가 됨.
결론적으로 Spring이란 JAVA 기술들을 좀 더 쉽게 사용할 수 있게 해주는 오픈소스 프레임 워크이다!
JSP
JSP는 JavaServer Pages의 약자이고, HTML 코드에 JAVA코드를 넣은 것이다.
JSP가 실행되면 자바 서블릿(Servlet)으로 변환되며 웹 어플리케이션 서버에서 동작되면서 필요한 기능을 수행한다.
JSP와 서블릿은 하는 일은 동일하다.
차이점은
JSP는 HTML 내부에 JAVA 소스코드가 들어감으로 인해 HTML 코드를 작성하기 간편하고
서블릿은 자바 코드 내에 HTML 코드가 있어서 읽고 쓰기가 굉장히 불편하기 때문에 작업의 효율성이 떨어짐