분류 전체보기
-
[스프링 인 액션] Chapter 10 - 리액터 개요 :: 리액터 시작하기개발서적읽기/Spring in Action 제 5판 2020. 10. 3. 22:20
리액티브 프로그래밍은 명령형 프로그래밍과 매우 다른 다른 방식으로 접근해야 한다. 즉, 일련의 작업 단계를 기술하는 것이 아니라 데이터가 전달될 파이프라인을 구성하는 것이다. 그리고 이 파이프라인을 통해 데이터가 전달되는 동안 어떤 형태로든 변경 또는 사용될 수 있다. 예를 들어, 사람의 이름을 가져와서 모두 대문자로 변경한 후 이것으로 인사말 메시지를 만들어 출력한다고 해보자. 아래는 명령형 프로그래밍 코드이다.String name = "name"; String capitalName = name.toUpperCase(); String greeting = "Hello, " + capitalName + "!"; System.out.println(greeting);이 경우느 각 줄의 코드가 같은 스레드에서 ..
-
[이펙티브 자바] item 88 - readObject 메서드는 방어적으로 작성하라개발서적읽기/Effective Java - temp 2020. 10. 3. 00:05
■깨지기 쉬운 직렬화에서의 불변식 item 50에서는 불변인 날짜 범위 클래스를 만드는 데 가변 Date 필드를 이용했다. 그래서 불변식을 지키고 불변을 유지하기 위해 생성자와 접근자에서 Date 객체를 방어적으로 복사하느라 코드가 상당히 길어졌다. 아래가 바로 그 클래스다.public final class Period { private final Date start; private final Date end; public Period(Date start, Date end) { this.start = new Date(start.getTime()); this.end = new Date(end.getTime()); if (this.start.compareTo(this.end) > 0) throw new Il..
-
[스프링 인 액션] Chapter 10 - 리액터 개요 :: 리액티브 프로그래밍 이해하기개발서적읽기/Spring in Action 제 5판 2020. 9. 27. 23:46
애플리케이션 코드를 개발할 때는 명령형(imperative)과 리액티브(reactive) 두 가지 형태로 코드를 작성할 수 있다. 명령형 : 순차적으로 연속되는 작업이며, 각 작업은 한 번에 하나씩 그리고 이전 작업 다음에 실행된다. 데이터는 모아서 처리되고 이전 작업이 데이터 처리를 끝낸 후에 다음 작업으로 넘어갈 수 있다. 리액티브 : 데이터 처리를 위해 일련의 작업들이 정의되지만, 이 작업들은 병렬로 실행된다. 그리고 각 작업은 부분 집합의 데이터를 처리할 수 있으며, 처리가 끝난 데이터를 다음 작업에 넘겨주고 다른 부분 집합의 데이터로 계속 작업할 수 있다. 리액터는 스프링 프로젝트의 일부분인 리액티브 프로그래밍 라이브러리다. 그리고 리액터는 스프링 5에서 리액티브 프로그래밍을 지원하는 데 필요한..
-
[스프링 인 액션] Chapter 9 - 스프링 통합하기 :: 스프링 통합의 컴포넌트 살펴보기개발서적읽기/Spring in Action 제 5판 2020. 9. 27. 23:45
통합 플로우는 하나 이상의 컴포넌트로 구성되며, 그 리스트는 아래와 같다. 채널(Channel) : 한 요소로부터 다른 요소로 메시지를 전달한다. 필터(Filter) : 조건에 맞는 메시지가 플로우를 통과하게 해준다. 변환기(Transformer) : 메시지 값을 변경하거나 메시지 페이로드의 타입을 다른 타입으로 변환한다. 라우터(Router) : 여러 채널 중 하나로 메시지를 전달하며, 대개 메시지 헤더를 기반으로 한다. 분배기(Spliter) : 들어오는 메시지를 두 개 이상의 메시지로 분할하며, 분할된 각 메시지는 다른 채널로 전송된다. 집적기(Aggregator) : 분배기와 상반된 것으로 별개의 채널로부터 전달되는 다수의 메시지를 하나의 메시지로 결합한다. 서비스 액티베이터(Service act..
-
[스프링 인 액션] Chapter 9 - 스프링 통합하기 :: 간단한 통합 플로우 선언하기개발서적읽기/Spring in Action 제 5판 2020. 9. 26. 20:19
많은 애플리케이션은 외부 시스템과 연결하여 작업을 수행한다. 외부 시스템에서 데이터를 읽거나 쓸 때, 애플리케이션에서 필요한 형태로 변경하기 위해 특별한 데이터 처리 플로우가 필요할 수 있다. 이번 장에서는 데이터 이동을 처리하는 통합 패턴을 스프링 통합(Spring Integration)을 통해 알아볼 것이다. 각 통합 패턴은 하나의 컴포넌트로 구현되며, 이것을 통해서 파이프라인으로 메시지가 데이터를 운반한다. 스프링 구성을 사용하면 데이터가 이동하는 파이프라인으로 컴포넌트들을 조립할 수 있다. 우선 스프링 통합 사용 시의 기능과 특성을 보여주는 간단한 통합 플로우를 정의해보자.애플리케이션은 통합 플로우를 통해서 외부 리소스나 애플리케이션 자체에 데이터를 수신 또는 전송할 수 있으며, 스프링 통합은 이..
-
[이펙티브 자바] item 74 - 메서드가 던지는 모든 예외를 문서화하라개발서적읽기/Effective Java - temp 2020. 9. 18. 02:04
■검사 예외 문서화의 중요성 검사 예외는 항상 따로따로 선언하고, 각 예외가 발생하는 상황을 자바독의 @throws 태그를 사용하여 정확히 문서화하자. Exception, Throwable같은 공통 상위 예외로 퉁치지는 말자. 왜냐하면 메서드 사용자에게 각 예외에 대처할 수 있는 힌트를 주지 못한다. 또한 같은 맥락에서 발생할 여지가 있는 다른 예외들까지 포함시켜버릴 수 있어 API 사용성을 크게 떨어뜨린다. main 메서드는 이 규칙에 유일한 예외이다. main은 오직 JVM만이 호출하므로 Exception을 던지도록 선언해도 괜찮다. ■비검사 예외 문서화의 중요성 자바 언어가 요구하는 것은 아니지만 비검사 예외도 문서화해두면 좋다. 비검사 예외는 일반적으로 프로그래밍 오류를 뜻하는데 (item 79)..
-
[스프링 인 액션] Chapter 8 - 비동기 메시지 전송하기 :: 카프카 사용하기개발서적읽기/Spring in Action 제 5판 2020. 9. 18. 01:11
아파치 카프카는 ActiveMQ, Artemis, RabbitMQ와 유사한 메시지 브로커다. 그러나 아파치 카프카만의 특징도 가지고 있다. 카프카는 높은 확작성을 제공하는 클러스터(cluster)로 실행되도록 설계되었다. 그리고 클러스터의 모든 카프카 인스턴스에 걸쳐 토픽을 파티션으로 분할하여 메시지를 관리한다. RabbitMQ가 거래소와 큐를 사용해서 메시지를 처리하는 반면, 카프카는 토픽만 사용한다. 카프카의 토픽은 클러스터의 모든 브로커에 걸쳐 복제된다. 클러스터의 각 노드(브로커)는 하나 이상의 토픽에 대한 리더(leader)로 동작하며 토픽 데이터를 관리하고 클러스터의 다른 노드로 데이터를 복제한다. 각 토픽은 여러 개의 파티션으로 분할될 수 있다. 이 경우 클러스터의 각 노드(브로커)는 한 토..