SnowFlake
현재 댓글 무한 depth까지 수강했는데 snowFlake를 통해 Id값을 넣고 있는데 해당 부분을 service단에서 entity.create를 통해 구현하는 점에 대해 궁금증이 생겼습니다.
이런 방식으로 계속 진행이 되면 보일러 플레이트방식이 되는것 같은 느낌이 들어서 차라리 커스텀 IdentifierGenerator를 통해 Entity안에서 값을 넣어주면 어떨까하고 생각을 해보게 되었습니다.
이렇게 진행하면 기존 service를 통해 진행하는 것보다 비효율적일까요?? 두개의 차이점이 궁금합니다
답변 1
2
qowhxk님, 안녕하세요!
말씀하신대로 처리해도 무방합니다.
하지만 강의에서 제시된 Snowflake는 충돌을 방지하기 위해 synchronized 블록을 활용하고 있는데요, 이러한 블록은 각 인스턴스 단위로 유효합니다.
그래서 전체 엔티티에 대해서 하나의 Snowflake 인스턴스를 활용한다면, 동시 요청 시에 synchronized 블록에서 충돌을 방지하기 위해 대기하는 과정이 더욱 잦거나 길어질 수 있습니다.
물론, 쓰기 트래픽이 웬만큼 크지 않는 이상 문제될 수준은 아니겠지만요.
또, Snowflake가 오름차순 규칙을 택하고 있고 이를 service layer에서 인지하고 활용하기도 합니다.
이러한 관점이라면, 키 생성에 대한 책임을 persistence layer보단 service layer가 담당하는게 적절하다고 생각되기도 하네요.
구현과 전략은 만들기 나름이고, 생각과 관점도 사람마다 다를 수 있는 것이라,
원하시는 방향으로 구현해도 문제는 없을 것 같습니다!
1
[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%
======================================
1
엥 뭔가 했네요.. ㅋㅋㅋㅋ
인프런에서 새로 만든 ai 인턴인줄..
말씀하신대로 충돌 관리에는 synchronized 블록 대신 AtomicLong을 사용해도 되겠지만, 동일한 동작으로 충돌에 안전하게 만드려면 그게 구현이 더 어려워보이기도 하고, 성능적으로 더 나을지도 모르겠더라고요..!
@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.
0
31
1
consumer에서 에러가 발생할 경우 데이터 유실 문의
0
48
2
게시글 테스트 데이터 삽입
0
51
2
정렬, 필터, 검색 등의 조건이 붙을 경우 최적화할 수 있는 방법이 무엇이 있을까요?
0
104
2
좋아요 기능 정합성 보장 방법
0
98
2
좋아요 동시성처리 최적의 선택?
1
136
2
프론트엔드 msa 환경 api 주소 통합? 과 서버끼리 통신 방식에대해
0
92
2
안녕하세요 무한스크롤 강의듣다가 질문이 있습니다.
0
60
1
조회수 조회 로직 질문
1
67
2
비로그인 유저도 어뷰징 방지 정책
1
73
2
CommentServiceTest의 테스트 로직 질문
0
54
2
무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점 의문
1
74
2
path 쿼리 관련 질문드립니다!
0
60
2
antigravity 에디터를 쓰신다면 종료해주세요
1
123
0
프로젝트 구조
0
88
2
article_like_count api test
0
79
2
이벤트 페이로드 객체의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다!.
0
104
2
[33. 좋아요 수 구현] 에서 테스트 하는 화면 동시성 문제
0
92
2
findByPath에서 articleId로도 검색을 해야 할 것 같아요.
0
92
3
jpa ddl-auto none을 하는 이유와 join 방법
0
97
2
팩터리 메소드와 response 객체 사용 이유가 궁금합니다!
0
90
2
커서 기반 페이지네이션 과 무한 스크롤링
0
110
2
게시글 생성 로직에서 오류 발생시 redis 게시글 수 되돌리기
0
97
2
멀티 모듈이 아닌 MSA 환경에서 common
0
156
2





