본문 바로가기
스프링 부트/자바 웹을 다루는 기술

7.2 서블릿의 데이터베이스 연동하기

by 989898 2024. 1. 19.

이번에는 서블릿에서 데이터베이스와 연동하여 조회한 데이터를 얻은 후 클라이언트의 웹 브라우저로 응답하는 과정을 알아보겠다.

사실 서블릿에서 데이터베이스와 연동하는 과정은 자바의 데이터베이스 연동 과정과 같다. 클라이언트로부터 요청을 받으면 서블릿은 SQL문을 사용해 데이터베이스에 접근하여 작업을 한다. 이 과정에서 DAO와 VO 클래스가 사용된다.

7.2.1 서블릿으로 회원 정보 테이블의 회원 정보 조회

 

그림 7-3을 보자. 각 클래스가 연동해서 데이터베이스에 접근한다. 그런 다음 서블릿에서 회원 정보를 조회한 후 이 정보를 다시 HTML로 만들어 웹 브라우저로 전송해 출력한다.

 

 웹 브라우저가 서블릿에게 회원 정보를 요청한다.

 MemberServlet은 요청을 받은 후 MemberDAO 객체를 생성하여 listMembers() 메서드를 호출한다.

 listMembers()에서 다시 connDB() 메서드를 호출하여 데이터베이스와 연결한 후 SQL문을 실행해 회원 정보를 조회.

 조회된 회원 정보를 MemberVO 속성에 설정한 후 다시 ArrayList에 저장한다.

 ArrayList를 다시 메서드를 호출한 MemberServlet으로 반환한 후 ArrayList MemberVO를 차례대로 가져와 회원 정보를 HTML 태그의 문자열로 만든다.

 만들어진 HTML 태그를 웹 브라우저로 전송해서 회원 정보를 출력한다.

 

표 7-1은 회원 정보를 저장하는  t_member 테이블의 구성을 나타낸 것이다.

그럼 지금부터 회원 정보 테이블을 생성한 후 회원 정보를 추가하여 웹 브라우저에서 서블릿으로 요청하면 데이터베이스(회원 테이블)와 연동해 회원 정보를 웹 브라우저로 출력하는 작업을 해보겠다.

 

1. 먼저 SQL Developer에서 회원 테이블과 회원 정보를 입력하기 위해 SQL Developer를 실행한다.

 

2. 왼쪽 메뉴의 + 를 클릭한 후 접속...을 선택합니다.

 

3. 왼쪽 메뉴에서 미리 만들어 놓은 접속 이름을 클릭하거나 직접 연결 정보를 입력한 후 접속을 클릭한다.

 

4. 접속한 후 생성되는 워크시트에 다음과 같은 테이블 생성 SQL문을 입력한다.

varchar와 varchar2의 차이점을 정확히 알아보면 varchar 는 ms-sql,  MySQL(MariaDB),에서 사용하는 형식이고, varchar2는 Oracle에서 사용하는 형식이다.

결국 문법상으로는 같은 형식이며, 사용하는 DBMS에 따라 사용하는 이름이 다른 것이다.

 

5. 그런 다음 마우스 포인터를 각각의 SQL문에 위치시킨 후 왼쪽 상단 녹색 버튼을 클릭해 SQL문을 실행하여 테이블을 생성한다. 그런 다음 insert문에 대해서도 동일하게 실행한다.

회원 정보 저장 테이블 생성 SQL문

 

6. 커밋이 완료됐다는 메시지가 나타나고 select문으로 조회시 회원 정보가 표시된다.

 

7. 이클립스에서 만든 프로젝트에서 회원 정보를 조회해 보겠다. 새 프로젝트 pro07을 생성한 다음 오라클 데이터베이스와 연동하는 데 필요한 드라이버인 ojdbc6.jar를 프로젝트의 /WebContent/WEB-INF/lib 폴더에 복사하여 붙여 넣는다.

 

8. 다음과 같이 회원 조회와 관련된 자바 클래스 파일인 MemberDAO, MemberServelet, MemberVO 클래스를 각각 생성.

 

9. 브라우저의 요청을 받는 MemberServlet 클래스를 다음과 같이 작성한다.

10. MemberDAO 클래스를 다음과 같이 작성. 회원 정보 조회 SQL문을 실행하여 조회한 레코드들의 컬럼 값을 다시 MemberVO 객체의 속성에 설정한 다음 ArrayList에 저장하고 호출한 곳으로 반환한다.

11. MemberVO 클래스를 다음과 같이 작성한다. 이는 값을 전달하는 데 사용되는 VO(Value Object) 클래스이다. 테이블에서 조회한 레코드의 컬럼 값을 속성에 저장해야 하므로 컬럼 이름과 동일한 자료형과 이름으로 속성을 선언하고 getter/setter를 각각 생성한다.

 

12. 브라우저로 요청하여 실행 결과를 확인한다. 회원 정보가 웹 브라우저로 출력되는 것을 확인할 수 있다.

7.2.2 PreparedStatement를 이용한 회원 정보 실습

 

앞 절에서는 회원 정보를 조회하기 위해 MemberDAO에서 Statement 인터페이스를 이용하여 데이터베이스와 연동했다. 그런데 Statement를 이용해서 데이터베이스와 연동할 경우에는 연동할 때마다 DBMS에서 다시 SQL문을 컴파일해야 하므로 속도가 느리다는 단점이 있다.

 

이럴 경우 PreparedStatement 인터페이스를 사용하면 SQL문을 미리 컴파일해서 재사용하므로 Statement 인터페이스보다 휠씬 빠르게 데이터베이스 작업을 수행할 수 있다. 따라서 데이터베이스와 연동할 때 또는 빠른 반복 처리가 필요할 때는 PreparedStatement 인터페이스를 사용해야 한다.

 

PreparedStatement 인터페이스의 특징은 다음과 같다.

 PreparedStatement 인터페이스는 Statement 인터페이스를 상속하므로 지금까지 사용한 메서드를 그대로 사용한다.

 Statement 인터페이스가 DBMS에 전달하는 SQL문은 단순한 문자열이므로 DBMS는 이 문자열을 DBMS가 이해할 수 있도록 컴파일하고 실행한다. 반면에 PreparedStatement 인터페이스는 컴파일된 SQL문을 DBMS에 전달하여 성능을 향상시킨다.

 PreparedStatement 인터페이스에서는 실행하려는 SQL문에 ‘?’를 넣을 수 있다. 따라서 ‘?’의 값만 바꾸어 손쉽게 설정할 수 있어 Statement보다 SQL문 작성하기가 더 간단하다.

 

그럼 지금부터 PreparedStatement를 이용해 회원 정보를 조회하는 예제를 실습해 보겠다.

 

PreparedStatement를 이용해 데이터베이스와 연동하는 MemberDAO 클래스를 작성한다.

브라우저에서 요청해서 실행 결과를 확인한다. 눈으로 보면 Statement를 사용했을 때와 결과는 같다. 하지만 데이터베이스와 연동할 경우 수행 속도가 좀 더 빠르다는 차이가 있다.

DB 연결 안될때 

https://study-melody.tistory.com/72

 

[오라클] 상태: 실패 -테스트 실패: Listener refused the connection with the following error:ORA-12505, TNS:listener d

db를 접속하려고 할 때 ora-12505 에러가 발생했습니다. 조치 방법을 함께 알아보시죠. 오류 메세지 상태: 실패 -테스트 실패: Listener refused the connection with the following error:ORA-12505, TNS:listener does not curr

study-melody.tistory.com

 

C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN 로 들어가서 파일내용 변경.

 

서비스 앱 으로 들어가서 oracl 관련된 거 모두 실행해주기...

 

SLQ Developer SID는 XE로 설정하기. JDBC 주소도 XE로 설정.

7.3