DTO 정의
Data Transfer Object의 약자이다.
직역하자면, 데이터 전송 객체이고, 객체 지향 프로그래밍에서 사용되는 요소이다.
DTO는 비즈니스 로직과 같은 요소를 제외하고 데이터만 저장해야한다.
예시로 보면 쉽다.
1
2
3
4
5
6
7
8
9
class User {
String name;
String address;
public User(String name, String address) {
this.name = name;
this.address = address;
}
}
이것이 DTO인데, 사실 필자가 이 개념을 처음 접하게 되었을 땐 대체 이 코드를 실전에서 어떻게 써먹나? 라는 생각을 했었다.
객체 지향 프로그래밍을 다시 제대로 공부하면서 어디에 써먹는지 비로소 알 수 있게 되었다.
어디에 쓰나? (DTO와 관련된 반성)
바로 DB와 관련된 작업을 할 때 사용한다(해야 한다).
백엔드 작업을 하면서 DB에서 정보를 가져와서 이리저리 요리해야 하는 순간이 있다. 이 때, DTO를 사용하지 않고 바로 그 데이터를 건드리게 된다면?
높은 확률로 위험하다.
위험하기도 한데, 또 번거롭기도 하다. DB에서 가져온 데이터를 바로바로 수정하려면 그 때에 맞는 SQL을 추가적으로 작성해줘야 하기 때문이다.
그렇기 때문에 DB에서 가져와서 일단 Java식 데이터로 저장을 한 다음에 이것으로 이리저리 써먹는 것이다. 저장해놓고 이리저리 써먹기 때문에, 필요할 때마다 그때 그때 다시 데이터를 불러오는 일도 줄어든다.
다시 말해, 필자가 느낀 DTO의 필요성은 아래의 3가지이다.
1
2
3
1. 원본 데이터의 신뢰성과 안전성을 보장한다. (수정하더라도 DB에 반영을 안하면 그만이기 때문)
2. SQL 작성을 최소화 하면서 코드 작성 및 가독성을 높인다.
3. DB 접근 횟수가 줄어들기 때문에 프로그램 성능이 향상된다.
SSAFY에 와서 OOP를 공부하면서 DTO의 필요성을 몸소 깨닫게 되었다.
이후 프로젝트에서는 꼭 필요없는 상황이 아니라면, 무조건 DTO를 사용하여 데이터의 안전성을 보장하는 백엔드 개발자가 되고자 한다.