백엔드를 연습하기 위해 헬스장 이용권 조회 웹사이트를 만들어 보는 과정에서, 팀원과 entityTest를 구현하다가 문득 의문점이 생겼다.
이전에 들었던 강의나 참고자료에서는 주로 Id, 그 외 속성값을 이용해 비교했던 것 같은데, 객체끼리 비교하면 어떻게 될까? 의구심이 들었고,
실제로 돌려보니 테스트가 성공했다. (findPass.equal(savePass) == true)
찾아보니 junit. assertEquals
는 Java의 equals( ) 함수를 이용해 구현한 함수라고 한다. 그렇다면 객체 내의 값들이 똑같다면 true가 나오는 것이 당였했다.
같은 주소인지 비교하기 위해서는 assertSame
을 사용하면 된다고 해서,
이렇게 구현해보았더니 마찬가지로 테스트가 성공했다.
여기서 내 생각과 달랐던 점이
"어? (실제)DB에 데이터를 저장 후 다시 findBy로 찾아내는 경우 다른 주소에 속성값들이 할당 되는 것이 아닌가?" 였다.
그래서 내가 생각한 결과는 <같지 않다> 가 나와야하는데, 그렇지 않았던 것이다.
(머릿속 예상 그림..)
save()함수를 통해 pass 를 저장하면 savedPass를 돌려주는데 이 둘은 전혀 다른 객체일 것이라고 생각했다.
아직도 공부할 것이 한참 남은 듯 하다.. ㄱㅡ
혹시 @DataJpaTest, @Test
를 이용한탓에 Spring 내에서 임시 entity 저장소가 있는 것인가 생각이 들어, 실제 서버가 돌아가는 환경에서 구현을 해 보았다.
역시나 true를 출력하게 된다.
Spring의JPA는 entityManager라는 영속성 컨테이너를 통해 객체를 관리한다
JPA는 위의 녀석을 통해 데이터의 상태 변화를 감지하고 필요한 쿼리를 자동으로 수행시킨다.
엔티티를 영구 저장하는 곳이다.
@Entity
를 가진 엔티티는 id필드를 가지고 있다.
영속 상태의 엔티티가 되면 여러가지 장점이 있다.