지금까지 Model 을 안 쓴 이유는 너무 간단한 작업만을 했기 때문이다.
Model은 DB에서 처리할 때 사용한다.
✅ Model의 종류
만약 계산만 하는거면 service가 하는데 그 값을 DB에 넣어야 하면 DAO를 사용하고 만약 집어넣는 값이 여러개인데 각 데이터 타입이 다르면 DTO를 사용한다.
✅ java 와 Data Base 를 연결하기 위해 필요한 것
1. java 와 DB 연결 프로그래밍 (사용자가 건드리지 않아도 알아서 연결되어야 함)
2. DB 쿼리 실행 프로그래밍 (java에서 쿼리문을 할 수 있어야 함)
3. DB 쿼리 반환 값 추출 프로그래밍 (java에서 쿼리 반환 값을 볼 수 있어야 한다.)
위 내용을 처리하기 위해서는 JDBC(Java Data Base Connectivity) 가 필요하다!
JDBC 는 DB 종류에 따라 다르기 때문에 사용하는 DB에 맞는 JDBC를 사용해줘야 한다.
(java는 다른사람의 코드를 가져다 사용하기 좋은 언어이기 때문에 간단하게 끌어와 사용할 수 있다!)
DB에 접속하기 위해 새롭게 프로젝트를 만들 때
New Spring Starter Project Dependencies > sql > Maria DB Driver 을 눌러서 프로젝트를 만들어 준다.
1) 정보 준비
사용하는 DB에 name과 passward, url, driver 를 찾아 변수에 넣어준다.

2) 드라이브 클래스 등록
Class.forNmae(driver) 로 class driver 를 등록한다. (예외 처리 필요)
3) 드라이버 매니저 호출 → 커넥션을 얻어온다.
DriverManger.getConnection(url, id, pw); : 드라이버 매니저를 이용해 커넥션을 만들어준다.
📍 DB에 접속해 데이터를 꺼내오는 것은 창고에서 물건을 꺼내오는 것과 같다.
Connection 객체는 DB에서 하는 모든 일을 대신 DB에 접속해 수행해 준다.
이때! 드라이버 매니저 매니저에게 user의 정보를 넘기고 Connection 을 생성한다.
4) 커넥션으로 원하는 일을 수행하고
5) 사용 완료 시 자원 반납
.colse() 다 사용했으면 자원의 낭비를 막기 위해 반납한다.
1) main.jsp 생성 (view)
2) Controller.java 생성 (controller)
3) MainService.java (model_service)
4) MainDAO.java (model_DAO)
① DB 접속 예제를 만들기 위해 먼저 main.jsp 를 만들어준다.
main.jsp 에는 "메인 페이지" 라는 문구와 DB접속 을 누르면 dbConnect로 연결될 수 있도록 태그를 작성한다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
</head>
<body>
<h3>메인 페이지</h3>
<a href="dbConnect">DB 접속</a>
<h3>${msg}</h3>
</body>
</html>
② Controller 를 만들어 메인 페이지가 실행되었을 때 실행될 main() 와 dbConnect() 를 만들어준다.
dbConnect 에는 요청을 service로 넘겨주는 코드를 작성해주고, 받아온 값을 넘기기 위해 Model 을 파라미터로 넣어준다.
❗ 여기서 사용하는 Model 은 요청을 처리하는 Model은 다른것이다!!!
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import ko.co.gudi.service.MainService;
@Controller
public class MainController {
Logger logger = LoggerFactory.getLogger(getClass());
@RequestMapping(value="/")
public String main() {
logger.info("main page 요청");
return "main";
}
@RequestMapping(value="/dbConnect")
public String dbConnect(Model model) {
logger.info("dbConnect 요청");
MainService service = new MainService();
String msg = service.dbConnect();
model.addAttribute("msg", msg);
return "main";
}
}
③ controller 에서 요청을 받은 service는 DB와 관련된 내용이기 때문에 DAO 에 요청을 넘겨준다.
그리고, DAO 에서 받은 결과 값을 화면에 출력하기 위해 controller 에 값을 넘겨준다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ko.co.gudi.dao.MainDAO;
public class MainService {
Logger logger = LoggerFactory.getLogger(getClass());
public String dbConnect() {
MainDAO dao = new MainDAO();
boolean success = dao.dbConnect();
return success ? "DB접속에 성공했습니다." : "DB접속에 실패했습니다.";
}
}
④ DAO 에서 DB에 접속한다.
Class.forName(dirver); 로 java와 DB를 연결해준다.DriverManager.getConnection(url, id, pw); 로 Connection 객체를 생성한다..close(); 로 자원을 반납한다.import java.sql.Connection;
import java.sql.DriverManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MainDAO {
Logger logger = LoggerFactory.getLogger(getClass());
public boolean dbConnect() {
String id = "web_user";
String pw = "pass";
String url = "jdbc:mariadb://localhost:3306/mydb";
String dirver = "org.mariadb.jdbc.Driver";
Connection conn = null;
boolean success = false;
try {
Class.forName(dirver);
conn = DriverManager.getConnection(url, id, pw);
logger.info("connection : {}", conn);
conn.close();
success = true;
} catch (Exception e) {
e.printStackTrace();
}
return success;
}
}
위 코드로 작성해줄 경우 DB에 연결이 성공하면 "DB접속에 성공했습니다." 실패하면 "DB접속에 실패했습니다" 라는 문자가 출력된다.