React, Redux를 서비스에 적용, 유지보수하면서
생겼던 문제점들을 해결하기 위한 방안들.
* 대상
- React, Redux를 접하지 않은 분
- React, Redux를 서비스에 적용하고 있는 분
* 내용
- React만으로는 해결되지 않는 문제들
- Flux의 한계
- Redux의 정의 및 서비스 적용
- 코드가 많아짐에 따른 문제를 typescript를 통해 해결
* 실전팁
- Typescript를 사용하여 컴파일 타임에 오류를 감지하자
- 많아지는 dom tree를 high order component를 통해 모듈화하자
- Logical component를 만들어서 control flow를 제어하자
5. 프리젠테이션의 목표
01
02
React, Redux를 접하지 않은 분
React, Redux를 서비스에 적용하고 있는 분
React, Redux 및 관련 기술에 대한 가벼운 개념 전달
선물하기의 시행착오를 보면서, 마치 내가 개발한 듯한 착시 효과
6. 프리젠테이션의 목표
01
02
React, Redux를 접하지 않은 분
React, Redux를 서비스에 적용하고 있는 분
선물하기의 서비스 적용 및 시행착오를 보면서
“쟤네들 아직 멀었다.” 혹은 “아, 저건 우리 서비스에도 적용할 만 하다”
라는 반응을 이끌어 낼 수 있도록 하는 것
8. Back
end
MSA, Java, Scala
Play, Finatra, Spring, Akka
Back
end
MSA, Java, Scala
Play, Finatra, Spring, Akka
선물하기에서 사용하는 기술
Front
end
React, Redux, AngularJS
9. 선물하기에서 사용하는 Front end 기술
01
03
React
Redux
2015년 중순 운영툴에 적용
2016년 초 서비스에 적용
10. 선물하기에서 사용하는 Front end 기술
01
02
03
04
+
React
Flux
Redux
Typescript
개선사항
2015년 중순 운영툴에 적용
2016년 초 서비스에 적용
2017년 중순 서비스에 적용
2017년 말 서비스에 적용 예정
2015년 중순 운영툴에 적용
삽질순서
&
발표순서
21. 01
02
03
04
05
React
Flux
Redux
Typescript
Flux란?
개선사항
기존 MVC의 한계를 해결하기 위한 단방향 데이터 아키텍쳐
https://facebook.github.io/flux/
Flux is the application architecture that Facebook uses for building client-side web applications
(https://facebook.github.io/flux/docs/in-depth-overview.html)
22. Flux란? 예전 정적인 페이지
정적인 데이터API이벤트
Controller Model View
기존 MVC
페이지를 단순히 그려주기만 했던 정적인 웹페이지에서는 문제가 없었다
01
02
03
04
05
React
Flux
Redux
Typescript
개선사항
단방향
문제가 생길 여지가 없다
23. Flux란? 인터렉티브하면서 발생한 문제점
데이터API이벤트
Controller Model View
기존 MVC
웹페이지가 인터렉티브하면서 문제가 생기게 되었다
01
02
03
04
05
React
Flux
Redux
Typescript
개선사항
이벤트
데이터
단방향이 아님
24. Flux란?
데이터API
Store View
기존 MVC
웹페이지가 인터렉티브하면서 문제가 생기게 되었다
01
02
03
04
05
React
Flux
Redux
Typescript
개선사항이벤트
Dispatcher
Dispatcher
Action
단방향을 만들어 문제를 해결하자
25. 01
02
03
04
05
React
Flux
Redux
Typescript
Flux란?
개선사항
기존 MVC의 한계를 해결하기 위한 단방향 데이터 아키텍쳐
https://facebook.github.io/flux/
Flux is the application architecture that Facebook uses for building client-side web applications
(https://facebook.github.io/flux/docs/in-depth-overview.html)
26. 01
02
03
04
05
React
Flux
Redux
Typescript
React + Flux로 서비스에 적용해보자
개선사항
Dispatcher StoreView Action
class MyView {
render() {
return <div>
…. callAction();
</div>
}
}
callAction() {
….
Dispatcher.
handleAction(
type: “MyAction”
payload: …
);
}
등록된 모든
store들에게
MyAction 이벤트가
발생했음을 알림
1. Dispatch에 등록
Dispatcher.register
2. 이벤트를 받을 준비
switch(type) {
case MyAction :
…. (저장) …
3. 이벤트를
발생시키면서 View에
알린다.
27. 01
02
03
04
05
React
Flux
Redux
Typescript
React + Flux로 서비스에 적용해보자
개선사항
Dispatcher StoreView Action
class MyView {
render() {
return <div>
…. callAction();
</div>
}
}
callAction() {
….
Dispatcher.
handleAction(
type: “MyAction”
payload: …
);
}
등록된 모든
store들에게
MyAction 이벤트가
발생했음을 알림
1. Dispatch에 등록
Dispatcher.register
2. 이벤트를 받을 준비
switch(type) {
case MyAction :
…. (저장) …
3. 이벤트를
발생시키면서 View에
알린다.
내가 안쓰고 말지…
31. 01
02
03
04
05
React
Flux
Redux
Typescript
Redux란?
개선사항
Redux is not that different from Flux. Overall it has same architecture. (…중략…)
I had one main objective: make it possible to change reducer code on the fly or even “change the past”
by crossing out actions, and see the state being recalculated. - Dan Abramov
(https://stackoverflow.com/questions/32461229/why-use-redux-over-facebook-flux)
Redux는 flux와 동일한 아키텍쳐를 가지고 있다.
Flux의 아이디어를 발전시켜서, Time Travel Debugging이 가능하게 만들었다.