본문 바로가기

국비교육/JAVA

JSP MVC1 패턴으로 게시판 만들기 #02

어제 작성했던 글에 이어서 오늘은 BoardVO 작업을 마무리하고 후에 친구들에게 설명해줄수 있게끔 주석을 작성해보았다

 

BoardVO 클래스를 생성해준뒤 데이터베이스에서 받아올 데이터를 정의해준다

 

그 다음 게터/세터 가져오기

 

BoardVO 클래스의 객체를 문자열로 표현하기위해 

toString() 메소드를 정의해준다 

 

** toString() 메소드는 주로 디버깅이나 객체의 상태를 출력할 때 사용한다. 여기에서는 BoardVO 객체의 각 필드

(num,title,writer,content,regdate,ctn)을 문자열로 연결해서 반환한다 

요렇게 사용하면 객체의 상태를 보다 쉽게 확인할 수 있게된답니다.

 

-- 

여기까지 작성했다면 이제 DB연동 작업을해보겠습니다

 

-> src 폴더에 common 패키지를 생성하고 JdbcUtil.java 파일을 생성한다

 

db연동을 위한 커넥셕풀 클래스

 

JdbcUtil 클래스에서는 먼저 JdbcUtil 타입의 정적 변수 instance를 선언~

이 변수는 클래스 내에서 유일한 JdbcUtil 인스턴스를 저장합니다.

또한 DataSource 타입의 정적 변수 ds를 선언하여 데이터베이스 연결을 관리한다

그 후 정적 초기화 블록에서 Oracle JDBC 드라이버를 로드하고, 이 과정에서 드라이버 로딩 성공 메시지를 출력합니다.

그리고 JNDI 컨텍스트에서 "jdbc/oracle"라는 DataSource를 찾아 ds 변수에 할당하여 연결 풀을 생성합니다.

이 과정에서 커넥션 풀 생성 성공 메시지를 출력합니다.

만약 ClassNotFoundException이나 NamingException이 발생하면, 이를 catch하여 해당 예외의 스택 트레이스를 출력합니다.

 

외부에서 클래스의 인스턴스화를 방지하기 위해 private 생성자를 정의합니다.

또한 JdbcUtil의 인스턴스를 얻기 위한 getInstance() 메서드를 제공하여 외부에서 유일하게 인스턴스에 접근할 수 있게 한다

마지막으로 연결 풀 (ds)에서 Connection 객체를 반환하는 getConnection() 메서드를 제공하여 데이터베이스 연결을 관리합니다.

 

이렇게 JdbcUtil 클래스는 JNDI 조회를 통해 연결 풀을 사용하여 JDBC 연결을 효과적으로 관리하는 유틸리티로,

애플리케이션 전체에서 단 하나의 JdbcUtil 인스턴스만 존재하도록 싱글톤 패턴을 따릅니다.

 

 

-- 

주석을 달아놨지만 

매번 인스턴스 인스턴스~ 하는데 정작 그래서 인스턴스가 뭔데..? 하는 질문에 대답을 못했다 

인스터스는 자바에서 정의된 구체적인 객체로 실제로 메모리에 할당된 친구들을 얘기한다.

 

그리고 왜 싱글톤 처리를 해야하는데 ? 

 

여러가지 문제가 있을 수 있겠지만 공부한 내용을 토대로 설명해보자면 

 

1. 여러가지 인스턴스가 생성될 수 있다 

- 각각의 인스턴스가 DB커넥션 풀을 가지게 되면서 자원 및 메모리 낭비문제가 발생할 수 있다 

 

2.연결 안됨

- 각각의 인스턴스가 독립적인 커넥션 풀을 갖고있으면 데이터베이스에 연결할 수 없다

 

3.데이터베이스 오버로드 

- 인스턴스를 생성할 때마다 새로운 데이터베이스 연결이 생성되므로, 데이터베이스에 부하가 증가할 수 있다.

특히 많은 사용자가 동시에 애플리케이션에 접속하는 경우 이는 심각한 문제가 될 수 있다.

 

4. 객체 생성 및 소멸의 오버헤드

- 인스턴스를 생성하고 제거하는 과정에서 발생하는 오버헤드가 증가한다.

이는 애플리케이션의 성능에 영향을 줄 수 있다.

 

** 오버헤드 **

어떤 작업을 수행하기 위해 추가로 필요한 부가적인 작업이나 자원을 의미합니다

 

 

 

================================================

 

오늘은 짧게 jdbc 커넥션 풀을 이용해 DB를 연결하는 과정만 작성했다 

다음 포스팅에서는 BoardDAO 파일을 작성해보도록 하겠다