-
Vo 와 Dao 차이점 파헤치기Spring 2024. 12. 3. 09:57반응형
1. VO (Value Object)
VO의 정의
- VO는 데이터를 저장하고 전달하기 위해 사용되는 객체입니다.
- VO는 데이터 캡슐화에 초점이 맞춰져 있으며, 객체를 생성한 후에는 상태가 변경되지 않는 **불변성(immutable)**을 가질 때가 많습니다.
VO의 주요 목적
- 애플리케이션 계층 간 데이터 이동.
- 데이터를 구조화하고 재사용성 및 가독성을 향상.
- 데이터를 안전하게 캡슐화하여 직접 접근을 방지.
VO의 특징
- 불변성: 일반적으로 생성 후 값이 변경되지 않도록 설계됩니다. 이를 통해 데이터 무결성을 유지할 수 있습니다.
- 비즈니스 로직 없음: 단순히 데이터를 담는 용도로 사용되며, 계산이나 로직이 포함되지 않습니다.
- **DTO(Data Transfer Object)와 유사: DTO도 계층 간 데이터를 전달하는 역할을 하지만, VO는 주로 데이터 무결성을 강조합니다.
VO 예시 (Java)
사용자 정보를 VO로 표현
public class UserVO { private final String name; // 이름 private final int age; // 나이 // 생성자 public UserVO(String name, int age) { this.name = name; this.age = age; } // Getter 메서드만 제공 (불변성) public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return "UserVO{name='" + name + "', age=" + age + "}"; } }
사용 예
UserVO user = new UserVO("Alice", 25); System.out.println(user.getName()); // "Alice" System.out.println(user.getAge()); // 25
2. DAO (Data Access Object)
DAO의 정의
- DAO는 데이터베이스 또는 외부 저장소와 상호작용하는 객체입니다.
- 데이터 저장, 조회, 수정, 삭제와 같은 작업을 처리하는 데 사용됩니다.
DAO의 주요 목적
- 데이터 접근 로직을 캡슐화하여 재사용 가능하게 만듦.
- 데이터 접근 코드를 서비스나 비즈니스 로직과 분리.
- 데이터베이스와의 종속성을 줄이고, 유지보수성을 높임.
DAO의 특징
- 데이터 접근 코드 포함: 데이터베이스에 쿼리를 보내거나 결과를 받아오는 로직이 포함됩니다.
- CRUD 작업 지원: Create, Read, Update, Delete 작업을 처리합니다.
- 비즈니스 로직 없음: 비즈니스 로직은 서비스 계층에서 처리하며, DAO는 오직 데이터 접근에 집중합니다.
- ORM과의 통합 가능: Hibernate, JPA와 같은 ORM을 사용할 때도 DAO 패턴을 활용할 수 있습니다.
DAO 예시 (Java)
사용자 정보를 DAO로 처리
import java.sql.*; import java.util.ArrayList; import java.util.List; public class UserDAO { private Connection connection; // 생성자: DB 연결 설정 public UserDAO(Connection connection) { this.connection = connection; } // 사용자 정보 전체 조회 public List<UserVO> getAllUsers() throws SQLException { String query = "SELECT name, age FROM users"; PreparedStatement statement = connection.prepareStatement(query); ResultSet resultSet = statement.executeQuery(); List<UserVO> users = new ArrayList<>(); while (resultSet.next()) { String name = resultSet.getString("name"); int age = resultSet.getInt("age"); users.add(new UserVO(name, age)); } return users; } // 사용자 추가 public void addUser(UserVO user) throws SQLException { String query = "INSERT INTO users (name, age) VALUES (?, ?)"; PreparedStatement statement = connection.prepareStatement(query); statement.setString(1, user.getName()); statement.setInt(2, user.getAge()); statement.executeUpdate(); } }
사용 예
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password"); UserDAO userDAO = new UserDAO(connection); // 데이터 추가 UserVO newUser = new UserVO("Bob", 30); userDAO.addUser(newUser); // 데이터 조회 List<UserVO> users = userDAO.getAllUsers(); for (UserVO user : users) { System.out.println(user); }
3. VO와 DAO의 주요 차이점
구분 VO(Value Object) DAO (Data Access Object) 역할 데이터를 구조화하여 저장하고 계층 간 전달. 데이터베이스와의 상호작용 담당. 포함 내용 데이터 필드와 Getter/Setter 메서드. CRUD 작업 로직(SQL 쿼리 또는 ORM 메서드). 계층 애플리케이션 계층 또는 서비스 계층. 데이터 접근 계층(Data Access Layer). 비즈니스 로직 없음 없음 주요 특징 데이터 값의 불변성을 강조. 데이터베이스와 직접 연결하여 데이터 조작. 사용 예 API 응답 데이터, 요청 데이터 포맷팅. 데이터 저장소에서 데이터 조회, 추가, 수정, 삭제.
4. 실전에서의 사용 시나리오
- VO 사용 시나리오
- 클라이언트가 서버로 데이터를 보낼 때, 또는 서버가 클라이언트에 데이터를 반환할 때 VO를 사용.
- 예: REST API 요청과 응답에서 VO를 활용.
{ "name": "Alice", "age": 25 }
2. DAO 사용 시나리오
- 데이터베이스에서 데이터를 가져와 VO에 담아 전달.
- 예: 사용자 관리 시스템에서 users 테이블 데이터를 읽고 작성.
5. 서비스 계층에서 VO와 DAO의 연계
public class UserService { private UserDAO userDAO; public UserService(UserDAO userDAO) { this.userDAO = userDAO; } // 사용자 추가 public void addUser(String name, int age) throws SQLException { UserVO userVO = new UserVO(name, age); userDAO.addUser(userVO); } // 사용자 조회 public List<UserVO> getAllUsers() throws SQLException { return userDAO.getAllUsers(); } }
반응형'Spring' 카테고리의 다른 글
Spring - 스프링 서버 실행 흐름 및 설정 파일/어노테이션 실행 시점 (0) 2024.12.23 Spring MVC - <mvc:interceptors> 사용법 및 설명 (0) 2024.12.12 초간단 SpringBoot DB데이터 Excel 다운로드 (0) 2024.10.25 SpringBoot 초간단 엑셀 다운로드 기능 구현(Apache POI) (0) 2024.10.25 [Spring boot] - 소셜로그인(Naver,Google) + 일반로그인 구현 (0) 2024.07.23