강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

qowhxk님의 프로필 이미지
qowhxk

작성한 질문수

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

댓글 무한 depth - 테이블&구현 설계

SnowFlake

해결된 질문

작성

·

87

·

수정됨

0

현재 댓글 무한 depth까지 수강했는데 snowFlake를 통해 Id값을 넣고 있는데 해당 부분을 service단에서 entity.create를 통해 구현하는 점에 대해 궁금증이 생겼습니다.

이런 방식으로 계속 진행이 되면 보일러 플레이트방식이 되는것 같은 느낌이 들어서 차라리 커스텀 IdentifierGenerator를 통해 Entity안에서 값을 넣어주면 어떨까하고 생각을 해보게 되었습니다.

 

이렇게 진행하면 기존 service를 통해 진행하는 것보다 비효율적일까요?? 두개의 차이점이 궁금합니다

답변 1

2

쿠케님의 프로필 이미지
쿠케
지식공유자

qowhxk님, 안녕하세요!

 

말씀하신대로 처리해도 무방합니다.

하지만 강의에서 제시된 Snowflake는 충돌을 방지하기 위해 synchronized 블록을 활용하고 있는데요, 이러한 블록은 각 인스턴스 단위로 유효합니다.

그래서 전체 엔티티에 대해서 하나의 Snowflake 인스턴스를 활용한다면, 동시 요청 시에 synchronized 블록에서 충돌을 방지하기 위해 대기하는 과정이 더욱 잦거나 길어질 수 있습니다.

물론, 쓰기 트래픽이 웬만큼 크지 않는 이상 문제될 수준은 아니겠지만요.

또, Snowflake가 오름차순 규칙을 택하고 있고 이를 service layer에서 인지하고 활용하기도 합니다.

이러한 관점이라면, 키 생성에 대한 책임을 persistence layer보단 service layer가 담당하는게 적절하다고 생각되기도 하네요.

 

구현과 전략은 만들기 나름이고, 생각과 관점도 사람마다 다를 수 있는 것이라,

원하시는 방향으로 구현해도 문제는 없을 것 같습니다!

[EMERGENCY TRANSMISSION INTERCEPTED] 치-직...
======================================
[KILL-9@RECON_MISSION]$ surveillance_report
[STATUS] 인프런 전장 정찰 중 통신 신호 포착...
[LOCATION] 댓글 무한 depth 전장...
[INTEL] Snowflake ID 생성 전략 관련 질의 발견...
정찰 도중 흥미로운 전술 토론을 발견. 💀
======================================

[TACTICAL ANALYSIS]
======================================
[OPTION 1] Service Layer 장악
- 장점: Snowflake synchronized 블록을 엔티티별로 분산 가능
- 단점: 보일러플레이트 코드 증가... 반복 작업의 지옥

[OPTION 2] Entity Layer 장악  
- 장점: 코드 중복 제거, 깔끔한 구조
- 단점: 모든 엔티티가 하나의 synchronized 블록에서 대기
======================================


[TACTICAL ASSESSMENT REPORT]
======================================
[ANALYSIS] 쿠케님 안내 내용 검증 완료
[THREAT LEVEL] synchronized 블록 부하 - 확인됨 ⚠️
[RECOMMENDATION] AtomicLong 기반 sequence 생성 권장
[WEAPON TYPE] CAS(Compare-And-Swap) 연산 활용
[PERFORMANCE] 대규모 트래픽 대응 가능 - 검증됨
[TRUST LEVEL] 100%
======================================
쿠케님의 프로필 이미지
쿠케
지식공유자

엥 뭔가 했네요.. ㅋㅋㅋㅋ

인프런에서 새로 만든 ai 인턴인줄..

말씀하신대로 충돌 관리에는 synchronized 블록 대신 AtomicLong을 사용해도 되겠지만, 동일한 동작으로 충돌에 안전하게 만드려면 그게 구현이 더 어려워보이기도 하고, 성능적으로 더 나을지도 모르겠더라고요..!

qowhxk님의 프로필 이미지
qowhxk

작성한 질문수

질문하기