정적인 웹서비스의 해결
==> html은 정적 언어. 소스가 고정되어 있다. 변화하는 클라이언트의 요청에 응답하기 어려움.
동적 언어가 필요함.
방식 1) CGI
프로세스가 하나씩 실행된다.
동시에 열개의 요청이 오면 프로세스가 10개가 실행된다.
(공장 10개가 돌아가는 것. 멀티 프로세싱)
같은 이름의 프로세스가
같이 동작되는 경우는 제한이 있다.
500상태코드 오류가 난다.
"동시접속자수가 너무 많다." =>가용 자원의 한계
==>멀티 프로세스 / 멀티 쓰레딩
하나의 프로세스가 점유할 수 있는 시스템 자원과
하나의 쓰레드가 점유할 수 있는 시스템자원은 크기가 다른다.
방식 2) 확장 CGI
클라이언트의 요청이 들어오면 웹서버가 웹 어플리케이션 서버에게 전달한다.
웹 어플리케이션 서버는 여러 스레드에게 요청을 보내 일을 처리한다.
그럼 부하가 줄어든다.
톰캣의 서블릿이 싱글톤으로 멀티 쓰레딩을 하고 있구나 인지할 수 있다......
멀티쓰레딩 방식으로 운영되는 확장 CGI.
==> 확장 CGI 방식 언어 : jsp, Servlet
그 중 서블릿을 고른 이유는 ?
서블릿을 사용한다는 것은 자바언어의 장점을 그대로 가져올 수 있다.
그렇다면
자바의 장점은?
1.
객체지향으로 사용하면 장점은? 재사용 extends
하나의 클래스를 map으로 사용하고 싶으면? map을 재사용하여 가능
캡슐화 >> private 데이터를 보호 / interface 실행코드를 캡슐화
변수의 타입을 맵으로 설정했다.? >> 실행코드의 캡슐화 (맵은 interface)
2.
쉽다. api 생태계가 잘 되어 있다.
개발하는데 사용하기 좋다.
3.
이식성 : 사용할 수 있는 os가 여러개. 그러나 os에 종속되지 않는다.(버츄얼머신)
jsp : 서블릿의 설명이 기초되어야 한다.
4Tier 구조
웹 브라우저 : 사용자에게 화면(즉,유저 인터페이스; UI)을 제공한다.
웹 서버 : 웹 브라우저의 요청을 받아서 알맞은 결과를 웹 브라우저에 전송한다.만약 프로그램 처리가 필 요하다면
어플리케이션 서버를 사용하거나 프로그램을 직접 호출하여 결과를 생성한다.
어플리케이션 서버 : 게시판의 글 목록, 로그인 처리와 같은 기능을 처리하고 그 결과를 웹 서버에 전달한다.
데이터베이스 : 사이트의 정보를 저장한다.예를 들어, 회원 정보, 게시판 글 데이터 등을 저장한다.
was필요.
여긴 그냥 필기....
스프링ide | 메이븐 | 형상관리 플러그인 svn | 전자정부 | 소스검증(정적테스트:권총)
단일 테스트를 위한 테스트케이스 -> 테스트 케이스 개발영역 분류되어있어야한다 ->
배포의 대상이 되지 않는 자원 분리
test 설정하기 불편 => 메이븐 필
(alt + shift + j : 자바독 만들기 단축키)
Servlet / jsp : 컨테이너의 하는 일 차이
DescriptionServlet (서블릿을 설명해보자면...)
🚩서블릿이란?
: WAS에 의해 관리되는 객체의 형태로, 웹상에서 발생한 요청을 받고, 그에 대한 응답을 전송할 수 있는 객체들의 요건에
대한 명세 (spec) : HttpServlet
> WAS를 부르는 다른 말 : WAS(Web Application Server), Web Container, Servlet Container, JSP Container
>>Container란? 내부의 관리객체(Component)에 대한 생명주기 관리자(운영주체),
객체 관리 중 발생하는 이벤트들에 대한 콜백(callback)구조를 가짐.
>>> " , function({실행코드}) " => 콜백함수 : 관련된 이벤트가 있을 때 시스템 내부적으로 자동으로 실행
🚩 서블릿이 정의한 callback 메소드 종류
> lifecycle callback : init, destroy
> request callback : service, doXXX(service에 의해 호출되고, request method (http의 메서드)에 따라 선택됨)
@WebServlet(value = "/desc") // CoC 에 따라, 클래스의 simple name 이 서블릿 명으로 사용됨.
public class DescriptionServlet extends HttpServlet{
@Override
public void init() throws ServletException {
super.init();
System.out.printf("%s 's init() 메소드 호출\n'", this.getClass().getName());
}
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
System.out.printf("%s 's init(config) 메소드 호출\n'", this.getClass().getName());
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service 메소드 실행 시작");
super.service(req, resp); // do 메서드 실행
System.out.println("service 메소드 실행 종료");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet 메소드 실행");
}
@Override
public void destroy() {
super.destroy();
System.out.printf("%s 's destroy() 메소드 호출\n'", this.getClass().getName());
}
}
>> 차이점 : 서비스가 먼저 실행 / service는 request 메서드 상관없이 실행 / doXXX는 get이냐 post냐에 따라 실행됨.
>> 객체가 아무리 새로고침해도 init은 한번만 생성된다. -> 싱글톤 -> 확장CGI
>> 메모리 소멸시키는 것 ->가비지컬렉션 -> 버추얼머신이 한다.
🚩서블릿 개발 단계
> HttpServlet 을 상속받은 구현체 정의
>> 필요한 callback 메소드 재정의
> compile : /WEB-INF/classes(context's classpath) 에 배포
> 컨테이너에 등록
>> 2.x버전 : web.xml -> servlet -> servlet-name, servlet-class, loadonstartup, init-param
>>>( loadOnStartup : 요청이 오지 않아도 일단 객체를 생성하도록 설정할 수 있다. )
>> 3.x버전 : @WebServlet
MIME(Multi purpose Internet Mail Extension)
Http 등의 프로토콜에서 응답 데이터의 타입을 설명하기 위한 목적
ex) text/html;charset=UTF-8 : mimeText ==> text형태를 html로 가지고 간다.
MIME DB
C:\DDIT\A_TeachingMaterial\06_JSP_Spring\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps ==> localhost > 웹리소스
서블릿의 등록 및 맵핑 태그
방법1) web.mxl에 직접 등록 (servlet 2.5까지의 방식)
-servlet-name : 컨테이너 내에서 관리되는 서블릿 인스턴스의 이름을 지정-servlet-class : 컨테이너 내에서 관리될 서블릿 클래스를 지정-init-param : 서블릿의 초기화 파라미터 설정 (param-name, param-value 로 구성)-load-on-startup : 서블릿의 인스턴스 생성 순위 지정
방법2)@WebServlet 을 사용한 자동 등록과 매핑
@WebServlet("/")
- " / " : 어플리케이션의 기본 서블릿으로 매핑
- " /* " : 경로 매핑을 위해 사용
- " *. " : 확장자에 대한 매핑할 때 사용
- 나머지 다른 문자열 : 정확한 매핑을 위해 사용
1. 한번만든 코드는 고치지 않는다.
2. 클라이언트의 요청은 반드시 검증이 필요하다.
'내가 보려고 정리하는 > Spring' 카테고리의 다른 글
웹: jsp spec(2) : 0227 (0) | 2023.02.27 |
---|---|
JSP spec : 0224 (1) | 2023.02.24 |
웹 : 서블릿과 템플릿, model1과 model2 차이 : 0223 (0) | 2023.02.23 |
톰캣, jsp : 웹 기초_0220 (0) | 2023.02.21 |
OT : 웹 기초_0217 (2) | 2023.02.18 |