일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- MongoDB
- Kibana
- docker
- 티스토리챌린지
- Python
- SQL
- 호이스팅
- isNotEmpty
- spring
- iBatis
- 리눅스
- pandas
- 오블완
- MariaDB
- analytics4
- java
- pem
- git
- Linux
- IntelliJ
- mssql
- github
- Javascript
- PostgreSQL
- DBMS
- oracle
- isempty
- 명령어
- 자바
- mysql
- Today
- Total
hanker
Spring - MaBatis 사용 시 VO/DTO vs Collection 장단점 본문
웹 개발 시 데이터베이스에서 꺼내온 데이터를 어떻게 담고, 다루는 방법에 대해서는 여러가지 방법이 있다.
MyBatis와 같은 프레임워크를 사용할 때 흔히 선택하는 방법은 VO/DTO 클래스를 사용하거나 Collection Framework로 데이터를 다루는 방식이다.
각각의 방식은 상황에 따라 장단점이 있다.
이번 글에서는 VO/DTO 클래스를 사용하는 방법과 Collection Framework를 사용하는 방법에 대해서 장단점과 사용 방법에 대해서 알아보자.
1. MyBatis 환경에서의 선택
Mybaits는 SQL과 자바 객체 간의 매핑을 돕는 프레임워크로, Entity나 Dto 클래스를 강제하지 않느낟.
따라서 Collection을 사용하거나 DTO/VO 클래스를 사용할 수 있다.
1-1. Collection 사용
- 간단한 조회나 임시 데이터를 처리할 때, Map이나 List 같은 Collection을 사용하면 빠르게 결과를 받아볼 수 있다.
- 다만, 앞서 언급한 타입 안전성과 가독성, 유지보수 측면에서는 단점이 존재한다.
1-2. DTO/VO 사용
- 명확한 객체 모델링을 통해 매핑하면, 복잡한 비즈니스 로직이나 대규모 프로젝트에서 코드의 안정성과 가독성을 유지할 수 있다.
- MyBatis의 ResultMap이나 자동 매핑 기능을 활용하여, DTO/VO로 쉽게 매핑할 수 있다.
아래에서 사용 장단점에 대해서 더 자세히 알아보자.
2. VO / DTO 클래스를 사용하는 방식
2-1. 장점
타입 안정성 및 명확한 모델링
- VO (값 객체)나 DTO(데이터 전송 객체)는 클래스 내에 필드와 데이터 타입이 명확하게 정의되어 있어 컴파일 타임에 타입 검증이 가능하다.
- 데이터 구조가 코드 내에 명시되어 있어, 협업 시에도 어떤 데이터가 오가는지 쉽게 파악이 가능하다.
계층 간의 명확한 분리
- 엔티티(도메인 모델)와 외부에 노출하는 데이터 모델을 분리하면, 내부 구현이 외부에 그대로 노출되지 않아 보안과 유지보수에 유리하다.
- 요청/응답 데이터를 전용 객체로 관리하여, 데이터 검증, 변환, 포맷팅 등 추가 로직을 포함할 수 있다.
IDE 지원 및 가독성 향상
- 클래스 기반으로 작성되면 자동 완성, 리팩토링 도구 등 IDE의 강력한 기능을 활용할 수 있다.
- 코드 자체가 문서 역할을 하므로, 프로젝트의 복잡도가 높아져도 유지보수가 용이해진다.
2-2. 단점
초기 개발 비용
- VO / DTO 클래스를 별도로 정의하고 관리해야 하므로, 단순한 CRUD나 작은 프로젝트에서는 오버헤드가 될 수 있다.
- 데이터 구조가 자주 변경되는 경우, 클래스 수정과 관련된 작업이 빈번해질 수 있다.
변환 작업 필요
- DB 결과를 DTO/VO로 매핑하는 작업은 추가적인 개발 작업으로 이어진다.
3. Collection Framework를 사용하는 방식
3-1. 장점
빠른 개발 및 유연성
- 별도의 클래스를 정의하지 않고, List<Map<String, object>>와 같이 바로 데이터를 다룰 수 있어 빠른 프로토타이핑이나 단순 작업에 유리하다.
- 데이터 구조가 고정되지 않은 경우 유연하게 사용할 수 있다.
간편한 데이터 핸들링
- 간단한 데이터 조회나 임시 처리 로직에서는 클래스 정의 없이 Collection 을 이용하여 데이터를 다루는 것이 직관적일 수 있다.
3-2. 단점
타입 안정성 부족
- Map과 같은 Collection을 사용하면 모든 값이 Object 타입으로 관리되기 때문에, 잘못된 타입 캐스팅이나 런타임 오류의 위험이 있다.
- 코드 상에서 데이터 구조와 타입이 명시적이지 않아, 협업이나 장기 유지보수 측면에서 혼란을 초래할 수 있다.
가독성 및 유지보수 어려움
- 데이터의 키 값(예 "username", "age" 등)에 의존하여 코딩하다 보면, 오타나 변경 시 전체코드를 점검해야 하는 부담이 있다.
- 데이터 구조가 문서화되어 있지 않아, 코드 리뷰나 협업 시 가독성이 떨어질 수 있다.
정리
VO/DTO 사용은 데이터 구조를 명확히 하고 타입 안정성, 가독성, 유지보수 측면에서 큰 장점을 제공한다.
특히 대규모 프로젝트나 협업 환경, 복잡한 비즈니스 로직을 다룰 때 유리하다.
Collection 사용은 빠른 개발과 유연성을 제공하지만,
데이터 구조의 불명확함과 타입 안정성 부족으로 인한 유지보수 문제에 주의해야 한다.
MyBatis와 같은 프레임워크에서는 두 가지 방식을 모두 사용할 수 있으나, 프로젝트의 복잡도와 향후 유지보수를 고려해 DTO/VO 클래스를 적극적으로 활용하는 것이 일반적으로 권장된다.
끝.
'SPRING' 카테고리의 다른 글
iBatis - isEqual / isNotEqual (문자열 비교) (0) | 2025.03.12 |
---|---|
Spring - iBatis 와 MyBatis에서 selectKey 사용법 (INSERT 시 PK 가져오기) (0) | 2025.03.08 |
Spring - 각 DBMS 별 페이징 처리 방법 (0) | 2025.02.13 |
Spring - RESTful API Http 응답 제어하기 (ResponseEntity 사용법) (0) | 2024.12.08 |
Spring - Spring Boot로 RESTful API 설계 (0) | 2024.12.07 |