일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Kotlin
- Semaphore
- Stress test
- 익명클래스
- cloud native
- 클라우드 네이티브 자바
- Microservice
- ansible
- 자바
- 쿠버네티스
- Algorithm
- ingress
- 코틀린
- spring microservice
- CRD
- 클라우드 네이티브
- MSA
- 헬름
- Spring
- nGrinder
- MySQL
- decorator 패턴
- kubernetes
- 마이크로서비스
- Adapter 패턴
- java
- 머신러닝
- 동기화
- cloud native java
- devops
- Today
- Total
목록분류 전체보기 (86)
카샤의 만개시기
백그라운드로 스레드가 돌아가고 있는 상황에서 해당 스레드가 종료 되기를 기다려야 하는 상황이 있을때 Thread 클래스의 join() 함수를 이용하면 됩니다. 그렇지만 하나가 아닌 여러 스레드들이 종료되기를 기다려야 하는 상황이 발생된다면 CountDownLatch를 고려할 수 있습니다. private static final int THREAD_CNT = 10; private CountDownLatch lacth = new CountDownLatch(THREAD_CNT); public class SleepThread implements Runnable { private int id = 0; private static Random random = new Random(System.currentTimeMill..
리소스에 접근할 수 있는 스레드의 수를 제한할 때 사용합니다. acquire() 메소드를 통하여 접근 권한을 퍼밋(Permit)받고, 남은 퍼밋이 없을 경우 퍼밋이 생기거나 인터럽트가 발생되거나 타임아웃이 걸리지 전까지 대기합니다. release() 메소드는 확보했던 퍼밋을 다시 세마포어에게 돌려주는 메소드입니다. 세마포어에 대해서 자세히 알고 싶다면 다음 글을 참고해주세요 세마포어(Semaphore)와 뮤텍스(Mutex) class ShareResource { private final Semaphore semaphore; private final int MAX_PERMIT_CNT; public ShareResource(int cnt) { this.semaphore = new Semaphore(cnt);..
싱글 스레드와 달리 멀티 스레드 프로그래밍 방식에서는 고려해야 할 것이 많다. 그 원인은 경쟁 상태(race condition)와 변수의 가시성(visibility)에서 온다. 경쟁 상태 여러 스레드 같은 시점 변수를 읽는 상태 변수의 가시성 변수들이 사용될 수 있는 영역의 범위로써 변수의 값이 CPU의 캐시 메모리에 저장되어 있는지, 메인메모리에 저장되어 있는지 알 수 없다는 데에서 온다. 동일한 변수를 동시에 접근 했을때 어떤 스레드는 캐시 메모리에 접근 할수도 있고 어떤 스레드는 메인 메모리에 접근할수도 있기 때문이다. Atomic java.concurrent.atomic 패키지를 보면 원자적 연산을 수행 할 수 있는 클래스들이 있다. Atomic 클래스들은 CAS(compare-and-swap) ..
공유 되어 있는 자원에 프로세스 혹은 스레드가 접근하고자 할 때 한번에 하나의 프로세스가 접근 할 수 있도록 고안 된 것이 세마포어입니다. 세마포어 공유된 자원의 데이터를 경쟁적으로 사용하는 프로세스들의 행동을 조정하거나 동기화 하는 기술입니다. 예를 들어 어떤 운영체제의 리소스를 동시에 4개의 프로세스만 사용 할 수 있다고 할 때, 이 리소스를 가지고 경쟁하는 여러 프로세스간 우선순위 등을 고려하여 행동을 조정하는 기술입니다. 뮤텍스 공유된 자원의 데이터를 여러 쓰레드가 접근 하는 것을 막는 기술입니다. 공유 리소스에 대하여 locking과 unlocking을 통하여 임계 영역을 가진 쓰레드들의 Running time이 서로 겹치지 않게 각각 단독으로 실행되게 하는 기술입니다. 임계 영역 (Critic..
MySQL의 HA(High Availabilty)를 위한 Replicaiton 기법은 다음과 같습니다. Master-Slave Replication Group Replication Galera Cluster 이 기법들에 대해서 알아보도록 하겠습니다. Master-Slave Replication 하나의 Master DB와 다수의 Slave DB들을 통해 Replication을 수행하는 방식인데 Master는 Read/Write Mode로 동작하고 Slave들은 Read Mode로 동작합니다. 이 말 뜻은 DB 변경 Query를 수신 받는 DB는 반드시 Master DB에게 변경 요청을 전달하고 Master DB는 변경 내용을 Slave DB에게 전달하여 복제를 수행한다는 말입니다. 그리고 Read 요청은 ..
OSGI (Open Service Gateway initiative) OSGI의 핵심 개념은 프로그램을 만들 때 하나의 큰 프로그램으로 만들지 않고 여러 가지의 작은 프로그램을 만든 후 이것을 하나로 묶어 내는 것입니다. OOP가 클래스를 모듈화 시키는 것이라고 했을때, OSGI는 아예 프로그램 자체를 모듈화(OSGI에서는 이것을 번들(bundle)이라고 부릅니다.) 하고, OSGI Framework에서 이 모듈들을 각각 등록시키고 요청에 따라 실행을 시키게 됩니다. OSGI의 장점은 다른 모듈의 코드를 전혀 신경쓰지 않아도 된다는 것이며, Input과 Output의 형태만 유지시켜주면 코드 변경으로 인한 오류가 일어날 걱정을 하지 않아도 된다는 것 입니다. 또한 가장 큰 특징으로 OSGI의 life c..
인터페이스는 직접 객체화할 수 없기 때문에 구현 클래스를 이용하는데 일회성으로 사용하는 구현 클래스를 계속 선언하는 것은 비효율적이기 때문에 익명 클래스나 람다를 이용하여 구현 클래스를 선언합니다. 익명 클래스 익명 클래스는 코드가 너무 길어 함수형 프로그래밍 방식에 적합하지 않습니다. 익명 클래스에 대해 알고 싶다면 다음 글을 참조해주세요. 중첩클래스 (내부클래스, 정적 중첩클래스, 지역클래스, 익명클래스) 함수 객체 (Function Object) 특정 동작을 목적으로 추상 메서드를 하나만 담은 인터페이스나 추상 클래스를 함수 객체라합니다. 람다 JDK 1.8 이후로는 함수 객체의 인스턴스를 람다식으로 만들어 사용할수 있습니다. Collections.sort(list, new Comparator() ..
중첩 클래스는 하기와 같은 구조를 가지고 있습니다. Nested Classes Static Nested Classes (정적 중첩 클래스) Inner Classes Inner Classes (내부 클래스) Method Local Inner Classes (지역 클래스) Anonymous Inner Classes (익명 클래스) 중첩 클래스를 사용하는 이유 한 곳에서만 사용되는 클래스를 논리적으로 그룹화하는 방법 캡슐화 증가 좋은 가독성과 유지보수성 Static Nested Classes (정적 중첩 클래스) 내부클래스는 밖에 있는 클래스의 자원을 마음대로 사용할 수 있지만 중첩클래스는 static 키워드가 안붙었다면 사용할 수 없습니다. Outer 클래스가 인스턴스화 되어있지 않아도 객체를 생성이 가능합..