ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DAO, DTO(VO) 란 무엇일까?
    SPRING, JAVASCRIPT 2019. 8. 14. 20:23

    DAO와 DTO(VO)란 무엇일까?

     

    먼저, 이 두 가지 용어를 설명하기에 앞서 MVC구조에 대해 먼저 알아야 한다. 글쓴이의 전 글 중에 MVC구조에 대해 부족하게나마 정리한 글이 있으니 보고 이해를 먼저 하도록 하자.

     

     

    DAO

    Data Access Object의 약자로, 데이터베이스의 데이터에 접근하기 위해 생성하는 객체이다.

    데이터베이스에 접근하기 위한 로직과 비즈니스 로직을 분리하기 위해 사용한다.

     

    간단하게, DB에 접속하여 데이터의 CRUD(생성, 읽기, 갱신, 삭제) 작업을 시행하는 클래스이다.

    JSP 및 Servlet 페이지 내에 로직을 기술하여 사용할 수 있지만, 코드의 간결화 및 모듈화, 유지보수 등의 목적을 위해 별도의 DAO 클래스를 생성하여 사용하는 것이 좋다.

     

    한 줄 요약 : DAO는 DB를 사용하여 데이터의 조회 및 조작하는 기능을 전담하는 오브젝트이다.

     

     

    DTO

    Data Transfer Object의 약자로, 계층간 데이터 교환을 위한 자바빈즈를 뜻한다.

    또한 DTO는 VO(Value Object)와 용어를 혼용해서 많이 사용하는데, VO는 읽기만 가능한 read only 속성을 가져 DTO와의 차이점이 존재한다.

     

    일반적으로 DTO는 로직을 가지고 있지 않은 순수한 데이터의 객체이며 객체의 속성과 그 속성의 접근을 위한 getter 및 setter 메소드만을 가지고 있다.

     

    한 줄 요약 : DTO는 VO와 혼용하여 사용하며, 순수한 데이터의 객체이다.

     

     

    예제 프로그램을 작성해 보았다.

    본인은 현재 mariaDB를 사용중이며, DBconnector 및 초기 설정을 마친 상태이다.

    간단한 로그인과 관련된 사용자의 데이터를 저장한 DB이며, DB 구조는 다음과 같다.

     

     

    DB에 저장한 데이터를 jsp에서 불러오기 위해 DAO, DTO를 작성하였다.

     

     

    user_dao.java

    package dao;
    
    import java.sql.*;
    import java.util.ArrayList;
    
    public class user_dao {
    	private Connection con = null;
        private Statement stmt = null;
        private ResultSet rs = null;
    //드라이버 로딩
        public user_dao(){
            try {
                Class.forName("org.mariadb.jdbc.Driver");
            } catch (ClassNotFoundException e) {
                System.err.println("<JDBC 오류> Driver load 오류: " + e.getMessage());
                e.printStackTrace();
            }
        }
    //select 구문
        public ArrayList<user_dto> User_Select(){
            String server = "jdbc:mariadb://127.0.0.1:3306"; // 서버 주소
            String database = "*******"; // DATABASE 이름
            String Suser_name = "*******"; // 서버 아이디
            String Spassword = "*******"; // 서버 비밀번호
    
            ArrayList<user_dto> dtos = new ArrayList<user_dto>();
           //연결
            try {
                con = DriverManager.getConnection(server + "/" + database + "?useSSL=false", Suser_name, Spassword);
                stmt = con.createStatement();
                rs = stmt.executeQuery("SELECT * FROM USER");
                System.out.println("Connect completed.");
                
                while(rs.next()){
                	int num = rs.getInt("num");
                    String id = rs.getString("id");
                    String password = rs.getString("password");
                    String name = rs.getString("name");
                    String nickname = rs.getString("nickname");
                    String email = rs.getString("email");
    
                    user_dto dto = new user_dto(num, id, password, name, nickname, email);
                    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;
        }
    }

    서버와의 연결 확인 및 에러처리에 대한 코드가 포함되어 있는 것을 알 수 있다.

     

     

     

    user_dto.java

    package dao;
    
    public class user_dto {
    	private int num;
    	private String id;
    	private String password;
        private String name;
        private String nickname;
        private String email;
    //생성자
        public user_dto(int num, String id, String password, String name, String nickname, String email){
        	this.num = num;
            this.id = id;
            this.password = password;
            this.name = name;
            this.nickname = nickname;
            this.email = email;
        }
    //getter, setter
        public int getNum() {
        	return num;
        }
        public String getID() {
            return id;
        }
        public String getPassword(){
            return password;
        }
        public String getName(){
            return name;
        }
        public String getNickname(){
            return nickname;
        }
        public String getEmail(){
            return email;
        }
        public void setID(String id){
            this.id = id;
        }
        public void setPassword(String password) {
        	this.password = password;
        }
        public void setName(String name){
            this.name = name;
        }
        public void setNickname(String nickname){
            this.nickname = nickname;
        }
        public void setEmail(String email){
            this.email = email;
        }
    }

    위 코드는 dto코드로, 위에서 만든 데이터베이스의 요소들에 맞게 getter와 setter를 만들고, 생성자를 만들어주었다.

     

     

    이제 user테이블 내의 데이터를 웹 상에서 출력해보려고 한다.

    jsp파일 내 코드는 다음과 같다.

    <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8"%>
    <%@ page import="dao.user_dao" %>
    <%@ page import="dao.user_dto" %>
    <%@ page import="java.util.ArrayList" %>
    <html>
    	<head>
    	<meta charset="UTF-8">
        <title>DB test-page</title>
    	</head>
    	<body>
    		<%
    			user_dao userdao = new user_dao();
    			ArrayList<user_dto> dtos = userdao.User_Select();
    		
    			for(int i=0; i <dtos.size(); i++){
    				user_dto dto = dtos.get(i);
    				out.println(dto.getID());
    				out.println(dto.getName());
    				out.println(dto.getPassword());
    				out.println(dto.getEmail());
    			}
    		%>
    	</body>
    </html>

    user_dao.java 및 user_dto.java를 import하고, 새로운 객체를 생성하여 데이터를 받아 dtos에 저장한 모습을 볼 수 있다.

    저장된 데이터는 println을 통해 출력하도록 하였다.

     

     

     

    출력결과

    위에서 저장한 데이터베이스의 내용 그대로 화면에 출력하는 모습을 확인할 수 있다.

Designed by Tistory.