목록java (78)
초보개발자 긍.응.성
Spring으로 업무를 수행하지만, Java라는 언어에 대해 중간중간 구멍이 나있다고 느껴 이 책을 다시 보게 되었다. 이곳에 기록하는 것들은 정말 소소하지만 내 머릿속에 잘 들어오지 않았던 것들이거나, 잘 모르고 있어 유심히 보게 된 것들에 대한 것이다. JDK, JRE, JVM JDK : Java Development Kit (자바 개발 도구) JRE + 개발에 필요한 실행파일(jdk bin 디렉터리엔 javac.exe, java.exe, javap.exe 등의 실행파일이 존재한다) JRE : Java Runtime Environment (자바 실행 환경) JVM + 클래스 라이브러리 (Java API) JVM : Java Virtual Machine (자바 가상 머신) JVM의 메모리 구조 메서드 ..
현재 우리팀은 Java8을 사용중이다. 동료분이 JVM 버전을 11 업그레이드 하자는 제안이 있었고, 주요 변경 내용을 소개하는 중에 새로운 가비지 컬렉터를 지원한다는 내용이 있었다. Java11부터 experimental하게 ZGC를 사용가능하며 현재사용하는 G1GC보다 짧은 지연 시간을 갖도록 개선된 GC라고 들었다. GC에 대한 배경지식이 부족했던 터라 자료를 찾던 중 baeldung 아저씨의 블로그를 보게되었고, 이는 그 블로그의 내용의 정리한 글이다. JVM Garbage Collectors Garbage Collection(이하 GC)은 이름에서 알 수 있듯이 메모리의 garbage를 찾아 제거하는 역할을 한다. 실제 동작으로는 JVM 힙 메모리의 사용가능한 모든 Object를 트래킹하며 사용..
1.1 아카란 무엇인가? 아카는 액터 프로그래밍 모델, 실행 환경 그리고 확장 가능한 애플리케이션을 구축할 때 필요한 여러 지원 도구를 제공하는 툴킷. 1.2 액터: 간략한 정리 액터는 설정과 메시지 브로커(message vroker) 설치라는 부가 비용이 들지 않는 메시지(message queue)와 비슷하다. 액터는 프로그래밍 가능한 메시지 큐를 아주 작은 크기로 줄인 것이다. 각 액터는 메시지를 받기 전까지는 아무런 일도 수행하지 않는다. 액터가 받는 메시지는 생성된 다음에는 변경될 수 없다(불변 immutable) 액터는 한 번에 하나의 메시지를 받을 수 있으며, 메시지를 받을 때마다 어떤 동작을 수행한다. 액터가 수행하는 모든 것은 비동기적으로 실행된다. 1.3 확장성에 대한 두 가지 접근 방법..
리액터 프로젝트 필수 요소 목적 - 콜백 지옥, 깊게 중첩된 코드를 생략 가독성을 높이고 리액터 라이브러리에 의해 정의된 워크플로에 조합성(composability)를 추가 리액트 API 연산자로 실행 그래프를 제작 실제 구독을 만들기 전까지 아무 일도 발생하지 않으며 구독을 했을 때만 데이터 플로가 기동 비동기 요청의 결과를 효율적으로 처리가능 오류 처리 간단, 복원력 있는 코드 작성 가능 배압 제공 푸시 전용 : subscription.request(Long.MAX_VALUE) 풀 전용 : subscription.request(1) 풀-푸시 혼합 풀-푸시 모델 미 지원하는 이전 API 사용 시 예전 스타일의 배압 메커니즘 제공 리액터 추가 io.projectreactor reactor-core 3.2..
CompletionStage를 이용하는 자바 코어 라이브러리 RxJava와 같은 다양한 라이브러리 존재 코드 작성시 다양한 선택 가능 풀 방식과 푸시 방식 리액티브 초기 단계에서 모든 라이브러리의 데이터 흐름은 소스에서 구독자에서 푸시되는 방식이었다. 푸시 모델을 채택하는 가장 큰 이유는 요청하는 횟수를 최소화 하기 위해서이다. 반면 푸시 모델만 사용하는것은 기술적 한계가 있다. 메시지 기반 통신의 본질은 요청에 응답하는 것 프로듀서가 컨슈머의 처리 능력을 무시하면 전반적인 시스템 안정성에 영향을 미칠 수 있다 프로듀서 컨슈머 동작 케이스 1. 느린 프로듀서 빠른 컨슈머 동적으로 시스템의 처리량을 증가시키는 것은 불가능 (프로듀서가 따라와줘야함) 2. 빠른 프로듀서와 느린 컨슈머 프로듀서가 컨슈머가 처리..
관찰자(Observer) 패턴 Subject와 Observer 두 개의 인터페이스로 구성된다 Observer는 관찰자 이며, Subject는 주체이다. Observer는 Subject에 등록되며 Subject로 부터 알림을 수신한다. java.util 패키지에서 Observer, Observable 제공 JDK 1.0에 릴리즈, 제네릭이 없어 type safety 하지 못함 옵저버 패턴은 멀티스레드 환경에서 효율적이지 않다private final ExecutorService executorService = Executors.newCacheThreadPool(); public void notifyObservers(String event) { observers.forEach(observer -> { exec..