Skip to content

Dto 메서드 전략

GWANGHYEON KIM edited this page Dec 3, 2024 · 1 revision

주요 메서드 패턴

1. toEntity() 패턴

  • 용도: DTO → Entity 변환
  • 특징:
    • 주로 요청 DTO에서 사용
    • 새로운 엔티티 생성 시 활용
export class SigninDto {
  email: string;
  name: string;

  toMember() {
    const member = new Member();
    member.email = this.email;
    member.name = this.name;
    return member;
  }
}

2. from() 패턴

  • 용도: Entity → DTO 변환
  • 특징:
    • 주로 응답 DTO에서 사용
    • 정적 메서드로 구현
    • 단일/복수 변환 지원
export class BookmarkDto {
  bookmarkId: number;
  name: string;

  static from(bookmark: Bookmark) {
    const dto = new BookmarkDto();
    dto.bookmarkId = bookmark.id;
    dto.name = bookmark.name;
    return dto;
  }

  static fromList(bookmarks: Bookmark[]) {
    return bookmarks.map(bookmark => this.from(bookmark));
  }
}

3. of() 패턴

  • 용도: 다중 소스 → DTO 변환
  • 특징:
    • 여러 데이터를 조합하여 DTO 생성
    • 복잡한 변환 로직 포함 가능
    • 부가적인 데이터 처리 가능
export class AttendanceResponseDto {
  memberId: number;
  attendances: AttendanceInfo[];

  static of(memberId: number, attendances: Attendance[]) {
    const dto = new AttendanceResponseDto();
    dto.memberId = memberId;
    dto.attendances = attendances.map(/* 변환 로직 */);
    return dto;
  }
}

패턴 선택 기준

  1. toEntity()
    • 새로운 엔티티 생성이 필요할 때
    • 클라이언트 요청 데이터를 엔티티로 변환할 때
  2. from()
    • 엔티티를 클라이언트 응답용 DTO로 변환할 때
    • 단순 매핑이 필요한 경우
  3. of()
    • 여러 데이터 소스를 조합해야 할 때
    • 복잡한 변환 로직이 필요한 경우
    • 추가적인 데이터 처리가 필요한 경우

장점

  • 일관된 네이밍 컨벤션 유지
  • 변환 로직의 응집도 유지
  • 필요한 경우 여러 패턴 조합 사용
  • 타입 안정성 보장
  • 명확한 책임 분리

👥 팀 강점

🧑‍💻 개발 일지

📌 ALL

📌 FE

📌 BE

💥 트러블 슈팅

📌 FE

📌 BE

🤔 고민

📚 학습 정리

📌 김광현

📌 백지연

📌 전희선

📌 한승헌

🤝 회의록

🗒️ 데일리 스크럼

💬 팀 회고


👨‍👩‍👧‍👦 소개

🌱 문화

🔨 기술 스택

⚙️ 서비스 아키텍쳐

🚧 CI/CD

🌊 Flow

💭 6주를 보내면서

Clone this wiki locally