카프카 클라이언트 카프카 클러스터에 명령을 내리거나 데이터를 송수신 하기 위해 카프카 프로듀서, 컨슈머, 어드민 클라이언트를 제공하는 카프카 클라이언트를 사용하여 애플리케이션을 개발한다. 카프카 클라이언트는 라이브러리이기 때문에 자체 라이프사이클을 가진 프레임워크 혹은 애플리케이션 위에서 구현 및 실행해야 한다. 프로듀서 API 프로듀서 애플리케이션은 카프카에 필요한 데이터 선언 및 브로커 특정 토픽 파티션에 전송한다. 이때, 리더 파티션을 가지고 있는 카프카 브로커와 통신한다. 프로듀서는 데이터를 직렬화하여 카프카 브로커로 전송한다. 직렬화를 사용하면 자바 기본형, 참조형 뿐 아니라, 동영상 이미지 같은 바이너리 데이터도 전송가능하다. 카프카 공식 자바 라이브러리를 사용하여 프로듀서를 개발해본다. 의존..
Kafka - Consumer - Groups.sh Kafka 컨슈머 호출 및 옵션으로 지정한 쉘 컨슈머그룹을 생성할 수 있는데, 이를 kafka-consumer-groups.sh 스크립트로 확인가능하다. 목록을 확인하고자 하면 윈도우 기준으로 아래 명령어로 확인하면 된다. .\kafka-consumer-groups.bat --bootstrap-server wsl.kafka:9092 --list 확인하게 되면 어떠한 컨슈머 그룹이 존재하는지 확인할 수 있다. ※ wsl.kafka는 vim C:\Windows\System32\drivers\etc\hosts 을 통해 등록할 수 있는데 나는 WSL을 사용했기 때문에 WSL에서 ip addr show eth0 | grep 'inet ' | awk '{print..
캐시 미래 요청 혹은 반복되는 요청을 위해 데이터를 일시적으로 저장해놓고 원본 소스 접근 없이 엑세스할 수 있도록 도와주는 하드웨어 혹은 소프트웨어 구성 요소를 가리킨다. 데이터 요청을 할 때 원하는 데이터 캐시 저장소에 있다면 해당 데이터로 빠르게 반환되는데, 이를 캐시 히트라고 하며 캐시에 없는 경우는 캐시 미스라고 한다. 캐시 사용 유의점 ● 캐시 설계 데이터 결과가 빈번하게 변경되거나 저장공간이 제한적인 경우 캐시를 사용하지 않는것이 좋다. 반복적이고 데이터 결과가 변경없는 요청에 대해서 사용하는 것이 좋다. 시스템의 요구 사항과 성능 목표를 고려해야한다. ● 캐시 키 키값에 의해서 캐시가 처리되는데, 해당 키가 정말 유일한 키인지 확인이 필요하다. 중복된 키값에 의해서 원하지 않는 다른 결과를 ..
1) 개요 ● 실행 순서 MySQL에서 쿼리가 실행되는 과정은 다음과 같은 3단계이다. 1. SQL문장을 잘게 쪼개서 MySQL서버가 이해할 수 있는 수준으로 분리(파스 트리)한다. 2. 파싱정보 확인하면서 어떤 테이블로부터 읽고 어떤 인덱스를 이용해 테이블을 읽을지 선택한다. 3. 결정된 테이블의 읽기 순서나 선택된 인덱스를 이용해 스토리지 엔진으로부터 데이터를 가져온다. 1의 단계를 SQL 파싱이라고 하는데, 이 때 'SQL파서' 모듈로 처리한다. 문법적으로 잘못된 SQL문인 경우 해당 단계에서 걸러진다. 해당 단계에서 SQL 파스 트리가 만들어지며 SQL문을 해당 SQL 파스트리를 실행하는 것이다. 2의 단계는 최적화 및 실행 계획 수립이며, '옵티마이저' 에서 처리를 한다. 완료되면 실행계획이 만..
JWT를 사용자 정보 인증을 하는 수단으로 얕게 알고 있었으나 구체적으로 파악해보려 한다. JWT에 대한 공식 RFC문서는 RFC 8725 - JSON Web Token Best Current Practices (ietf.org) 이며 7519로부터 업데이트 되었다. 정의는 다음과 같다. JSON 웹 토큰은 서명 또는 암호화 할 수 있는 일련의 클레임 이 포함된 JSON 보안 토큰이다. 디지털 신원 영역, 애플리케이션 영역 모두에서 수많은 프로토콜, 애플리케이션에서 간단한 보안 토큰 형식으로 사용되고 있다. 1. 용어 JWT Claims Set JWT 가 전달하는 클레임이 포함된 JSON 객체 Claim 주제에 대한 정보를 주장하거나 나타내는 것으로 페이로드(Payload)부분의 요소로 사용된다. 이름(..
MySQL 8.0 버전까지 업그레이드가 되면서 MyISAM 스토리지엔진에서만 제공하던 전문검색, 위치기반 검색 기능 모두 InnoDB스토리지 엔진에서 사용할 수 있게 개선되었다. MySQL서버의 옵티마이저가 발전하고 성능이 개선되었어도 여전히 관리자의 역할은 매우 중요하기 때문에 인덱스에 관한 지식은 개발자나 관리자에게 모두 중요하며, 쿼리 튜닝의 기본이 된다. 1) 디스크 읽기 방식 데이터베이스의 성능 튜닝은 어떻게 디스크 I/O를 줄이느냐가 큰 관건이다. 컴퓨터에서 CPU나 메모리 같은 주요 장치는 전자식 장치이지만 HDD의 경우 기계식 장치이다. 이런 HDD를 대체하기 위해 전자식 저장 매체인 SSD가 많이 출시 되고 있다. SSD는 기존 하드 디스크 드라이브에서 데이터 저장용 플래터(원판)을 제거..
3) 테이블 암호화 키링 플러그인은 마스터 키를 생성하고 관리하는 부분까지만 담당하기 때문에 어떤 키링 플러그인을 사용하든 암호화된 테이블을 생성하고 활용하는 방법 모두 동일하다. 테이블 생성은 다음과 같이 할 수 있다. CREATE TABLE tab_encrypted ( id INT, data VARCHAR(100), PRIMARY KEY(id) ) ENCRYPTION='Y'; 기존 테이블 생성 구문과 동일하며 마지막에 ENCRYPTION ='Y' 옵션만 추가로 넣으면 된다. 응용프로그램에서 직접 암호화해서 MySQL 서버에 저장하는 경우가 있는데, MySQL은 이 컬럼이 암호화된것인지 여부를 판단하지 못한다. 이에 따라서 해당 컬럼을 인덱스를 생성하더라도 인덱스 기능을 100% 활용 할 수 없다. 응..
현업에서 Java 17버전을 사용하게 되었는데, 주요 변경점들에 대해서 너무 모르고 있는 것이 많아 정리하려고 한다. Java 8 → Java 11 1. 모듈 시스템 자바 9부터 모듈 시스템이 도입되어 라이브러리와 애플리케이션을 모듈로 분리하는 기능을 제공한다. 2. 로우-레벨 프로파일러 (JMH) 자바 11에는 JMH를 지원하는 도구가 포함되어 있어 , 로우-레벨에서 성능 테스트를 수행하기가 더 쉬워졌다. ※ JMH: Java언어로 작성된 마이크로 벤치마킹 도구이다. Java코드의 작은 부분을 테스트하고 성능 특성을 분석하는데 쓰인다. Java 성능 튜닝과 최적화에 매우 유용한 도구로 인정받고 있다. 3. HTTP/2 지원 자바 9부터 HTTP/2 프로토콜을 지원한다. 이를 통해 네트워크 통신의 성능을..