부트캠프수업정리

6주차 정리(2/7~2/11)

파뱁 2022. 2. 14. 09:32
728x90

이 주간은 JSP와 Servlet을 학습했다.

학습 내용

- 로그인 ~ 로그아웃까지의 상태 유지 기술 학습
	- http 기본 기질은 client 의 접속 상태를 절대 유지하지 않음
	- http://www.naver.com/
		http://shopping.naver.com/home/p/index.naver
			http://swindow.naver.com/style/fashionbrand/list/category
			
			http 기본 기질은 3개의 link를 개별적으로 직접 호출로 간주
			어떤 화면에서 click 해서 화면이동등에 대한 인지를 안 함
			
			개발자들이 상태 유지 및 기록은 100% 코드로 책임
		
- 세션 tracking
	* web page 이동 기술과 무관하게 client의 상태 유지하는 기술
	
	
1. 종류
	1. 세션
		- client의 상태값을 서버 메모리에 저장
		- 저장하는 데이터 타입은 제한이 없음
			(단, 객체 타입만 가능)
		- javax.servlet.http.HttpSession
		
		- 생성 or 이미 생성된 세션 반환
			HttpSession 변수 = request.getSession();
			
		- 세션에 데이터 저장
			- setAttribute()로 다수의 데이터들 저장가능
			변수.setAttribute("key", 객체타입다가능);
			 
		- 세션에 특정 데이터 삭제
			변수.removeAttribute("key")	
			
		- 세션에 저장된 데이터(Object) 반환
			변수.getAttribute("key")
		
		- 세션 무효화
			invalidate()
		
	
	2. 쿠키
		- client의 상태값을 client 시스템 메모리에 저장
			- ms window의 ms 브라우저로 실행시에는 쿠키 폴더에 저장
			- ms window상에서 타 회사의 브라우저 사용시 브라우저 자체 메모리에 저장 
			
		- 저장하는 데이터 타입 제한있음
			- 단순 문자열 

		- 헨젤과 그래텔 동화책의 컨셉		
		- javax.servlet.http.Cookie
			
			생성 -> 시간 설정 -> client 시스템에 저장
			Cookie c1 = new Cookie("key", "value");
			c1.setMaxAge(초);
			response.addCookie(c1);
			
			활용
			Cookie [] 변수 = request.getCookies();
			반복문 통해서 Cookie 획득
			String getName() - key값 반환
			String getValue() - value 값 반환
			 
			client 시스템에서 이미 저장된 쿠키 삭제시
			동일한 key로 값이 없는 Cookie객체를 다시 재전송 필수
		
	

2. 실습 구조
	login.html -> LoginValidate.java(유효성/redirect) : 이름도 추가 저장 -> Welcome.java -> Logout.java 
	
	2-1. 쿠키 개발 방식
		login.html
		LoginValidate.java
			- 유효하다면 Cookie 생성
			- 데이터 쿠키에 저장
				쿠키에 새로운 정보가 저장 & client 시스템에 쿠키 정보 저장
			- redirect로 Welcome 으로 이동
		Welcome.java
			- 저장된 쿠키를 client 시스템으로 부터 획득
			- 로그아웃 "버튼" 클릭하면서 Logout.java로 이동
		Logout.java 
			- client 시스템에 저장된 쿠키 정보 삭제
			
			
3. 추가 학습
	1. path의 dept를 적용
		http://ip:port/project명/login.html
		http://ip:port/project명/encore/playdata
		http://ip:port/project명/succ
		
	2. 경로 표현 	
		1. 절대 경로
			c://
			d://
			http://.. 
			현 위치가 중요하지 않고 표현법만으로 해당 위치를 절대적으로 인식할수 있는 경로 표현법
			
		2. 상대 경로
			.. 표현식으로 현 위치를 기준으로 설정하는 경로	
			
		
		
		http://ip:port/project명/a/b/c/index.html	
		http://ip:port/project명/a/b/c/test.html	
		
		index.html -> test.html로 이동시
		<a href="test.html	">이동</a>
	
	
		http://ip:port/project명/a/b/c/index.html	
		http://ip:port/project명/a/b/test.html	
		
		index.html -> test.html로 이동시
		<a href="../test.html	">이동</a>

		
		
		http://ip:port/project명/a/b/c/index.html	
		http://ip:port/project명/a/test.html	
		
		index.html -> test.html로 이동시
		<a href="../../test.html	">이동</a>
	
	
=======================================================
[JSP 학습]

1. JSP
	java server page의 약어
	view단 개발을 위한 스펙
	html tag/jsp tag/css/java script
	java 데이터를 활용가능한 스펙
	확장자 *.jsp
	
	servlet과 달리 타입과 변수 선언 없이도 내장 객체가 자동 생성
		- request/response/session/out ...
	
	
	최초 client가 호출시에 jsp -> servlet으로 web server가 자동 변환 
		-> 컴파일 -> byte code를 server 메모리에 로딩 -> servlet객체 생성후 service()/doGet()/doPost() 실행 
		
		
2. JSP tag
	- 브라우저 화면에 데이터 출력 용으로 주로 사용
	- 권장 : jsp는 가급적 순수 자바코드는 지양!!!
	
	- 종류
		1. jsp scripting tag
			- 5가지로 구성	 / java 코드 위주로 개발하게 되는 tag		
			
		2. jsp action tag
			- <jsp:tag명>
			
			2-1. <jsp:forward> : forward(dispatcher) 방식으로 웹 페이지 이동 tag
				: forward tag로 이동되는 최종 jsp에서의 출력 로직은 화면에 실행되나
				이 코드가 구현된 jsp는 실행되기는 하나 브라우저에 출력은 안됨
				결론 : 보이는 화면에 출력하는 내용들은 forward로 이동된 jsp에서 작업하셔야 함
			
			
			2-2. <jsp:include> : forward(dispatcher) 방식으로 웹 페이지 이동 tag
				: page속성에 설정한 jsp 또는 servlet 내용을 현 page에 포함
				결론 : 두 파일 모두 화면단에 출력
			
			
		3. EL
			- 데이터 출력 tag
			- ${}
			- request or session에 저장된 데이터값들을 뽑아서 브라우저 화면에 출력
			- jsp에서만 사용되는 코드(html에선 사용 불가)
			- 브라우저에 출력하고자 하는 데이터가 없을 경우 
				즉 null인 경우 화면에 blank로 처리 
			
		4. JSTL
			- 자바 코드를 tag화 시키는 최적의 tag
			- 조건 tag/반복 tag 
			- <c:tag명>
			- EL tag와 호환해서 사용
			- 추가로 library 셋팅 필수
				: 설치된 tomcat 내부에 sample 예제로 구성있는 경로 내용 활용
				http://tomcat.apache.org 사이트에서 다운로드 가능
				버전 이슈가 발생 가능
				실습시 사용되는 tocmat에서 사용되는 library 발췌해서 셋팅
				tomcat-9.0.58\webapps\examples\WEB-INF\lib\*			
			
			- tag
				1. <c:if test="조건식">
					- el tag 활용해서 조건 비교등 수행
					- else tag 없음
					- 다중 조건에 따른 when tag 사용				




* 참고
	1. web server[Web Application Server(WAS)]
	2. tomcat 이라는 제품
	3. 명칭
		web server=web container=servlet engine ...
	4. 주용도
		servlet 즉 java 기반의 web 서비스 서버
	
	5. html tag
		- tomcat 관점 : html/css/javascript 모두 다 순수 문자열
		- 브라우저 관점 : 각각의 interpreter 즉 해석 및 실행 엔진 내장
			server는 문자열로 응답
			단 브라우저 html/css/javascript 즉 코드로 문법 검증 후 실행 
			
	6. JSP
		-> Servlet으로 자동 변경			
			-> server도 결국에 자바
			
		java 코드는 java 실행환경에서 실행
			jdk + tomcat 실행 환경에서 실행 후에 결과값만 문자열로 브라우저 응답
			jsp tag들은 server 단에서 실행 후 결과만 브라우저로 응답 
						


* 고려사항
	1. jsp 코드 수정후에 갱신된 내용으로 service 하려 하는데 갱신이 안 되는 상황이 발생될 때의 해결책
	C:\20220103_lab\03.Web1\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\step04_JSP\org\apache\jsp
	jsp가 servlet으로 변환되어 저장된 위치에서 servlet 삭제 후에 jsp 재 실행
Connection Pooling 학습

1. CP
	- 최대수 제한
	- Connection 재사용
	- jdbc API Connection close() 시에 메모리에서 삭제였으나
	CP 사용시에는 Connection Pool 메모리에 반환 (재사용)
	
2. DB 시스템의 동시 접속자 수 제어하는 기술

3. 필요성
	- 시스템 다운 방지를 위한 접속수 제어
	
4. 방식
	1. 서버 벤더사 메뉴얼에 맞게 설정
	2. 메카니즘은 전 세계 모든 IT 업계에선 필수 설정
	3. was에 Connection 수 제한
		3-1. 처음부터 최대 사용 가능한 Connection을 사전에 미리 만들어 놓음
		3-2. 최소 수와 최대 수 설정해서 최소개수 만큼 Connection 생성 후에 
			그 수 초과 유저가 접속시 최대수 이하로 Connection 생성
			

5. 설정 파일 부연 설명
  <Resource 
  name="jdbc/myoracle" : 설정의 고유한 이름 
  auth="Container" : 설정 관리 및 권한은 container(web server, servlet engine..)
  type="javax.sql.DataSource" : cp 기능을 자바 소스에서 사용 가능하게 제공해주는 API 
  driverClassName="oracle.jdbc.OracleDriver" : db driver
  url="jdbc:oracle:thin:@127.0.0.1:1521:mysid" : db 접속 설정 url
  username="scott" password="tiger" 
  maxTotal="20" : Connection의 최대 동시 접속 개수 
  maxIdle="10" : 아무런 접속자가 현 상태에 없다 하더라도 대기 객체 수
  maxWaitMillis="-1"/> : 20명 이상의 접속자들은 대기시간 설정속성
  						 -1 은 대기시간 별도로 설정 하지 않겠다는 의미


6. 실행 원리
	1. was 설정에 등록
		- context.xml에 등록
		
	2. 자바 코드로 was의 설정 정보 활용 가능한 객체 생성
		- Context : project명으로도 사용되는 용어, 즉 project 자체를 의미
		- 자원의 이름으로 특정 db 선별해서 반환 받음
		
		- 설정 정보
			java:/comp/env
				java 환경 내부에 재사용 가능한 요소들
				component - 부품/재사용성이 있는 부품
				env - environment의 약어
				
			환경 내부의 자원 검색해서 사용하겠다는 설정
							
		
	3. 설정 정보 활용 가능하게 하는 객체에게 자원(특정 db의 cp 정보)검색 및 요청
	4. Connection 객체 활용 및 반환

3일 정도는 위와 같은 지식을 학습했고, 남은 2일 간은 프로젝트를 진행했다. 해당 프로젝트에 대한 내용은 아래 링크를 통해 확인 할 수 있다.

https://paabaep.tistory.com/37

 

[미니프로젝트2] TODOWEB (웹에서 쉽게 관리하는 할 일 목록)

부트캠프를 하며 진행한 두번째 미니프로젝트이다. 웹사이트 제작을 진행한 프로젝트인데, 지난 미니프로젝트와 다르게 허접하지만 제대로 된 뷰와 DB를 만들고 진행한 프로젝트라 나름 끝내고

paabaep.tistory.com

ps. 매우 정신 없는 주간이었다. 배우는 것도 많았고, 프로젝트도 진행하느라 힘들었지만, 그만큼 얻는것도 많아서 좋았다. 혜경 강사님과의 마지막 주였고, 매우... 아쉬웠다... 디엠으로 질척여야지... 

728x90
반응형

'부트캠프수업정리' 카테고리의 다른 글

8주차 정리(2/21~2/25)  (0) 2022.03.02
7주차 정리(2/14~2/18)  (0) 2022.02.21
5주차 정리(2/3~2/4)  (0) 2022.02.04
4주차 정리(1/24~1/28)  (0) 2022.01.28
3주차 정리(1/17~1/21)  (0) 2022.01.21