데이터를 영구적으로 저장할 수 있는 저장소로, 서로 다른 시스템 간에 데이터 공유가 가능하다.
JAVA 와 Database 를 연결해주는 라이브러리 - 표준 SQL 인터페이스 API
JDBC 라이브러리 추가 방법
DB 종류 별로 JDBC 를 다운 받아서 사용이 가능하다.
(DBMS 의 종류가 바뀔 경우 JDBC 만 변경해주면 된다)
JDBC 는 DB 에서 정보를 가져올 때마다 매번 DB 연결을 열고 닫는다.
매우 비효율적이기 때문에 상용 어플에는 JDBC 방식을 사용하는 경우가 거의 없다.
Connection 객체란❓
네트워크 상의 연결 자체를 의미한다.
DB 에서 하는 모든 일을 대신 DB 에 접속해서 수행해준다.
close( ) : 사용한 자원 반납 - connection pool 에 반납한다.
DriverManager.getConnection( ) : 실제 자바 프로그램과 데이터베이스를 네트워크 상에서 연결을 해주는 메서드
예제) DAO 에서 JDBC 활용하여 DBMS 와 연결
public class HomeDAO {
Logger logger = LoggerFactory.getLogger(HomeDAO.class);
public boolean dbconnect() {
logger.info("DAO 접근 완료");
// DB 접근을 위한 순서
// 1. DB 접근을 위한 정보 준비
String username = "web_user";
String pw = "pass";
String url = "jdbc:mariadb://localhost:3306/gdj70";
String driver = "org.mariadb.jdbc.Driver";
boolean success = false;
try {
// 2. DriverManager 에게 내용을 전달 한다.
Class.forName(driver); // DB 접속시 사용할 라이브러리 클래스를 알려준다.
// 3. 데이터베이스를 다룰 권한을 가져온다.
Connection conn = DriverManager.getConnection(url,username,pw);
// 접속 성공 : Connection 객체를 얻어온다.
if(conn != null) {
success = true;
logger.info("접속 성공 : "+conn);
// 4. 할 일을 다 하면 자원을 반납한다.
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
// 접속 실패 : 예외 발생시 콘솔에 출력
}
return success; // service 에서 받는 내용
}
}
DB Connection 객체를 미리 Connection Pool 에 생성해두고 필요할 때 가져오고 다 쓰면 반납한다. JDBC 의 단점을 보완하여 Connection 을 조금 더 효율적으로 사용할 수 있다.
<Resource
name="jdbc/MariaDB"
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.mariadb.jdbc.Driver"
url="jdbc:mariadb://localhost:3306/gdj70"
username="web_user"
password="pass"
/>
web.xml 에서 <filter>
과 <filter-mapping>
부분을 추가해서 설정해준다.
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- "/" 요청이 오면 appServlet 이라는 이름의 servlet-name 의 내용을 실행해라 -->
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 한글 깨짐 방지 : 특정한 내용이 오면 걸러서 특정한 처리를 해준다.-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 사용할 인코딩 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!-- 강제인코딩 -->
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- 언제 (어떤 요청에서) 어떤 필터를 사용할건지? -->
<!-- /* : / 뒤에 뭐가 붙던지 다 받아준다 -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
// 1. context.xml 자체를 자바 객체로 변환
Context ctx = new InitialContext();
// 2. 이름을 통해 <Resource/> 태그를 가져와 DataSource 에 담는다.
// java 로 compile 한 환경(env)에서 사용할 jdbc/MariaDB
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/MariaDB");
// 3. 그걸로 DB 접속 요청(커텍션 가져오기)
Connection conn = ds.getConnection();
// 4. 자원 반납
conn.close();