전체 글
-
재고차감 로직으로 알아보는 데이터베이스의 동시성 제어 방법카테고리 없음 2024. 12. 23. 18:57
특정 시간에 무료로 상품을 나눠주는 이벤트 상황에 상품의 재고관리 시스템을 설계한다고 가정하고 어떻게 동시성 문제 없이 재고수량을 관리할 수 있을까? 이벤트 상황이라면 동시에 많은 사용자가 짧은 시간동안에 상품구매 페이지에 접속하고 동시에 여러명이 구매를 시도할것이다. 이런 상황에서 낙관적 락을 사용하면 충돌이 매우 많이 발생하고 재시도가 빈번하게 일어나므로 성능이 더 나빠질 수 있다. 따라서 비관적 락 방식을 사용하는게 적절하다. (만약 이벤트 상황이 아니여서 충돌이 많이 발생하지 않는게 보장된다면 라면 낙관적 락을 사용하는게 상품 조회시 유리하므로 적절하다고 생각함) 재고차감 로직을 통해서 데이터베이스에서 동시성 제어를 하는 방법을 알아보자. 아래와 같은 테이블이 있다고 가정해보자. @Table(..
-
싱글톤 패턴의 동시성 이슈와 해결책Java 2024. 12. 22. 12:30
1. 싱글톤 패턴의 정의와 필요성 소프트웨어 개발에서 싱글톤 패턴은 객체를 하나만 생성하여 공유하는 설계 패턴으로, 주로 애플리케이션의 전역 상태를 관리하거나 고정된 리소스를 효율적으로 활용하기 위해 사용한다. 데이터베이스 연결 풀, 로그 관리, 설정 정보 등과 같이 애플리케이션 전역에서 단일 객체만 필요하거나 공유되어야 하는 경우에 적합하다. 하지만 싱글톤 패턴을 구현할 때에는 동시성 문제를 해결해야 합니다. 특히 멀티스레드 환경에서는 동일한 객체가 여러 번 생성되지 않도록 주의해야 하며, 객체 초기화 방식에 따라 성능과 메모리 점유 효율성이 달라질 수 있다. 싱글톤 패턴의 구현방식을 알아보고 java에서부터 kotlin까지 어떤 방식으로 싱글톤 패턴을 구현하는지 알아보자. 2. 싱글톤 패턴의..
-
쿠버네티스를 이루는 구성요소 - pod,service,replicationController카테고리 없음 2021. 9. 27. 20:54
2.1 도커를 사용한 컨테이너 이미지 생성,실행,공유 쿠버네티스에서 구동되는 애플리케이션은 컨테이너 이미지로 패키징 되어야 한다. 도커이미지를 실행하면 일어나는 과정은 아래와 같다. docker run busybox echo "Hello World" 도커는 로컬 머신에 busybox 이미지가 저장되어 있는지 확인한다. 로컬에 이미지가 저장되어 있지않으면 도커 레지스트리로부터 이미지를 Pull받는다. 도커가 격리된 컨테이너에서 echo "Hello World"를 실행한다. 2.2 쿠버네티스 클러스터 설치 쿠버네티스 클러스터를 구축하는것은 매우 힘든일이다. 따라서 많은 cloud에서는 쿠버네티스를 구축할 수 있게 지원해주고 있고 로컬환경에서 테스트할때는 miniKube를 활용해볼 수 있다. 설치 및 기타 설..
-
Wrapper클래스 박싱과 언박싱카테고리 없음 2021. 9. 24. 20:20
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..
-
RDBMS의 동시성 관리카테고리 없음 2021. 9. 16. 20:42
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..
-
functional Interface, default method 언제 사용하고 왜 등장했는가카테고리 없음 2021. 9. 7. 00:50
1. 자바의 함수에 대해서 2. functional Interface는 언제 사용하는거고 왜 등장 했을까? 3. default method는 언제사용하고 왜 등장했을까? 4.추상클래스,인터페이스 비교 1. 자바의 함수 먼저 일급시민(first class citizen)이라는 용어에 대해서 이해하고 넘어가면 좋은데 사실 정의를 읽어도 무슨말인지 이해가 가지 않는다. 하지만 일급시민의 조건은 아래와 같다고 한다. 변수에 담는것이 가능하다 인자로 전달이 가능하다 반환값으로 전달이 가능하다. 위 3가지 조건을 만족하는것이 자바에서는 객체이다. 하지만, 메서드 자체를 자바에서는 일급값으로 취급하지 않았기 때문에 변수로 담지못하고 인자로 전달하지 못하고 반환값으로 사용하지 못하는 문제가 있었다. 메서드가 일급시민이..
-
자바 객체 생성되는 과정에 대해서Java 2021. 9. 2. 23:20
1. KeyPoint 자바 객체가 생성될때 초기화 되는 순서 생성자가 필요한 이유 초기화 블록이 필요한 이유 2. 배경지식 자바 객체 생선 순서를 알아보기 전에 기본적으로 알아야 하는 내용을 간략하게 정리했다. 2.1 Static Blocks 클래스가 로딩되고 클래스 변수가 준비된 후 자동으로 실행되는 블록이다. 한 클래스 안에 여러 개의 static블록을 넣을 수 있고 위에서부터 아래로 순서대로 static block을 실행한다. public class ObjectTest { private final static String CONSTANT = "TEST"; private String instant; public ObjectTest() { System.out.println("No Argument Con..
-
Java 배열에 대해서Java 2021. 8. 27. 23:58
1.1 배열이란? 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것이다. 서로 다른 타입은 저장이 불가능하고 같은 타입만 저장할 수 있다. 1.2 배열의 선언과 생성 배열의 선언 원하는 타입의 변수를 선언하고 변수 또는 타입에 배열을 의미하는 대괄호를 붙인다. int [] scores; int scores[]; 배열의 생성 배열을 선언하고 선언한 변수에는 배열을 생성해야한다. new연산자를 이용해서 배열을 생성할 수 있다. int[] score; score = new int[5]; 아래 코드는 선언과 동시에 배열을 생성까지하는 코드이다. 위에서 작성한 코드는 선언과 생성을 따로하고 있다. 즉, 선언을하고 생성을 하지 않으면 메모리 공간만 확보한것이고 값을 저장하지는 못하는것이다. int[] score ..