티스토리 뷰

728x90

이전에 entity 파일을 타입으로 써도 될까? 이런 글을 작성한 적이 있다. 너무 오래되어서 기억이 나지 않았지만 최근 면접에서 이 글에 대해 질문을 했을 때 기억이 나지 않아 다시 복기 하고자 공부하였다.

일단 저 글을 다시 요약해보자면 외주업체가 하던 프로젝트를 이어서 받았는데 거기에 entity 파일을 타입으로 쓰는 경우가 많았고 그 레거시 코드를 고치지 않았음. 코드 전체에 UserEntity 객체를 퍼져있다 보니, 어떤 코드가 DB에 직접 접근하고 어떤 코드가 단순히 데이터 타입만으로 사용하는지 추적이 매우 어려웠다.
원래는 DB 스키마가 변경되더라도 DTO 등 여러 파일을 수정할 필요 없이 Entity 하나만 바꾸면 되니 오히려 효율적이지 않을까? 라고 생각했는데 이제는 아니다.

이후..
당시 nest.js를 시작한지 오래되지 않아 이상하게 생각했는데 Entity를 단순 타입처럼 사용하는게 좋지 않다는 것을 깨달았다.

다시 DTO에 대해서 찾아서 정리하자면,
DTO(Data Transfer Object)는 계층 간 데이터 전송을 위한 순수한 데이터 객체이다.

그리고 중요한 것은 DTO를 사용하지 않으면 나처럼 고생을 하거나 아래와 같은 문제가 생긴다.

  • Entity를 클라이언트에게 그대로 노출하면 비밀번호 같은 민감 정보가 유출될 수 있다.
  • API의 요청/응답 형식이 바뀔 때마다 내부 핵심 로직(Service)까지 수정해야 한다. (계층 간 결합도가 높아짐)