- 하루 정리 -
- 쿠키 및 세션 개념 정리
- 웹에서의 JDBC 및 DBCP 정리
- 오늘 공부 내용 -
서블릿
쿠키 (Cookie)
- 쿠키를 제거하는 메소드는 따로 존재하지 않음
- ⇒ 클라이언트에 저장된 쿠키의 유지시간을 0으로 변경하여 덮어씌우면 쿠키 제거
- ⇒ 유지시간이 지난 쿠키는 클라이언트에서 자동 소멸
- 단점:
- ⇒ 클라이언트에게 저장하기 때문에 보안성이 떨어짐
- ⇒ 쿠키는 문자값만 저장 가능 (복합적인 값 저장 불가)
세션(Session)
- 세션(Session) : 서버(웹프로그램)와 클라이언트와의 연결 지속성을 제공하기 위해 서버에 저장되는 값 - 세션 아이디(식별자)를 이용하여 클라이언트 구분하여 세션값(인스턴스) 저장
- 세션과 클라이언트 사이의 도식도
- 세션은 클라이언트마다 서버에 따로따로 만들어짐,
- 세션 바인딩 (Session Binding) : 세션을 웹프로그램에서 사용할 수 있도록 연결하는 작업 - WAS
- 클라이언트에서 [JSessionID] 이름의 쿠키를 제공하지 않은 경우 새로운 세션을 생성하여 바인딩 처리 ⇒ 생성된 세션의 아이디(식별자)를 [JSessionID] 이름의 쿠키값으로 클라이언트에게 전달
- 클라이언트에서 [JSessionID] 이름의 쿠키를 제공한 경우 세션 트랙킹하여 검색된 세션을 바인딩 ⇒ 세션 트랙킹 후 검색된 세션이 없는 경우 세션을 생성하여 바인딩 처리
- 세션 트랙킹(Session Tracking) : 클라이언트에서 제공된 [JSessionID]의 이름의 쿠키값을 서버에 존재하는 모든 세션의 아이디와 비교하여 검색하는 작업
- HttpServletRequest.getSession() : 바인딩된 HttpSession 인스턴스를 반환하는 메소드 ⇒ HttpSession 인스턴스를 생성하여 바인딩 하거나 기존 HttpSession 인스턴스를 바인딩하여 반환
- HttpSession : 세션을 저장하기 위한 인스턴스 - WAS 프로그램에 의해 관리
- 세션이 생성되어 바인딩된 경우 세션의 아이디를 JSESSION 이름의 쿠키로 클라이언트에게 전달 ⇒ JSESSION 이름의 쿠키는 기본적으로 유지시간이 -1로 설정되어 브라우저 종료 시 삭제
- HttpSession.isNew() : 세션을 트랙킹하여 바인딩한 경우 false를 반환하고 세션을 생성하여 반환한 경우 true를 반환하는 메소드
- HttpSession.getId() : 바인딩된 세션의 식별자를 반환하는 메소드
- HttpSession.getMaxInactiveInterval() : 바인딩 세션의 유지시간(초)을 반환하는 메소드
- ⇒ 세션 유지시간을 변경하지 않으면 기본값은 1000초(30분)로 설정
- HttpSession.setAttribute(String name, Object value) : 바인딩된 세션에 세션값을 저장(변경) ⇒ 세션에 속성명(AttributeName - String)과 속성값(AttributeValue - Instance)을 하나로 묶어 저장 ⇒ 세션 속성명이 중복될 경우 세션값 변경 ⇒ 세션을 바인딩한 모든 웹프로그램에서 세션 속성명으로 속성값을 반환받아 사용 -인스턴스 공유
- HttpSession.getAttribute(String name) : 바인딩된 세션에 저장된 세션 속성값을 반환하는 메소드 ⇒ 세션 속성값은 Object 타입의 인스턴스로 반환되므로 명시적 개체 형변환 처리하여 사용 ⇒ 세션 속성명으로 대한 세션 속성값이 없는 경우 null 변환
- HttpSession.removeAttribute(String name) : 바인딩된 세션에 저장된 속성값(인스턴스) 제거
- HttpSession.invalidate() : 바인딩된 세션을 언바인딩(Unbinding)하고 제거하는 메소드
- 아이디 비번 입력해서 인증 성공했을 때 성공한 사용자에게 권한에 관련된 정보를 줘야 하는데 그거는 세션에 저장하는거임
JDBC X WEB
- OracleDriver 클래스를 읽어 메모리에 저장 - 클래스 로딩(Loading) 작업 ⇒ OracleDriver 인스턴스를 생성하여 DriverManager 클래스에 JDBC Driver 등록
- DriverManager 클래스에 등록된 JDBC Driver를 이용하여 Oracle DBMS 서버에 접속하여 Connection 인스턴스를 반환받아 저장
- Connection 인스턴스로부터 SQL 명령을 저장한 PreparedStatement 인스턴스를 저장
- PreparedStatement 인스턴스에 저장된 sql 명령을 전달하고 실행결과를 반환받아 저장
- 반환받은 SQL 명령의 실행 결과를 이용하여 처리 작업 ⇒ SQL 명령의 실행 결과를 클라이언트에게 HTML 문서로 전달
- JDBC 관련 자원 제거 (null이 아닌 조건문 포함)
DBCP
- DBCP(Database Connection Pool) : Connection 인스턴스를 미리 생성하여 제공하는 기능 ⇒ JDBC 프로그램의 실행 속도가 높아지고 유지보수의 효율성 증가
- DBCP 기능을 제공하는 클래스는 일반적으로 javax.sql.DataSource 인터페이스를 상속받아 작성
- BasicDataSource : DBCP 기능을 제공하는 인스턴스
- DataSource.getConnetion() : DBCP 기능의 인스턴스로부터 connection 인스턴스를 반환하는 메소드
JNDI
- JNDI (Java Naming Directory Interface) : 인스턴스 생성에 필요한 정보에 이름을 부여하여 WAS 프로그램에 등록하고 필요한 경우 인스턴스를 생성하여 사용하는 기술 ⇒ 인스턴스생성에 필요한 정보를 저장한 파일 필요 - /src/main/webapp/META-INF/ciontext.xml
- XML 파일 생성
- Resource : 인스턴스 생성에 필요한 정보를 속성과 속성값으로 제공하는 엘리먼트
- name 속성 : 인스턴스 생성에 필요한 정보의 이름(식별자)를 속성값으로 설정
- auth 속성 : 인스턴스를 관리하는 사용자명을 속성값으로 설정
- type 속성 : 생성되어 반환되는 인스턴스의 자료형(클래스)을 속성값으로 설정
- factory 속성 : 인스턴스를 생성하는 Factory 클래스를 속성값으로 설정
- 기타 속성 : 인스턴스에 필요한 정보를 속성(필드명)과 속성값(필드값)으로 설정
- InitialContext : WAS 프로그램에 등록된 자원의 정보를 이름(식별자)으로 제공받아 인스턴스를 생성하여 반환하는 기능을 제공하는 인스턴스
- InitialContext.lookup(String name) : WAS 프로그램에 등록된 자원의 정보를 이름(식별자)으로 제공받아 인스턴스를 생성하는 메소드 ⇒ Object 타입으로 인스턴스를 반환하므로 명시적 객체 형변환하여 사용
- ⇒ NamingException 발생 : 자원명으로 등록된 자원이 없는 경우 발생되는 예외
- 이렇게 하면 웹 자원으로 등록하게 되어 유지보수가 편하다. 코드에 손 대는걸 최소화 시킴. (helper)도 있음
- 중복된 코드가 많으면 생산성이 떨어지고 유지보수가 어렵다.
DTO (Data Transfer Object)
- 테이블의 행정보를 저장하여 전달하기 위한 클래스
DAO (Data Access Object)
- 테이블의 행에 대한 삽입, 변경, 삭제, 검색 기능을 제공하는 클래스 ⇒ 싱글톤 클래스로 작성하는 것을 권장
- JDBC 기능을 구현하기 위한 DAO 클래스가 상속 받기 위한 클래스를 추가로 생성함
- ⇒ DataSource 인스턴스(DBCP) - WAS 프로그램에 등록된 자원 사용(JNDI)
- ⇒ DataSource 인스턴스로부터 Connection 인스턴스를 제공받아 반환하는 메소드와 JDBC 관련 자원을 매개변수로 전달받아 제거하는 메소드를 작성하는 메소드 작성 - 중복된 코드 최소화
- ⇒ 인스턴스 생성이 목적이 아닌 상속을 목적으로 선언된 클래스이므로 추상 클래스로 선언하는 것을 권장함
- 세미 팀플 -
> 템플릿 캡쳐본 이용하여 화면 정의서 작성
- 스터디 내용 및 결과 -
> 웹에서의 JDBC, (old)(new) 방식의 차이 (DBCP) 차이 확인
반응형
'레거시' 카테고리의 다른 글
2022. 1 . 11 의 기록 (0) | 2022.01.11 |
---|---|
2022.1.10의 기록 (0) | 2022.01.11 |
2022.1.6의 기록 (0) | 2022.01.07 |
2021.1.5 (0) | 2022.01.05 |
2021.1.4의 기록 (0) | 2022.01.04 |