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차 캐시 시간 불일치 물리적 무결성 확보.

Metadata

Metadata

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions