괴물 메서드�리팩터링 ⋅ 성능 개선하기
20222191 임채성
메가콘 2024
1
2024. 9. 26.
자기소개
메가콘 2024
2
2024. 9. 26.
블로그 원고
Waktaverse Games?
메가콘 2024
3
2024. 9. 26.
Waktaverse Games?
메가콘 2024
4
2024. 9. 26.
5K
DAU
20.3K
WAU
53.7k
MAU
MAU 5만
메가콘 2024
5
2024. 9. 26.
5만3천
MAU
리팩터링이란?
메가콘 2024
6
2024. 9. 26.
코드의 기능적 동작을 변경하지 않고 �코드의 구조를 개선하는 작업
리팩터링이란?
메가콘 2024
7
2024. 9. 26.
어렵다.
리팩터링이란?
메가콘 2024
8
2024. 9. 26.
리팩터링이란?
메가콘 2024
9
2024. 9. 26.
😵💫
리팩터링이란?
메가콘 2024
10
2024. 9. 26.
열심히 작업 → 민폐?
리팩터링이란?
메가콘 2024
11
2024. 9. 26.
그런 상황에서..
리팩터링 대상
메가콘 2024
12
2024. 9. 26.
데이터 동기화
문제점
메가콘 2024
13
2024. 9. 26.
문제점
메가콘 2024
14
2024. 9. 26.
긴 코드
복잡함
실수 →
서비스 다운, 데이터 유실
괴물 메서드란?
메가콘 2024
15
2024. 9. 26.
한번의 실패 경험을 가지고..�어떻게 하면 안전하게 리팩터링할 수 있을까?
메가콘 2024
16
2024. 9. 26.
안전한 리팩터링을 위한 3단계
메가콘 2024
17
2024. 9. 26.
안전한 리팩터링을 위한 3단계
메가콘 2024
18
2024. 9. 26.
하나. 분석하기
메가콘 2024
19
2024. 9. 26.
분석하기
메가콘 2024
20
2024. 9. 26.
불을 끈다
불이 꺼진다
조명 기능
분석하기
메가콘 2024
21
2024. 9. 26.
불을 끈다
불이 꺼진다
조명 기능
사전 조건
분석하기
메가콘 2024
22
2024. 9. 26.
불을 끈다
불이 꺼진다
조명 기능
사전 조건
행위 ⋅ 입력
분석하기
메가콘 2024
23
2024. 9. 26.
불을 끈다
불이 꺼진다
조명 기능
사전 조건
행위 ⋅ 입력
기대 결과
둘. 테스트코드 작성하기
메가콘 2024
24
2024. 9. 26.
조명기능의 테스트코드
메가콘 2024
25
2024. 9. 26.
조명 기능
불을 끈다
불이 꺼진다
조명기능의 테스트코드
메가콘 2024
26
2024. 9. 26.
조명 기능
불을 끈다
불이 꺼진다
사전 조건
조명기능의 테스트코드
메가콘 2024
27
2024. 9. 26.
조명 기능
불을 끈다
불이 꺼진다
사전 조건
행위 ⋅ 입력
조명기능의 테스트코드
메가콘 2024
28
2024. 9. 26.
조명 기능
불을 끈다
불이 꺼진다
사전 조건
행위 ⋅ 입력
기대 결과
테스트코드 실행 결과
메가콘 2024
29
2024. 9. 26.
조명 기능
불을 끈다
불이 꺼진다
사전 조건
행위 ⋅ 입력
기대 결과
테스트코드 실행 결과
메가콘 2024
30
2024. 9. 26.
조명 기능
불을 끈다
불이 꺼진다
사전 조건
행위 ⋅ 입력
기대 결과
셋. 리팩터링하기
메가콘 2024
31
2024. 9. 26.
리팩터링이란?
메가콘 2024
32
2024. 9. 26.
불 끄기 함수
불을 끈다
불이 꺼진다
실제 전구
불 끄기 요청
입력
응답
목적
코드의 입력 ⋅ 응답 ⋅ 목적을 변경하지 않고 코드 구조를 개선하는 행위
리팩터링의 필요성
메가콘 2024
33
2024. 9. 26.
불 끄기 함수..�리팩터링이 필요할까?
아니요..
리팩터링의 필요성
메가콘 2024
34
2024. 9. 26.
요구사항 변경 가능성 * 코드의 복잡도
∴ 복잡하고 변경이 필요한 코드
어떻게 분리할까?
메가콘 2024
35
2024. 9. 26.
어떻게 분리할까?
메가콘 2024
36
2024. 9. 26.
도메인 모델이란?
메가콘 2024
37
2024. 9. 26.
도메인 모델로 분리하기
메가콘 2024
38
2024. 9. 26.
상태
도메인 모델로 분리하기
메가콘 2024
39
2024. 9. 26.
행위
도메인 모델로 분리하기
메가콘 2024
40
2024. 9. 26.
코드의 가치
테스트 난이도
도메인 모델로 분리하기
메가콘 2024
41
2024. 9. 26.
코드의 가치
테스트 난이도
의존: 불 끄기
리팩터링 적용
메가콘 2024
42
2024. 9. 26.
리팩터링 대상 설명
메가콘 2024
43
2024. 9. 26.
데이터 동기화
도메인 모델 분리하기
메가콘 2024
44
2024. 9. 26.
111 | 112 | 113 | 114 |
121 | 122 | 123 | 124 |
131 | 132 | 133 | 134 |
211 | 212 | 213 | 214 |
221 | 222 | 223 | 224 |
231 | 232 | 233 | 234 |
311 | 312 | 313 | 314 |
321 | 322 | 323 | 324 |
331 | 332 | 333 | 334 |
3차원 어레이
도메인 모델 분리하기
메가콘 2024
45
2024. 9. 26.
111 | 112 | 113 | 114 |
121 | 122 | 123 | 124 |
131 | 132 | 133 | 134 |
211 | 212 | 213 | 214 |
221 | 222 | 223 | 224 |
231 | 232 | 233 | 234 |
311 | 312 | 313 | 314 |
321 | 322 | 323 | 324 |
331 | 332 | 333 | 334 |
Row
Row
Row
Rows
Spread Sheet
도메인 모델 분리하기
메가콘 2024
46
2024. 9. 26.
요청
도메인 모델 분리하기
메가콘 2024
47
2024. 9. 26.
111 | 112 | 113 | 114 |
121 | 122 | 123 | 124 |
131 | 132 | 133 | 134 |
211 | 212 | 213 | 214 |
221 | 222 | 223 | 224 |
231 | 232 | 233 | 234 |
311 | 312 | 313 | 314 |
321 | 322 | 323 | 324 |
331 | 332 | 333 | 334 |
응답
원시값
도메인 모델 분리하기
메가콘 2024
48
2024. 9. 26.
111 | 112 | 113 | 114 |
121 | 122 | 123 | 124 |
131 | 132 | 133 | 134 |
211 | 212 | 213 | 214 |
221 | 222 | 223 | 224 |
231 | 232 | 233 | 234 |
311 | 312 | 313 | 314 |
321 | 322 | 323 | 324 |
331 | 332 | 333 | 334 |
SpreadSheet
Service
GameRow
AppRow
GuideRow
Rows<ROW>
Rows<ROW>
Rows<ROW>
SpreadSheet
원시값 전달
도메인 모델 분리하기
메가콘 2024
49
2024. 9. 26.
111 | 112 | 113 | 114 |
121 | 122 | 123 | 124 |
131 | 132 | 133 | 134 |
211 | 212 | 213 | 214 |
221 | 222 | 223 | 224 |
231 | 232 | 233 | 234 |
311 | 312 | 313 | 314 |
321 | 322 | 323 | 324 |
331 | 332 | 333 | 334 |
SpreadSheet
Service
GameRow
AppRow
GuideRow
111 | 112 | 113 | 114 |
121 | 122 | 123 | 124 |
131 | 132 | 133 | 134 |
211 | 212 | 213 | 214 |
221 | 222 | 223 | 224 |
231 | 232 | 233 | 234 |
311 | 312 | 313 | 314 |
321 | 322 | 323 | 324 |
331 | 332 | 333 | 334 |
Rows<ROW>
Rows<ROW>
Rows<ROW>
분류
Rows<ROW>
Rows<ROW>
Rows<ROW>
도메인 모델 분리하기
메가콘 2024
50
2024. 9. 26.
SpreadSheet
Service
GameRow
AppRow
GuideRow
111 | 112 | 113 | 114 |
121 | 122 | 123 | 124 |
131 | 132 | 133 | 134 |
211 | 212 | 213 | 214 |
221 | 222 | 223 | 224 |
231 | 232 | 233 | 234 |
311 | 312 | 313 | 314 |
321 | 322 | 323 | 324 |
331 | 332 | 333 | 334 |
Rows<ROW>
Rows<ROW>
Rows<ROW>
도메인 모델 생성
도메인 모델 분리하기
메가콘 2024
51
2024. 9. 26.
SpreadSheet
Service
GameRow
AppRow
GuideRow
Rows<ROW>
Rows<ROW>
Rows<ROW>
1급 콜렉션 생성
도메인 모델 분리하기
메가콘 2024
52
2024. 9. 26.
SpreadSheet
Service
GameRow
AppRow
GuideRow
Rows<ROW>
Rows<ROW>
Rows<ROW>
1급 콜렉션 생성
도메인 모델 분리하기
메가콘 2024
53
2024. 9. 26.
SpreadSheet
Service
GameRow
AppRow
GuideRow
Rows<ROW>
Rows<ROW>
Rows<ROW>
1급 콜렉션 HashMap
결과
메가콘 2024
54
2024. 9. 26.
변환
사용
뭐가 문제일까요?
메가콘 2024
55
2024. 9. 26.
서비스 레이어에서 영속 로직 빼기
메가콘 2024
56
2024. 9. 26.
적절한 디자인 패턴만을 적용하자
메가콘 2024
57
2024. 9. 26.
리팩터링 결과
메가콘 2024
58
2024. 9. 26.
리팩터링 결과
메가콘 2024
59
2024. 9. 26.
리팩터링 결과
메가콘 2024
60
2024. 9. 26.
성능 개선 결과
메가콘 2024
61
2024. 9. 26.
과도한 API 호출 이슈
메가콘 2024
62
2024. 9. 26.
유튜브 API 호출
N회 호출
배치 처리
메가콘 2024
63
2024. 9. 26.
⌈ N/50 ⌉ 호출
배치 처리
메가콘 2024
64
2024. 9. 26.
| 이전 | 이후 |
호출 횟수 | N | ⌈ N/50 ⌉ |
비용 개선율 | 0% | 98% |
동기적 처리로 인한 병목 이슈
메가콘 2024
65
2024. 9. 26.
논 블로킹 처리
메가콘 2024
66
2024. 9. 26.
논 블로킹 처리
메가콘 2024
67
2024. 9. 26.
논 블로킹 처리
메가콘 2024
68
2024. 9. 26.
성능개선 결과
메가콘 2024
69
2024. 9. 26.
3s → 2.7s
10% 개선
이렇게 재미있는 리팩터링�여러분도 해보시는건 어떠신가요?�그리고..
메가콘 2024
70
2024. 9. 26.
마지막을 빌려 동아리 홍보..
메가콘 2024
71
2024. 9. 26.
메가브레인
감사합니다!
메가콘 2024
72
2024. 9. 26.
QnA