서론 자바를 사용하다 보면 Thread에 대해 많이 들어보고, 대략적인 흐름은 알지만 무심하게 지나치게 되는 상황이 있곤 합니다. 그리고 우리는 ThreadPoolExecutor, ForkJoinPool, VirtualThread, Webflux 등 Thread를 다양하게 사용하는 상황에 대비해 기본적인 Thread에 대해 알 필요가 있습니다. 그럼 지금부터 Thread에 대해 알아보겠습니다. 참고로 VirtualThread에 의해 만들어지는 Thread는 OS와 매칭되는 흐름이 다르기 때문에 해당 글은 VirtualThread에 의해 만들어진 Thread가 아님을 알립니다. Thread란? 자바 Thread는 JVM에서 사용자 모드 Thread를 생성할 때 System call을 통해 커널에서 생성된 ..
서론 교착상태란 두 개 이상의 프로세스 또는 스레드가 상대방의 작업이 끝나길 하염없이 기다리고만 있는 상태를 말합니다. 예를 들면 두 기차가 교차로에 진입했을 때, 두 기차 중 하나의 기차가 지나가는 게 아닌 일단 두 기차 모두 정지하고 상대방이 없어지길 기다린 후 기차가 지나가는 것입니다. 이 예를 보면 기차가 둘 다 정지했는데 어떻게 상대방이 없어지길 기다리고 내가 지나갈 수 있는거지? 라는 생각이 들 것입니다. 이게 바로 교착상태입니다. 앞서 말했듯이 교착상태란 상대방의 작업이 끝나길 하염없이 기다리는데, 상대방 또한 내가 끝나길 하염없이 기다릴 테니 아무런 행동 조차할 수 없는 것이죠 교착상태는 어떤 조건하에 발생하는가? 교착상태는 상호배제, 점유대기, 비선점, 순환 대기 이러한 4가지 조건이 모..
RabbitMQ란? RabbitMQ는 AMQP 프로토콜을 구현한 메세지 브로커입니다. 생산자에게 메시지를 생산하여 소비자에게 전달해주는 서비스로 시스템 간 메시지를 전달해주는 오픈소스 메시지 브로커 소프트웨어입니다. 기본적인 구조 Producer가 Exchange에게 메시지를 발행합니다. Exchange는 Binding 규칙을 사용해 메시지의 복사본을 Queue에 배포합니다. 실제 메시지를 큐에 넣는 대신 메시지에 대한 참조가 Queue에 추가됩니다. 메시지를 전달할 준비가 되면 이 참조를 사용해 클라이언트에게 전송합니다. 메시지가 여러 클라이언트에게 발행될 때 참조만을 저장해서 메모리를 적게 사용합니다. Broker는 subscribe하고 있는 Consumer에게 메시지를 전달하거나 요청시 Queue에..
Blocking VS Non-Blocking 💡 Blocking 자신의 작업을 진행하다가 다른 주체자의 작업이 시작되면 다른 주체자의 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것입니다. Blocking은 자신이 호출한 함수가 완료되기까지를 기다리는 것입니다. 그래서 Blocking 상황에서는 작업의 책임을 누가지고 있냐에 관계 없이 자신이 수행하던 로직은 멈추게되고 오매불망 호출한 함수가 결과를 돌려주기를 기다리게 됩니다. 💡 Non-Blocking 다른 주체자의 작업에 관련없이 자신의 작업을 하는 것입니다. 자신이 호출한 함수에 대하여 기다리지 않고, 작업만 전달한 후 복귀하여 자신의 작업을 수행합니다. 요청한 작업에 대한 결과가 요청과 동시에 준비가 되어있다면 바로 결과를 받을 수도 있지..
- Total
- Today
- Yesterday
- transactional outbox pattern spring boot
- service based architecture
- spring boot poi excel download
- polling publisher spring boot
- transactional outbox pattern
- redis sorted set으로 대기열 구현
- redis sorted set
- java ThreadLocal
- java userThread와 DaemonThread
- 공간 기반 아키텍처
- spring boot redisson destributed lock
- 레이어드 아키텍처란
- spring boot 엑셀 다운로드
- space based architecture
- 람다 표현식
- spring boot redisson 분산락 구현
- pipeline architecture
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- pipe and filter architecture
- microkernel architecture
- spring boot excel download oom
- JDK Dynamic Proxy와 CGLIB의 차이
- 자바 백엔드 개발자 추천 도서
- redis 대기열 구현
- spring boot redisson sorted set
- 트랜잭셔널 아웃박스 패턴 스프링부트
- @ControllerAdvice
- 서비스 기반 아키텍처
- spring boot redis 대기열 구현
- spring boot excel download paging
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |