DEV ℧ Developer Diary

[Java] 분산 락(Distributed Lock)을 이용해 동시성 제어하기

분산 락(Distributed Lock)을 이용해 동시성 제어하기

분산 락

기존 이전 포스트에서 설명한 Datebase Lock과는 다른 방식으로 작동을 한다.

락을 거는 것은 같으나, 자원에 직접 락을 거는 것이 아닌 공통된 저장소에 락을 걸어 자원이 사용중인지를 체크하고, 사용 뮤무에 따라 프로세스를 진행하는 방식이다.

<h2…

[EffectiveJava] item50 - 적시에 방어적 복사본을 만들라

자바는 안전한 언어다.

네이티브 메서드를 사용하지않으니 C, C++ 같이 안전하지 않은 언어에서 흔히 보는 버퍼 오버런, 배열 오버런, 와일드 포인터 같은 메모리 충돌 오류에서 안전하다.

방어 프로그래밍

하지만 아무리 자바라 해도 다른 클래스로부터의 침범을 아무런 노력 없이 다 막을 수 있는건 아니다.

클라이언트가 여러분의...

[EffectiveJava] item49 - 매개변수가 유효한지 검사하라

메서드와 생성자 대부분은 입력 매개변수의 값이 특정 조건을 만족하기를 바란다.

  • index가 음수인 경우
  • 객체 참조가 null 인경우

이런 제약은 반드시 문서화해야 하며 메서드 몸체가 시작되기 전에 검사해야 한다.

이는 “오류는 가능한 한 빨리 (발생한 곳에서) 잡아야 한다”(fail-fast) 일반 원칙의 한 사례 이기도 하다....

[EffectiveJava] item48 - 스트림 병렬화는 주의해서 적용하라

주류 언어 중, 동시성 프로그래밍측면에서는 자바는 항상 앞서갔다.
java.util.concurrent, 실행자(Executor), 스트림 API의 parallel 메서드와 같이 여러 개선사항과 함께, 자바로 동시성 프로그램을 작성하기가 점점 쉬워지고는 있지만, 이를 올바르고 빠르게 작성하는 일은 여전히 어려운 작업이다.

동시성 프로그래밍을 할 때는 안정성(safety)와 응답 가능(liveness) 상태를 유지하기...

[EffectiveJava] item47 - 반환 타입으로는 스트림보다 컬렉션이 낫다.

일련의 원소를 반환하는 메서드는 수없이 많다. 자바 7까지는 이런 메서드의 반환타입으로 Collection, Set, List 같은 컬렉션 인터페이스, 혹은 Iterable이나 배열을 썼다.

그런데 자바 8이 스트림이라는 개념을 들고 오면서 이 선택이 아주 복잡한 일이 되어버렸다.

Stream과 Iterable의...