17.3 리액티브 라이브러리 RxJava 사용하기 RxJava는 Flow.Publisher를 구현하는 두 클래스를 제공 io.reactive.Flowable: 역압력 기능을 제공 io.reactivex.Observable: 역압력 기능을 제공하지 않는 기존 클래스 단순한 프로그램, 마우스 움직임 같은 사용자 인터페이스에 적합 이벤트 스트림에는 역압력을 적용하기 어렵기 때문 (마우스 움직임을 느리게 하거나 멈출 수 없음) RxJava는 천 개 이하의 요소를 가진 스트림이나, 마우스 & 터치 이벤트 등 역압력을 적용하기 힘든 GUI 이벤트, 자주 발생하지 않는 종류의 이벤트에 역압력을 적용하지 말 것을 권장함 여기서는 Obsevable 인터페이스를 사용하는 방법을 설명함 모든 subscriber는 request(Long.MAX_VALUE) 메서드를 이용해서.. ch17.2.3 Flow 라이브러리 예제 Main.java package org.example; import java.util.concurrent.Flow.*; public class Main { public static void main(String[] args) { getCelsiusTemperatures("New York").subscribe(new TempSubscriber()); } private static Publisher getCelsiusTemperatures(String town){ return subscriber -> { TempProcessor processor = new TempProcessor(); processor.subscribe(subscriber); processor.onSubscribe(new TempSubsc.. Network ch2. Application Layer 1. Principles of network applications network app을 만드는 것은 네트워크를 사용해 통신하는 end system에서 동작하는 프로그램을 작성하는 것 network-core 장치들에 대한 sw를 작성할 필요 없음 Client-server architecture Server always-on host: 항상 네트워크에 연결되어 클라이언트의 요청을 처리함 permanent IP address data centers for scaling: 여러 대의 server 사용 Client 서버와 통신,다른 client와 직접적으로 통신하지 않음 간헐적으로 연결됨 dynamic IP address P2P architecture 임의의 end system과 직접 통신 모든 host는 s.. ch17. 리액티브 프로그래밍 리액티브 프로그래밍의 중요성 빅데이터: 기가 바이트의 데이터 → 페타 바이트 단위의 데이터 다양한 환경: 모바일 디바이스에서 부터 클라우드 기반 클러스터에 이르기까지 다양한 환경에 애플리케이션이 배포됨 사용자 패턴: 사용자는 1년 내내 항상 서비스를 이용할 수 있으며, 밀리초 단위의 응답시간을 기대함 리액티브 프로그래밍: 다양한 시스템과 소스에서 들어오는 데이터 항목 스트림을 비동기적으로 처리하고 합쳐서 해결함 17.1 리액티브 매니패스토 리액티브 애플리케이션과 시스템 개발의 핵심 원칙을 공식적으로 정의함 반응성(responsive): 빠르고 일정하고 예상가능한 반응 시간을 제공함 회복성(resilient): 장애가 발생해도 시스템은 반응해야 함 탄력성(elastic): 애플리케이션에 작업 부하가 심해지.. build.gradle와 build 과정 살펴보기 1. Gradle 역할 빌드 자동화 도구: 소스코드에서 실행 가능한 파일로 변환하는 과정을 자동화함 프로젝트를 빌드, 실행 가능한 JAR 파일을 생성, 필요한 의존성 라이브러리를 관리, 테스트를 실행, 코드 컴파일러를 설정하는 등 다양한 작업을 자동화할 수 있음 빌드 스크립트(build.gradle)를 통해 프로젝트르 구성 빌드 태스크 정의, 의존성 관리, 플러그인 설정, 환경 변수 설정 등을 구성 Groovy나 Kotlin 같은 JVM 기반 언어를 사용해서 작성함 예시) spring boot 프로젝트의 build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.0.5' id 'io.spring.dependency-managemen.. 네트워크 1. 네트워크의 기초 네트워크: node와 link가 서로 연결되어 있거나 연결되어 있지 않은 집합체 node: 서버, 라우터, 스위치 등의 네트워크 장치 link: 유무선 1.1 처리량과 지연시간 좋은 네트워크란? 많은 처리량을 처리할 수 있으며, 지연 시간이 짧고 장애 빈도가 적으며 좋은 보안을 갖춘 네트워크 처리량(throughput): 링크를 통해 전달되는 단위시간 당 데이터 양 단위: bps (bit per second) 트래픽, 대역폭, 네트워크 중간에 발생하는 에러, 장치의 하드웨어 스펙에 영향을 받음 대역폭: 주어진 시간 동안 네트워크 연결을 통해 흐를 수 있는 최대 비트 수 지연 시간(latency): 요청이 처리되는 시간, 어떤 메시지가 두 장치 사이를 왕복하는데 걸리는 시간을 말함 매.. ch16. CompletableFuture: 안정적 비동기 프로그래밍 1. Future의 단순 활용 Future 인터페이스 미래의 어느 시점에 결과를 얻을 수 있음 비동기 계산을 모델링 하는데 사용할 수 있고, 계산이 끝났을 때 결과에 접근할 수 있는 참조를 제공함 시간이 걸리는 작업을 Future 내부로 설정하면 Future에서 계산을 하는 동안 호출한 스레드에서는 다른 작업을 할 수 있음 Future를 사용하기 위해서는 시간이 오래 걸리는 작업을 Callable 객체 내부로 감싼 다음 ExecutorService에 제출해야 함 package org.example; import java.util.concurrent.*; public class ex16_1 { public static void main(String[] args) { ExecutorService es = E.. Docker(도커) 1. 사용 이유 리눅스 기반의 컨테이너 기술 개발 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며, 코드를 문제없이 실행할 수 있음 2. 작동 방식 도커는 '컨테이너'를 사용해 코드를 실행하는 표준 방식을 제공함. 컨테이너는 가상머신과 같이 서버 운영 체제를 가상화함. 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있음 도커와 가상 머신 차이 컨테이너 VM - Guest OS 위에 도커가 동작함 도커는 컨테이너를 위한 운영체제임. 컨테이너에 Guest OS를 따로 설치하지 않음. 어플리케이션을 구동하는데 필요한 모든 패키지만 있으면 컨테이너를 구동시킬 수 있음 - Host OS 위에 Guest OS 전체를 가상화함 간단.. 운영체제 운영체제: 사용자가 컴퓨터를 쉽게 다룰 수 있게 돕는 인터페이스 펌웨어: 운영체제와 유사하지만 소프트웨어를 추가로 설치할 수 없는 것 1. 운영체제와 컴퓨터 1.1 운영체제의 역할과 구조 운영체제의 역할 CPU 스케줄링과 프로세스 관리 메모리 관리 디스크 파일 관리 I/O 디바이스 관리 운영체제의 구조 * 커널: 운영체제의 핵심 부분, 시스템콜 인터페이스를 제공하며 보안, 메모리, 프로세스, 파일 시스템, I/O 디바이스, I/O 요청 관리 등 운영체제의 중추적인 역할을 함 * 드라이버: 하드웨어를 제어하기 위한 소프트웨어 * CUI: 그래픽이 아닌 명령어로 처리하는 인터페이스 시스템 콜 운영체제가 커널에 접근하기 위한 인터페이스 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출함 유저 프.. ch15. CompletableFuture와 리액티브 프로그래밍 컨셉의 기초 15.1 동시성을 구현하는 자바 지원의 진화 15.1.1 스레드와 높은 수준의 추상화 15.1.2 Executor와 스레드 풀 Java5 ExecutorService: task 제출과 실행을 분리할 수 있는 기능 제공 스레드의 문제 Java 스레드는 운영체제 스레드에 직접 접근함. 운영체제 스레드를 만들고 종료하려면 비싼 비용을 치러야 하며 숫자도 제한되어 있음. 주어진 프로그램에서 사용할 최적의 자바 스레드 개수는 사용할 수 있는 하드웨어 코어의 개수에 따라 달라짐 스레드 풀 그리고 스레드 풀이 더 좋은 이유 ExecutorService: task를 제출하고 나중에 결과를 수집할 수 있는 인터페이스를 제공함 장점: hw에 맞는 수의 task를 유지함과 동시에 많은 태스크를 스레드 풀에 오버헤드 없이 제.. 5. Aspect Oriented Programming with Spring 5.1 Introduction Aspect Oriented Programming (AOP)는 프로그램 구조에 대한 다른 관점을 제공함으로써 OOP를 보완함 OOP의 modularity 주요 단위: class AOP의 modularity 주요 단위: aspect aspect는 여러 타입과 객체에 걸친 트랜잭션 관리와 같은 문제를 모듈화하는 것을 가능하게 함 AOP는 Spring의 주요 요소 중 하나임. Spring IoC 컨테이너가 AOP에 의존성을 가지지 않지만, AOP는 괜찮은 middleware 솔루션을 제공하면서 Spring Ioc를 보완함 읽고있는 문서가 Spring 5.0.0.RELEASE 버전인데, 이 문서에서는 Spring 2.0 AOP에 대해서 다룬다고 함 AOP 기능 선언적인 enterp.. 1. The IoC container 1.1 Introduction to the Spring IoC container and beans Inversion of Control (IOC)는 Dependency Injection (DI)로 알려져있음. 1) IoC는 객체가 dependency를 정의하는 절차임 생성자의 인수, factory 메서드의 인수, 또는 객체가 생성된 후 set 메서드로 dependency를 정의할 수 있음 2) 정의한 후, 컨테이너는 bean을 만들 때 dependency를 주입함 bean이 의존성/인스턴스화를 직접 다루는 것이 아니라 외부에서 다루고 있음. 제어가 역전된 것이기 때문에 Inversion of Control이라고 부름 컨테이너가 의존성/인스턴스화를 다룰 때 클래스를 직접적으로 construct하거나, Se.. 이전 1 2 3 4 ··· 7 다음