SlideShare a Scribd company logo
1 of 17
Download to read offline
함수형 사고
7장 실용적 사고
실용적 사고
함수형 사고가 적용된 실례
❏ 자바 8
❏ 함수형 구조
❏ 웹 프레임워크
자바 8
filter
Predicate<String> p = (name) -> name.length() > 1;
names.stream()
.filter(p)
map
capitalize() 메서드를 컬렉션의 각 요소에 적용한다.
collect
reduce()보다 StringBuilder와 같은 가변구조에 collect가
효율적
ArrayList나 StringBuilder를 위해, 매번 새로운 결과를 내지 않고
기존의 요소를 업데이트하는, 가변 리듀스 작업을 하는 메서드가
포함되어 reduce로도 가능하겠지만 collect가 효율적
자바 8 - 함수형 인터페이스
함수형 인터페이스는 람다 블록이 자연스럽게 녹아들 수 있게 해준다.
● 하나의 함수형 인터페이스는 하나의 SAM을 포함하며, 여러 개의 디폴트
메서드도 함께 포함할 수 있다.
● SAM(Single Abstract Method) interfaces : Runnable이나 Callable같이 메서드를
하나만 가지는 인터페이스
new Thread (() -> System.out.println("Inside thread")).start();
자바 8 - 함수형 인터페이스
람다 블록을 감싸는
Comparator
인스턴스를 생성하고,
역 비교자는 reversed()
디폴트 메서드를
호출하면 만들 수 있음
자바 8 - 0ptional
자바 8에서 min()과 같은 내장 메서드는 값 대신 0ptional을 리턴
0ptional은 오류로서의 null과 리턴 값으로서의 null을 혼용하는 것을 방지
자바 8 - 스트림
자바 8의 스트림은 많은 함수형 기능을 가능하게 한다.
❏ 종결 작업을 통해 입력에서 종착점까지 흐르는 파이프라인처럼 사용
❏ 스트림은 상태를 유지하지 않는 함수형으로 설계
❏ 스트림 작업은 최대한 게으르게 한다.
❏ 무한한 스트림은 가능하다.
❏ Iterator인터페이스처럼 스트림은 사용과 동시에 소멸되고, 재사용 전에 다
시 생성해야 한 다.
함수형 인프라스트럭처
소프트웨어 아키텍처나 데이터를 다루는 근본적인 방법을
함수형으로 변경
함수형 인프라스트럭처 - 아키텍처
❏ 함수형 아키텍처의 중심에 불변성이 있고 최대한 사용해야 함
❏ 변이가 많을수록 오류 가능성이 높고 테스트가 많이 필요하다.
❏ 불변 클래스는 생성 시에만 변이가 있기 때문에 테스트가 간단
❏ 불변 객체는 쓰레드에 안전하기 때문에 동기화의 문제가 없음
함수형 인프라스트럭처 - 아키텍처
불변형 클래스 만들기
❏ 모든 필드를 final로 선언하라.
❏ 클래스를 final로 선언하여 오버라이드 방지해야 함
❏ 인수가 없는 생성자를 제공하지 말라.
❏ 생성자외에는 변이 메서드를 제공하지 말라
❏ 적어도 하나의 생성자를 제공하라.
함수형 인프라스트럭처 - CQRS
❏ CQRS는 기존의 인프라 스트럭처를 활용하여 함수형개념을 구현
❏ 쿼리와 명령부분을 분리함으로써 아키텍처의 일부를 단순화함
❏ 불변성을 가정할수 있는 쿼리쪽의 논리는 훨씬 단순
CQRS를 사용한다면 트랜잭션 모델보다는
분산처리를 위해 최종 일관성 모델로 전환 필요
함수형 인프라스트럭처 - CQRS
❏ 분산 컴퓨팅 모델은 모델을 업데이트하는 데 latency를 희생하고,
최종적으로 모델의 일관성을 갖추면 된다.
❏ 트랜잭션 모델이 ACID(Atomic, Consistent, Isolated, Durable)에 의존한다.
❏ 최종 일관성 모델은 BASE(Basically Available, Soft state, Eventual consistency)를
중요하게 여긴다.
❏ CQRS는 모든 상태변화를 이벤트 스트림으로 보존해야 하는 이벤트 소싱과
같은 아키텍처 패턴에 아주 적합
함수형 인프라스트럭처 - 웹 프레임워크
웹의 요청(Request)을 응답(Response)으로 바꾸는 일련의 변형으로 볼수 있음
❏ 경로 설정 프레임웍 - 경로 설정을 애플리케이션 기능으로 부터 분리 시킴
❏ 함수를 목적지로 사용 - 웹상의 요청을 받아서 응답을 리턴하는 함수
❏ DSL(Domain Specific Language) - 좁은 문제 도메인에 적용되는 표현으로
제한된 프로그래밍 언어로 정의
❏ 빌드도구와 밀접한 연동 - IDE뿐 아니라 커맨드라인 빌드 도구와 밀접하게
연결
함수형 인프라스트럭처 - 데이터베이스
관계형 데이터베이스는 업데이트를 할때마다 예전값은 없어지고 새 값으로
대체된다.
-> 데이터 증가를 억제하고 저장장소 활용을 극대화하는 아키텍처 제한이 존재
함수형 인프라스트럭처 - 데이터베이스
데이토믹(http://www.datomic.com/)
❏ 기존 관계형 DB의 이러한 아키텍처 제한을 뒤집고 함수형 개념을 적용한
NoSQL 데이터베이스
❏ 모든 facts에 시간을 붙여서 저장하는 불변형 데이터 베이스
❏ 데이터 대신에 값을 저장함으로써 저장소를 효율적으로 사용
❏ 애플리케이션에 보이는 값을 업데이트하려면 다른값을 가리키게 하면 된다.
❏ 시간이라는 개념을 정보에 덧대어 facts이 항상 적절한 문맥에 연결되게 함
http://docs.datomic.com/architecture.html
함수형 인프라스트럭처 - 데이토믹
❏ 모든 스키마와 데이터의 변화를 영원히 기록하기
❏ 읽기와 쓰기의 분리
❏ 데이토믹의 아키텍처는 CQRS 아키텍처
❏ 이벤트 주도 아키텍처를 위한 불변성과 타임스탬프
❏ 이벤트 주도 아키텍처는 애플리케이션 상태 변화를 이벤트 스트림으로 저장한다. 모든
정보를 타임스탬프와 함께 저장하는 데이터베이스
함수형 인프라스트럭처
❏ 함수형 프로그래밍을 향한 패러다임의 깊은 변화를 이용하여 도구와
프레임워크를 만들기

More Related Content

What's hot

Ots2014 arcus-collection-open source
Ots2014 arcus-collection-open sourceOts2014 arcus-collection-open source
Ots2014 arcus-collection-open sourceNAVER D2
 
learning spark - Chatper8. Tuning and Debugging
learning spark - Chatper8. Tuning and Debugginglearning spark - Chatper8. Tuning and Debugging
learning spark - Chatper8. Tuning and DebuggingMungyu Choi
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리YoungHeon (Roy) Kim
 
닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기흥배 최
 
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912Yooseok Choi
 
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttpNAVER D2
 
Memcached의 확장성 개선
Memcached의 확장성 개선Memcached의 확장성 개선
Memcached의 확장성 개선NAVER D2
 
[252] 증분 처리 플랫폼 cana 개발기
[252] 증분 처리 플랫폼 cana 개발기[252] 증분 처리 플랫폼 cana 개발기
[252] 증분 처리 플랫폼 cana 개발기NAVER D2
 
Java naming strategy (자바 명명 전략)
Java naming strategy (자바 명명 전략)Java naming strategy (자바 명명 전략)
Java naming strategy (자바 명명 전략)Sunghyouk Bae
 
처음 접하는 Oozie Workflow, Coordinator
처음 접하는 Oozie Workflow, Coordinator처음 접하는 Oozie Workflow, Coordinator
처음 접하는 Oozie Workflow, CoordinatorKim Log
 
ARCUS offline meeting 2015. 05. 20 1회
ARCUS offline meeting 2015. 05. 20 1회ARCUS offline meeting 2015. 05. 20 1회
ARCUS offline meeting 2015. 05. 20 1회JaM2in
 
Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugbeom kyun choi
 
분산저장시스템 개발에 대한 12가지 이야기
분산저장시스템 개발에 대한 12가지 이야기분산저장시스템 개발에 대한 12가지 이야기
분산저장시스템 개발에 대한 12가지 이야기NAVER D2
 
AWS없이 만든 AWS와 유사한 데이터 파이프라인
AWS없이 만든  AWS와 유사한 데이터 파이프라인AWS없이 만든  AWS와 유사한 데이터 파이프라인
AWS없이 만든 AWS와 유사한 데이터 파이프라인Kim Hyuk
 
[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDW[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDWPgDay.Seoul
 
From MSSQL to MySQL
From MSSQL to MySQLFrom MSSQL to MySQL
From MSSQL to MySQLI Goo Lee
 
서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...
서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...
서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...Jemin Huh
 
Apache spark 소개 및 실습
Apache spark 소개 및 실습Apache spark 소개 및 실습
Apache spark 소개 및 실습동현 강
 

What's hot (20)

Ots2014 arcus-collection-open source
Ots2014 arcus-collection-open sourceOts2014 arcus-collection-open source
Ots2014 arcus-collection-open source
 
learning spark - Chatper8. Tuning and Debugging
learning spark - Chatper8. Tuning and Debugginglearning spark - Chatper8. Tuning and Debugging
learning spark - Chatper8. Tuning and Debugging
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리
 
닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기
 
Arcus
ArcusArcus
Arcus
 
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
 
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp
 
Memcached의 확장성 개선
Memcached의 확장성 개선Memcached의 확장성 개선
Memcached의 확장성 개선
 
[252] 증분 처리 플랫폼 cana 개발기
[252] 증분 처리 플랫폼 cana 개발기[252] 증분 처리 플랫폼 cana 개발기
[252] 증분 처리 플랫폼 cana 개발기
 
Spark sql
Spark sqlSpark sql
Spark sql
 
Java naming strategy (자바 명명 전략)
Java naming strategy (자바 명명 전략)Java naming strategy (자바 명명 전략)
Java naming strategy (자바 명명 전략)
 
처음 접하는 Oozie Workflow, Coordinator
처음 접하는 Oozie Workflow, Coordinator처음 접하는 Oozie Workflow, Coordinator
처음 접하는 Oozie Workflow, Coordinator
 
ARCUS offline meeting 2015. 05. 20 1회
ARCUS offline meeting 2015. 05. 20 1회ARCUS offline meeting 2015. 05. 20 1회
ARCUS offline meeting 2015. 05. 20 1회
 
Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksug
 
분산저장시스템 개발에 대한 12가지 이야기
분산저장시스템 개발에 대한 12가지 이야기분산저장시스템 개발에 대한 12가지 이야기
분산저장시스템 개발에 대한 12가지 이야기
 
AWS없이 만든 AWS와 유사한 데이터 파이프라인
AWS없이 만든  AWS와 유사한 데이터 파이프라인AWS없이 만든  AWS와 유사한 데이터 파이프라인
AWS없이 만든 AWS와 유사한 데이터 파이프라인
 
[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDW[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDW
 
From MSSQL to MySQL
From MSSQL to MySQLFrom MSSQL to MySQL
From MSSQL to MySQL
 
서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...
서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...
서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...
 
Apache spark 소개 및 실습
Apache spark 소개 및 실습Apache spark 소개 및 실습
Apache spark 소개 및 실습
 

Similar to 함수형사고 실용적사고

테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)SangIn Choung
 
Java collections framework
Java collections frameworkJava collections framework
Java collections framework경주 전
 
Scalable system design patterns
Scalable system design patternsScalable system design patterns
Scalable system design patternsSteve Min
 
07.실행환경 교육교재(표준프레임워크 세부 적용기준)
07.실행환경 교육교재(표준프레임워크 세부 적용기준)07.실행환경 교육교재(표준프레임워크 세부 적용기준)
07.실행환경 교육교재(표준프레임워크 세부 적용기준)Hankyo
 
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by NetflixJi-Woong Choi
 
파이썬 데이터베이스 연결 1탄
파이썬 데이터베이스 연결 1탄파이썬 데이터베이스 연결 1탄
파이썬 데이터베이스 연결 1탄SeongHyun Ahn
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)Hankyo
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)DK Lee
 
AWS 9월 웨비나 | Amazon Aurora Deep Dive
AWS 9월 웨비나 | Amazon Aurora Deep DiveAWS 9월 웨비나 | Amazon Aurora Deep Dive
AWS 9월 웨비나 | Amazon Aurora Deep DiveAmazon Web Services Korea
 
MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바NeoClova
 
[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿AnselmKim
 
Apache kafka 확장과 응용
Apache kafka 확장과 응용Apache kafka 확장과 응용
Apache kafka 확장과 응용JANGWONSEO4
 
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017Amazon Web Services Korea
 
HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3J B
 
Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2plusperson
 
Maxscale 소개 1.1.1
Maxscale 소개 1.1.1Maxscale 소개 1.1.1
Maxscale 소개 1.1.1NeoClova
 
Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Gruter
 
Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Larva - 멀티클라우드 인프라 및 응용을 위한 네트워킹 (Networking f...
Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Larva - 멀티클라우드 인프라 및 응용을 위한 네트워킹 (Networking f...Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Larva - 멀티클라우드 인프라 및 응용을 위한 네트워킹 (Networking f...
Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Larva - 멀티클라우드 인프라 및 응용을 위한 네트워킹 (Networking f...Cloud-Barista Community
 
Cloud datacenter network architecture (2014)
Cloud datacenter network architecture (2014)Cloud datacenter network architecture (2014)
Cloud datacenter network architecture (2014)Gasida Seo
 

Similar to 함수형사고 실용적사고 (20)

테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
 
Java collections framework
Java collections frameworkJava collections framework
Java collections framework
 
자바 8 학습
자바 8 학습자바 8 학습
자바 8 학습
 
Scalable system design patterns
Scalable system design patternsScalable system design patterns
Scalable system design patterns
 
07.실행환경 교육교재(표준프레임워크 세부 적용기준)
07.실행환경 교육교재(표준프레임워크 세부 적용기준)07.실행환경 교육교재(표준프레임워크 세부 적용기준)
07.실행환경 교육교재(표준프레임워크 세부 적용기준)
 
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
 
파이썬 데이터베이스 연결 1탄
파이썬 데이터베이스 연결 1탄파이썬 데이터베이스 연결 1탄
파이썬 데이터베이스 연결 1탄
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
 
AWS 9월 웨비나 | Amazon Aurora Deep Dive
AWS 9월 웨비나 | Amazon Aurora Deep DiveAWS 9월 웨비나 | Amazon Aurora Deep Dive
AWS 9월 웨비나 | Amazon Aurora Deep Dive
 
MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바
 
[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿
 
Apache kafka 확장과 응용
Apache kafka 확장과 응용Apache kafka 확장과 응용
Apache kafka 확장과 응용
 
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
 
HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3
 
Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2
 
Maxscale 소개 1.1.1
Maxscale 소개 1.1.1Maxscale 소개 1.1.1
Maxscale 소개 1.1.1
 
Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014
 
Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Larva - 멀티클라우드 인프라 및 응용을 위한 네트워킹 (Networking f...
Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Larva - 멀티클라우드 인프라 및 응용을 위한 네트워킹 (Networking f...Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Larva - 멀티클라우드 인프라 및 응용을 위한 네트워킹 (Networking f...
Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Larva - 멀티클라우드 인프라 및 응용을 위한 네트워킹 (Networking f...
 
Cloud datacenter network architecture (2014)
Cloud datacenter network architecture (2014)Cloud datacenter network architecture (2014)
Cloud datacenter network architecture (2014)
 

More from Sunggon Song

K8s in action chap15
K8s in action chap15K8s in action chap15
K8s in action chap15Sunggon Song
 
랜덤Walks, 몬테카를로 시뮬레이션
랜덤Walks, 몬테카를로 시뮬레이션랜덤Walks, 몬테카를로 시뮬레이션
랜덤Walks, 몬테카를로 시뮬레이션Sunggon Song
 
Function approximation as supervised learning
Function approximation as supervised learningFunction approximation as supervised learning
Function approximation as supervised learningSunggon Song
 
서포트 벡터머신
서포트 벡터머신서포트 벡터머신
서포트 벡터머신Sunggon Song
 
대칭가중치와 심층신뢰네트워크
대칭가중치와 심층신뢰네트워크대칭가중치와 심층신뢰네트워크
대칭가중치와 심층신뢰네트워크Sunggon Song
 
데이터처리와 통계 기본 머신러닝
데이터처리와 통계 기본 머신러닝데이터처리와 통계 기본 머신러닝
데이터처리와 통계 기본 머신러닝Sunggon Song
 
합성곱 신경망
합성곱 신경망합성곱 신경망
합성곱 신경망Sunggon Song
 
밑바닥부터 시작하는딥러닝 8장
밑바닥부터 시작하는딥러닝 8장밑바닥부터 시작하는딥러닝 8장
밑바닥부터 시작하는딥러닝 8장Sunggon Song
 
함수형사고 3장 양도하라
함수형사고 3장 양도하라함수형사고 3장 양도하라
함수형사고 3장 양도하라Sunggon Song
 
7가지 동시성 모델-2장
7가지 동시성 모델-2장7가지 동시성 모델-2장
7가지 동시성 모델-2장Sunggon Song
 
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장Sunggon Song
 

More from Sunggon Song (13)

K8s in action chap15
K8s in action chap15K8s in action chap15
K8s in action chap15
 
랜덤Walks, 몬테카를로 시뮬레이션
랜덤Walks, 몬테카를로 시뮬레이션랜덤Walks, 몬테카를로 시뮬레이션
랜덤Walks, 몬테카를로 시뮬레이션
 
Function approximation as supervised learning
Function approximation as supervised learningFunction approximation as supervised learning
Function approximation as supervised learning
 
서포트 벡터머신
서포트 벡터머신서포트 벡터머신
서포트 벡터머신
 
대칭가중치와 심층신뢰네트워크
대칭가중치와 심층신뢰네트워크대칭가중치와 심층신뢰네트워크
대칭가중치와 심층신뢰네트워크
 
데이터처리와 통계 기본 머신러닝
데이터처리와 통계 기본 머신러닝데이터처리와 통계 기본 머신러닝
데이터처리와 통계 기본 머신러닝
 
합성곱 신경망
합성곱 신경망합성곱 신경망
합성곱 신경망
 
밑바닥부터 시작하는딥러닝 8장
밑바닥부터 시작하는딥러닝 8장밑바닥부터 시작하는딥러닝 8장
밑바닥부터 시작하는딥러닝 8장
 
함수형사고 3장 양도하라
함수형사고 3장 양도하라함수형사고 3장 양도하라
함수형사고 3장 양도하라
 
7가지 동시성 모델-2장
7가지 동시성 모델-2장7가지 동시성 모델-2장
7가지 동시성 모델-2장
 
Ddd start 10장
Ddd start 10장Ddd start 10장
Ddd start 10장
 
DDD start 1장
DDD start 1장DDD start 1장
DDD start 1장
 
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
 

함수형사고 실용적사고

  • 2. 실용적 사고 함수형 사고가 적용된 실례 ❏ 자바 8 ❏ 함수형 구조 ❏ 웹 프레임워크
  • 3. 자바 8 filter Predicate<String> p = (name) -> name.length() > 1; names.stream() .filter(p) map capitalize() 메서드를 컬렉션의 각 요소에 적용한다. collect reduce()보다 StringBuilder와 같은 가변구조에 collect가 효율적 ArrayList나 StringBuilder를 위해, 매번 새로운 결과를 내지 않고 기존의 요소를 업데이트하는, 가변 리듀스 작업을 하는 메서드가 포함되어 reduce로도 가능하겠지만 collect가 효율적
  • 4. 자바 8 - 함수형 인터페이스 함수형 인터페이스는 람다 블록이 자연스럽게 녹아들 수 있게 해준다. ● 하나의 함수형 인터페이스는 하나의 SAM을 포함하며, 여러 개의 디폴트 메서드도 함께 포함할 수 있다. ● SAM(Single Abstract Method) interfaces : Runnable이나 Callable같이 메서드를 하나만 가지는 인터페이스 new Thread (() -> System.out.println("Inside thread")).start();
  • 5. 자바 8 - 함수형 인터페이스 람다 블록을 감싸는 Comparator 인스턴스를 생성하고, 역 비교자는 reversed() 디폴트 메서드를 호출하면 만들 수 있음
  • 6. 자바 8 - 0ptional 자바 8에서 min()과 같은 내장 메서드는 값 대신 0ptional을 리턴 0ptional은 오류로서의 null과 리턴 값으로서의 null을 혼용하는 것을 방지
  • 7. 자바 8 - 스트림 자바 8의 스트림은 많은 함수형 기능을 가능하게 한다. ❏ 종결 작업을 통해 입력에서 종착점까지 흐르는 파이프라인처럼 사용 ❏ 스트림은 상태를 유지하지 않는 함수형으로 설계 ❏ 스트림 작업은 최대한 게으르게 한다. ❏ 무한한 스트림은 가능하다. ❏ Iterator인터페이스처럼 스트림은 사용과 동시에 소멸되고, 재사용 전에 다 시 생성해야 한 다.
  • 8. 함수형 인프라스트럭처 소프트웨어 아키텍처나 데이터를 다루는 근본적인 방법을 함수형으로 변경
  • 9. 함수형 인프라스트럭처 - 아키텍처 ❏ 함수형 아키텍처의 중심에 불변성이 있고 최대한 사용해야 함 ❏ 변이가 많을수록 오류 가능성이 높고 테스트가 많이 필요하다. ❏ 불변 클래스는 생성 시에만 변이가 있기 때문에 테스트가 간단 ❏ 불변 객체는 쓰레드에 안전하기 때문에 동기화의 문제가 없음
  • 10. 함수형 인프라스트럭처 - 아키텍처 불변형 클래스 만들기 ❏ 모든 필드를 final로 선언하라. ❏ 클래스를 final로 선언하여 오버라이드 방지해야 함 ❏ 인수가 없는 생성자를 제공하지 말라. ❏ 생성자외에는 변이 메서드를 제공하지 말라 ❏ 적어도 하나의 생성자를 제공하라.
  • 11. 함수형 인프라스트럭처 - CQRS ❏ CQRS는 기존의 인프라 스트럭처를 활용하여 함수형개념을 구현 ❏ 쿼리와 명령부분을 분리함으로써 아키텍처의 일부를 단순화함 ❏ 불변성을 가정할수 있는 쿼리쪽의 논리는 훨씬 단순 CQRS를 사용한다면 트랜잭션 모델보다는 분산처리를 위해 최종 일관성 모델로 전환 필요
  • 12. 함수형 인프라스트럭처 - CQRS ❏ 분산 컴퓨팅 모델은 모델을 업데이트하는 데 latency를 희생하고, 최종적으로 모델의 일관성을 갖추면 된다. ❏ 트랜잭션 모델이 ACID(Atomic, Consistent, Isolated, Durable)에 의존한다. ❏ 최종 일관성 모델은 BASE(Basically Available, Soft state, Eventual consistency)를 중요하게 여긴다. ❏ CQRS는 모든 상태변화를 이벤트 스트림으로 보존해야 하는 이벤트 소싱과 같은 아키텍처 패턴에 아주 적합
  • 13. 함수형 인프라스트럭처 - 웹 프레임워크 웹의 요청(Request)을 응답(Response)으로 바꾸는 일련의 변형으로 볼수 있음 ❏ 경로 설정 프레임웍 - 경로 설정을 애플리케이션 기능으로 부터 분리 시킴 ❏ 함수를 목적지로 사용 - 웹상의 요청을 받아서 응답을 리턴하는 함수 ❏ DSL(Domain Specific Language) - 좁은 문제 도메인에 적용되는 표현으로 제한된 프로그래밍 언어로 정의 ❏ 빌드도구와 밀접한 연동 - IDE뿐 아니라 커맨드라인 빌드 도구와 밀접하게 연결
  • 14. 함수형 인프라스트럭처 - 데이터베이스 관계형 데이터베이스는 업데이트를 할때마다 예전값은 없어지고 새 값으로 대체된다. -> 데이터 증가를 억제하고 저장장소 활용을 극대화하는 아키텍처 제한이 존재
  • 15. 함수형 인프라스트럭처 - 데이터베이스 데이토믹(http://www.datomic.com/) ❏ 기존 관계형 DB의 이러한 아키텍처 제한을 뒤집고 함수형 개념을 적용한 NoSQL 데이터베이스 ❏ 모든 facts에 시간을 붙여서 저장하는 불변형 데이터 베이스 ❏ 데이터 대신에 값을 저장함으로써 저장소를 효율적으로 사용 ❏ 애플리케이션에 보이는 값을 업데이트하려면 다른값을 가리키게 하면 된다. ❏ 시간이라는 개념을 정보에 덧대어 facts이 항상 적절한 문맥에 연결되게 함 http://docs.datomic.com/architecture.html
  • 16. 함수형 인프라스트럭처 - 데이토믹 ❏ 모든 스키마와 데이터의 변화를 영원히 기록하기 ❏ 읽기와 쓰기의 분리 ❏ 데이토믹의 아키텍처는 CQRS 아키텍처 ❏ 이벤트 주도 아키텍처를 위한 불변성과 타임스탬프 ❏ 이벤트 주도 아키텍처는 애플리케이션 상태 변화를 이벤트 스트림으로 저장한다. 모든 정보를 타임스탬프와 함께 저장하는 데이터베이스
  • 17. 함수형 인프라스트럭처 ❏ 함수형 프로그래밍을 향한 패러다임의 깊은 변화를 이용하여 도구와 프레임워크를 만들기