ElasticSearch Kibana 연동 Docker 환경에서 구동을 했음, 버전은 아래와 같음 같은 Network의 bridge를 사용하고 있음 Kibana랑 연동을 할려고 했을 때 오류가 발생 토큰 생성시에는 org.elasticsearch.xpack.security.enrollment.ExternalEnrollmentTokenGenerator IP로 직접 연결하는 부분에서는 network를 못찾는 오류 그래서 같은 bridge를 사용하고 있기에 내부IP인 172.17.0.2:9300으로 접근하여 연결 하였음 https://discuss.elastic.co/t/kibana-asking-for-enrollment-token-when-xpack-security-enabled-false-in-elasti..
전체 글
웹 백엔드취준생 입니다.Redis 예매 테이블 적용 인덱싱 색인, ElasticSearch, Redis Cache 전략 100만명… 500만명… 1000만명 몰릴 때 확장 할 수 있는지?, 어떻게 확장 할건지? Spring boot에서 jedis를 사용 할려고 했지만 빈 충돌이나고, jedis 1개로 사용해도 기존에 구현된 refreshToken을 다시 구현 야해서 ElasticSearch로 확인 ElasticSearch 적용 ElasticSearch:8.12.1 Spring Boot 3.2.2 Spring ElasticSearch 3.2.2 build.gradle에 추가 implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch' Config..
[테스트코드] 현황 Event ✅ Stage ✅ Seat ✅ Rank ✅ Ticket ✅ User ✅ 서비스단에서 테스트 코드, 테스트 커버리지 단위테스트 완료 [트러블 슈팅] Producer com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.hh99.tmomi_producer.domain.reservation.dto.ReservationDto` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) at [Sour..
테스트 코드 도입 JUnit Spock 선택 언어 및 구문 순수 자바로 작성되었으며, 테스트 케이스를 작성할 때 Java 언어를 사용합니다. JUnit 5부터는 Java 8 이상의 버전을 지원합니다. 그루비 기반으로 작성되었으며, 테스트 코드는 그루비 문법을 사용합니다. Groovy는 Java와 호환되어 자바 라이브러리와 함께 사용할 수 있습니다. JUnit 테스트 코드의 가독성 테스트 코드는 일반적으로 Java의 표준 구문을 따르며, 상대적으로 코드가 길어질 수 있습니다. 그루비의 간결한 문법과 표현력을 활용하여 테스트 코드를 더 간결하고 가독성 있게 작성할 수 있습니다. Spock 테스트 구조 테스트 클래스 내에 @Test 어노테이션이 지정된 메서드로 테스트를 정의합니다. 특별한 테스트 스펙(Spec..
카프카 진행상황 및 문제 ConsumerConfig.GROUP_INSTANCE_ID_CONFIG 컨슈머 그룹만 설정되었을 때 임의로, 컨슈머 아이디가 자동으로 생성되기 때문에 고유값을 불러오지 못해 컨슈머가 토픽에 접근할 수 없었음 정확히는, 서로 겹쳐 오류가 발생할 수 있다는 로그. properties.put(ConsumerConfig.GROUP_INSTANCE_ID_CONFIG, session.getId()); 위 코드 추가. Consumer 생성 위치 변경 행사 시간 생성시에 Consumer도 생성해주고 Consumer 서버에서는 읽기만 해야함 nGrinder 3.5.6 설치 nGrinder 3.5.8로 하면 groovy 검증 시 오류가 발생 사용 JDK 버전: 11 nGrinder 3.5.6 Co..
카프카, 클라이언트 흐름 정리 Pinpoint 트랜잭션 2개로 체크 되는 이슈 조회 요청 시, Pinpoint 트랜잭션에는 1개가 기록되어야 하는 데, 두 2개가 기록 됨. callstack 확인 결과, getConnection()의 executeQuery() 한 개 그리고 조회하는 executeQuery()한 개가 발생. 여기서 getConnection()과 이 부분에서 왜 쿼리가 발생하는지 분석. Springboot에서 2.0 이후로 HIKARICP를 기본적으로 사용 HIKARICP에서 getConection을 만들 때 처음에 Connect Test Query를 전달 밑의 프로퍼티를 추가를 해주면 아래 사진 처럼 SELECT 1이라고 test query를 커스텀 할 수 있다. spring: datas..
Pinpoint 트랜잭션 2개로 체크 되는 이슈 Springboot에서 2.0 이후로 HIKARICP를 기본적으로 사용 HIKARICP에서 getConection을 만들 때 처음에 connect test query를 전달 밑의 프로퍼티를 추가를 해주면 아래 사진 처럼 SELECT 1이라고 test query를 커스텀 할 수 있다. spring: datasource: hikari: connection-test-query: SELECT 1 목표 기능 재정리 이전에 정리 한 것 행사 시간 선택 후 예매하기 버튼 눌렀을 때 대기열에 진입이 됨 → 좌석 보여주기 카프카 토픽 생성 시점은 행사 시간을 생성 했을 때 행사 종료시간엔 해당 토픽들을 삭제 카프카 프로듀서, 컨슈머를 일단 나눴으니깐 프로듀서 부터 구현 토..
카프카 스프링 부트에서 동적으로 토픽 생성 토픽을 동적으로 생성하는 방법 중 하나는 Kafka Admin Client를 사용하는 것입니다. 아파치 카프카는 자바로 개발된 Admin Client API를 제공하며, 이 API를 통해 토픽을 생성하고 관리할 수 있습니다. 예를 들어, Java로 작성된 코드에서 Admin Client API를 사용하여 특정 이벤트에 대한 새로운 토픽을 생성할 수 있습니다. import org.apache.kafka.clients.admin.AdminClient; import org.apache.kafka.clients.admin.AdminClientConfig; import org.apache.kafka.clients.admin.NewTopic; import java.util..
사용자가 예매하기 버튼을 누른다. 카프카에 publisher 서버 (별도로있고) 메시지를 쌓습니다. 그러면 좌석 수가 500개, 유저가 600명이 들어오면 순서대로 쌓임 (타임스탬프) request온거를 카프카 publisher 서버에 전달해서 쌓아야한다. consumer 서버에서 redis or postgresql의 남은 좌석의 데이터를 전달한다. 페이지를 보여주는데 순서대로 500명까지만 보여주고 남은 100명은 자기 남은 대기수를 보여준다. (보류) 좌석수 - 입장한 유저 = 대기순서 이러면 입장한 유저들의 개수가 낮아져야한다. 해당 행사의 시간에 좌석을 선택 할 수 있다. 좌석을 선택하면은 redis 락을 적용한다. 키는 해당 행사아이디-시간아이디-좌석번호 여야한다. 선택 후 결재를 한다. 결재가..
사용자가 예매하기 버튼을 누른다. 카프카에 publisher 서버 (별도로있고) 메시지를 쌓습니다. 그러면 좌석 수가 500개, 유저가 600명이 들어오면 순서대로 쌓임 (타임스탬프) request온거를 카프카 publisher 서버에 전달해서 쌓아야한다. consumer 서버에서 redis or postgresql의 남은 좌석의 데이터를 전달한다. 페이지를 보여주는데 순서대로 500명까지만 보여주고 남은 100명은 자기 남은 대기수를 보여준다. (보류) 좌석수 - 입장한 유저 = 대기순서 이러면 입장한 유저들의 개수가 낮아져야한다. 해당 행사의 시간에 좌석을 선택 할 수 있다. 좌석을 선택하면은 redis 락을 적용한다. 키는 해당 행사아이디-시간아이디-좌석번호 여야한다. 선택 후 결재를 한다. 결재가..