Skip to content

[Feature]: 회원가입 API 구현 및 DB UNIQUE 기반 동시성 락 검증 #4

Description

@devikae

Package Scope

  • Add to an existing package
  • New package

Package name: backend

Overview

회원, 게시글, 댓글 등 공통 엔티티의 생성시간(createdAt) 및 수정시간(updatedAt) 관리를 자동화하기 위해 @MappedSuperclass + AuditingEntityListener 기반의 BaseTimeEntity를 도입하고, DB 레벨 자동 생성 시 발생하는 JPA 1차 캐시 메모리와 DB 데이터 간의 불일치 문제를 해결합니다.

Describe the solution you'd like

  • 고민했던 방식:
    1. 애플리케이션 레벨에서의 수동 주입: 엔티티 생성 시 개발자가 직접 setCreatedAt(LocalDateTime.now()) 호출.
    2. DB 레벨 자동 주입: DB 테이블 컬럼에 DEFAULT CURRENT_TIMESTAMP 또는 sysdate 설정.
  • 선택한 방식:
    JPA Auditing (BaseTimeEntity)**: @MappedSuperclass 추상 클래스 + AuditingEntityListener 이벤트 감시.
  • 이 방식을 선택한 이유 :
    • 애플리케이션 수동 주입은 엔티티마다 코드가 중복되고 개발자의 실수로 null이 저장되는 결함발생.
    • DB 레벨 sysdate 설정 시, em.persist() 실행 후 1차 캐시 메모리의 엔티티 객체 시간 필드는 여전히 null로 남아 응답 DTO 반환 시 시간이 null로 출력되는 불일치 발생.
  • 트레이드오프 및 극복 방안 :
    • Trade-off: 영속성 컨텍스트의 생명주기 이벤트를 메모리 상에서 감시하는 오버헤드가 발생.
    • 해결 방안 : JPA의 AuditingEntityListener를 통해 SQL 패킷이 DB로 날아가기 바로 전 1차 캐시 메모리 객체의 두 시간 필드에 현재 시각을 즉시 채워 넣도록 개선, 1차 캐시 데이터 불일치와 코드 중복을 해결.

Additional context

BaseTimeEntity 공통 상속 구조 적용 및 1차 캐시 시간 불일치 물리적 무결성 확보.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

enhancementNew feature or request

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions