ssung_항해일지/항해99_Spring_입문, 숙련, 심화

spring - 14일차

ssungcohol 2023. 2. 18. 03:13

영속성 컨텍스트

 

영속성 컨텍스트는 JPA에서  Entity를 관리하기 위한 중요한 메커니즘이다

(JPA는 객체와 관계형 데이터베이스 간의 매핑을 제공하는 ORM 기술의 표준)

 

JPA에서는 Entity 객체를 DB에서 조회할 때마다 새로운 객체를 생성하지 않고, 영속성 컨텍스트에서 먼저 조회

 => DB 조회가 필요 없어져 어플리케이션의 성능을 향상시킴

 

객체의 변경사항을 추적하고, 트랜잭션을 커밋할 때 해당 변경사항을 DB에 반영

=> 어플리케이션에서 DB 변경 작업을 쉽게 처리

 

Entitiy 객체를 여러개 보유하며, 트랜잭션 단위로 관리

=> 트랜잭션 롤백 시 영속성 컨텍스트가 관리하는 모든 엔티티 객체의 변경사항도 취소

 

Entity 객체의 동일성(Identity)를 보장

 => 같은 ID 값을 가진 엔티티 객체는 항상 같은 인스턴스로 관리 => 객체의 동일성 비교 시 객체의 주소 값을 비교

 

Entity 객체를 지속적으로 관리하기 때문에, 어플리케이션이 종료될 때까지 존재

=> Entity 객체 삭제 시 삭제 쿼리를 생성하여 DB에서 삭제하는 것이 아닌, 컨텍스트에서 해당 객체를 삭제하면 됨


게시물 수정 및 삭제에 관리자 권한을 부여하여 작성자와 관리자 모두가 삭제 수정이 가능하게 하는 과제

 

문제 - 관리자 권한을 추가하였는데, 게시물 수정에서 관리자의 토큰 값으로 게시물 수정 시

" 해당 게시물이 존재하지 않는다"는 메세지 반환

 

원인 - 기존 게시물 확인 코드에서 작성자의 id 값까지 조회하여 게시물 유무 여부를 확인하였기 때문에 관리자 접근 불가

// 게시물의 여부를 확인하는 해당 코드

Notice notice = noticeRepository.findByIdAndUserId(id, user.getId()).orElseThrow(
	() -> new NullPointException("해당 게시물이 존재하지 않습니다.")
);

해결 및 변경 코드

Notice notice = noticeRepoistory.findById(id).orElseThrow(
	() -> new NullPointException("해당 게시물이 존재하지 않습니다.")
);

기존에는 관리자의 권한이 없었기 때문에 해당 게시물 작성자 만이 수정 권한을 갖기 위해 작성자의 Id 값을 가져와 확인해야해 했었다.

하지만, 관리자가 등장하여 관리자와 작성자 모두 게시물을 수정할 수 있게 해야했기에 관리자에게도 해당 게시물을 볼 수 있게 해줘야했음

따라서, 관리자와 작성자 모두가 수정을 할 수 있게 해주는 코드를 작성해야 했음

// 수정 권한을 작성자와 관리자 모두 가지게 해주는 방법

if (user.getRole().equals(UserRoleEnum.ADMIN
	|| notice.getUser().getUsername().equlas(user.getUsername())) {
    
    notice.update(requestDto);
    
    retuen new NoticeResposeDto(notice);
    
    } else return null;

해당 원인에 대한 결과가 정확하게 맞는지는 모르겠음... 테스트를 했지만, 아침에 다시 한 번 확인이 필요함

정신이 아예 나가있음

728x90

'ssung_항해일지 > 항해99_Spring_입문, 숙련, 심화' 카테고리의 다른 글

spring - 17일차  (0) 2023.02.21
spring - 15일차  (0) 2023.02.19
spring - 13일차  (0) 2023.02.17
spring - 11일차  (0) 2023.02.15
spring - 10일차  (0) 2023.02.14