게시글
질문&답변
snowflake 알고리즘 - synchronized 활용한 동시성 제어
질문 1: 멀티 서버 환경에서의 동시성 제어Snowflake 알고리즘에서 synchronized 키워드를 사용하여 동시성을 제어하는 것은 단일 서버 내에서의 문제를 해결합니다. 그러나 멀티 서버 환경에서는 각 서버가 독립적으로 ID를 생성하기 때문에, 서버 간의 동시성 문제는 발생하지 않습니다. 각 서버가 고유한 노드 ID를 가지고 있기 때문에, 동일한 시퀀스 번호가 사용되더라도 각 서버가 생성하는 ID는 고유합니다.질문 2: Redis와 같은 외부 미들웨어 사용멀티 서버 환경에서 각 서버가 고유한 노드 ID를 가지고 있으면, 기본적으로 Snowflake 알고리즘은 충돌 없이 동작합니다. 그러나 만약 노드 ID의 충돌이나 다른 이유로 인해 추가적인 동시성 제어가 필요하다면, Redis와 같은 외부 미들웨어를 사용하여 전역적인 시퀀스 번호를 관리할 수 있습니다. 예를 들어, Redis의 INCR 명령어를 사용하여 전역적으로 증가하는 시퀀스 번호를 관리할 수 있습니다.이 외부 미들웨어를 사용하면 다음과 같은 장점이 있습니다:• 중앙화된 관리: 모든 서버가 동일한 시퀀스 번호를 참조하므로, 노드 ID가 겹치더라도 ID 충돌을 방지할 수 있습니다.• 확장성: 서버가 추가되더라도 중앙화된 시퀀스 관리로 인해 쉽게 확장 가능합니다.멀티 서버 환경에서 노드 ID의 충돌 가능성을 최소화하려면 Redis와 같은 외부 미들웨어를 사용하는 것이 유리할 수 있습니다.
- 0
- 3
- 96
질문&답변
바로 실무에 적용할 수 있는 내용일까요?
말도 안된다고 생각하는 요구사항이네요 🙂 1. 좋다고 하니 DDD 를 녹여봐라 -> 왜 좋은가 ? -> 강의를 봤더니 -> 그래도 모르겠다 -> 너무 당연 한 수순일것 같습니다. 지금은 어떻게 적응하고 계신진 모르겠으나, DDD 핵심은 느슨한 결합과, 유지보수성 이 좋은 방법론 이라고 생각합니다.결국 DDD 를 적용하려다 유지보수성이 떨어지는게 과연 DDD 일까요 ...? 일단은 포팅 (nest.js 로 옮기는 과정) 하시고 업무와 코드의 이해도가 올라간다면 그때 DDD 를 제대로 파보시는걸 추천드립니다
- 1
- 2
- 294
질문&답변
fake Repository로 테스트를 진행하려고 합니다,
public class InMemoryOriginalRepository implements OriginalRepository { private final Map entities = new HashMap(); private final AtomicLong idGenerator = new AtomicLong(1); @Override public BillingPay save(TestEntity entity) { long id = idGenerator.getAndIncrement(); setPrivateField(entity, "id", id); // 이친구는 리플렉션으로 처리 :) entities.put(id, entity); return entity; } private void setPrivateField(Object object, String fieldName, Object value) { try { Field field = object.getClass().getDeclaredField(fieldName); field.setAccessible(true); field.set(object, value); } catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); } } 이유는 db 에 id 를 자동으로 증가시키는걸 위임해버렸기 때문이죵그래서 entity 에 setId 이럴땐 고수님들이 얘기하는 리플렉션을 조져주면됩니다
- 1
- 3
- 1K
질문&답변
props으로 가져온 반응형 변수 업데이트 이슈
Vue3 + Quasar + Firebase !!! 군침이 도네요 강사님 ... 화이팅입니다 !!!
- 0
- 2
- 2.1K
질문&답변
ListView.vue를 ts로 변경 후 에러가 발생합니다.
enum 은 강의를 사야하는군여 :)
- 1
- 2
- 526
질문&답변
장바구니 추가를 반복적으로 하다 보면 가끔 500에러가 발생합니다.
(사진)싹 이부분을 날려주시고 힌트는 (사진) 아래와 같았습니다 이미 한참지난부분 이나, 혹시나 같은 이슈 분들은 db.json cart 배열 비워보세용---- 장바구니에 담기전 조회후 이미 id 가 존재하면 방어해주는 코딩을 추가해주는것도 연습삼아 괜찮을것같아요
- 3
- 2
- 422
질문&답변
error 페이지
자문자답 입니다 . layouts 폴더 생성후 -> 똑같은 구조에 props 로 error 를 받게되면 status Code 를 받을수 있었군요 template> div> h1 v-if="error.statusCode === 404">Page not foundh1> h1 v-else>An error occurredh1> NuxtLink to="/">Home pageNuxtLink> div> template> script> export default { props: { error: { type: Object, default: () => {}, }, }, }; script>
- 2
- 5
- 819
질문&답변
Swagger 오류 시 pom.xml 설정방법
상반기가 끝났지만 그대로네용 ㅠㅠ
- 1
- 2
- 344
질문&답변
intellij를 설치했는데 spring initializer 가 없어요..
네... 한달안에 끝낸단 전재 하에.... 강사님 근데, 초급, 혹은 입문수준에서는 강사님 처럼 얼티메이트 버전이 아닌 커뮤니티 버전으로 하는경우에 학생들 경우에는 조금만 내 환경이 달라도 강이시간 은 12분인데 미묘한 설정차이로 1시간이 되고 30 분이 될수도 있어요... 예를들어 vscode 설정 조금만 달라도, 유저들은 어...? 저거 어떻게 한거지? 하고 버퍼링이 걸릴 수 도 있거든요 강의 자체는 좋으나 , 많은 수강생들의 입맛에 맞출수는 없겠죠 . 따라서 환경 설정 편을 조금 힘을 드리시는게 다른 수강생에게도 수월하겠다는 아쉬움이 남습니다.... 말씀하신 방법대로 start.spring.io 에서 자르파일을 export 한 후 인텔리제이에서 import 하는 방법으로 진행해야 겠습니다. Ultimate 버전 이 만약 1달 끝나면 어둠의 경로로 다운받거나, 아니면 다달이 5만원 내고 강의를 들어야 하나 마나 생각도 들거든요;; 그런 사소한 당연함에도 고민하고 강의를 만드셨다는거에 학생들도 큰도움을 받는것 같아요 . 좋은 강의 만들어 주셔서 감사드리구요 ^^ 앞으로 쭉 정진하겠습니다 . 감사합니다.
- 2
- 2
- 397
고민있어요
아... 감사합니다.
- 0
- 0
- 153