수업내용 20.11.18(수)
- C8/S 시스템 및 웹 프로그래밍 개요
- 개발 환경 구축
- WS와 WAS의 역할 및 N-tier 구조
- 서블릿 스펙 개요
개발환경구축
- jdk 1.7을 1.8로 변경
: 톰캣8은 jdk 1.8 (톰캣 7,8 차이는 없고 필요한 jdk 차이)
: cmd창
http://tomcat.apache.org/whichversion.html
포트번호 80으로 바꿈
톰캣 폴더 (%catalina_home%)
bin
:binary file
- st,sh 명령어를 실행시킬 수 있는 파일이 bin에 존재
- bat파일 => 윈도우
- sh파일 => 리눅스,유닉스
config
: 환경설정값
- 설정파일을 왜 xml로 만들까?
: c언어,자바,파이썬 등 언어를 타지않는다..
- json
: 왜때문에 비동기에 json을 사용할까?
: 요청을 보내는쪽은 자바스크립트
: 장점 -> 경량 (xml과 비교했을때)
lib
- libaray 약자
- 폴더 들어가보면 jsp-api.jar , servlet-api.jar(http서블릿있음) 파일존재 => 이두개파일을 지우면 톰캣구동이 안됨
log
temp
webapps★
- 톰캣이 갖고있는 폴더중에서 제일 중요★
- 서버안에 어플리케이션이 있어야하는데 webapps폴더에 존재
- 안에 있는 폴더가 어플리케이션이면서 컨텍스트 운영
: was(webapplicationserver)가 구동할 어플리케이션
: 폴더들 없으면 작동불가
- localhost뒤에 webapps 생략
- server.xml에 기본베이스가 webapps로 설정
- localhost는 webapps(DOC베이스)까지 포함
=> URL (가상의 주소체계, 클라이언트에게 개방가능한 파일시스템 주소)
WEB-INF
- WEB-INF안에 있는것들은 클라이언트가 외부로부터 접근할수없다
- 클래스패스 이후에 모든 경로가 나와야한다
- 소스 수정하면 컴파일 다시해야하고 클래스패스 다시 잡아줘야함
- 클래스를 검색할때 사용하는 위치
- classes : 클래스패스
port
- 사용범위
: 0~65535
: 0~1023 => well-known (이미 할당되어 있는 번호)
- 기본포트넘버를 썼을때와 (none기본)기본아닌 포트번호 사용의 차이점
: 예) IP:80(기본), IP:1521
- 기본은 생략가능 (80) 기본이 아닌것은 생략불가능
IP(물리적체계주소) vs PORT(논리적주소체계)
서버
- 80이라는 포트를 감지할 수 있는 데몬스레드를 개발해야한다
- 서버의 역할은?
: 클라이언트의 요청을 대기한다
: 포트에 요청이 들어오면 응답을 보낸다 (요청분석, 컨텐츠 분석..)
웹서버
- 웹서버계열(아파치톰캣등, 정적임)과 웹어플리케이션서버의 차이
- 톰캣이 왜 필요한지? 정적인,동적인처리를 다 수용할 수 있다.
- 정적 요청
: 클라이언트가 image,mp3,html,js,css를 서버에 요청
: 요청한 파일을 미리 처리할 수 있음
: 종류 => 아파치 등등..
: 요청이 들어오면 분석해서 파일이 있나없나 확인
: 서버에 자원이 있으면 스트림으로 변환 => 응답 보냄
: 서버에 자원이 없으면 404 NOT FOUND 응답
CGI
- 동적요청
: 클라이언트가 주가현황,멜론차트,날짜 등을 서버에 요청
=> 동적인 요청을 처리할 수 있는 기능(CGI방식)을 부여해야함
- CGI방식
: 요청 받는 순간 동적 요청 처리 가능한 어플리케이션 구동 => 응답 보냄
: 1개의 요청당 1개의 프로세스 실행 (단점:자원낭비)
: (ex) 동시접속자가 많아서..
확장CGI 방식
- 요즘에 사용하는 방식
- 1개의 요청당 1개의 스레드
- 멀티쓰레드 (자원소모를 방지), 동시처리 요청개수 증가
- 사용할수 있는 스펙이 다양함 (PHP, ASP, JSP..)
- 동적인 요청이오면 웹서버가 처리할 수 없으니 뒤에 있는 was한테 위임
- 스레드에서 응답코드 만들고 웹서버에게 전달 => 웹서버는 받아서 클라이언트에게 전달
- (ex) KTX예매 => "앞에 0000명 대기한다 어찌구 저찌구"
- 확장CGI를 위해 서블릿과 jsp 스펙을 사용하는 이유
- 자바언어를 기반으로 운영
- 자바언어 장점
- 이식성이 좋다 (버츄얼머신때문에), 재사용성, 유지보수
- 버츄얼머신만 있다면 똑같은 어플리케이션을 사용할 수 있다
- 개발할때 필요한 소스들을 끌어다 쓰기 쉽다 (개발이 쉽다)
- api 범위가 넓다
웹어플리케이션서버(WAS, WebApplicationServer)
- 동적인 요청 (주가현황,멜론차트,베스트셀러 등..)
- WAS 역할
: 웹어플리케이션의 운영
- 톰캣이 요청 확인하는 방법
- url-pattern확인 => servlet-name확인
- 클래스의 싱글톤 객체가 생성됐는지 확인 후, 없다면 객체생성
- 콜백메서드 호출해서, doGet실행
티어 Tier
- 클라이언트 서버시스템의 구조 (Peer 양끝단의 단말)
- 정적인 요청 처리 : 2개의 Tier 필요 (요청,웹서버)
- 동적인 요청 처리 : 3Tier 필요 (요청,웹서버,WAS)
- 동적인 웹어플리케이션 요청 처리 : N-tier 필요 (요청,웹서버,WAS,DB)
- (ex) 베스트셀러목록 => DB필요 DB까지 4가지
- 위와 같은 경우 4Tier => N-Tier구조
- 동적인 어플리케이션 구동을 위해 적어도 N-Tier이상이 필요함
어플리케이션
standalone application
- 스탠드어론어플리케이션
- 초급프로젝트, 네트워크 안씀
- 메인클래스 -> 메인메서드 -> 메인쓰레드
웹어플리케이션
- 서버가 있어서 웹개발자가 쉽게 개발
- 메인쓰레드를 톰캣(was)을 통해서 시작할수있어야한다.
톰캣으로 테스트
-
주소체계
IP:port/depth
-
ipv4: 192.168.405.21
=> 각자리 8비트, 2의8승 -1까지해서 '255'까지
숫자 올라감, 8비트 4자리 32비트 2의 32승 -1개의 ip밖에 못만듦
-
ipv6
4:4:4:4:4:4:4:4 => 16 * 8 = 128비트 필요
16진수를 표현하기 위해 4개 비트가 필요함
4개의 16진수를 표현하기위해서 16개 비트가 필요함
-
루프백어드레스
주소창에 입력
localhost or
http://127.0.0.1/ or
http://192.168.45.42:80
=> 나의 ip주소 뒤에 포트번호 붙임
2020.11.19 목요일
클래스패스
- 클래스 검색할 때 시작위치
- 클래스패스 이후부터의 모든경로를 완전한 형태(qualified name)로 사용해야한다
- 특정클래스를 찾아가는 경로
- '-classpath' 사용
서블릿 vs jsp
- 차이점?
: 서블릿으로 개발하면 불편.. 해야될게 많아서
: jsp는 라이프사이클만 하면되니까 나머지는 톰캣이 해줌
- 서블릿 라이프 사이클
: 작성하고, web.xml 매핑해서 컴파일 해야되고..
- jsp 라이프 사이클
: 개발자가 jsp를 작성하면 끝, 컴파일 안해도 됨 (톰캣이 해줌)
- jsp는 곧 서블릿이다 (기본으로 깔고 가야댐)
: JSP와 서블릿을 운영할때 톰캣의 차이??
- 컨테이너 (서블릿컨테이너, jsp컨테이너)
: 컨테이너안에서 관리되는 컨퍼런트를 표현하게하고 죽게하고 작업을 시키는것 (라이프사이클)