<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>woo_.log</title>
        <link>https://velog.io/</link>
        <description>그냥저냥 끄적끄적 :)</description>
        <lastBuildDate>Tue, 18 Oct 2022 00:30:44 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>woo_.log</title>
            <url>https://velog.velcdn.com/images/_woo/profile/3adfc7a1-1727-47fd-86cf-123218e11c6a/image.PNG</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. woo_.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/_woo" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[URLSearchParams()]]></title>
            <link>https://velog.io/@_woo/URLSearchParams</link>
            <guid>https://velog.io/@_woo/URLSearchParams</guid>
            <pubDate>Tue, 18 Oct 2022 00:30:44 GMT</pubDate>
            <description><![CDATA[<h1 id="❗️urlsearchparams">❗️URLSearchParams()</h1>
<blockquote>
<p><strong>URLSearchParams 인터페이스는 URL의 쿼리 문자열을 대상으로 작업할 수 있는 유틸리티 메서드를 정의</strong> -MDN-</p>
</blockquote>
<p>이게 왜 나왔냐....하면 회사에서 받은 로그인 페이지 구현을 위해 외부 api를 사용하고 있던 중이었다. 
처음엔 그동안 했던 것처럼 url,body,res값 등을 입력했는데 통신만 하면 status code 200 ok가 되지만 response 값이 null이 나왔다. 
<img src="https://velog.velcdn.com/images/_woo/post/687f0ade-35c2-446c-9e5f-59b09303e936/image.png" alt="">
<img src="https://velog.velcdn.com/images/_woo/post/23d28e09-3368-422e-a213-9abd029b9fc3/image.png" alt=""></p>
<p>난 이걸 일주일이 넘게 헤매고 있었는데 본부장님이 해결책을 주셨다. 외부 api라서 그동안 우리가 알던 get,post와 의미가 다르다고 말씀해 주셨는데 아직 이해가 다 되지 않아서 이 부분은 더 공부할거다.</p>
<blockquote>
<p>결국엔 찾은 해답이 <strong>URLSerachParams()를 바디값에 넣어주는 것</strong>이었다. </p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/_woo/post/fd673242-6f70-4ee7-b170-4a19e2afffcb/image.png" alt="">
<img src="https://velog.velcdn.com/images/_woo/post/bdbd600f-d598-4038-ab59-7b8b0dc5c462/image.png" alt=""></p>
<p>아직도 왜? 라는 말밖에 나오지 않는다. 공부할 게 너무 많다.</p>
<p>우물 밖을 나오니 처음 겪는 일들이 많아졌다. 회사에서 무언가를 알려주실 때마다 새로운 단어들도 넘쳐났다. 그것들을 모두 내것으로 만들어서 더 성장하자!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[CSR / SSR]]></title>
            <link>https://velog.io/@_woo/CSR-SSR</link>
            <guid>https://velog.io/@_woo/CSR-SSR</guid>
            <pubDate>Mon, 26 Sep 2022 07:31:45 GMT</pubDate>
            <description><![CDATA[<h1 id="📌-csr-client-side-rendering">📌 CSR (Client Side Rendering)</h1>
<blockquote>
<p>렌더링이 클라이언트 쪽에서 일어나는 방식.
→브라우저에서 자바스크립트로 콘텐츠를 렌더링 하는 것.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/_woo/post/fe8cdbbc-107e-45ca-9509-f812b395bcdf/image.png" alt="">
<img src="https://velog.velcdn.com/images/_woo/post/1b338157-9bbd-4e39-85bf-095133519070/image.png" alt=""></p>
<blockquote>
<p>자바스크립트가 모두 다운로드 되고 실행되기 전까지 사용자는 볼 수 없다.</p>
</blockquote>
<ul>
<li>브라우저에서 빈 html 파일을 내려받은 후 사용자의 요청에 따라 js 코드를 통해 렌더링 하는 방식</li>
<li>초기에 js 파일을 모두 내려받기 때문에 로딩 속도가 오래 걸린다.</li>
<li>필요할 때만 데이터를 서버에 요청하므로 페이지 전환이 빠르고 서버에 부담이 적다.</li>
<li>하지만 처음 html 파일이 비어있어 검색엔진최적화(SEO)에는 문제가 있다.</li>
</ul>
<br>

<h1 id="📌-ssr-server-side-rendering">📌 SSR (Server Side Rendering)</h1>
<blockquote>
<p>서버에서 렌더링 준비를 마친 상태로 클라이언트에 전달하는 방식.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/_woo/post/7d80f0a5-bccd-47ec-b539-bd19eacd3426/image.png" alt="">
<img src="https://velog.velcdn.com/images/_woo/post/417a0dce-0bba-42a0-adc1-8a5761d1fe5f/image.png" alt=""></p>
<blockquote>
<p>서버에서 이미 렌더가능한 상태로 클라이언트에 전달되기 때문에 사용자는 자바스크립트가 다운로드 되는 동안 볼 수 있다. </p>
</blockquote>
<ul>
<li>서버에서 모든 파일을 다 읽어들인 후에 클라이언트에 보여지므로 초기 사용자에게 보여지는 화면 속도가 빠르다. 즉, 검색엔진최적화에 효과적이다.</li>
<li>페이지를 다시 새로고침 할 때마다 모든 페이지를 재렌더링 하기 때문에 화면 깜빡임 현상이 나타난다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[wecode] 3개월의 기록]]></title>
            <link>https://velog.io/@_woo/wecode-3%EA%B0%9C%EC%9B%94%EC%9D%98-%EA%B8%B0%EB%A1%9D</link>
            <guid>https://velog.io/@_woo/wecode-3%EA%B0%9C%EC%9B%94%EC%9D%98-%EA%B8%B0%EB%A1%9D</guid>
            <pubDate>Sun, 21 Aug 2022 11:07:18 GMT</pubDate>
            <description><![CDATA[<h1 id="🌱-위코드에서의-3개월-🌱">🌱 위코드에서의 3개월 🌱</h1>
<p>위코드를 시작하기전 나는 바리스타를 하다가 몸의 이상을 느껴 퇴사를 하고 새로운 일을 알아보고 있었다. 처음엔 오래할 수 있는 일을 찾다가 웹디자인이라는 것을 알게되고 국비학원에 등록해 배우기 시작했다. <br>그곳에서 디자인뿐만 아니라  퍼블리싱도 배우면서 처음 개발이란 걸 배우게 되었다. 이때 &#39;왜 코드가 안되지..&#39; 하다가 결국엔 해결하고 희열을 느껴, 이 길로 가보자! 하고 마음먹은 후 더 공부할 수 있는 곳을 찾다가 위코드에 오게 되었다.</p>
<br>
위코드를 등록하면 처음으로 마주하는게 사전스터디인데 사실 그전까지 공부를 안하고 참여하게되서 적응하기 힘들었다. 하지만 열정 넘치는 사전스터디 팀원들 덕분에 레플릿과 알고리즘문제도 풀어가면서 조금씩 자바스크립트에 적응해가면서 개강을 기다리게되었다. <br>

<br>

<p>개강을 하면 동기들과 첫 인사를 하고 바로 공부를 시작하는데 이때 인사한 옆자리 동기와는 이제 친구가 될 정도로 가까운 사이가 되었다. 그만큼 이곳은 동기가 많은 힘이 되는 곳이라는 것을 느꼈다. <br> 레플릿을 풀고, 위스타그램 과제를 하면서 고비가 많이 왔었다. 이 때 멘탈이 많이 나갔는데 동기들의 격려로 많이 이겨냈다. <br>본격적으로 리액트를 배울때는 너무 신기했다. 들어가기전에 동기들과 다같이 인강을 들으면서 미리 예습했는데 그게 도움이 많이 되었다. 커리큘럼을 나가면서 100% 이해는 안되지만 넘어가는 과정들이 처음엔 받아들여지지 않았지만 혼자 공부하는게 아닌 다같이 하는 과정이기에 안된다고 머물러 있을 수 없었다. </p>
<br>
팀프로젝트를 하기 전 걱정이 너무 많았다. 동기들에게 민폐가 될 까 너무 걱정이었다. <br>
나는 운이 좋게도 프로젝트 팀원들을 너무 좋은 사람들을 만났다. 그 사람들에게 민폐가 되고 싶지 않아 열심히 하게 되었다. <br>
이 기간동안 협업이라는 것을 많이 배우게 되었다. 백엔드와 대화하는 법도 배우고 멘토님과 동기들에게 질문하는 법도 배웠다. 모른다고 무작정 물어보는 것이 아닌 해보고, 찾아보고, 생각해보고 그러고도 안되면 질문을 하러 갔다. 그분들의 시간도 중요하기 때문에...!! 그리고 발표까지 해보게 된 기간이었다....!! <br>
<br>
기업협업... 개인적으로 이 기간에는 힘든 기간이었다. 내부적인 문제로 협업기간동안 많은 시간 소통이 되지 않았고, 결국엔 동기와 개인공부를 하는 시간이 주 였다. 물론 이 과정에서도 배운 점이 분명하게 있었지만, 아쉬움이 남는것은 어쩔 수 없는 것 같다. <br>
<br>
위코드를 다니면서 제일 많이 얻은 것은 사람이라고 말할 수 있다. 결국엔 남는 것은 동기들이였다. 동기들이 없었다면 3개월을 무사히 마칠 수 없었을 것이다. 이 사람들과 현업에서 다시 만나는 날이 오길 바라며 열심히 해나가야겠다 :)
<br>

<p><img src="https://velog.velcdn.com/images/_woo/post/0cc951d6-36d8-428e-8c67-0259b3275aa9/image.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[WESCANNER] 2차 프로젝트 회고]]></title>
            <link>https://velog.io/@_woo/WESCANNER-2%EC%B0%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%ED%9A%8C%EA%B3%A0</link>
            <guid>https://velog.io/@_woo/WESCANNER-2%EC%B0%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%ED%9A%8C%EA%B3%A0</guid>
            <pubDate>Sun, 21 Aug 2022 05:57:03 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>부제 : <em>wecode에서 2차 프로젝트 끝💦</em></p>
</blockquote>
<hr>
<p><a href="https://github.com/wecode-bootcamp-korea/34-2nd-Wescanner-frontend">Wescanner 팀 깃허브</a></p>
<h3 id="🏨-프로젝트명--wescanner">🏨 프로젝트명 : Wescanner</h3>
<h3 id="🏨-프로젝트-기간--220704--220715">🏨 프로젝트 기간 : 22.07.04 ~ 22.07.15</h3>
<h3 id="🏨-프로젝트-구성--frontend---3명-backend---1명">🏨 프로젝트 구성 : frontend - 3명, backend - 1명</h3>
<br>


<h3 id="🛫-리스트-페이지">🛫 <strong>리스트 페이지</strong></h3>
<p><img src="https://velog.velcdn.com/images/_woo/post/9ac0fba8-2c5d-4f53-a234-a72f6b021979/image.gif" alt=""></p>
<blockquote>
<p>기능목표</p>
</blockquote>
<ul>
<li>각 필터 조건 눌렀을 시 필터링 기능 구현 ✅</li>
<li>티켓 부분 등급을 별 아이콘으로 나타내기 ✅</li>
<li>호텔 주소마다 지도에 마커 나타내기  ❌...</li>
</ul>
<ul>
<li><p>필터, 티켓, 지도 세부분으로 나눠서 레이아웃을 나눴다.</p>
</li>
<li><p>필터 부분은 무료취소를 제외하고는 상수데이터를 만들어 map() 함수를 돌렸다.</p>
</li>
<li><p>티켓 리스트 안에 등급을 별 아이콘으로 나타낼 때 반복문을 사용해 기능 구현했다. 
<img src="https://velog.velcdn.com/images/_woo/post/7f554a9c-4daf-4cb0-aa06-94eb2f8c1f14/image.png" alt=""></p>
</li>
<li><p>구글지도API 를 이용해 화면에 나타냈지만 각각의 주소를 지도안에 나타내는 기능을 구현하지 못했다.... <del><em>공부해서 다시 해보자 꼭..ㅠㅠ</em></del></p>
</li>
</ul>
<br>

<h3 id="🛫-공유하고-싶은-코드">🛫 공유하고 싶은 코드</h3>
<p><img src="https://velog.velcdn.com/images/_woo/post/17b6f44d-5fb1-4512-83e2-e3accb7681e8/image.png" alt=""></p>
<blockquote>
<p>필터링 지옥에 빠진 2차 프로젝트.... 무료취소, 가격, 등급, 여행자유형 조건을 다 눌렀을 때 모든 필터가 적용될 수 있도록 조건들을 쌓아서 가져가야 하는 기능이라 기억에 많이 남는다...!! </p>
</blockquote>
<br>

<h3 id="🛫-전체-영상">🛫 전체 영상</h3>
<p><img src="https://velog.velcdn.com/images/_woo/post/b5668745-4590-42f3-a7c1-772b257cd1b7/image.gif" alt=""></p>
<br>

<h3 id="🛫-2차-프로젝트를-마치며">🛫 2차 프로젝트를 마치며....</h3>
<p>옆에 동료의 힘이 중요하다는 것을 다시 한번 깨닫게 된 계기가 되었다. 
팀원 한 분(<del><em>의지하고있던 지훈신...ㅠㅠ</em></del>)이 코로나에 걸려 중간부터는 나오지 못하게되면서 내 멘탈이 흔들렸지만, 남아있는 팀원들과 &#39;욕심내지 말고 할 수 있는데까지 해보자&#39; 하며 서로 으쌰으쌰해서 마음을 다잡았다. <span style="font-size:13px"><del><em>(결국 나만 잘하면 되는거였다)</em></del></span></p>
<p>1차 때 안해봤던 기능을 하면서 시간을 많이 쓰게 되었다. 필터를 만만하게 봤던 내자신을 한 대 때리고 싶었다... 멘토님과 팀원들, 동기들이 없었다면 끝까지 가지 못했을 기간이었다. 하지만 배운점도 많기에 잊고 싶은 기억은 아닌 날들이었다...!!!
이러한 과정들을 겪으면서 발표 전 날 영상을 찍을 때 2주동안 각자 자리에서 고생한 팀원들에게 너무 고맙고 미안했다. </p>
<p>이번 프로젝트의 경험을 잊지 않고 후에 더 발전해있는 사람이 되자 혜림아!!!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[WISH ] 1차 프로젝트  회고 ]]></title>
            <link>https://velog.io/@_woo/WISH-1%EC%B0%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-Nav-Footer-%EC%9E%A5%EB%B0%94%EA%B5%AC%EB%8B%88-%EA%B5%AC%ED%98%84</link>
            <guid>https://velog.io/@_woo/WISH-1%EC%B0%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-Nav-Footer-%EC%9E%A5%EB%B0%94%EA%B5%AC%EB%8B%88-%EA%B5%AC%ED%98%84</guid>
            <pubDate>Mon, 04 Jul 2022 01:17:38 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>위코드에서 첫번째 프로젝트로 <strong>LUSH</strong>를 클론코딩하기로 했는데 나는 그 중 Nav, Footer, 장바구니 페이지를 리액트로 구현했다.</p>
</blockquote>
<p><a href="https://github.com/wooohyerim/34-1st-Wish-Korea-frontend">WISH KOREA팀 깃허브</a></p>
<hr>
<p>❗️ 프로젝트명 : WISH KOREA
❗️ 프로젝트 기간 : 2022.06-20 ~ 2022.07.01
❗️ 프로젝트 구성 : frontend - 4명, backend - 1명</p>
<hr>
<h2 id="1-nav">1. Nav</h2>
<p><img src="https://velog.velcdn.com/images/_woo/post/a88bfb47-d8f9-43b4-817b-a4e258bf9c06/image.gif" alt=""></p>
<ul>
<li>목표 :  레이아웃 및 마우스오버 기능 구현</li>
</ul>
<blockquote>
<p>-마우스를 지정한 카테고리에 올리면 하위 카테고리가 나올 수 있도록 기능구현을 했고, 마이페이지 아이콘에도 마우스를 올리면 로그인, 회원가입을 할 수 있는 박스가 나오도록 구현했다.</p>
</blockquote>
<h2 id="2-footer">2. Footer</h2>
<p>  <img src="https://velog.velcdn.com/images/_woo/post/59b2933e-b459-49e6-9aad-1032e393ea6f/image.png" alt=""></p>
<blockquote>
<p> 푸터에는 특별한 기능구현을 넣지 않고 반복되는 코드를 map() 함수를 이용했다.</p>
</blockquote>
<pre><code class="language-javascript">const TITLE_LIST = [
  { id: 1, title: &#39;스카우트&#39; },
  { id: 2, title: &#39;회사소개&#39; },
  { id: 3, title: &#39;개인정보처리방침&#39; },
  { id: 4, title: &#39;영상정보관리지침&#39; },
  { id: 5, title: &#39;이용약관&#39; },
  { id: 6, title: &#39;고객센터&#39; },
];

const COPY_LIST = [
  {
    id: 1,
    text: &#39;서울특별시 강남구 테헤란로 427 위코드 | 운영자: 주식회사 위시코리아&#39;,
  },
  { id: 2, text: &#39;대표이사 : 정진관(Backend Developer)&#39; },
  { id: 3, text: &#39;사업자 등록번호:523-34-20226&#39; },
  { id: 4, text: &#39;통신판매업 신고번호 : 2022-안중영-02857&#39; },
  { id: 5, text: &#39;개인정보보호책임자 : 정예지&#39; },
];</code></pre>
<blockquote>
<p>리스트에 해당하는 내용들을 가독성과 유지보수를 위해 상수데이터로 작성했다.</p>
</blockquote>
<h2 id="3-cart">3. Cart</h2>
<p><img src="https://velog.velcdn.com/images/_woo/post/a1c18fd4-c69e-49de-b23f-e7e6f1cb8da3/image.gif" alt=""></p>
<ul>
<li>기능목표 <ul>
<li>체크박스 전체선택 및 개별선택 ✅</li>
<li>선택한 상품 삭제 및 전체삭제 ✅</li>
<li>선택한 상품 수량이 총 주문금액에 적용되는 기능 구현 ✅    </li>
</ul>
</li>
</ul>
<blockquote>
<ol>
<li>제품 리스트를 백엔드와 통신 전 mock data를 이용해 나타냈다. </li>
<li>반복되는 리스트 부분을  map()함수를 이용해 구현했다. </li>
<li>수량버튼을 ProductCount 컴포넌트로 따로 만들어 관리했다.</li>
</ol>
</blockquote>
<ul>
<li><p>공유하고싶은 코드</p>
<pre><code class="language-javascript">const [checkedBox, setCheckedBox] = useState([]);
// const [isAllchecked, setIsAllChecked] = useState(false) 처음 작성한 코드
const isAllChecked =cartList.length !== 0 &amp;&amp; cartList.length === checkedBox.length;//리팩토링 후 작성한 코드

const handleCheckAll = () =&gt; {
  setCheckedBox(cartList.map(el =&gt; el.cart_id));
  if (isAllChecked) {
    setCheckedBox([]);
  }
}; //전체 체크박스

const handleCheck = e =&gt; {
  const { id, checked } = e.target;
  setCheckedBox([...checkedBox, Number(id)]);
  if (!checked) {
    setCheckedBox(checkedBox.filter(item =&gt; item !== Number(id)));
  }
};//개별 체크박스
</code></pre>
</li>
</ul>
<pre><code>&gt;체크박스 기능구현 중 전체 체크박스와 개별 체크박스를 각각의 state로 저장했는데 리팩토링 중 하나의 ```state```로도 계산이 가능하다는 리뷰를 받고, 4시간동안의 고민 끝에 팀원의 도움으로 ```state```가 아닌 변수에 저장하는 방법을 알게되었다. &lt;br&gt;
리액트 하면  ```state```에 저장하는것을 당연하게 생각했던 점을 반성하게 되었다. _~~역시 정답은 없는 개발의 세계...~~_ 


&lt;br&gt;

&lt;전체영상&gt;
![](https://velog.velcdn.com/images/_woo/post/90954f3e-795d-4bad-9199-cf775463c36a/image.gif)



## 4. 회고

### 4-1. 좋았던 점
&gt;* 매일 아침 스탠드업 미팅을 통해 누구 하나 빠지지 않고 전체가 소통하면서 과정을 공유하는 점이 좋았다. 
* Trello를 활용하면서 실제 협업에서 쓰이는 툴들을 사용할 수 있던 점이 너무 좋았다.
* 맡은 페이지들을 시간분배를 적절하게 해서 기간내로 마무리 지은 점에서 스스로 뿌듯했다. 
* 프로젝트를 하면서 협업 마인드를 배우게 되었다. 

### 4-2. 아쉬웠던 점
&gt; 처음해보는 프로젝트이다보니 기간내에 끝내야한다는 생각에 늦게까지 하다보니 빠르게 마무리되고, 시간이 지나고보니 우선순위 파악이 어려웠다. 다음 프로젝트때는 우선순위를 파악하고 전체적인 흐름을 파악해나가면서 작업을 해나가야겠다.

### 4-3. 위코드 한달간의 회고
&gt;
프로젝트를 하면서 코드를 대하는 태도가 달라졌다. 그동안 위스타그램과 레플릿 문제를 접하면서 안풀리면 ~~_&#39;나는 왜이렇게 못할까&#39;_~~, ~~_&#39;이 직종이 안맞나&#39;_~~ 하면서 우울해했는데 이제는 우선 문제를 생각해보고, 검색을 하고, 그럼에도 안풀리면 질문을 하는 코드를 놓지 않는 태도로 바뀌었다.
한달 전 나의 모습과 생각한다면, 포기를 쉽게 하던 내가 팀원들에게 피해를 주고싶지 않은 마음이 크다보니 태도가 바뀌게 된 계기가 된 것 같았다.
결국엔 이러한 태도가 나에게 부정적인 영향은 끼치지 않는다는 점과 프로젝트로 인해 더 나아진 모습으로 변한 점에서 2주의 기간동안 아쉬웠던 부분보단 얻은게 많은 기간이 되었다.  







</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[CSS 레이아웃 - inline, inline-block, block ]]></title>
            <link>https://velog.io/@_woo/CSS-%EB%A0%88%EC%9D%B4%EC%95%84%EC%9B%83-inline-inline-block-block</link>
            <guid>https://velog.io/@_woo/CSS-%EB%A0%88%EC%9D%B4%EC%95%84%EC%9B%83-inline-inline-block-block</guid>
            <pubDate>Tue, 24 May 2022 14:58:46 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>display 속성은 요소를 어떻게 보여줄지를 결정한다.</p>
</blockquote>
<br>

<h3 id="1-block">1. block</h3>
<ul>
<li>기본적으로 가로 영역을 모두 채우며, block 용소 다음에 나오는 태그는 줄바꿈이 된 것처럼 보인다.</li>
<li>width, height 속성을 지정할 수 있다.
<br><br></li>
</ul>
<h3 id="2-inline">2. inline</h3>
<ul>
<li><code>block</code> 속성과 다르게 줄바꿈이 되지 않고, 컨텐츠를 감싸게 된다.</li>
<li>width, height 속성을 지정할 수 없다.
<br><br></li>
</ul>
<h3 id="3-inline-block">3. inline-block</h3>
<ul>
<li><code>inline</code> 과 <code>block</code>을 합쳐놓은 속성이다.</li>
<li>기본적으로 <code>inline</code> 속성을 가지고 있지만, 크기를 바꿀 수 있다.
<br><br></li>
</ul>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width&quot;&gt;
    &lt;title&gt;repl.it&lt;/title&gt;
    &lt;link href=&quot;style.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div class=&quot;block&quot;&gt;block&lt;/div&gt;
    &lt;div class=&quot;inline&quot;&gt;inline&lt;/div&gt;
    &lt;div class=&quot;inline-block&quot;&gt;inline-block&lt;/div&gt;
    &lt;script src=&quot;index.js&quot;&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre>
<pre><code class="language-css">div{
  margin-bottom: 10px;
}

.block{
  display: block;
  background: pink;
}

.inline{
  display: inline;
  background: yellow;
  width: 200px;
}

.inline-block{
  display: inline-block;
  background: skyblue;
  width: 200px;
}</code></pre>
<p><img src="https://velog.velcdn.com/images/_woo/post/9f4d1aa9-dae3-4e81-a78c-8c05333773d9/image.png" alt=""></p>
<blockquote>
<p>inline 속성에서 width 값을 지정해도 적용되지 않는 것을 확인했다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[CSS 레이아웃- Position]]></title>
            <link>https://velog.io/@_woo/CSS-Position</link>
            <guid>https://velog.io/@_woo/CSS-Position</guid>
            <pubDate>Tue, 24 May 2022 14:22:33 GMT</pubDate>
            <description><![CDATA[<h1 id="1-position-속성---relative-absolute-fixed">1. position 속성 - relative, absolute, fixed</h1>
<blockquote>
<p>*<em>position *</em>: 요소의 위치를 정의하며, top, bottom, left, right 속성과 함께 사용하여 위치를 지정한다.</p>
</blockquote>
<br>

<ul>
<li><strong>relative (상대위치)</strong> : 기본 위치를 기준으로 좌표 프로퍼티(top, bottom, left, right)를 사용하여 위치를 이동시킨다.</li>
</ul>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;style&gt;
    body { margin: 0; }
    .parent {
      width: 150px;
      height: 150px;
      background: #bcbcbc;
      border: 1px solid #bcbcbc;
      margin: 50px;
    }
    .relative-box {
      position: relative;
      top: 50px; left: 50px;
      background: #2E303D;
      color: #e55c3c;
      font-weight: bold;
      text-align: center;
      line-height: 150px;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div class=&quot;parent&quot;&gt;
    &lt;div class=&quot;relative-box&quot;&gt;relative box&lt;/div&gt;
  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><img src="https://velog.velcdn.com/images/_woo/post/d0116397-7597-4c9f-b6c5-d82c636532ac/image.png" alt=""></p>
<blockquote>
<p>박스가 배치될 때 다른 블록 요소에 영향을 주지 않고 배치된다.</p>
</blockquote>
<br>

<ul>
<li><strong>absolute (절대위치)</strong> : 부모 요소 또는 가장 가까이 있는 조상 요소(static 제외)를 기준으로 좌표 프로퍼티(top, bottom, left, right)만큼 이동한다. 즉, relative, absolute, fixed 프로퍼티가 선언되어 있는 부모 또는 조상 요소를 기준으로 위치가 결정된다. 따라서 부모 요소를 배치의 기준으로 삼기 위해서는 부모 요소에 relative를 정의해야한다.</li>
</ul>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;style&gt;
    body { margin: 0; }
    .parent {
      width: 200px;
      height: 200px;
      background: #bcbcbc;
      border: 1px solid #bcbcbc;
      margin: 50px 0 0 300px;
      position: relative;
    }
    .absolute-box {
      position: absolute;
      height: 200px; width: 200px;
      top: 50px; left: 50px;
      color: #e55c3c;
      font-weight: bold;
      text-align: center;
      background: #2E303D;
      line-height: 200px;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div class=&quot;parent&quot;&gt;
    &lt;div class=&quot;absolute-box&quot;&gt;absolute box (in parent)&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class=&quot;absolute-box&quot;&gt;absolute box (no parent)&lt;/div&gt;&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><img src="https://velog.velcdn.com/images/_woo/post/a2f4f646-feec-433f-8c28-63ea2f740ef4/image.png" alt=""></p>
<blockquote>
<p>다른 블록 요소의 배치에 영향을 주고 본문 요소와 겹칠 수 있다.</p>
</blockquote>
<br>

<ul>
<li><strong>fixed (고정위치)</strong> : 부모 요소와 관계없이 브라우저의 viewport를 기준으로 좌표프로퍼티(top, bottom, left, right)을 사용하여 위치를 이동시킨다.</li>
</ul>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;style&gt;
    body { margin: 0; }
    .fixed-box {
      position: fixed;
      color: #e55c3c;
      font-weight: bold;
      text-align: center;
      background: #2E303D;
    }
    .sidebar {
      width: 50px;
      height: 100%;
      top: 0;
      right: 0;
      padding-top: 100px;
    }
    .footer {
      width: 200px;
      width: 100%;
      height: 50px;
      bottom: 0;
      left: 0;
      line-height: 50px;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div class=&quot;fixed-box sidebar&quot;&gt;fixed box (side-bar)&lt;/div&gt;
  &lt;div class=&quot;fixed-box footer&quot;&gt;fixed box (footer)&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><img src="https://velog.velcdn.com/images/_woo/post/a45c28ba-5383-40df-baaa-20870a887c2b/image.png" alt=""></p>
<blockquote>
<p>스크롤이 생성되어도 사라지지 않고 지정한 위치에 있다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Semantic Web & Semantic Tags]]></title>
            <link>https://velog.io/@_woo/Semantic-Web-Semantic-Tags</link>
            <guid>https://velog.io/@_woo/Semantic-Web-Semantic-Tags</guid>
            <pubDate>Tue, 24 May 2022 13:59:49 GMT</pubDate>
            <description><![CDATA[<p>&quot;사이트에 이미지를 넣는 방법은 두 가지가 있습니다. <code>img</code> 태그를 사용하는 것과 <code>div</code> 태그에 <code>background-image</code> 속성을 추가하는 것. 두 가지 방법의 차이점과 각각 어떠한 경우에 사용하면 좋은지 설명해보세요.&quot;</p>
<br>
위의 질문에 답하기 위해서는 먼저 Semantic Web & Semantic Tags의 개념을 알아야한다.

<blockquote>
<p><strong>Semantic Tag</strong> : 브라우저, 검색엔진, 개발자 모두에게 콘텐츠의 의미를 명확히 설명하는 역할을 한다.<br>
<strong>Semantic Web</strong> : 웹에 존재하는 수많은 웹페이지들에 메타데이터(Metadata)를 부여하여, 기존의 잡다한 데이터 집합이었던 웹페이지를 <span style="color:red">의미</span>와 <span style="color:red">관련성</span>을 가지는 거대한 데이터베이스로 구축하고자 하는 발상이다.</p>
</blockquote>
<br>

<ul>
<li>Semantic Tag는 자신이 사용된 의미를 명확히 전달하는 요소로, <strong>form</strong>, <strong>table</strong>, <strong>img</strong> 등이 있다.</li>
</ul>
<p>다음으로는 HTML5에 추가된 Semantic 요소들이다.</p>
<table>
<thead>
<tr>
<th align="left">요소</th>
<th align="left">의미</th>
</tr>
</thead>
<tbody><tr>
<td align="left">header</td>
<td align="left">헤더를 의미</td>
</tr>
<tr>
<td align="left">nav</td>
<td align="left">네비게이션을 의미</td>
</tr>
<tr>
<td align="left">aside</td>
<td align="left">사이드에 위치하는 공간을 의미</td>
</tr>
<tr>
<td align="left">section</td>
<td align="left">본문에 여러 내용(article)을 포함하는 공간을 의미</td>
</tr>
<tr>
<td align="left">article</td>
<td align="left">본문의 주 내용이 들어가는 공간을 의미</td>
</tr>
<tr>
<td align="left">foorter</td>
<td align="left">푸터를 의미</td>
</tr>
</tbody></table>
<br>

<ul>
<li>Non-Semantic 요소로는 <strong>div</strong>, <strong>span</strong> 등이 있으며 이 요소들은 의미가 없는 요소들이다.</li>
</ul>
<p>이 개념들을 토대로 위에 질문에 답을 하면,</p>
<blockquote>
<p><code>img</code>태그와 <code>background-image</code> 속성을 추가해서 이미지를 넣을 때 웹브라우저에서 나오는 모습은 동일하지만, <code>img</code>태그를 사용하면 의미있는 정보를 가진 웹페이지가 되고, <code>background-image</code> 속성을 사용하면 단순히 이미지를 첨부하는 것 뿐, 아무런 의미가 없다.
즉, 사용자가 정보를 얻으려 할 경우에는 <code>img</code>태그를, 단순히 웹페이지를 꾸미는 용도로는 <code>background-image</code> 속성을 사용하는 것이 좋다.</p>
</blockquote>
<p><br><br></p>
<p>참고(<a href="https://poiemaweb.com/html5-semantic-web">https://poiemaweb.com/html5-semantic-web</a>)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[WEB - 2]]></title>
            <link>https://velog.io/@_woo/WEB-2</link>
            <guid>https://velog.io/@_woo/WEB-2</guid>
            <pubDate>Thu, 19 May 2022 05:12:50 GMT</pubDate>
            <description><![CDATA[<h1 id="💻home-server">💻Home Server</h1>
<blockquote>
<p>공유기를 사용하는 환경에서 웹서버를 구동하는 법</p>
</blockquote>
<h4 id="1-router-공유기">1. Router (공유기)</h4>
<ul>
<li><p>WAN(Wide Area Network) : 인터넷에 소속되어 있어 광역 네트워크라 불린다.</p>
</li>
<li><p>LAN(Local Area Network) :  각각의 장치들이 LAN에 연결이 되면 같은 네트워크에 소속되어 지역 네트워크라 불린다.</p>
<br>

<p>즉, 공유기는 LAN 네트워크와 WAN 네트워크 사이에서 중개자의 역할을 하며, 각각의 컴퓨터들이 공유기에 연결되면 자동으로 ip가 부여되고 공유기에도 ip가 부여된다.</p>
</li>
</ul>
<p> <img src="https://velog.velcdn.com/images/_woo/post/3e192e9c-0c22-40dd-91f5-ba813974e602/image.png" alt=""></p>
<blockquote>
<p>WAN 안에서 ip는 전세계 누구나 접속가능해서 <strong>public ip address</strong>라 하며, <br>
 LAN 안에서 쓸 수 있는 ip는 <strong>private ip address</strong>라 한다.</p>
</blockquote>
<p><br><br></p>
<h4 id="2-nat-network-address-translation">2. NAT (Network Address Translation)</h4>
<blockquote>
<p>사설 ip를 쓰는 컴퓨터에서 외부 인터넷으로 접속하는 기술.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/_woo/post/df337017-6107-4a94-96e5-1b872e7ba9f1/image.png" alt=""></p>
<ol>
<li>내 컴퓨터에서 신호를 주고 공유기가 요청을 받음. <br></li>
<li>공유기는 WAN을 통해 외부로 신호를 보냄.
2-1. 내 컴퓨터 ip를 공유기 안에 기록.
2-2. 요청한 컴퓨터 주소는 외부에서 접속을 못하므로 <strong>NAT</strong> 기술로 주소를 <strong>public ip address</strong>로 변경 후 외부로 전송.<br></li>
<li>외부에서 public ip address로 응답 후 공유기는 내 컴퓨터가 요청했던 것을 파악 후 그 주소로 응답.
<br><br></li>
</ol>
<h4 id="3-port---forwarding">3. PORT - FORWARDING</h4>
<p><img src="https://velog.velcdn.com/images/_woo/post/b40eee51-3483-412d-a13a-a3f1f077a751/image.png" alt=""></p>
<blockquote>
<p>port : 특정 컴퓨터에 접속했을 때 각각의 서버를 식별할 수 있는 것. <br>
port forwarding : 공유기로 들어오는 포트 번호가 무엇이냐에 따라 내부 네트워크에 있는 특정한 머신의 특정 포트로 포워딩 할 수 있다.</p>
</blockquote>
<p>public ip address에 누군가 접속을 하면 공유기에서 private ip address로 보낸다.</p>
<br>

<h4 id="4-dynamic--static-ip-address">4. Dynamic &amp; Static IP Address</h4>
<ul>
<li><p>Dynamic IP Address : 유동 ip라 불리며,
공유기를 껐다가 다시 키면 ip주소가 변경되는 단점이 있다. <br></p>
</li>
<li><p>Static IP Address : 고정 ip라 불리며, 내 컴퓨터에 ip를 고정부여한다. </p>
</li>
</ul>
<br>

<h4 id="5-dhcp-dynamic-host-configuration-protocol">5. DHCP (Dynamic Host Configuration Protocol)</h4>
<blockquote>
<p>인터넷에 연결되어 있는 컴퓨터 내에 설정을 자동으로 할당해주는 프로토콜</p>
</blockquote>
<p>DHCP server를 통해 ip를 세팅하는 설명은 <a href="https://www.youtube.com/watch?v=6NqldlvC26Y&amp;list=PLuHgQVnccGMA52uRBmSwqcvtI5IMoFclJ&amp;index=9">생활코딩</a> 내에 자세히 나와있어서 대체한다. <span style="font-size:13px"> <em><del>역시 설명 잘해주신다...</del></em></span></p>
<p><br><br></p>
<p>참고 : <a href="https://www.youtube.com/c/%EC%83%9D%ED%99%9C%EC%BD%94%EB%94%A91">생활코딩</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[WEB - 1]]></title>
            <link>https://velog.io/@_woo/WEB-1</link>
            <guid>https://velog.io/@_woo/WEB-1</guid>
            <pubDate>Tue, 17 May 2022 15:33:45 GMT</pubDate>
            <description><![CDATA[<h1 id="💻web의-역사">💻WEB의 역사</h1>
<p>오늘날 우리가 사용하는 인터넷 안에서 검색을 하고 문서를 받는 웹의 기본 개념에 대해 알아보았다.</p>
<blockquote>
<p>1990년대에 팀 버너스 리에 의해  → 웹페이지를 만드는 편집기 개발 → 세계 최초의 웹 브라우저인 &#39;World Wide Web&#39;(www) 개발 →  info.cern.ch(웹의 시작점) 웹 서버 개발 </p>
</blockquote>
<p>이후 인터넷이 대중화가 되고 점점 더 발전하게 되었다.
<br><br></p>
<h1 id="💻client--server">💻Client &amp; Server</h1>
<p><img src="https://velog.velcdn.com/images/_woo/post/3aef2510-8ca3-490d-ada8-d587e008a160/image.png" alt=""></p>
<blockquote>
<p>웹서버 컴퓨터에 index.html 파일 안에 저장되어있는 코드가 담겨있고, 웹브라우저 컴퓨터에는 index.html 파일이 도착하고 해석한 후 화면에 표시하면 우리가 흔히 보는 웹을 보게된다.</p>
</blockquote>
<p>두 대의 컴퓨터가 서로 정보를 주고 받을 때 요청하는 컴퓨터를 Client, 응답하는 컴퓨터를 Server라 한다.</p>
<p>예를 들어,
<img src="https://velog.velcdn.com/images/_woo/post/5b3a556f-6c0c-4c3a-b4c0-32a8b17c4ce6/image.png" alt=""></p>
<p>사용자의 컴퓨터에 설치된 프로그램은 게임 클라이언트,<br> 게임회사 서버 컴퓨터에 설치되어 있는 프로그램은 게임 서버라 한다.</p>
<p><br><br></p>
<h1 id="💻-hosting">💻 Hosting</h1>
<p><img src="https://velog.velcdn.com/images/_woo/post/5782232e-89c6-4b43-af02-75069c432e31/image.png" alt=""></p>
<ol>
<li>내가 만든 파일을 업로드한다.<br></li>
<li>파일을 업로드하면 소스코드가 웹호스팅으로 업로드 되어서, 웹호스팅에 설치되어 있는 웹 서버를 활성화 한다.<br></li>
<li>도메인의 이름을 부여한다.<br></li>
<li>방문자가 도메인에 접속하면 웹서버가 파일을 읽는다. → <span style="color:red"><em>웹서버가 방문자에게 소스코드 전송</em></span><br></li>
<li>방문자의 웹브라우저에 웹페이지가 표시되면 완료.
<br><br></li>
</ol>
<p>참고 : <a href="https://www.youtube.com/watch?v=pYOEy_mAMpI&amp;list=PLuHgQVnccGMDZP7FJ_ZsUrdCGH68ppvPb&amp;index=16">생활코딩</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[자기소개페이지 - javascript 적용]]></title>
            <link>https://velog.io/@_woo/%EC%9E%90%EA%B8%B0%EC%86%8C%EA%B0%9C%ED%8E%98%EC%9D%B4%EC%A7%80-javascript-%EC%A0%81%EC%9A%A9</link>
            <guid>https://velog.io/@_woo/%EC%9E%90%EA%B8%B0%EC%86%8C%EA%B0%9C%ED%8E%98%EC%9D%B4%EC%A7%80-javascript-%EC%A0%81%EC%9A%A9</guid>
            <pubDate>Sun, 15 May 2022 03:14:54 GMT</pubDate>
            <description><![CDATA[<p>드디어 <code>javascript</code>를 자기소개페이지에 적용했다. <br></p>
<h2 id="1nbspnbsptext-typing">1.&amp;nbsp&amp;nbsptext-typing</h2>
<blockquote>
<ul>
<li>한 글자씩 나타나도록 적용</li>
</ul>
</blockquote>
<ul>
<li>무한반복하는 타이핑 적용</li>
</ul>
<p>홈화면에 인사말을 자바스크립트로 구현해내고 싶어서 <a href="https://youtu.be/H1723LKnthk">유노코딩</a> 영상을 참고했다. 
<br></p>
<pre><code class="language-html">  &lt;section class=&quot;home&quot; id=&quot;sec1&quot;&gt;
     &lt;h1 class=&quot;text&quot;&gt;&lt;/h1&gt;
   &lt;/section&gt;&lt;!--sec1/--&gt; </code></pre>
<br>

<pre><code class="language-css">/*sec1*/
#sec1{
    background: url(../images/back.jpg) no-repeat center;
    background-size: cover;
}
#sec1 h1{
    position: absolute;top:30%;left:48%;
    transform: translate(-30%,-48%);
    color:#fff;
    font:lighter 60px &#39;Dongle&#39;;
    border-right: 1px solid #fff;
    animation: cursor 0.5s ease infinite;

}
@keyframes typing{
    0% {
      width: 0%;
    }
    50% {
      width: 100%;
    }
    100% {
      width: 0%;
    }
  }

@keyframes cursor {
    50% { border-color: transparent;}
  } /*커서가 깜빡이는 효과를 주기위해 적용*/</code></pre>
<br>

<pre><code class="language-javascript"> const content = &quot;안녕하세요,  우혜림입니다.&quot;;           //효과를 주고자 하는 텍스트 선언
 const text = document.querySelector(&quot;.text&quot;);     //효과를 주고자 하는 태그 선택
 let i = 0;                      //문자열 하나하나의 인덱스 접근을 하기 위한 사용하는 숫자열 데이터

 function typing(){                  
   text.textContent += content[i++];    //h1태그에 컨텐츠 내용을 추가 i가 올라가면서 하나씩 추가
   if(i &gt; content.length){     //i가 컨텐츠의 길이보다 길어졌을 때 멈추기 위해
    text.textContent = &quot;&quot;   // 모든것을 초기화하고 다시 시작하도록 만들기 위해 컨텐츠는 없애고
     i = 0;                  //i는 0으로 리셋
   }
 }
 setInterval(typing, 300);   //(주기적으로 동작해주고 싶은 함수 이름, millisecond)</code></pre>
<br>

<h3 id="📌완성본">📌완성본</h3>
<p><img src="https://velog.velcdn.com/images/_woo/post/c8281713-0cc9-4e69-be3a-929eff7b16af/image.gif" alt=""></p>
<p><br><br></p>
<h2 id="2nbspnbspchatbot">2.&amp;nbsp&amp;nbspchatbot</h2>
<p>페이지에 없는 정보들을 chatbot 기능으로 나타냈다.
<a href="https://www.codewithrandom.com/">codewithrandom</a> 사이트에서 클론코딩 겸 연습을 하다가 재밌는 기능을 발견해서 자기소개 페이지에 적용했다.
<br></p>
<pre><code class="language-html">&lt;p id=&quot;btn&quot;&gt;&lt;img src=&quot;./images/chat.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

    &lt;div id=&quot;glass&quot;&gt;
      &lt;h1&gt;Chatbot&lt;/h1&gt;
      &lt;h2&gt;저에게 무엇이든 물어보세요!&lt;/h2&gt;
      &lt;div class=&quot;input&quot;&gt;
        &lt;input type=&quot;text&quot; id=&quot;userBox&quot; onkeydown=&quot;if(event.key === &#39;Enter&#39;){talk()}&quot; placeholder=&quot;질문을 입력하세요.&quot;&gt;  
      &lt;/div&gt;&lt;!--input/--&gt;
      &lt;p id=&quot;chatLog&quot;&gt;&lt;/p&gt;

      &lt;p id=&quot;close&quot;&gt;X&lt;/p&gt;
    &lt;/div&gt;&lt;!--glass/--&gt;</code></pre>
<br>

<pre><code class="language-css">/*chat*/
#glass{
    width: 500px;
    height: 350px;
    background:url(../images/chatback2.jpg)no-repeat center;
    background-size: cover;
    padding: 50px;
    color:#fff;
    border-radius: 9px;
    box-shadow: 10px 10px 10px rgba(45,55,68,0.3);
    backdrop-filter: blur(50px);
    line-height: 1.5;
    position: fixed;
    top:30%;left:30%;
    text-align: center;
    font-family: &#39;배달의민족 한나는 열한살&#39;;
    display: none;
 }
 #glass h2{
     font-size: 20px;
     margin-top: 20px;
     color:#fff;
 }
 #glass p{
     font-size: 20px;
     color: #fff;
     line-height: 1.5;
 }
 .input{
     width: 500px;
     height: 70px;
     margin: 40px auto;
 }
 .input input{
     width:400px;
     height:70px;
     border:none;
     padding: 0 0 0 40px;
     font-size: 18px;
     border-radius: 20px;
 }
 #close{
     position: absolute;
     top: 10px;
     right:10px;
     font-size: 25px;
     border: none;
     background: none;
     color:#fff;
     cursor: pointer;
 }
 #btn{
     position: fixed;
     bottom: 0;
     left: 0;
     cursor: pointer;
 }
 #btn img{
     width:8%;
 }</code></pre>
<br>

<blockquote>
<p><code>position:fixed</code> 를 사용하여 전체 페이지에서 같은 위치에 이미지가 고정되도록 적용했다.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/_woo/post/04312c1f-b3a5-4008-80de-786a054fd3be/image.gif" alt=""></p>
<br>

<pre><code class="language-javascript">function talk(){
  let know = {
      &quot;안녕하세요&quot; : &quot;안녕하세요, 만나서 반갑습니다👊🏻&quot;,
      &quot;사는 곳이 어딘가요?&quot; : &quot;저는 경기도 화성시에 거주하고 있습니다.&quot;,
      &quot;무엇을 하고 있나요?&quot; : &quot;프론트엔드개발을 위해 공부하고 있습니다.&quot;,
      &quot;개발을 시작하게 된 계기가 있나요?&quot; : &quot;10년, 20년후에도 계속 할 수 있는  분야를 알아보다가&lt;br&gt;웹디자인&amp;웹퍼블리셔 교육을 듣게 되었는데,&lt;br&gt;그때 개발의 매력을 느끼면서 본격적으로 시작하게 됐습니다.&quot;,
      &quot;취미가 뭐에요?&quot; : &quot;평소에 영화보는것을 좋아하고, &lt;br&gt; 스트레스 쌓일 땐 블럭조립 하는 것,&lt;br&gt; 날씨 맑을 때 걷는것을 좋아해요!&quot;,
      &quot;대답해 주셔서 고맙습니다!&quot; : &quot;질문해주셔서 감사합니다🙏🏻&quot;,
      &quot;안녕히 계세요&quot; : &quot;다음에 또 만나요👊🏻&quot;
  };

  let user = document.getElementById(&#39;userBox&#39;).value;
      document.getElementById(&#39;chatLog&#39;).innerHTML = user + &quot;&lt;br&gt;&quot;;
      if(user in know){
          document.getElementById(&#39;chatLog&#39;).innerHTML = know[user] + &quot;&lt;br&gt;&quot;;            
      }else{
          document.getElementById(&#39;chatLog&#39;).innerHTML = &quot;죄송합니다. 그 질문은 대답할 수 없습니다. &lt;br&gt;&quot;;
      }
}

///////////////열고 닫는 기능////////////

document.getElementById(&#39;btn&#39;).addEventListener(&#39;click&#39;,function(){
  document.getElementById(&#39;glass&#39;).style.display = &#39;block&#39;
});

document.getElementById(&#39;close&#39;).addEventListener(&#39;click&#39;,function(){
  document.getElementById(&#39;glass&#39;).style.display = &#39;none&#39;
});</code></pre>
<br>

<blockquote>
<p>기존의 없던 클릭해서 열고 닫는 기능을 추가했다.</p>
</blockquote>
<br>


<h3 id="📌완성본-1">📌완성본</h3>
<p><img src="https://velog.velcdn.com/images/_woo/post/1a0f9776-9416-4708-8833-ff1de20ec0bd/image.gif" alt=""></p>
<br>

<h3 id="❗️느낀점">❗️느낀점</h3>
<p>어느덧 스터디도 4주가 지났다.
지난 4주간 기본 문법을 공부하고 간단한 Repl.it만 풀다가 직접 페이지에 적용하려니 부족한 실력과... <span style="font-size:15px"><del><em>구글링의 소중함을 다시 한번 느낌!!!..</em></del></span>
직접 친 코드는 열고 닫는 코드 뿐이라 하면서 자괴감이 느껴졌다.. <span style="font-size:15px"><del><em>클론코딩을 해보는것도 좋은 경험이 될거라는 말을 뼈저리게 느낀 주였다!!</em></del></span>
<code>javascript</code>를 공부한지도 이제 4주차고, 앞으로 갈길이 멀기에 조급해 하지말자 다짐했지만 직접 적용하고 보니 흔들리게된다.. 그러니 멘탈 잡고 더 열심히 하자!!!! 하다 보면 나아질거라 믿는다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[자기소개페이지 - css : hover 적용]]></title>
            <link>https://velog.io/@_woo/%EC%9E%90%EA%B8%B0%EC%86%8C%EA%B0%9C%ED%8E%98%EC%9D%B4%EC%A7%80-css-hover-%EC%A0%81%EC%9A%A9</link>
            <guid>https://velog.io/@_woo/%EC%9E%90%EA%B8%B0%EC%86%8C%EA%B0%9C%ED%8E%98%EC%9D%B4%EC%A7%80-css-hover-%EC%A0%81%EC%9A%A9</guid>
            <pubDate>Mon, 09 May 2022 07:26:43 GMT</pubDate>
            <description><![CDATA[<h1 id="hover">:hover</h1>
<blockquote>
<p><strong>:hover</strong> 는 사용자의 마우스가 요소 위에 올라가 있을 때 구현된다.</p>
</blockquote>
<p>내일배움 수료 후 3개월만에 다시 코딩을 했다. 머리도 굳고, 손도 굳고.. 그와중에 스터디 과제로 자기소개페이지를 html, css를 이용해서 뒤죽박죽 만들었다.<span style="font-size:13px"><em>(javascript는 나중에 추가할 예정이다!!)</em></span>
다음의 이미지는 섹션의 한 부분으로 <code>hover</code> 속성을 적용하기 전의 화면이다.</p>
<p><img src="https://velog.velcdn.com/images/_woo/post/ebae0b8a-78e3-438e-8765-a341fe97ebb8/image.png" alt=""></p>
<pre><code class="language-html">&lt;section class=&quot;like&quot; id=&quot;sec3&quot;&gt;
    &lt;h2&gt;LIKE&lt;/h2&gt;
    &lt;div class=&quot;like_in&quot;&gt;
      &lt;ul&gt;
        &lt;li&gt;
          &lt;img src=&quot;./images/em.jpg&quot; alt=&quot;&quot;&gt;
          &lt;p&gt;🥤커피&lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;img src=&quot;./images/et.jpg&quot; alt=&quot;&quot;&gt;
          &lt;p&gt;🥩곱창&lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;img src=&quot;./images/m.jpg&quot; alt=&quot;&quot;&gt;
          &lt;p&gt;🍔빅맥&lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;img src=&quot;./images/tr.jpg&quot; alt=&quot;&quot;&gt;
          &lt;p&gt;📸여행&lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;img src=&quot;./images/gy.jpg&quot; alt=&quot;&quot;&gt;
          &lt;p&gt;❣️이상형❣️&lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;img src=&quot;./images/tr2.jpg&quot; alt=&quot;&quot;&gt;
          &lt;p&gt;🐶친구&lt;/p&gt;
        &lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;&lt;!--like_in/--&gt;    
   &lt;/section&gt;&lt;!--sec3/--&gt;</code></pre>
<pre><code class="language-css">/*sec3*/
#sec3{
    background-color: #F9EBDE;
    padding-top: 5%;
}
#sec3 h2{
    color:#815854;
}
.like_in{
    width: 1000px;
    height: 600px;
    margin: 3% auto;
}
.like_in li{
    width: 240px;
    height: 240px;
    float: left;
    margin:30px 45px; 
}

.like_in li p{
    text-align: center;
    font-family: &#39;Hi Melody&#39;;
}
.like_in li img{
    width: 230px;
    height: 230px;
    border-radius: 50%;
    border: 3px solid #815854;
}</code></pre>
<br>

<p>여기에 <code>&lt;li&gt;</code> 태그 전체에 <code>hover</code>를 적용해 이미지와 폰트가 한번에 움직일 수 있도록 추가했다.</p>
<pre><code class="language-css">.like_in li:hover{
    transform:translateY(-5px);
    transition: 0.5s;
}</code></pre>
<blockquote>
<p><span style="font-size:15px">transform : 요소에 회전, 크기 조절, 기울이기, 이동 효과를 부여할 수 있는 속성.<br> translateY() : 현재 위치에서 요소를 y축으로 이동.</span></p>
</blockquote>
<p>마우스 커서를 이미지에 올리면 수직으로 위로 올라가는 것을 나타내기 위해 <code>transform:translateY</code> 속성을 이용하고, 그 값에 마이너스 값을 주어 역방향으로 이동하는 형태를 구현했다. 이때 부드러운 움직임을 위해 <code>transition</code> 속성을 이용했다.</p>
<p><img src="https://velog.velcdn.com/images/_woo/post/8316353c-ef59-45d8-960b-9d6f7c1ca912/image.gif" alt=""></p>
<br>

<h3 id="❗️느낀점">❗️느낀점</h3>
<ul>
<li><p>html을 잊지말자.</p>
</li>
<li><p>css의 다양한 속성<span style="font-size:15px">(flexbox, grid, animation..등)</span>을 사용하지 못한 아쉬움이 있다..</p>
</li>
<li><blockquote>
<p><span style="font-size:15px"> <em>개인적으로 연습하자</em></span></p>
</blockquote>
</li>
<li><p>javascript를 이용한 구현도 해보고싶다!!!</p>
</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>