MySQL에서 반환되는 데이터(+ Entity,DTO)

김희산·2023년 6월 28일
0

TIL

목록 보기
20/23

프로젝트를 하면서 생긴 일에 대해서 간단히 적어보았습니다.

MySQL에서 데이터를 조회하거나 수정, 추가 요청을 할 때 발생하는 문제에 대해 설명하고자 합니다. 우리는 일반적으로 JavaScript에서 주로 사용하는 카멜 케이스(camelCase)를 따르지만, MySQL에서 반환하는 데이터는 스네이크 케이스(snake_case)로 반환되기 때문에 이에 대한 일관성이 떨어지고, 코드의 가독성이 저하되는 문제가 있었습니다.

문제 상황

우리 팀에서는 JavaScript를 주로 사용하고, 코드 작성 시에는 카멜케이스(camelCase)를 사용합니다. 그러나, MySQL 데이터베이스에서 조회한 데이터는 스네이크 케이스(snake_case)로 반환되므로, 이로 인해 코드 일관성이 떨어지고 가독성이 저하되었습니다.

해결 방법

이 문제를 해결하기 위해, 아래 코드의 내용과 같이 MySQL에서 반환된 데이터(엔티티)를 카멜케이스로 변환하여 클라이언트에게 전달하도록 하였습니다. 이를 통해 프로젝트의 전체 코드의 일관성을 유지할 수 있었으며, 코드의 가독성도 향상되었습니다.

다음은 이를 구현한 JavaScript 코드입니다.

export function toCamelCase(str: string): string {
  return str.replace(/([-_][a-z])/g, (group) => group.toUpperCase().replace('-', '').replace('_', ''));
}

export function rowToCamelCase(row: any): any {
  const newRow: any = {};
  for (const key in row) {
    const camelKey = toCamelCase(key);
    newRow[camelKey] = row[key];
  }
  return newRow;
}

부록

'엔티티'와 'DTO'에 대해 간략히 설명하자면, '엔티티'는 DB에 저장되거나 DB로부터 검색되는 실제 데이터를 나타냅니다. 데이터베이스 테이블에 매핑되는 모습으로 이해하면 쉽습니다.

반면에 'DTO(Data Transfer Object)'는 계층 간 데이터를 전송하기 위해 사용되는 객체입니다. DTO는 엔티티의 데이터를 효율적이고 안전하게 전송하기 위해 사용됩니다. 엔티티에서 가져온 데이터를 필요에 따라 결합하거나 변형시킬 수 있으며, 클라이언트가 원하는 형태의 데이터로 전달할 수 있습니다.

따라서, '엔티티'는 내부 도메인 로직을 처리하고 데이터베이스와 상호작용하는 반면, 'DTO'는 엔티티를 전달하거나 전송하기 위한 목적으로 사용됩니다.


Entity, DAO, DTO의 대해서도 추후에 자세하게 정리하도록 하겠습니다.

이 내용이 다른 분들에게도 도움이 되길 바랍니다. 다음에는 다른 주제로 만나요!

profile
성공은 제로섬 게임이 아니라 주변인들과 함께 나아가는 것이다.

0개의 댓글