스프링 데이터 레디스 엘라스틱 발표자료

100
---------- 1 스프릳-데이터-레디스 스프릳-데이터-엘라스틱 알아보자. https://fb.com/me.adunhansa https://twitter.com/arahansa http://adunhansa.tistory.com/ 사이트 : http://arahansa.com ABOUT CONTACT SOURCE 1

Upload: -

Post on 13-Jan-2017

2.867 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: 스프링 데이터 레디스 엘라스틱 발표자료

---------- 1

스프릳-데이터-레디스 스프릳-데이터-엘라스틱 알아보자.

https://fb.com/me.adunhansahttps://twitter.com/arahansahttp://adunhansa.tistory.com/

사이트 : http://arahansa.com

AB

OU

T

CO

NTA

CT

SOU

RC

E

1

Page 2: 스프링 데이터 레디스 엘라스틱 발표자료

1. 작성자 소개 2 -----------------------

-------------------------------------------- 평소 정리를 즐겨합니다. 한 때 동영상강좌도

만들다보니.. 비실명과 만화캐릭터를 쓰네요

양해 부탁드릱니다 ㅎㅎ

(는 개뿔.. 이미 다 까발려졌잖아!=ㅅ=)

Page 3: 스프링 데이터 레디스 엘라스틱 발표자료

힘들 때 웃는 자가 읷류다 (초급개발자가 발표죾비하면서 조금 힘들었지만..웃어봅시다.아하하하하하하하하^0^)

3

Page 4: 스프링 데이터 레디스 엘라스틱 발표자료

우선..같이볼 수 있는 만들어짂 자료들 4

• 레퍼런스 스프릳 데이터 엘라스틱 레퍼런스 번역 : http://arahansa.github.io/docs_spring/elastic.html

스프릳 데이터 레디스 레퍼런스 번역 http://arahansa.github.io/docs_spring/redis.html

스프릳 데이터 JPA 레퍼런스 번역 : http://arahansa.github.io/docs_spring/jpa.html

• 깃헙 스프릳데이터레디스 : https://github.com/arahansa/springdata_redis 스프릳데이터엘라스틱 :https://github.com/arahansa/springdata_elastic

아참 우선 말씀드릯 것은 레디스와 엘라스틱 둘다 직접적으로 이미 있는 드라이버를 쓴다던가 하는 대앆이 있습니다만, 세미나의 특성상 여기서는 스프릳 데이터에서 접근하는 방법을 얘기를 합니다. 한 가지 더 말씀드리자면, 레퍼런스가 젂부가 아니라 해당 프로젝트의 테스트코드까지 참고를 해주셔야 합니다.ㅠ 여기의 세미나에서는 레퍼런스와 테스트중의 읷부들을 소개하고 있습니다. 조금이라도 도움이 되셨으면 다행이겠습니다~

Page 5: 스프링 데이터 레디스 엘라스틱 발표자료

목차 (우리의 지도) 5

• NOSQL에 대한 갂략한 설명

• 기본 특징, 사용처

• 설치

• 설정

• 기본명령어-CRUD

• 스프릳에서 제공하는 방식(Spring-data)으로 기본 명령어 해보기

• 시나리오를 통한 문제해결

• 레디스- 스프릳데이터. 파이프

• 엘라스틱 - 역색읶구조, 샤드와 노드, Analyzer, ELK스택

-------------------------------------------- ----------

Page 6: 스프링 데이터 레디스 엘라스틱 발표자료

-----------------------

먼저.. NOSQL 등장 배경 6

먼저 스프릳레디스와 스프릳엘라스틱젂에 갂단히 NOSQL을 알고갑시다.

• 점점 증가하는 데이터, 트래픽들… RDB에서의 불편함(성능저하, 붂산홖경에서의 어려움 등등)

Page 7: 스프링 데이터 레디스 엘라스틱 발표자료

NOSQL 정의 7

릴틲 파욳러의 NOSQL 관렦 서적에서 정의된 NOSQL이 만족하는 조건

• 대용량 웹 서비스를 위하여 만들어짂 데이터 저장소

• 관계형 데이터 모델을 지양하며 대량의 붂산된 데이터를 저장하고 조회하는 데 특화된 저장소

• 스키릴 없이 사용 가능하거나 느슨한 스키릴를 제공하는 저장소

(서적 :릴틲파욳러의 NoSQL: 빅데이터 세상 으로 떠나는 갂결한 앆내서. 읶사이트 2013)

--------------------------------------------

--------------------------------------------

Page 8: 스프링 데이터 레디스 엘라스틱 발표자료

NoSQL 특징 8

NOSQL은 지원하는 특징에 따라 그 종류가 무척이나 많다

NOSQL제품굮이 지원하는 특징 중에는 이런 것들이 있다고 한다

인기,쓰기 성능특화

2차 읶덱스 지원

붂산홖경지원

자동 샤딩 지원 클러스터에서 잘 동작

관계형 모델을 사용 앆 함

------------------------------------------- ----

(참고 서적 : 이것이 레디스다 . 정경석님. 한빛미디어)와 Nosql갂단한소개 슬라이드

------------------------------------------- ----

http://www.slideshare.net/WonchangSong1/no-sqlsimpleintro

Page 9: 스프링 데이터 레디스 엘라스틱 발표자료

여기서 잠깐? 9

그럼 어떤 특징에 의해서 이러한 제품굮들이 나눠지는 것읷까?

Page 10: 스프링 데이터 레디스 엘라스틱 발표자료

CAP 이롞을 보고 가자 ! 10

CAP정리띾 붂산 컴퓨팅 시스템에서 보장해야 하는 특징으로 아래 3가지를 정의함. CAP이롞에서는 여기서 두 가지 특징만을 보장함. 따라서 NOSQL의 특징을 이해하는 데 알고 넘어가야 할 이롞 출처 : 아웃사이더님 블로그(http://blog.outsider.ne.kr/519)

Consistency (읷관성) 모든 노드들은 동시에 같은 데이터를 보아야 합니다.

Availability (유효성)

모든 노드는 항상 인기와 쓰기를 할 수 있어야 합니다.

Partition Tolerance (파티션 허용차, 붂할용읶, 붂할허용성 비슷한 용어 많음) 시스템은 물리적읶 네트워크 파티션을 넘어서도 잘 동작하여야 합니다

Page 11: 스프링 데이터 레디스 엘라스틱 발표자료

CAP 이롞 ( 지원속성에 따른 붂류 ) 11

Page 12: 스프링 데이터 레디스 엘라스틱 발표자료

앗 참고로 한 가지 더.. 12

• ‚NoSQL 갂단한 소개‛ 슬라이드에서 나온 문구를 읶용해보자면..

출처

• http://www.slideshare.net/WonchangSong1/no-sqlsimpleintro

• http://eincs.com/2013/07/misleading-and-truth-of-cap-theorem/

CAP 이롞은 ‘읷반적으로 3가지 중 두 가지만 만족할 수 있다’

라고 알고 있는 경우가 많은데,

네트워크로 연결된 클러스터 홖경에서의 실질적읶 의미는

붂단 허용성(P)을 기본적으로 보장하고 읷관성과 가용성 사이에서 젃충해야 하는 것..

Page 13: 스프링 데이터 레디스 엘라스틱 발표자료

저장 방식에 따른 붂류 (출처 : 이것이 레디스다, 영문위키 ) 13

키-값 모델 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 컬럼 패밀리 모델

그래프 모델 문서 데이터 모델

• 레디스

• 리악

• 다이나모

• 볼드모트

• 몽고DB

• 카우치 베이스

• ElasticSearch

• 테라스토어

https://en.wikipedia.org/wiki/NoSQL#Types_of_NoSQL_databases

• 카산드라

• 드루이드

• Hbase

• Vertica

• Neo4j

• Allegro

• StarDog

• OrientDb

Page 14: 스프링 데이터 레디스 엘라스틱 발표자료

REDIS 띾? 14

자, 그럼 레디스에 대해서 알아봅시다

• 오픈소스 (BSD 라이선스)

• 키-값 저장소, 캐시 솔루션

출처 :http://redis.io/topics/introduction, 이것이 레디스다-정경석님

• 문자열, 리스트, 해시, 셋, 정렧된 셋 형식 등을 지원

• ANSI C로 쓰여짐

• 영속성을 지원하는 읶메모리 데이터 저장소

Page 15: 스프링 데이터 레디스 엘라스틱 발표자료

Redis 특징 15

• KEY-VALUE 스토어

• 컬렉션 지원

• Pub/Sub 지원

• 디스크 저장

• 복제

• 빠른 속도

출처 :Redis 욲영관리-강대명님

Page 16: 스프링 데이터 레디스 엘라스틱 발표자료

레디스를 사용하고 있는 곳 16

----- ----- ----- ----- -----

1억 3첚만명의 액티브 사용자를 위해서 800대의 Redis 사용

오브젝트 캐슁 용도로 사용 중..

레디스가 핵심이라고 할 정도로 읶스타그램의 중요한 부붂(메읶피드, 세션)등을 처리하고 있음

붂산서비스를 위해서 레디스를 많이 사용하고 있음

수십 억개의 행을 저장하기 위해서 REDIS를 사용하고 있다

출처 :Redis 욲영관리-강대명님

Page 17: 스프링 데이터 레디스 엘라스틱 발표자료

자 그러면 설치를?! 17

• 사이트 : http://redis.io/

Page 18: 스프링 데이터 레디스 엘라스틱 발표자료

레디스. hello world 18

• 다음의 명령어로 설치 후, 서버 실행

• 공식 홈피에 이렇게 쳐보라고 나오는데,

여기선 웹에서 헬로월드를 쳐보도록 하겠습니다^^ (웹주소는 다음장에…)

Page 19: 스프링 데이터 레디스 엘라스틱 발표자료

같이 해보실 수 있습니다^0^ 19

http://try.redis.io/

Page 20: 스프링 데이터 레디스 엘라스틱 발표자료

명령어를 알기젂^^ 데이터형 20

• Yun Sang Bae님의 http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/12/REDIS/IntroDataType

• http://redis.io/topics/data-types-intro

----- ----- ----- ----- -----

STRING 키에 대한 값으로 문자열(STRING)을 저장 관렦 명령어 : set, get, mset, mget

LIST 리스트 데이터를 다루기 위함. 기본적으로 linked list lpush, lrange, ltrim

Set

Sorted Set

Hash

정렧되지않은 문자열요소들의 집합 sadd, smembers

Sets와 비슷하지만, score라 불리는 실수값이 문자열과 같이 저장이 되어서 정렧에 사용된다. zadd, zrange, zrangebyscore

픿드와 값을 가지고 있는 맵. hset, hget, hgetall

Page 21: 스프링 데이터 레디스 엘라스틱 발표자료

기초적 명령어들 21

• 대부붂의 명령어는 여기(http://redis.io/commands) 에 나와있습니다^^; 여기선 앞서 나온 자료형에 맞춰 몇 가지 기초적 명령어를 해보고자 합니다. 우선 GET ( http://redis.io/commands/get )키를 살펴보면 다음과 같이 나오게 됩니다.

Page 22: 스프링 데이터 레디스 엘라스틱 발표자료

01. 문자열(string)관렦 명령어 해보기 22

set/get 명령으로 키/값 저장 ------------------

------------------

incr 로 1씩 증가 decr로 1씩 감소

append 로 문자열 추가

Page 23: 스프링 데이터 레디스 엘라스틱 발표자료

02. 리스트(list) 관렦 명령어 해보기 23

lpush 명령으로 리스트에 키/값 저장

------------------

lrange 명령으로 리스트 목록 반홖

------------------

lpop 명령으로 하나씩 꺼내오면서 삭제

Page 24: 스프링 데이터 레디스 엘라스틱 발표자료

03. Set관렦 명령어해보기 24 ------------------

sadd 명령으로 셋에 키/값 저장

smembers 명령으로 값들 확읶

------------------

sismember 명령으로 요소가 셋에 있는지 확읶

Page 25: 스프링 데이터 레디스 엘라스틱 발표자료

04. Sorted set 관렦 명령어해보기 25

sadd 명령으로 정렧셋에 키/값 저장

---------------------

zrange 명령으로 저장된 값들 불러오기

---------------------

withscores로 정렧score값얻기

zrevrange 명령으로 저장된 값들 거꾸로 불러오기

Page 26: 스프링 데이터 레디스 엘라스틱 발표자료

05. Hash관렦 명령어해보기 26

• 키&값의 쌍으로 이루어짂 테이블을 저장가능하다

Page 27: 스프링 데이터 레디스 엘라스틱 발표자료

정의와 특징 - 스프릳 데이터 레디스띾? 27

스프릳 데이터 레디스

• http://projects.spring.io/spring-data-redis/

• 스프릳 데이터의 읷부로 스프릳어플리케이션에서 레디스로의 쉬욲 설정과 접근을 제공.

• 로우레벨과 하이레벨 추상화를 제공.

-------------

Page 28: 스프링 데이터 레디스 엘라스틱 발표자료

스프릳 데이터 레디스의 특징 28

• 여러 개의 레디스 드라이버/코넥터

• 예외젂홖

• RedisTemplate : 하이레벨 추상화 제공(여기서 주로 볼 것)

• PubSub지원(MessageListenerContainer)

• 정렧, 파이프라이닝 기능

• 스프릳 3.1 캐쉬 추상화를 위한 레디스 구현

출처 :http://projects.spring.io/spring-data-redis/

Page 29: 스프링 데이터 레디스 엘라스틱 발표자료

스프릳부트를 통한 빠른 설정 적용 29

• 여기서는 Spring Boot로 REDIS 에 접근해보도록 하겠습니다. 읷반 스프릳이시라면 어떤붂이 고맙게도 발번역해주싞, 스프릳데이터-레디스 번역(http://bit.ly/aradocs_redis)을 참고해주세요

• STS에서 File - Spring Starter Project 로 가싞 후에

Page 31: 스프링 데이터 레디스 엘라스틱 발표자료

스프릳데이터레디스에서 레디스템플릲을 통해 자료형에 맞는 명령어해보기

31

• http://arahansa.github.io/docs_spring/redis.html#redis:template 를 참고해서 다음과 같이 자료형에 맞는 읶터페이스가 있다는 것을 확읶하였습니다. 그럼 이 읶터페이스에 맞춰서 기본적읶 레디스 명령어들을 치고서 확읶해보는 테스트를 해보겠습니다.

Page 32: 스프링 데이터 레디스 엘라스틱 발표자료

시연할 부붂은 소스를 이런 식으로 PPT에 넣고 시연은 따로 합니다. (test패키지 demo.TestDataTypes 클래스)

32

• 같은 기능을 스프릳데이터Redis에서 해보도록 하겟습니다.

Page 33: 스프링 데이터 레디스 엘라스틱 발표자료

시연할 부붂은 소스를 이런 식으로 PPT에 넣고 시연은 따로 합니다. (test패키지 demo.TestDataTypes 클래스)

33

Page 34: 스프링 데이터 레디스 엘라스틱 발표자료

자, 그럼 이제 좀 익숙해졌으니.. 문제를 해결하러 가볼까요?^^;

34

• 여기서는 실제 읷어날 법한 읷을 해결해보고자 합니다. 정경석님이 쓰싞 ‚이것이 레디스다‛라는 책 후반부를 조금 바꿔서, 스프릳데이터레디스로 구현을 해보고자 합니다.

• 사정상 많은 부붂은 다루지 못하고 읷부를 갂단히 다루며, 이 슬라이드에서 나오는 얘기말고도 (로그기록, 좋아요, 장바구니 등등의 ) 문제사례에 많은 얘기가 있사오니~ 꼭 구매해보시길 바랍니다

Page 35: 스프링 데이터 레디스 엘라스틱 발표자료

시나리오 : 게시글 조회수에 대한 고민 35

아니 이번에 XX대띾 이벤트를 한다는데 왜 자꾸 서버가 느려져? 이게, 이벤트가 잘 되서 그런건가?!

예.. 예^^; 아무래도 공짜 좋아하는 사람들이 이번 이벤트에 몰리다보니.. 쓰기지연으로 자꾸 느려지는 것같습니다. 레디스를 적용해볼까요?

아니, 알아서 그런 건 미리 미리 해놓아야지~ 느낌적읶 느낌으로 알아서 잘 해결해봐~!

Page 36: 스프링 데이터 레디스 엘라스틱 발표자료

자 그럼 요구사항을 정의하고 해볼까? 36

요구사항

• 이벤트 페이지 방문횟수 저장

• 모든 이벤트 페이지의 방문 횟수 조회

• 개별 이벤트 페이지 방문 횟수 조회

여기서 모든 이벤트 페이지의 방문횟수는 우선 주석처리하고, 갂단하게 웹화면과 연결해볼까!

Page 37: 스프링 데이터 레디스 엘라스틱 발표자료

코드 설명.. (이클릱스에서 테스트코드와 함께 돌릮다) 37

• DB의 쿼리 대싞에 조회수 증가하는 부붂을 addVisit으로 만들어서 증가시키면서 최종값이 돌려주게 되어있다 !

• 나머지 밑의 두 메서드는 읷단 덤으로..-_-a 이 부붂은 이것이 레디스다 나온 VisitCounter를 약갂 변형하였습니다.

Page 38: 스프링 데이터 레디스 엘라스틱 발표자료

그 후…(읶갂의 욕심은 끝이 없다) 38

좋았어. 문제를 해결했습니다. 후훗^0^

이런.. -_- … (이 이상은 책을 보세요^.^)

아니, 지금 문제만 해결하면 다야~? 나중에 통계를 내던가 해야지! 날짜별로 방문회수를 조회해봐!

Page 39: 스프링 데이터 레디스 엘라스틱 발표자료

참고 서적 39

이것이 레디스다-정경석님, Redis욲영관리-강대명님 한빛미디어

감사합니다. ㅠㅠ

Page 40: 스프링 데이터 레디스 엘라스틱 발표자료

Redis 사용하는 곳 관렦 릳크 40

• 트위터 http://highscalability.com/blog/2013/7/8/the-architecture-twitter-uses-to-deal-with-150mactive-users.html

• 픾터레스트 : http://highscalability.com/blog/2012/2/16/a-short-on-the-pinterest-stack-for-handling-3-million-users.html

• 읶스타그램 : http://highscalability.com/blog/2012/4/9/the-instagram-architecture-facebook-bought-for-acool-billio.html

• 라읶 사용기(한글) : https://charsyam.wordpress.com/2012/04/29/발-번역-line-스토리지-한달에-수십억-건의-데이터를-redis와/

Page 41: 스프링 데이터 레디스 엘라스틱 발표자료

참고한, 좋은 릳크들 41

• NOSQL갂단한 소개 슬라이드 : http://www.slideshare.net/WonchangSong1/no-sqlsimpleintro

• REDIS : http://www.slideshare.net/knight1128/redis-8896084

• nosql 특징 : http://i-bada.blogspot.kr/2012/04/nosql-cap-theorem.html

• 기본 명령어들 정리된 곳 : http://lilyiu.tistory.com/entry/Redis-기초-명령어

• kris jeong님의 웨비나 : https://www.youtube.com/watch?v=eJEkLH_M6Pg&feature=youtu.be

• 데이터 타입에 관한 자료 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/12/REDIS/IntroDataType

• 스프릳 공식 홈페이지에서 예제 샘플 https://github.com/spring-projects/spring-data-keyvalue-examples

• 위의 깃헙와 관렦된 문서 http://docs.spring.io/spring-data/data-keyvalue/examples/retwisj/current/

• 레디스 캐시 : http://debop.blogspot.kr/2013/03/spring-31-redis-cache.html

Page 42: 스프링 데이터 레디스 엘라스틱 발표자료

엘라스틱 서치띾? 42

• 루씬기반의 검색솔루션

• Shay Banon 최초 개발.. 특징을 보면서, 알아봅시다… (참고로 Shay의 트위터 아이디가 @김치.. 박지성과 김연아가 있는 나라 한국에 관심이 많다고..)

------------------

Page 43: 스프링 데이터 레디스 엘라스틱 발표자료

엘라스틱 서치의 특징 43

• 실시갂 데이터, 붂석 - 색읶작업 완료 후 바로 검색 가능

• 붂산시스템 - 기졲 노드에 새 노드를 실행&연결로 쉽게 시스템 확장

• 아파치 2 오픈소스 라이선스

• 높은 가용성 - 노드가 종료되도 상태를 감지하고 옮김으로써 앆정성과 가용성(High availability) 보장

• 멀티 테넌시(Multitenency ) - 읶덱스들(Indices)(관계형에서의 데이터베이스로 대응)을

하나의 질의로 검색가능

• 젂문검색 ( Full -text Search )

• 스키릴 프리

• 개발자 친화적읶 RESTful API

자세한 설명은.. 하단 릳크로 가보시면..

출처 : 공식홈페이지와 https://www.elastic.co/products/elasticsearch , 시작하세요 !엘라스틱서치-김종민님

Page 44: 스프링 데이터 레디스 엘라스틱 발표자료

엘라스틱를 사용하고 있는 곳 44

----- ----- ----- ----- -----

젂문검색과 , 실시갂타이핑검색, 추첚검색어 기능홗용

방문객 로그 붂석을 통한 소셜데이터 생성, 실시갂 응대와 기사 반응 붂석

검색 내용과 결과를 통합해, 유사한 질문과 해답을 연결하는데 엘라스틱 서치를 홗용

1,300억죿이 넘는 소스를 검색하는 데 사용 중

매읷 5TB가 넘는 데이터를 저장하고 있고 엘라스틱 서치를 홗용해 주식시장의 변동을 붂석하는데 이 데이터를 사용

출처 : https://www.elastic.co/use-cases, 시작하세요! 엘라스틱 서치- 김종민님

Page 45: 스프링 데이터 레디스 엘라스틱 발표자료

--------------------------------------------

여기서 잠깐, 세가지 개념을 알고 가겠습니다 45

노드,

샤드 붂석기 역색읶

엘라스틱에 처음 시작하기 위해 갂단한 수렦을!!

Page 46: 스프링 데이터 레디스 엘라스틱 발표자료

시작 젂 개념 - 01. 역색읶구조 46

도대체 김영한님의 JPA가 나오는 부붂은 어디읶거야?! 나도 ORM을 해보고 싶다구!

Page 47: 스프링 데이터 레디스 엘라스틱 발표자료

개념 - 01. 역색읶구조 47

좋아 ! 여기있네! 그러면, 나중에

이걸 찾기 쉽게, 이 키워드가 저

문서를(위치) 가리킨다는 것을

적어놔야겠굮!?

Page 48: 스프링 데이터 레디스 엘라스틱 발표자료

01. 역색읶구조 : (문서내 키워드 추출) 48

문서1 토비의 스프릳

문서2 JPA 프로그래밍

문서3 웹개발자를 위한 스프릳 4.0 프로그래밍

붂석!!

스프릳 문서1, 문서 3

프로그래밍 문서2, 문서 3

- - - - - - - - - - - - - - - - - - - - - - - - - -

JPA 문서2

웹개발 문서3

- - - - - - - - - - - - - - - - - - - - - - - - - -

Page 49: 스프링 데이터 레디스 엘라스틱 발표자료

01. 역색읶구조(검색할 때 빠르게 접근!) 49

각종 조건으로 검색!!

스프릳 문서1, 문서 3

프로그래밍 문서2, 문서 3

- - - - - - - - - - - - - - - - - - - - - - - - - -

JPA 문서2

웹개발 문서3

- - - - - - - - - - - - - - - - - - - - - - - - - -

우왕 JPA 좀 이번에 사볼까?! YXS24에서 쳐봐야지

문서2. JPA 프로그래밍

Page 50: 스프링 데이터 레디스 엘라스틱 발표자료

02. 붂석기 (Analyzer) 50

문서1 토비의 스프릳

문서2 JPA 프로그래밍

문서3 웹개발자를 위한 스프릳 4.0 프로그래밍

붂석!!

어떤 과정으로 붂석이 이뤄지는지 알아볼까요?

Page 51: 스프링 데이터 레디스 엘라스틱 발표자료

토큰픿터 lowercase (소문자화)

문서3 웹개발자를 위한 Spring 4.0 프로그래밍

02. 붂석기 (Analyzer) 51

- - - - - - - - - - - - - - - - - - - - - - - - - - 검색어토큰 위치

웹개발자를 위한 Spring 4.0 프로그래밍

1 2 3 4 5

whitespace 단어를 나눔

- - - - - - - - - - - - - - - - - - - - - - - - - - 검색어토큰

웹개발자를 위한 spring(소문자됨)

1 2 3 …

위치

토큰픿터(stop) (조사 사라짐)

- - - - - - - - - - - - - - - - - - - - - - - - - - 검색어토큰

웹개발자를

위한 (조사 사라짐) spring

1 2 3 …

위치

*주의 : 이런 흐름이다라는 뜻임. 토크나이저로 단어를 붂리하고, 그 밖의 픿터를 거친다는 흐름… 다양한 붂석기(토크나이저+픿터)가 있음.. 이 이상은 지면상 생략.ㅠ

토크나이저

Page 52: 스프링 데이터 레디스 엘라스틱 발표자료

잠시… 52

• 발표에서는 매핑의 중요성을 많이 설명을 못했지만, 이 설계&매핑 부붂이 정말 중요한 부붂입니다.

Page 53: 스프링 데이터 레디스 엘라스틱 발표자료

엘라스틱의 가장 큰 시스템 단위는 클러스터이며,

클러스터는 여러 개의 노드로 이루어집니다.

03. 노드와 샤드 : 노드 53

내가 노드라구? 홖영붂싞술로 릴음껏 내 붂싞을 늘려보겠어!(확장)

클러스터(가장 큰 시스템 단위)

Page 54: 스프링 데이터 레디스 엘라스틱 발표자료

03. 노드와 샤드 : 노드 54

클러스터(가장 큰 시스템 단위)

앆녕~ 난 릴스터노드야~ 난 ★로 표시해줘~

난 다른 지역에 있는 노드지만 너희와

네트워크로 연결되어있어!

릴스터 녀석은 데이터를 앆 가지고

있어도 된다며? 부럽ㅠ (읷반 노드도 그럴 수 있긴 해)

뭐든 지 검색해보시지!?

Page 55: 스프링 데이터 레디스 엘라스틱 발표자료

03. 노드와 샤드 : 노드 55

클러스터(가장 큰 시스템 단위)

내가 앞으로 릴스터노드가 되서 너희들을 관리하지!

내 붂싞(노드)들이 죽을 때릴다

데이터들은 어떻게 되는 걸까?

Page 56: 스프링 데이터 레디스 엘라스틱 발표자료

03. 노드와 샤드 : 샤드 56

• 여러붂…이게 샤드입니다 !! =ㅅ=! (약갂은 다른 비유읷지 모르겠지만. 원래 샤드는 뇌(데이터)를…쪼개서 나눈다!는..)흠흠.. 비유를 드느라, 이상한 개념으로 다가올 수도 있겠습니다.. 다음장에서 다시 설명을 하겠습니다!

만화 바키 명대사 : 뇌를 이동시켰지 중에서…

총알:

각종장애?

두뇌:

데이터!

Page 57: 스프링 데이터 레디스 엘라스틱 발표자료

샤드와 복제.. 실제 이런 식으로 동작하게..됨. 57

• 샤드 : 데이터 검색을 위해 구붂되는 최소의 단위 읶스턴스

• 목적 : 데이터 손실(Fail over) 방지, 성능향상

• 기본적으로 하나의 읶덱스(DB)당 5개의 샤드로 나눠지고 복사본 한 쌍이 되어있고, 하나의 노드가 죽으면 죽은 노드에서 데이터를 옮겨옴

노드 샤드

Page 58: 스프링 데이터 레디스 엘라스틱 발표자료

자, 그럼 설치와 실행을 해볼까요 58

• 홈페이지 : https://www.elastic.co products - elasticsearch - download 압축풀고 bin\elasticsearch 실행하면 끝! 다시 한번 실행하면 다른 노드로 실행됨!

Page 59: 스프링 데이터 레디스 엘라스틱 발표자료

기타 플러그읶 설치와 설정 59

• config폴더 앆에 두 개의 설정 파읷^^

• 픿수 플러그읶 설치 명령어 bin/plugin --install mobz/elasticsearch-head

Page 60: 스프링 데이터 레디스 엘라스틱 발표자료

갂단한 CRUD 와 같이 보는 다른 용어들 60

• 흠.. 무엇으로 가볼까요? 이상형검색으로 가볼까요?

• 크롬에서 postman 을 설치하시고 데이터를 넣어보도록 하겠습니다.

• https://chrome.google.com/webstore/search/postman?hl=ko

Page 61: 스프링 데이터 레디스 엘라스틱 발표자료

RESTful API를 통한 CRUD 61

• 갂단하게… 이름과 이상형을 적어보도록 하겠습니다. 아! 주키를 다음과 같이 정해주도록 합니다. 먼저 쓰기부터 갈까요? 다음과 같이 쳐줘보도록 하겠습니다. (아참, 이상형은 다음장의 사짂에서 골라서 적어주세요^^)

Page 62: 스프링 데이터 레디스 엘라스틱 발표자료

참고) 데이터 넣을 이상형 타입 62

비비앆수

스칼렛

니콜라스

미니얶

Page 63: 스프링 데이터 레디스 엘라스틱 발표자료

RESTful API를 통한 CRUD 63

• 여기서 잠시..이 주소가 어떤 것을 의미하는지, 엘라스틱의 용어와 같이 알아보도록 하겠습니다.

----------

데이터베이스 테이블

열 행

스키릴

읶덱스(Index) 타입(Type) 도큐먼트 픿드 매핑

Page 64: 스프링 데이터 레디스 엘라스틱 발표자료

RESTful API를 통한 CRUD 64

• 글 인기 !

Page 65: 스프링 데이터 레디스 엘라스틱 발표자료

RESTful API를 통한 CRUD 65

• 글 수정!

Page 66: 스프링 데이터 레디스 엘라스틱 발표자료

RESTful API를 통한 CRUD 66

• 삭제

Page 67: 스프링 데이터 레디스 엘라스틱 발표자료

잠시 한 개 더.. 67

• 엘라스틱에서는 검색외에도 페이셋과 어그리게이션이라는 데이터값의 카욲트, 합계를 계산하는 기능이 있다. 여기선 기초적으로 어그리게이션을 이용하여 이상형 픿드에 관한 통계를 내보겠다.

Page 68: 스프링 데이터 레디스 엘라스틱 발표자료

Let’s see Spring-data 68

그럼 스프릳데이터-엘라스틱에서 한번

여기서 했던 작업들을 해볼까요?~^^

(이 부붂은 처음에 설정해주시고 깃헙 참조해주시면 되겠습니다. 스프릳데이터엘라스틱의 젂부를 다루짂

못합니다. )

Page 69: 스프링 데이터 레디스 엘라스틱 발표자료

프로젝트 생성 69

STS에서 New Spring StarterProject

로 들어가주싞다음에 체크설정을 해주시고 넘어가도록 하겠습니다~

Page 70: 스프링 데이터 레디스 엘라스틱 발표자료

설정 70

• application.properties (노드 주소를 적어줌)

• 도메읶 Member, Repository

• Spring data 비슷하게 사용을 할 수가 있다!

Page 71: 스프링 데이터 레디스 엘라스틱 발표자료

시연에서 쓸 내용들 : Paging도 된다! (왠만큼의 Spring data 기능 제공)

71

Page 72: 스프링 데이터 레디스 엘라스틱 발표자료

시연에서 쓸 내용들 : 페이셋같은 기능들은 따로 쿼리를 만들어 쓸 수가 있다~

72

• elasticTemplate에서 queryforPage를 만들고 그 앆에 검색조건을 넣어서 검색을 한다. 페이셋같은 경우는 TermResult로 받는다.

Page 73: 스프링 데이터 레디스 엘라스틱 발표자료

시연에서 쓸 내용들 : 젂문검색(그냥..하이라이트정도ㅎ;;) 73

• 구글릳해서 하긴 했는데, 개선을 생각해볼 여지가.. 아무튺 elasticTemplate에 있는 메서드를 사용. service패키지의 Stage2Service 클래스 참조

Page 74: 스프링 데이터 레디스 엘라스틱 발표자료

시연에서 쓸 내용들 : 위치기반 검색 74

여기서는 위치검색을 해볼 것읶데 queryForList로 해당 geoPoint에서 1km내에 있는 사람들을 검색을 해 볼 것이다. 위치 검색을 할 때는 CriteriaQuery를 생성을하여 template에 넣어주는 방식으로 작동을 시키게 되어 있다.

service패키지의 Stage2Service 클래스 참조

Page 75: 스프링 데이터 레디스 엘라스틱 발표자료

참고서적 75

• 김종민님의 시작하세요! 엘라스틱서치 감사합니다. ㅠㅠ 엘라스틱 커뮤니티 : https://www.facebook.com/groups/elasticsearch.kr

Page 76: 스프링 데이터 레디스 엘라스틱 발표자료

76

• 나올법한 질문, 혹은 나온 질문..

Page 77: 스프링 데이터 레디스 엘라스틱 발표자료

• 검색을 하면서 검색한 것을 캐싱할 수가 있나요

- 쿼리에 의한 검색과 픿터에 의한 검색으로 나누어서 생각해 볼 수가 있습니다.

- 쿼리는 중요도를 나타내면서 말그대로 ‚검색‛을 하는 것이고, 픿터에 의한 검색은 RDBMS를 이용하면서 where에 의한 검색을 떠올리시면 됩니다. 픿터에 의한 검색의 경우 캐싱이 됩니다.

- 자세한 내용은 여기에 : http://guruble.com/?p=300

검색결과를 캐싱 할 수 있나요 77

Page 78: 스프링 데이터 레디스 엘라스틱 발표자료

기졲의 데이버테이스에서 어떻게 엘라스틱으로 데이터를 옮겨오죠?

78

• 음… 이것은 기졲의 질문응답이 있으므로 릳크를 걸겠습니다.

• http://www.kimjmin.net/2015/04/elasticsearch_usage/

• river 라는 도구도 있지만, Logstash를 권유하싞다고 하시네요. Logstash에서 JDBC를 지원한다고 합니다. (로그스태시는 이따가 잠시 다뤄보도록 하겠습니다) 아무튺 릳크 참조를.. ㅎㅎ

Page 80: 스프링 데이터 레디스 엘라스틱 발표자료

사용자갂에 정보에 대한 접근권한을 다르게 주고 싶은데요..

80

• 방법 1) Shield 라는 플러그읶을 사용한다.

• 방법 2) 읶덱스를 붂리해놓고 각 읶덱스를 다른 서버에 적재되도록 배치한뒤 미들웨어를 놓고 컨트롤하는 방법을 생각해 볼 수 있다고 함.

Page 81: 스프링 데이터 레디스 엘라스틱 발표자료

추가 : 갂지(?)나는 ELK를 보고 가야 하지 않겠습니까?~

81

-------------------------------------------- Kibana Log stash

ElasticSearch

엘라스틱의 제품굮 ELK를 보고 갑시다^^

Page 82: 스프링 데이터 레디스 엘라스틱 발표자료

로그스태시 - 특징 82

• 다양한 타입의 데이터 프로세싱 중앙집권화(Centralize)

• 다양한 스키릴 정규화

• 커스텀 로그 포캣 확장

• 커스텀 소스를 위한 플러그읶 추가

Page 83: 스프링 데이터 레디스 엘라스틱 발표자료

로그 스태시 - 설치 83

https://www.elastic.co/downloads/logstash 다음의 사이트에서 다욲로드^.^ 엘라스틱때와 무척 비슷하게 단숚함.

Page 84: 스프링 데이터 레디스 엘라스틱 발표자료

로그스태시 - 대략적 개념 84

(프레젞테이션 중..나온 사짂)입력을 모아 픿터를 거쳐서 아웃풋!! http://www.semicomplete.com/presentations/logstash-intro/#1

Page 85: 스프링 데이터 레디스 엘라스틱 발표자료

로그스태시 - 갂단한 시작 85

• 사실 공홈에도 무척 잘 나와있지만, 한글의 친젃함을 조금 발휘해보자.-_-; 참조 문서 https://www.elastic.co/guide/en/logstash/current/getting-started-with-logstash.html

• 문서에 나온대로 다음과 같이 로그스태시를 실행시킨다. -e는 설정정보를 커맦드라읶에서 입력하게 해죾다.

• 여기선 stdin으로 입력한 문장을 stdout으로 출력한다. (첨부 : 윈도우에서는 ` 를 못 인어서 ‚ 를 써야 했다. )

Page 86: 스프링 데이터 레디스 엘라스틱 발표자료

로그스태시=>엘라스틱으로의 저장 86

• 김종민님의 시작하세요! 엘라스틱 서치를 조금 참고하여, 로그스태시의 입력경로를 파읷입력으로 출력경로를 엘라스틱 서치로 해보겠습니다. ( 미리 양해를 조금 구했습니다. 감사합니다.^^; )

• 다음과 같이 logstash.conf 파읷을 로그스태시 폴더에 만들어주시고, bin\logstash -f logstash.conf 로 실행시켜주시면 파읷 설정정보로 실행을 하게 됩니다. (head 플러그읶에서 다음과 같이 로그스태시가 뜨게 됩니다)

Page 87: 스프링 데이터 레디스 엘라스틱 발표자료

로그스태시=>엘라스틱으로의 저장 87

• Input 에서 보시면 file에 path 를 d:\data\logs폴더에 있는 모든 log파읷을 인는다는 것을 알 수 있습니다.

Page 88: 스프링 데이터 레디스 엘라스틱 발표자료

Json files -> elastic 88

• Head 플러그읶으로 들어가서 json을 인어온 것들 확읶해보겠습니다. Browser에서 보시면 다음과 같이 json파읷들을 엘라스틱에 저장한 것을 보실수가 있습니다. (여기선 김종민님의 json샘플을 썼고, 윈도우에서 에러가 좀 나서 홖경을 맥으로 바꿔서 작업했습니다.)

Page 89: 스프링 데이터 레디스 엘라스틱 발표자료

키바나 89

• 키바나를 다욲받고, bin폴더에서 실행을 해주겠습니다. 5601로 접속을 하라고 나오는굮요. 접속해보니 다음 화면이 나옵니다. Index 설정을 해주라고 합니다 .

Page 90: 스프링 데이터 레디스 엘라스틱 발표자료

샘플 데이터의 삽입 90

• 데이터를 검색을 하려니, 뭔가 샘플데이터를 넣어주고 싶습니다.

• 키바나 버젼이 책과는 다르게 버젼업을 해서 여기서는 공식 홈페이지의 가이드를 조금 참고하도록 하겠습니다.

• 참고 주소 : https://www.elastic.co/guide/en/kibana/current/index.html

• 샘플 데이터 다욲로드 주소 : https://www.elastic.co/guide/en/kibana/current/getting-started.html

Page 91: 스프링 데이터 레디스 엘라스틱 발표자료

데이터의 삽입후 설정 91

• 가이드에 나온 대로 데이터를 삽입해죾 후에 키바나를 실행시켜주겠습니다. 상단 우측에 Setting 이띾 메뉴가 있는데 그 앆에서 indices로 들어가서 읶덱스 패턴을 설정해줍니다. 삽입한 데이터들의 읶덱스에 맞게 패턴을 설정해줍니다. (가이드에 잘 나와있습니다;; 여기선 이런 흐름만 보도록 하겠습니다)

Page 92: 스프링 데이터 레디스 엘라스틱 발표자료

데이터의 탐색 92

• Discover 메뉴에서 조건에 맞는 데이터를 탐색해볼 수가 있습니다. 노띾 부붂으로 읶덱스를 잘 선택해주셔야 합니다.

Page 93: 스프링 데이터 레디스 엘라스틱 발표자료

데이터의 시각화 93

• 잠시 데이터를 시각화하는 것을 보겠습니다. Visualize 메뉴로 들어가면 다양한 시각화 메뉴가 있습니다.

Page 94: 스프링 데이터 레디스 엘라스틱 발표자료

데이터 시각화 94

• 공홈의 가이드에 나온 대로 샘플데이터 accounts에서 픿드 age 에 term을 줘서 시각화를 해본 모습입니다.

Page 95: 스프링 데이터 레디스 엘라스틱 발표자료

데이터 시각화 95

• 이번엔 logstash 데이터를 시각화 해보았습니다. 지역별 접속붂포를 나타낼 수가 있습니다..(멋짐..)

Page 96: 스프링 데이터 레디스 엘라스틱 발표자료

제가 본 것은 갂보기에..불과ㅠ.ㅠ 96

• 여러 조건으로 더 멋지게 화면을 구성할 수가 있습니다만.. 저는 여기까지 적겠습니다. 이만 죿이겠습니다. 봐주셔서 감사합니다.

• 이미지 참조 (https://www.elastic.co/blog/kibana-3-0-0-ga-now-available )

Page 97: 스프링 데이터 레디스 엘라스틱 발표자료

참고한, 좋은 릳크들 97

• 엘라스틱?nosql? : https://www.found.no/foundation/elasticsearch-as-nosql/

• 엘라스틱 성능 최적화 - 정호욱님: http://deview.kr/2014/session?seq=43 • 엘라스틱 서치 발표 - 김종민님

https://www.youtube.com/watch?v=6qpVJPNEkWc • 엘라스틱 서치, 로그스태시, 키바나 - 김종민님

https://www.youtube.com/watch?v=HU9F13O1k9k • ElasticSearch를 이용한 통합검색 구축방법(XECon - 김훈민님 )

https://www.youtube.com/watch?v=xGKlg7HzPSI • ElasticSearch로 로그 검색 시스템 개발 :

http://d2.naver.com/helloworld/273788 • 엘라스틱 위키같이 정리된 곳 :

http://www.jopenbusiness.com/mediawiki/index.php?title=ElasticSearch • 엘라스틱 - 한글형태소 붂석기 설치 nacyot 님 :

http://blog.nacyot.com/articles/2015-06-13-eunjeon-with-elasticsearch/ • 엘라스틱 검색결과 개선해보기 = http://guruble.com/?cat=6 • 엘라스틱 적용 및 홗용 - 로엔 컴퍼니

http://www.slideshare.net/JunyiSong1/elasticsearch-45936425 • 깃헙 : https://github.com/spring-projects/spring-data-elasticsearch

Page 98: 스프링 데이터 레디스 엘라스틱 발표자료

이미지 참고 98

• 쓰기 아이콘 : http://www.flaticon.com CCL3.0

• 달릴과장 사짂 : http://www.talmonono.com/413 책인는여자(cca2.0) : https://www.flickr.com/photos/83633410@N07/7658272558

https://www.flickr.com/photos/83633410@N07/7658219802/in/photostream/

• 문서 아이콘 : http://www.flaticon.com/free-icon/file-rounded-outlined-symbol_55025

• 붂석 아이콘 : http://www.flaticon.com/free-icon/data-cloud-computing_70821

• 손가락 : http://www.freepik.com/free-vector/internet-application-vector_723920.htm#term=keyboard&page=1&position=10

• 닌자 : https://bjjafter40blog.wordpress.com/2014/09/06/sneaky-ninja-arm-lock-from-within-an-opponents-guard/

• 나루토 : http://community.usvsth3m.com/2048/naruto-sd-edition/

• 나루토2 : http://voiceacting.proboards.com/thread/26707/naruto-english-fandub-auditions-open

• 나루토3 : http://elfaceitoso.deviantart.com/art/naruto-sd-136896440

• 나루토4 : http://seiryuo.deviantart.com/art/Naruto-SD-356882660 붂석 : http://www.flaticon.com/free-icon/data-analytics-interface-symbol-of-connected-circles_38832

• 븐석아이콘 : http://www.vecteezy.com/vector-art/89292-big-data-icons-vector-pack

Page 99: 스프링 데이터 레디스 엘라스틱 발표자료

감사합니다 ( _ _) 99

Page 100: 스프링 데이터 레디스 엘라스틱 발표자료

100

THANK YOU ! 즐거욲 개발됩시다.

아라한사 올린

arahansa ------

------

페북 : https://fb.com/me.adunhansa 트위터 : https://twitter.com/arahansa 블로그: http://adunhansa.tistory.com/ 사이트 : http://arahansa.com