| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
| 31 |
- list
- GC
- 스프링
- 보조스트림
- Collection
- gradle
- spring
- 자바 ORM 표준 JPA 프로그래밍
- thread
- 이스티오
- 쿠버네티스
- MSA
- IntellJ
- 토비의 스프링 정리
- Real MySQL
- Stream
- Java
- redis
- OS
- 자바
- 스트림
- SpringBoot
- mysql
- 토비의 스프링
- Stack
- K8s
- jvm
- Kotlin
- 백준
- JPA
- Today
- Total
목록분류 전체보기 (155)
인생을 코딩하다.
공부한 것 기록하기.. 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개라면 엄첨 느리겠죠? 위와 같이..
where절 작성 순서는 query 성능과 연관이 있을까요?SELECT * FROM hyungil.user AS u .... WHERE u.id = ? AND u.name = ? AND u.date = ?상관없습니다. Query Optimizer의 최적화 알고리즘에 의해 알아서 최적화됩니다. 비즈니스 로직의 순서에 맞춰서 작성하면 됩니다.FROM절 작성 순서는 query 성능과 연관이 있을까요?INNER JOINSELECT * FROM hyungil.A INNER JOIN hyungil.B ON A.col = B.col INNER JOIN hyungil.C ON C.col = B.colINNER JOIN은 Query Optimizer의 최적화 알고리즘(순서가 달라도 결과가 같아야 한다.)에 의해 알아서 ..
카프카 리밸런싱이란 무엇일까요? 컨슈머 그룹으로 이루어진 컨슈머 들 중 일부 컨슈머에 장애가 발생하면, 장애가 발생한 컨슈머에 할당된 파티션은 장애가 발생하지 않은 컨슈머에 소유권이 넘어갑니다. 이러한 과정을 리밸런싱이라고 부릅니다. 리밸런싱이 일어날 수 있는 상황 두 가지는 크게 컨슈머가 추가되는 상황과 컨슈머가 제외되는 상황으로 나뉩니다. 이슈가 발생한 리밸런싱 즉, 컨슈머를 컨슈머 그룹에서 제외하여 모든 파티션이 지속적으로 데이터를 처리할 수 있도록 가용성을 높여 주어야 합니다. 그럼 컨슈머에 문제가 발생했을 때 리밸런싱이 일어난다는 건데, 문제가 발생한걸 어떻게 실시간으로 판단하고 자동으로 리밸런싱이 되게 할 수 있을까요? 저는 리밸런싱에 관해 이러한 생각이 들었습니다. "그럼 컨슈머에 장애가 난..
쿠버네티스 설명에 앞서 현재 세계 많은 기업에서 쿠버네티스를 사용하게 된 역사에 관해 간단히 작성해보았습니다. 큰 기업들은 대규모의 서비스를 운영하고 있기 때문에 최대한 자원을 효율적으로 쓰는 것이 중요합니다. 이것은 비용과 관련이 있기 때문이죠. 따라서, 서버 자원을 효율적으로 쓰기 위해 기업들은 가상머신(VM) 기술에 대해 관심을 가질 수 밖에 없습니다. VM은 무엇인가요? 가상 머신(Virtual Machine, VM)은 물리적 하드웨어 시스템(오프프레미스 또는 온프레미스에 위치)에 구축되어 자체 CPU, 메모리, 네트워크 인터페이스 및 스토리지를 갖추고 가상 컴퓨터 시스템으로 작동하는 가상 환경입니다. VM의 역사 위 사진을 보면 2014.6 전까지를 하이퍼바이저(가상머신 방식) 기반 가상화, 그..
가변성을 제한하라. 읽고 쓸수 있는 프로퍼티 var을 사용하거나 mutable 객체를 사용하면 상태를 가질 수 있습니다. 상태를 가지면 해당 요스의 동작은 사용 방법뿐만 아니라 그 이력에도 의존하게 됩니다. 가변성이 있을 시 문제점 1. 프로그램을 이해하고 디버그하기 힘들어집니다. 이러한 상태를 갖는 부분들의 관계를 이해해야 하며, 상태 변경이 많아지면 이를 추적하는것이 힘들어집니다. 이러한 클래스는 이해하기도 어렵고, 이후에 코드를 수정하기도 힘들어집니다. 클래스가 예상하지 못한 상황 또는 오류를 발생시키는 경우에도 큰 문제가 됩니다. 2. 가변성이 있으면, 코드의 실행을 추론하기 어려워집니다. 시점에 따라서 값이 달라질 수 있으므로, 현재 어떤 값을 갖고 있는지 알아야 코드의 실행을 예측할 수 있습니..