[JPA] 영속성 컨텍스트(Persistence Context) 내부 구조 살펴보기
·
Programming/Spring,JPA
StatefulPersistenceContextPersistenceContext 인터페이스의 구현체로 이 구현은 영속성 컨텍스트가 해당 세션의 생명 주기 동안 엔티티의 상태를 유지하고 관리한다.  HashMap 구조영속성 컨텍스트의 1차 캐시는 HashMap 구조이다. 1차 캐시에 관한 그림을 살펴보면 엔티티의 식별자를 Key로 사용한다고 알려져있다.  StatefulPersistenceContext 클래스 StatefulPersistenceContext 클래스를 살펴보면, Key 값으로 EntityKey 객체를 사용하고 있다. 해당 객체 안에 식별자가 존재할것으로 추측할 수 있다.  EntityKey 클래스public final class EntityKey implements Serializable {..
BCrypt matches 동작 방식 : 매번 다른 해싱에도 일치 검증 가능한 이유
·
Programming/Java,Back-end
BCrypt로 인코딩을 해보면 같은 평문이라도 해싱 결과값이 매번 다른데,어떻게 두 문자열의 값이 같다고 판단하는 걸까?   BCrypt Encode (암호화 과정)BCrypt는 무작위로 생성되는 솔트라는 데이터를 해시 과정에서 비밀번호에 추가하여 해시 결과가 매번 달라지도록 만든다.@Overridepublic String encode(CharSequence rawPassword) { if (rawPassword == null) { throw new IllegalArgumentException("rawPassword cannot be null"); } String salt = getSalt(); return BCrypt.hashpw(rawPassword.toString(), salt);} getSalt..
[Event 기반 설계] 다양한 이벤트 확장 : 이벤트 추상화와 동적 매핑 구현 방법
·
Side Project/Study Together
✏️ 지난 포스트 이야기 & 서론 지난 포스트 : https://dev-wooni.tistory.com/13 이벤트 기반 아키텍처 도입하기 (Transactional Outbox Pattern)✏️  서론웹 애플리케이션 서비스에서 회원가입 시 사용자가 입력한 이메일이 유효한지 확인하는 이메일 인증 절차는 필수적입니다. 이는 사용자와 서비스 모두에게 중요한 과정입니다. 먼dev-wooni.tistory.com 회원가입 후 이벤트 발행을 통해 알림을 전송하는 구조는 기존 로직의 문제점을 성공적으로 해결했습니다. 또한, Transactional Outbox Pattern의 사용을 통해 이벤트 메시지 발행을 보장할 수 있는 구조를 만들었습니다.하지만 이벤트 추상화와 관련하여, 시스템의 확장성을 높이기 위해 추가..
[Event 기반 설계] Transactional Outbox 패턴이 필요한 이유 : 프로젝트 적용 사례
·
Side Project/Study Together
개요이번 포스트에서는 프로젝트를 진행하며 이벤트 기반 설계를 도입한 이유와 그 과정에서 Transactional Outbox Pattern의 필요성을 느낀 배경, 그리고 구현 내용을 정리하고자 합니다.서론웹 애플리케이션 서비스에서 회원가입 시, 사용자가 입력한 이메일이 유효한지 확인하는 이메일 인증 절차는 필수적입니다. 이는 사용자와 서비스 모두에게 중요한 과정입니다. 먼저, 사용자가 이메일을 정확히 입력했는지 확인하는 것은 필수입니다. 오타나 잘못된 이메일 주소로 인해 중요한 알림을 받지 못할 수 있기 때문입니다. 예를 들어, 비밀번호를 잊었을 때 새 비밀번호를 이메일로 전송해야 하는 경우, 올바른 이메일 주소가 필요합니다. 서비스 운영 측면에서도 이메일의 유효성은 중요합니다. 광고나 공지 사항을 보낼..
[JPA] 일대다(OneToMany) 단방향 매핑의 성능 이슈
·
Side Project/Study Together
서론프로젝트에 JPA를 처음 적용했을 땐 너무 편리하다며 감탄했다. 최근에는 제대로 이해하지 않고 사용하면 오히려 독이 될 수 있다는 것을 깨닫고 있다. 특히 연관관계 매핑에서는 세심한 주의가 필요하며, 양방향 매핑과 단방향 매핑이 각각 가져오는 차이를 이해하는 것이 중요하다. 이번 글에서는 양방향 매핑과 단방향 매핑에서 발생하는 문제들을 분석하고, 이러한 문제를 해결해 나가는 과정을 정리해보려 한다.양방향 매핑의 문제점✔️ 상태 변경에 대한 관리 복잡성이 증가 A객체가 B객체에 대해 직접 참조가 가능한 것은 B객체의 비즈니스 로직 노출, 상태 변경에 대한 가능성이 열려있는 구조이다. 양방향 매핑을 사용할 경우, 양쪽 객체가 서로를 참조하게 되면서 상태 관리가 복잡해지고 불필요한 비즈니스 로직 노출 문제..
[JPA] JPA 적용 이유, 의존성 주입으로 유연한 Repository 설계
·
Side Project/Study Together
JPA 적용 이유프로젝트 초기에는 JDBC Template을 사용해 데이터베이스와의 연동 작업을 진행했다. 하지만 객체지향적 언어로 도메인을 구성하며 프로그래밍을 하던 중, 객체와 데이터베이스 간의 연결 방법에 대한 고민이 생겼다. 객체지향 설계와 관계형 데이터베이스 사이의 패러다임 불일치로 인해 코드가 복잡해지는 문제를 겪었다. 이러한 문제를 해결하기 위해 ORM(Object-Relational Mapping) 기술인 JPA를 도입하게 되었고, 이를 통해 객체와 데이터베이스 간의 매핑을 더 자연스럽게 처리하고자 했다. ✔️  ORM이란?: Object-Relational Mapping의 약자로, 객체와 관계형 데이터를 매핑하기 위한 기술. 매핑이 필요한 이유는 객체지향 언어와 관계형 데이터베이스 사이의..