NestJS를 사용하다보면 데이터를 주고 받을 때 DTO를 사용하게 된다.
DTO(Data Transfer Object)
: 데이터가 네트워크를 통해 전송되는 방법을 정의하는 객체
이 DTO는 class와 interface 두 가지를 사용하여 생성할 수 있다.
책을 따라 실습을 하던 중 회원정보(이름, 이메일, 비밀번호)를 주고 받을 때 사용하는 DTO가 필요하여 나는 interface를 사용하여 작성했다.
그 이유는 interface가 타입을 정의할 때 사용되기도 하고, '회원정보' 같이 정해진 형식을 정의해서 사용하기에 더 적합하다고 생각했기 때문이다.
하지만 코드를 짠 후에 책을 보니 해당 코드는 class를 이용하여 작성되어 있었고, 그 이유를 생각해내지 못했다.
공식문서를 찾아보니 역시 class를 이용하는 것을 추천하고 있었고, 그 이유는 다음과 같았다.
class는 JavaScript ES6 표준을 따르므로 컴파일된 JavaScript에서도 보존된다. 반면 TypeScript의 interface는 컴파일 중에 제거되기 때문에 런타임에서 이를 참조할 수 없다.
그랬다.
단순히 말이 되는 코드를 짜는게 전부가 아니었다.
특히나 Javascript, Node.js를 넘어 Typescript와 NestJS를 연습 중인 나는 컴파일을 염두에 두고 있어야 했지만 생각이 짧았다.
짧고, 간단한 내용이지만 "왜?" 라는 생각이 들면 꼭 찾아보는게 도움이 되고, 향후에 같은 실수를 반복하지 않을 수 있다.
오늘 정리한 이 내용도 이 기록과 함께 머릿속에 쌓아야겠다.
여담으로, 요즘은 인턴 업무와 별개로 NestJS 실력을 키우기 위해서(사실 실무 코드를 이해하기 위해 반드시 필요..) 책을 따라 실습을 하는 중이다.
NestJS를 잘 다루기 위해 필요할 때마다 공식문서를 자주 읽긴 하지만 그 내용들을 외우려고 보는 게 아니기 때문에 필요한 상황이 지나가버리면 정확히 기억하는게 쉽지 않은 편이다.
혼자 공식문서를 보면서 공부를 해도 가능은 하겠지만, 물리적으로 소요되는 시간을 줄일 수도 있고, 정리된 내용을 더 잘 이해할 수 있기 때문에 책을 선택했는데 결과적으로 나에게는 잘 맞는 방법 같다.
(참고로 선택한 책은 "NestJS로 배우는 백엔드 프로그래밍"이다.)
앞으로도 이렇게 '책-실습-고민-공식문서-기록'의 싸이클이 반복된다면 나아지지 않을까.. 희망해본다.