<?xml version="1.0"?>
<rss version="2.0">
   <channel>
      <title>지헌이의 TIL by </title>
      <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx</link>
      <description></description>
      <language>en-us</language>
      <pubDate>2023-07-16 13:32:21 UTC</pubDate>
      <lastBuildDate>2025-12-31 19:31:38 UTC</lastBuildDate>
      <webMaster>hello@padlet.com</webMaster>
      <image>
         <url>https://padlet.net/icons/png/1f1f0-1f1f7.png</url>
      </image>
      <item>
         <title>230716 (일)</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2645764955</link>
         <description><![CDATA[<div>1.<br>import math<br>math.gcd #최대공약수 구하기<br>math.lcm #최소공배수 구하기<br><br>2.<br>코딩애플에 있는 React 강의 파트1을 다 듣고, 내 힘으로 todolist CRUD를 구현해보려고 했으나 업데이트에서 애를 먹음. 아직 흐름을 제대로 이해하지 못한 것 같다는 생각이 들어 [유튜브 - 생활코딩] 에 있는 React 강의를 최대한 빨리 듣고 다시 시도해볼 생각.<br><br>3.<br>git merge 합칠브랜치명<br>git branch 브랜치명 : 브랜치 생성<br>git switch 브랜치명 : 브랜치로 이동.<br><br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2023-07-16 13:39:25 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2645764955</guid>
      </item>
      <item>
         <title>이번 주 피드백</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2645766583</link>
         <description><![CDATA[]]></description>
         <enclosure url="" />
         <pubDate>2023-07-16 13:46:02 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2645766583</guid>
      </item>
      <item>
         <title>유용한 사이트들</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2645769243</link>
         <description><![CDATA[<div>https://github.com/JaeYeopHan/Interview_Question_for_Beginner<br>- Tech Interview for beginner<br><br>https://github.com/jojoldu/junior-recruit-scheduler<br>- 주니어 개발자를 위한 취업정<br><br>https://github.com/brave-people/Dev-Event<br>- 개발자 세미나 행사 모음<br><br>https://velog.io/@woo0_hooo/%EC%BB%B4%EA%B3%B5-%EC%B7%A8%EC%A4%80%EC%83%9D%EC%97%90%EA%B2%8C-%EC%9C%A0%EC%9A%A9%ED%95%9C-%EB%A7%81%ED%81%AC%EB%93%A4-%EC%A0%95%EB%A6%AC<br><br>https://github.com/h5bp/Front-end-Developer-Interview-Questions<br>- 프론트엔드 기술 질문 ( 영어 )<br><br>https://yozm.wishket.com/magazine/list/popular/<br>- 최신 IT 트렌드&nbsp;얻기 좋은 사이트</div>]]></description>
         <enclosure url="https://github.com/JaeYeopHan/Interview_Question_for_Beginner" />
         <pubDate>2023-07-16 13:57:12 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2645769243</guid>
      </item>
      <item>
         <title>패들렛을 이용해 TIL을 쓰는 이유</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2645769642</link>
         <description><![CDATA[<div>1. md 파일에 비해 좀 더 시각적으로 깔끔해서 내가 보기가 편함.&nbsp;<br><br>: TIL을 작성하는 이유는 무엇을 공부했는지 알리는 것도 있지만, 궁극적으로는 내가 공부한 내용들을 정리하고 복습하는 공간이라 생각하기 때문에 조금이나마 내가 보기 편한 방법으로 정리하기로 결심함.<br><br>2. 게시글이 직관적으로 쌓여서 뿌듯함을 느낄 수 있음. 시간이 지나고 돌이켜보면서 앞으로 나아갈 수 있는 원동력을 얻을 수 있을 것 같음.<br><br>3. 작성하기 쉬움</div>]]></description>
         <enclosure url="" />
         <pubDate>2023-07-16 13:58:52 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2645769642</guid>
      </item>
      <item>
         <title>230717 (월)</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2646424132</link>
         <description><![CDATA[<div><strong># 유튜브 '생활코딩'의 리액트 강의 정리</strong></div><div><br></div><div>리액트는 사용자 정의 태그(=컴포넌트)를 만드는 기술</div><div><br></div><div><strong>### 컴포넌트 사용법</strong></div><div>1. function App() 밖에 새로운 함수를 만든다.</div><div>- 이때 이 함수의 이름은 대문자로 시작하고 return 뒤에 원하는 것을 작성해줌.</div><div><br><br></div><div>function Article() {</div><div>&nbsp; &nbsp; return &lt;article&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &lt;h2&gt;Welcome!&lt;/h2&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; Hello, WEB</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &lt;/article&gt;</div><div>}</div><div><br></div><div>2. 이후 &lt;Article&gt;&lt;/Article&gt; 이런식으로 사용하면 됨.</div><div><br></div><div><strong>### props</strong></div><div><br></div><div>```html</div><div>function Nav(props) {</div><div>&nbsp; const lis = [</div><div>&nbsp; &nbsp; &lt;li&gt;&lt;a href="/read/1"&gt;html&lt;/a&gt;&lt;/li&gt;,</div><div>&nbsp; &nbsp; &lt;li&gt;&lt;a href="/read/2"&gt;css&lt;/a&gt;&lt;/li&gt;,</div><div>&nbsp; &nbsp; &lt;li&gt;&lt;a href="/read/3"&gt;js&lt;/a&gt;&lt;/li&gt;</div><div>&nbsp; ]</div><div><br></div><div>&nbsp; for(let i=0; i&lt;props.topics.length; i++) {</div><div>&nbsp; &nbsp; let t = props.topics[i];</div><div>&nbsp; &nbsp; lis.push(&lt;li&gt;&lt;a&gt;{t.title}&lt;/a&gt;&lt;/li&gt;)</div><div>&nbsp; }</div><div><br></div><div>&nbsp; return &lt;nav&gt;</div><div>&nbsp; &nbsp; &nbsp; {lis}</div><div><br></div><div>&nbsp; &lt;/nav&gt;</div><div>}</div><div><br></div><div>function App() {</div><div><br></div><div>&nbsp; const topics = [</div><div>&nbsp; &nbsp; {id:1, title:'html', body: 'html is...'},</div><div>&nbsp; &nbsp; {id:2, title:'css', body: 'css is...'},</div><div>&nbsp; &nbsp; {id:3, title:'javascript', body: 'javascript is...'}</div><div><br></div><div>&nbsp; ]</div><div>```</div><div><br><br></div><div><strong>### event</strong></div><div><br></div><div><strong>#### 이벤트의 타겟은 이벤트를 유발시킨 태그를 뜻함.&nbsp;</strong></div><div>만약 a 태그가 event를 유발시켰다면&nbsp;</div><div>event.target.id : 이벤트를 유발시킨 a태그의 id값을 뜻함.</div><div><br></div><div><strong>### state</strong></div><div><br></div><div>`import {useState} from 'react';`</div><div>const [mode, setMode] = useState('WELCOME');</div><div>값을 바꿀때는 setMode('바꿀값');</div><div><br><br></div><div>a 태그나 submit 태그는 누르게 되면 href를 통해 이동하거나, 창이 새로고침하여 실행됨.</div><div>이떄, `preventDefault()` 를 사용하면 막을 수 있음.</div><div>참고로 `stopPropagation` 은 부모 태그로 이벤트를 전파하는 것을 막아줌.<br><br><br>-----------------------------<br><br>Jira에서 Epik-&gt;story-&gt;task</div>]]></description>
         <enclosure url="" />
         <pubDate>2023-07-17 13:38:29 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2646424132</guid>
      </item>
      <item>
         <title>230718 (화)</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2647217763</link>
         <description><![CDATA[<div>'코딩애플' 강의 듣고 정리한 내용 ( 리액트 1~5강 )<br><br><strong># React TIL</strong></div><div><br></div><div><strong>## 리액트를 쓰는 이유&nbsp;</strong></div><div>- SPA ( Single Page Application ) : html 파일 1개만 쓰고 다른 페이지를 보여줄 때는 html부분만 바꿔서 보여줌. -&gt; 부드럽게 동작</div><div>- html을 함수,array,object 이런 곳에 보관하고 재사용 가능.&nbsp;</div><div>- 리액트 네이티브 사용 가능</div><div><br></div><div><strong>## React 설치 / 세팅</strong></div><div>- Node.js 설치</div><div>- VS code 설치</div><div>- `npx create-react-app 프로젝트이름` : 프로젝트 생성</div><div>- App.js가 메인페이지니깐 거기다가 코드짜면 됨.</div><div>- `npm start` : 서버 실행</div><div><br></div><div><strong>## 리액트의 간단한 JSX 문법</strong></div><div>1. class가 아니라 className</div><div>2. 변수를 html에 넣을 때는 {} 중괄호 사용</div><div>3. `&lt;div style={ {color:'blue',fontSize : '30px'} }&gt; 스타일적용 &lt;/div&gt;` : 붙여쓸 때는 대문자로 치환</div><div><br></div><div><strong>## State</strong></div><div>`import { useState } from 'react';` 로 임포트 해와야 함.</div><div>let [값,값변경] = useState(저장할 값)</div><div>값변경(변경할 값)</div><div><br></div><div>Q. 왜 state씀?&nbsp;</div><div>A. state는 변동사항이 생기면 state를 사용하는 html을 자동으로 재렌더링</div><div>state에 값을 넣고 {} 로 변수처럼 사용하면 됨.</div><div>로고명 같은 경우는 바뀌지 않으니깐 굳이 state를 사용할 필요 X ( 결론적으론, 자주 바뀌는 값들만 state로 사용하면 좋음 )</div><div><br></div><div>state는 state변경함수를 써서 변경해야 함.</div><div><br></div><div>`/* eslint-disable */` 하면 브라우저/터미널 창에 warning 무시 가능</div><div><br></div><div><strong>## onClick 사용법</strong></div><div>html에서는 &lt;div onclick="실행할 자바스크립트"&gt;&nbsp;</div><div>JSX에서는 &lt;div onClick={실행할 함수}&gt;&nbsp; -&gt; 대문자 신경쓰자</div><div><br></div><div>실행할 함수에 들어갈 함수는 밑에처럼 그냥 만들어도 됨.</div><div>&lt;div onClick={ function(){ 실행할코드 } }&gt;&nbsp;</div><div>&lt;div onClick={ () =&gt; { 실행할코드 } }&gt;</div><div><br></div><div>혹은 바깥에서 함수를 따로 만들어도 됨.</div><div><br></div><div>요약)&nbsp;</div><div>1. 클릭시 뭔가를 실행하고 싶으면 onClick={함수}라는 이벤트 핸들러를 달아서 사용</div><div>2. state를 변경하려면 state 변경함수를 꼭 이용</div><div><br></div><div>array,object state 변경하는 법 이전까지 정리했음.</div><div><br><br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2023-07-18 13:43:57 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2647217763</guid>
      </item>
      <item>
         <title>유용한 VS Code 익스텐션들</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2647221042</link>
         <description><![CDATA[<div># Auto Rename Tag<br>: 여는 태그나 닫는 태그를 수정하면 반대편의 태그도 동시에 수정해줌. </div>]]></description>
         <enclosure url="" />
         <pubDate>2023-07-18 13:49:36 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2647221042</guid>
      </item>
      <item>
         <title>230719 (수)</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2647933553</link>
         <description><![CDATA[<div>- UseEffect에 대해서 배웠음<br><br><strong>공부하면서 깨달은 점.</strong></div><div>useState는 함수 컴포넌트 상단에 선언하는 것. -&gt; axios를 통해 데이터를 받아올거면, 함수 컴포넌트 상단에 useState를 만들어 놓고 state 변경함수를 통해 채워나가는 방식을 사용하면 됨.</div>]]></description>
         <enclosure url="" />
         <pubDate>2023-07-19 14:04:33 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2647933553</guid>
      </item>
      <item>
         <title>VS code - 리액트 자동 줄 정렬</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2648220557</link>
         <description><![CDATA[<div>vscode에서 리액트 자동 정렬을 쓰려면 프리티어를 깔고 설정해줘야 함. 그러면 코드를 저장할 때 자동으로 줄정렬이 됨.</div>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/2091155915/da163b19cafc5a4946f73c47bcd58b43/image.png" />
         <pubDate>2023-07-20 01:27:48 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2648220557</guid>
      </item>
      <item>
         <title>리액트 공부하면서 잡다하게 알게 된 것들</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2648293983</link>
         <description><![CDATA[<div>array [] / object {}</div>]]></description>
         <enclosure url="" />
         <pubDate>2023-07-20 02:43:42 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2648293983</guid>
      </item>
      <item>
         <title>VScode 단축키 정리</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2648607261</link>
         <description><![CDATA[<div>Visual Studio Code 꿀템<br><br><strong>Command Pallette</strong><br>- 윈도우 : Ctrl+Shift+P, F1<br>- 다양한 기능들을 확인해보고, 단축키도 알아볼 수 있음<br><br><strong>Quick Open</strong><br>- 윈도우 : 컨트롤+P<br>- 해당하는 파일 빠르게 검색<br><br><strong>Toggle Sidebar</strong><br>- Ctrl + B<br><br><strong>Terminal</strong><br>- Ctrl + `<br><br><strong>Keyboard Shortcuts</strong><br>- Ctrl + K + S<br>- 키보드 단축키 확인 가능<br><br>Kite를 쓰면 좀 더 개발 빠르게 할 수 있음 (탭나인 느낌인듯 ?) <br><br><strong>컨트롤 + Home/ End</strong> : 제일 위 / 아래로 이동가능<br><strong>컨트롤 없이 Home / End </strong>: 제일 왼쪽 / 오른쪽으로 이동가능<br><br><strong>컨트롤 </strong>+ &lt;- / -&gt; : 단어별로 이동가능!<br>컨트롤 + 쉬프트 + &lt;- / -&gt; : 한 단어가 선택됨<br><br>코드 한 줄 위아래로 올리기 ( Move Line down / up )<br>- Alt + 위/아래 방향키<br><br>쉬프트+알트+위/아래방향키 =&gt; 원하는 방향대로 복사됨.<br><br>컨트롤+엔터 :&nbsp; 굳이 맨끝으로 커서 안 옮기고 엔터 눌러도 됨.<br><br><br>Multi Selection<br>- 컨트롤 + D : 같은 단어 선택 ( 동시에 수정 가능 )<br><br>이전 커서로 이동&nbsp;<br>- 컨트롤 + U<br><br>Insert Cursor<br>- 알트 + 클릭 -&gt; 이러면 여러개를 동시에 변경 가능함.<br><br><br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2023-07-20 12:59:30 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2648607261</guid>
      </item>
      <item>
         <title>웹,앱 디자인 무료 툴 5가지</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2650849300</link>
         <description><![CDATA[<div>https://dribbble.com<br>- 다양한 웹,앱사이트 디자인을 확인가능함.<br>- 아이디어,감각 얻기 좋은 사이트<br>- Website-&gt;Popular에 들어가면 현재 뜨고있는 디자인 확인 가능<br><br><br><br><br>https://mycolor.space/<br>- 색상팔레트 (메인 컬러 넣으면 그에 맞는 다양한 팔레트들 제공해줌 )<br><br>https://cssgradient.io/&nbsp;<br>- 그레디언트 컬러 만들기<br><br>https://shapedividers.com/<br>-꼬불꼬불 선나누기&nbsp;<br><br>https://haikei/app<br>- 다양한 SVG 만들기<br>- svg는 이미지보다 훨씬 가벼움. (로딩속도 빨라짐)<br><br>https://color.adobe.com/ko/create/color-wheel<br>- 컬러 팔레트<br><br><br><br><br><br></div>]]></description>
         <enclosure url="https://shapedividers.com/" />
         <pubDate>2023-07-25 11:32:40 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2650849300</guid>
      </item>
      <item>
         <title>반응형 웹사이트 공부</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2650852027</link>
         <description><![CDATA[<div><strong>프론트엔드 필수 반응형 CSS 단위 총정리 (EM과 REM) | Responsive CSS Units<br><br></strong><br></div>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/2091155915/d5ea999e9b3f9733a96361ce537cc7c3/image.png" />
         <pubDate>2023-07-25 11:41:40 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2650852027</guid>
      </item>
      <item>
         <title>230726 RTC 구현을 위한 OpenVidu 샘플 코드 분석</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2651522863</link>
         <description><![CDATA[<div>- 리액트도 잘 모르는데, 몇백 줄짜리 샘플코드를 분석하는 것은 엄청 어려운 일이었음.<br><br>- 그래도 한 줄 한 줄 뜯어보니깐 이해가 돼서 다행이었음.<br><br>myUserName : 화상통화와 참가자의 닉네임<br>publisher : 자체 로컬 웹캠 스트림<br>subscribers 배열 : 화상 통화에서 다른 사용자의 활성 스트림 저장<br>&nbsp;<br><br>사용자가 App.js 템플릿에 정의된 제출 입력을 클릭할 때마다 joinSession() 메서드가 호출됨.<br><br>`Import 구문과 상수 설정`: 필요한 모듈과 라이브러리를 가져오고, 서버 URL과 관련된 상수를 설정<br><br>`App 컴포넌트 선`언: React 클래스 컴포넌트인 App 클래스를 선언. 이 컴포넌트는 영상 통화 기능을 관리.<br><br>`constructor 함수`: App 컴포넌트의 생성자. 상태 변수와 이벤트 핸들러를 초기화하고, OpenVidu 객체를 생성함.<br><br>`componentDidMount와 componentWillUnmount 함수`: 컴포넌트가 마운트(렌더링)되거나 언마운트(사라짐)될 때 발생하는 이벤트를 처리하는 함수들<br><br>`handleChangeSessionId와 handleChangeUserName 함수`: 세션 ID와 사용자 이름 입력 필드의 변화를 처리하는 함수들<br><br>`handleMainVideoStream와 deleteSubscriber 함수`: 메인 비디오 스트림과 구독자 스트림들을 관리하는 함수들<br><br>`joinSession 함수`: 영상 통화에 참가하기 위해 세션에 연결하고, 비디오 스트림을 생성 및 게시하는 함수<br><br>`leaveSession 함수`: 세션에서 나가는 함수로, 모든 속성을 초기화 -&gt; 우리는 여기서 지도 화면으로 돌아가게 설정해주면 될듯<br><br>`switchCamera 함수`: 카메라를 전환하는 함수로, 현재 사용 중인 카메라를 변경. -&gt; 핸드폰으로 테스트해 볼 필요가 있을 듯<br><br>`render 함수`: 컴포넌트의 렌더링 결과를 반환하는 함수. 조건부 렌더링을 사용하여 세션에 참가할 때와 참가하지 않을 때의 화면을 제어.<br><br>`getToken, createSession, createToken 함수`: OpenVidu 서버로부터 토큰을 가져오고 세션 및 연결을 생성하는 비동기 함수.</div>]]></description>
         <enclosure url="" />
         <pubDate>2023-07-26 13:13:28 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2651522863</guid>
      </item>
      <item>
         <title>깃 관련 </title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2651533412</link>
         <description><![CDATA[<div>-git pull 을 먼저 진행하는 습관을 기르도록 하자.<br>-커밋 컨벤션을 배웠으니, 개인적으로 커밋할 때도 이를 활용해보면 좋을듯 ?<br><br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2023-07-26 13:35:56 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2651533412</guid>
      </item>
      <item>
         <title>css flex </title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2652129670</link>
         <description><![CDATA[<div><strong># 23.07.27 TIL</strong></div><div><br></div><div><strong>## CSS 레이아웃 정리</strong></div><div><br></div><div>- 공부하는 이유 :본격적인 개발에 들어가기 앞서 Component를 구성할 때 레이아웃을 효율적으로 짤 필요가 있어서 이번 기회에 정리해보려고 함.</div><div><br></div><div>- CSS : Cascading Style Sheet</div><div>- Class : .class</div><div>- Id : #id</div><div>- Attribute : []</div><div><br></div><div>- 모든 태그</div><div>&nbsp; \*{</div><div>&nbsp; }</div><div><br></div><div>&nbsp; a[href] {</div><div>&nbsp; color: purple;</div><div>&nbsp; }</div><div><br></div><div>display : inline;</div><div><br></div><div>- div의 크기같은 건 무시하고, 안에 들어있는 물건의 크기만큼만 적용됨.</div><div><br></div><div>inline은 물건, inline-block은 한 줄에 여러개가 들어갈 수 있는 특별한 상자, block은 상자인데 한 줄에 하나씩 들어갈 수 있는 상자.</div><div><br></div><div>position은 기본값으로 static</div><div>`relative`는 원래 있던 자리를 기준으로 움직이는 것.</div><div><br></div><div>`absoule`는 내 아이템과 가장 가까이 있는 박스 안에서 위치 변경이 일어나는 것.</div><div><br></div><div>`fixed`는 상자에서 벗어나서 웹페이지 안에서 움직이는 것.</div><div><br></div><div>`sticky`</div><div><br></div><div>---</div><div><br></div><div><strong>## CSS Flexbox 정리</strong></div><div><br></div><div><strong>### float</strong></div><div><br></div><div>- 이미지와 텍스트를 배치하는 용도</div><div>&nbsp; ![float](float.png)</div><div><br></div><div><strong>### Flexbox</strong></div><div><br></div><div>- jsbin.com 에서 실습</div><div>- viewport의 100% 다 쓰겠다 -&gt; 100vh</div><div><br></div><div><strong>## 알아보아야할 것</strong></div><div><br></div><div>- container로 감쌀 때 주의해야할 점 알아보기.</div><div>- `div.container&gt;div.item${$}*10` 이렇게 축약해서 한 번에 container 밑에 10개의 item 생성 가능</div><div>- %는 부모태그 대비 비율임.</div><div>- flex-direction : row 가 기본값. (왼쪽에서 오른쪽)</div><div>row-reverse</div><div>column은 위에서 아래로. 메인축은 수직축이 되는 것.</div><div><br></div><div>flex-wrap : nowrap이 기본값. 이걸 wrap으로 바꾸면 범위에서 벗어나면 자동으로 줄바꿈.</div><div><br></div><div>border 하면 글씨크기,선의 종류, 색깔을 한 번에 지정할 수 있듯이 flex-flow 하면 열,행과 wrap,nowrap을 한 번에 설정할 수 있음.</div><div><br></div><div>`column-reverse`를 쓰면 순서도 뒤집히지만, `justify-content: flex-end`를 쓰면 순서는 안 뒤집히고 방향만 위-&gt;아래 에서 아래-&gt;위 이런 식으로 바뀜.</div><div>`space-between` : 왼쪽과 오른쪽은 화면에 딱 붙게 하고, 나머지는 동등한 간격.</div><div><br></div><div>`space-evenly` : 모두 동일한 간격.</div><div><br></div><div>`space-around` : 요소들 사이에 동일한 간격을 둠. 요소들 (주위에) 간격을 동일하게 준다고 생각하면 좋을듯?-&gt; 맨 왼쪽이나 오른쪽의 경우 간격이 좁음. 왜냐면 왼쪽만 간격이 존재하기 때문! 나머지 것들은 왼쪽,오른쪽에 간격이 있기 때문에 상대적으로 넓음.</div><div><br></div><div>`justify-content`는 중심축에서 아이템이 어떻게 배치되는지를 결정하는 것. (main axis)</div><div><br></div><div>`align-content`는 반대축에서.&nbsp;</div><div><br></div><div>`flex-grow` 비율인듯? 각 아이템에 숫자를 입력하면, 비율로 설정됨. 2:1:1 이런식으로 넣으면 원하는 비율대로 맞출 수 있음.</div><div><br></div><div>`flex-shrink` : `flex-grow` 와 반대. 더 줄어들고 늘어나는지를 정의하는 것.</div><div><br></div><div>`flex-basis` : 기본값은 auto. 비율을 적으면, 다른 애들과 상관없이 비율을 유지하게 됨. ex) 60%</div><div><br><br></div><div><strong>### 오늘 배운 것들을 연습할 수 있는 사이트인 FLEXBOX FROGGY를 사용하며 배운 것들</strong></div><div>- 주소 : flexboxfroggy.com</div><div>- flex-direction : column-reverse 또는 row-reverse를 사용하면 요소들의 start와 end의 순서도 뒤바뀜.</div><div>- 그래서 내가 생각하기엔 `justify-content:flex-start`를 써야할 거 같았는데, 위에서 row-reverse를 사용했기 때문에 `flex-end`를 사용해야한다. 진짜 헷갈리니 주의하기.</div>]]></description>
         <enclosure url="" />
         <pubDate>2023-07-27 13:26:46 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2652129670</guid>
      </item>
      <item>
         <title>리액트 공부</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2653602307</link>
         <description><![CDATA[<div><strong>23-07-31 TIL</strong></div><div><br><strong>(조건부 렌더링1) 논리 &amp;&amp; 연산자가 있는 인라인 조건</strong></div><div>- 중괄호로 감싸면 jsx에 어떤 표현식이던 넣을 수 있음.</div><div><br></div><div>```javascript</div><div>{unreadMessages.length &gt; 0 &amp;&amp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &lt;h2&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; You have {unreadMessages.length} unread messages.</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &lt;/h2&gt;</div><div>&nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &lt;/div&gt;</div><div>&nbsp; );</div><div>}</div><div>```</div><div>- 위의 코드에서 unreadMessages.length &gt; 0이 true이면 &amp;&amp; 뒤의 표현식을 렌더링하고, 아니면 렌더링하지 않음.</div><div><br></div><div>- 자바스크립트에서 true &amp;&amp; expression은 항상 expression으로 평가되고, false &amp;&amp; expression은 항상 false로 평가됨.</div><div><br></div><div><strong>(조건부 렌더링2) 조건부 연산자를 사용한 인라인 If-Else</strong></div><div>- `condition ? true : false` 를 사용하는 것.</div><div><br></div><div><br></div><div>render() {</div><div>&nbsp; const isLoggedIn = this.state.isLoggedIn;</div><div>&nbsp; return (</div><div>&nbsp; &nbsp; &lt;div&gt;</div><div>&nbsp; &nbsp; &nbsp; The user is &lt;b&gt;{isLoggedIn ? 'currently' : 'not'}&lt;/b&gt; logged in.</div><div>&nbsp; &nbsp; &lt;/div&gt;</div><div>&nbsp; );</div><div>}</div><div><br></div><div><br></div><div><strong>이벤트 제어하기</strong></div><div>- React에서 기본 동작을 막기 위해 false 리턴을 사용할 수 없음.</div><div>- 반드시 명시적으로 `preventDefault`를 호출해야 합니다.</div><div><br></div><div><br></div><pre>function ActionLink() {&nbsp; function handleClick(e) {&nbsp; &nbsp; e.preventDefault();&nbsp; &nbsp; console.log('The link was clicked.');&nbsp; }</pre><div><br></div><div><br></div><div><strong>ES6 자바스크립트 문법</strong></div><div><br></div><div><strong>Arrow function&nbsp;</strong></div><div>- 원래 함수 만드는 방법 : function 함수(){}</div><div>- arrow function : `var 함수 = () =&gt; { //어쩌구 }`</div><div>- `var 두배만들기 = (x) =&gt; { return x * 2}`</div><div><br></div><div>파라미터가 1개면 소괄호를 생략가능</div><div>- `var 두배만들기 = x =&gt; { return x * 2 }`</div><div><br></div><div>중괄호 안에 return 한줄 뿐이라면 중괄호와 리턴도 생략 가능.</div><div>- `var 두배만들기 = x =&gt; x * 2 ;`</div><div><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2023-07-31 14:17:17 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2653602307</guid>
      </item>
      <item>
         <title>테일윈드 + CSS 공부</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2655491062</link>
         <description><![CDATA[<div>position 쓸 때는 top/left/bottom/right와 함께 씀.<br><br><strong>static (default값)</strong> : 원래 있어야 하는 자리. -&gt;작성된 순서 그대로 나타냄<br>- 이때는 top/bottom 이런거 다 무시<br><br><strong>relative : </strong>원래 있어야 할 위치 기준으로 t~r 설정 가능. 이 경우 겹치기도 가능함.<br><br>absolute : 어떤 요소의 display 속성.. 부모 요소의 속성은 relative로 지정해주는 것이 관례.<br><br>fixed : 항상 고정된 위치 / 뷰포트 기준 (top~ bottom~~~)으로 작성<br><br><br>----<br><br>테일윈드에서는 invisible / visible로 숨김 가능</div><pre>&lt;div className = {`text-xl ${조건? "참일때" : "거짓일 때"}`}:&gt;</pre><div>- 조건부 렌더링 하는 방법<br><br>grid 쓸 때는 &lt;div className=grid grid-cols-3 gap-4&gt;&nbsp;<br><br>&lt;div className="visible hover:invisible&gt;<br><br>9개의 div를 grid cols-4 하면<br>1 2 3 4&nbsp;<br>5 6 7 8&nbsp;<br>9&nbsp;<br>이런식으로 분리됨.<br><br>그리드 중간에 col-span-2 를 넣으면 2개 어치의 분량을 잡아먹음. ( 2인분? 합친다?)<br><br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2023-08-03 13:26:36 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2655491062</guid>
      </item>
      <item>
         <title>CI/CD 갱신시 프론트에서 해야할 것.</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2666985459</link>
         <description><![CDATA[<div>CI/CD 에서 도커 빌드가 갱신될 때마다 해줘야 할 것들<br><br>-&gt; docker-compose.yml 파일이 있는 디렉토리에서 터미널(A라고 지칭하겠음) 열고&nbsp; // docker 관련 행위<br>1. docker-compose stop&nbsp; &nbsp; // 실행되고 있는 doc-compose 중지<br>2. docker-compose rm -f&nbsp; &nbsp; &nbsp; &nbsp;//&nbsp; 중지한 doc-compose 제거하기<br>3. docker-compose pull&nbsp; &nbsp; &nbsp; &nbsp;// 갱신된 doc-compose 받아오기<br>4. docker-compose up -d&nbsp; &nbsp; &nbsp;// 갱신된 doc-compose 실행하기<br><br>-&gt;&nbsp; 위와 같은 (d-com.yml 있는) 디렉토리에서 새로운 터미널(B라고 지칭) 열고&nbsp; // mysql 관련 행위<br>1. docker exec -it busking_mysql /bin/bash &nbsp; // docker에 있는 busking mysql bash 터미널 열기<br>bash가 열리면<br>2. mysqlsh&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// mysql shell실행<br>3. busking&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; 패스워드 입력<br>4. N&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 패스워드 저장할래 ? No<br>그럼 MySQL Shell 이열림<br>5. \sql<br>6. use busking;&nbsp; &nbsp; &nbsp; &nbsp;// busking 스키마가 열림<br><br>++++ 추가 명령어<br>show tables;&nbsp; &nbsp; &nbsp;// 해당 스키마에 존재하는 모든 테이블 보기<br>select * from user;&nbsp; &nbsp; // user 테이블에 존재하는 모든 목록 보기<br>insert into user values ("id",1,"email","password","phoneNumber","realName","role","username") &nbsp; // 유저 테이블에 데이터 담기</div>]]></description>
         <enclosure url="" />
         <pubDate>2023-08-21 02:23:57 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2666985459</guid>
      </item>
      <item>
         <title>지금 떠오르는 내가 해야할 일들</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2666995125</link>
         <description><![CDATA[<div>- 자바스크립트 공부<br>- 영어 공부<br>- 리액트 복습<br>- 타입스크립트 공부<br>- 알고리즘 다시 잡기<br>- 인프런에서 김영한 http 강의 끊고 듣기<br>- sql 프로그래머스 고득점 kit 다 풀기<strong><br></strong><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2023-08-21 02:32:33 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2666995125</guid>
      </item>
      <item>
         <title>리액트를 다루는 기술 ( ~ 59p)</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2675193332</link>
         <description><![CDATA[<div>리액트는 자바스크립트 라이브러리로 사용자 인터페이스를 만드는 데 사용합니다. 구조가 MVC,MVW 등인 프레임워크와 달리, 오직 V(View)만 신경 쓰는 라이브러리.<br><br>렌더링 : 사용자 화면에 뷰를 보여 주는 것.<br><br>리액트의 주요 특징<br>- Virtual DOM 사용<br>: DOM 부터 알아야 하는데 DOM이란 Document Object Model의 약어. 즉, 객체로 문서 구조를 표현하는 방법으로 XML이나 HTML로 작성.<br><br>리액트는 Virtual DOM 방식을 사용하여 DOM 업데이트를 추상화함으로써 DOM 처리 횟수를 최소화하고 효율적으로 진행.<br><br>Virtual DOM을 사용하면 실제 DOM에 접근하여 조작하는 대신, 이를 추상화한 자바스크립트 객체를 구성하여 사용함.<br><br>리액트에서 데이터가 변하여 웹 브라우저에 실제 DOM을 업데이트할 때는 다음 세 가지 절차를 밟음.<br>1. 데이터를 업데이트 하면 전체 UI를 Virtual DOM에 리렌더링.<br>2. 이전 Virtual DOM에 있던 내용과 현재 내용을 비교<br>3. 바뀐 부분만 실제 DOM에 적용.<br><br>리액트는 정말 뷰만 신경 쓰는 `라이브러리` 이므로 기타 기능은 직접 구현하여 사용해야 함.<br>-&gt; 대신 다른 라이브러리로 라우팅, 상태 관리, Ajax 처리 등의 빈 자리를 채울 수 있음.<br><br>Node.js<br>: 크롬 V8 자바스크립트 엔진으로 빌드한 자바스크립트 런타임. 이것으로 웹 브라우저 환경이 아닌 곳에서도 자바스크립트를 사용하여 연산할 수 있음.<br><br>babel-loader<br>: 자바스크립트 파일들을 불러오면서 최신 자바스크립트 문법으로 작성된 코드를 바벨이라는 도구를 사용하여 ES5 문법으로 변환해 줌.<br><br>Q.왜 ES5 문법으로 변환함?<br>A. ES5는 이전 버전의 자바스크립트. 이렇게 변환하는 이유는 구버전 웹 브라우저와 호환하기 위해서. 구버전 웹 브라우저에서는 최신 자바스크립트가 실행되지 않기 때문에 사전에 변환해주는 작업이 필요.<br><br>JSX로 작성된 코드는 브라우저에서 실행되기 전에 코드가 번들링되는 과정에서 바벨을 사용하여 일반 자바스크립트 형태의 코드로 변환<br> </div>]]></description>
         <enclosure url="" />
         <pubDate>2023-08-28 14:06:01 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2675193332</guid>
      </item>
      <item>
         <title>신한 해커톤 2일차</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2681729124</link>
         <description><![CDATA[<div>컴포넌트 라이브러리 https://tilnote.io/pages/637f934dbd82f57d88aaf711<br><br>어린이 UI/UX 참고사항<br>https://brunch.co.kr/@wepostit/6<br>https://three-stars.tistory.com/10<br><br>회원가입 UX/UI<br>https://yozm.wishket.com/magazine/detail/1508/<br><br>npm install primereact<br><br></div><pre>npx create-react-app my-app --template pwa-typescript</pre>]]></description>
         <enclosure url="https://tilnote.io/pages/637f934dbd82f57d88aaf711" />
         <pubDate>2023-09-02 06:01:47 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2681729124</guid>
      </item>
      <item>
         <title>CSS 중 BORDER-CSUTOM</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2743863191</link>
         <description><![CDATA[]]></description>
         <enclosure url="https://neumorphism.io/#db8080" />
         <pubDate>2023-10-12 15:44:45 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2743863191</guid>
      </item>
      <item>
         <title>개발자 면접 키트</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2749672815</link>
         <description><![CDATA[]]></description>
         <enclosure url="https://careerly.co.kr/comments/90790?from=trends&amp;order=1" />
         <pubDate>2023-10-16 23:36:02 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2749672815</guid>
      </item>
      <item>
         <title>아이디어 찾을 때</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2749672904</link>
         <description><![CDATA[]]></description>
         <enclosure url="https://www.hanium.or.kr/portal/project/awardList.do" />
         <pubDate>2023-10-16 23:36:12 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2749672904</guid>
      </item>
      <item>
         <title>토이프로젝트 참고</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2749760283</link>
         <description><![CDATA[]]></description>
         <enclosure url="https://devfolio.kr/" />
         <pubDate>2023-10-17 00:50:21 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2749760283</guid>
      </item>
      <item>
         <title>다시 패들렛 작성하기</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2903415503</link>
         <description><![CDATA[<p>노션에 정리하는 것도 좋지만,</p><p>여기에 적는 것이 내가 다시 읽기에도 괜찮은 것 같아서 다시 차곡차곡 쌓아가보자.</p>]]></description>
         <enclosure url="" />
         <pubDate>2024-03-03 17:22:24 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2903415503</guid>
      </item>
      <item>
         <title>개발블로그 잘 작성하는 법. ( 꼭 읽어보기 )</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2912789460</link>
         <description><![CDATA[<p><a rel="noopener noreferrer nofollow" href="https://f-lab.kr/blog/developer-blog-tips">https://f-lab.kr/blog/developer-blog-tips</a></p>]]></description>
         <enclosure url="https://f-lab.kr/blog/developer-blog-tips" />
         <pubDate>2024-03-10 16:28:07 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2912789460</guid>
      </item>
      <item>
         <title>포트폴리오 작성할 때 참고할 곳</title>
         <author>photo_114</author>
         <link>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2919902189</link>
         <description><![CDATA[]]></description>
         <enclosure url="https://www.rainpour.me/resume-2024" />
         <pubDate>2024-03-15 02:32:16 UTC</pubDate>
         <guid>https://padlet.com/photo_114/5dybqdr0jz0jn0hx/wish/2919902189</guid>
      </item>
   </channel>
</rss>
