DTO?
Data Transfer Object, 즉, HTTP 메시지를 전달하고 스프링에서 계층간의 데이터를 전달할 때 사용하는 객체
DTO의 사용 이유
1. Entity와 DTO의 책임을 명확하게 분리하기 위함
- Entity는 ORM을 해주기 위한 객체
- DTO는 계층간의 데이터를 전송해 주기 위한 객체 & Client에게 Entity정보를 숨기기 위함
-> DTO 대신 Entity를 사용하게 된다면 Entity가 가지고 있는 민감한 정보(주민번호, 비밀번호,,)가 노출 될 수 있음
2. DB 구조가 변경됐을 때 코드의 유지보수에 용이하기 위함
예시
MemberController
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/member")
public class MemberController {
private final MemberService memberService;
@GetMapping("/{memberId}")
public MemberResponseDto getMemberInfo(
@PathVariable Long memberId
) {
return memberService.getMemberInfo(memberId);
}
}
MemberService
MemberService
@Service
@RequiredArgsConstructor
public class MemberService {
private final MemberRepository memberRepository;
public MemberResponseDto getMemberInfo(Long memberId) {
Member member = memberRepository.findById(memberId).orElseThrow(NullPointerException::new);
// Entity To DTO
MemberResponseDto responseDto = new MemberResponseDto(member);
return responseDto;
}
}
MemberResponseDto
@Getter
public class MemberResponseDto {
private String username;
private int age;
public MemberResponseDto(Member member) {
this.username = member.getUsername();
this.age = member.getAge();
}
}
Member & MemberRepository
@Getter
@Entity
@NoArgsConstructor
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private int age;
private String rrn; // 주민번호, Resident Registration Number
}
public interface MemberRepository extends JpaRepository<Member, Long> {}
'Spring' 카테고리의 다른 글
SOLID 원칙과 다형성의 한계(OCP, DIP) (1) | 2025.02.05 |
---|---|
연관관계 설정, 페이징, @ExceptionHandler를 적용한 일정 관리 서버 리팩토링 (1) | 2025.02.04 |
JDBC Templete을 이용한 일정 관리 서버 CRUD 구현 (3) | 2025.01.27 |
일정 관리 서버 만들기 설계 (API 명세서, ERD 작성) (0) | 2025.01.24 |
Web Application / WAS / Servlet (1) | 2025.01.22 |