오늘 한 것
1. 전화번호 인증 완료 후 DB에 전화번호 저장, is_phone_verified true로 변경하는 코드 완성!!!!
오늘 배운 것
1. 번호 인증이 완료되면 DB에 전화번호를 저장하고, 인증 여부를 true로 마크하는 과정에서 UPDATE 쿼리 dsl을 그대로 날리면 되는 줄 알았다. 하지만! JPA에서 직접적으로 업데이트 쿼리를 작성하는 것은 권장되지 않는다고 한다.
아직은 공부가 모자라 완전히 이해가 되지 않는다. 아래 문구는 지피티를 통해 알게 된 것. 바탕으로 실습과 공부를 통해 익혀나가자.
JPA(Java Persistence API)는 데이터의 영구 저장을 추상화한 인터페이스로, 복잡한 SQL 코드를 직접 작성하지 않고도 객체를 데이터베이스에 저장하고 조회하는 기능을 제공합니다.
이때, JPA는 '영속성 컨텍스트(Persistence Context)'라는 개념을 중심으로 작동합니다. 영속성 컨텍스트는 "엔티티를 영구 저장하는 환경"이라는 뜻입니다. 즉, 데이터베이스와 애플리케이션 사이에서 엔티티의 생명주기를 관리하는 역할을 합니다. 영속성 컨텍스트는 애플리케이션과 데이터베이스 사이에서 엔티티를 캐시하고 관리하는 가상의 데이터베이스 같은 역할을 합니다.
JPA에서는 엔티티가 영속성 컨텍스트에 포함되어 있으면 '영속 상태'라고 말하고, 이 상태의 엔티티는 영속성 컨텍스트에 의해 관리됩니다. 이렇게 관리되는 엔티티의 필드 값이 변경되면 JPA는 그 사실을 자동으로 감지하고 데이터베이스에 적절한 UPDATE SQL을 보냅니다. 이를 '변경 감지' 혹은 'Dirty Checking'이라고 합니다.
User user = entityManager.find(User.class, userId);
user.setName("NewName");
위의 코드에서는 find 메서드를 통해 특정 id의 User 엔티티를 조회하고 있습니다. 이때 User 엔티티는 영속성 컨텍스트에 들어가게 되어 '영속 상태'가 됩니다. 그리고 user.setName 메서드를 통해 엔티티의 이름을 변경하고 있습니다. 이렇게 영속 상태의 엔티티를 변경하면 JPA는 트랜잭션 커밋 시점에 이를 감지하고 해당 엔티티에 대한 UPDATE 쿼리를 데이터베이스에 자동으로 보냅니다.
따라서 JPA를 사용할 때는 엔티티의 상태를 직접 관리하는 것이 중요하며, 이를 위해 영속성 컨텍스트와 변경 감지 메커니즘을 잘 이해하고 사용해야 합니다.
내일 할 것
1. 전화번호 send 버튼을 누르기 전에는 인증 번호 입력칸이 비활성화 되도록 하기
2. 인증이 완료되면 인증 완료 문구 띄우고 모달 창 닫기
if (data.message === "Verification successful") {
console.log('Verification successful');
}
이 부분에서 처리하면 될듯.