DAO 와 DTO에 대한 설명을 먼저 알아볼려고 한다.

DAO(Data Access Object) 란 ? - 데이터 베이스에 접속해서 데이터 추가, 삭제, 수정 등의 작업을 하는 클래스

일반적인 JSP 혹은 Servlet 페이지내에 위의 로직을 함께 기술할 수 도 있지만, 유지보수 및 코드의 모듈화를 위해 별도의 DAO클래스를 만들어 사용 한다.

DTO(Data Transfer Object) 란? - DAO클래스를 이용하여 데이터 베이스에서 데이터를 관리할 때 데이터를 일반적인 변수에 할당하여 작업 할수도 있지만, 해당 데이터의 클래스를 만들어 사용 한다. vo(Value Object)와 용어를 혼용해서 많이들 사용한다. 아래는 DTO와 VO에 대한 차이점을 알아볼 수 있다.

구조는 데이터베이스에 있는 정보들을 가져오기 위하여 DAO라는 클래스를 이용하여 데이터베이스에 접속하고, 거기서 나온 결과들을 DTO의 클래스에 저장을 한 후 그 정보들을 필요에 맞게 가공하여 jsp로 보여주는 구조이다.

먼저 DTO를 작성해보도록 하자.

package pack; public class Notice_Board_DTO{ //변수 private String id; private String pw; private int Num; private String title; private String contents; private String date; //생성자 public Notice_Board_DTO(String id, String pw, int Num, String title, String contents, String date){ this.id = id; this.pw = pw; this.Num =Num; this.title = title; this.contents = contents; this.date = date; } //getter, setter public String getID(){ return id; } public String getPW(){ return pw; } public String getTitle(){ return title; } public String getContents(){ return contents; } public int getNum(){ return Num; } public String getDate(){ return date; } public void setID(String id){ this.id = id; } public void setPW(String pw){ this.pw = pw; } public void setNum(int num){ this.Num = num; } public void setTitle(String title){ this.title = title; } public void setContents(String contents) { this.contents = contents; } public void setDate(String date){ this.date = date; } }

처음에는 DTO가 이름만 들어서는 무엇인지 긴가 민가 했었으나, 이렇게 코드를 보니 여태껏 안드로이드를 하면서 많이 봤던 자바빈 같은 것이였다.

DTO는 자신의 DataBase에 있는 테이블에서 가져올 정보들에 맞게 작성해 주면 될 것이다.

다음은 DAO이다.

package pack; import java.sql.*; import java.util.ArrayList; public class Notice_Board_DAO { private Connection con = null; private Statement stmt = null; private ResultSet rs = null; //드라이버 로딩 public Notice_Board_DAO(){ try { Class.forName("org.mariadb.jdbc.Driver"); } catch (ClassNotFoundException e) { System.err.println(" !! <JDBC 오류> Driver load 오류: " + e.getMessage()); e.printStackTrace(); } } //select 구문 public ArrayList<Notice_Board_DTO> Notice_Board_Select(){ String server = "localhost"; // 서버 주소 String database = ""; // DATABASE 이름 String user_name = ""; // 서버 아이디 String password = ""; // 서버 비밀번호 ArrayList<Notice_Board_DTO> dtos = new ArrayList<Notice_Board_DTO>(); //연결 try { con = DriverManager.getConnection("jdbc:mysql://" + server + "/" + database + "?useSSL=false", user_name, password); stmt = con.createStatement(); rs = stmt.executeQuery("select * from register"); System.out.println("정상적으로 연결되었습니다."); while(rs.next()){ String id = rs.getString("id"); String pw = rs.getString("pw"); int Num = rs.getInt("num"); String title = rs.getString("title"); String contents = rs.getString("contents"); String date = rs.getString("date"); Notice_Board_DTO dto = new Notice_Board_DTO(id, pw, Num, title, contents, date); dtos.add(dto); } } catch(SQLException e) { System.err.println("con 오류:" + e.getMessage()); e.printStackTrace(); } finally { try{ //종료 if(rs != null) rs.close(); if(stmt != null) stmt.close(); if(con != null) con.close(); }catch (Exception e){ e.printStackTrace(); } } return dtos; } }

위와 같이 코드를 작성하면 select 구문으로 뺄 수 있게 된다.

다음은 JSP에서 DAO와 DTO로 가져온 내용을 확인 하는 코드이다.

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="pack.Notice_Board_DAO" %> <%@ page import="pack.Notice_Board_DTO" %> <%@ page import="java.util.ArrayList" %> <html> <head> <title>ZeroLab</title> </head> <body> <% Notice_Board_DAO noticeDAO = new Notice_Board_DAO(); ArrayList<Notice_Board_DTO> dtos = noticeDAO.Notice_Board_Select(); for(int i=0; i <dtos.size(); i++){ Notice_Board_DTO dto = dtos.get(i); out.println(dto.getID()); out.println(dto.getPW()); } %> </body> </html>

이렇게 정보를 빼주면 된다.

여기서 가장 주의해야할 점은 DBConnector가 어디에 위치하고 있느냐 인데, 프로젝트명/web/WEB-INF/ 밑에 lib 디렉터리를 생성 해주고 거기 안에 집어 넣어준다. 나는 어느 lib에 존재해야하는 지 몰라서 계속해서 드라이버 로드 오류가 발생했었다.

'Java > JSP' 카테고리의 다른 글

Oracle JDBC 연결  (0) 2019.09.12
DB별 JDBC 드라이버 명 및 URL 형식  (0) 2019.09.12
IntelliJ-JDBC-MariaDB연결하기(JDBC)  (0) 2019.09.12
JSP 에러페이지, HTTP 에러코드 정리  (0) 2019.09.12
maven 이란?  (0) 2019.09.12

+ Recent posts