본문 바로가기
Java에서 동기화를 보장하는 방법 1. Monitor Monitor는 동시성 제어를 위한 기법이다. 세마포어나 락보다는 고수준의 기법으로 프로그래밍 언어수준에서 지원한다. 세마포어의 경우는 상황에따라 timing error가 발생할 수 있는데 이는 찾기도 힘들고 어떤경우에는 생길수도 생기지 않을수도 있다. 타이밍 에러에 대해서 간단하게 설명해보면 임계구역에 접근하기 전에 wait를 실행해야하고 임계구역을 나올때 siginal을 실행해야하는데 만약 순서를 잘못 지키면 타이밍 에러가 발생한다. wait후에 signal을 호출해야하는데 또다시 wait를 작성하면 교착상태가 발생할 수 있다. 이를 해결하기 위해서 언어차원에서 Monitor라는 기법을 제공하는 것이다. Monitor는 결국 세마포어를 개발자가 직접 관리할때 구현을 잘못할 수 있는.. 2021. 11. 5.
Iterator 1. Iterator 1.1 Iterator의 정의 컬렉션의 데이터를 얻어오는데 사용하는 인터페이스이다. 컬렉션 구현체의 `iterator()`메서드를 통해서 Iterator를 얻을 수 있다. 아래코드는 Iterater인터페이스이다. public interface Iterator boolean hasNext(); E next(); default void remove() { throw new UnsupportedOperationException("remove"); } default void forEachRemaining(Consumer 2021. 9. 30.
신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션 1. Reliability(신뢰성) 아래는 소프트웨어가 올바르게 동작함을 의미하는 경우이다. `신뢰성`이란 무언가 잘못되더라도 지속적으로 올바르게 동작함을 의미한다. 애플리케이션은 사용자가 기대한 기능을 수행한다 시스템은 사용자가 번한 실수나 예상치 못한 소프트웨어 사용법을 허용할 수 있다. 시스템 성능은 예상된 부하와 데이터 양에서 필수적인 사용 사례를 충분히 만족한다. 시스템은 허가되지 않은 접근과 오남용을 방지한다. 1.1 Fault Tolerant(결함성)과 Resilient(탄력성) 잘못될 수 있는 일을 fault(결함)이라고 하고 fault(결함)을 예측하고 대처할 수 있는 시스템을 fault-tolerant또는 resilient을 지녔다고 말할 수 있다. 모든 종류의 fault(결함)을 견디.. 2021. 9. 29.
쿠버네티스를 이루는 구성요소 - pod,service,replicationController 2.1 도커를 사용한 컨테이너 이미지 생성,실행,공유 쿠버네티스에서 구동되는 애플리케이션은 컨테이너 이미지로 패키징 되어야 한다. 도커이미지를 실행하면 일어나는 과정은 아래와 같다. docker run busybox echo "Hello World" 도커는 로컬 머신에 busybox 이미지가 저장되어 있는지 확인한다. 로컬에 이미지가 저장되어 있지않으면 도커 레지스트리로부터 이미지를 Pull받는다. 도커가 격리된 컨테이너에서 echo "Hello World"를 실행한다. 2.2 쿠버네티스 클러스터 설치 쿠버네티스 클러스터를 구축하는것은 매우 힘든일이다. 따라서 많은 cloud에서는 쿠버네티스를 구축할 수 있게 지원해주고 있고 로컬환경에서 테스트할때는 miniKube를 활용해볼 수 있다. 설치 및 기타 설.. 2021. 9. 27.
Wrapper클래스 박싱과 언박싱 0. Intro 자바에서는 기본형 타입을 Wrapping한 Wrapper클래스를 제공한다. Wrapper클래스에 대해서 간단히 알아보고 Wrapper클래스의 문제점 Wrapper클래스의 성능을 조사한 글이다. 글의 아래 순서로 구성되어 있다. 1. Wrapper클래스 소개 2. Wrapper클래스 사용 주의사항 3. Wrapper클래스 성능 4. 정리 1. Wrapper클래스 소개 1.1 박싱과 언박싱 자바 기본형 타입을 참조형 타입으로 사용하기 위해 Wrapper 클래스를 제공해준다. jdk 1.5부터는 기본형을 참조형으로 자동으로 변환해주는 박싱, 참조형을 기본형으로 자동변환해주는 언박싱을 지원해준다. Integer n1 = 1; Integer n1 = new Integer(1); int n2 = n.. 2021. 9. 24.
RDBMS의 동시성 관리 0. 동시성 문제에 대해서 RDBMS의 테이블에 동시에 여러 커넥션이 같은 테이블의 row를 수정하면 데이터가 예상과는 다르게 변경되는 문제가 생긴다. 이를 해결하기위해 RDBMS에서는 Lock을 통해서 동시성을 제어한다. MySQL에서 제공하는 Lock의 종류를 알아보자. 스토리지 엔진으로MyISAM이나 InnoDB를 사용하는데 스토리지엔진에 따라서 지원하는 Lock이 다르다. Lock에 대해서 MyISAM Lock Table Lock Global Read Lock User Lock InnoDb Lock Record Lock Gap Lock 서비스 애플리케이션레벨에서 동시성 테스트 해보기 repeatable read transaction isolation level serializable transac.. 2021. 9. 16.