iOS 개발자의 React 공부하며 느낀 점

2025. 11. 29. 20:48하루

iOS를 하다 React 개발을 하게 되어 공부를 하고있는데 다른 것도 많고 비슷한 것도 많았다.

공통점

  • SwiftUI에서 State/Observable 등을 통한 State 동기화
    • Flux 패턴
  • Environment와 Context를 통해 dependency 전달할 때 편리하게 관리
  • Stateful / Stateless component
  • 가상 Dom을 활용한 부분 렌더링 교체 방식
    • SwiftUI는 가상돔은 아니지만 tree의 diff 연산을 통해 부분 교체하는 점이 닮은 것 같음
  • tuist/pnpm(workspace) 등의 모노레포 트렌드

차이점

  • 트렌드의 빠른 변화
    • SSR이었다가 CSR이었다가 이제는 또 다시 SSR로 변경되었다. SSR로 다시 돌아왔다. 물론 SSR이 필수는 아니다.
    • 이 때문에 풀스택 개발자가 되어버렸다.
  • Lint, Format(Prettier), husky(git hook) 등의 툴이 발달
    • iOS 생태계도 SwiftFormat, SwiftLint 등이 있지만 웹프론트 생태계가 적극적으로 프로젝트에 비해 아직 선택의 영역인 것 같다
  • typescript를 활용하여 type check가 이뤄지긴 하지만 swift에 비해 type safe하지 않음
    • type 때문에 발생하는 런타임 에러가 많음
  • React가 너무 프레임워크 의존적임
    • 처음 Learning React를 보며 학습했는데 Create React App이 deprecated되고, framework 의존적되게 되었다. 예를 들어, Next.js 또는 React-Router 빌드
  • 너무 많은 프레임워크/라이브러리
    너무 많아서 뭘로 시작해야할지 머리가 아팠다.
    • 빌드: Webpack, Vite
    • 상태 관리: Recoil, Zustand, TanStack Query ..
    • React Router, Next.js's AppRouter, TanStack Router

느낀점

다른 언어를 배운다는 것

처음에 Swift만 하다가 다른 언어를 배운다는 게 겁이 났다. 새로운 문법, 새로운 프레임워크 등... 아직은 익히는 중이지만, 한 언어를 깊게 공부하면 다른 언어를 배우는 것의 난이도가 내려간다는 것을 느끼는 중이다. syntax가 다르지만, 코드를 통해 구현하려는 것은 같다는 것을 느꼈다. 또한, 메모리 관리, 동기화, OOP, 의존성 관리 등 프로그래밍 언어 그 자체가 가지는 개념은 비슷한 것 같다.

 

다른 언어를 배우면서 오히려 swift의 특장점도 알게 되었다.

swif를 배울 때는 왜 당연한 걸 특징이라고 하면서 강조하지 했는데 다른 언어는 그렇지 않다는 것도 배우게 됐다. 특히 swift가 모던 프로그래밍 언어라서 제공하는 점이 많다는 것도 깨달았다.

오픈소스 생태계

웹개발자의 수가 앱개발자에 비해 많다보니 오픈소스 생태계가 매우 활발하다를 넘어서 주도하는 것 같다. iOS가 오픈소스가 비교적 제한되어있는데 반해 오픈소스 생태계가 발달한 만큼 왜 이 기술스택을 선택했는지가 중요한 것 같다. 
러닝 커브, 팀 역량, 프로젝트의 복잡도, 앞으로의 전망 등 선택의 이유가 명확해야 한다. 해당 라이브러리/프레임워크의 철학이나 작동 방식, 추가 지원 기능 등 상당히 다르다.

반면 iOS에서는 특정 오픈소스가 독점하고 있거나, 오픈소스의 유지보수를 신뢰하지 못하는 이유로 네이티브를 선호해서 사내에서 따로 개발해서 사용한다. 그래서 선택의 이유가 물론 있지만 웹프론트만큼 중요하진 않은 것 같다.

배포 및 폐쇄성 

iOS는 애플 스토어를 통해 배포하기 때문에 심사를 거쳐야한다. 때문에 빠른 배포의 불편, 저작권 심사 규정이라던가, 빠른 아이디어 실현 등이 웹에 비해서 제한적이다. 대신에 앱에서 동작하기 때문에 호스팅을 걱정할 필요도 없고, 앱 스토어 생태계가 잘 구축되어 있고 수익화도 가능하다. 앱 클립을 통한

웹앱

모바일 웹앱은 기능이 제한적이거나 매우 느리다고 생각해왔는데 이번에 웹앱 서비스들을 많이 사용해보며 기존의 생각이 틀렸다는 걸 깨달았다.

웹앱은 설치가 필요없이 링크를 통해 바로 앱을 사용할 수 있고, 심사를 거치지 않기 때문에 배포하면 바로 반영된다. 저작권 등 콘텐츠 제한적인 부분에서 매우 자유롭다. 웹앱 몇개를 사용해봤는데 SNS 로그인, 콘텐츠 편집, 미디어 재생 등 앱과 비슷한 경험을 제공하여 놀랐다. 또한, 속도 또한 매우 빨랐는데 iOS처럼 자연스러운 애니메이션까지는 아니었지만 과거 웹뷰를 생각했을 때와는 전혀 다른 경험이었다.

이제 사실상 대부분의 서비스는 웹앱으로 가능한 것 같다.

 

반면 단점도 컷는데 오픈 소스 생태계가 편해진 만큼 의존성이 너무 커져서, 단순한 웹앱도 호스팅이 필요하고 구독이 필요하게 된 거 같다. 레딧을 글을 봤는데 어떻게 하면 vercel에서 coolify, render같은 플랫폼으로 마이그레이션하는지 고민하는 글에 댓글이 107개나 달렸다.

 

모바일 네이티브가 살아남기 위해서는 앱만이 줄 수 있는 유저 경험을 극대화한 서비스만이 살아남을 것 같다.

앱 사이드 프로젝트를 하더라도 아래 특징을 살린 프로젝트를 해야할 것 같다.

  • 앱 / 위젯 / 액티비티 킷 통한 앱 유저 경험 극대화
  • 알림(PWA는 가능하다고 함)
  • 카메라 및 위치 모션 헬스 센서
  • 백그라운드 잡 / Persistant Storage 등을 offline-first 앱
  • AR / 고성능 렌더링(Rust 통해 웹도 가능) / 애니메이션 등 디바이스 자원 활용