반응형 API3 [ZooKeeper] 주키퍼 클라이언트 스레딩 모델과 Java API 연결하기 이번 글에서는 Zookeeper의 클라이언트 스레딩 모델에 대해 자세히 알아보고, Java API를 활용하여 Zookeeper와 연결하는 방법까지 단계별로 소개하겠습니다. 이 글을 읽는 독자는 Gradle 기반 프로젝트를 기준으로 따라 할 수 있습니다.Zookeeper 클라이언트 스레딩 모델Zookeeper 클라이언트를 생성하면 내부적으로 2개의 추가 스레드가 자동 생성됩니다.1. IO 스레드네트워크 통신 처리 담당Zookeeper 서버와의 세션 유지, 요청 및 응답 처리, 세션 타임아웃 관리 등 수행사용자 코드와 직접 상호작용하지 않음2. 이벤트 스레드서버와의 연결 및 해제 등 상태 변화 이벤트 처리사용자가 등록한 Watcher 트리거 관리이벤트는 발생 순서대로 하나씩 처리됨즉, Zookeeper는 이.. 2025. 4. 12. [Spring Boot] Record 객체를 이용하여 DTO 작성 Java record란?Java record는 Java 14에서 도입된 기능이다. 주로 데이터 전달 객체(DTO)와 같은 불변 객체를 정의할 때 사용된다. record는 클래스를 정의할 때 필드, 생성자, 접근자, toString(), equals() 및 hashCode() 메서드를 자동으로 생성하여 코드가 간결해진다. 주요 특징은 다음과 같다: 1. 불변성 (Immutability):record는 기본적으로 불변 객체이다. 생성 후 상태를 변경할 수 없다. 2. 자동 생성되는 메서드들:record는 필드를 기반으로 toString(), equals(), hashCode(), getter 메서드를 자동으로 생성한다. 3. 간결한 문법:record는 클래스를 정의하는 것보다 간단한 문법을 제공한다.기존 c.. 2025. 1. 25. [Spring boot jpa] 찜하기/좋아요 api에서 나온 race condition 문제 해결 찜하기 기능을 구현하기 위해 하나의 PATCH API를 사용하였고, 이를 통해 찜하기와 해제 기능을 동시에 처리하도록 설계했습니다. 그러나 다량의 찜하기/해제 요청이 동시에 들어오면서, user_id와 house_id가 같은 pin 엔티티가 중복 생성되는 문제가 발생하였고, 이에 따라 서버 오류가 발생했습니다. 아래와 같이 다대다 관계로 찜/좋아요 기능을 위해 엔티티를 설계했습니다.@Entity@Table(name="pin")@Datapublic class Pin { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne(fetch = FetchType.LAZY, cascade = Casc.. 2025. 1. 24. 이전 1 다음