TIL 125

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

메시지 브로커에서 대규모 메시지 기반 미들웨어 아키텍쳐에서 사용됨. 미들웨어 : 어플리케이션을 효율적으로 연결하는 소프트웨어 메시징플랫폼, 인증 플랫폼 , 데이터베이스 같은것들. 특징 ) 보내고 처리하고 삭제한다.! 메시지 받아서 처리하고 나면 짧은 시간 내에 삭제됨 -> 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

STOMP 채팅 (TODO)

웹소켓 -> 양방향 통신을 위한 프로토콜 STOMP는 웹소켓 기반으로 동작함 STOMP는 Simple/Stream Text Oriented Message Protocol의 약자로, 메시지 브로커의 역할을 한다. STOMP는 WebSocket 기반으로 동작하며 pub/sub 구조로 되어 있다. (Publisher)가 편지함에 편지를 넣어두면 그걸 기다리고 있던 편지를 받는 사람(Subscriber)가 편지를 받고 읽는 구조이다. 인터넷에 떠도는 대표적인 예로 채팅방 생성 : pub/sub 구현을 위한 Topic 생성 채팅방 입장 : Topic 구독 채팅방에서 메시지를 송수신 : 해당 Topic으로 메시지를 송신(pub) 혹은 수신(sub) SockJs : Websocket은 Upgrade Header을 이..

TIL 2023.11.28

CSR vs SSR

프로젝트를 하다보니 유저의 id를 받아서 닉네임을 보여줘야하는 경우가 많다. 그 닉네임을 누가 처리할거냐? 에 따라 서버에서 다 만드는거 -> 장점: 초기 페이지 렌더링 빠름 + SEO 강점 BUT : 서버 부하 + 깜빡임 ( 클라이언트 입장에서 좀 느림 ) 클라이언트에서 만드는거 -> 장점: 페이지간 이동시 빠름 ( 교체만 하면 됨 ) + 사용자 친화적 단점 : 초기페이지 렌더링 느림 + SEO 불리 그럼 언제 뭘 선택해야하느냐? 참고: https://adjh54.tistory.com/53 SEO 란 ? -> 구글 검색시 상단에 뜨게 하는 그런거!! 참고: https://yozm.wishket.com/magazine/detail/1540/

TIL 2023.11.22

long vs Long

자바의 자료형에 대해 알아보자. long vs Long 어떻게 다를까? 입력받을때 dto에 해당 key 값이 없으면 null로 들어오는데, (Long)은. long 은 0으로 들어오길래 뭔가 하고 찾아봤다. 기본형 : 다시 본론으로 가서.. Long는 무엇인가 하면, 1)에서 다룬 기본형을 표현해야 하는 경우가 있습니다. 매개변수로 객체를 필요로 할 때 기본형 값이 아닌 객체로 저장해야할 때 객체 간 비교가 필요할 때 https://velog.io/@hadoyaji/int%EC%99%80-Integer%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4-%EB%8B%A4%EB%A5%B8%EA%B0%80

TIL 2023.10.19