[도서리뷰]스파크를 활용한 실시간 처리(Stream Processing with Apache Spark)

스파크를 활용한 실시간 처리

오늘 리뷰할 도서는 스파크를 활용한 실시간 처리(Stream Processing with Apache Spark)입니다. 이 리뷰는 한빛 미디어로부터 도서를 제공받아 독서 후 작성되었음을 알려드립니다.

들어가며

웹개발자들 중에 실시간 처리가 필요 없는 개발자는 없을것이다. 비록 스파크를 직접 사용해본 적은 없더라도 서비스를(혹은 플랫폼)을 함께 만드는 다른 팀에서는 실시간 처리를 위해서 스파크를 사용하고 있을 가능성이크다(필자의 경우가 그랬다.) 우리 서비스에서 스파크가 실시간 처리를 담당해준다는 사실도 알고있었고, 여러 컨퍼런스에서 스파크를 이용한 실시간 처리에 관한 세션도 들어본적이 있지만, 공부를 하지않았다. 매번 해야한다는 생각만하고 당장 처리해야할 일이 너무 많아서 하지않았던거같다. 하지만 좋은 기회에 한빛미디어가 도서를 제공해주었고 덕분에 미루어둔 공부를 할 수 있게되었다.

먼저 목차부터 살펴보도록하자.

더보기

Part 1 아파치 스파크를 사용한 스트림 처리의 기본


CHAPTER 1 스트림 처리 소개

    1.1 스트림 처리란
    1.2 스트림 처리 예제
    1.3 데이터 처리의 확장
    1.4 분산 스트림 처리
    1.5 아파치 스파크 소개
    1.6 다음엔 무엇을 배울까

CHAPTER 2 스트림 처리 모델

    2.1 소스와 싱크
    2.2 서로 정의된 불변의 스트림
    2.3 변환과 집계
    2.4 윈도우 집계
    2.5 비상태 및 상태 기반 처리
    2.6 상태 기반 스트림
    2.7 예제: 스칼라에서 로컬 상태 기반 연산
    2.8 비상태 또는 상태 기반 스트리밍
    2.9 시간의 영향
    2.10 요약

CHAPTER 3 스트리밍 아키텍처

    3.1 데이터 플랫폼의 구성 요소
    3.2 아키텍처
    3.3 스트리밍 애플리케이션에서 배치 처리 구성 요소의 사용
    3.4 참조 스트리밍 아키텍처
    3.5 스트리밍과 배치 알고리즘
    3.6 요약

CHAPTER 4 스트림 처리 엔진으로서의 아파치 스파크

    4.1 두 API 이야기
    4.2 스파크의 메모리 사용
    4.3 지연 시간에 대한 이해
    4.4 처리량 지향 처리
    4.5 스파크의 폴리글랏 API
    4.6 데이터 분석의 빠른 구현
    4.7 스파크에 대해 더 알아보기
    4.8 요약

CHAPTER 5 스파크의 분산 처리 모델

    5.1 클러스터 매니저를 활용한 아파치 스파크 실행
    5.2 스파크 자체 클러스터 매니저
    5.3 분산 시스템에서의 복원력과 내결함성 이해
    5.4 데이터 전송 의미론
    5.5 마이크로배칭과 한 번에 한 요소
    5.6 마이크로배치와 한 번에 한 레코드 처리 방식을 더욱 가깝게 만들기
    5.7 동적 배치 간격
    5.8 구조적 스트리밍 처리 모델

CHAPTER 6 스파크의 복원력 모델

    6.1 스파크의 탄력적인 분산 데이터셋
    6.2 스파크 컴포넌트
    6.3 스파크의 내결함성 보장
    6.4 요약


Part 2 구조적 스트리밍


CHAPTER 7 구조적 스트리밍 소개

    7.1 구조적 스트리밍의 첫걸음
    7.2 배치 분석
    7.3 스트리밍 분석
    7.4 요약

CHAPTER 8 구조적 스트리밍 프로그래밍 모델

    8.1 스파크 초기화
    8.2 소스: 스트리밍 데이터 수집
    8.3 스트리밍 데이터 변환
    8.4 싱크: 결과 데이터 출력
    8.5 요약

CHAPTER 9 구조적 스트리밍 작동

    9.1 스트리밍 소스 소비하기
    9.2 애플리케이션 로직
    9.3 스트리밍 싱크에 쓰기
    9.4 요약

CHAPTER 10 구조적 스트리밍 소스

    10.1 소스의 이해
    10.2 사용 가능한 소스
    10.3 파일 소스
    10.4 카프카 소스
    10.5 소켓 소스
    10.6 레이트 소스

CHAPTER 11 구조적 스트리밍 싱크

    11.1 싱크의 이해
    11.2 사용 가능한 싱크
    11.3 파일 싱크
    11.4 카프카 싱크
    11.5 메모리 싱크
    11.6 콘솔 싱크
    11.7 foreach 싱크

CHAPTER 12 이벤트 시간 기반 스트림 처리

    12.1 구조적 스트리밍에서의 이벤트 시간에 대한 이해
    12.2 이벤트 시간의 사용
    12.3 처리 시간
    12.4 워터마크
    12.5 시간 기반 윈도우 집계
    12.6 레코드 중복 제거
    12.7 요약

CHAPTER 13 고급 상태 기반 작업

    13.1 예제: 차량 유지 보수 관리
    13.2 상태 작동을 통한 그룹의 이해
    13.3 MapGroupsWithState의 사용
    13.4 FlatMapGroupsWithState 사용
    13.5 요약

CHAPTER 14 구조적 스트리밍 애플리케이션 모니터링

    14.1 스파크 메트릭 하위시스템
    14.2 StreamingQuery 인스턴스
    14.3 StreamingQueryListener 인터페이스

CHAPTER 15 실험 영역: 연속형 처리와 머신러닝

    15.1 연속형 처리
    15.2 머신러닝


Part 3 스파크 스트리밍


CHAPTER 16 스파크 스트리밍 소개

    16.1 DStream 추상화
    16.2 스파크 스트리밍 애플리케이션의 구조
    16.3 요약

CHAPTER 17 스파크 스트리밍 프로그래밍 모델

    17.1 DStream의 기본 추상화로서의 RDD
    17.2 DStream 변환의 이해
    17.3 요소 중심의 DStream 변환
    17.4 RDD 중심의 DStream 변환
    17.5 계산 변환
    17.6 구조 변경 변환
    17.7 요약

CHAPTER 18 스파크 스트리밍 실행 모델

    18.1 대량 동기화 아키텍처
    18.2 리시버 모델
    18.3 리시버가 없는 모델 또는 직접 모델
    18.4 요약

CHAPTER 19 스파크 스트리밍 소스

    19.1 소스의 유형
    19.2 일반적으로 사용되는 소스
    19.3 파일 소스
    19.4 큐 소스
    19.5 소켓 소스
    19.6 카프카 소스
    19.7 더 많은 소스를 찾을 수 있는 곳

CHAPTER 20 스파크 스트리밍 싱크

    20.1 출력 연산
    20.2 내장형 출력 연산
    20.3 프로그래밍 가능한 싱크로서 foreachRDD 사용하기
    20.4 서드파티 출력 연산

CHAPTER 21 시간 기반 스트림 처리

    21.1 윈도우 집계
    21.2 텀블링 윈도우
    21.3 슬라이딩 윈도우
    21.4 윈도우 사용과 더 긴 배치 간격 사용
    21.5 윈도우 기반 감소
    21.6 가역 윈도우 집계
    21.7 슬라이싱 스트림
    21.8 요약

CHAPTER 22 임의 상태 기반 스트리밍 연산

    22.1 스트림 규모의 상태 기반
    22.2 updateStateByKey
    22.3 updateStateByKey의 한계
    22.4 mapwithState를 사용한 상태 기반 연산 소개
    22.5 mapWithState 사용하기
    22.6 mapWithState를 사용한 이벤트 시간 스트림 계산

CHAPTER 23 스파크 SQL로 작업하기

    23.1 스파크 SQL
    23.2 스파크 스트리밍에서 스파크 SQL 함수에 접근하기
    23.3 유휴 데이터 처리
    23.4 조인 최적화
    23.5 스트리밍 애플리케이션에서 참조 데이터셋 업데이트하기
    23.6 요약

CHAPTER 24 체크포인팅

    24.1 체크포인트 사용법의 이해
    24.2 DStream 체크포인팅
    24.3 체크포인트에서 복구
    24.4 체크포인팅 비용
    24.5 체크포인트 튜닝

CHAPTER 25 스파크 스트리밍 모니터링

    25.1 스트리밍 UI
    25.2 스트리밍 UI를 이용하여 잡 성능 이해하기
    25.3 REST API 모니터링
    25.4 지표 하위시스템
    25.5 내부 이벤트 버스
    25.6 요약

CHAPTER 26 성능 튜닝

    26.1 스파크 스트리밍의 성능 밸런스
    26.2 잡의 성능에 영향을 미치는 외부 요소
    26.3 성능을 향상시킬 수 있는 방법
    26.4 배치 간격 조정하기
    26.5 고정 속도 스로틀링을 통한 데이터 수신 제한
    26.6 백프레셔
    26.7 동적 스로틀링
    26.8 캐싱
    26.9 추측적 실행


Part 4 고급 스파크 스트리밍 기술

CHAPTER 27 스트리밍 근사 및 샘플링 알고리즘

    27.1 정확성, 실시간 그리고 빅데이터
    27.2 정확성, 실시간 그리고 빅데이터 삼각형
    27.3 근사 알고리즘
    27.4 해싱과 스케칭: 소개
    27.5 고유 요소 계산: HyperLogLog
    27.6 카운팅 요소 빈도: 최소 스케치 카운트
    27.7 순위와 분위수: T-다이제스트
    27.8 요소 수 줄이기: 샘플링

CHAPTER 28 실시간 머신러닝

    28.1 나이브 베이즈를 이용한 스트리밍 분류
    28.2 의사 결정 트리 소개
    28.3 Hoeffding 트리
    28.4 온라인 K-평균을 사용한 스트리밍 클러스터링


Part 5 아파치 스파크를 넘어


CHAPTER 29 기타 분산 실시간 스트림 처리 시스템

    29.1 아파치 스톰
    29.2 아파치 플링크
    29.3 카프카 스트림
    29.4 클라우드에서

CHAPTER 30 미리 살펴보기

    30.1 연결 상태 유지
    30.2 밋업에 참석하기
    30.3 아파치 스파크 프로젝트에 기여하기

목차에 나와있다시피 기초부터 시작하여 사례, 적용 법까지 다양한 내용을 다루고있다.
실시간처리, 스트리밍, 스파크 이런 키워드들에 대해 설명하라고하면 막연한 설명밖에 못하는분들이 보기 좋은책. 이 책은 스파크를 활용한 실시간 처리를 설명하기에 앞서 실시간 처리를 논할때 사용되는 용어 및 개념들에대해 설명하는것부터 시작한다. 즉, 별다른 선행 지식이 필요 없다는 이야기이다. 덕분에 필자도 수월하게 책의 내용을 이해할 수 있었다.

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

반응형

모든 내용을 번역하기는 좀 시간이 부족해서 어노테이션 설명의 첫문단만 번역함.

원문.

docs.spring.io/spring-framework/docs/current/reference/html/testing.html#integration-testing

 

Testing

The classes in this example show the use of named hierarchy levels in order to merge the configuration for specific levels in a context hierarchy. BaseTests defines two levels in the hierarchy, parent and child. ExtendedTests extends BaseTests and instruct

docs.spring.io

 

3.4.1. Spring Testing Annotations

The Spring Framework provides the following set of Spring-specific annotations that you can use in your unit and integration tests in conjunction with the TestContext framework. See the corresponding javadoc for further information, including default attribute values, attribute aliases, and other details.

스프링 프레임워크는 다음와 같은 스프링 특화 어노테이션을 제공한다. 이 어노테이션들은 유닛테스트 혹은 통합테스트를 할때 테스트 프레임워크(TestContext framework)와의 연결을 위해서 사용된다. 디폴트값, 속성, 등 더많은 정보를 위해서는 대응되는 javadoc을 보도록 하라.

 

Spring’s testing annotations include the following:

스프링의 테스팅 어노테이션은 아래를 포함한다.

 

@BootstrapWith

@BootstrapWith is a class-level annotation that you can use to configure how the Spring TestContext Framework is bootstrapped. Specifically, you can use @BootstrapWith to specify a custom TestContextBootstrapper. See the section on bootstrapping the TestContext framework for further details.

@BootstrapWith는 클래스 레벨 어노테이션이다. 어떻게 스프링 테스트 프레이워크가 부트스트랩 되는지를 정의한다. 특히, @BootstrapWith를 사용하면 커스텀 테스트 컨텍스트 부트스트랩퍼를 지정할 수 있다. 더 많은 정보를 위해서 bootstrapping the TestContext framework  를 참조하도록 하라.

 

@ContextConfiguration

@ContextConfiguration defines class-level metadata that is used to determine how to load and configure an ApplicationContext for integration tests. Specifically, @ContextConfiguration declares the application context resource locations or the component classes used to load the context.

@ContextConfiguration은 클래스 레벨 메타데이터를 정의한다. 메타데이터는 통합 테스트를 위한 어플리케이션 컨텍스트를 어떻게 구성 하고, 로드 하는지를 정의한다. 특히, @ContextConfiguration은 어플리케이션 컨텍스트 리소스의 위치(location) 혹은 컨텍스트를 로드할때 사용되는 클래스의 컴포넌트를 선언한다.

 

@WebAppConfiguration

@WebAppConfiguration is a class-level annotation that you can use to declare that the ApplicationContext loaded for an integration test should be a WebApplicationContext. The mere presence of @WebAppConfiguration on a test class ensures that a WebApplicationContext is loaded for the test, using the default value of "file:src/main/webapp" for the path to the root of the web application (that is, the resource base path). The resource base path is used behind the scenes to create a MockServletContext, which serves as the ServletContext for the test’s WebApplicationContext.

@WebAppConfiguration은 클래스 레벨 어노테이션이다. @WebAppConfiguration은 통합 테스트를 위한 어플리케이션 컨텍스트가 WebApplicationContext여야 하는 경우 사용된다. @WebAppConfiguration가 사용되는 유일한 이유는 테스트를 할때WebApplicationContext가 로드되었다는것을 보장해주고, 웹 어플리케이션의 루트 패스인 "file:src/main/webapp"를 디폴트 값으로 사용하는것을 보장하는 것이다. 리소스의 베이스 패스는 Mock서블렛 컨텍스트를 생성하기위해서 사용되며 Mock서블렛 컨텍스트는 WebApplicationContext의 테스트에 사용되는 서블렛 컨텍스트 역할을 수행한다.

 

@ContextHierarchy

@ContextHierarchy is a class-level annotation that is used to define a hierarchy of ApplicationContext instances for integration tests. @ContextHierarchy should be declared with a list of one or more @ContextConfiguration instances, each of which defines a level in the context hierarchy. 

@ContextHierachy는 클래스레벨 어노테이션이다. @ContextHierarchy는 통합 테스트시 어플리케이션 컨텍스트의 인스턴스의 계층을 정의하기위해 사용된다. @ContextHierachy는 하나 이상의 @ContextConfiguration인스턴스와 함께 정의 되어야한다. 이때 사용되는 각 @ContextConfiguration가 컨텍스트 계층 레벨을 정의한다. 

 

@ActiveProfiles

@ActiveProfiles is a class-level annotation that is used to declare which bean definition profiles should be active when loading an ApplicationContext for an integration test.

@ActiveProfiles는 클래스 레벨 어노테이션이다. @ActiveProfiles는 통합 테스트시 어플리케이션 컨텍스를 로딩할때 어떤 빈 정의 프로파일이 활성화 되어야하는지를 정의한다. 

 

@TestPropertySource

@TestPropertySource is a class-level annotation that you can use to configure the locations of properties files and inlined properties to be added to the set of PropertySources in the Environment for an ApplicationContext loaded for an integration test.

 

 

 

반응형

[도서리뷰] 처음 배우는 리액트 네이티브

처음배우는 리액트 네이티브

안녕하세요 앵글로퍼입니다. 아주 오랫만에 도서리뷰를 합니다. 오늘 리뷰할 도서는 처음배우는 리액트 네이티브 라는 도서입니다. 약 2주전 한빛미디어로부터 책을 받았고, 약 1주일에 걸처서 독서를 완료한 후 리뷰를 합니다. :)

TLDR;

처음배우는 리액트 네이티브 라는 책 제목에 걸맞게 리액트 네이티브를 하나도 모르는 개발자가 보기에 좋은 책입니다. 물론 개발에 대해서 아무것도 모르는 사람이 보기에 적절한 책은아닙니다. 기본적인 자바스크립트 지식은 반드시 필요합니다. 없어도 상관없지만 있으면 더 좋을만한 배경지식으로는 웹서비스 혹은 클라이언트 - 서버 프로그래밍에 대한 지식이 있다면 더 좋을거같습니다. 하나이상의 프로젝트 경험이 있다면 책에 내용을 쉽게 이해할 수 있을것입니다.
저같은 경우는 얼마전부터 토이프로젝트로 서비스를 만들 생각으로 리액트를 공부하고있었고, 어플리케이션도 만들 생각으로 리액트 네이티브와 플러터 사이에서 고민을 하고있었는데 한빛미디어가 좋은 책을 보내주셔서 많은 도움이 되었습니다. 저처럼 리액트로 예제 프로잭트정도만 실행해본 사람이라면 이책을 통해서 리액트 자체에 대한 이해도 깊어지게 될 것입니다. 저처럼 크로스플랫폼 어플리케이션을 만들어보고싶은 웹개발자에게 매우 좋은 책입니다. 일반적으로 튜토리얼 문서나 인터넷에 있는 강좌 등에서는 잘 다루지 않아서 오히려 고급 기술보다 정보를 찾기 어려운 매우 기초적인 부분들부터 시작하기때문에 반나절 정도 카페에 앉아서 한번 읽어보시면 큰 도움이 될 것이라는 생각이 듭니다.

본문

먼저 목차부터 살펴보기로합니다.

목차(클릭하여 펼치기)

1장. 리액트 네이티브란?

1.1 리액트 네이티브의 장점과 단점

1.2 리액트 네이티브의 동작 방식

1.3 마치며

- 리액트를 공부한 후 시작해야 하나요?

*2장. 리액트 네이티브 시작하기 *

2.1 개발 환경 준비하기

2.2 리액트 네이티브 프로젝트 만들기

2.3 마치며

- 리액트 네이티브 멀티 플랫폼 개발

3장. 컴포넌트

3.1 JSX

3.2 컴포넌트

3.3 props와 state

3.4 이벤트

3.5 마치며

- 타입 확인

4장. 스타일링

4.1 스타일링

4.2 리액트 네이티브 스타일

4.3 스타일드 컴포넌트

4.4 마치며

- Prettier

5장. 할 일 관리 애플리케이션

5.1 프로젝트 준비하기

5.2 타이틀 만들기

5.3 Input 컴포넌트 만들기

5.4 할 일 목록 만들기

5.5 기능 구현하기

5.6 부가 기능

5.7 마치며

- 디자인 도구

6장. Hooks

6.1 useState

6.2 useEffect

6.3 useRef

6.4 useMemo

6.5 커스텀 Hooks 만들기

6.6 마치며

- 클래스형 컴포넌트를 공부해야 하나요?

*7장. Context API *

7.1 전역 상태 관리

7.2 Context API

7.3 useContext

7.4 마치며

- 커뮤니티

8장. 내비게이션

8.1 리액트 내비게이션

8.2 스택 내비게이션

8.3 탭 내비게이션

8.4 마치며

- 나의 첫 번째 리액트 네이티브 프로젝트

9장. 채팅 애플리케이션

9.1 프로젝트 준비

9.2 파이어베이스

9.3 앱 아이콘과 로딩 화면

9.4 인증 화면

9.5 메인 화면

9.6 마치며

- 애플 개발자 계정 생성

10장. 배포하기

10.1 프로젝트 빌드

10.2 iOS 배포

10.3 안드로이드 배포

10.4 버전 업그레이드

10.5 마치며

- 이 책 이후에

기본적인 설치 및 개발환경 구성부터 어플리케이션의 배포까지를 다루고있다. 저자는 집필중 프로그램의 버전 업때문에 추가되거나 변경된 기능까지 노트를 통해서 알려주고있기때문에 최신번전과 약간 다른부분도 최대한 커버해주려고 노력하고있는점이 인상적이다. 앞서 언급한것처럼 핵심이되는 기능이나 이해하기 어려운 기능보다 아무것도아닌 가장 기초적인 기능에대한 자료를 찾기가 어려움 경우가 많은데, 이 책의 경우는 아주 기초적인 부분들부터 짚어주는점이 특히 마음에 들었다.
기본적인 사용방법부터 화면을 구성하는방법으로 시작해서 할일관리 앱으로 작은 앱을 하나 만들어보고 firebase를 활용한 채팅앱을 만드는 과정에서 아마도 이 책을 선택한 사람들이 당장 필요로하는 기능을 구현할 수 있는 방법은 모두 설명해주고 있다는 생각이든다(나의 경우는 그랬다.) 초보자를 위한 책이기 때문에 기초부터 시작하여 작은 어플리케이션 2개를 만들면서 막연하기만 했던 앱 개발에대한 자신감을 심어주고, 본인의 구상을 구체화 할 수 있는 방법을 알려준다.

결론

크로스플랫폼 어플리케이션 개발에 관심이 있는 개발자라면 리액트 네이티브를 처음 시작하기 매우 좋은 책이다.

반응형

+ Recent posts