- 현재 상황: 서비스 계층은 dto를 엔터티 객체로 변환하여 전달하는 역할 - 의문점: 서비스 계층에 비즈니스 로직이 거의 없는 상황에서 테스팅은 어떻게 해야할지? - 비즈니스 로직이 별로 없고, 대부분 API에서 db와 crud만 함 - e2e 테스트만 진행해야 할까요? → 이렇게 해도 좋을 것 같음
- 추가질문: 일반적으로 엔터티 객체를 왜 응답 dto로 변환해서 굳이 클라이언트에 전달하는건가요?
단위테스트가 필요한 구간 → 서버에 보내는 요청에 대해서, 파라미터 같은게 누락된게 있을 때 정상적으로 처리하는지 ( 예측할 수 있는 오류를 뱉는다 ), 정상적으로 데이터가 변환되서 사용자에게 전달 되는지
→ 테스트할 수 있는 케이스, 꼭 필요한가? 지금 당장 그렇게까지 중요하진 않을 것 같다.
→ DB에 있는 데이터를 조합해서 새로운 데이터를 만들어서 사용자에게 전달한다
→ DB에 있는 데이터는 인터페이스가 존재를하고, 그런 인터페이스를 조합해서 정상적인 값을 만들어내는가
- 데이터베이스에 사용자 정보가 있음 → 가져옴 → 이거를 바로 클라이언트에 전달하는게 맞을까? → 정제하는 과정이 필요하지 않을까?
- 필요한 데이터만 뽑아다가 쓸 때
- DB에 있는 정보를 (혹은 API에 있는 정보) 그대로 사용하면 문제가 될 때가 있고
- 코딩컨벤션
변수를 camelCase로 쓰고 싶다
그런데 db에 저장된 정보나, api로 받아온 정보들이 snake_case로 되어있네?
변환해서 쓰고 싶은데? → 일관성 있게 관리하고 싶어서
혹시 dto로 필요없는 정보를 필터링 할 수 있나요?
예)
userInfo { name, user_id, access_token }
userInfoDto = {name, user_id}
function (userInfo: userInfoDto){
// access_token 자동으로 안받아와지는…
name, user_id
}
class UserInfoDTO { name; user_id; consturcotr(userInfo: { name, user_id, access_token }) { this.name = name; this.user_id = user_id; } get firstName() { return name.split(" ")[0]; } get lastName() { return name.split(" ")[1]; } } const userInfoDTO = new UserInfoDTO(userInfo); function fn(userInfo: userInfoDto){ // access_token 자동으로 안받아와지는… name, user_id } fn(userInfoDTO) fn(new UserInfoDTO({ name, user_id, acces_token })); userInfoDTO.access_token; userInfoDTO.firstName; userInfoDTO.lastName;
혹시 new 말고 function ( : ) typescript 타입 체크로는 안되는거죠?
아하 감사합니다
아아아아아아 굿굿굿굿굿굿굿굿
DTO를 interface로 해야 좋을까?
vs Class를 정의해야 좋을까
→ validate를 할려면 runtime에 살아있어야돼서 class가 맞을 것 같아요