Blog

[Spring]20_2 MVC패턴 CRUD 구현 흐름 파악_대표적으로 Create 기능 구현을 통해 보는 실제 Dto-Entity의 변환 모습

Author
Summary
DTO, Entity의 존재는 이번주차의 핵심
Category
Study
Tags
Spring
Favorite
Memory Date
2023/08/31
Cross Reference Study
Related Media
Related Thought
Related Lessons
tag
날짜
작성자
진행상황
진행 전
태그구분
6 more properties
PostRequest 방식에서의 Dto, Entity 변환 모습
클라이언트로부터 전달되는 데이터는 매개변수 @RequestBody는 Dto타입으로 형변환이 이루어 진다. 이후 매개변수에 담긴 값들을 Java가 다룰 수 있는 Entity(실질 객체 클래스)로 변환되어 메소드 내부에서 사용 될 준비가 된다. 이는 객체 지향 다형성의 특징을 반영하고 있다.
Entity 로 실질 Java객체 상태가 된 데이터들은 메소드 내부에서 가공되거나, 사용되거나, 제거되거나, DB로 들어가기도 하며 다양하게 사용된다.
이후 마지막에 가공된 실질 객체 Entity는 ResponseDto로 변환되며 가공이 마무리된 Dto 타입 객체가 곧 JSON형태로 다시 클라이언트로 반환되게 된다.
사실 개념을 글로 풀어쓰면 엄청 복잡해보이지만, 그림이 오히려 이해가 쉬웠다. 현재 아래 코드는 아직 Controller, Service, Repository로 3 Layer구성은 아니지만, 결과적으로는 Controller가 역할과 기능을 분리하는 것이지 각 계층을 이동해야 할 때는 Dto 타입인 상태여야 하는 것은 변함 없다.
//[1]게시글 작성 - CREATE @PostMapping("/posts") public BlogResponseDto postBlog(@RequestBody BlogRequestDto requestDto) { // RequestDto -> Entity Blog blog = new Blog(requestDto); // DB 저장 KeyHolder keyHolder = new GeneratedKeyHolder(); // 기본 키를 반환받기 위한 객체 //String sql DML문장이 실행됨 String sql = "INSERT INTO blog (title, author, contents, password) VALUES (?, ?, ?, ?)"; // <--- title, author, contents, password 각각 동적으로 아래 setString으로 결정하게함 jdbcTemplate.update(con -> { PreparedStatement preparedStatement = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); //idx 자동 증가 preparedStatement.setString(1, blog.getTitle()); // <--- 이것이 title preparedStatement.setString(2, blog.getAuthor()); // <--- 이것이 author preparedStatement.setString(3, blog.getContents()); // <--- 이것이 contents preparedStatement.setString(4, blog.getPassword()); // <--- 이것이 password return preparedStatement; }, keyHolder); // DB Insert 후 받아온 기본키 확인 Long idx = keyHolder.getKey().longValue(); blog.setIdx(idx); // Entity -> ResponseDto BlogResponseDto blogResponseDto = new BlogResponseDto(blog); return blogResponseDto; }
Java
복사