일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘
- Transaction Pattern
- spring batch
- thread
- spring cloud
- Parallel Old GC
- Action Pattern
- MSA
- saga pattern
- The law of Demeter
- 체인 패턴
- 스프링 배치
- 디자인패턴
- 스레드
- 사가 패턴
- Spring Cloud Netfilx Eureka
- zipkin
- 멀티스레드
- Java
- Resilinece4j
- 배치
- TypeScript
- Spring Boot Actuator
- 생산자 소비자 패턴
- Serial GC
- 타입스크립트
- JPA
- 키클락
- 디자인 패턴
- java 정렬
- Today
- Total
목록분류 전체보기 (84)
PSD( Private-Self-Development )
책임 연쇄 패턴? 요청을 핸들러들의 체인에 따라 전달하고 처리하는 행동 디자인 패턴이다. ex ) 로그인 요청이 들어왔을 때, 순차적인 A 검증, B 검증, C 검증 중 B 검증에 실패한 경우 C 검증은 진행하지 않아야 한다. 이때, 책임 연쇄 패턴을 적용하여 같은 Interface 를 구현한 각각의 핸들러들의 체인으로 구성하면 유지보수성이 향상된다. 책임 연쇄 패턴의 구성 요소 Handler 모든 ConcreteHanlers 에 적용되는 공통 인터페이스 보통은 요청 처리용 단일 메서드만 포함되지만 때로는 체인의 다음 핸들러를 세팅하기 위한 메서드를 구현하는 경우도 있다. BaseHandler 선택적 클래스 ConcreteHanlers 에 공통적으로 적용되는 코드를 구현한다. 다음 핸들러에 대한 참조를 ..
가비지 컬렉션 이란? 러닝타임에서 유효하지 않은 메모리 즉 사용하지 않는 메모리인 가비지 가 발생하고, java 와 kotlin 은 jvm 이 가비지 컬렉터를 이용해 메모리를 정리 해 준다. Old 와 Young JVM 의 Heap 메모리 영역은 Young, Old 두 가지 영역으로 설계되었다. Young 새롭게 생성된 객체가 할당되는 지역 1개의 Eden 영역 과 2개의 Survivor 영역으로 나뉜다. Eden 영역: 새로 생성된 객체가 할당되는 영역 Survivor 영역: 최소 1번의 GC 이상 살아남은 객체가 존재하는 영역 대부분의 객체가 Young 영역에 생성되었다가 사라진다. Young 영역에 대한 가비지 컬렉션 을 Minor GC라고 부른다. Old Young 영역에서 살아남은 객체가 복사..
Future 의 단점 및 한계 결과를 얻으려면 블로킹 방식으로 대기해야 한다 외부에서 완료 시킬 수 없다 여러 Future를 조합할 수 없다. 여러 작업을 조합하거나 예외처리 할 수 없다. 이와 같은 Future 의 단점을 보완 하기 위해 JAVA 8 에 추가된 CompletableFuture 을 알아보자 CompletableFuture Future 를 기반으로 외부에서 완료시킬 수 있도록 변경된 클래스 작업들을 중첩시키거나 콜백 함수 추가 가능하다. 비동기 작업 실행 runAsync 반환값이 없는 경우 비동기로 작업 실행 콜 supplyAsync 반환값이 있는 경우 비동기로 작업 실행 콜 작업 콜백 thenApply 반환 값을 받아서 다른 값을 반환함 함수형 인터페이스 Function을 파라미터로 받음..
Thread와 Runnable의 단점 및 한계 지나치게 저수준의 API(스레드의 생성)에 의존함 값의 반환이 불가능 매번 스레드 생성과 종료하는 오버헤드가 발생 스레드들의 관리가 어려움 이와 같은 Thread와 Runnable의 한계점 극복을 위해 JAVA 5 이후 버전부터 Callable, Future, Executors, Executor, ExecutorService, ScheduledExecutorService을 지원하게 되었다. 무엇인지 어떤 단점을 어떻게 개선하였는지 알아보자. Callable, Future 값의 반환이 불가능 단점을 극복하기 위해 JAVA 5에 추가된 제네릭을 사용해 실행 결과 값을 반환받을 수 있도록 하는 인터페이스 Callable 인터페이스 제네릭을 사용해 실행 결과 값을 ..
Thread와 Runnable 은 자바 초기(JAVA 5 이전)부터 멀티스레드를 위해 제공되던 기술이다. Thread 스레드 생성을 위해 Java에서 미리 구현해 둔 클래스 기본 메서드를 제공한다. run 스레드 실행 sleep 스레드 멈추기 자원 할당을 제거하지는 않고, 제어건만 넘겨주므로 데드락 발생 가능성 생김 interrupt interruptedException 발생 시킴 interrupt가 발생한 스레드는 예외를 catch 하여 다른 작업을 진행 가능 join 다른 스레드의 작업이 끝날 때까지 기다리게 함 스레드 간 순서 제어에 사용 Thread 장단점 장점 기본 메서드를 제공하기 때문에 이를 오버라이딩 하여 스레드를 상세하게 제어할 수 있다. 단점 기본 메서드를 포함하고 있기에 Runnab..
방문자 패턴? 공통된 객체의 데이터 구조와 처리 알고리즘을 분리하는 패턴이다. 예를 들어 a,b,c 객체에 동일한 데이터 처리 알고리즘을 적용해야 하는데 개방/폐쇄 원칙을 지키기 위해 기존 객체에 알고리즘 로직을 중복으로 추가하는 것 대신, 방문자 패턴을 적용하면 된다. 방문자 패턴의 구조 Element : 요소는 방문자 를 수락하는 인터페이스 이다. ConcreteElement : 구상 요소는 요소에서 선언한 수락 메서드를 구현한 구현체 이다. 호출을 적절한 방문자 메서드로 리다이렉트 한다. Visitor : 방문자는 구상요소들을 인수로 사용 할 수 있는 방문자 메서드들의 집합을 선언한다. ConcreteVisitor : 비지터 인터페이스의 구현체 각 구상 요소 클래스들에 맞춤으로 제작된 방문자 메서드..
명령 패턴? 행동의 호출을 객체로 캡슐화하여 실행하는 행동 패턴이다. Action Pattern 이나 Transaction Pattern 으로 도 불린다. 명령 패턴의 특징 매개변수 동작을 객체화하여 매개변수 형태로 전달한다. 전달 받은 객체를 바로 실행하는 것이 아니라 명령 객체로 프로퍼티에 저장한 후, 임의의 시점에서 일괄 실행한다. 시점 제어 작업의 요청과 처리를 분리하고 요청하는 작업들을 객체로 캡슐화한다. 이러한 객체의 실제 동작과 호출 실행 부분을 분리하면 동작의 실행 시점을 제어 할 수 있다. 동작 객체를 저장해놓고 필요 시점에 별도로 실행하는 식( Java Transaction 의 동작 방식을 생각하면 된다. ) 복구 동작 취소 처리를 할 수 있다. 저장 명령 실행 중 오류가 생기는 경우 ..
플라이웨이트 패턴? 각 객체를 그때 그때 생성하는 것이 아닌 하나의 객체를 공유 사용하여 자원 소모를 줄이는 패턴이다. 말 그대로 가벼운 무게 즉 자원 소모가 적다는 뜻 여기서 플라이웨이트 패턴으로 공유되는 객체는 "본질적 상태"를 가진 객체여야 하고 이를 "본질적 공유" 라 한다. 본질적 상태? 부가적 상태? 본질적 상태란 어떠한 변경도 없이 객체를 있는 그대의 상태 즉 불변성을 만족하는 상태 부가적 상태란 반대로 상태값에 따라 객체가 달라지는 것 가변성 플라이웨이트 패턴 장점 자원 소모를 줄일 수 있다. 플라이웨이트 패턴 단점 코드가 복잡해진다. 플라이웨이트 패턴의 구현 public interface SharedObject { void print(); } public class SharedObject..