본문 바로가기

스프링

[MODEL1] JDBC 커넥션 클래식한 방법(JAVA)

 

JSP에 생코딩.. 추억돋네요 ㅋㅋㅋ

 

위처럼도 사용했었지만

 

톰캣 커넥션 풀 사용

1.     Tomcat에서 DBCP(커넥션풀)을 사용할 때에는 보통 Serverl.xml에 놓는 경우도 있지만, 매 프로젝트마다 변경해주어야하는 하드코딩이 될 수 있기에, META-INF > context.xml db접속 정보를 설정해두고 사용한다.

2.     Resource : 프린터나 디스크 드라이브와 같은 장치, 네트워크상에서 활용 가능한 서버나 프린터, 데이터 리소스는 액세스 할 수 있는 파일이나 데이터베이스 등이 포함된다.

기본적인 뜻은 자원, 컴퓨터 과학에서는 웹 : URI가 정의한 아무 항목, 윈도우: EXE,DLL 파일 안에 들어 있는 데이터, 자바 : 응용프로그램 데이터

1)     Name :  리소스 명칭 (JNDI Lookup시 사용할 명칭)

2)     Auth : 리소스 관리자를 지정. (톰캣 컨테이너)

3)     Type : 리소스 형태(데이터 소스 형태 지정)

4)     driverClassName : DB와 접속하기 위한 driver 클래스를 지정

5)     factory : 커넥션풀(DBCP)

6)     url : 접속한 DB가 위치한 서버,포트 사용할 테이터베이스 명 지정

7)     user : DB접속 계정.

8)     Password : DB접속 암호

9)     MaxActive : 최대 연결 가능한 Connection 숫자를 지정함.

10)  MaxIdle : Connection pool 유지를 위해 최대 대기 Connection 숫자

11)  maxWait : Connection 재사용을 위해 대기해야 하는 최대 시간(단위:ms)

 

1.     해당 위치에 connectionPool(DBCP)을 얻어올 수 있는 코딩을 해준다.

2.     OracleDataSource : DBCP을 얻어올 수 있는 변수 선언(변경되지 않는 공통자원 static)

3.     Static 초기화블럭 : 해당 클래스 생성시 최초 1회 실행되고 메모리구조 static 영역에 남아있어 재사용된다. 계속 남아있으면 문제가 되는 것이 아닌가??(객체생성시마다 생기는게 아니다(생성자)) 절대 변할 수 없는 값을 넣어주는 것이 맞다. Jdbc connection편 참조

4.     InitialContext :

-       모든 설정된 엔트리와 자원(resource) JNDI namespacejava:comp/env 부분에 놓이게 된다.

-       이 객체의 탄생배경 : 서버가 여러대로 분산되어 있을 경우 각각의 서버는 객체를 공유할 방법이 필요하다. 객체를 공유하기 위해서 네이밍 서비스를 이용하는데, 네이밍 서비스에서 JNDI를 이용해서 객체를 등록, 삭제, 검색 할 수 있다.

-       분산된 객체를 찾기 위해 자바는 표준 네이밍 서비스로 JNDI를 정의했다. 객체를 등록할 때 JNDI명을 할당 후 이용하게 되면 해당 객체를 찾을 수 있게 된다.

5.     OracleDataSource 객체에 lookup을 통하여 해당 자원을 찾을 수 있다.

6.     getConnection : oracle 연결

 

 

 

dao생성

1.     Synchronized : 현재 instance에 동기화가 일어나므로 걸어줘야한다. , 여러 사람이 쿼리를 호출하거나 계속 호출하기 때문에 동기화를 걸어준다. 한사람이들어오면 다음사람은 대기(동기화), dao 즉 쿼리를 호출하는 인간들이 많기 때문에 기다릴 수 있도록 동기화를 걸어준다.

2.     Static : 현재 instance가 종료될 때까지 기억된다.

3.     싱글톤 패턴 :

1)     dao 클래스의 변수를 private로 함부로 못쓰게 막고, 생성된 싱글톤 오브젝트를 저장할 수 있는 static으로 static영역(로딩되면서 생성되어 프로그램이 종료되면 JVM에 해당 메모리를 반환)에서 공유한다.

2)     Dao 즉 클래스의 인스턴스가 null 없다면 인스턴스를 생성하고 그 인스턴스를 리턴한다. 자세한 사항은 디자인패턴(싱글톤패턴을 참고하자)

1.     Dao를 싱글톤 처리 : 객체를 1개만 생성하여 메모리 오버헤드를 막기 위함. 생성시간이 빠르다.

2.     어디에 적용해야하나? (싱글톤)

-       오직1static으로 선언하여 공통적으로 사용되는 환경설정

-       내용이 변경되면 다른 클래스에서도 그부분이 똑같이 적용되어야 할 때

-       Dao의 경우 객체는 그대로 메서드만 쭉 선언되기에 사용이 적합하다.

3.     Synchronized : 객체 생성 동기화(class instance를 새로 생성하지 않고 저장소에 저장된 class instance를 가져다 준다. 만약 저장소에 없으면 반납될 때까지 기다린다.

3)   Dao에 걸어주는 이유는 여러 사람이 동시에 사용할 경우 키값이 중복되는 문제가 발생될 수 있기 때문이다.

 

 

1.     preparedStatement : Statement도 있지만 PreparedStatement는 한번 사용한 SQL문이 저장되기 때문에 반복해서 사용할 경우 성능이 좋아 일반적으로 사용된다. 데이터베이스 쿼리를 보내기 위해 필요한 객체를 얻어온다.

2.     Connection : jdbc 연동

3.     StringBuffer : 동기화에 이용된다. 하지만 싱글톤에 의해 DAO가 관리되기 때문에 StringBuilder를 사용해 주는 것이 옳다.

4.     executeUpdate : 쿼리문으로 데이터를 다루는 insert,update,delete,create,drop,alter에 사용된다. 적용된 행의 개수를 리턴한다.

5.     executeQuery : 쿼리결과를 resultSet을 얻기 위한 메서드로 주로 select문에 사용된다.

6.     Execute : 모든 쿼리에 다 사용가능 리턴은 boolean형으로 넘어온다.

Finally : 오류가 나든 안나든 무조건 닫아준다.

 

 

1.     셀렉트를 보내줄 리스트를 만들어준다. 이것역시 DAO는 싱글톤에 의해 관리되기 때문에 ArrayList를 사용해준것이다.

2.     StringBuilder에 담아주어도 된다. 쿼리문을 담고

3.     커넥션 연결

4.     PreparedStatement : Statement도 있지만 PreparedStatement는 한번 사용한 SQL문이 저장되기 때문에 반복해서 사용할 경우 성능이 좋아 일반적으로 사용된다. 데이터베이스 쿼리를 보내기 위해 필요한 객체를 얻어온다. 쿼리를 보낼때는 내부적으로 String형으로 보내주어야 한다. 현재 StringBuffer형이기 때문에 .toString을 통하여 스트링형으로 보낸다.

5.     executeUpdate : 쿼리문으로 데이터를 다루는 insert,update,delete, create,drop,alter에 사용된다. 적용된 행의 개수를 리턴한다.

6.     executeQuery : 쿼리결과를 resultSet을 얻기 위한 메서드로 주로 select문에 사용된다.

7.     Execute : 모든 쿼리에 다 사용가능 리턴은 boolean형으로 넘어온다.

 

1.     이곳은 처음 jsp에서 bbsAdd.jsp로 보냈기에 여기로 submit된다.

2.     각 값들을 vo에 세팅시킨다.

그 후 add 즉 인서트 시키는 쿼리를 boolean형에 담는다. 제대로 인서트되면 trueboardList로 이동한다. False는 에러로 이동하지 않게 된다.

 

1.     인서트 이후 이제 게시물을 뿌려주는 jsp이다.

2.     ArrayList 객체에 DAO에서 선언한 셀렉트리스트를 담는다.

3.     ArrayListboardVO의 제네릭이기 때문에 VO형 객체에 향상된 for문을 이용하여 값들을 뽑는다.

4.     onclick이벤트와 location을 통하여 각각 이동할 페이지를 지정해준다.