Suche senden
Hochladen
오픈소스 Jedis 리펙토링 하기 (redis java 라이브러리)
•
38 gefällt mir
•
4,445 views
YoungSu Son
Folgen
Jedis 리렉토링 하기
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 63
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Effective java
Effective java
Haeil Yi
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경
YoungSu Son
안드로이드 오픈소스 어플리케이션 블록 2
안드로이드 오픈소스 어플리케이션 블록 2
YoungSu Son
[NEXT] GCM을 이용한 게시글 자동 갱신
[NEXT] GCM을 이용한 게시글 자동 갱신
YoungSu Son
[NEXT] Android 개발 경험 프로젝트 5일차 (Actionbar, SideNavigation)
[NEXT] Android 개발 경험 프로젝트 5일차 (Actionbar, SideNavigation)
YoungSu Son
[NEXT] Android 개발 경험 프로젝트 3일차 (Database)
[NEXT] Android 개발 경험 프로젝트 3일차 (Database)
YoungSu Son
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기
YoungSu Son
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법
YoungSu Son
Empfohlen
Effective java
Effective java
Haeil Yi
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경
YoungSu Son
안드로이드 오픈소스 어플리케이션 블록 2
안드로이드 오픈소스 어플리케이션 블록 2
YoungSu Son
[NEXT] GCM을 이용한 게시글 자동 갱신
[NEXT] GCM을 이용한 게시글 자동 갱신
YoungSu Son
[NEXT] Android 개발 경험 프로젝트 5일차 (Actionbar, SideNavigation)
[NEXT] Android 개발 경험 프로젝트 5일차 (Actionbar, SideNavigation)
YoungSu Son
[NEXT] Android 개발 경험 프로젝트 3일차 (Database)
[NEXT] Android 개발 경험 프로젝트 3일차 (Database)
YoungSu Son
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기
YoungSu Son
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법
YoungSu Son
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
YoungSu Son
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
YoungSu Son
[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기
YoungSu Son
[1B2]자신있는개발자에서훌륭한개발자로
[1B2]자신있는개발자에서훌륭한개발자로
NAVER D2
Deview 2013 - 나는 왜 개발자인데자신이 없을까?
Deview 2013 - 나는 왜 개발자인데자신이 없을까?
Minsuk Lee
SW 아키텍처 분석방법
SW 아키텍처 분석방법
YoungSu Son
Fault Tolerance 패턴
Fault Tolerance 패턴
YoungSu Son
Clean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance Tuning
YoungSu Son
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
YoungSu Son
Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭)
YoungSu Son
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
YoungSu Son
Singleton 패턴 (김진영 - EVA, 소마에 10기)
Singleton 패턴 (김진영 - EVA, 소마에 10기)
YoungSu Son
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
YoungSu Son
생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기)
YoungSu Son
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드
YoungSu Son
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
YoungSu Son
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
YoungSu Son
DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법
YoungSu Son
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
YoungSu Son
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항
YoungSu Son
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
YoungSu Son
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
YoungSu Son
Weitere ähnliche Inhalte
Andere mochten auch
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
YoungSu Son
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
YoungSu Son
[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기
YoungSu Son
[1B2]자신있는개발자에서훌륭한개발자로
[1B2]자신있는개발자에서훌륭한개발자로
NAVER D2
Deview 2013 - 나는 왜 개발자인데자신이 없을까?
Deview 2013 - 나는 왜 개발자인데자신이 없을까?
Minsuk Lee
SW 아키텍처 분석방법
SW 아키텍처 분석방법
YoungSu Son
Andere mochten auch
(6)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기
[1B2]자신있는개발자에서훌륭한개발자로
[1B2]자신있는개발자에서훌륭한개발자로
Deview 2013 - 나는 왜 개발자인데자신이 없을까?
Deview 2013 - 나는 왜 개발자인데자신이 없을까?
SW 아키텍처 분석방법
SW 아키텍처 분석방법
Mehr von YoungSu Son
Fault Tolerance 패턴
Fault Tolerance 패턴
YoungSu Son
Clean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance Tuning
YoungSu Son
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
YoungSu Son
Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭)
YoungSu Son
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
YoungSu Son
Singleton 패턴 (김진영 - EVA, 소마에 10기)
Singleton 패턴 (김진영 - EVA, 소마에 10기)
YoungSu Son
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
YoungSu Son
생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기)
YoungSu Son
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드
YoungSu Son
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
YoungSu Son
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
YoungSu Son
DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법
YoungSu Son
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
YoungSu Son
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항
YoungSu Son
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
YoungSu Son
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
YoungSu Son
Android Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + Genymotion
YoungSu Son
URQA 삼성 컨퍼런스 발표
URQA 삼성 컨퍼런스 발표
YoungSu Son
[NEXT] Nextgram Refactoring
[NEXT] Nextgram Refactoring
YoungSu Son
[NEXT] Android Profiler
[NEXT] Android Profiler
YoungSu Son
Mehr von YoungSu Son
(20)
Fault Tolerance 패턴
Fault Tolerance 패턴
Clean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance Tuning
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Singleton 패턴 (김진영 - EVA, 소마에 10기)
Singleton 패턴 (김진영 - EVA, 소마에 10기)
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기)
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
Android Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + Genymotion
URQA 삼성 컨퍼런스 발표
URQA 삼성 컨퍼런스 발표
[NEXT] Nextgram Refactoring
[NEXT] Nextgram Refactoring
[NEXT] Android Profiler
[NEXT] Android Profiler
Kürzlich hochgeladen
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Kim Daeun
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
Wonjun Hwang
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
Kim Daeun
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
Wonjun Hwang
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
Tae Young Lee
Kürzlich hochgeladen
(6)
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
오픈소스 Jedis 리펙토링 하기 (redis java 라이브러리)
1.
오픈소스 리팩토링 하기
- JEDIS (redis java client) - SoftwareArchitecting
2.
3.
김주희,
4.
이경민
5.
https://github.com/LEE-GyeongMin/jedis
6.
요약 • 문제점1
7.
:
8.
패키지
9.
간의
10.
Tangled
11.
- 해결단계1.
12.
jedis
13.
패키지
14.
안에
15.
있던
16.
HostAndPort를
17.
새로운
18.
패키지인
19.
host로
20.
분리
21.
- 해결단계2.
22.
jedis
23.
패키지
24.
안에
25.
있던
26.
exception
27.
패키지를
28.
밖으로
29.
분리
30.
- 해결
31.
결과
32.
• 문제점2
33.
:
34.
jedis
35.
내부에
36.
패키징
37.
되어
38.
있지
39.
않음
40.
- 해결단계1.
41.
조건에
42.
따라
43.
리패키징
44.
- 해결단계1-1.
45.
JedisShardedInfo
46.
클래스
47.
관련
48.
tangled
49.
수정하기
50.
- 해결단계1-2.
51.
client
52.
클래스와
53.
commands
54.
인터페이스간
55.
tangled
56.
수정하기
57.
첫번째
58.
- 해결단계1-3.
59.
client
60.
클래스와
61.
commands
62.
인터페이스간
63.
tangled
64.
수정하기
65.
두번째
66.
- 해결결과
67.
• 문제점3.
68.
리패키징
69.
한
70.
후
71.
해결하지
72.
못한
73.
문제
74.
- 해결단계1.
75.
패키지
76.
네이밍
77.
다시
78.
하기
79.
- 해결단계2.
80.
패키징
81.
더
82.
깔끔하게
83.
하기
84.
- 해결단계3.
85.
리패키징이
86.
부적절한
87.
경우
88.
(단순히
89.
tangled
90.
해소를
91.
위한
92.
배치)
93.
해결해결단계4.
94.
리패키징
95.
하면서
96.
생긴
97.
에러
98.
수정하기
99.
- 해결단계4-1.
100.
에러가
101.
수정후
102.
새롭게
103.
생긴
104.
tangled
105.
수정하기
106.
• 최종
107.
결과
108.
문제점1. 패키지간의 Tangled
지수가 심함
109.
문제점1. 패키지간의 Tangled
지수가 심함 - exceptions와
110.
jedis
111.
안에
112.
있는
113.
HostAndPort
114.
사이의
115.
의존
116.
관계가
117.
있음 - util과
118.
jedis
119.
안에
120.
있는
121.
HostAndPort
122.
사이의
123.
의존
124.
관계가
125.
있음
126.
- util과
127.
jedis패키지
128.
안에
129.
있는
130.
exception
131.
패키지와의
132.
의존관계가
133.
있음
134.
문제점1. 패키지간의 Tangled
지수가 심함 해결단계1. HostAndPort를 새로운 패키지인 host로 분리 - Couplings
135.
를
136.
보고
137.
HostAndPort
138.
클래스는
139.
jedis
140.
밖에서
141.
사용
142.
되는
143.
것이
144.
맞다고
145.
판단
146.
- jedis
147.
패키지
148.
안에
149.
있던
150.
HostAndPort
151.
클래스를
152.
새로운
153.
host
154.
패키지로
155.
포함
156.
문제점1. 패키지간의 Tangled
지수가 심함 해결단계2. jedis 패키지 안에 있던 exception 패키지를 밖으로 분리 - jedis
157.
패키지
158.
안에
159.
있던
160.
exception
161.
패키지를
162.
밖으로
163.
분리
164.
- exception
165.
패키지는
166.
jedis
167.
안에서만
168.
사용되지
169.
않고,
170.
util
171.
과도
172.
의존
173.
관계를
174.
갖고
175.
있기
176.
때문에
177.
밖으로
178.
분리시킴
179.
문제점1. 패키지간의 Tangled
지수가 심함 해결결과 - 오염도
180.
하락
181.
(5.57
182.
-
183.
4.21)
184.
- tangled
185.
제거
186.
문제점1. 패키지간의 Tangled
지수가 심함 해결결과 before after
187.
문제점2. jedis가 전혀
패키징 되어 있지 않음 - redis
188.
의
189.
주요
190.
기능을
191.
제공하는
192.
클래스가
193.
들어있는
194.
jedis
195.
패키지
196.
내부를
197.
보면
198.
기능별
199.
분류가
200.
전혀
201.
되어있지
202.
않음
203.
- 첨부된
204.
Composition
205.
결과는
206.
jedis
207.
하나의
208.
패키지
209.
내부의
210.
상황
211.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. • composition의
212.
구조,
213.
클래스
214.
이름,
215.
주요
216.
기능을
217.
참고해서
218.
리패키징
219.
할
220.
클래스를
221.
선택한다.
222.
• 우선순위
223.
및
224.
조건
225.
- Composition
226.
결과의
227.
최대한
228.
상위에
229.
있을것
230.
- 해당
231.
클래스를
232.
참조하는
233.
다른
234.
클래스가
235.
적을
236.
것
237.
- handling,
238.
pooling
239.
등
240.
부수적
241.
역할이
242.
부여된
243.
클래스가
244.
아닌
245.
중심
246.
역할이
247.
부여된
248.
클래스인
249.
것
250.
- tangled
251.
가
252.
발생하지
253.
않는
254.
범위
255.
내에서의
256.
이동
257.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. 1. cluster
258.
패키지
259.
생성
260.
2. JedisCluster,
261.
JedisClusterCommand
262.
클래스
263.
이동
264.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다.
265.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. 1. pool
266.
패키지
267.
생성
268.
2. ShardedJedisPool,
269.
JedisPoolConfig
270.
클래스
271.
이동
272.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다.
273.
1. handler
274.
패키지
275.
생성
276.
2. 세가지
277.
핸들러를
278.
패키지로
279.
이동 문제점2. jedis가
전혀 패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다.
280.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다.
281.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. 1. shard
282.
패키지
283.
생성
284.
2. ShardJedis,
285.
BinaryShardedJedis,
286.
ShardJedisPipeline
287.
이동
288.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다.
289.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. 1. 이미
290.
있는
291.
pool
292.
패키지에
293.
JedisPool,
294.
JedisSenctinelPool
295.
이동
296.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다.
297.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. • 참고사항
298.
- JedisFactory가
299.
참조하고
300.
있는
301.
Jedis
302.
와
303.
BinaryJedis
304.
클래스는
305.
매우
306.
많은
307.
클래스들과
308.
참조관계에
309.
있음
310.
- 특히
311.
Jedis
312.
클래스는
313.
자바에서
314.
레디스를
315.
사용하는데
316.
가장
317.
기본적인
318.
클래스이기
319.
때문에
320.
중요하다고
321.
판단
322.
• 해결법
323.
1. core
324.
패키지
325.
생성
326.
2. BinaryJedis,
327.
JedisFactory,
328.
Jedis
329.
이동
330.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. 해결단계1-1. JedisShardedInfo 클래스 관련 tangled 수정하기 - JedisShardInfo
331.
클래스가
332.
jedis
333.
클래스와
334.
상호
335.
참조
336.
중
337.
- JedisShardInfo
338.
클래스를
339.
shard
340.
패키지로
341.
이동
342.
시킴
343.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. 해결단계1-1. JedisShardedInfo 클래스 관련 tangled 수정하기 - JedisShardInfo
344.
클래스를
345.
shard
346.
패키지로
347.
이동한
348.
후 에도
349.
Tangled
350.
존재
351.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. 해결단계1-1. JedisShardedInfo 클래스 관련 tangled 수정하기 1. info
352.
패키지
353.
생성
354.
2. JedisShardInfo
355.
클래스
356.
이동
357.
-
358.
이동
359.
후에도
360.
tangled
361.
사라지지
362.
않음
363.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. - JedisShardInfo
364.
클래스는
365.
샤딩할
366.
레이스
367.
클라이언트들 을
368.
정의할
369.
때
370.
사용하기
371.
때문에
372.
기본적으로
373.
Shard
374.
와
375.
관 련된
376.
클래스
377.
- 우선
378.
순위
379.
중에
380.
tangled
381.
발생시키지
382.
않는
383.
것도
384.
있기
385.
때 문에
386.
기능상으로는
387.
적합하지
388.
않지만
389.
Jedis,
390.
BinaryJedis
391.
와
392.
같은
393.
패키지에
394.
포함시킴
395.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. 1. cmd
396.
클래스를
397.
생성한다.
398.
2. command
399.
와
400.
관련된
401.
인터페이스를
402.
이동한다.
403.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다.
404.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. 1. transaction
405.
패키지를
406.
생성한다.
407.
2. Transaction,
408.
TransactionBlock클래스를
409.
이동한다. 1. pipeline
410.
패키지를
411.
생성한다.
412.
2. Pipeline,
413.
PipelineBlock
414.
클래스를
415.
이동한다.
416.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다.
417.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. 1. PipelineBase
418.
클래스와
419.
MultikeyPipelineBase
420.
클래스를
421.
pipeline
422.
패키지로
423.
이동한다.
424.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다.
425.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. 1. pubsub
426.
패키지를
427.
생성한다.
428.
2. BinaryJedisPubsub,
429.
JedisPubsub
430.
클래스를
431.
이동한다.
432.
1. client
433.
패키지를
434.
생성한다.
435.
2. Client
436.
클래스를
437.
이동한다.
438.
1. usage
439.
패키지를
440.
생성한다.
441.
2. JedisMonitor
442.
클래스를
443.
이동한다.
444.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다.
445.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. 1. BinaryRedisPipeline,
446.
RedisPipeline
447.
인터페이스는
448.
pipeline
449.
패키지로
450.
이동한다.
451.
2. Commands
452.
인터페이스는
453.
cmd
454.
패키지로
455.
이동한다.
456.
- Client
457.
클래스와
458.
Commands
459.
인터페이스간
460.
상호
461.
참조
462.
발생
463.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. 해결단계1-2. Client 클래스와 Commands 인터페이스간 tangled 수정하기1 • client
464.
클래스와
465.
commands
466.
인터페이스간
467.
상호
468.
참조
469.
발생
470.
• cmds
471.
패키지
472.
내부에
473.
있는
474.
commands
475.
인터페이스를
476.
다른
477.
패키지로
478.
이동하기
479.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다.
480.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. 1. BinaryClient
481.
클래스를
482.
client
483.
패키지로
484.
이동한다.
485.
2. MultiKeyBinaryRedisPipeline,
486.
MultiKeyCommandsPipeline
487.
인터페이스를
488.
pipeline
489.
패키지로
490.
이동한다.
491.
1.Support
492.
패키지를
493.
생성한다.
494.
2.
495.
ScanResult
496.
클래스를
497.
이동한다.
498.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. 해결단계1-3. client 클래스와 commands 인터페이스간 tangled 수정하기2 • tangled
499.
를
500.
생성하지
501.
않는
502.
것도
503.
중요한
504.
조건
505.
• cmds패키지
506.
안에
507.
있는
508.
Commands
509.
인터페이스를
510.
Client
511.
패키지로
512.
이동
513.
• Commands
514.
인터페이스에
515.
관한
516.
패키징은
517.
추후에
518.
다시
519.
해결
520.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다.
521.
1. params
522.
패키지
523.
생성
524.
2. params
525.
와
526.
관련된
527.
클래스
528.
이동 문제점2. jedis가
전혀 패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다.
529.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다.
530.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다. • ClusterPipeline,
531.
BasicRedisPileline
532.
- pipeline
533.
패키지로
534.
이동
535.
• Queable
536.
- usage
537.
패키지로
538.
이동
539.
• Connection,
540.
Protocol
541.
542.
- conn
543.
패키지
544.
생성
545.
후
546.
이동
547.
• Tuple
548.
- worker
549.
패키지
550.
생성
551.
후
552.
이동
553.
• BitOP
554.
- support
555.
패키지
556.
생성
557.
후
558.
이동
559.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결단계1. 우선순위에 따라 차례대로 리패키징한다.
560.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결 결과 before after after
561.
문제점2. jedis가 전혀
패키징 되어 있지 않음 해결 결과 - 오염도
562.
하락
563.
(4.21-3.69)
564.
- fat
565.
감소
566.
문제점3. 리패키징 한
후 해결하지 못한 문제 • 네이밍
567.
• 단순히
568.
tangled
569.
만
570.
해결한
571.
문제
572.
- cmds패키지
573.
안에
574.
있는
575.
Commands
576.
클래스를
577.
Client
578.
패키지로
579.
이동
580.
- core
581.
패키지
582.
안에
583.
있는
584.
jedisshardinfo
585.
• 묶을
586.
수
587.
있는
588.
것은
589.
묶고,
590.
더
591.
분리해야
592.
할
593.
필요성이
594.
있는
595.
것들
596.
분리하기
597.
• 에러가
598.
생긴것
599.
수정하기
600.
문제점3. 리패키징 한
후 해결하지 못한 문제 해결단계1. 패키지 네이밍 다시 하기 • cmd
601.
:
602.
command
603.
- 최대한
604.
한번에
605.
알아
606.
볼
607.
수
608.
있도록
609.
하기
610.
• core
611.
612.
:
613.
패키징
614.
안하기
615.
- core
616.
‘핵’과
617.
같은
618.
느낌이라서
619.
접근하지
620.
말아야
621.
한다는
622.
느낌이
623.
들기
624.
때문에
625.
적절하지
626.
않음
627.
- client.jedis
628.
내에
629.
패키징
630.
없이
631.
두고,
632.
클라이언트와
633.
가장
634.
가깝 게
635.
배치함
636.
문제점3. 리패키징 한
후 해결하지 못한 문제 해결단계2. 패키징 더 깔끔하게 하기 https://github.com/xetorthio/jedis/wiki/AdvancedUsage • 테스트
637.
패키지에
638.
있는
639.
클래스들과
640.
“AdvancedUsage”
641.
튜토리얼을
642.
통해서
643.
핵심적인
644.
기능
645.
파악하기
646.
- Transactions
647.
- Pipelining
648.
- Publish/Subscribe
649.
- ShardedJedis
650.
- Monitoring
651.
- …⋯
652.
• 핵심기능
653.
대로
654.
분류된
655.
패키지의
656.
경우
657.
해당
658.
기능을
659.
유 지하는데
660.
필요한
661.
클래스
662.
및
663.
인스턴스와
664.
해당
665.
기능이
666.
확장되어서
667.
사용되는
668.
클래스가
669.
섞여
670.
있었음
671.
- 기능
672.
유지에
673.
필요한
674.
클래스
675.
/
676.
기능이
677.
확장된
678.
클 래스
679.
별로
680.
패키지를
681.
나눔 문제점3. 리패키징
한 후 해결하지 못한 문제 해결단계2. 패키징 더 깔끔하게 하기
682.
• 여전히
683.
패키지
684.
분류가
685.
부족한
686.
듯한
687.
느낌
688.
• 기본
689.
클래스
690.
/
691.
사용하는
692.
클래스로
693.
나누어 진
694.
것들이
695.
많음
696.
• 기본
697.
패키지
698.
밑에
699.
하위
700.
패키지로
701.
‘사용하 는
702.
클래스’
703.
패키지를
704.
새로
705.
생성 문제점3. 리패키징
한 후 해결하지 못한 문제 해결단계2. 패키징 더 깔끔하게 하기
706.
문제점3. 리패키징 한
후 해결하지 못한 문제 해결단계2. 패키징 더 깔끔하게 하기
707.
문제점3. 리패키징 한
후 해결하지 못한 문제 해결단계2. 패키징 더 깔끔하게 하기 해결단계2-1. 리패키징 하면서 생긴 tangled 수정하기 • support
708.
와
709.
usage
710.
의
711.
패키징에
712.
별
713.
의미 가
714.
없다고
715.
생각해서
716.
support
717.
패키지로
718.
합침
719.
• support
720.
와
721.
client
722.
패키지
723.
간
724.
tangled
725.
발생
726.
문제점3. 리패키징 한
후 해결하지 못한 문제 해결단계2. 패키징 더 깔끔하게 하기 해결단계2-1. 리패키징 하면서 생긴 tangled 수정하기 • support
727.
패키지의
728.
BitOP
729.
를
730.
이동하는
731.
것보다
732.
JedisMonitor
733.
를
734.
이동하는
735.
것이
736.
더
737.
낫다고
738.
판단
739.
- monitor
740.
패키지를
741.
생성하기
742.
- JedisMonitor
743.
클래스
744.
이동하기
745.
• usage
746.
패키지
747.
제거
748.
문제점3. 리패키징 한
후 해결하지 못한 문제 해결단계2. 패키징 더 깔끔하게 하기 해결단계2-1. 리패키징 하면서 생긴 tangled 수정하기
749.
문제점3. 리패키징 한
후 해결하지 못한 문제 해결단계2. 패키징 더 깔끔하게 하기 • support
750.
에
751.
관련된
752.
패키지
753.
- worker,
754.
conn,
755.
params
756.
등을
757.
support
758.
패키지로
759.
포함시킴 • 주요
760.
기능에
761.
관한
762.
패키지
763.
문제점3. 리패키징 한
후 해결하지 못한 문제 해결단계3. 리패키징이 부적절한 경우 (단순히 tangled 해소를 위한 배치) 해결 • core
764.
안에
765.
있는
766.
jedisShardInfo
767.
- AdvancedUsage에
768.
따르면
769.
jedisShardInfo는
770.
771.
샤딩을
772.
진 행하기
773.
전에
774.
샤딩된
775.
서버
776.
목록의
777.
정보를
778.
알아오는
779.
과정을
780.
진행하는
781.
클래스
782.
- ShardedJedis
783.
를
784.
랩핑하는
785.
기능으로써
786.
클라이언트와
787.
가 까운
788.
기능이기
789.
때문에
790.
core에
791.
포함되어도
792.
무방함
793.
문제점3. 리패키징 한
후 해결하지 못한 문제 해결단계3. 리패키징이 부적절한 경우 (단순히 tangled 해소를 위한 배치) 해결 • Commands
794.
인터페이스는
795.
이전에
796.
리패키징
797.
하는
798.
과정에서
799.
tangled
800.
를
801.
생성되지
802.
않기
803.
위해
804.
의도치
805.
않게
806.
Client
807.
클래스와
808.
같은
809.
패키지에
810.
넣은
811.
것
812.
• commands
813.
패키지
814.
내의
815.
*Commands.linsert라는
816.
메소드가
817.
BinaryClient의
818.
LIST_POSITION이라는
819.
enum값을
820.
참조.
821.
• client
822.
패키지
823.
내의
824.
Client는
825.
Commands를
826.
implements.
827.
문제점3. 리패키징 한
후 해결하지 못한 문제 해결단계3. 리패키징이 부적절한 경우 (단순히 tangled 해소를 위한 배치) 해결 • LIST_POSITION이라는
828.
enum값을
829.
BinaryClient 로
830.
부터
831.
분리,
832.
새로운
833.
패키지로
834.
이동시킴 • commands
835.
패키지를
836.
commandsBase와
837.
commands
838.
패키 지로
839.
분리
840.
• commands에는
841.
Commands.java
842.
라는
843.
interface만
844.
들어있음
845.
문제점3. 리패키징 한
후 해결하지 못한 문제 해결단계4. 리패키징 하면서 생긴 에러 수정하기 • 원래
846.
하나의
847.
package에서
848.
출발했기
849.
때문에
850.
패키지를
851.
변경하는
852.
과정에서
853.
몇
854.
가지
855.
문제가
856.
발생
857.
- protected
858.
혹은
859.
공개범위를
860.
설정 하지
861.
않은
862.
class들을
863.
참조하는
864.
경 우
865.
에러가
866.
발생
867.
- 문제가
868.
생기는
869.
class들은
870.
모두
871.
public으로
872.
변경
873.
문제점3. 리패키징 한
후 해결하지 못한 문제 해결단계4. 리패키징 하면서 생긴 에러 수정하기 해결단계4-1. 에러가 수정후 새롭게 생긴 tangled 수정하기 • 새로운
874.
클래스를
875.
생성해서
876.
getParam()만
877.
밖으로
878.
분리함
879.
문제점3. 리패키징 한
후 해결하지 못한 문제 해결단계4. 리패키징 하면서 생긴 에러 수정하기 • ListPosition
880.
클래스와
881.
JedisParam
882.
클래스를
883.
support
884.
패키지로
885.
이동
886.
최종결과
887.
최종결과 - 오염도
888.
하락
889.
(5.57
890.
-
891.
2.83)
892.
- fat
893.
감소
894.
- tangled
895.
제거
Jetzt herunterladen