2016년 9월 30일 금요일

49day / WEB / DBCP DI & oracle date & 메모장만들기

http://www.oracle.com
DBCP DI와 oracle date 배운 후 메모장만들기에 적용!


확실히 오전부터 느낌이 달랐다
DB에 날짜타입 넣는 법을 배울 때 뭔가 게시판을 배울 것 같았는 데
역시나 메모장 만들기에 돌입했나.. 말이 메모장이지 강사님이 부담가지지말라고
메모장 프로젝트로 이름을 바꾼듯 하다

  • ORACLE DATE
 * date : 오라클 시간 데이터 타입 
 * sysdate : 현재 시간 
 * dual table : 오라클에서 제공하는 컬럼 하나로 구성된 테이블 
SELECT sysdate FROM dual; 
 * 조회시 연 월 일 포맷으로 조회해본다 
 * 시간 정보를 문자열 형태로 변환하는 함수 to_char(시간,포맷)
SELECT to_char(sysdate,'YYYY/MM/DD'FROM dual;
SELECT to_char(sysdate,'YYYY/MM/DD HH24:MI:SS'FROM dual;
CREATE TABLE date_test(
    id varchar2(50PRIMARY KEY,
    mydate DATE NOT null
)
INSERT INTO date_test(id,mydate) VALUES('java',sysdate);
 *  id와 mydate 조회시 mydate는 년 월 일 형식으로 조회한다 
SELECT id,to_char(mydate,'YYYY/MM/DD'FROM date_test;
 * to_date(시간정보,포맷)
INSERT INTO date_test(id,mydate) 
VALUES('jsp',to_date('2016/7/20 9:00:10','YYYY/MM/DD HH24:MI:SS'));
 * 몇일이 경과했는 지 조회 
SELECT id,sysdate-mydate FROM date_test;
cs


  • DBCP(Database Connection Pool)
java application 과 database 연동시 컨넥션 생성과 소멸은
많은 자원이 소모되는 부분이다. 

시스템 성능 향상을 위해 미리 컨넥션들을 생성해 하나의 공간에 저장한 후 
빌려오고 반납받는 방식으로 처리한다. 
    
참고 )
현재 DBCP 클래스는 WAS 제품군에서 제공하는 것을 사용한다.
다양한 WAS 제품들(tomcat, jboss, weblogic...)
때문에 write once, run anywhere 즉 플랫폼 독립적인 코드를 구현하기 위해
모든 DBCP 클래스는 javax.sql.DataSource인터페이스를 구현하고 있다. 
          
적용하는 방법 
1. 코드상에서 was에서 제공하는 BasicDataSource를 기술 
2. config/server.xml 에 dbcp 를 명시하고 lookup(검색)하여 사용 
↳ DL ( Dependency Lookup) 
   
IOC(inversion of control)
제어의 역행 
IOC에는 DL(dependency lookup) 과 DI(dependency injection) 가 있다. 

기존의 제어방식은 의존대상(특정객체 ex-DBCP)이 필요시 객체 생성을 직접 했다. 
IOC(역제어)란 제어 방식의 역행으로 직접 객체를 생성하지 않고
외부에서 객체를 생성해서 검색(lookup) or 주입(injection) 을 통해 
의존 관계를 처리하는 것을 말한다. 
↳ 환경 변화에 따른 유지보수성 향상이 목적이다. 
       (의존 대상의 결합도를 낮추기 위한) 
       
1번 방식에서 기존 DataSourceManager 생성자에서
직접 객체를 생성하는 것이 아니라 WAS의 DBCP 설정을 추가하고
그 것을 Lookup하는 방식으로 처리한다.
(환경이 변화되면 (db 정보 변경 or WAS 변경) 소스 코드 수정은 필요없다) 
  
  WAS 설정을 통한 DBCP
* 설정할때 이전에 설정된 tomcat 을 지우고 설정 후 server tab 에서 새로 생성
1.conf/server.xml파일을 열고 <GlobalNamingResources>엘리먼트 안에 다음 내용 추가.
 <Resource name="jdbc/mydbcp" auth="Container"
              type="javax.sql.DataSource" 
              driverClassName="oracle.jdbc.OracleDriver"
              url="jdbc:oracle:thin:@localhost:1521:xe"
              username="scott" password="tiger"      
/>
2. conf/context.xml에 추가 
  <ResourceLink global="jdbc/mydbcp" name="jdbc/mydbcp" type="javax.sql.DataSource"/>
------------
Test Code
------------
try {
   InitialContext ctx = new InitialContext();
   ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mydbcp");
   
   System.out.println("톰캣 데이터베이스 커넥션풀 생성" + ds);
  } catch (NamingException e) {
   e.printStackTrace();
  }
   
3. spring framework 과 같이 DI(Dependency Injection) 을 적용해 사용
cs

결국 날짜를 적용한 메모장 만들기를 만들기위해
oracle에 date타입에 대하여 배우고 DBCP적용 방법을 DL에서 DI로 바꾼 후
메모장의 이름을 쓴 게시판을 만들어 본 하루 였다.

0 개의 댓글:

댓글 쓰기