<JPA> 동시성 제어, 낙관적 락 vs 비관적 락

갱신 분실 문제 다중 사용자 환경에서 동작하는 애플리케이션을 개발할 때, 데이터 무결성을 지키기 위한 동시성 제어는 선택이 아닌 필수입니다. 여러 트랜잭션이 동시에 같은 데이터에 접근하여 수정할 때, 예상치 못한 문제가 발생할 수 있으며,

<Java> ThreadPool 동작원리

본 포스팅에서는 Java에서 제공하는 스레드 풀의 내부 동작에 대해서 다룹니다. “단순히 요청이 오면 Idle한 스레드가 수행한다” 정도는 아니고 스레드 풀 내부의 큐 구현에 따라 어떻게 동작이 달라지는지 스레드 풀의 스레드 개수는 언제 증가하는지

<Java> Selector가 TCP FIN 패킷을 감지하는 법

배경 특정 캐시 노드를 정상적으로 종료시키고 Java단에서 해당 캐시 노드와 연결된 TCP 소켓 채널 객체의 상태를 확인해봐야하는 작업을 진행중이였다. 이를 확인하기 위해 SocketChannel을 진단하는 isConnected 값을 확인해보니 true 값이 리턴되고 있었다. TCP 연결이

<Java> DNS Cache TTL 설정 (System vs Security)

DNS cache TTL? 흔히 DNS LookUp을 통해 특정 도메인에 해당하는 IP 주소 값을 얻어옵니다. Java의 경우 특이하게 JVM 단에서 DNS에 대한 IP 정보를 캐싱해서 매번 hosts로부터 Lookup하지 않고 값을 가져올 수 있도록 합니다.

자바 병렬 프로그래밍 - 5장 구성 단위

동기화된 컬렉션 클래스 동기화된 컬렉션 클래스는 Vector, HashTable이 존재한다. 이는 synchronizedXxx를 사용하지 않아도 동기화 된 기능을 제공해준다. 위와 같은 자료구조를 사용하다보면 여러개의 연산을 묶어 원자적인 하나의 단일 연산처럼 사용해야 할 때가 있다. 만약

자바 병렬 프로그래밍 - 4장 객체 구성

스레드 안전한 클래스 설계 객체가 가진 여러가지의 정보들을 객체 내부에 캡슐화 시켜두면 다른 클래스를 분석할 필요없이 객체 단위로 스레드 안전성을 확인해볼 수 있다. 만약 하나의 객체가 하나의 원시 타입의 변수로만 구성된다면 해당 객체의

<Java> ThreadLocal 딥다이브

자바 병렬 프로그래밍을 읽으면서 문득 ThreadLocal이라는 클래스가 어떻게 스레드마다 서로 다른 참조를 유지시키는지 궁금해졌다. 이를 파악해본다. 먼저 공부를 하기 전 내가 모르는 사항은 아래와 같았다. 1. ThreadLocal 도 클래스이고 인스턴스가 생성될 경우 힙

<Java> redis를 곁들여 Selector를 사용해보기

본 포스팅은 java의 nio 패키지의 Selector를 활용하여 Redis와 간단한 연산을 통해 통신하는 법을 알아봅니다. 또한 논블로킹과 블로킹 처리의 초당 요청 처리수의 비교도 해보는 포스팅입니다. 단순히 생각해보면 무조건 논블로킹이 더 많은 초당 요청 수를

<Java> Reactive Streams 1

이번 포스팅에서는 Java Reactive Streams이 어떤 요구사항에 의해 생겼는지 그리고Publisher와 Subscriber의 기본적인 동작에 대해서 작성할 예정입니다. Iterable vs Observable Project Reactor의 공식문서 [https://projectreactor.io/docs/core/release/reference/#intro-reactive]에서 Reactive stream와

<Java> 예외처리 활용

앞선 포스팅 [https://hongchangsub.com/java-check-vs-uncheck/]에서 체크 예외와 언체크 예외의 차이점에 대해서 알아보았습니다.이번 포스팅에서는 위와 같은 예외들을 실제로 어떻게 적용시키는지 알아보겠습니다. 체크 예외의 단점 앞선 포스팅에서 체크 예외는 친절하게 컴파일러가 잡아주는