본문 바로가기
레거시

2022.1.7의 기록

by GroovyArea 2022. 1. 7.

- 하루 정리 - 

  • 쿠키 및 세션 개념 정리
  • 웹에서의 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