All

    React 데이터 바인딩

    React λŠ” 단방ν–₯ 데이터 바인딩을 ν•©λ‹ˆλ‹€. 데이터 λ°”μΈλ”©μ΄λž€? 화면에 λ³΄μ΄λŠ” 데이터와 λΈŒλΌμš°μ € λ©”λͺ¨λ¦¬μ— μžˆλŠ” 데이터λ₯Ό 일치 μ‹œν‚€λŠ” 것을 λ§ν•©λ‹ˆλ‹€. MVC μ—μ„œ View(화면에 λ³΄μ΄λŠ” 데이터, HTML) Model(λΈŒλΌμš°μ € λ©”λͺ¨λ¦¬μ— μžˆλŠ” 데이터, JS) 에 ν•΄λ‹Ήλ©λ‹ˆλ‹€. 데이터 바인딩은 μ–‘λ°©ν–₯κ³Ό 단방ν–₯으둜 λ‚˜λ‰©λ‹ˆλ‹€. 단방ν–₯ 데이터 바인딩 ν•œμͺ½ λ°©ν–₯으둜만 μ œμ–΄κ°€ κ°€λŠ₯ν•œ 것을 μ˜λ―Έν•©λ‹ˆλ‹€. JS(Model) μ—μ„œλŠ” 화면에 λ³΄μ΄λŠ” 데이터λ₯Ό μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ‚¬μš©μžλŠ” ν™”λ©΄μ—μ„œ 값을 λ³€κ²½ν•  μˆ˜λŠ” μžˆμ§€λ§Œ JS 에 μžˆλŠ” 데이터λ₯Ό μˆ˜μ •ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ•Œλ¬Έμ— ν™”λ©΄μ—μ„œ λ³€κ²½λœ 값을 κ°μ§€ν•΄μ„œ JS λ₯Ό μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. React 의 경우 state κ°€ 변경이 되면 set 으둜 값을 λ°”κΏ” μ£ΌλŠ” μž‘μ—…μ„ ν•΄μ•Ό ν•©λ‹ˆλ‹€...

    JS μœ μ‚¬λ°°μ—΄κ³Ό λ°°μ—΄μ˜ 차이점

    μœ μ‚¬ λ°°μ—΄κ³Ό 배열은 μ–΄λ–»κ²Œ λ‹€λ₯ΌκΉŒ? μœ μ‚¬ λ°°μ—΄ ν˜•νƒœ μ•„λž˜ λ³€μˆ˜λ“€μ„ 좜λ ₯해보면 λͺ¨λ‘ λ°°μ—΄κ³Ό ν˜•νƒœκ°€ κ°™μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ§„μ§œ 배열은 array λΏμž…λ‹ˆλ‹€. λΈŒλΌμš°μ €μ—μ„œ 데이터λ₯Ό λ„˜κ²¨μ€„ λ•Œ λ°°μ—΄μ²˜λŸΌ λ³΄μ΄λŠ” 객체λ₯Ό λ„˜κ²¨μ€λ‹ˆλ‹€. 이것을 μœ μ‚¬ 배열이라고 ν•©λ‹ˆλ‹€. let array = [1, 2, 3]; // [1, 2, 3] let nodes = document.querySelectorAll('div'); // NodeList [div, div, div, div, div, ...] let els = document.body.children; // HTMLCollection [noscript, link, div, script, ...] Array.isArray() λ©”μ„œλ“œλ‘œ array 인지 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. Array..

    github pages 둜 λ°°ν¬μ‹œ react-router μ„€μ • feat. λ°°ν¬ν–ˆλŠ”λ° 흰 ν™”λ©΄λ§Œ λ‚˜μ˜¬ λ•Œ

    github pages 둜 λ°°ν¬μ‹œ react-router μ„€μ • feat. λ°°ν¬ν–ˆλŠ”λ° 흰 ν™”λ©΄λ§Œ λ‚˜μ˜¬ λ•Œ

    λ‘œμ»¬μ—μ„œλŠ” 잘 μ‹€ν–‰λ˜λ˜ ν”„λ‘œμ νŠΈκ°€ github pages 둜 배포 ν›„ ν•˜μ–€ ν™”λ©΄λ§Œ λ‚˜μ˜¨λ‹€λ©΄? 원인 μ•„λž˜ 곡식 λ¬Έμ„œλ₯Ό 보면 CRA μ›Ή, 앱은 기본적으둜 μ„œλ²„ λ£¨νŠΈμ—μ„œ ν˜ΈμŠ€νŒ… λœλ‹€κ³  κ°€μ •ν•˜μ—¬ λΉŒλ“œλ©λ‹ˆλ‹€. λ•Œλ¬Έμ— λΉŒλ“œλ₯Ό ν•˜κ²Œ 되면 ν”„λ‘œμ νŠΈλŠ” https://leeseul-moon.github.io/todo_list/ 에 μ‘΄μž¬ν•©λ‹ˆλ‹€. (todo_list λŠ” ν”„λ‘œμ νŠΈ 폴더) ν•˜μ§€λ§Œ λΌμš°ν„°λŠ” μ œκ°€ 에 μž‘μ„±ν•œ 것을 따라 https://leeseul-moon.github.io/ 둜 μ΄λ™μ‹œν‚΅λ‹ˆλ‹€. ν”„λ‘œμ νŠΈ μœ„μΉ˜μ™€ λΌμš°ν„°κ°€ κ°€λ¦¬ν‚€λŠ” μœ„μΉ˜κ°€ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— λΌμš°ν„°κ°€ μ œλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•΄κ²° λΌμš°ν„°μ— κΈ°λ³Έ URL μ˜΅μ…˜μ„ μ£Όμ–΄ / κ°€ μ•„λ‹Œ /todo_list/ 둜 μ΄λ™μ‹œν‚΅λ‹ˆλ‹€. package.json 에 5번 쀄 heme..

    React ν”„λ‘œμ νŠΈ GitHub Pages λ°°ν¬ν•˜κΈ°

    React ν”„λ‘œμ νŠΈ GitHub Pages λ°°ν¬ν•˜κΈ°

    https://github.com/ λ¨Όμ € μœ„ μ‚¬μ΄νŠΈμ—μ„œ μƒˆλ‘œμš΄ Repository λ₯Ό λ§Œλ“­λ‹ˆλ‹€. νšŒμ› κ°€μž…μ„ ν•΄μ•Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. Repository 메뉴에 λ“€μ–΄κ°€λ©΄ λ…Ήμƒ‰μ˜ New λ²„νŠΌμ΄ μžˆμŠ΅λ‹ˆλ‹€. ν΄λ¦­ν•΄μ„œ 이름을 μž‘μ„±ν•˜κ³  public 으둜 λ§Œλ“€μ–΄ μ€λ‹ˆλ‹€. 생성을 ν•˜κ³  λ‚˜λ©΄ 방금 λ§Œλ“  Repo λ₯Ό ν΄λ¦­ν•΄μ„œ λ“€μ–΄κ°‘λ‹ˆλ‹€. 그럼 μ•„λž˜μ™€ 같이 λœ¨λŠ”λ° μ—¬κΈ°μ„œ λ…Ήμƒ‰μ˜ Code λ₯Ό ν΄λ¦­ν•˜μ—¬ Https νƒ­μ˜ 경둜λ₯Ό λ³΅μ‚¬ν•©λ‹ˆλ‹€. 터미널을 μΌ­λ‹ˆλ‹€. μœ„μ—μ„œ λ§Œλ“  κΉƒν—™ Repo 와 μ—°κ²°ν•  ν”„λ‘œμ νŠΈ ν΄λ”λ‘œ μ΄λ™ν•©λ‹ˆλ‹€. cd git remote add origin μ΄λ™ν•œ 후에 μœ„μ™€ 같이 μž…λ ₯ν•©λ‹ˆλ‹€. λΆ€λΆ„μ—λŠ” μ•„κΉŒ λ³΅μ‚¬ν•œ github 의 repo μ£Όμ†Œλ₯Ό λ„£μ–΄ μ€λ‹ˆλ‹€. μ•„λ¬΄λŸ° 였λ₯˜ λ©”μ‹œμ§€κ°€ λœ¨μ§€ μ•ŠλŠ”λ‹€λ©΄ 잘 μ—°κ²°λœ κ²λ‹ˆλ‹€. gi..

    220814~220820 3μ£Όμ°¨

    220814~220820 3μ£Όμ°¨

    1. React μ£Όμš” 컨셉 곡뢀 λ“œλ¦Όμ½”λ”© λ¦¬μ•‘νŠΈ κ°•μ˜λ₯Ό λ“€μœΌλ©° YouTube clone μ½”λ”© (유튜브 API ν™œμš©) πŸ‘‰ 볡슡 ν•„μˆ˜! ν˜Όμžμ„œ λ‹€μ‹œ λ§Œλ“€κΈ° 흐름 μ΄ν•΄λŠ” λ˜μ§€λ§Œ, open APIλ₯Ό ν™œμš©ν•˜λŠ” 것이 μ΅μˆ™ν•˜μ§€ μ•Šμ•„ μ–΄λ ΅λ‹€. API Key λŠ” μ™ΈλΆ€λ‘œ λ…ΈμΆœλ˜μ§€ μ•Šλ„λ‘ .env 에 λ„£κ³  관리해야 ν•œλ‹€. μ„œλΉ„μŠ€ κ΄€λ ¨ λ‘œμ§μ€ λ”°λ‘œ 관리해야 ν•œλ‹€. Dom κ°œλ… 곡뢀 참고자료 πŸ‘ https://wit.nts-corp.com/2019/02/14/5522 React 곡식 λ¬Έμ„œλ‘œ class component 와 function component 곡뢀 λ¦¬μ•‘νŠΈ 곡식 λ¬Έμ„œ main concepts 2. React κ΄€λ ¨ 라이브러리 곡뢀 μΊ ν”„μ—μ„œ 제곡된 ν•™μŠ΅ 자료λ₯Ό 보고 redux 곡뢀. todo list λ₯Ό redux du..

    React Component

    Component μ •μ˜ μ»΄ν¬λ„ŒνŠΈλŠ” UIλ₯Ό μž¬μ‚¬μš© κ°€λŠ₯ν•œ κ°œλ³„μ μΈ 쑰각으둜 λ‚˜λˆˆ 것을 λ§ν•©λ‹ˆλ‹€. μ»΄ν¬λ„ŒνŠΈλŠ” React μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό λ°˜ν™˜ν•˜λŠ”λ°, μ—˜λ¦¬λ¨ΌνŠΈλŠ” 화면에 ν‘œμ‹œν•  λ‚΄μš©μ„ κΈ°μˆ ν•˜λŠ” React 의 κ°€μž₯ μž‘μ€ λ‹¨μœ„μž…λ‹ˆλ‹€. λ¦¬μ•‘νŠΈλŠ” μ»΄ν¬λ„ŒνŠΈλ“€μ˜ 집합이라고 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ»΄ν¬λ„ŒνŠΈ 덕에 μž¬ν™œμš©μ„±μ„ 높이고 μœ μ§€λ³΄μˆ˜λ₯Ό μš©μ΄ν•˜κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ μ»΄ν¬λ„ŒνŠΈλŠ” 독립적이고 κ³ λ¦½λ˜μ–΄μžˆκ³  μž¬μ‚¬μš©μ΄ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. μ»΄ν¬λ„ŒνŠΈλŠ” ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ™€ ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈλ‘œ λ‚˜λˆ μ§‘λ‹ˆλ‹€. ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈλŠ” μ•„λž˜μ™€ 같이 μƒκ²ΌμŠ΅λ‹ˆλ‹€. function Welcome(props) { return Hello, {props.name}; } ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈλŠ” μ•„λž˜μ™€ 같이 μƒκ²ΌμŠ΅λ‹ˆλ‹€. class Welcome extends React.C..

    React.memo 써도 μ»΄ν¬λ„ŒνŠΈ 계속 λ Œλ”λ§ 됨... -> ν•΄κ²°!✌🏻 feat. useMemo, useCallback

    React.memo 써도 μ»΄ν¬λ„ŒνŠΈ 계속 λ Œλ”λ§ 됨... -> ν•΄κ²°!✌🏻 feat. useMemo, useCallback

    λΆˆν•„μš”ν•œ λ Œλ”λ§μ„ μ•ˆ ν•˜κ³  μ‹Άλ‹€..! μ„œλ‘ μ΄ κΉλ‹ˆλ‹€. λ°”μ˜μ‹  뢄듀은 μ•„λž˜λ‘œ μ­‰μ­‰ λ‚΄λ €μ„œ 문제점, 원인은? ν•΄κ²°! 이 λΆ€λΆ„λ§Œ λ³΄μ„Έμš”! λ¦¬μ•‘νŠΈ 곡뢀 5일차에 μ΄μ œκΉŒμ§€ 배운 것을 μ‹€μŠ΅ν•˜κΈ° μœ„ν•΄ Habit Tracker λ₯Ό λ§Œλ“€μ—ˆλ‹€. μŠ΅κ΄€μ„ μΆ”κ°€ν•  수 있고 μ˜†μ— +, - λ²„νŠΌμœΌλ‘œ 카운트λ₯Ό μˆ˜μ •ν•  수 μžˆλ‹€. 맨 μœ„μ— Habit Tracker μ˜† μˆ«μžλŠ” μŠ΅κ΄€ 리슀트 쀑 체크가 된 κ²ƒλ“€μ˜ κ°―μˆ˜λ‹€. μ„Έ ν•­λͺ© λ‹€ 0이 μ•„λ‹ˆλ‹ˆ 숫자 3이 λ‚˜μ˜¨λ‹€. 초초초초 λ‹¨μˆœν•œ μŠ΅κ΄€ 좔적기(?) πŸ˜‰ 클래슀 μ»΄ν¬λ„ŒνŠΈλ‘œ ν•΄λΉ— 트레컀 λ§Œλ“œλŠ” 인강 2λ°°μ†μœΌλ‘œ 보고 ν˜Όμžμ„œ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈλ‘œ λ§Œλ“€μ–΄ λ³Έ 거라 μ’€ ν—·κ°ˆλ Έλ‹€. 생각보닀 μ‹œκ°„μ΄ 더 κ±Έλ Έλ‹€. 근데 이거 λ§Œλ“œλŠ” 것보닀 React.memo κ³΅λΆ€ν•˜λŠ”λ° μ‹œκ°„ 더 κ±Έλ¦Ό γ…Ž λ¦¬μ•‘νŠΈ 컨셉은 λ‹¨μˆœν•˜λ‹€. ..

    React JSX λž€?

    JSX μ •μ˜ JSX λŠ” JavaScript λ₯Ό ν™•μž₯ν•œ λ¬Έλ²•μž…λ‹ˆλ‹€. JSX ν˜•μ‹μœΌλ‘œ μž‘μ„±ν•œ μ½”λ“œλŠ” λΈŒλΌμš°μ €μ—μ„œ μ‹€ν–‰λ˜κΈ° μ „, 바벨 Babel 을 μ΄μš©ν•΄ JSXλ₯Ό React.createElement() 호좜둜 μ»΄νŒŒμΌλ©λ‹ˆλ‹€. 즉, JSX λŠ” νŽΈν•˜κ²Œ React 'element' λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€. const element = ( Hello, world! ); μœ„μ˜ μ½”λ“œκ°€ JSX λ¬Έλ²•μœΌλ‘œ μž‘μ„±ν•œ κ²ƒμž…λ‹ˆλ‹€. 이 μ½”λ“œλŠ” 컴파일 ν›„ μ•„λž˜μ™€ 같이 λ³€κ²½λ©λ‹ˆλ‹€. μ•„λž˜μ˜ μ½”λ“œλŠ” React μ—˜λ¦¬λ¨ΌνŠΈμž…λ‹ˆλ‹€. React λŠ” 이 객체λ₯Ό μ½μ–΄μ„œ DOM을 κ΅¬μ„±ν•˜κ³  μ΅œμ‹  μƒνƒœλ‘œ μœ μ§€ν•˜λŠ” 데 μ‚¬μš©ν•©λ‹ˆλ‹€. const element = React.createElement( 'h1', {className: 'greeting'}, '..

    220807~220813 2μ£Όμ°¨

    220807~220813 2μ£Όμ°¨

    μ‹œκ°„μ΄ 미친 듯이 빨리 κ°”λ‹€. 이번 μ£Όμ°¨λŠ” μ•Œκ³ λ¦¬μ¦˜ μ£Όμ°¨ + λ¦¬μ•‘νŠΈ μž…λ¬Έ μ£Όμ°¨μ˜€λ‹€. 일-λͺ©μ€ μ•Œκ³ λ¦¬μ¦˜ 문제 풀이. κΈˆμš”μΌλΆ€ν„°λŠ” λ¦¬μ•‘νŠΈ 곡뢀 μ‹œμž‘! πŸ‘» μ €λ²ˆ 주에 κ³„νšν–ˆλ˜ 이번 주의 λͺ©ν‘œ κΉƒκ³Ό κΉƒν—™ 곡뢀 Git 인강을 보며 μ „μ²΄μ μœΌλ‘œ μ–΄λ–€ κΈ°λŠ₯이 있고 μ–΄λ–»κ²Œ μ“°λŠ” κ²ƒμΈμ§€λŠ” μ•Œμ•˜μ§€λ§Œ, κ·Έκ±Έ μ‹€μ œλ‘œ ν˜‘μ—…ν•˜λ©° μ“°μ§€λŠ” λͺ»ν•˜κ² λ‹€. 인강은 지식을 쉽고 λΉ λ₯΄κ²Œ 얻을 수 μžˆμ§€λ§Œ 그만큼 κΈ°μ–΅μ˜ νœ˜λ°œμ„±λ„ κ°•ν•˜λ‹€. λ•Œλ¬Έμ— κΈ°λ‘ν•˜μ§€ μ•ŠμœΌλ©΄ λͺ¨λ‘ 사라진닀. πŸ˜₯ κ·Έκ±Έ μ•Œλ©΄μ„œλ„ κΈ°λ‘ν•˜λ©° κ³΅λΆ€ν•˜μ§€ λͺ»ν•œ 것은, 쑰급함 λ•Œλ¬Έμ΄λ‹€. μ•„λ¬΄λž˜λ„ κΈ°λ‘ν•˜λ©° κ³΅λΆ€ν•˜λ©΄ μ‹œκ°„μ΄ 2λ°° 이상 λ“ λ‹€. 그리고 λ‹Ήμž₯ μ“Έ 지식이 μ•„λ‹ˆλ‹€ λ³΄λ‹ˆ μ€‘μš”μ„±μ€ μ•Œμ§€λ§Œ, ν•„μš”μ„±μ€ 떨어진닀. λ•Œλ¬Έμ— 1μ£Ό 차에 ν”„λ‘œμ νŠΈλ₯Ό ν•˜λ©° κ°€μž₯ ν•„μš”ν–ˆλ˜ 뢀뢄듀을 λ¨Όμ € μ •λ¦¬ν•˜λ € ν•œλ‹€. λ‹€μŒ ..

    JS ꡬ쑰뢄해 ν• λ‹Ή

    ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή Destructuring Assignment κ°μ²΄λ‚˜ 배열에 μ €μž₯된 데이터 전체가 μ•„λ‹Œ μΌλΆ€λ§Œ ν•„μš”ν•œ κ²½μš°μ— κ°μ²΄λ‚˜ 배열을 λ³€μˆ˜λ‘œ 'λΆ„ν•΄’ν•  수 있게 ν•΄μ£ΌλŠ” νŠΉλ³„ν•œ 문법인 ꡬ쑰 λΆ„ν•΄ 할당을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 객체 ꡬ쑰뢄해 ν• λ‹Ή // 일반적인 객체 속성 μ ‘κ·Ό const user = {name: "징징", age: 10}; console.log(user.name); // 징징 console.log(user.age); // 10 // ꡬ쑰뢄해 ν• λ‹Ή μ‚¬μš© βœ… const { name, age } = user; console.log(name); // 징징 console.log(age); // 10 ꡬ쑰 λΆ„ν•΄λ₯Ό μ‚¬μš©ν•˜λ©΄ 데이터에 μ ‘κ·Όν•˜κΈ° νŽΈν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ ν‚€ κ°’μœΌλ‘œ 뢈러온 것이기에 name 이 μ•„..

    JS μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ™€ 콜 μŠ€νƒ

    https://medium.com/sjk5766/call-stack%EA%B3%BC-execution-context-%EB%A5%BC-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90-3c877072db79 Call Stackκ³Ό Execution Context λ₯Ό μ•Œμ•„λ³΄μž 이 κΈ€μ—μ„œ Call Stackκ³Ό Execution Context에 λŒ€ν•΄ λ‹€λ£Ήλ‹ˆλ‹€. 각 μš©μ–΄λŠ” ν•œκ΅­μ–΄λ‘œ ν•΄μ„ν•˜μ§€ μ•Šκ³  μ˜μ–΄ κ·ΈλŒ€λ‘œ ν‘œκΈ°ν•©λ‹ˆλ‹€. medium.com μœ„ 링크λ₯Ό μ°Έκ³ ν•˜μ—¬ μ œκ°€ μ΄ν•΄ν•œ λΆ€λΆ„λ§Œ 제 μ‹λŒ€λ‘œ μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€. μœ„ 링크λ₯Ό λ³΄μ‹œλ©΄ 더 μžμ„Έν•˜κ²Œ κ·Έλ¦Όκ³Ό ν•¨κ»˜ 정보λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ Execution context μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ” ν™˜κ²½μ„ λ§ν•©λ‹ˆλ‹€. 크게 2κ°€μ§€λ‘œ λ‚˜λ‰©..

    JS ν˜Έμ΄μŠ€νŒ…κ³Ό TDZ

    ν˜Έμ΄μŠ€νŒ… hoisting μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μ „ μ½”λ“œ 전체λ₯Ό μŠ€μΊ”ν•˜λ©΄μ„œ ν˜•μƒν™” 및 κ΅¬λΆ„ν•˜λŠ” 과정을 κ±°μΉ˜λŠ”λ° 이 κ³Όμ •μ—μ„œ λ³€μˆ˜, ν•¨μˆ˜, 클래슀 λ“± λͺ¨λ“  선언을 μœ„λ‘œ λŒμ–΄ μ˜¬λ¦½λ‹ˆλ‹€. 인터프리터가 λ³€μˆ˜μ™€ ν•¨μˆ˜μ˜ λ©”λͺ¨λ¦¬ 곡간을 μ„ μ–Έ 전에 미리 ν• λ‹Ήν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. var 의 경우 ν˜Έμ΄μŠ€νŒ… μ‹œ undefined 둜 λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™” ν•˜μ§€λ§Œ, let κ³Ό const λ³€μˆ˜λŠ” μ΄ˆκΈ°ν™” λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ•Œλ¬Έμ— μ•„λž˜μ™€ 같은 μ½”λ“œ(1) κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ„ μ–ΈλΆ€λ§Œ λŒμ–΄μ˜¬λ € 놓은 것이기에, (2) μ½”λ“œμ²˜λŸΌ ν• λ‹Ήλœ 값을 κ°€μ Έ μ˜€λŠ” 것은 λΆˆκ°€λŠ₯ ν•©λ‹ˆλ‹€. add(1, 3); // (1) ν•¨μˆ˜ 선언보닀 μœ„μ— μžˆμ§€λ§Œ 였λ₯˜ λ‚˜μ§€ μ•Šκ³  μ‹€ν–‰λ©λ‹ˆλ‹€. console.log(a); // (2) μ—λŸ¬. ν• λ‹Ήλ˜μ§€ μ•Šμ€ 것을 좜λ ₯..

    2μ£Όμ°¨ μ‹€μŠ΅ 과제 - μ—λŸ¬λ‚˜λŠ” 이유 μ„€λͺ…

    let b = 1; function hi() { const a = 1; let b = 100; b++; console.log(a, b); } // console.log(a); // ReferenceError: a is not defined // μ „μ—­ μŠ€μ½”ν”„μ—μ„œ 둜컬 μŠ€μ½”ν”„μ˜ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μ—†μŠ΅λ‹ˆλ‹€. // h1() μ•ˆμ—μ„œ 좜λ ₯ν•˜λ©΄ 값이 잘 λ‚˜μ˜΅λ‹ˆλ‹€. console.log(b); // 1 hi(); // 1, 101 console.log(b); // 1 μŠ€μ½”ν”„μ˜ κ°œλ…μ„ μ•Œκ³  μžˆλ‹€λ©΄ μ‰½κ²Œ ν’€ 수 μžˆλŠ” μ‹€μŠ΅ 과제 μ˜€μŠ΅λ‹ˆλ‹€. μ°Έκ³  https://lazygay.tistory.com/17 JS μŠ€μ½”ν”„μ™€ μŠ€μ½”ν”„ 체인 μŠ€μ½”ν”„ Scope μŠ€μ½”ν”„λŠ” μ‹λ³„μž(λ³€μˆ˜, ν•¨μˆ˜, 클래슀 이름) μ ‘κ·Ό κ·œμΉ™μ— λ”°λ₯Έ 유효 λ²”μœ„μž…λ‹ˆλ‹€. ..

    JS μŠ€μ½”ν”„μ™€ μŠ€μ½”ν”„ 체인

    μŠ€μ½”ν”„ Scope μŠ€μ½”ν”„λŠ” μ‹λ³„μž(λ³€μˆ˜, ν•¨μˆ˜, 클래슀 이름) μ ‘κ·Ό κ·œμΉ™μ— λ”°λ₯Έ 유효 λ²”μœ„μž…λ‹ˆλ‹€. 즉, κ°„λ‹¨ν•˜κ²Œ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μžˆλŠ” μœ νš¨ν•œ λ²”μœ„λΌκ³  μƒκ°ν•˜λ©΄ λ©λ‹ˆλ‹€. μŠ€μ½”ν”„λŠ” λΈ”λŸ­ { } ν˜Ήμ€ ν•¨μˆ˜μ— μ˜ν•΄ λ‚˜λˆ μ§‘λ‹ˆλ‹€. (λΈ”λŸ­μ΄λΌ ν•˜λ©΄, if(){}, for(){} ... 등도 ν¬ν•¨ν•©λ‹ˆλ‹€.) μ•„λž˜ μ˜ˆμ‹œλ₯Ό 보면, λΈ”λŸ­ μ•ˆμ—μ„œλŠ” λΈ”λŸ­ 밖에 μžˆλŠ” k 도 λΈ”λŸ­ μ•ˆμ— μžˆλŠ” x 도 잘 좜λ ₯λ©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λΈ”λŸ­ λ°–μ—μ„œ λΈ”λŸ­ μ•ˆμ— μžˆλŠ” x λ₯Ό 좜λ ₯ν•˜λ €κ³  ν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€. ν•¨μˆ˜ λ°–μ—μ„œ μ •μ˜λœ k λ₯Ό μ „μ—­ λ³€μˆ˜, μ „μ—­ μŠ€μ½”ν”„ ( μ „μ²΄μ—μ„œ μ ‘κ·Ό 유효) ν•¨μˆ˜ λ‚΄μ—μ„œ μ •μ˜λœ x λ₯Ό 지역 λ³€μˆ˜, 지역 μŠ€μ½”ν”„ 라고 ν•©λ‹ˆλ‹€. (지역 λ‚΄μ—μ„œλ§Œ μ ‘κ·Ό 유효) λ°–(μ „μ—­) μ—μ„œλŠ” μ•ˆ(지역)의 λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μ—†μ§€λ§Œ, μ•ˆ(지역)μ—μ„œ..

    JS Equality operators == === != !==

    μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 값이 같은지 μ•„λ‹Œμ§€λ₯Ό 비ꡐ할 λ•Œ μ‚¬μš©ν•˜λŠ” 동일 μ—°μ‚°μžλ₯Ό μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. == : 값이 κ°™μŒ === : κ°’κ³Ό νƒ€μž… λ‘˜ λ‹€ κ°™μŒ != : 값이 닀름 !== : κ°’κ³Ό νƒ€μž… λ‘˜ 쀑에 ν•˜λ‚˜λ§Œ 달라도 닀름 κΈ°λ³Έ μžλ£Œν˜• μ˜ˆμ‹œμž…λ‹ˆλ‹€. console.log(1 == '1'); // true console.log(1 === '1'); // false console.log(1 != '1'); // πŸ“ false console.log(1 != 1); // πŸ“πŸ“ false console.log(1 !== '1'); // true 값은 κ°™μ§€λ§Œ νƒ€μž…μ΄ 닀름 console.log(1 !== 2); // true 값은 λ‹€λ₯΄μ§€λ§Œ νƒ€μž…μ΄ κ°™μŒ console.log(1 !== 1); // πŸ“πŸ“πŸ“ false μ²˜μŒμ—λŠ” != ..

    JS undefined κ³Ό null 비ꡐ

    undefined κ³Ό null 은 λ‘˜ λ‹€ ν……ν…… 빈 μƒνƒœλ₯Ό λ§ν•˜λŠ”λ°, λ―Έλ¬˜ν•œ 차이가 μžˆμŠ΅λ‹ˆλ‹€. let item; // 값이 아직 ν• λ‹Ή λ˜μ§€ μ•Šμ€ μƒνƒœ console.log(item); // κ²°κ³Ό : undegined item = null; // 빈 값이 λΌλŠ” 것을 ν• λ‹Ή ν•΄μ€€ μƒνƒœ console.log(item); // κ²°κ³Ό : null λ˜ν•œ νƒ€μž…μ—μ„œλ„ 차이가 λ‚©λ‹ˆλ‹€. console.log(typeof null); // object console.log(typeof nudefined); // undefined null 은 μ—„λ°€νžˆ λ§ν•˜μžλ©΄, λΉ„μ–΄μžˆλŠ” κ°μ²΄μž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ undefined λŠ” λΉ„μ–΄μžˆλŠ”μ§€ μ•„λ‹Œμ§€ λͺ¨λ₯΄λŠ” μƒνƒœλ₯Ό λ‚˜νƒ€ λƒ…λ‹ˆλ‹€. 곡뢀λ₯Ό ν•˜λ‹€ 보면 좜λ ₯ κ°’μ—μ„œ null ν˜Ήμ€ undefined λ₯Ό λ§ˆμ£ΌμΉ˜λŠ”..

    JS λŠμŠ¨ν•œ νƒ€μž…μ˜ 동적 μ–Έμ–΄

    μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λŠμŠ¨ν•œ νƒ€μž…μ˜ 동적 μ–Έμ–΄μž…λ‹ˆλ‹€. ν•˜λ‚˜μ”© ν’€μ–΄μ„œ λ΄…μ‹œλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ—λŠ” νƒ€μž…μ΄ μžˆμ§€λ§Œ, λ³€μˆ˜μ— νƒ€μž…μ„ ν•„μˆ˜μ μœΌλ‘œ μ§€μ •ν•˜μ§€ μ•Šμ•„λ„ λ©λ‹ˆλ‹€. λ•Œλ¬Έμ— ‘λŠμŠ¨ν•œ νƒ€μž… (loosely typed) μ–Έμ–΄’ 라고 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, λ³€μˆ˜μ— μ €μž₯λ˜λŠ” κ°’μ˜ νƒ€μž…μ€ μ–Έμ œλ“ μ§€ λ°”κΏ€ 수 있기 λ•Œλ¬Έμ— ‘동적 νƒ€μž…(dynamically typed) μ–Έμ–΄' 라고도 λΆ€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€. λ°”λ‘œ 이 νŠΉμ§•μ΄ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 약점이 λ©λ‹ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 컴파일 된 ν›„ μ‹€ν–‰λ˜λŠ” 것이 μ•„λ‹ˆλΌ μ‹€ν–‰λ˜λŠ” μˆœκ°„ ν•œ 쀄씩 읽으며 (인터프리터) 싀행이 λ©λ‹ˆλ‹€. 즉, μ»΄νŒŒμΌλ˜λŠ” 과정이 λ”°λ‘œ μ—†κΈ° λ•Œλ¬Έμ— νƒ€μž… 였λ₯˜λ₯Ό μ‹€ν–‰ 전에 체크할 μˆ˜κ°€ μ—†μŠ΅λ‹ˆλ‹€. 이런 약점을 λ³΄μ™„ν•˜κΈ° μœ„ν•΄μ„œ κ°œλ°œμžλŠ” μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒμš”? 1. μ˜ˆμƒλ˜λŠ” νƒ€μž… μ—λŸ¬λ₯Ό 예..

    JS ν•¨μˆ˜ μ„ μ–Έλ¬Έκ³Ό ν•¨μˆ˜ ν‘œν˜„μ‹ 차이

    ν•¨μˆ˜ μ„ μ–Έλ¬Έκ³Ό ν•¨μˆ˜ ν‘œν˜„μ‹μ΄ 무엇인지 μ•Œμ•„λ΄…μ‹œλ‹€. ν•¨μˆ˜λ₯Ό λ§Œλ“ λ‹€λŠ” λͺ©μ μ€ 동일 ν•˜λ‚˜ λ§Œλ“œλŠ” 방법이 λ‹€λ¦…λ‹ˆλ‹€. // ν•¨μˆ˜ μ„ μ–Έλ¬Έ function add(a, b) { return a+b; } // ν•¨μˆ˜ ν‘œν˜„μ‹ const sum = function(a,b) { return a+b; } ν•¨μˆ˜ 자체λ₯Ό μ„ μ–Έν•˜λ©΄ ν•¨μˆ˜ μ„ μ–Έλ¬Έ, μ„ μ–Έν•œ ν•¨μˆ˜λ₯Ό λ³€μˆ˜μ— λ‹΄μ•„μ„œ μ‚¬μš©ν•˜λ©΄ ν•¨μˆ˜ ν‘œν˜„μ‹μ΄λΌ ν•©λ‹ˆλ‹€. 이 λ‘˜μ€ ν˜Έμ΄μŠ€νŒ… λ°©μ‹μ—μ„œ 차이가 λ‚©λ‹ˆλ‹€. add(1, 3); // ν•¨μˆ˜ 선언보닀 μœ„μ— μžˆμ§€λ§Œ 였λ₯˜κ°€ λ‚˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. function add(a, b) { // ν•¨μˆ˜ μ„ μ–Έλ¬Έ return a+b; } console.log(sum(1,2)); // μ—λŸ¬. // ReferenceError Cannot access 'sum' before..

    JS 얕은 볡사와 κΉŠμ€ 볡사

    객체(Object)λ₯Ό λ³΅μ‚¬ν•˜λŠ” 방법은 얕은 볡사(Shallow Copy) 와 κΉŠμ€ 볡사(Deep Copy) 둜 λ‚˜λ‰©λ‹ˆλ‹€. μ‚¬μš©ν•˜λŠ” λ©”μ„œλ“œλŠ” μ—¬λŸΏ μžˆμ§€λ§Œ, 컨셉은 2가지 μž…λ‹ˆλ‹€. κ°’μ˜ μ£Όμ†Œ 값을 볡사해 쀄 것인지, κ°’ 자체λ₯Ό 볡사해 쀄 κ²ƒμΈμ§€μš”. 객체같은 μ°Έμ‘°ν˜• 데이터λ₯Ό λ³΅μ‚¬ν•˜κ²Œ 되면, 값이 λ©”λͺ¨λ¦¬ 셀에 ν• λ‹Ήλ˜λŠ” 것이 μ•„λ‹ˆλΌ 값이 λ“€μ–΄ μžˆλŠ” μ£Όμ†Œκ°’(μ°Έμ‘°κ°’) 이 λ©”λͺ¨λ¦¬ 셀에 λ“€μ–΄ κ°‘λ‹ˆλ‹€. λ•Œλ¬Έμ— 볡사λ₯Ό ν•˜κ²Œ 되면, κ°’ μžμ²΄κ°€ μ•„λ‹ˆλΌ 값이 λ“€μ–΄κ°€ μžˆλŠ” μ£Όμ†Œκ°€ 전달 λ©λ‹ˆλ‹€. μ΄λ ‡κ²Œ λ³΅μ‚¬λ˜λŠ” 것을 Shallow Copy 라고 ν•©λ‹ˆλ‹€. Shallow Copy spread syntax, Array.prototype.concat(), Array.prototype.slice(),Array.from(), Object.as..

    JS λΆˆλ³€ 객체 λ§Œλ“€κΈ°

    νŠΉμ • 객체λ₯Ό μˆ˜μ •μ΄ λΆˆκ°€λŠ₯ν•˜κ²Œ λ§Œλ“€ λ•Œ, λΆˆλ³€ 객체λ₯Ό λ§Œλ“€μ–΄ μ‚¬μš©ν•©λ‹ˆλ‹€. λΆˆλ³€ 객체λ₯Ό λ§Œλ“œλŠ” 방법은 3가지 μž…λ‹ˆλ‹€. 각 λ°©λ²•λ§ˆλ‹€ μˆ˜μ • κ°€λŠ₯ λ²”μœ„κ°€ λ‹€λ₯΄κ²Œ μ œν•œλ˜κΈ° λ•Œλ¬Έμ— ν•„μš”μ— 따라 μ„ νƒν•˜λ©΄ λ©λ‹ˆλ‹€. 1. Object.freeze() 속성 μž¬μ •μ˜ X, μΆ”κ°€ X, μˆ˜μ • X, μ‚­μ œ X κ·ΈλŸ¬λ‚˜! μ€‘μ²©λœ company λŠ” freeze λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ•Œλ¬Έμ— company.name 은 μˆ˜μ • κ°€λŠ₯ν•©λ‹ˆλ‹€. 속성 μž¬μ •μ˜κ°€ μ•ˆλœλ‹€λŠ” 것은 Object.defineProperty() 둜 속성듀을 μž¬μ •μ˜ ν•  수 μ—†λ‹€λŠ” λœ»μž…λ‹ˆλ‹€. μ•„λž˜ 링크 μ°Έκ³ . const company = { name: 'SS'}; const people = { name: 'lee', age: 20, work: company } Object.freeze(p..

    JS Truthy 와 Falsy

    μˆ«μžλ‚˜ λ¬Έμžμ—΄λ„ μ–΄λ–€ 값이냐에 따라 true, false 의 값을 κ°€μ§‘λ‹ˆλ‹€. 이것을 μ •ν™•ν•˜κ²Œ μ•Œκ³  μžˆμ–΄μ•Ό λ‚˜μ€‘μ— ν—·κ°ˆλ¦¬μ§€ μ•ŠμœΌλ‹ˆ 이번 κΈ°νšŒμ— μ™Έμ›Œ λ΄…μ‹œλ‹€! Falsy 거짓 0 -0 '' null undefined NaN Truthy μ°Έ 1 -1 'hello!' {} Infinity μ°Έκ³  자료 🌈 https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Boolean Boolean - JavaScript | MDN Boolean κ°μ²΄λŠ” λΆˆλ¦¬μ–Έ 값을 감싸고 μžˆλŠ” κ°μ²΄μž…λ‹ˆλ‹€. developer.mozilla.org

    JS ν˜• λ³€ν™˜ (문자λ₯Ό 숫자둜, 숫자λ₯Ό 문자둜), λ³€μˆ˜μ˜ νƒ€μž… 확인 typeof

    ν˜• λ³€ν™˜μ— μ•žμ„œ λ³€μˆ˜μ˜ νƒ€μž…μ„ μ•Œ 수 μžˆλŠ” 방법을 μ•Œμ•„ λ³΄κ² μŠ΅λ‹ˆλ‹€. κ°„λ‹¨ν•©λ‹ˆλ‹€. 을 μ‚¬μš©ν•˜λ©΄ λ³€μˆ˜μ˜ νƒ€μž…μ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. boolean ν˜•, μˆ«μžν˜•μ„ λ¬Έμžν˜• 으둜 λ°”κΏ” λ΄…λ‹ˆλ‹€. let value = true; alert(typeof value); // boolean value = String(value); // string 으둜 ν˜• λ³€ν™˜ alert(value); // "true" alert(typeof value); // string String() 을 μ‚¬μš©ν•˜μ§€ μ•Šκ³  +"" λ₯Ό μ‚¬μš©ν•˜κΈ°λ„ ν•©λ‹ˆλ‹€. ν˜Ήμ€ toString() 을 μ‚¬μš©ν•©λ‹ˆλ‹€. let cnt = 1; console.log(typeof cnt); // number console.log(typeof (cnt+"")); // string cons..

    JS κΈ°λ³Έν˜• 데이터와 μ°Έμ‘°ν˜• λ°μ΄ν„°μ˜ 차이

    μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ νƒ€μž…μ€ 크게 2κ°€μ§€λ‘œ λ‚˜λ‰©λ‹ˆλ‹€. κΈ°λ³Έν˜• 데이터(Primitive) 와 μ°Έμ‘°ν˜• 데이터(Reference) μž…λ‹ˆλ‹€. κΈ°λ³Έν˜• λ°μ΄ν„°μ—λŠ” string, number, bigint, boolean, undefined, symbol, null 이 μžˆμŠ΅λ‹ˆλ‹€. μ°Έμ‘°ν˜• λ°μ΄ν„°μ—λŠ” object κ°€ 있고, κ±°κ²Œμ— 포함이 λ˜λŠ” array, function, RegExp(μ •κ·œν‘œν˜„μ‹), map, set 등이 μžˆμŠ΅λ‹ˆλ‹€. 두 νƒ€μž…μ˜ κ°€μž₯ 큰 μ°¨μ΄λŠ” 값을 μ €μž₯ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. κΈ°λ³Έν˜• λ°μ΄ν„°λŠ” λ°”λ‘œ 값을 λ©”λͺ¨λ¦¬μ— ν• λ‹Ήν•˜μ§€λ§Œ, μ°Έμ‘°ν˜• λ°μ΄ν„°λŠ” 값이 λ“€μ–΄ μžˆλŠ” λ©”λͺ¨λ¦¬μ˜ μ£Όμ†Œλ₯Ό ν• λ‹Ήν•©λ‹ˆλ‹€. 예λ₯Ό 듀어보면, λ¨Όμ € a 에 1 을 λ„£μŠ΅λ‹ˆλ‹€. let a = 1; let b = a; a의 값을 받은 bλ₯Ό 좜λ ₯ν•˜λ©΄ 1이 λ‚˜μ˜΅λ‹ˆλ‹€. 이것을..

    ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ level 1 폰켓λͺ¬

    문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/1845?language=javascript function solution(nums) { const nums_set = new Set(nums); const nums_set_size = nums_set.size; // μ„Όν„°μ˜ 포켓λͺ¬ μ’…λ₯˜ 수 const nums_select = nums.length/2; // κ³ λ₯Ό 수 μžˆλŠ” 포켓λͺ¬ 수 return (nums_select < nums_set_size) ? nums_select : nums_set_size; } solution([3,1,2,3]); // solution([3,3,3,2,2,4]); // solution([3,3,3,2,2,2]);

    nodemon μ„€μΉ˜ 였λ₯˜ zsh : command not fount : nodemon

    nodemon 은 μ €μž₯κ³Ό λ™μ‹œμ— 슀크립트λ₯Ό μ½˜μ†”μ— μ‹€ν–‰μ‹œν‚¬ 수 μžˆλŠ” μ•„μ£Ό μœ μš©ν•œ νŒ¨ν‚€μ§€μž…λ‹ˆλ‹€! (참고둜 μ €λŠ” zsh 터미널을 μ‚¬μš©ν•©λ‹ˆλ‹€.) nodemon ν•˜κ³  npm install nodemon -g ν•˜κ³  nodemon ν•˜λ©΄ λ˜μ•Ό ν•˜λŠ”λ°, μ•„λž˜μ™€ 같은 였λ₯˜ λ°œμƒ. zsh : command not fount : nodemon ν•΄κ²°μ±… - 폴더λ₯Ό μƒμ„±ν•΄μ„œ μ „μ—­ μ„€μΉ˜ (global) μœ„μΉ˜λ₯Ό λ³€κ²½ μ•„λž˜λ₯Ό μˆœμ„œλŒ€λ‘œ 따라 μΉœλ‹€. mkdir ~/.npm-global npm config set prefix '~/.npm-global' vi ~/.zprofile μ΄λ ‡κ²Œ ν•˜λ©΄ vi νŽΈμ§‘κΈ°λ‘œ λ“€μ–΄κ°„λ‹€. i λ₯Ό 눌러 νŽΈμ§‘ν•˜κΈ° λͺ¨λ“œλ‘œ μ „ν™˜ export PATH=~/.npm-global/bin:$PATH νŽΈμ§‘λͺ¨λ“œμ—μ„œ μœ„μ™€ 같이 써..

    220729~220806 1μ£Όμ°¨

    220729~220806 1μ£Όμ°¨

    πŸ”₯ μ—„μ²­ λ°”λΉ΄μ§€λ§Œ, 그만큼 많이 λ°°μ› λ˜ ν•œ μ£Ό ✨ λŠλ‚€μ  1 : ν˜‘μ—…μ˜ μ€‘μš”μ„± β›“ μΊ ν”„κ°€ μ‹œμž‘ν•˜μž 마자 ν”„λ‘œμ νŠΈ μ‘°κ°€ μ§œμ—¬μ‘Œλ‹€. μΈμ‚¬λ§Œ ν•˜κ³  λ°”λ‘œ ν”„λ‘œμ νŠΈ 주제 μ„ μ •λΆ€ν„° api 섀계, ν™”λ©΄ 섀계, ERD 섀계, κΈ°λŠ₯ λΆ„λ°°κ°€ μ΄λ£¨μ–΄μ‘Œλ‹€. 우리 쑰의 ν”„λ‘œμ νŠΈλŠ” [편의점 신상을 λ¦¬λ·°ν•˜λŠ” μ›Ήμ‚¬μ΄νŠΈ] μ˜€λ‹€. λ‚΄κ°€ 맑은 뢀뢄은 λ©”μΈνŽ˜μ΄μ§€ ν™”λ©΄ κ΅¬ν˜„κ³Ό λ©”μΈνŽ˜μ΄μ§€μ˜ κΈ°λŠ₯ κ΅¬ν˜„μ΄μ—ˆλ‹€. 각 νŽ˜μ΄μ§€λ‘œ 갈 수 μžˆλŠ” λ„·λ°”λ₯Ό λ§Œλ“€κ³  κ²Œμ‹œκΈ€ 검색과 κ²Œμ‹œκΈ€ 상세 보기 κΈ°λŠ₯을 κ΅¬ν˜„ν•΄μ•Ό ν–ˆλ‹€. 각자 맑은 λΆ€λΆ„λ§Œ 잘 ν•˜λ©΄ ν”„λ‘œμ νŠΈκ°€ 문제 없이 μ™„μ„±λ˜λŠ” 쀄 μ•Œμ•˜μœΌλ‚˜ 그건 λ‚˜μ˜ μ°©κ°μ΄μ—ˆλ‹€..! κ²Œμ‹œκΈ€ 상세 쑰회 κΈ°λŠ₯을 κ΅¬ν˜„ ν•˜λ €λ©΄ κ²Œμ‹œκΈ€μ˜ 정보가 db 에 μ–΄λ–»κ²Œ μ €μž₯λ˜λŠ” 지λ₯Ό μ•Œμ•„μ•Ό ν–ˆλŠ”λ°, κ²Œμ‹œκΈ€μ˜ 이미지 μ €μž₯ 방식을 μ •ν•˜μ§€ λͺ»ν•΄ κ²Œμ‹œκΈ€ ..