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
복사