728x90
반응형
✨ Map vs DTO
Spring Security로 login을 구현하며 사용자에게 login 정보를 받아올 때 Map을 사용하여 받아왔는데
데이터 전달 시 Map이나 DTO를 많이 사용하는데 Map보다는 DTO 사용이 더 권장된다고 한다.
✨ Map과 DTO의 장단점
Map
Map은 키-값 형태의 자료구조로 동적으로 필드를 추가하거나 제거하는 것이 가능하여 데이터 구조가 유연하다는 장점이 있다.
Map의 value은 Object 타입이다. 때문에 잘못된 타입의 데이터가 들어와도 컴파일 에러를 발생하지 않아 데이터 검증이 어려워진다.
가독성이 떨어진다는 단점도 있다. 내부 구조를 알 수 없기 때문에 필드가 어떤 의미를 갖고 있는지 파악하기 어렵다.
또한 Map의 데이터를 사용하기 위해서는 타입 캐스팅이 필요하기 때문에 별도의 비용이 발생한다.
DTO
반면 DTO는 내부 구조를 알 수 있기에 더 명시적이고 코드의 가독성과 유지보수성이 높다.
또한 컴파일 시 데이터 타입을 검증할 수 있기에 타입 안전성이 높다.
타입 캐스팅 비용도 발생하지 않으며, 불변성을 확보할 수 있다.
✨ 수정 후 코드
아래는 기존 Map을 사용하여 사용자 정보를 받아오는 부분을 LoginRequestDto를 구현하여 dto로 받아오도록 수정한 코드이다.
// 수정 전 (Map 사용)
Map<String, String> useranmePasswordMap = objectMapper.readValue(messageBody, Map.class);
String username = useranmePasswordMap.get(USERNAME_KEY);
String password = useranmePasswordMap.get(PASSWORD_KEY);
// 수정 후 (dto 사용)
LoginRequestDto loginRequestDto = objectMapper.readValue(messageBody, LoginRequestDto.class);
String username = loginRequestDto.getUsername();
String password = loginRequestDto.getPassword();
728x90
반응형
'Spring' 카테고리의 다른 글
멱등성, @PutMapping과 @PatchMapping의 차이 (0) | 2024.09.11 |
---|---|
Spring 페이징 처리 시 Pageable vs @RequestParam 비교 (0) | 2024.09.10 |
[AreYouTravelers] CodeDeploy와 CodeDeploy Agent, EC2 IAM Role이 필요한 이유 (0) | 2024.06.27 |
[AreYouTravelers] 시스템 아키텍처 (0) | 2024.06.26 |
스프링 프레임워크와 의존성 주입 (3) | 2023.03.07 |