web/Node.js Express

React Native λž€?

κ°•μ˜μ„œ 2022. 8. 10. 12:39

μ΄λ²ˆμ— μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ 개발 ν”„λ‘œμ νŠΈ 2κ°œμ— μ°Έμ—¬ν•˜κ²Œ λ˜μ—ˆλ‹€.

두 μ•± κ°œλ°œμ— μ‚¬μš©ν•  react native에 λŒ€ν•΄ μ •λ¦¬ν•˜κ³  κ°œλ°œμ„ μ§„ν–‰ν•˜λ €κ³  ν•œλ‹€.

 

 

λ¦¬μ•‘νŠΈ λ„€μ΄ν‹°λΈŒ 

- νŽ˜μ΄μŠ€λΆμ—μ„œ κ³΅κ°œν•œ μ˜€ν”ˆμ†ŒμŠ€

- μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“œλŠ” λ¦¬μ•‘νŠΈ 기반

- iOS와 μ•ˆλ“œλ‘œμ΄λ“œμ—μ„œ λ™μž‘ν•˜λŠ” λ„€μ΄ν‹°λΈŒ λͺ¨λ°”일 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ ν”„λ ˆμž„μ›Œν¬

ex) 페이슀뢁, μΈμŠ€νƒ€κ·Έλž¨, ν•€ν„°λ ˆμŠ€νŠΈκ°€ μ΄κ²ƒμœΌλ‘œ 개발 

 

μž₯점

- μ›Ή κ°œλ°œμžκ°€ μ΅μˆ™ν•œ 기술(λ¦¬μ•‘νŠΈ, μžλ°”μŠ€ν¬λ¦½νŠΈ)을 μ΄μš©ν•˜μ—¬ λͺ¨λ°”일 μ•± κ°œλ°œμ„ ν•  수 있음

- 크둜슀 ν”Œλž«νΌ ν”„λ ˆμž„μ›Œν¬ : λŒ€λΆ€λΆ„μ˜ μ½”λ“œκ°€ ν”Œλž«νΌ κ°„ κ³΅μœ κ°€ κ°€λŠ₯ν•΄μ„œ iOS와 μ•ˆλ“œλ‘œμ΄λ“œλ₯Ό λ™μ‹œμ— κ°œλ°œν•  수 있음

- Fast Refresh κΈ°λŠ₯: λ¦¬μ•‘νŠΈ λ„€μ΄ν‹°λΉ„λŠ” λ³€κ²½λœ μ½”λ“œλ₯Ό μ €μž₯ν•˜κΈ°λ§Œ 해도 μžλ™μœΌλ‘œ λ³€κ²½λœ λ‚΄μš©μ΄ 적용된 화면을 확인할 수 있음

 

단점

- λ„€μ΄ν‹°λΈŒμ˜ μƒˆλ‘œμš΄ κΈ°λŠ₯을 μ‚¬μš©ν•˜λŠ” 데 였래 κ±Έλ¦Ό

μ•ˆλ“œλ‘œμ΄λ“œλ‚˜ iOSμ—μ„œ μ—…λ°μ΄νŠΈλ₯Ό 톡해 μ‹ κ·œ APIλ₯Ό λ¦¬μ•‘νŠΈ λ„€μ΄ν‹°λΈŒκ°€ μ§€μ›κΉŒμ§€ μ‹œκ°„μ΄ κ±Έλ¦Ό

- μž¦μ€ μ—…λ°μ΄νŠΈ. ν•œλ‘ 달 사이에 버전이 ν•˜λ‚˜μ”© μ˜¬λΌκ°€λŠ” 게 κ°œλ°œμ— λ°©ν•΄κ°€ 될 λ•Œλ„ μžˆλ‹€

- μœ μ§€λ³΄μˆ˜κ°€ 어렀움. 개발 λ‹¨κ³„μ—μ„œ λ¬Έμ œκ°€ 생겼을 λ•Œ 원인을 μ°Ύκ³  문제λ₯Ό ν•΄κ²°ν•˜λŠ”λ° λ§Žμ€ μ‹œκ°„μ΄ κ±Έλ¦Ό

 

 

<λ¦¬μ•‘νŠΈ λ„€μ΄ν‹°λΈŒ λ™μž‘ 방식>

Javascript ↔ Bridge ↔ Native

- λ¦¬μ•‘νŠΈ λ„€μ΄ν‹°λΈŒ μ—μ„œλŠ” 기기와 ν†΅μ‹ ν•˜λŠ” λͺ¨λ“  JS의 κΈ°λŠ₯을 λΆ„λ¦¬λœ μŠ€λ ˆλ“œλ‘œ μ²˜λ¦¬ν•˜λ©΄μ„œ μ„±λŠ₯ν–₯상을 이룸

- μžλ°”μŠ€ν¬λ¦½νŠΈ μŠ€λ ˆλ“œ: μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ” μž₯μ†Œμ΄λ©° 보톡 λ¦¬μ•‘νŠΈλ‘œ κ΅¬μ„±λ˜μ–΄ 있음

 

λΈŒλ¦Ώμ§€(Bridge)

- μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό μ΄μš©ν•΄ λ„€μ΄ν‹°λΈŒ 계측과 톡신할 수 μžˆλ„λ‘ μ—°κ²°ν•˜λŠ” μ—­ν• 

- λΈŒλ¦Ώμ§€λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ μŠ€λ ˆλ“œ(thread)μ—μ„œ 정보λ₯Ό λ°›μ•„ λ„€μ΄ν‹°λΈŒλ‘œ 전달

 

λ„€μ΄ν‹°λΈŒ μ˜μ—­

- 메인 μŠ€λ ˆλ“œ: UIλ₯Ό λ‹΄λ‹Ή

- 섀도(shadow) μŠ€λ ˆλ“œ: λ ˆμ΄μ•„μ›ƒμ„ κ³„μ‚°ν•˜λŠ” 데 μ‚¬μš©ν•˜λŠ” λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œ

- λ„€μ΄ν‹°λΈŒ λͺ¨λ“ˆ: 각 λͺ¨λ“ˆμ—λŠ” 자체 μŠ€λ ˆλ“œκ°€ μžˆλŠ”λ°, μ•ˆλ“œλ‘œμ΄λ“œμ˜ 경우 thread pool을 곡유

DOM

- λ¬Έμ„œ 객체 λͺ¨λΈ(The Document Object Model)둜 HTML, XML λ¬Έμ„œμ˜ ν”„λ‘œκ·Έλž˜λ° interface, λ¬Έμ„œμ˜ κ΅¬μ‘°ν™”λœ ν‘œν˜„

- ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄κ°€ DOM ꡬ쑰에 μ ‘κ·Όν•˜μ—¬ λ¬Έμ„œ ꡬ쑰, μŠ€νƒ€μΌ, λ‚΄μš© 등을 λ³€κ²½ν•  수 있음

- μ›Ή νŽ˜μ΄μ§€λ₯Ό 슀크립트 λ˜λŠ” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ μ‚¬μš©λ  수 있게 μ—°κ²°ν•˜λŠ” μ—­ν• 

- DOM은 μ›Ή νŽ˜μ΄μ§€μ˜ 객체 μ§€ν–₯ ν‘œν˜„μ΄λ©°, μžλ°”μŠ€ν¬λ¦½νŠΈμ™€ 같은 μŠ€ν¬λ¦½νŒ… μ–Έμ–΄λ₯Ό 톡해 DOM을 μˆ˜μ •ν•  수 있음

 

- DOM : 화면에 λ‚˜νƒ€λ‚˜λŠ” DOM

- 가상(virtual) DOM : 화면에 보이지 μ•Šμ§€λ§Œ 비ꡐλ₯Ό μœ„ν•΄ μ‘΄μž¬ν•˜λŠ” DOM, 데이터가 λ³€ν•  경우 μžλ™μœΌλ‘œ 화면을 λ‹€μ‹œ κ·Έλ¦Ό

  1. 데이터에 λ³€ν™”κ°€ 생김
  2. λ³€ν™”λœ 데이터λ₯Ό μ΄μš©ν•˜μ—¬ 가상 DOM을 κ·Έλ¦Ό
  3. 가상 DOMκ³Ό μ‹€μ œ DOM을 λΉ„κ΅ν•˜μ—¬ 차이점을 확인
  4. 차이점이 μžˆλŠ” λΆ€λΆ„λ§Œ μ‹€μ œ DOM에 μ μš©ν•˜μ—¬ κ·Έλ¦Ό

 

JSX ( JavaScript XML )

 

- μžλ°”μŠ€ν¬λ¦½νŠΈ ν™•μž₯ λ¬Έλ²•μœΌλ‘œ XML와 λΉ„μŠ·ν•¨

- JSXκ°€ μžλ°”μŠ€ν¬λ¦½νŠΈλ³΄λ‹€ 가독성이 μ’‹κ³  였λ₯˜ 검사에도 μš©μ΄ν•¨

μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œ μ•ˆμ— UI μž‘μ—…μ„ ν•  λ•Œ 가독성이 μ’‹κΈ° λ•Œλ¬Έμ— λ¦¬μ•‘νŠΈμ—μ„œ 많이 μ‚¬μš©ν•¨

- JSX둜 μž‘μ„±λœ μ½”λ“œλŠ” 바벨(Babel)을 μ‚¬μš©ν•˜μ—¬ μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ λ³€ν™˜

 

λ¦¬μ•‘νŠΈ λ„€μ΄ν‹°λΈŒμ—μ„œ λ¦¬μ•‘νŠΈ λ„€μ΄ν‹°λΈŒ μ›Ή(React Native for web)을 λ°œν‘œν•˜λ©΄μ„œ λ¦¬μ•‘νŠΈ λ„€μ΄ν‹°λΈŒλ‘œ μ›Ή κ°œλ°œκΉŒμ§€ κ°€λŠ₯ν•΄μ‘Œλ‹€.