본문 바로가기
JSP

23.03.15 DBCP

by 2023코딩시작 2023. 3. 15.

😁 1. <br>을 왜쓰는 지?? 여기엔 뭐써야하는지?  ->>엔터먹은거를 <br>로 바꿔줌
<%=cont.getBoard_cont().replace("\r\n", "<br>") %>

2. history.back()이 alert창에서 뒤로 간다는 건가? ->>>서블릿에서 뒤로간다(form페이지로)

3. default와 '' 차이  ---> defualt는 0 / ' '는 null

4. 왜 else if 안쓰고 if쓰지?  ---> else if를 쓰면 위에가 거짓이 됨(안썻다는 얘기임)


5. 왜 홑따옴표 2번쓰지?

6. 여기서 return은 history.back()하고 똑같은건가?

 

 

😀JDBC

client --------> server ----(CRUD)----> DB

단점 : 여러명이 한번에 하면 성능이 떵러짐

 

😀DBCP(Data Base Connection Pool)

CON객체를 db에서 pool에 미리 넣어넣고 db까지 안가고 서버에서 pool로 간다음 pool에서 client로 감

 

😀servers-tomcat-context.xml-

 

 

# JDBC와 DBCP의 차이점
  1) JDBC(Java DataBase Connectivity)
     - 자바와 데이터베이스 간의 연결.
     - 데이터베이스에 연결하려면 드라이버(driver)를 로딩하고,
             커넥션(Connection) 객체를 받아와야 함.
     - JDBC 방식을 사용하면 사용자가 요청할 때마다 매번 드라이버를 
            로딩하고, 데이터베이스에서 커넥션 객체를 생성하여 연결하고
            사용 후 종료하기 때문에 매우 비효울적이고 데이터베이스에
            부하가 많이 생기는 단점이 발생함.
     - 커넥션을 생성하고 사용 후 닫는데 시간이 소요되기 때문에
            동시 접속자가 많으 웹 사이트에서는 전체적인 성능이 낮아짐.
     - 다시 말하자면 빈번한 연결과 해제는 시스템 성능에 큰 영향을 미침.
       
  2) DBCP(DataBase Connection Pool)
     - 데이터베이스와 Connection을 맺고 있는 객체를 관리하기 위한
             방법을 말함.
     - JDBC의 단점을 극복하기 위해서 사용됨.
     - 웹 컨테이너(톰켓 서버)가 실행되면서 커넥션(Connection) 객체를
             미리 풀(pool)에 만들어 놓음.
     - 데이터베이스와 연결된 커넥션(Connection)을 미리 생성해서 
             풀(pool) 속에 저장해 두고 있다가 필요할 때마다 가져다가 사용하고
             반납함.
     - 미리 생성해 두기 때문에 데이터베이스의 부하를 줄여주고, 유동적으로
             연결을 관리할 수 있음.
     - 커넥션 풀을 사용하면 커넥션을 생성하고 닫는데 필요한 시간이 소모되지
             않기 때문에 그만큼 애플리케이션의 실행 속도가 빨라짐.
     - 또한 한 번에 생성될 수 있는 커넥션 수를 제어하기 때문에 동시
             접속자 수가 몰려도 웹 애플리케이션이 쉽게 다운되지 않음.
     - 따라서 커넥션 풀을 사용하면 전체적인 웹 애플리케이션의 성능과
             처리량이 향상되므로 많은 웹 애플리케이션이 커넥션 풀을 기본으로
             사용하고 있음.
       

# JNDI(Java Naming Directory Interface)
  - 커넥션 풀에 접근하려면 JNDI 서비스를 이용해야 함. JNDI는 서버에서
       관리하고 있는 리소스에 대한 정보를 알고 있는 특정한 리소스를 찾아서
       사용할 수 있도록 객체를 반환해 주는 역할을 함.
  - 디렉토리 서비스에 접근하는데 필요한 API이며, 이 API를 이용하여
       서버의 자원을 찾을 수 있음.
  - 자원이라 함은 데이터베이스 서버 등을 의미하는데 이런 다른 시스템과
       연결을 제공하는 객체임.
  - 자원을 서버에 등록할 때에는 고유한 JNDI 이름을 붙여서 사용을 함.
  - 톰켓 서버에서 이 자원을 관리하는 가상의 디렉토리는 "java:comp/env"
       라는 디렉토리임. 해당 디렉토리에 고유한 JNDI 이름을 뒤에 붙여서
       해당 자원을 찾게 됨. 찾을 때는 lookup() 이라는 메서드를 이용하여
       자원을 찾게 되고, 찾은 객체의 타입은 Object 타입임. 따라서 원래
       리소스 타입으로 형변환을 해 주면 됨.

# WAS의 JNDI를 통해서 커넥션 풀을 사용하는 절차.
  1) WAS(톰캣)가 시작할 때 context.xml에 설정한 대로 커넥션 풀을 생성.
  2) DAO 코드에서 JNDI로 부터 데이터 소스 객체를 얻어옴.
  3) 데이터 소스로부터 커넥션 객체를 가져옴.
  4) DB 작업을 수행함.
  5) 모든 작업이 끝나면 커넥션 객체를 풀로 반환함.     
    
# 커넥션 풀(Connection Pool) 연결 방법
  1) Context 객체를 생성한다.
  2) lookup() 메서드를 이용하여 매칭되는 커넥션을 찾는다.
  3) DataSource.getConnection() 메서드를 이용하여 커넥션을 확보한다.
  
  
# 커넥션 풀을 사용하기 위해서 필요한 라이브러리
  - commons-connection-3.2.1.jar
  - commons-dbcp-1.4.jar
  - commons-pool-1.6.jar

 

 <!-- 커넥션풀 환경 설정 -->
    <Resource
     name="jdbc/myoracle"
     auth="Container"
     type="javax.sql.DataSource"
     url="jdbc:oracle:thin:@localhost:1521:xe"
     driverClassName="oracle.jdbc.driver.OracleDriver"
     username="web"
     password="1234"
     maxActive="100"
     maxIdle="50"
    />
    
    <!-- 
     name : 현재 리소스를 등록할 이름을 지정
     auth : DBCP를 관리할 관리자 지정
        (보통은 Container 또는 Application)
     type : 데이터 소스로 사용할 리소스의 타입을 지정
            커넥션 풀을 사용할 수 있도록 해 주는 객체의 반환 타입을 의미함.
     url : 접속할 DB 서버의 url을 지정
     driverClassName : DB 작업을 로딩할 드라이버
       JDBC방식에서 Class.forName()의 인자값을 의미함
     username : DB서버에 로그인할 계쩡을 지정
     password : DB서버에 로그인할 계쩡의 비밀번호를 지정
     maxActive : 생성할 Connection 갯수를 지정(기본은 20개)
     동시에 최대로 데이터베이스에 연결할 수 있는 Connection 수를 말함
     maxIdle : 커넥션 풀에 여분으로 남겨질 최대 Connection 갯수를 지정
          즉, 커넥션 풀을 유지하기 위한 최대 대기 커넥션 숫자를 말함 
     -->

 

 

 

'JSP' 카테고리의 다른 글

23.03.16 (EL, JSTL[c:, fmt:]  (0) 2023.03.16
23.03.07  (0) 2023.03.07
23.03.06(get, post, servlet mapping)  (0) 2023.03.06

댓글