일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- jvm
- 자바 ORM 표준 JPA 프로그래밍
- Java
- redis
- IntellJ
- SpringBoot
- 이스티오
- 토비의 스프링 정리
- Stack
- 스프링
- 백준
- 자바
- Collection
- OS
- Real MySQL
- 토비의 스프링
- 스트림
- MSA
- 보조스트림
- gradle
- mysql
- Stream
- JPA
- GC
- spring
- K8s
- list
- 쿠버네티스
- Kotlin
- thread
- Today
- Total
목록전체 글 (151)
인생을 코딩하다.
카프카를 사용시 consume이 단 한 번만 일어나면 좋겠지만 실제로 그렇지 않은 경우가 종종 있습니다. consume이 딱 한 번만 일어나지 않으면 어떤 문제가 발생할까요? consumer가 카프카 브로커로부터 메시지를 가져와서 데이터 처리를 할 텐데, 만일 중복 consume이 발생하면 그 데이터 처리도 중복으로 처리될 수 있습니다. 때로는 consume 누락이 발생할 수도 있습니다. 그럼 데이터 처리도 누락됩니다. 이 문제를 막기 어려운 근본적인 이유는 아래와 같습니다. commit 시점과 데이터 처리 완료 시점이 완벽하게 일치할 수 없는 경우(그 시간 간극 동안 리밸런싱이 발생할 수도 있음) offset 관리가 consumer측이 아니라 broker 측에서 이루어지는 경우(_consumer_off..
컨트랙트 바운디드 컨텍스트 모델은 서로 독립적으로 발전하고 구현될 수 있다. 그러나 바운디드 컨텍스트 자체는 독립적이지 않고 서로 상호작용 해야한다. 결국, 바운디드 컨텍스트 사이에는 항상 접점이 있는데 이것을 컨트랙트라 고 부른다. 왜 상호작용 해야하는데? 비즈니스 프로세스 흐름: 예를 들어, 주문이 생성되고 처리되는 과정에서 고객 관리, 재고 관리, 결제 시스템 등 여러 컨텍스트 간의 상호작용이 필요할 수 있음 데이터 공유: 서로 다른 컨텍스트 간에는 종종 데이터를 공유해야함. 예를 들어, 고객 정보를 처리하는 서비스는 주문 처리 시스템과 고객 정보를 공유해야 할 수 있음. 업무 통합: 여러 바운디드 컨텍스트 간의 상호작용은 업무 통합을 가능하게. 서로 다른 컨텍스트 간에 정보를 교환하고 업무를 조율..
reWriteBatchedInserts은 MySql 전용 옵션입니다. 사실 PostgreSql에서도 동일하게 사용되는 것으로 착각하고 있었으나 PostgreSql에서는 reWriteBatchedInserts가 아닌 rewriteBatchedStatements 사용하는게 맞습니다. mySql postgreSql reWriteBatchedInserts rewriteBatchedStatements 그럼 reWriteBatchedInserts, rewriteBatchedStatements은 무엇일까요? - 주말에 작성하기
ColpletableFuture 2014년에 발표된 java8에소 처음 도입 비동기 프로그래밍 지원 Lambda, Metho reference 등 java 8의 새로운 기능 지원 Method reference :: 연산자를 이용해서 함수에 대한 참조를 간결하게 표현 method reference statuc method reference instance method reference constructor method reference ColpletableFuture 클래스 CompletableFuture Future CompletionStage 비동기적인 작업을 수행 비동기적인 작업을 수행 해당 작업이 오한료되면 결과를 반환하는 인터페이스 해당 작업이 완료되면 결과를 처리하거나 다른 CmpletionSt..
공부한 것 기록하기.. Blocking의 종류 blocking은 thread가 오랜 시간 일을 하거나 대기하는 경우 발생 CPU-bound blocking: 오랜 시간 일을 한다. IO-bound blocking: 오랜 시간 대기한다. CPU-bound blocking thread가 대부분의 시간 CPU 점유 연산이 많은 경우 추가적인 코어를 투입 IO-bound blocking thread가 대부분의 시간을 대기 파일 일기/쓰기, netowrk 요청 처리, 요청 전달 등 IO-bound non-blocing 가능하다. Blocking의 전파 하나의 함수에서 여러 함수를 호출하기도 하고, 함수 호출은 중첩적으로 발생 callee는 caller가 되고 다시 다른 callee를 호출 blocking한 함수를..
공부한 것 기록하기 함수 호출 관점에서 동기와 비동기 함수형 인터페이스 함수형 프로그래밍을 지원하기 위해 java8 부터 도입 1개의 추상메서드를 갖고 있는 인터페이스 함수를 1급 객체로 사용할 수 있다. 함수를 변수에 할당하거나 인자로 전달하고 반환값으로 사용 가능 Function, Consumer, Suppier, Runnable등 함수형 인터페이스를 구현한 익명 클래스를 람다식으로 변경 가능 함수형 인터페이스는 호출한 쓰레드에서 실행된다. 두 모델의 차이점 A 모델 B 모델 main는 getResult의 결과에 관심이 있다. main은 getResult의 결과에 관심이 없다. main은 결과를 이용해서 다음 코드를 실행한다. getResult는 결과를 이용해서 함수형 인터페이스를 실행한다. 동기 비..
PostgreSql using brin index란? BRIN (Block Range INdex)은 PostgreSQL에서 제공하는 인덱스 유형 중 하나입니다. BRIN 인덱스는 대량의 데이터를 가진 테이블에서 성능을 향상시키기 위해 설계되었습니다. BRIN은 블록 범위를 기반으로 한 인덱스로, 특히 정렬된 데이터에 적합합니다. CREATE TABLE member ( id integer, created_at timestamp, -- other columns ); -- BRIN 인덱스 생성 CREATE INDEX idx_created_at ON member USING BRIN (created_at); BRIN 인덱스는 데이터를 블록 단위로 그룹화하고 각 블록에 대한 최소값과 최대값을 저장합니다. 블록은 데..
Redis Pipeline에 설명하기에 앞서 No Pipeline에 관해 간략하 말씀드리겠습니다. redis는 요청을 보낼 때 일반적으로 아래와 같이 수행됩니다. 클라이언트는 서버에 쿼리를 보내고 일반적으로 차단 방식으로 소켓에서 서버 응답을 읽습니다. 서버는 명령을 처리하고 클라이언트에 응답을 다시 보냅니다. Redis는 클라이언트-서버 모델과 요청/응답 프로토콜을 사용하는 TCP 서버이며, 클라이언트가 서버에 명령을 보내고 응답을 받는 구조입니다. 위 과정은 클라이언트가 연속적으로 많은 요청을 보내야 하는 경우 RTT가 길어져 성능에 악영향을 미칠 수 있습니다. 예를 들어 RTT가 250밀리초인 경우, 초당 최대 4개의 요청만 처리할 수 있습니다. 만약 요청이 1000개라면 엄첨 느리겠죠? 위와 같이..