전체 글 196

이벤트 브로커 / 메시지 브로커

메시지 브로커에서 대규모 메시지 기반 미들웨어 아키텍쳐에서 사용됨. 미들웨어 : 어플리케이션을 효율적으로 연결하는 소프트웨어 메시징플랫폼, 인증 플랫폼 , 데이터베이스 같은것들. 특징 ) 보내고 처리하고 삭제한다.! 메시지 받아서 처리하고 나면 짧은 시간 내에 삭제됨 -> redis / rabbitMQ 1) 이벤트 브로커의 특징 특징 1) 이벤트 / 메시지로 부르는 레코드를 딱 하나만 보관하고 인덱스를 통해 개별 엑세스를 관리함. 특징 2) 업무상 필요한 시간동안 보관할 수 있음. *이벤트* 브로커는 이벤트를 '저장'함 장점 ) 한번 저장한 이벤트를 저장함으로써 단일 진실 공급원으로 사용 장점 2) 장애가 일어났을때 그 때부터 재처리 가능 장점 3) 많은 양의 실시간 스트림 데이터를 효과적으로 처리할 수..

TIL 2024.01.04

kafka burrow

카프카 lag을 관리하기 위해서 kafkaConsumer 객체로 lag을 실시간으로 확인하고싶다면, elasticSearch나 influxdb에 넣은 뒤 grafana 대시보드를 통해 확인 가능. consumer 단위에서 lag을 확인하면 -> 위험함 이유 ) 컨슈머 상태에 디펜던시가 걸리기 때문에 -> burrow를 제공함 ( gorang으로 제작됨) 3가지 특징 ) 1) 멀티 카프카 클러스터 지원함. 2) sliding window을 통한 consumer의 status 확인 가능. 3) http api 제공.

TIL 2024.01.04

kafka lag

Offset : 파티션에 들어간 데이터는 각 데이터는 오프셋이라는 숫자가 붙음. ( 0부터 시작) 넣은 데이터의 offset 컨슈머가 가져간 offset의 속도 차이. -> lag lag를 통해 컨슈머의 상태에 대해 판단 가능함. 여러 파티션이 있다면 -> lag도 여러개 가장 높은 숫자의 lag -> records-lag-max 라고 부름 lag 1) 프로듀서 오프셋과 컨슈머 오프셋의 차이다 2) lag은 여러개가 존재할 수 있다.

TIL 2024.01.04

kafka 개념 (파티셔너)

프로듀서가 데이터를 보내면 파티셔너 ! 를 통해서 데이터가 전송됨 어떤 파티션에 넣을지 설정 따로 설정안하면 UniformStikyPartitioner으로 됨 1) 메시지 키로 동일한 메시지 키 -> 동일한 파티션에 들어갈 수 있어서 순서를 지킬 수 있음. 메시지 키에 '서울' 이라는 String 값을 넣고 레코드를 지속적으로 보내면 항상 동일한 파티션에 순서대로 값이 들어가기때문에 2) 메시지 키가 없는 경우 -> 라운드 로빈으로 들어감 전통적인 방식과 좀 다른데, 배치로 모을 수 있는 레코드를 모아서 파티션으로 데이터를 보냄. 위에는 기본적인거고, Custom을 하면 따로 파티션을 넣을 수 있음. 언제 커스텀을 사용할까? ex ) VIP 고객을 위해서 조금 더 빠르게 처리하기 위해 10개의 8개의 파..

TIL 2024.01.04

자바 Reflection , 스프링 DI

Reflection은 구체적인 클래스를 몰라도 그 클래스의 메서드, 타입, 변수들에 접근할 수 있는 자바 API JVM이 실행되면 사용자가 작성한 자바코드가 컴파일러를 거쳐 바이트 코드로 변환되어 static 영역에 저장되는데, Reflection API는 해당영역에서 값을 가져옴. 정확히는 JVM의 메모리 영역에서 가져온다. 어플리케이션을 실행하면 작성한 자바 코드는 컴파일러에 의해 .class 형태의 바이트 코드로 변환되고, 이 정보들은 클래스 로더를 통해 JVM 메모리 영역에 저장된다. 그리고 클래스 정보를 통해 객체가 생성된다면 이는 JVM 힙 영역에 저장된다. 즉, JVM의 메모리영역에서 클래스의 정보를 가져올 수 있다. 다시! 리플렉션이란, 어플리케이션이 실행되어 JVM 메모리 영역에 클래스 ..

TIL 2024.01.04

ThreadLocal 이란.

우선 thread-safe 를 이해하고 가자. 가끔 라이브러리에서 가져와 사용하는 클래스들을 보면 ... ... * it is immutable and is thread-safe. ... 와 같은 글을 볼 수 있다. java.time.format.DateTimeFormatter의 주석 일부 즉 멀티 스레드 환경에서, 동시에 함수나 변수 등에 접근 가능 할 때 서로 다른 스레드들이 동시에 같은 것에 접근해서 이용해도 문제가 생기지 않는 다는 것을 의미한다. -> 서로 다른곳에서 동시에 접근해 작업을 수행해도 결과는 문제없다는 뜻! 자바에서 멀티쓰레드는 보통 Thread, Runable을 이용해서 구현을 하곤 한다. 그렇다면 ThreadLocal이란 무엇일까. 요즘은 많은 클래스들이 thread-safe하게..

TIL 2024.01.03

for vs .forEach() vs stream.forEach()

https://velog.io/@tjdtn0219/JavaStream-%EA%B0%9C%EB%85%90-%EC%84%B1%EB%8A%A5-%EC%82%AC%EC%9A%A9-%EC%98%88%EC%A0%9Cfeat.-for%EB%AC%B8-%EB%B9%84%EA%B5%90 [Java]Stream 개념, 성능, 사용 예제(feat. for문 비교) JDK 1.8(8버전)부터 제공된 컬렉션 혹은 배열에 저장된 요소를 하나씩 참조하여 람다 표현식으로 처리할 수 있는 반복자이다. 스트림이 존재하기 이전에는 Iterator 인터페이스를 사용했다고 한다.St velog.io Iterable ->외부 반복을 사용함. 개발자가 직접 반복자를 사용하여 컬렉션의 요소를 순회하고 처리함. Stream 객체 Java 8 에서 ..

TIL 2023.12.29

커넥션 vs 세션

차이가 무너지 모르겠었다. 커넥션 -> 물리적인 연결 세션 -> 논리적인 연결. 커넥션 커넥션은 DB와 클라이언트 간의 TCP 소켓을 통한 물리적인 연결(채널)이다 클라이언트가 데이터베이스 서버에 연결을 요청하면 커넥션을 맺게 된다 한 커넥션에서 여러 개의 트랜잭션을 동시에 실행시킬 수 없다 세션 사용자가 데이터베이스에 연결된 상태를 의미한다 세션은 DB와 클라이언트 간의 논리적인 연결이라고도 할 수 있다 커넥션 하나 당 여러 개의 세션을 가질 수 있다 (또는 세션을 아예 가지지 않을 수도 있다) 커넥션을 통한 모든 요청은 세션을 통해서 실행된다 쉽게 말해서 실제 SQL 쿼리 실행은 세션을 통해 이루어진다 사용자가 커넥션을 닫으면 세션은 종료된다 커넥션이 닫히면 세션은 종료되고, 커밋되지 못한 트랜잭션은..

카테고리 없음 2023.12.19

스프링 test 안될때

gradle 실행 시 Exception 발생 → 설정 > 실행, 배포, 빌드 > Gradle -> IntelliJ IDEA로 변경해보기 2) 경로나 테스트 한글이면 영어로 바꾸기 3) Intellij IDEA 테스트 시 Command line is too long 뜰 경우 아래글 참고하기. https://velog.io/@chominho96/Spring-Intellij-Intellij-IDEA-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%8B%9C-Command-line-is-too-long-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0 [Spring / Intellij] Intellij IDEA 테스트 시 Command line is too long 에러 해결 [Spr..

카테고리 없음 2023.12.13