기초를 쌓지않으면 언젠가 무너진다
더 노력해야겠다
건강 잘챙기자
@Transactional // 조회 제외하면 transactional 걸어주기
public PostResponseDto updatePost(Long id, PostRequestDto requestDto) {
Post post = findPostId(id);
post.update(requestDto);
Post updatedPost = postRepository.save(post);
return new PostResponseDto(updatedPost);
}
기본적인 update 코드인데 맨처음에는 return 타입을 Entity로 지정했었다.
별거 다를거 없어보였지만 Entity로 지정했을시 발생하는 문제가 존재했다 뭘보내고있는지 알수 있기때문에
보안이슈가 발생한다는 것이였다.
https://simplifyprocess.tistory.com/26
과거 개인정보 유출보안사고중에서 비슷한 사례가 있었는데, 회원 정보를 제공하는 api에서 회원 db에 있는 모든 정보(Entity)를 그대로 Dto로 만들어서 Client에게 전달했습니다. 그점을 해커가 이용해서 특정 계정으로 인증을 한뒤에
Crawling Script로 회원 api의 파라미터 정보를 바꿔가면서 api를 호출해서 고객정보를 획득해간 사례가 다음에 해당합니다. 하물며 DB Fields = Dto Fields라는 사실입니다.
public PostResponseDto createPost(PostRequestDto requestDto, User user) {
Post newPost = requestDto.toEntity();
newPost.setUser(user);
Post savedPost = postRepository.save(newPost);
// dto변환
PostResponseDto postResponseDto = new PostResponseDto(savedPost);
// entity를 사용하고나서 반환해야한다?컨트롤러로
return postResponseDto;
}
entity타입의 변수에 requestDto를 entity화 한다음 반드시 Dto로 변환을 다시 해줘야한다고 한다.
데이터 전송 객체(DTO) 패턴의 일환으로, 프레젠테이션 계층(DTO)과 영속성 계층(엔티티)을 분리하는 데 사용됩니다
이런이유라고 한다.
requestDto
를 엔티티로 바꾸고 다시 DTO로 변환하는 이유를 간단히 설명하겠습니다.