소프트웨어 디자인 패턴락 획득 이전에 locking criterion(lock hint)을 사전 테스트하여 락획득의 오버헤드를 줄이는 방법이다.locking criterion check가 locking이 필요하다고 판단내리는 경우에만 locking이 발생한다.singl
생성 패턴 중에 하나하나의 instance만을 가질 수 있도록 보장한다.global한 access point를 제공한다.singleton은 두가지 문제를 해결한다.1\. 클래스가 하나의 인스턴스만을 가진다.왜 클래스가 가지는 인스턴스의 숫자가 중요할까 ? 가장 대표적인
프로듀서가 메시지를 생산해서 카프카의 토픽으로 메시지를 보내면 그 토픽의 메시지를 가져와서 소비하는 역할을 하는 애플리케이션, 서버 등을 지칭하여 컨슈머라고 한다.컨슈머에는 두 종류가 있는데, 올드 컨슈머 / 뉴 컨슈머이다.올드 컨슈머는 컨슈머의 오프셋을 주키퍼의 지노
카프카의 토픽으로 메시지를 보내는 역할을 맡는 어플리케이션파티셔닝이라는 개념이 있는데, 파티셔너는 메시지의 키값을 보고 파티셔닝을 진행한다.쉽게 말해서 키값을 기준으로 해싱을 진행하고 그 해싱값에 따라서 특정 파티셔닝으로 보낸다.따라서 특정 메시지를 특정 파티션에 보내
null이 많으면 해당 컬럼의 카디널리티가 아주 작아진다.쿼리 성능을 위해서 조회에 무조건 인덱스를 걸어야 하는 상황하지만 where로 검색할 컬럼의 대부분의 값이 null인 상황이 두 상황에서는 어떻게 인덱스를 활용해야 할까 ?물론 인덱스를 걸고 대충 쿼리 플랜 보면
spring bean을 선언하는 여러가지 방법이 있다.spring bean이란 spring ioc container에 의해 관리되는 특수한 인스턴스를 의미하는데,보통은 singleton이다.다른 scope들도 존재한다.그런데 생각해보니 @Bean과 @Component
만약에 모든 빈이 올라가고, 이 빈들이 특정한 모듈에서만 다르게 동작되야 한다고 해보자.이때는 해당 모듈에서의 ContextRefreshedEvent의 listener를 선언하고 여기서 빈의 설정을 override하면 된다.간단하게 이 event는 모든 빈들이 올라가고
다음과 같은 자료구조가 있다고 하자.그리고 List<Order>를 OrderType으로 묶어서 Map을 만들고 싶다.다음과 같은 코드면 가능하다.가끔 편리하게 사용가능하다.
분산 시스템에서는 클러스터를 중심으로 하위 노드들이 집결되어 있다.카프카, 쿠버네티스 환경이 그러하다.보통 클러스터에 여러 노드들이 있는 경우 노드들을 관리하기 위해서 다음의 작업이 필요하다.노드들의 헬스체크 \- 노드가 다운됬을 경우 데이터를 보내거나, 받거나,
카프카 파티션으로 enqueue되는 데이터를 레코드라고 하는데, 이 레코드는 다음과 같은 특성이 있다. 브로커에 저장되면서 결정되는 값, 프로듀서가 직접 설정하는 값으로 나뉜다. 브로커에 저장되고 나서는 값의 수정이 불가능하다. 로그 리텐션 기간, 용량에 따라서 삭
토픽 : 카프카에서 데이터를 구분하기 위해서 사용되는 단위. 하나의 토픽에는 적어도 한개의 파티션이 있다.파티션 : 토픽이 갖고 있는 큐들을 의미한다. 파티션에는 프로듀서가 보낸 데이터(로그, 메시지, 레코드)들이 저장된다. 일반적인 큐와 다른 점은 읽는다고 deque
데이터를 보관하는 중간 프로세서이다.하나의 물리 장비, 서버, 인스턴스에서 동작된다. k8s환경이라면 인스턴스프로듀서가 브로커로 데이터를 보내고, 컨슈머가 데이터를 브로커에서 읽는다.파일시스템 기반으로 데이터를 저장하기때문에 장애가 발생해도 데이터가 유실되지 않는다.거
뒤에 옵션은 왜 사용하는걸까...?시니어 개발자분이 붙이는걸보고 좀 궁금해서 서치해봤다.일단 스프링에서는 생성자 주입방식을 많이 사용하는데, (여러가지 이점이 있다.)@RequiredArgsConstructor는 롬복의 어노테이션인데 해당 어노테이션과 주입받은 빈들을
파편화된 데이터 수집 및 분배 아키텍처가 필요함.예를 들어서 데이터를 생성/수집하는 아키텍처는 다음과 같을 것 생성하는 소스 어플리케이션소비하는 어플리케이션생성 어플리케이션 - 소비 어플리케이션하지만 이건 단방향임.여기서 만약에 파이프라인이 늘어나거나 하면 굉장히 복잡
스프링 event lister에 대해서 알아보자.어떤 비즈니스 로직이 필요할까 ?예를 들어서 결제가 성공했을때, 결제한 유저에게 이메일 / 문자 등 특정 수단을 통해서 결제가 성공함을 notify해준다고 가정하자.그러면 다음과 같은 흐름이 된다.결제 시도결제 성공결제
RDB 우리가 흔히 웹서비스라고 부르는 서비스의 대부분은 RDB를 이용한다. RDB가 무엇이고, 왜 이걸 쓰는지에 대해서는 따로 정리할 예정이다. RDB = Relational DataBase은 말 그대로 관계형 데이터 베이스라고 부른다. 관계형 데이터 베이스의
우리가 가장 대표적인 e-commerce를 만든다고 가정해보자. 당연히 떠오르는게 많을 것이다. > 1. 뭐 고객은 상품 주문이 가능하고... 판매자는 상품을 등록할 수 있고... 장바구니도 있어야 할테고... 한번에 여러가지 주문이 가능해야 할테고... 여기서
일하면서 주로 spring boot + jpa(또는 MyBatis) + Thymeleaf 를 사용해서 어드민을 구성했었다. 내가 생각하기에, 최소한의 admin에 들어가야 할 스펙들과, 어떤 기능들이 있으면 좋을지에 대해서 짚으면 좋겠다는 생각에 하나씩 직접 개발
💪개발자가 익숙해져야 할 핵심 문서 에디터 ! ㄴ라고 다들 알고계시겠지만, 정작 많은 사람들이 마크다운을 사용하는 가장 큰 이유는 모르는것 같습니다 ! ㄴ사실 그게 접니다. 왜 마크다운을 사용할까 ? 마크다운을 어떻게 사용할까 ? 에 대해서 정리해보겠습니다.
내가 실무에서 적용하고 공부했던 기술 스택들을 적어보자 !SpringSpring BootMVC patternJpaSpring Data JpaQueryDslMyBatisTomcatNginxRDB + SQLHTTP 1번 부터 시작하자 !