React SPA

hyena_leeΒ·2023λ…„ 1μ›” 25일
0

React

λͺ©λ‘ 보기
3/10
post-thumbnail

πŸŒ– Reactλž€ 무엇?

ReactλŠ” μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€κΈ° μœ„ν•œ JavaScript λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€.
λ¦¬μ•‘νŠΈλŠ” μΈν„°λ ‰μ…˜μ΄ λ§Žμ€ μ›Ή 앱을 κ°œλ°œν•˜κΈ° μœ„ν•΄μ„œ 주둜 μ‚¬μš©λ©λ‹ˆλ‹€.
κ·ΈλŸ¬κΈ°μ— μ΄λŸ¬ν•œ μ›Ή 앱을 λ§Œλ“œλŠ” λ‹€λ₯Έ Tool인 Vueλ‚˜ Angualar와 많이 비ꡐλ₯Ό ν•˜κ²Œ λ©λ‹ˆλ‹€.

β–ΆοΈν”„λ ˆμž„μ›Œν¬μ™€ 라이브러리의 차이?

ν”„λ ˆμž„ μ›Œν¬λŠ” μ–΄λ– ν•œ 앱을 λ§Œλ“€κΈ° μœ„ν•΄ ν•„μš”ν•œ λŒ€λΆ€λΆ„μ˜ 것을 가지고 μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€.
λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ–΄λ– ν•œ νŠΉμ • κΈ°λŠ₯을 λͺ¨λ“ˆν™” 해놓은 κ²ƒμž…λ‹ˆλ‹€.

이 μœ„μ— 그림을 보면 ν”„λ ˆμž„ μ›Œν¬λŠ” 라이브러리λ₯Ό ν¬ν•¨ν•˜κ³  λ˜ν•œ μš°λ¦¬κ°€ μž‘μ„±ν•œ μ†ŒμŠ€ μ½”λ“œλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€. 그리고 μ†ŒμŠ€ μ½”λ“œλŠ” μ–΄λ– ν•œ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œ 라이브러리λ₯Ό ν˜ΈμΆœν•˜κ²Œ λ©λ‹ˆλ‹€.


μ΄λ ‡κ²Œ ν”„λ ˆμž„μ›Œν¬λŠ” 앱을 λ§Œλ“œλŠ”λ° ν•„μš”ν•œ λŒ€λΆ€λΆ„μ˜ 라이브러리λ₯Ό 가지고 있으며, λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ€ νŠΉμ • κΈ°λŠ₯을 μœ„ν•΄ λͺ¨λ“ˆν™” λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

πŸ”Άλ¦¬μ•‘νŠΈλŠ” ν”„λ ˆμž„μ›Œν¬κ°€ μ•„λ‹Œ 라이브러리

λ¦¬μ•‘νŠΈκ°€ 라이브러리인 μ΄μœ λŠ” λ¦¬μ•‘νŠΈλŠ” μ „μ μœΌλ‘œ UIλ₯Ό λ Œλ”λ§ ν•˜λŠ” 데 κ΄€μ—¬ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.
그리고 화면을 λ°”κΎΈλŠ” λΌμš°νŒ…μ€ react-router-dom λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λ©°, μƒνƒœ 관리λ₯Ό μœ„ν•΄μ„œλŠ” redux, mobx λ“± μ—¬λŸ¬ λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λ©°, λΉŒλ“œλ₯Ό μœ„ν•΄μ„œλŠ” webpack, npm λ“±λ“±, ν…ŒμŠ€νŒ…μ„ μœ„ν•΄μ„œλ„ Eslint, Mocha 등을 μ΄μš©ν•˜κΈ° λ•Œλ¬Έμ— λ¦¬μ•‘νŠΈλŠ” ν”„λ ˆμž„μ›Œν¬κ°€ μ•„λ‹Œ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€.

πŸŒ– λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈ

λ¦¬μ•‘νŠΈλŠ” μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ΄μš©ν•΄μ„œ μ›Ή 앱을 κ°œλ°œν•˜κ²Œ λ©λ‹ˆλ‹€.
그러면 μ»΄ν¬λ„ŒνŠΈλŠ” λ¬΄μ—‡μΌκΉŒμš”?!

  • μ»΄ν¬λ„ŒνŠΈ: λ¦¬μ•‘νŠΈλ‘œ λ§Œλ“€μ–΄μ§„ 앱을 μ΄λ£¨λŠ” μ΅œμ†Œν•œμ˜ λ‹¨μœ„

λ¦¬μ•‘νŠΈλŠ” μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈ 쑰각으둜 λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€.
λ§Œμ•½ ν•˜λ‚˜μ˜ νŽ˜μ΄μ§€λ₯Ό λ¦¬μ•‘νŠΈλ‘œ λ§Œλ“ λ‹€κ³  보면 μ•„λž˜ 그림처럼 μ—¬λŸ¬κ°œμ˜ μ»΄ν¬λ„ŒνŠΈκ°€ λͺ¨μ—¬μ„œ ν•˜λ‚˜μ˜ νŽ˜μ΄μ§€λ₯Ό 이루게 λ©λ‹ˆλ‹€.

λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈλŠ” 두가지가 μžˆμŠ΅λ‹ˆλ‹€.

μ›λž˜ λ¦¬μ•‘νŠΈλ‘œ κ°œλ°œν•  λ•ŒλŠ” 클래슀 μ»΄ν¬λ„ŒνŠΈλ₯Ό μ΄μš©ν•΄μ„œ 많이 κ°œλ°œμ„ ν–ˆμ§€λ§Œ λ¦¬μ•‘νŠΈμ—μ„œ λ¦¬μ•‘νŠΈ HooksλΌλŠ” 것을 λ°œν‘œν•œ μ΄ν›„λΆ€ν„°λŠ” ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈλ₯Ό μ΄μš©ν•΄μ„œ κ°œλ°œμ„ 많이 ν•©λ‹ˆλ‹€.


πŸŒ– λΈŒλΌμš°μ €κ°€ κ·Έλ €μ§€λŠ” 원리 및 가상돔

λ¦¬μ•‘νŠΈμ˜ μ£Όμš” νŠΉμ§• 쀑 ν•˜λ‚˜λŠ” 가상(Virtual)돔을 μ‚¬μš©ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.
그럼 가상돔에 λŒ€ν•΄μ„œ μ•Œμ•„λ΄μ•Όν•˜λŠ”λ° μš°μ„  가상돔을 μ™œ μ‚¬μš©ν•˜λŠ”μ§€ μ•ŒκΈ° μœ„ν•΄μ„œ
λ¨Όμ € μ‹€μ œ(Real) 돔(DOM)에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ³  λΈŒλΌμš°μ €κ°€ λ Œλ”λ§ν•˜λŠ” 과정에 λŒ€ν•΄μ„œλ„ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

πŸ”ΉHTML 을 μ΄μš©ν•œ 화면에 UI ν‘œν˜„ν•˜κΈ°

λΈŒλΌμš°μ €μ—μ„œ UIλ₯Ό λ³Ό 수 μžˆλŠ” 것은 이 HTML 을 λΆ„μ„ν•΄μ„œ 보여쀄 수 μžˆμŠ΅λ‹ˆλ‹€.
이 HTML은 μš”μ†Œ(Element)λ“€λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

🌞 돔 μ΄λž€? (Document Object Model)

μœ„μ—μ„œ λ³΄λŠ” μ›Ή νŽ˜μ΄μ§€λ₯Ό μ΄λ£¨λŠ” μš”μ†Œλ“€μ„ μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μ΄μš©ν•  수 μžˆκ²Œλ” λΈŒλΌμš°μ €κ°€ 트리ꡬ쑰둜 λ§Œλ“  객체 λͺ¨λΈμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

▢️돔 μ‘°μž‘

μœ„μ— λ³΄μ΄λŠ” DOM 트리λ₯Ό DOM μ—μ„œ μ œκ³΅ν•΄μ£ΌλŠ” APIλ₯Ό μ΄μš©ν•΄μ„œ μ‘°μž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
이 APIλ₯Ό μ΄μš©ν•΄μ„œ DOM ꡬ쑰에 μ ‘κ·Όν•˜κ±°λ‚˜ μ›ν•˜λŠ” μš”μ†Œ(Element)λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μ—†μ• κ±°λ‚˜ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸŒ– μ›Ή νŽ˜μ΄μ§€ λΉŒλ“œ κ³Όμ •(Critical Rendering Path CRP)

λΈŒλΌμš°μ €κ°€ μ„œλ²„μ—μ„œ νŽ˜μ΄μ§€μ— λŒ€ν•œ HTML 응닡을 λ°›κ³  화면에 ν‘œμ‹œν•˜κΈ° 전에 μ—¬λŸ¬ 단계가 μžˆμŠ΅λ‹ˆλ‹€.
μ›Ή λΈŒλΌμš°μ €κ°€ HTML λ¬Έμ„œλ₯Ό 읽고, μŠ€νƒ€μΌ μž…νžˆκ³  λ·°ν¬νŠΈμ— ν‘œμ‹œν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€.

β–ΆοΈκ·ΈλŸΌ 가상돔은 μ–΄λ– ν•œ μ‹μœΌλ‘œ μž‘λ™ λ κΉŒμš”?

λ¦¬μ•‘νŠΈμ—μ„œλŠ” 항상 λ Œλ”λ§ μ΄μ „μ˜ 객체(가상돔)와 λ Œλ”λ§ μ΄ν›„μ˜ 객체(가상돔)λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€.
λ¦¬μ•‘νŠΈμ—μ„œλŠ” μ–΄λ– ν•œ State(데이터)κ°€ λ°”λ€Œλ©΄ 가상돔이 μƒˆλ‘œ μƒμ„±λ©λ‹ˆλ‹€.
그리고 이것을 이전에 생긴 가상돔과 λΉ„κ΅ν•΄μ„œ 바뀐 λΆ€λΆ„λ§Œ μ‹€μ œ 돔에 μ μš©μ„ μ‹œμΌœμ€λ‹ˆλ‹€.
바뀐 뢀뢄을 μ°ΎλŠ” 과정을 Diffing이라고 λΆ€λ₯΄λ©°,
바뀐 λΆ€λΆ„λ§Œ μ‹€μ œ 돔에 μ μš©μ‹œμΌœμ£ΌλŠ” 것을 μž¬μ‘°μ •(reconciliation)이라고 λΆ€λ¦…λ‹ˆλ‹€.

🌎 결둠

React λŠ” Reconciliation을 ν†΅ν•΄μ„œ λ§Œμ•½ μ—΄κ°œμ˜ State데이터가 λ³€ν•œλ‹€λ©΄ DOM을 μ—΄λ²ˆ λ°˜λ³΅ν•΄μ„œ μ‘°μž‘ν•΄μ£ΌλŠ” 것이 μ•„λ‹Œ Virtual DOM을 λΉ„κ΅ν•΄μ„œ ν•œλ²ˆμ˜ DOM μ‘°μž‘μœΌλ‘œ λͺ¨λ“  λ³€ν™”λ₯Ό λ°˜μ˜μ‹œμΌœμ€λ‹ˆλ‹€.

🌳 정리

  1. λ¦¬μ•‘νŠΈμ˜ 가상돔은 μ‹€μ œ DOMκ³Ό 같은 λ‚΄μš©μ„ λ‹΄κ³  있으며 μžλ°”μŠ€ν¬λ¦½νŠΈ 객체 ν˜•νƒœλ‘œ λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜μ–΄ μžˆλŠ” λ³΅μ‚¬λ³Έμž…λ‹ˆλ‹€.

  2. λ¦¬μ•‘νŠΈλŠ” λ Œλ”λ§ μ΄μ „μ˜ λ‚΄μš©μ„ λ‹΄κ³  μžˆλŠ” 가상돔과 λ³€κ²½ 이후에 보일 λ‚΄μš©μ„ λ‹΄κ³  μžˆλŠ” 가상돔을 가지고 μžˆμŠ΅λ‹ˆλ‹€.

  3. 변경이 되기 μ „ 가상돔과 변경이 된 ν›„μ˜ 가상돔을 λΉ„κ΅ν•˜λŠ” 과정을 Diffing이라고 λΆ€λ¦…λ‹ˆλ‹€.

  4. Diffing을 ν†΅ν•΄μ„œ λ³€κ²½λœ 뢀뢄듀을 νŒŒμ•…ν•œ ν›„, λ¦¬μ•‘νŠΈλŠ” Batch Updateλ₯Ό μˆ˜ν–‰ν•΄μ„œ μ‹€μ œ DOM에 ν•œ λ²ˆμ— μ μš©μ‹œμΌœμ€λ‹ˆλ‹€. μ΄λŸ¬ν•œ 과정을 μž¬μ‘°μ •(Reconciliation)이라고 ν•©λ‹ˆλ‹€.


πŸŒ– SPA(Single Page Application)

전톡적인 μ›Ή μ‚¬μ΄νŠΈλ₯Ό λ§Œλ“€ λ•Œ μ‚¬μš©ν•˜λŠ” Multi Page Application μž…λ‹ˆλ‹€.
ν•˜μ§€λ§Œ μš”μ¦˜μ—λŠ” μ›Ή μ‚¬μ΄νŠΈμ˜ 전체 νŽ˜μ΄μ§€λ₯Ό ν•˜λ‚˜μ˜ νŽ˜μ΄μ§€μ— λ‹΄μ•„ λ™μ μœΌλ‘œ 화면을 λ°”κΏ”κ°€λ©° ν‘œν˜„ν•©λ‹ˆλ‹€. 이것을 SPA Single Page Application이라고 λΆ€λ¦…λ‹ˆλ‹€.

▢️SPAμ—μ„œ ν™”λ©΄ 변경은 μ–΄λ–»κ²Œ μΌμ–΄λ‚˜λŠ” 걸까?

전톡적인 μ›Ή μ‚¬μ΄νŠΈλŠ” a page μ—μ„œ b page둜 νŽ˜μ΄μ§€ μ „ν™˜ ν•  λ•Œ a.html 을 보여주닀가 b.html을 보여 μ£Όλ©΄ λμ§€λ§Œ index.html 밖에 μ—†λŠ” SPAμ—μ„œλŠ” μ–΄λ–»κ²Œ νŽ˜μ΄μ§€ μ „ν™˜(λΈŒλΌμš°μ§•)을 ν•΄μ€„κΉŒμš”?
HTML 5의 History APIλ₯Ό μ‚¬μš©ν•΄μ„œ κ°€λŠ₯ν•˜κ²Œ λ§Œλ“­λ‹ˆλ‹€.
μžλ°”μŠ€ν¬λ¦½νŠΈ μ˜μ—­μ—μ„œ History APIλ₯Ό μ΄μš©ν•΄μ„œ ν˜„μž¬ νŽ˜μ΄μ§€ λ‚΄μ—μ„œ ν™”λ©΄ 이동이 μΌμ–΄λ‚œ κ²ƒμ²˜λŸΌ μž‘λ™ν•˜κ²Œ ν•΄μ€λ‹ˆλ‹€.

▢️전톡적인 μ›Ήμ‚¬μ΄νŠΈμ˜ ν•œκ³„

μœ μ €κ°€ ν•œ μ›Ήμ‚¬μ΄νŠΈλ‚΄μ—μ„œ λ‹€λ₯Έ μ›ΉνŽ˜μ΄μ§€λ‘œ 이동할 λ•Œλ§ˆλ‹€ μ„œλ²„λ‘œλΆ€ν„° html 파일둜 된 "νŽ˜μ΄μ§€ 전체"λ₯Ό λΆˆλŸ¬μ™€μ•Όν•¨(MPA)

=> 였래 κ±Έλ¦Ό, 화면이 "κΉœλΉ‘μž„" => μ‚¬μš©μž μž…μž₯μ—μ„œ 느린 λ°˜μ‘μ„± => μ‚¬μš©μž κ²½ν—˜ 질 μ €ν•˜
=> νŽ˜μ΄μ§€ 이동할 λ•Œλ§ˆλ‹€ νŽ˜μ΄μ§€ 전체λ₯Ό λΆˆλŸ¬μ˜€λ‹€λ³΄λ‹ˆ Headerλ‚˜ Nav 같은 μ€‘λ³΅λ˜λŠ” μš”μ†Œλ₯Ό 맀번 λΆ€λ₯΄λ©΄,, μ„œλ²„μ™€μ˜ λΆˆν•„μš”ν•œ νŠΈλž˜ν”½ λ°œμƒ

SPA λ“±μž₯
νŽ˜μ΄μ§€ μ „ν™˜ν•  λ•Œ HTML λ¬Έμ„œ 전체가 μ•„λ‹Œ, μ—…λ°μ΄νŠΈμ— ν•„μš”ν•œ λ°μ΄ν„°λ§Œ μ„œλ²„μ—μ„œ 전달받아 이 데이터λ₯Ό JavaScriptκ°€ λ™μ μœΌλ‘œ HTML μš”μ†Œλ₯Ό μƒμ„±ν•΄μ„œ 화면에 λ³΄μ—¬μ€Œ

πŸ‘‰SPA μž₯점

μ‚¬μš©μžμ˜ 행동에 λΉ λ₯΄κ²Œ λ°˜μ‘ν•¨ => μ‚¬μš©μžμ™€μ˜ λΉ λ₯Έ μƒν˜Έμž‘μš©μ΄ κ°€λŠ₯함

μ„œλ²„ κ³ΌλΆ€ν•˜ 문제 μ™„ν™” => μš”μ²­λ°›μ€ λ°μ΄ν„°λ§Œ λ„˜κ²¨μ£Όλ©΄ 되기 λ•Œλ¬Έμž„

화면이 κΉœλΉ‘μ΄μ§€ μ•ŠμŒ => 더 λ‚˜μ€ μ‚¬μš©μž κ²½ν—˜ 제곡

**SPA λŒ€ν‘œμ‚¬λ‘€
Youtube, facebook, Gmail, airbnb, Netflix

πŸ‘‰SPA 단점

  • JS파일 크기가 큼 => 첫 ν™”λ©΄ λ‘œλ”© μ‹œκ°„μ΄ 길어짐
  • 검색엔진 μ΅œμ ν™” πŸ’©
    - ꡬ글, 넀이버 같은 검색 엔진은 html λ¬Έμ„œ λ‚΄μ˜ 각쒅 νƒœκ·Έλ‚˜, 링크λ₯Ό 뢄석함.
    - SPA의 경우, html파일이 λΉ„μ–΄ μžˆλ‹€λ³΄λ‹ˆ 검색 λ‘œλ΄‡μ΄ μΆ©λΆ„ν•œ 자료λ₯Ό μˆ˜μ§‘ν•˜μ§€ λͺ»ν•¨
    - λ”°λΌμ„œ, 검색 λ…ΈμΆœμ΄ μ€‘μš”ν•œ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ λŒ€μ‘μ±…μ„ λ”°λ‘œ λ§ˆλ ¨ν•΄μ•Ό => 개발의 λ³΅μž‘λ„ 증가

πŸŒ– Wireframe

  • λ””μžμΈ λ“€μ–΄κ°€κΈ° μ „ 단계
  • μ„ (wire)λ₯Ό μ΄μš©ν•΄ μœ€κ³½μ„ (frame)을 μž‘λŠ” 것
    => μ›ΉνŽ˜μ΄μ§€μ˜ λ ˆμ΄μ•„μ›ƒκ³Ό UIμš”μ†Œ 등에 λŒ€ν•œ λΌˆλŒ€
    => λ””μžμΈ 컨셉과 μ‚¬μ΄νŠΈ κΈ°λŠ₯에 λŒ€ν•œ 이해할 수 있음

**Mockup
데λͺ¨ μ‹œμ—°, 평가λ₯Ό μœ„ν•œ μ΅œμ†Œν•œμ˜ κΈ°λŠ₯만 담은 λͺ¨ν˜•
λ°μŠ€ν¬ν†±, 슀마트폰의 ν”„λ ˆμž„μ„ λ§μ”Œμ›Œ μ§κ΄€μ μœΌλ‘œ μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ λ””μžμΈν•œ 것

**Reactλ₯Ό μ΄μš©ν•΄ 유투브 앱을 λ§Œλ“ λ‹€λ©΄?
λ°”λ‘œ νŽ˜μ΄μ§€λ₯Ό λ§Œλ“€κΈ°λ³΄λ‹€, μ–΄λ–€ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€κ³  이듀을 μ–΄λ–»κ²Œ 쑰합할지뢀터 ꡬ상해야 함

와 그의 μžμ‹: ,

Header μ»΄ν¬λ„ŒνŠΈλŠ” 항상 ν™”λ©΄ 상단에 μœ„μΉ˜ν•¨.
=> ν•œ 번만 λ§Œλ“€μ–΄μ„œ λͺ¨λ“  νŽ˜μ΄μ§€μ—μ„œ μ‚¬μš©ν•˜λ„λ‘ μ„€κ³„λ‘œμ§ μž‘μ„±

와 그의 μžμ‹ :

ν™”λ©΄ μ€‘μ•™μ˜ ContentsList μ»΄ν¬λ„ŒνŠΈλŠ” μ˜μƒμ„ λ‹΄λŠ” 역할을 함

κ·Έ μ•ˆμ—λŠ” λ™μΌν•œ λ ˆμ΄μ•„μ›ƒμ˜ μ˜μƒλ¬Όλ“€μ΄ 반볡적인 ν˜•νƒœλ‘œ μ‘΄μž¬ν•¨ => μžμ‹ Content μ»΄ν¬λ„ŒνŠΈλ₯Ό ν•œ 번만 λ§Œλ“€μ–΄ μž¬μ‚¬μš©

: κ°€μž₯ μž‘μ€ λ‹¨μœ„μ˜ μ»΄ν¬λ„ŒνŠΈ, κ°€μž₯ λ‹€μ–‘ν•œ 정보λ₯Ό λ‹΄κ³  있음

Content μ»΄ν¬λ„ŒνŠΈ 상단 : Thumbnail
Content μ»΄ν¬λ„ŒνŠΈ 쀑앙 : Avatar, μ˜μƒμ†Œκ°œμ œλͺ©
Content μ»΄ν¬λ„ŒνŠΈ ν•˜λ‹¨ : 채널이름, 쑰회수, μ—…λ‘œλ“œν•œλ‚ μ§œ
Content μ»΄ν¬λ„ŒνŠΈλŠ” μ˜μƒκ³Ό κ΄€λ ¨λœ 데이터λ₯Ό μž…λ ₯λ°›μ•„(κ°μ²΄ν˜•νƒœ{속성&κ°’}), UI에 맞게 화면에 좜λ ₯ν•΄ 쀌

근데 이 λ°μ΄ν„°λŠ” ν•΄λ‹Ή μ˜μƒμ„ 눌러 μ‹œμ²­ν•˜κ³  μžˆμ„ λ•Œλ„, λ‹€λ₯Έ μ˜μƒμ„ μ‹œμ²­ν•  λ•Œ μΆ”μ²œμ˜μƒμœΌλ‘œμ„œ λŒ€κΈ° λͺ©λ‘μ— 뜰 λ•Œλ„ λ™μΌν•œ λ‚΄μš©μ΄ 화면에 좜λ ₯됨

μ–΄λ–€ μƒνƒœλ‘œ μžˆλŠλƒμ— 따라 좜λ ₯λ˜λŠ” μœ„μΉ˜λ§Œ μ‘°κΈˆμ”© λ‹¬λΌμ§ˆ λΏμž„

μ»΄ν¬λ„ŒνŠΈκ°€ 각자 고유의 κΈ°λŠ₯을 가지고 μžˆλ‹€λŠ” μ •μ˜? λ§žλŠ” λ§μ΄μ§€λ§Œ, 더 κ³ μ°¨μ›μ˜ λ¦¬μ•‘νŠΈ 개발자라면,,

κ·Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ•ˆμ—μ„œ λ‹€λ€„μ§€λŠ” 데이터λ₯Ό μ»΄ν¬λ„ŒνŠΈλ“€λΌλ¦¬ 보닀 유기적으둜 주고받을 수 μžˆλ„λ‘ 섀계할 수 μžˆμ–΄μ•Ό 함

profile
μ‹€μˆ˜λ₯Ό λ‘λ €μ›Œ 말고 계속 도전 ν•˜λŠ” 개발자의 μ—¬μ •!

0개의 λŒ“κΈ€