Jsp-개념
정적인 페이지 VS 동적인 페이지
- 클라이언트가 서버에게 많은 정보를 요청한다 ex) 전화번호, 주식, 날씨정보 등등
- 그럼 서버는 미리 다 정해져있던 정보들을 그냥 딱 꺼내서 클라이언트에게 보내줄 수 가 없다.
- 왜? 날씨정보나 주식같은 경우는 매일매일 그 정보가 갱신될 수 있는 동적인 정보이기 때문이다.
- 그리고 전화번호같은 경우에도 대한민국에 존재하는 번호 전부를 서버가 하나씩 저장해놨다가 그 중 클라이언트가 원하는 정보를 꺼내서 주기엔 시간이 오래 걸리며 비효율적이다.
- 동적인 페이지를 만드는데에 있어서 단순히 클라이언트-서버 구조만 있는게 아니다.
- 서버안에 동적인 웹 컨텐츠에 응답하기위한 부가적인 프로그램이 존재한다.
- 예를 들면 현재날씨를 다른 서버에서 받아 업데이트하는 프로그램이라던지, 전화번호의 키값을 통해 탐색하는 프로그램같은 것들이 있다. 이런 프로그램 개발이 백엔드 개발이다.
- 이렇게 웹서버 프로그램으로 처리된 페이지를 다시 클라이언트에 보내면 그 페이지가 동적인 페이지가 되는 것이다.
- 순서 : 클라이언트 → 웹 서버 → 웹 서버 백엔드 프로그램 → 웹 서버 → 클라이언트
CGI (Common Gateway Interface)
- 웹페이지에 동적인 생명을 불어넣어주는 기술이 CGI이다.
- CGI는 웹서버와 백 엔드 프로그램 사이에서 정보를 주고받는데 사용되는 인터페이스이다.
- 프로세스와 스레드
- 프로세스 : 프로그램이 실행되고 있는 상태를 의미한다. 바탕화면에 이클립스를 더블클릭해서 실행시키지 않는다면 그건 프로세스가 아니라 그냥 프로그램으로만 존재하는 것 뿐이다.
- 스레드 : 프로세스나 프로그램의 일부분이 되는 프로세스이다. 프로세스가 은행이라면 스레드는 창구이다.
- 프로세스와 스레드
- CGI는 한 요청에 대해 하나의 프로세스가 생성이 되어 그 요청을 처리하고 종료해버리게 된다. → CGI는 프로세스기반의 기술이라고 할 수 있다.
- 이는 굉장히 비효율적이다. → 시스템에 부하가 올 수 있기 때문이지. 1000번의 동적 컨텐츠 요구의 응답을 제공하기 위해서 1000번의 프로세스가 생성되었다 종료해야하기 때문이다.
확장 CGI
- 기존 CGI와 달리 하나의 프로세스를 생성한 후 여러 개의 스레드방식으로 요청이 처리되는 방식이다.
- 종류 : ASP, PHP, Servlet/JSP
Servlet VS JSP
- 공통점 : 둘 다 java기반으로 동적인 컨텐츠를 생상하는 기술을 제공한다.
- Serverlet
- java의 형태 안에서 html태그가 혼재되어있다.
- 디자인과 프로그램의 분리적인 측면에서 보았을 때 효율성이 떨어진다. → 형태가 java라 디자이너가 짤 때 java언어를 알아야한다.
- JSP
- 이건 반대로 HTML태그 사이 중간에 동적인 컨텐츠 생성을 담당할 JAVA코드가 들어가있는 형태이다.
- 사용자 정의 태그를 지정할 수 있어 효율적이다.
- 기본적으로 컴포넌트 기반의 기술인 ‘Java Beans’를 제공한다.
- 이상적인 방식은 JSP가 화면 출력부분을 맡고 서블릿은 처리부분을 맡아 하는게 효율적이다.
스크립트 언어
- 서버 측 스크립트 언어 → JSP, Servlet, PHP, ASP, Node.js 등등
- 클라이언트 측 스크립트 언어 → JavaScript
JSP 컨테이너
- JSP가 MP3파일이라면 그 음악을 재생시켜주는 플레이어가 JSP 컨테이너다.
- 이러한 JSP컨테이너 안에 웹 서버가 내장되어있다.
- 앞으로 사용할 JSP컨테이너는 톰캣!!
JSP 동작구조
- 클라이언트가 jsp파일요청
- 웹 서버는 .jsp로 들어온 요청에 대해서 JSP 컨테이너로 전송
- jsp파일 파싱
- 서블릿 생성 (.java 파일)
- 생성된 서블릿 컴파일 (.class 파일으로)
- 컴파일된 클래스 파일을 메모리에 적재
- 웹 서버가 컨테이너에게 받은 정보를 HTML 형태로 클라이언트에게 전송
- 클라이언트의 브라우저에서 HTML이 실행되어서 웹페이지를 보여줌
JSP의 Life Cycle
- init() 메소드 수행으로 처리에 필요한 자원의 초기화 작업을 한다.
- service() 메소드 수행으로 요청에 대해서 필요한 처리를 한다. 실제 요청에 대한 처리를 담당하는 메소드로 필요한 로직이 담겨있는 메소드이다.
- destroy() 메소드 수행으로 사용된 자원을 해체한 뒤 서블릿을 종료시킨다.
댓글남기기