JDBC는 자바 데이터 접근 기술의 근간이라 할 정도로 대부분의 개발자가 쉽게 이해할 수 있어 많이 사용하는 데이터 액세스 기술입니다. 그러나 시간이 지남에 따라 SQL문이 지나치게 복잡해지면서 개발이나 유지관리에 어려움이 생기기 시작했습니다. 특히 cONNECTION 객체 같은 공유 리소스를 제대로 처리해주지 않으면 버그를 발생시키는 원인이 되곤 했습니다.
스프링에서 제공하는 JDBC는 이러한 기존 JDBC의 장점과 단순함을 유지하면서 단점을 보완했습니다. 간결한 API뿐만 아니라 확장된 JDBC의 기능도 제공합니다.
이번에 사용할 파일들 입니다.
lib 폴더와 action-servlet.xml , web.xml은 이 전글에서 했던 것들을 가져와 재사용 하겠습니다.
파일
설명
web.xml
ContextLoaderListener를 이용해 빈 설정 XML 파일들을 읽어 들입니다.
action-servlet.xml
스프링에서 필요한 여러 가지 빈을 설정합니다.
action-dataSource.xml
스프링 JDBC 설정에 필요한 정보를 설정합니다.
jdbc.properties
데이터베이스 연결정보를 저장합니다.
action-service.xml
서비스 빈 생성을 설정합니다.
1. action-servlet.xml과 action-dataSource.xml의 <beans> 태그는 이전 글에서 실습한 action-servlet.xml의 것을 복사해 붙여 넣겠습니다.
2. web.xml을 다음과 같이 작성합니다. 한 개의 XML 파일에서 모든 빈을 설정하면 복잡해서 관리하기 어려우므로 빈의 종류에 따라 XML 파일에 나누어 설정합니다. 그러면 톰캣 실행시 web.xml에서 스프링의 ContextLoaderListener를 이용해 빈 설정 XML 파일들을 읽어 들입니다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<!-- 여러 설정 파일을 읽어 들이기 위해 스프링의 ContextLoaderListener를 설정합니다. -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
<!-- 애플리케이션 실행 시 ContextLoaderListener로 해당 위치의 설정 파일을 읽어 들입니다. -->
/WEB-INF/config/action-service.xml
/WEB-INF/config/action-dataSource.xml
</param-value>
</context-param>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.springramework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
3. action-servlet.xml을 다음과 같이 작성합니다. 여기서는 뷰 관련 빈과 요청을 처리할 빈 그리고 메서드를 설정합니다. 이때 주의할 점은 빈 주입 시 주입 받는 클래스에서는 주입되는 빈에 대한 setter를 반드시 구현해야 한다는 것입니다.
5. 다음으로 action-dataSource.xml을 작성합니다. 이 파일은 스프링에서 사용할 데이터베이스 연동 정보를 설정합니다. 먼저 jdbc.properties 파일에서 데이터베이스 연결 정보를 가져온 후 이 연결 정보를 이용해 스프링에서 제공하는 SimpleDriverDataSource로 id가 dataSource인 빈을 생성합니다. 그리고 dataSource 빈을 memberDAO 빈으로 주입합니다.
Java Data Base Connection의 약자로 JAVA언어를 통해 데이터 베이스에 접근할 수 있는 프로그래밍을 의미
MVC패턴
웹 어플리케이션을 화면 부분, 요청처리 부분, 로직 처리 부분으로 나누어 개발하는 방법으로 개발 및 유지보수가 편리하며 기능의 재사용성이 높아지고 디자이너와 개발자의 작업을 분화해서 쉽게 개발할 수 있습니다.
Model - 데이터베이스 연동과 같은 비지니스 로직을 수행하며 일반적으로 DAO와 VO 클래스로 이루어져있다.
View - JSP가 화면 기능을 담당하며 Model에서 처리한 결과를 화면에 표시한다
Controller -서블릿이 컨트롤러의 역할을 하며 클라이언트의 요청을 분석한다
요청에 대해서 필요한 모델을 호출하며, 모델에서 처리한 결과를 보여주기 위해 JSP를 선택한다.
Interface와 Abstract
공통점은 이 둘은 선언만 있고 구현내용이 없는 클래스 입니다.
그래서 자기 자신이 new를 해서 객체를 생성할 수 없으며 Abstract를 extends를 받거나, Interface를 implements한 자식만이 객체를 생성할 수 있습니다.
차이점은 추상클래스는 상태나 기능을 공유할 수 있습니다. 그리고 인터페이스는 상태 또는 기능을 제공하는 역할만 합니다. 즉 추상클래스는 abstract 메소드가 하나라도 있으면 추상클래스 입니다. 그래서 추상클래스에서 메소드를 구현하는 것이 가능합니다. 반면 인터페이스는 구현 없이 형태만 제공하고 구현은 상속받은 클래스에서 해야 합니다.