SlideShare a Scribd company logo
한국카카오은행안정민
MVC, MVVM, ReactorKit, VIPER를
거쳐 RIB 정착기
Architecture 이야기
• 現 한국카카오은행 iOS 개발자 (16.10 ~ )
• 블로그 운영 : minsone.github.io
소개
• 기존 아키텍처에 왜 만족 못했는가?
• RIBs 아키텍처 도입까지 과정
• RIBs 아키텍처를 선택할 수 밖에 없었던 이유
• 기존 프로젝트를 RIBs로 바꿀 수 있을까?
• QnA
목차
기존 아키텍처에
왜 만족 못했는가?
MVC
MVVM
MVP
ReactorKit
VIPER
Flux
Clean
Architecture
RIBs
MVVM-
C
코드 표준화
재사용성
비즈니스
로직 단
순화
명확한
코드 위
치
테스트코
드
격리
화
수정 용이
함
기존 아키텍처에 왜 만족 못했
는가?
• 기존 기능 수정 및 확장 어려움
• 화면 단위가 아닌 프로세스 단위로 유연한 개
발 필요
• 더 확실한 안정화 필요
기존 아키텍처에 왜 만족 못했
는가?
• 기존 기능 수정 및 확장 어려움
• Swift 2버전부터 개발로 당시 Swift 이해도 낮음
• 당시 아키텍처의 표준화된 틀이 없음.
• 유연하지 않은 설계로 인한 기능 확장의 어려움.
• 16년 10월 : 3명 -> 19년 10월 16명
기존 아키텍처에 왜 만족 못했
는가?
• 기존 기능 수정 및 확장 어려움
• 화면 단위가 아닌 프로세스 단위로 유연한 개
발 필요
• 더 확실한 안정화 필요
기존 아키텍처에 왜 만족 못했
는가?
• 화면 단위가 아닌 프로세스 단위로 유연한 개발
필요
• Viewless 아키텍처가 필요.
• 자체 아키텍처 제작
• ReactorKit, Redux, Coordinator 등 아키텍처 참고
• 한 곳에서 많은 로직을 처리하게 코드가 변질됨.
• 재사용 어렵고, 새로운 비즈니스 로직을 넣기 어려움.
• 자체 제작 아키텍처의 유지보수 어려움.
기존 아키텍처에 왜 만족 못했
는가?
• 기존 기능 수정 및 확장 어려움
• 화면 단위가 아닌 프로세스 단위로 유연한 개
발 필요
• 더 확실한 안정화 필요
기존 아키텍처에 왜 만족 못했
는가?
• 더 확실한 안정화 필요
• 앞의 이유로 인한 테스트 코드 작성 시늉도 어려움
.
• 바쁘다는 핑계로 테스트를 제대로 못했던 문제
• 테스트 코드 템플릿 또는 가이드가 있는 아키텍처
가 거의 없음.
• 체계화된 테스트 코드 작성 방식이 필요
RIBs 도입까지
아키텍처 여정
적용했던 아키텍처 여정
• MV(C)
• MVVM
• ReactorKit
• VIPER
적용했던 아키텍처 여정
• MV(C)
• MVVM
• ReactorKit
• VIPER
적용했던 아키텍처 여정 -
MV(C)
출처 : developer.apple.com
적용했던 아키텍처 여정 -
MV(C)
• 장점
• 기존에 익숙하던 구조
• 비즈니스 로직이 거의 없는 단순한 화면에만 적용
• 단점
• 화면의 기능이 확장되면 코드가 잘 정리되지 않고
깔끔하게 작성하기 쉽지 않음.
적용했던 아키텍처 여정
• MV(C)
• MVVM
• ReactorKit
• VIPER
적용했던 아키텍처 여정 -
MVVM
출처 : Medium - iOS Architecture Patterns
적용했던 아키텍처 여정 -
MVVM
• 장점
• MVC보다는 코드가 정리되는 느낌적인 느낌
• 단점
• 복잡해질수록 ViewModel이 빠르게 비대해짐.
• 표준화된 틀이 존재하지 않아 사람마다 이해가 다름.
• 테스트 코드 작성이 가능하면서도 어려움.
• Rx의 허들 및 디버깅
적용했던 아키텍처 여정
• MV(C)
• MVVM
• ReactorKit
• VIPER
출처 : Github - ReactorKit
적용했던 아키텍처 여정 - ReactorK
• 장점
• 상태가 단방향으로 정리되어 View와 관계된 로직
이 깔끔함.
• 저자가 전수열님 - 언제든지 한국어로 물어볼 수
있음.
• 단점
• 프로세스 단위의 아키텍처가 아니라서 아쉬움.
적용했던 아키텍처 여정 - ReactorK
적용했던 아키텍처 여정
• MV(C)
• MVVM
• ReactorKit
• VIPER
적용했던 아키텍처 여정 - VIPER
출처 : Medium - iOS Architecture Patterns
적용했던 아키텍처 여정 - VIPER
• 장점
• V, I, P, E, R 역할이 명확하게 구분됨.
• 단점
• VIPER 아키텍처 설계가 여러 곳으로 난립함.
• 명확한 가이드, 테스트 코드 템플릿이 제대로 갖춰
지고 유지보수 되는 곳이 없음.
RIBs 아키텍처를 선택
할 수 밖에 없었던 이유
RIBs Architecture
출처 : Github - RIBs
Related Sessions
• RxRIBs, Multiplatform architecture with Rx Session Let’Swift 2018
RIBs 아키텍처를 선택할 수 밖에 없었던
이유
• 템플릿화된 코드 및 테스트 작성
• (강제)프로토콜 지향 프로그래밍
• 의존성 주입 DI
• Viewless RIB을 통한 비즈니스 로직 정리
RIBs 아키텍처를 선택할 수 밖에 없었던
이유
RIBs 아키텍처를 선택할 수 밖에 없었던
이유
O Own corresponding view
O Adds Storyboard file
O Own corresponding view
X Adds Storyboard file
X Own corresponding view
X Adds Storyboard file
O Own corresponding view
O Adds Storyboard file
O Own corresponding view
X Adds Storyboard file
X Own corresponding view
X Adds Storyboard file
RIBs 아키텍처를 선택할 수 밖에 없었던
이유
RIBs 아키텍처를 선택할 수 밖에 없었던
이유
RIBs 아키텍처를 선택할 수 밖에 없었던
이유
• 템플릿화된 코드 및 테스트 작성
• 기본적인 테스트 코드 추가
RIBs 아키텍처를 선택할 수 밖에 없었던
이유
• 템플릿화된 코드 및 테스트 작성
• 기본적인 테스트 코드 추가
• 테스트 관련 Mock 샘플 파일이 Tutorial2에서 제공
Tutorial2/TicTacToeTests/TicTacToeMocks.swift
RIBs 아키텍처를 선택할 수 밖에 없었던
이유
• 템플릿화된 코드 및 테스트 작성
• 기본적인 테스트 코드 추가
• 테스트 관련 Mock 샘플 파일이 Tutorial2에서 제공
• RIB 파일을 SourceKitten을 이용해 분석하여 Mock
코드 생성 스크립트 작성
RIBs 아키텍처를 선택할 수 밖에 없었던
이유
• 템플릿화된 코드 및 테스트 작성
• (강제)프로토콜 지향 프로그래밍
• 의존성 주입 DI
• Viewless RIB을 통한 비즈니스 로직 정리
Router Interactor
View
Routing
Interactable
Interact
or
Router Interactor
View
Routing
Interactable
Router
Router Interactor
View
Routing
Interactable
View
Router Interactor
View
Routing
Interactable
Router
Interact
or
View
Router
Interact
or
Child RIB
Parent RIB
Rx Observable Listener
Router
Interact
or
View
Router
Interact
or
Child RIB
Parent RIB
Rx Observable Listener
Router
Interact
or
View
Router
Interact
or
Router
Interact
or
Router
Interact
or
View
RIBs 아키텍처를 선택할 수 밖에 없었던
이유
• 템플릿화된 코드 및 테스트 작성
• (강제)프로토콜 지향 프로그래밍
• 의존성 주입 DI
• Viewless RIB을 통한 비즈니스 로직 정리
RIBs 아키텍처를 선택할 수 밖에 없었던
이유
• 의존성 주입 DI
• 해당 RIB에서 필요한 속성을 Dependency에 정의.
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
Dependency 확장
name, nickName 필요
RIBs 아키텍처를 선택할 수 밖에 없었던
이유
• 의존성 주입 DI
• 해당 RIB에서 필요한 속성을 Dependency에 정의.
• Dependency에 정의된 요소들을 구현 필요.
• Dependency가 확장되면 컴파일 에러 발생
• 해당 RIB을 사용하는 곳은 모든 곳에서 다 작성해
야 함.
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
RIBs 아키텍처를 선택할 수 밖에 없었던
이유
• 템플릿화된 코드 및 테스트 작성
• (강제)프로토콜 지향 프로그래밍
• 의존성 주입 DI
• Viewless RIB을 통한 비즈니스 로직 정리
RIBs 아키텍처를 선택할 수 밖에 없었던
이유
• Viewless RIB을 통한 비즈니스 로직 정리
• 복잡한 로직을 작은 단위의 RIB을 엮어 만듬.
RIBs 아키텍처를 선택할 수 밖에 없었던
이유
개설 가
능
대상자
조회
예금 개
설
시작
개설 가
능
상품 여
부
조회
상품 소
개
거래 제
한
해제
약관 목
록
예금 신
청서
작성
RIBs 아키텍처를 선택할 수 밖에 없었던
이유
개설 가
능
대상자
조회
예금 개
설
시작
거래 제
한
해제
개설 가
능
상품 여
부
조회
상품 소
개
약관 목
록
예금 신
청서
작성
RIBs 아키텍처를 선택할 수 밖에 없었던
이유
개설 가
능
대상자
조회
예금 개
설
시작
개설 가
능
상품 여
부
조회
상품 소
개
거래 제
한
해제
약관 목
록
예금 신
청서
작성
RIBs 아키텍처를 선택할 수 밖에 없었던
이유
개설 가
능
대상자
조회
예금 개
설
시작
개설 가
능
상품 여
부
조회
상품 소
개
거래 제
한
해제
약관 목
록
예금 신
청서
작성
기존 프로젝트를 RIBs
로 바꿀 수 있을까?
가능합니다.
지금 바꾸고 있으니까요.
어떻게 기존 프로젝트에 RIBs을 적용
할까?
• 신규 화면 또는 비즈니스 로직을 RIB으로 변경
• Packaging
어떻게 기존 프로젝트에 RIBs을 적용
할까?
• 신규 화면 또는 비즈니스 로직을 RIB으로 변경
• 비즈니스 로직만 처리하는 RIB을 호출하는 경우
어떻게 기존 프로젝트에 RIBs을 적용
할까?
• 신규 화면 또는 비즈니스 로직을 RIB으로 변경
• 비즈니스 로직만 처리하는 RIB을 호출하는 경우
어떻게 기존 프로젝트에 RIBs을 적용
할까?
• 신규 화면 또는 비즈니스 로직을 RIB으로 변경
• 비즈니스 로직만 처리하는 RIB을 호출하는 경우
• 화면 모듈을 RIB으로 연결하는 경우
어떻게 기존 프로젝트에 RIBs을 적용
할까?
• 신규 화면 또는 비즈니스 로직을 RIB으로 변경
• Packaging
어떻게 기존 프로젝트에 RIBs을 적용
할까?
• Packaging
• 프로젝트를 별도로 만들어 패키징하고 RIB을 작
게 시작.
• 코드 작성 및 테스트 코드 작성이 쉬워짐.
Related Sessions
• Static, Dynamic Framework 그리고
Encapsulation
Session
Letusgo 2019
Fall
• 프레임워크 주도 개발 Session
Letusgo 2019
Spring
어떻게 기존 프로젝트에 RIBs을 적용
할까?
• 신규 화면 또는 비즈니스 로직을 RIB으로 변경
• 격리화 & 패키징
• 찾아가는 서비스(고기 필요)
요약
요약 - RIB Architecture
• 장점
• 좀 더 템플릿화가 잘 되어 있음.
• 프로토콜 지향 프로그래밍을 할 수 밖에 없는 구조.
• 복잡한 로직 흐름을 모듈화 및 재사용에 강함.
• 단점
• 프로토콜 지향 프로그래밍으로 꼭 해야하지 하는 이해의 문
제
• 파일이 많이 생성되는 문제.
Reference
• LetsSwift 2018 - VCNC RIBs
• Github : Uber/RIBs
• Uber Engineering Blog
QnA
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기

More Related Content

PDF
iOS Modular Architecture with Tuist
PDF
InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf
PDF
DI Container를 이용하여 레거시와 모듈화를 동시에 잡기
PDF
20220716_만들면서 느껴보는 POP
PPTX
4. 대용량 아키텍쳐 설계 패턴
PPTX
Google Mobile Vision과 OpenCV로 card.io를 확장한 범용 카드번호인식 개발
PDF
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
PDF
Android Developer JeongJaeyun
iOS Modular Architecture with Tuist
InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf
DI Container를 이용하여 레거시와 모듈화를 동시에 잡기
20220716_만들면서 느껴보는 POP
4. 대용량 아키텍쳐 설계 패턴
Google Mobile Vision과 OpenCV로 card.io를 확장한 범용 카드번호인식 개발
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
Android Developer JeongJaeyun

What's hot (20)

PDF
포트폴리오 오경원
PDF
생산성을 높여주는 iOS 개발 방법들.pdf
PDF
An Introduction to Redux
PDF
우아한 모노리스
PDF
React Router: React Meetup XXL
PDF
진민완 포트폴리오
PDF
Multiplatform architecture ribs in swift
PDF
fastlane을 이용하여 iOS/Mac 앱 관리하기
PDF
심성환 개발자 포트폴리오
PDF
자바 서버 애플리케이션 아키텍처 안티 패턴
PDF
인프런 - 스타트업 인프랩 시작 사례
PPTX
React render props
PDF
Java開発の強力な相棒として今すぐ使えるGroovy
PDF
REST API Best (Recommended) Practices
PDF
Ksug2015 - JPA3, JPA 내부구조
PDF
ドメイン駆動設計 基本を理解する
PPTX
Introduction to spring boot
PDF
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
PDF
NDC 2015 삼시세끼 빌드만들기
PDF
What are Microservices | Microservices Architecture Training | Microservices ...
포트폴리오 오경원
생산성을 높여주는 iOS 개발 방법들.pdf
An Introduction to Redux
우아한 모노리스
React Router: React Meetup XXL
진민완 포트폴리오
Multiplatform architecture ribs in swift
fastlane을 이용하여 iOS/Mac 앱 관리하기
심성환 개발자 포트폴리오
자바 서버 애플리케이션 아키텍처 안티 패턴
인프런 - 스타트업 인프랩 시작 사례
React render props
Java開発の強力な相棒として今すぐ使えるGroovy
REST API Best (Recommended) Practices
Ksug2015 - JPA3, JPA 내부구조
ドメイン駆動設計 基本を理解する
Introduction to spring boot
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
NDC 2015 삼시세끼 빌드만들기
What are Microservices | Microservices Architecture Training | Microservices ...
Ad

Similar to MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기 (20)

PDF
Rx for iOS App. RxMVVM-DataCenter!
PDF
20170623 최신OS와 멀티플랫폼 개발 전략 with RAD Studio
PDF
RAD스튜디오 100% 활용하기
PPTX
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
PDF
프로그래밍 방식의 변천 과정
PPT
PDF
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장
PDF
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
PDF
임베디드 소프트웨어 개발에 아키텍처 프랙티스 도입
PPTX
분석과 설계
PDF
실용주의 아키텍트
PDF
[D2CAMPUS] Tech meet up ; iOS 개발편
PDF
RAD Studio 10.2 도쿄
PDF
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
PDF
델파이 @22
PDF
adios 2021 oct 유현식 발표자료
PDF
델파이 소스코드의재발견
PDF
MVVM Pattern for Android
PDF
2020년 11월 28일 개발자 이야기
PDF
스프링보다 중요한 스프링 이야기
Rx for iOS App. RxMVVM-DataCenter!
20170623 최신OS와 멀티플랫폼 개발 전략 with RAD Studio
RAD스튜디오 100% 활용하기
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 방식의 변천 과정
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
임베디드 소프트웨어 개발에 아키텍처 프랙티스 도입
분석과 설계
실용주의 아키텍트
[D2CAMPUS] Tech meet up ; iOS 개발편
RAD Studio 10.2 도쿄
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
델파이 @22
adios 2021 oct 유현식 발표자료
델파이 소스코드의재발견
MVVM Pattern for Android
2020년 11월 28일 개발자 이야기
스프링보다 중요한 스프링 이야기
Ad

More from 정민 안 (11)

PDF
Let'Swift 2024 - Plugin 패턴을 이용하여 기능 확장하기
PDF
20240516_동적_데이터을_대응하는_코드_작성하기.pdf
PDF
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
PDF
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
PDF
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
PPTX
Letusgo 2019 Summer - StringInterpolation and SwiftUI
PDF
A Framework Driven Development
PDF
Debugging with xcode, lldb and chisel
PDF
Introduce fastlane
PDF
Git lecture
PDF
형상관리 발표자료 안정민
Let'Swift 2024 - Plugin 패턴을 이용하여 기능 확장하기
20240516_동적_데이터을_대응하는_코드_작성하기.pdf
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
Letusgo 2019 Summer - StringInterpolation and SwiftUI
A Framework Driven Development
Debugging with xcode, lldb and chisel
Introduce fastlane
Git lecture
형상관리 발표자료 안정민

MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기