해결된 질문
작성
·
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가 담당하는게 적절하다고 생각되기도 하네요.
구현과 전략은 만들기 나름이고, 생각과 관점도 사람마다 다를 수 있는 것이라,
원하시는 방향으로 구현해도 문제는 없을 것 같습니다!
엥 뭔가 했네요.. ㅋㅋㅋㅋ
인프런에서 새로 만든 ai 인턴인줄..
말씀하신대로 충돌 관리에는 synchronized 블록 대신 AtomicLong을 사용해도 되겠지만, 동일한 동작으로 충돌에 안전하게 만드려면 그게 구현이 더 어려워보이기도 하고, 성능적으로 더 나을지도 모르겠더라고요..!