<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>d-rami.log</title>
        <link>https://velog.io/</link>
        <description>꼼꼼한 원칙주의자, Rami</description>
        <lastBuildDate>Tue, 07 Mar 2023 05:11:19 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>d-rami.log</title>
            <url>https://velog.velcdn.com/images/designer_rami/profile/6a5f771b-d2b3-4769-8fb4-8f5b717d381c/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. d-rami.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/designer_rami" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[아이패드 "듀얼모니터" 사용]]></title>
            <link>https://velog.io/@designer_rami/%EC%95%84%EC%9D%B4%ED%8C%A8%EB%93%9C-%EB%93%80%EC%96%BC%EB%AA%A8%EB%8B%88%ED%84%B0-%EC%82%AC%EC%9A%A9</link>
            <guid>https://velog.io/@designer_rami/%EC%95%84%EC%9D%B4%ED%8C%A8%EB%93%9C-%EB%93%80%EC%96%BC%EB%AA%A8%EB%8B%88%ED%84%B0-%EC%82%AC%EC%9A%A9</guid>
            <pubDate>Tue, 07 Mar 2023 05:11:19 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>아이패드</strong>는 있지만 <del>맥북💻은 없다!</del>
LG그램에 연결해서 듀얼모니터로 사용하는 방법 👀</p>
</blockquote>
<h2 id="1-splashtop-wired-xdisplay-hd-앱-다운">1. Splashtop Wired XDisplay HD 앱 다운</h2>
<p align = "center">
  <img src = "https://velog.velcdn.com/images/designer_rami/post/490ba3d0-93b4-4821-a632-1479f1b8eb7b/image.jpg" width = "300px"> <span style = "background-color: #fff5b1">App Store에서 "Splashtop Wired XDisplay HD" 앱다운</span></p>

<p align = "center">
  <img src = "https://velog.velcdn.com/images/designer_rami/post/fd1da398-6bba-45aa-9819-7875edc557a6/image.jpg" width = "300px"> <span style = "background-color: #fff5b1">앱 실행 후, "Install the agent on your computer" OK 클릭! </span></p>

<p align = "center">
  <img src = "https://velog.velcdn.com/images/designer_rami/post/6bb98e2f-1e35-4970-a572-c67c571fa069/image.jpg" width = "300px"> <span style = "background-color: #fff5b1">PC에서 연결 시켜 줄 프로그램을 찾아라! </span></p>

<h2 id="2-pc-프로그램-설치">2. PC 프로그램 설치</h2>
<p><a href="https://www.splashtop.com/wiredxdisplay">https://www.splashtop.com/wiredxdisplay</a></p>
<p align = "center">
  <img src = "https://velog.velcdn.com/images/designer_rami/post/bf339673-518a-4fea-9cb0-1c07bab67804/image.png"> <span style = "background-color: #fff5b1">PC용 다운로드 클릭! </span></p>

<p align = "center">
  <img src = "https://velog.velcdn.com/images/designer_rami/post/44c273af-2219-418c-b98d-01074fd587df/image.png"> <span style = "background-color: #fff5b1">설치 후, Framerate & Quality는 "High"로 변경 </span>
</p>


<h3 id="⭐-unable-to-connect-to-iponeipad-경고창이-뜬-경우">⭐ &quot;Unable to connect to ipone/ipad!&quot; 경고창이 뜬 경우!</h3>
<p><span style = "color:red"> <strong>PC에 iTunes가 설치되어야 정상적으로 듀얼모니터 사용 가능!</strong></span> <u><strong>iTunes</strong></u>를 누르면 자동으로 다운. </p>
<h2 id="3-노트북-↔-아이패드-usb-연결-후-앱-실행">3. 노트북 ↔ 아이패드 USB 연결 후, 앱 실행.</h2>
<br>
<br>
<br>
<br>

<h1 id="🔎-참고자료">🔎 참고자료</h1>
<blockquote>
<h5 id="🔗-httpsbalsamic-eggtistorycom21">🔗 <a href="https://balsamic-egg.tistory.com/21">https://balsamic-egg.tistory.com/21</a></h5>
</blockquote>
<hr>
<h6>내가 보려고 만든 페이지😂<h6>

<ul>
<li>진짜 진짜 어쩔 수 없이 듀얼모니터가 필요할때.... 마우스도 너무 느리고 확실히 화면이 작으니깐 답답😣 (🍠🍠🍠X백만개)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[VSCode] 유용한 Extension]]></title>
            <link>https://velog.io/@designer_rami/VSCode%ED%95%84%EC%88%98-Extension</link>
            <guid>https://velog.io/@designer_rami/VSCode%ED%95%84%EC%88%98-Extension</guid>
            <pubDate>Mon, 16 May 2022 15:38:30 GMT</pubDate>
            <description><![CDATA[<h1 id="⭐-extension확장-플러그인-설치방법">⭐ Extension(확장 플러그인) 설치방법</h1>
<p>좌측 사이드바 하단 Extension 아이콘 버튼 클릭(<code>Ctrl</code> + <code>Shift</code> + <code>X</code>) 후, 사용하고자 하는 확장 플러그인을 검색하여 설치 <code>Install</code> .</p>
<p align="center"><img src="https://velog.velcdn.com/images/designer_rami/post/f75a117e-785e-491b-9996-928b2f33bd30/image.png" alt="text" style="padding: 0;margin:0 auto;"></p>

<hr>
<h2 id="1-korean-language-pack"><a href="https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-ko">1. Korean Language Pack</a></h2>
<p>한국어 버전으로 VS Code를 사용.</p>
<p align="center"><img src="https://velog.velcdn.com/images/designer_rami/post/6e0daa58-412f-49b7-a9e9-5eda93520546/image.png" alt="text" style="padding: 0;margin: 0;"></p>

<!--<p align="center"><a href="https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-ko/" style="color:gray; font-size:12px; ">https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-ko/</a></p>-->

<hr>
<h2 id="2-live-server"><a href="https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer">2. Live Server</a></h2>
<p>프로젝트 가상의 웹공간(로컬)에서 업데이트 된 모습 확인 가능.</p>
<ul>
<li>VS Code <strong>하단 Go Live</strong>를 누르고 <u>localhost:5500 접속.</u> </li>
<li><code>.HTML</code> 파일을 열고 마우스 오른쪽 버튼 클릭. <code>Open with Live Server</code> </li>
<li>단축키 <code>Alt</code> + <code>L</code> ,<code>O</code></li>
</ul>
<p align = "center"><img src = "https://velog.velcdn.com/images/designer_rami/post/56b03fd8-b6c4-4c5c-892e-4fe1eb88f9f1/image.png" alt="text" style="padding: 0;margin:0 auto;"></p>

<p align = "center"><img src ="https://github.com/ritwickdey/vscode-live-server/raw/HEAD/images/Screenshot/vscode-live-server-animated-demo.gif" style="padding: 0;margin:0 auto;"></p>

<hr>
<h2 id="3-auto-rename-tag"><a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag">3. Auto Rename Tag</a></h2>
<p><code>&lt; &gt;</code> 여는 태그와 <code>&lt;/&gt;</code> 닫는 태그 중 <strong>하나를 수정</strong>하면 동시에 <strong>다른 한쪽 태그도 자동</strong>으로 수정.</p>
<p align = "center"><img src = "https://velog.velcdn.com/images/designer_rami/post/3883febd-b884-4ad8-b0d2-8a190ee692e6/image.png" alt="text" style="padding: 0;margin:0 auto;"></p>
<p align = "center"><img src = "https://github.com/formulahendry/vscode-auto-rename-tag/raw/HEAD/images/usage.gif" style="padding: 0;margin:0 auto;"></p>

<hr>
<h2 id="4-auto-close-tag"><a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-close-tag">4. Auto Close Tag</a></h2>
<p><strong>Auto Rename Tag와 함께 사용하면 유용.</strong> <code>&lt; &gt;</code>여는 태그만 입력하면 자동으로 <code>&lt;/&gt;</code>닫는 태그가 완성.</p>
<p align = "center"><img src = "https://velog.velcdn.com/images/designer_rami/post/79a85d8d-1712-45dc-b49b-e0806f10a9b0/image.png" alt="text" style="padding: 0;margin :0;"></p>
<p align = "center"><img src = "https://github.com/formulahendry/vscode-auto-close-tag/raw/HEAD/images/usage.gif" style="padding: 0;margin :0;"></p>

<hr>
<h2 id="5-html-css-support"><a href="https://marketplace.visualstudio.com/items?itemName=ecmel.vscode-html-css">5. HTML CSS Support</a></h2>
<p>HTML id/class에서 css 선택자 요소를 쓸 때 자동 완성 기능.</p>
<p align = "center"><img src = "https://velog.velcdn.com/images/designer_rami/post/cc42b38d-8c72-4e5a-9ba5-0db5cc5f8440/image.png" alt="text" style="padding: 0;margin:0 auto;"></p>

<hr>
<h2 id="6-css-peek"><a href="https://marketplace.visualstudio.com/items?itemName=pranaygp.vscode-css-peek">6. CSS Peek</a></h2>
<p>HTML id/class에 적용된 CSS파일로 바로 이동.
<code>Ctrl</code> 키를 누른 상태에서 id 또는 clss명 위를 마우스로 클릭. CSS파일 내용을 팝업창으로 볼 수 있다. 팝업창에서 수정한 내용은 CSS파일에서도 바로 적용되어 수정.</p>
<p align = "center"><img src = "https://velog.velcdn.com/images/designer_rami/post/2f9bc5ac-8c13-43d0-b4c3-15c5b2a02215/image.png" alt="text" style="padding: 0;margin:0 auto;"></p>

<hr>
<h2 id="7-indent-rainbow"><a href="https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow">7. indent-rainbow</a></h2>
<p>들여쓰기 부분 색상별 <strong>하이라이트 표시</strong>(들여쓰기 명확하게 보임)</p>
<p align = "center"><img src = "https://velog.velcdn.com/images/designer_rami/post/5d3ee54f-5980-45a9-a062-5c943a7c0b6c/image.png" alt="text" style="padding: 0;margin:0 auto;"></p>
<p align = "center"><img src = "https://raw.githubusercontent.com/oderwat/vscode-indent-rainbow/master/assets/example.png" style="padding: 0;margin:0 auto;"></p>

<hr>
<h2 id="8-code-spell-checker"><a href="https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker">8. Code Spell Checker</a></h2>
<p><strong>코드 맞춤법 검사기.</strong> 사전 파일에 없는 단어에는 구불구불한 밑줄이 표시됩니다.</p>
<p align = "center"><img src = "https://velog.velcdn.com/images/designer_rami/post/ea4b96bc-8a60-4b4c-a80a-ac60075ceba1/image.png" alt="text" style="padding: 0;margin:0 auto;"></p>
<p align = "center"><img src = "https://raw.githubusercontent.com/streetsidesoftware/vscode-spell-checker/main/images/example.gif" alt="text" style="padding: 0;margin:0 auto;"></p>

<hr>
<h2 id="9-prettier---code-formatter"><a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode">9. Prettier - Code formatter</a></h2>
<p>사용자 편의를 위해 코드의 줄 간격, 행을 자동으로 정리.</p>
<p align="center"><img src="https://velog.velcdn.com/images/designer_rami/post/c05299c6-74fe-4230-af9f-f5a19379a1d0/image.png" alt="text" style="padding: 0;margin:0 auto;"></p>

<p>✅ 설치 완료 후, 에디터 밑부분에 <code>Prettier:✔</code> 표시가 되어있다면 활성화된 것.</p>
<hr>
<h2 id="10-codesnap"><a href="https://marketplace.visualstudio.com/items?itemName=adpyke.codesnap">10. CodeSnap</a></h2>
<ol>
<li>명령 팔레트(Windows 및 Linux의 경우 <strong>Ctrl+Shift+P</strong>, OS X의 경우 <strong>Cmd+Shift+P</strong>)를 열고 <code>CodeSnap.</code></li>
<li>스크린샷을 찍고 싶은 코드를 선택.</li>
<li>원하는 경우 스크린샷의 너비를 조정.</li>
<li>셔터 버튼을 클릭, 스크린샷을 디스크에 저장.<p align = "center"><img src = "https://velog.velcdn.com/images/designer_rami/post/67883ff8-e137-4c4c-9ec9-8428ee4259a8/image.png" alt="text" style="padding: 0;margin:0 auto;"></p>

</li>
</ol>
<p>✅  코드를 선택하고 마우스 오른쪽 버튼을 클릭한 다음 CodeSnap을 클릭, CodeSnap을 시작할 수도 있다.
✅  저장하는 대신 클립보드에 복사하려면 이미지를 클릭하고 복사 키보드 단축키(기본값은 Windows 및 Linux의 경우 Ctrl+C, OS X의 경우 Cmd+C)를 누르거나 설정에서 바인딩 <code>codesnap.shutterAction</code></p>
<hr>
<h2 id="⭐-작업-환경-테마">⭐ 작업 환경 테마</h2>
<h3 id="🎨-material-theme"><a href="https://marketplace.visualstudio.com/items?itemName=Equinusocio.vsc-material-theme">🎨 Material Theme</a></h3>
<p align="center"><img src="https://velog.velcdn.com/images/designer_rami/post/782d095f-7579-4538-8b02-f71602abe379/image.png" alt="text" style="padding: 0;margin:0 auto;"></p>

<h3 id="🎨-dracula-official"><a href="https://marketplace.visualstudio.com/items?itemName=dracula-theme.theme-dracula">🎨 Dracula Official</a></h3>
<p>어두운 테마. &lt;공식 드라큘라 테마&gt;</p>
<p align="center"><img src="https://velog.velcdn.com/images/designer_rami/post/e029ebd5-be8d-4aee-8c33-3f54dfe3c872/image.png" alt="text" style="padding: 0;margin:0 auto;"></p>
<p align="center"><img src="https://raw.githubusercontent.com/dracula/visual-studio-code/master/screenshot.png" alt="text" style="padding: 0;margin:0 auto;"></p>

<hr>
<h2 id="⭐-파일별-아이콘-테마생동감-있는-아이콘">⭐ 파일별 아이콘 테마(생동감 있는 아이콘)</h2>
<h3 id="🎨-material-icon-theme"><a href="https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme">🎨 Material Icon Theme</a></h3>
<p align="center"><img src="https://velog.velcdn.com/images/designer_rami/post/764d5f2e-0269-40ae-bdc7-c41dc73d3e4f/image.png" alt="text" style="padding: 0;margin:0 auto;"></p>

<p><strong>File icons</strong></p>
<p align="center"><img src="https://raw.githubusercontent.com/PKief/vscode-material-icon-theme/main/images/fileIcons.png" alt="text" style="padding: 0;margin:0 auto; "></p>

<p><strong>Folder icons</strong></p>
<p align="center"><img src="https://raw.githubusercontent.com/PKief/vscode-material-icon-theme/main/images/folderIcons.png" alt="text" style="padding: 0;margin:0 auto; "></p>

<h3 id="🎨-vscode-icons"><a href="https://marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons">🎨 vscode-icons</a></h3>
<p align="center"><img src="https://velog.velcdn.com/images/designer_rami/post/cd985b5c-8576-4531-ac74-3f5868d590af/image.png" alt="text" style="padding: 0;margin:0 auto;"></p>
<p align="center"><img src="https://raw.githubusercontent.com/vscode-icons/vscode-icons/master/images/screenshot.gif" alt="text" style="padding: 0;margin:0 auto;"></p>

<hr>
<h2 id="etc">ETC</h2>
<ul>
<li><p><strong>open in browser</strong>: 기본 브라우저나 애플리케이션에서 현재 파일을 열 수 있는 플러그인.</p>
</li>
<li><p><strong>Color Highlight</strong>: rgb 또는 16진수의 색상 코드로 입력하면 해당 색상 코드 색상을 배경 색상으로 보여주는 플러그인.</p>
</li>
<li><p><strong>Path Intellisense</strong>: 파일이나 이미지 등 경로를 지정할 때 자동으로 경로를 보여주며 선택, 지정할 수 있는 플로그인.</p>
</li>
</ul>
<hr>
<h6>내가 보려고 만든 페이지😂<br><br>
<img src="https://velog.velcdn.com/images/designer_rami/post/9826ee74-38c6-4783-a3af-d11deb267c1e/image.png" alt="text">

<p>가볍게 찾아보면서 추가한 플러그인...계속 추가되겠지....?</p>
<!--
- bookMarks: 특정 코드 줄에 북마크를 지정해, 메뉴에서 바로 찾아들어가는 기능을 제공.
북마크 추가하기
해당 라인을 클릭하고, 마우스 우 클릭 후, Bookmarks -> Toggle을 클릭하면 왼쪽에 북마크 표시가 뜬다. 이제 메뉴에서 원하는 북마크를 참고할 수 있다.
<https://inpa.tistory.com/entry/VS-Code-%F0%9F%92%BD-bookMarks-%EC%9D%B5%EC%8A%A4%ED%85%90%EC%85%98>

- project Manager: 자주 사용하는 프로젝트들을 저장해 편집기 내에서 목록으로 쉽게 관리하고 간편하게 스위칭 해주는 기능을 제공하는게 Project Manger 익스텐션 이다.
한마디로 요약하자면 **프로젝트를 즐겨찾기하여 모음 기능**인 것이다.
<https://inpa.tistory.com/entry/VS-Code-%F0%9F%92%BD-Project-Manager-%EC%9D%B5%EC%8A%A4%ED%85%90%EC%85%98>

- 코딩폰트
<https://inpa.tistory.com/entry/VS-Code-%F0%9F%92%BD-%EC%BD%94%EB%94%A9-%ED%8F%B0%ED%8A%B8%EB%A5%BC-%EB%B0%94%EA%BF%94%EB%B3%B4%EC%9E%90-D2coding-Fira>
<https://inpa.tistory.com/entry/VS-Code-%F0%9F%92%BD-%EC%9D%B4%EC%81%9C-%ED%8F%B0%ED%8A%B8-%EC%A0%81%EC%9A%A9%ED%95%B4%EC%84%9C-%EC%BD%94%EB%94%A9%EC%9D%84-%EC%A6%90%EA%B2%81%EA%B2%8C-Font-Switcher-%EC%9D%B5%EC%8A%A4%ED%85%90%EC%85%98>

- colorize: 괄호안의 코드를 작성하고 다음줄로 넘어갈때, 자동으로 세미콜론을 찍어주고, 커서가 중간 줄에 있더라도 바로 다음줄로 점프
<https://inpa.tistory.com/entry/VS-Code-%F0%9F%92%BD-Colonize-%EC%9D%B5%EC%8A%A4%ED%85%90%EC%85%98-%EC%84%B8%EB%AF%B8%EC%BD%9C%EB%A1%A0-%EC%9E%90%EB%8F%99%ED%99%94>

- Colorful Comments: 코드의 주석(코멘트)를 좀 더 직관적으로 볼 수 있게 특정 특수문자에 색상을 지정해 보여주는 플로그인.
<https://inpa.tistory.com/entry/VS-Code-%F0%9F%92%BD-Colorful-Comments-%EC%A3%BC%EC%84%9D%EC%9D%84-%EA%B0%80%EB%8F%85%EC%84%B1-%EC%A2%8B%EA%B2%8C-%EC%BB%AC%EB%9F%AC%ED%92%80%ED%95%98%EA%B2%8C>

- HTML to CSS autocompletion: HTML CSS Support 의 반대 버젼. CSS에서 코딩할때 HTML에서 사용한 속성이름을 자동 완성해주는 기능을 지원

- IntelliSense for CSS class names in HTML: HTML class 특성에 대한 CSS class 이름을 완성 제공하는 플러그인.

- HTML End Tag Labels: html 태그 코드가 길어 이 태그가 어느 태그였는지 깜빡할때, 도움을 주는 익스텐션. 마지막 닫는 태그에 클래스명을 주석처리로 표시

- Font Awesome Auto-complete & Preview: 아이콘 클래스명 자동완성 및 프리뷰를 지원.
클래스 고를때, 아이콘 이미지 프리뷰가 뜨지 않을때는 ctrl + space를 눌러준다.
아이콘 클래스명에 마우스를 올려다 놓으면 프리뷰 이미지가 뜬다.

- Html Auto Completion: 자주 쓰이는 태그 구성 자동완성 익스텐션이다.
!html 치고 엔터
!table 치고 엔터
!form 치고 엔터

- IntelliCode: 코드 추천 완성 기능을 지원해주는 확장팩

- Error Lens: 코드에 에러가 있을 경우 해당 줄에 오버레이 형식으로 띄워준다.
오타, 괄호 실수, 라이브러리 미참조 등 왠만한 오류는 컴파일이나 실행해보기 전에 이걸로 잡을 수 있다.

- Highlight Matching Tag: 페어 태그를 하이라이트 해주는 확장팩. 

- 💡Settings Sync: 지금부터 소개하는 두 개의 확장이 오늘의 꽃입니다. 먼저 Settings Sync 입니다. 위에서 소개해드린 여러 확장들은 사실 필수 중의 필수라고 생각합니다. (아이콘 테마나 언어팩, 스니펫 등은 선택이겠지만요.) 그런데 이런 확장들을 개발 환경 셋팅할 때마다 하나씩 설치해주는 것은 귀찮은 작업입니다. 이 때 내가 사용하는 확장들을 설정 파일 형태로 GitHub gist 에 업로드해 둔 후(GitHub 계정 연동 필요), 필요할 때 다운로드하여 환경을 동기화시켜 사용하는 것입니다! 확장 외 settings.json 파일도 동기화 가능합니다.

- 💡Power Mode: 제가 가장 좋아하는 확장입니다! 코드를 작성할 때마다 파티클이 팡팡 터지거나 화재가 나는 확장입니다. 저는 닉네임에 걸맞게 화재 이펙트를 좋아하는데요, settings.json 파일에 powermode 프로퍼티를 작성해주면 됩니다. shake 프로퍼티를 활성화하면 에디터가 흔들거리기도 하지만 멀미가 날 것 같아 좋아하지 않습니다. 또한 이펙트의 사이즈도 조절할 수 있습니다. 기본으로 제공되는 이펙트 외에 커스텀 이펙트도 다운로드 받아 적용할 수 있는 것 같습니다. 신나게 코딩하고 싶을 때 추천드려요!

⭐Console.log 관련 플로그인
<https://inpa.tistory.com/entry/VSCode-%F0%9F%92%BD-Consolelog-%EC%9D%B5%EC%8A%A4%ED%85%90%EC%85%98-%EB%AA%A8%EC%9D%8C-%EC%BD%98%EC%86%94%EC%9D%84-%EC%9D%B4%EC%81%98%EA%B3%A0-%EA%B0%80%EB%8F%85%EC%84%B1%EC%9E%88%EA%B2%8C-%ED%95%98%EC%9E%90>

⭐GIT 관련 플로그인
<https://inpa.tistory.com/entry/VSCode-%F0%9F%92%BD-GIT-%EC%9D%B5%EC%8A%A4%ED%85%90%EC%85%98-%EC%B6%94%EC%B2%9C>

HTML / CSS 코딩하는데 유용한 확장팩
<https://inpa.tistory.com/entry/VS-Code-%E2%8F%B1%EF%B8%8F-HTML-CSS-%EB%8F%84%EA%B5%AC-%EC%B6%94%EC%B2%9C>

개발하는데 유용한 확장팩
<https://inpa.tistory.com/entry/VS-Code-%E2%8F%B1%EF%B8%8F-%EC%BD%94%EB%94%A9%EC%97%90-%EC%9C%A0%EC%9A%A9%ED%95%9C-%EB%8F%84%EA%B5%AC-%EC%B6%94%EC%B2%9C>
-->]]></description>
        </item>
        <item>
            <title><![CDATA[[CSS] flexbox]]></title>
            <link>https://velog.io/@designer_rami/CSS-flexbox</link>
            <guid>https://velog.io/@designer_rami/CSS-flexbox</guid>
            <pubDate>Thu, 28 Apr 2022 11:11:42 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><code>flexbox</code> 박스 &amp; 아이템들을 행/열로 배열 </p>
</blockquote>
<p>부모요소 container, 자식요소 item
중심축(main axis), 교차축(cross axis)</p>
<pre><code class="language-css">
&lt;style&gt;


.container { 
    padding-top: 100px;
    background:beige;
    height: 100vh;  /* 부모에 상관없이 아이템을 보이는 뷰폴트 height 100% 다 쓰겠다 */
    display: flex;  /* 너 이제부터 flexbox야!(아이템이 왼쪽→오른쪽 가로방향으로 정렬) 
    자신이 가진 내용물의 width만큼만 차지, height는 컨테이너 높이만큼 늘어남. */

    /* flex-direction: row;  //기본값(중심축은 수평,열,X축). 왼쪽→오른쪽 행(가로)방향 ex)123 */
    /* flex-direction: row-reverse;  //오른쪽→왼쪽방향 역순으로 가로배치 ex)321 */
    /* flex-direction: column;  //위→아래, 열(세로)방향(중심축은 수직,행,y축) */
    /* flex-direction: column-reverse;  //아래→위 방향, 역순으로 세로배치 */

    /* flex-wrap: nowrap;  //기본값. 아이템들이 많아져도 한줄에 빼곡하게 붙어보임 */
    /* flex-wrap: wrap;  //아이템들이 한줄에 꽉차면 다음 라인으로 자동 넘어감 */
    /* flex-wrap: wrap-reverse;  //위에서부터 반대로 */

    /* flex-flow: column nowrap; //flex-direction + flex-wrap */

    /* &quot;justify&quot; 메인축 방향으로 정렬, &quot;align&quot; 수직축 방향으로 정렬 */
    /* justify-content: flex-start;  //기본값. 아이템들을 시작점으로 정렬, &quot;flex-direction&quot; row(가로배치)일 때는 왼쪽, column(세로 배치)일 때는 위. */
    /* justify-content: flex-end;  //아이템 순서는 유지, &quot;flex-direction&quot; row(가로배치)일 때는 오른쪽, column(세로 배치)일 때는 아래. */
    /* justify-content: center;  //아이템 가운데 정렬. */
    /* justify-content: space-around;  //아이템들의 &quot;둘레&quot;에 균일한 간격을 만들어줌 */
    /* justify-content: space-evenly;  //아이템들의 사이와 양 끝에 균일한 간격으로 만들어줌 */
    /* justify-content: space-between;  //아이템들의 &quot;사이&quot;에 균일한 간격을 만들어줌 */

    /* align-items: baseline;  //아이템들을 텍스트 베이스라인 기준으로 정렬 */
    /* align-items: center;  //아이템 가운데 정렬 */

    /* align-content: center;  //아이템들의 행이 2줄 이상 되었을 때 수직축 방향 정렬 */
}

.item {
    width: 40px;
    height: 40px;
    border: 1px solid black;
}

/* 색조합 및 색코드 참고 Material Design Color Tool:https://material.io/resources/color/# */
.item1 {
    background-color: #ef9a9a;
    /* order: 2;  //아이템들의 &quot;시각적&quot; 나열순서 결정속성, 현업에서 잘 쓰이진 않는다. */
    /* flex-grow: 2;  //기본값 0, 0보다 큰 값이 세팅되면 원래의 크기보다 커지며 빈 공간을 메우게 됨. (item2,3보다 2배로 넓어짐) */
    /* flex-shrink: 2; //기본값 1, 0보다 큰 값이 세팅되면 flex-basis보다 작아짐. (item2,3보다 2배로 작아짐) */
    flex-basis: 60%;  /* 기본값 auto, 아이템들이 공간을 얼마나 차지하는지 세부적으로 적용 */
    align-self: center;  /* 아이템별로 정렬가능. */
}

.item2 {
    background-color: #f48fb1;
    /* flex-grow: 1;
    flex-shrink: 1; */
    flex-basis: 30%;
}

.item3 {
    background-color: #ce93d8;
    /* flex-grow: 1;
    flex-shrink: 1; */
    flex-basis: 10%;
}
/*
.item4 {background-color: #b39ddb;}
.item5 {background-color: #90caf9;}
.item6 {background-color: #a5d6a7;}
.item7 {background-color: #e6ee9c;}
.item8 {background-color: #fff59d;}
.item9 {background-color: #ffcc80;}
.item10 {background-color: #ffab91;}
 */
&lt;/style&gt;

&lt;body&gt;
    &lt;!-- div.container&gt;div.item.item${$}*10 + TEP --&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;div class=&quot;item item1&quot;&gt;1&lt;/div&gt;
        &lt;div class=&quot;item item2&quot;&gt;2&lt;/div&gt;
        &lt;div class=&quot;item item3&quot;&gt;3&lt;/div&gt;
        &lt;!-- &lt;div class=&quot;item item4&quot;&gt;4&lt;/div&gt;
        &lt;div class=&quot;item item5&quot;&gt;5&lt;/div&gt;
        &lt;div class=&quot;item item6&quot;&gt;6&lt;/div&gt;
        &lt;div class=&quot;item item7&quot;&gt;7&lt;/div&gt;
        &lt;div class=&quot;item item8&quot;&gt;8&lt;/div&gt;
        &lt;div class=&quot;item item9&quot;&gt;9&lt;/div&gt;
        &lt;div class=&quot;item item10&quot;&gt;10&lt;/div&gt; --&gt;
    &lt;/div&gt;


&lt;/body&gt;
&lt;!-- Flexbox Froggy 게임: https://flexboxfroggy.com/ --&gt;
&lt;/html&gt;</code></pre>
<hr>
<h3 id="🔎-참고자료">🔎 참고자료</h3>
<blockquote>
<h5 id="🔗-1분코딩br🔗-드림코딩_css-flexbox-완전-정리br🔗-css-tricks-for-flexbox">🔗 <a href="https://studiomeal.com/archives/197">1분코딩</a><br>🔗 <a href="https://youtu.be/7neASrWEFEM">드림코딩_CSS Flexbox 완전 정리</a><br>🔗 <a href="https://css-tricks.com/snippets/css/a-guide-to-flexbox/">CSS Tricks for Flexbox</a></h5>
</blockquote>
<hr>
<h6>내가 보려고 만든 페이지😂<h6>
]]></description>
        </item>
        <item>
            <title><![CDATA[[개발자도구] Error_2. Failed to load resource: the server responded with a status of 404 (Not Found).]]></title>
            <link>https://velog.io/@designer_rami/%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%8F%84%EA%B5%AC-Error2.-Failed-to-load-resource-the-server-responded-with-a-status-of-404-Not-Found</link>
            <guid>https://velog.io/@designer_rami/%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%8F%84%EA%B5%AC-Error2.-Failed-to-load-resource-the-server-responded-with-a-status-of-404-Not-Found</guid>
            <pubDate>Thu, 28 Apr 2022 03:18:04 GMT</pubDate>
            <description><![CDATA[<p>💬 연습용으로 이미지 슬라이더 만들다가 <u><strong>개발자도구(크롬 기준) 콘솔</strong></u>에서 에러 발생 확인!!
이미지가 뜨지 않는다... 구글링해 봅니다.</p>
<hr>
<h3 id="💢-에러내용">💢 에러내용.</h3>
<p><code>Failed to load resource: the server responded with a status of 404 (Not Found).</code></p>
<p><img src = "https://velog.velcdn.com/images/designer_rami/post/a0649a02-13fd-4dd8-959e-d937048055d5/image.png"></p>

<hr>
<p>결국 그냥 단순한 나의 실수🙄 였다고 한다.
이미지 경로를 제대로 지정해주지 않아 생긴 해프닝... 이랄까</p>
<h3 id="✅-해결방법">✅ 해결방법.</h3>
<p>이러한 오류는 대부분 작업하다 경로를 지정해주지 않았거나 수정을 안했을 때 나타난다고 한다. 
페이지 안을 잘 살펴보고, <u><strong>경로 수정</strong>을 잘하자.</u></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Velog] 마크다운(Markdown) 사용법 ]]></title>
            <link>https://velog.io/@designer_rami/Velog-%EB%A7%88%ED%81%AC%EB%8B%A4%EC%9A%B4Markdown-%EC%9E%91%EC%84%B1%EB%B2%95</link>
            <guid>https://velog.io/@designer_rami/Velog-%EB%A7%88%ED%81%AC%EB%8B%A4%EC%9A%B4Markdown-%EC%9E%91%EC%84%B1%EB%B2%95</guid>
            <pubDate>Thu, 21 Apr 2022 13:29:18 GMT</pubDate>
            <description><![CDATA[<h1 id="🧐-마크다운markdown이란">🧐 마크다운(Markdown)이란?</h1>
<blockquote>
<p>일반 텍스트 기반의 경량 마크업 언어다. 일반 텍스트로 서식이 있는 문서를 작성하는 데 사용되며, 일반 마크업 언어에 비해 문법이 쉽고 간단한 것이 특징이다. 
HTML과 리치 텍스트(RTF) 등 서식 문서로 쉽게 변환되기 때문에 응용 소프트웨어와 함께 배포되는 README 파일이나 온라인 게시물 등에 많이 사용된다.
- <em>워키백과</em></p>
</blockquote>
<ul>
<li>파일 확장자 <code>.md</code></li>
<li>인터넷 미디어 타입 <code>text/markdown</code></li>
<li>웹사이트 <a href="https://daringfireball.net/projects/markdown/">https://daringfireball.net/projects/markdown/</a></li>
</ul>
<hr>
<h1 id="🧐-마크다운-쓰는-이유">🧐 마크다운 쓰는 이유</h1>
<blockquote>
<p>💡 개발자들이 주로 사용하는 버전관리/협업도구/메모장 도구에서 마크다운 언어를 사용하면 구조적으로 읽기 쉽고, 쓰기 쉬운 텍스트를 작성하는 데 도움을 준다.</p>
</blockquote>
<ol>
<li>문법이 간결하고 <strong>쉽다.</strong></li>
<li><strong>지원</strong>하는 플랫폼이 많다. (Notion, Git, Discord 등)</li>
<li>대부분의 환경에서 <strong>작성 가능.</strong> (메모장에서도 가능)</li>
<li>텍스트로 저장되기 때문에 <strong>용량이 적어 보관이 용이.</strong></li>
</ol>
<hr>
<h1 id="⭐-마크다운-작성법">⭐ 마크다운 작성법</h1>
<p>마크다운(Markdown)에선 Enter Key를 누른다고 빈 줄이 추가되지 않는다. 또한 Space Bar를 눌러도 단어 사이 간격이 늘어나지 않는다.</p>
<h3 id="1-문단paragraph">1. 문단(Paragraph)</h3>
<p>문단과 문단 사이에 한 줄(enter) 비워두는 것으로 구분.</p>
<table>
<thead>
<tr>
<th align="center">👆 종류</th>
<th align="center">✍ 입력</th>
</tr>
</thead>
<tbody><tr>
<td align="center">줄 바꿈</td>
<td align="center"><code>&lt;br&gt;</code> 또는 Enter 2번</td>
</tr>
<tr>
<td align="center">단어 사이 간격</td>
<td align="center"><code>&amp;nbsp;</code></td>
</tr>
<tr>
<td align="center">기호표기(역방향 슬래시 사용)<br>* _ - . ! # + () [] \</td>
<td align="center"><code>\</code> <br><code>\* \_ \- \. \! \# \+ \() \[] \\</code></td>
</tr>
</tbody></table>
<hr>
<h3 id="2-제목header">2. 제목(Header)</h3>
<p><code>#</code>의 개수로 <code>h1</code>부터 <code>h6</code>까지 표현 가능. Velog 오른쪽 리스트엔 <code>h3</code>까지 표시된다.</p>
<p>✍ 작성</p>
<pre><code># h1
## h2
### h3
#### h4
##### h5
###### h6</code></pre><p>💻 결과</p>
<h1 id="h1">h1</h1>
<h2 id="h2">h2</h2>
<h3 id="h3">h3</h3>
<h4 id="h4">h4</h4>
<h5 id="h5">h5</h5>
<h6 id="h6">h6</h6>
<hr>
<h3 id="3-글꼴-스타일text-style">3. 글꼴 스타일(Text-style)</h3>
<p><code>*</code>, <code>_</code>, <code>~</code>을 이용하여 기울이기, 강조, 취소선 등 기본적인 스타일을 나타낼 수 있다.</p>
<table>
<thead>
<tr>
<th align="center">✍ 작성</th>
<th align="center">💻 결과</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><code>**볼드**</code></td>
<td align="center"><strong>볼드</strong></td>
</tr>
<tr>
<td align="center"><code>__볼드__</code></td>
<td align="center"><strong>볼드</strong></td>
</tr>
<tr>
<td align="center"><code>*이텔릭체*</code></td>
<td align="center"><em>이텔릭체</em></td>
</tr>
<tr>
<td align="center"><code>_이텔릭체_</code></td>
<td align="center"><em>이텔릭체</em></td>
</tr>
<tr>
<td align="center"><code>***볼드+이텔릭***</code></td>
<td align="center"><strong><em>볼드+이텔릭</em></strong></td>
</tr>
<tr>
<td align="center"><code>___볼드+이텔릭___</code></td>
<td align="center"><strong><em>볼드+이텔릭</em></strong></td>
</tr>
<tr>
<td align="center"><code>~~취소선~~</code></td>
<td align="center"><del>취소선</del></td>
</tr>
</tbody></table>
<h3 id="3-2-html-꾸미기">3-2. HTML 꾸미기</h3>
<p><code>HTML</code> 태그를 이용하면, 글자를 좀 더 다양하게 작성 할 수 있다.</p>
<table>
<thead>
<tr>
<th align="left">✍ 작성</th>
<th align="center">💻 결과</th>
</tr>
</thead>
<tbody><tr>
<td align="left"><code>&lt;h3&gt;제목&lt;/h3&gt;</code></td>
<td align="center"><h3>제목</h3></td>
</tr>
<tr>
<td align="left"><code>&lt;u&gt;밑줄&lt;/u&gt;</code></td>
<td align="center"><u>밑줄</u></td>
</tr>
<tr>
<td align="left"><strong>링크</strong> <code>&lt;a href=&quot;velog.io&quot;&gt;velog&lt;/a&gt;</code></td>
<td align="center"><a href="velog.io">velog</a></td>
</tr>
<tr>
<td align="left"><strong>글자색상 1</strong> <code>&lt;span style=&quot;color:green&quot;&gt;green&lt;/span&gt;</code></td>
<td align="center"><span style="color:DodgerBlue">DodgerBlue</span></td>
</tr>
<tr>
<td align="left"><strong>글자색상 2</strong> <code>&lt;span style=&quot;color:#44398A&quot;&gt;#44398A&lt;/span&gt;</code></td>
<td align="center"><span style="color:#44398A">#44398A</span></td>
</tr>
<tr>
<td align="left"><strong>글자색상 3</strong> <code>&lt;span style=&quot;color:rgb(255, 255, 255)&quot;&gt;rgb(255, 255, 255)&lt;/span&gt;</code></td>
<td align="center"><span style="color:rgb(51, 153, 102)">rgb(51, 153, 102)</span></td>
</tr>
<tr>
<td align="left"><strong>글자배경</strong><code>&lt;span style=&quot;background-color: #f5f5dc&quot;&gt;글자배경&lt;/span&gt;</code></td>
<td align="center"><span style="background-color: #f5f5dc">글자배경</span></td>
</tr>
</tbody></table>
<blockquote>
<p>💡 <strong>참고 색상표</strong></p>
</blockquote>
<table>
<thead>
<tr>
<th>Color</th>
<th>RGB</th>
<th>Hex Color</th>
<th>Example</th>
</tr>
</thead>
<tbody><tr>
<td>Black</td>
<td>(0, 0, 0)</td>
<td>#000000</td>
<td><span style="background-color: #000">&amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp</span></td>
</tr>
<tr>
<td>White</td>
<td>(255, 255, 255)</td>
<td>#FFFFFF</td>
<td><span style="background-color: #FFF">&amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp</span></td>
</tr>
<tr>
<td>Gray</td>
<td>(128, 128, 128)</td>
<td>#808080</td>
<td><span style="background-color: #808080">&amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp</span></td>
</tr>
<tr>
<td>Red</td>
<td>(255, 0, 0)</td>
<td>#FF0000</td>
<td><span style="background-color: #FF0000">&amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp</span></td>
</tr>
<tr>
<td>Blue</td>
<td>(0, 0, 255)</td>
<td>#0000FF</td>
<td><span style="background-color: #0000FF">&amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp</span></td>
</tr>
<tr>
<td>Green</td>
<td>(0, 128, 0)</td>
<td>#008000</td>
<td><span style="background-color: #008000">&amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp</span></td>
</tr>
<tr>
<td>Yellow</td>
<td>(128, 0, 128)</td>
<td>#ffd33d</td>
<td><span style="background-color: #ffd33d">&amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp</span></td>
</tr>
<tr>
<td><a href="https://velog.io/@euisuk-chung/%EA%BF%80%ED%8C%81-Velog-%EA%B8%80%EC%94%A8%EB%A5%BC-%EB%82%B4-%EB%A7%88%EC%9D%8C%EB%8C%80%EB%A1%9C-%EC%83%89%EC%83%81-%ED%98%95%EA%B4%91%ED%8E%9C">출처: Velog 글씨를 내 마음대로 바꿔보자! (색상, 형광펜)</a></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody></table>
<hr>
<h3 id="4-코드code">4. 코드(Code)</h3>
<h4 id="4-1-인라인-코드">4-1. 인라인 코드</h4>
<p>텍스트 앞뒤로 <code>백틱(`)</code>을 감싸면 간단한 인라인 코드 작성 가능.</p>
<p>✍ 작성
`인라인 코드 이렇게 작성하세요 :) `</p>
<p>💻 결과 
<code>인라인 코드 이렇게 작성하세요 :)</code></p>
<h4 id="4-2-코드블럭">4-2. 코드블럭</h4>
<p><code>백틱(`)</code> 또는 <code>~</code>을 세 개 사용하여 문단의 시작과 끝에 표기.
코드가 여러 줄인 경우, 줄 앞에 4개의 공백 또는 1개의 &#39;Tab&#39;을 추가하면 된다.</p>
<p><code>```</code> 옆에 언어를 지정해주면 <strong>Syntax highlighting</strong>가 적용된다.</p>
<p>✍ 작성
``` java
  public class BootSpringBootApplication {
      public static void main(String[] args) {
          System.out.println(&quot;Hello, world&quot;);
      }
  }
```</p>
<p>💻 결과 </p>
<pre><code class="language-java">  public class BootSpringBootApplication {
      public static void main(String[] args) {
          System.out.println(&quot;Hello, world&quot;);
      }
  }</code></pre>
<blockquote>
<p>💡 <strong>Syntax highlighting(문법 강조)</strong></p>
</blockquote>
<table>
<thead>
<tr>
<th align="center">&nbsp;&nbsp;언어 이름&nbsp;&nbsp;</th>
<th align="center">&nbsp;&nbsp;작성 방식&nbsp;&nbsp;</th>
<th align="center">&nbsp;&nbsp;언어 이름&nbsp;&nbsp;</th>
<th align="center">&nbsp;&nbsp;작성 방식&nbsp;&nbsp;</th>
</tr>
</thead>
<tbody><tr>
<td align="center">Bash</td>
<td align="center">bash</td>
<td align="center">JSON</td>
<td align="center">json</td>
</tr>
<tr>
<td align="center">C#</td>
<td align="center">cs</td>
<td align="center">Java</td>
<td align="center">java</td>
</tr>
<tr>
<td align="center">C++</td>
<td align="center">cpp</td>
<td align="center">JaveScript</td>
<td align="center">javascript</td>
</tr>
<tr>
<td align="center">CSS</td>
<td align="center">css</td>
<td align="center">PHP</td>
<td align="center">php</td>
</tr>
<tr>
<td align="center">Diff</td>
<td align="center">diff</td>
<td align="center">Perl</td>
<td align="center">perl</td>
</tr>
<tr>
<td align="center">HTML, XML</td>
<td align="center">html</td>
<td align="center">Python</td>
<td align="center">python</td>
</tr>
<tr>
<td align="center">HTTP</td>
<td align="center">http</td>
<td align="center">Ruby</td>
<td align="center">ruby</td>
</tr>
<tr>
<td align="center">Ini</td>
<td align="center">ini</td>
<td align="center">SQL</td>
<td align="center">sql</td>
</tr>
</tbody></table>
<p><a href="https://velog.io/@cateto/%EB%A7%88%ED%81%AC%EB%8B%A4%EC%9A%B4-%EC%99%95%EC%B4%88%EB%B3%B4-%EC%BD%94%EB%93%9C%EB%B8%94%EB%A1%9D-%EC%82%AC%EC%9A%A9%EA%B0%80%EB%8A%A5%ED%95%9C-%EC%96%B8%EC%96%B4-%EB%AA%A9%EB%A1%9D%EC%B4%88%EA%B0%84%EB%8B%A8">출처: 마크다운 왕초보 코드블록 사용가능한 언어 목록</a></p>
<hr>
<h3 id="5-인용문blockquote">5. 인용문(BlockQuote)</h3>
<p>문단 앞에 <code>&gt;</code>를 추가. 중첩이 가능하다.</p>
<p>✍ 작성</p>
<pre><code>&gt; 첫번째 블록
&gt;&gt; 두번째 블록
&gt;&gt;&gt; 세번째 블록</code></pre><p>💻 결과</p>
<blockquote>
<p>첫번째 블록</p>
<blockquote>
<p>두번째 블록</p>
<blockquote>
<p>세번째 블록</p>
</blockquote>
</blockquote>
</blockquote>
<hr>
<h3 id="6-수평선horizontal-rule">6. 수평선(Horizontal Rule)</h3>
<p><code>-</code> <code>*</code> <code>_</code> 등을 3개 이상 입력하면 생성 할 수 있다.
수평선을 사용할 때는 한 줄 띄어주고 사용. 글 쓰기를 종료하거나 페이지를 구분하고 싶을 때 유용.</p>
<p>✍ 작성</p>
<pre><code>---
***
___</code></pre><p>💻 결과</p>
<hr>
<hr>
<hr>
<h3 id="7-목록list">7. 목록(List)</h3>
<h4 id="7-1-순서-있는-목록">7-1. 순서 있는 목록</h4>
<p>숫자 뒤에 <code>.(점)</code>+공백을 입력하면 순서있는 목록으로 인식. 이때 <code>1.</code> 이후 오는 숫자가 <strong>연속적일</strong> 필요는 없지만 처음은 <code>1.</code>로 시작해야한다.</p>
<p>✍ 작성</p>
<pre><code>1. 해오름달
2. 시샘달
3. 물오름달
1. 해오름달
1. 시샘달</code></pre><p>💻 결과</p>
<ol>
<li>해오름달</li>
<li>시샘달</li>
<li>물오름달</li>
<li>해오름달</li>
<li>시샘달</li>
</ol>
<h4 id="7-2-순서-없는-목록">7-2. 순서 없는 목록</h4>
<p><code>*</code> <code>+</code> <code>-</code> (혼용 가능) 뒤에 공백을 두고 작성하면 순서 없는 목록으로 인식. <code>Teb</code>키나 <code>Space bar</code>를 이용해 들여쓰기가 가능.</p>
<p>✍ 작성</p>
<pre><code>* 4월 잎새달
    - 0401
        - 0402
* 5월 푸른달
* `6월 누리달`</code></pre><p>💻 결과</p>
<ul>
<li>4월 잎새달<ul>
<li>0401<ul>
<li>0402</li>
</ul>
</li>
</ul>
</li>
<li>5월 푸른달</li>
<li><code>6월 누리달</code></li>
</ul>
<hr>
<h3 id="8-체크박스check-box">8. 체크박스(Check Box)</h3>
<p><code>-</code> 뒤에 빈 공간을 가진<code>[]대괄호</code>를 입력한다. <code>[x]</code> 박스 안을 체크하려면 빈 공간 대신 <code>x</code>키를 입력하면 된다. </p>
<p>✍ 작성</p>
<pre><code>- [ ] 체크박스
- [x] 체크박스
* [ ] 체크박스2
+ [x] 체크박스3</code></pre><p>💻 결과</p>
<ul>
<li><input disabled="" type="checkbox"> 체크박스</li>
<li><input checked="" disabled="" type="checkbox"> 체크박스</li>
<li><input disabled="" type="checkbox"> 체크박스2</li>
<li><input checked="" disabled="" type="checkbox"> 체크박스3</li>
</ul>
<hr>
<h3 id="9-링크link">9. 링크(Link)</h3>
<p>URL, 인라인, 참조라는 세 가지 스타일의 링크 지원. 
세 스타일 모두 링크 텍스트는 <code>[]대괄호</code>로 구분된다.</p>
<table>
<thead>
<tr>
<th>✍ 작성</th>
<th>💻 결과</th>
</tr>
</thead>
<tbody><tr>
<td><strong>인라인 링크</strong> [Title](link) <br> <code>[Velog](https://velog.io/)</code></td>
<td><a href="https://velog.io/">Velog</a></td>
</tr>
<tr>
<td><strong>URL</strong> <link> <br> <code>&lt;https://velog.io/&gt;</code></td>
<td><a href="https://velog.io/">https://velog.io/</a></td>
</tr>
<tr>
<td><strong>참조 링크</strong> [참조 설명][참조 번호] [참조 번호]: link <br> <code>[Velog][1] [1]: https://velog.io/</code></td>
<td>[Velog][1] [1]: <a href="https://velog.io/">https://velog.io/</a></td>
</tr>
</tbody></table>
<hr>
<h3 id="10-이미지image">10. 이미지(Image)</h3>
<h4 id="10-1-이미지-링크">10-1. 이미지 링크</h4>
<p>앞에 <code>!</code>를 붙여주면 이미지를 불러오거나 링크할 수 있다.</p>
<p>✍ 작성</p>
<pre><code>이미지 불러오기
![이미지 설명](이미지 링크)

이미지 링크
[![이미지 설명](이미지 링크)](연결할 url)</code></pre><p>💻 결과
<img src="https://cdn.pixabay.com/photo/2016/11/19/14/00/code-1839406_960_720.jpg" alt="이미지 불러오기"></p>
<p><a href="https://pixabay.com/photos/code-coding-computer-data-1839406/"><img src="https://cdn.pixabay.com/photo/2016/11/19/14/00/code-1839406_960_720.jpg" alt="이미지 링크"></a></p>
<h4 id="10-2-이미지-크기조절">10-2. 이미지 크기조절</h4>
<p>기존 이미지 코드 앞단을 <code>img</code> 태그로 수정하고, 링크가 끝나는 부분에 <code>width</code> <code>height</code>를 작성하여 이미지 크기를 조정한다.</p>
<p>✍ 작성</p>
<pre><code>기존 이미지 코드
![](https://cdn.pixabay.com/photo/2016/11/19/14/00/code-1839406_960_720.jpg)

크기조절 코드
&lt;img src=&quot;https://cdn.pixabay.com/photo/2016/11/19/14/00/code-1839406_960_720.jpg&quot; width=&quot;300px&quot; height=&quot;100px&quot;&gt;</code></pre><p>💻 결과 
<img src="https://cdn.pixabay.com/photo/2016/11/19/14/00/code-1839406_960_720.jpg" width="300px" height="100px"></p>
<h4 id="10-3-이미지-정렬">10-3. 이미지 정렬</h4>
<p>✍ 작성</p>
<pre><code class="language-html">가운데 정렬 &lt;!--이미지 태그 앞을 &lt;p&gt; 태그로 감싼다.--&gt;
&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;https://cdn.pixabay.com/photo/2016/11/19/14/00/code-1839406_960_720.jpg&quot; width=&quot;300px&quot; height=&quot;100px&quot;&gt;&lt;/p&gt;

왼쪽, 오른쪽 정렬 &lt;!--이미지 태그 끝나는 부분에 &lt;align&gt; &#39;left&#39;,&#39;right&#39; 작성.--&gt;

우 &lt;img src=&quot;https://cdn.pixabay.com/photo/2016/11/19/14/00/code-1839406_960_720.jpg&quot; width=&quot;300px&quot; height=&quot;100px&quot; align=&quot;right&quot;&gt;</code></pre>
<p>💻 결과</p>
<p align="center"><img src="https://cdn.pixabay.com/photo/2016/11/19/14/00/code-1839406_960_720.jpg" width="300px" height="100px"></p>

<img src="https://cdn.pixabay.com/photo/2016/11/19/14/00/code-1839406_960_720.jpg" width="300px" height="100px" align="right">

<hr>
<h3 id="11-표table">11. 표(Table)</h3>
<p>행은 <code>-(하이픈)</code>으로 각 열은 <code>|(수직선 기호)</code>로 구분하며, 표 내에서 기본적인 <strong>글꼴 스타일</strong> 적용이 가능하다.</br></p>
<p><strong>정렬</strong>의 경우, 행 구분선인 <code>-(하이픈)</code> 각각 왼쪽, 양쪽, 오른쪽에 <code>:(세미콜론)</code>을 붙여 맞출 수 있다.</p>
<p>✍ 작성</p>
<pre><code>| 이  름 | 나 이 | 생 일 |
|:---  |  :--:  |  ---:|
|길동 | 36 | 0625 |
| 철수 | 17 | 0505 |
| 영희 | 13 | 1009|</code></pre><p>💻 결과</p>
<table>
<thead>
<tr>
<th align="left">이  름</th>
<th align="center">나 이</th>
<th align="right">생 일</th>
</tr>
</thead>
<tbody><tr>
<td align="left">길동</td>
<td align="center">36</td>
<td align="right">0625</td>
</tr>
<tr>
<td align="left">철수</td>
<td align="center">17</td>
<td align="right">0505</td>
</tr>
<tr>
<td align="left">영희</td>
<td align="center">13</td>
<td align="right">1009</td>
</tr>
</tbody></table>
<hr>
<h3 id="12-이모지emoji">12. 이모지(Emoji)</h3>
<p>이모티콘 이미지를 복사 → 붙여넣거나 단축키를 통해 불러올 수 있다.</p>
<p>💡 <strong>사이트</strong>
<a href="https://emojipedia.org/">https://emojipedia.org/</a>
<a href="https://getemoji.com/">https://getemoji.com/</a>
</br></p>
<p>💡 <strong>단축키</strong>
Windows : <code>window key</code> + <code>마침표(.)</code>
Mac : <code>Command</code> + <code>Control</code> + <code>Space bar</code>
<img src="https://velog.velcdn.com/images/designer_rami/post/7a704963-f04a-465f-a0d3-6f790039a0f7/image.png" width=350></p>
<hr>
<h1 id="🔎-참고자료">🔎 참고자료</h1>
<blockquote>
<h5 id="🔗-daring-fireball">🔗 <a href="https://daringfireball.net/projects/markdown/syntax">daring fireball</a></h5>
</blockquote>
<h5 id="🔗-이미지-크기-조절-정렬">🔗 <a href="https://velog.io/@baekmoon1230/Markdown-%EC%9D%B4%EB%AF%B8%EC%A7%80-%ED%81%AC%EA%B8%B0-%EC%A1%B0%EC%A0%88-%EC%A0%95%EB%A0%AC">이미지 크기 조절, 정렬 </a></h5>
<h5 id="🔗-markdown-velog-사용법">🔗 <a href="https://velog.io/@kim-mg/velog-%EA%B8%80%EC%93%B0%EA%B8%B0-markdown-%EC%9E%91%EC%84%B1%EB%B2%95">[Markdown] Velog 사용법</a></h5>
<h5 id="🔗-velog-마크다운markdown-작성법">🔗 <a href="https://velog.io/@yuuuye/velog-%EB%A7%88%ED%81%AC%EB%8B%A4%EC%9A%B4MarkDown-%EC%9E%91%EC%84%B1%EB%B2%95">velog 마크다운(markdown) 작성법</a></h5>
<hr>
<h6>내가 보려고 만든 페이지😂<h6>

<ul>
<li>이미지 크기, 정렬 미리보기에서만 보이고, 작성된 글에서는 왜 적용이 안될까?<br></li>
<li>표 안에 정렬도 미리보기에선 다 적용이 되는데...</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Git, GitHub] Error_1. Pulling is not possible because you have unmerged files.]]></title>
            <link>https://velog.io/@designer_rami/Git-GitHub-Error1.-Pulling-is-not-possible-because-you-have-unmerged-files</link>
            <guid>https://velog.io/@designer_rami/Git-GitHub-Error1.-Pulling-is-not-possible-because-you-have-unmerged-files</guid>
            <pubDate>Wed, 20 Apr 2022 06:06:30 GMT</pubDate>
            <description><![CDATA[<p>프로젝트 수정하고 VS Code에서 <code>commit</code> <code>push</code> 했는데, 에러가 났다...!!! 
😥 당황...스럽다!! 뭐가 잘못된건지 삭제될까봐 무섭...</p>
<hr>
<h3 id="💢-에러내용">💢 에러내용.</h3>
<p><code>Pulling is not possible because you have unmerged files.</code></p>
<pre><code class="language-html">&gt; git pull --tags origin main error: Pulling is not possible because you have unmerged files. 
hint: Fix them up in the work tree, and then use &#39;git add/rm &lt;file&gt;&#39; 
hint: as appropriate to mark resolution and make a commit. 
fatal: Exiting because of an unresolved conflict.</code></pre>
<hr>
<p>구글링 후, </p>
<p><code>git status</code>
<code>git commit -am &#39;커밋메시지&#39;</code> </p>
<p>다시 하면 된다고 해서 시도했는데, 병합충돌표시까지 합쳐져서 GitHub에 push됨;; 🙄 첫 시도 실패!</p>
<h3 id="✅-해결방법">✅ 해결방법.</h3>
<p>원격 저장소와 로컬 저장소 양쪽에서 파일의 동일한 부분을 변경한 경우,
두 변경 내용 중 어느 쪽을 저장할 것인지 자동으로 판단 할 수 없기 때문에 충돌이 발생.
Git은 충돌이 발생한 파일 내용을 아래처럼 표시합니다.</p>
<blockquote>
<p><strong>병합충돌표시</strong> 
===== 로 구분된 윗 부분이 로컬 저장소,
아랫 부분이 원격 저장소의 변경 내용이라는 점!</p>
</blockquote>
<p>이 부분을 우리가 <strong>직접 수정</strong>해 주어야 합니다.
status에서 나오는 내용은 로컬 저장소의 현재 branch 에 마지막으로 commit 된 내용과 현재 상태를 비교한 내용이 나옵니다. 이 중 원하는 상태를 선택하고 다시 진행하면 문제 없음!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[스파르타] #웹개발 종합반 #4주차 개발일지👊🏻]]></title>
            <link>https://velog.io/@designer_rami/%EC%8A%A4%ED%8C%8C%EB%A5%B4%ED%83%80-%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%A2%85%ED%95%A9%EB%B0%98-4%EC%A3%BC%EC%B0%A8-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@designer_rami/%EC%8A%A4%ED%8C%8C%EB%A5%B4%ED%83%80-%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%A2%85%ED%95%A9%EB%B0%98-4%EC%A3%BC%EC%B0%A8-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Mon, 10 Jan 2022 16:56:11 GMT</pubDate>
            <description><![CDATA[<p>🌼 <a href="https://www.notion.so/4-682b2d244357441f8469b861562781fc"><strong>Notion 강의자료</strong></a></p>
<h2 id="🚩수업-목표">🚩수업 목표</h2>
<ol>
<li>Flask 프레임워크를 활용해서 API를 만들 수 있다.</li>
<li>&#39;모두의책리뷰&#39; API를 만들고 클라이언트에 연결한다.</li>
<li>&#39;나홀로메모장&#39; API를 만들고 클라이언트와 연결한다.</li>
</ol>
<hr>
<h2 id="📝flask_서버만들기">📝Flask_서버만들기</h2>
<blockquote>
<p><strong>Flask 프레임워크</strong>
서버를 구동시켜주는 편한 코드 모음. 서버를 구동하려면 필요한 복잡한 일들을 쉽게 가져다 쓸 수 있다.<br>
<code>flask</code> 패키지 설치</p>
</blockquote>
<h4 id="flask-기초">flask 기초</h4>
<p><code>app.py</code> 파일 생성</p>
<ul>
<li>flask 시작 코드 <pre><code class="language-python">from flask import Flask
app = Flask(__name__)
</code></pre>
</li>
</ul>
<p>@app.route(&#39;/&#39;)
def home():
   return &#39;This is Home!&#39;</p>
<p>if <strong>name</strong> == &#39;<strong>main</strong>&#39;:<br>   app.run(&#39;0.0.0.0&#39;,port=5000,debug=True)</p>
<pre><code>👉 http://localhost:5000/ 접속, 오른쪽 클릭 → `Run app` 실행
![](https://images.velog.io/images/designer_rami/post/2fef3dbd-df69-44f4-801f-eb1ff3897c25/image.png)
- URL 나눠보기
```python
from flask import Flask
app = Flask(__name__)

@app.route(&#39;/&#39;)
def home():
   return &#39;This is Home!&#39;  # 인터넷 주소창 localhost:5000 검색

@app.route(&#39;/mypage&#39;)
def mypage():  
   return &#39;This is My Page!&#39;  # localhost:5000/mypage치면 이페이지로 이동

if __name__ == &#39;__main__&#39;:  
   app.run(&#39;0.0.0.0&#39;,port=5000,debug=True)</code></pre><hr>
<h2 id="📝flask_html파일-주기">📝Flask_HTML파일 주기</h2>
<blockquote>
<p><strong>기본 폴더구조</strong><br><br>Flask 서버를 만들 때, 항상,
프로젝트 폴더 안에,
<strong>ㄴstatic 폴더</strong> (이미지, css파일을 넣어둡니다)
<strong>ㄴtemplates 폴더</strong> (html파일을 넣어둡니다)
<strong>ㄴapp.py 파일</strong><br>
이렇게 세 개를 만들어두고 시작하세요. 이제 각 폴더의 역할을 알아봅시다!
(꼭 참고!! venv는 실제로는 보이지만, <strong>안보인다~</strong>라고 생각하세요! 기억하시죠?)</p>
</blockquote>
<ul>
<li><p>templates 폴더 안 index.html 파일 생성.</p>
<pre><code class="language-python">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js&quot;&gt;&lt;/script&gt;
  &lt;title&gt;Document&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h1&gt;서버를 만들었다!&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
</li>
<li><p>flask 내장함수 render_template를 이용, html 파일 불러오기</p>
<pre><code class="language-python">from flask import Flask, render_template  
app = Flask(__name__)
</code></pre>
</li>
</ul>
<h2 id="url-별로-함수명이-같거나">URL 별로 함수명이 같거나,</h2>
<h2 id="route-등의-주소가-같으면-안됩니다">route(&#39;/&#39;) 등의 주소가 같으면 안됩니다.</h2>
<p>@app.route(&#39;/&#39;)
def home():
   return render_template(&#39;index.html&#39;) # templates 폴더의 index.html(CSS) 실행</p>
<p>if <strong>name</strong> == &#39;<strong>main</strong>&#39;:
   app.run(&#39;0.0.0.0&#39;, port=5000, debug=True)</p>
<pre><code>***
## 📝Flask_본격 API 만들기
&gt;**클라이언트가 요청 할 때에도, &quot;방식&quot;이 존재**
클라이언트는 요청할 때 HTTP request method(요청 메소드)를 통해, 어떤 요청 종류인지 응답하는 서버 쪽에 정보를 알려주는 것.&lt;br&gt;
**GET, POST 방식**
여러 방식([링크](https://developer.mozilla.org/ko/docs/Web/HTTP/Methods))이 존재하지만 우리는 가장 많이 쓰이는 GET, POST 방식에 대해 다루겠습니다. 
****
* GET → 통상적으로! &lt;span style =&quot;color:rgb(32,201,151);&quot;&gt;**데이터 조회(Read)**&lt;/span&gt;를 요청할 때
  예) 영화 목록 조회
  → **데이터 전달** : URL 뒤에 물음표를 붙여 key=value로 전달
  → 예: google.com?q=북극곰
&lt;br&gt;
* POST → 통상적으로! &lt;span style =&quot;color:rgb(32,201,151);&quot;&gt;**데이터 생성(Create), 변경(Update), 삭제(Delete) **&lt;/span&gt;를 요청 할 때
  예) 회원가입, 회원탈퇴, 비밀번호 수정
  → **데이터 전달 :** 바로 보이지 않는 HTML body에 key:value 형태로 전달

#### API 만들고 사용하기
1. 클라이언트와 서버 확인하기
2. 서버부터 만들기
3. 클라이언트 만들기
4. 완성 확인하기
```python
from flask import Flask, render_template, request, jsonify  # request, jsonify 추가
app = Flask(__name__)

@app.route(&#39;/&#39;)
def home():
   return render_template(&#39;index.html&#39;)

### GET 요청 API코드 ###
@app.route(&#39;/test&#39;, methods=[&#39;GET&#39;])
def test_get():
   title_receive = request.args.get(&#39;title_give&#39;)  # &#39;title_give&#39;로 가져온 값 보여줘
   print(title_receive)
   return jsonify({&#39;result&#39;:&#39;success&#39;, &#39;msg&#39;: &#39;이 요청은 GET!&#39;})

&quot;&quot;&quot;
### GET 요청 확인 Ajax코드 ###
&lt;--!&gt;$.ajax({
    type: &quot;GET&quot;,
    url: &quot;/test?title_give=봄날은간다&quot;,
    data: {},
    success: function(response){
       console.log(response)
    }
  })
&quot;&quot;&quot;

### POST 요청 API코드 ###
@app.route(&#39;/test&#39;, methods=[&#39;POST&#39;])
def test_post():
   title_receive = request.form[&#39;title_give&#39;]  # &#39;title_give&#39;로 가져온 값 보여줘
   print(title_receive)
   return jsonify({&#39;result&#39;:&#39;success&#39;, &#39;msg&#39;: &#39;이 요청은 POST!&#39;})

&quot;&quot;&quot;
### POST 요청 확인 Ajax코드 ###
$.ajax({
    type: &quot;POST&quot;,
    url: &quot;/test&quot;,
    data: { title_give:&#39;봄날은간다&#39; },
    success: function(response){
       console.log(response)
    }
  })
&quot;&quot;&quot;

if __name__ == &#39;__main__&#39;:
   app.run(&#39;0.0.0.0&#39;, port=5000, debug=True)</code></pre><hr>
<h3 id="연습-1-모두의-책리뷰">연습 1. 모두의 책리뷰</h3>
<blockquote>
<p>🔥 sparta → projects → bookreview 폴더 열고 시작!
<code>flask</code> <code>pymongo</code> 패키지 설치.<br>
<strong>flask 폴더 구조 만들기</strong>
static, templates 폴더 + <code>app.py</code> 생성.
templates 폴더에 <code>index.html</code> 생성.</p>
</blockquote>
<ul>
<li>서버 <code><span style ="color:rgb(32,201,151);">app.py</span></code><pre><code class="language-python">from flask import Flask, render_template, jsonify, request
app = Flask(__name__)
</code></pre>
</li>
</ul>
<p>from pymongo import MongoClient
client = MongoClient(&#39;localhost&#39;, 27017)
db = client.dbsparta</p>
<h2 id="html을-주는-부분">HTML을 주는 부분</h2>
<p>@app.route(&#39;/&#39;)
def home():
    return render_template(&#39;index.html&#39;)</p>
<h2 id="api-역할을-하는-부분">API 역할을 하는 부분</h2>
<p>@app.route(&#39;/review&#39;, methods=[&#39;POST&#39;])  # 요청 URL = /review, 요청 방식 = POST
def write_review():</p>
<pre><code>### 클라이언트가 준 title, author, review 가져오기. 
title_receive = request.form[&#39;title_give&#39;]  # title_receive로 클라이언트가 준 title 가져오기
author_receive = request.form[&#39;author_give&#39;]  # author_receive로 클라이언트가 준 author 가져오기
review_receive = request.form[&#39;review_give&#39;]  # review_receive로 클라이언트가 준 review 가져오기

### DB에 정보 삽입하기.
doc = {
    &#39;title&#39;:title_receive,
    &#39;author&#39;:author_receive,
    &#39;review&#39;:review_receive
}

db.bookreview.insert_one(doc)  # reviews에 review 저장하기

### 성공 여부 &amp; 성공 메시지 반환하기.
return jsonify({&#39;msg&#39;: &#39;저장 완료!&#39;})  # 응답데이터(JSON 형식)</code></pre><p>@app.route(&#39;/review&#39;, methods=[&#39;GET&#39;])  # 요청 URL = /review, 요청 방식 = GET
def read_reviews():
    ### DB에서 리뷰 정보 모두 가져오기 
    reviews = list(db.bookreview.find({}, {&#39;_id&#39;:false}))  # 요청데이터 없음.
    return jsonify({&#39;all_reviews&#39;: reviews})  # 응답데이터(JSON 형식)</p>
<p>if <strong>name</strong> == &#39;<strong>main</strong>&#39;:
    app.run(&#39;0.0.0.0&#39;, port=5000, debug=True)</p>
<pre><code>
- 클라이언트 &lt;code&gt;&lt;span style =&quot;color:rgb(32,201,151);&quot;&gt;index.html&lt;/span&gt;&lt;/code&gt;
```html
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;

    &lt;head&gt;
        &lt;!-- Webpage Title --&gt;
        &lt;title&gt;모두의 책리뷰 | 스파르타코딩클럽&lt;/title&gt;

        &lt;!-- Required meta tags --&gt;
        &lt;meta charset=&quot;utf-8&quot;&gt;
        &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, shrink-to-fit=no&quot;&gt;

        &lt;!-- Bootstrap CSS --&gt;
        &lt;link rel=&quot;stylesheet&quot; href=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css&quot;
              integrity=&quot;sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm&quot;
              crossorigin=&quot;anonymous&quot;&gt;

        &lt;!-- JS --&gt;
        &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js&quot;&gt;&lt;/script&gt;
        &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js&quot;
                integrity=&quot;sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q&quot;
                crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;

        &lt;!-- 구글폰트 --&gt;
        &lt;link href=&quot;https://fonts.googleapis.com/css?family=Do+Hyeon&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

        &lt;script type=&quot;text/javascript&quot;&gt;

            $(document).ready(function () {
                showReview();
            });

            function makeReview() {

              // 제목, 저자, 리뷰 내용 가져오기.
              let title = $(&#39;#title&#39;).val()
              let author = $(&#39;#author&#39;).val()
              let review = $(&#39;#bookreview&#39;).val()

              // 제목, 저자, 리뷰 중 하나라도 입력하지 않았을 경우, alert를 띄웁니다.
                // POST /review에 저장 요청. 
                $.ajax({
                    type: &quot;POST&quot;,
                    url: &quot;/review&quot;,
                    data: {title_give:title,author_give:author,review_give:review},
                    success: function (response) {
                        alert(response[&quot;msg&quot;]);
                        window.location.reload();
                    }
                })
            }

            function showReview() {
                $.ajax({
                    type: &quot;GET&quot;,
                    url: &quot;/review&quot;,
                    data: {},
                    success: function (response) {
                        let reviews = response[&#39;all_reviews&#39;]
                  for (let i = 0; i &lt; reviews.length; i++) {
                            let title = reviews[i][&#39;title&#39;]
                            let author = reviews[i][&#39;author&#39;]
                            let review = reviews[i][&#39;review&#39;]

                            let temp+html = `&lt;tr&gt;
                                                &lt;td&gt;${title}&lt;/td&gt;
                                                &lt;td&gt;${author}&lt;/td&gt;
                                                &lt;td&gt;${review}&lt;/td&gt;
                                             &lt;/tr&gt;`
                           $(&#39;#reviews-box&#39;).append(temp_html)
                        }
                    }
                })
            }
        &lt;/script&gt;

        &lt;style type=&quot;text/css&quot;&gt;
            * {
                font-family: &quot;Do Hyeon&quot;, sans-serif;
            }

            h1,
            h5 {
                display: inline;
            }

            .info {
                margin-top: 20px;
                margin-bottom: 20px;
            }

            .review {
                text-align: center;
            }

            .reviews {
                margin-top: 100px;
            }
        &lt;/style&gt;
    &lt;/head&gt;

    &lt;body&gt;
        &lt;div class=&quot;container&quot;&gt;
            &lt;img src=&quot;https://previews.123rf.com/images/maxxyustas/maxxyustas1511/maxxyustas151100002/47858355-education-concept-books-and-textbooks-on-the-bookshelf-3d.jpg&quot;
                 class=&quot;img-fluid&quot; alt=&quot;Responsive image&quot;&gt;
            &lt;div class=&quot;info&quot;&gt;
                &lt;h1&gt;읽은 책에 대해 말씀해주세요.&lt;/h1&gt;
                &lt;p&gt;다른 사람을 위해 리뷰를 남겨주세요! 다 같이 좋은 책을 읽는다면 다 함께 행복해질 수 있지 않을까요?&lt;/p&gt;
                &lt;div class=&quot;input-group mb-3&quot;&gt;
                    &lt;div class=&quot;input-group-prepend&quot;&gt;
                        &lt;span class=&quot;input-group-text&quot;&gt;제목&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;input type=&quot;text&quot; class=&quot;form-control&quot; id=&quot;title&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;input-group mb-3&quot;&gt;
                    &lt;div class=&quot;input-group-prepend&quot;&gt;
                        &lt;span class=&quot;input-group-text&quot;&gt;저자&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;input type=&quot;text&quot; class=&quot;form-control&quot; id=&quot;author&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;input-group mb-3&quot;&gt;
                    &lt;div class=&quot;input-group-prepend&quot;&gt;
                        &lt;span class=&quot;input-group-text&quot;&gt;리뷰&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;textarea class=&quot;form-control&quot; id=&quot;bookReview&quot;
                              cols=&quot;30&quot;
                              rows=&quot;5&quot; placeholder=&quot;140자까지 입력할 수 있습니다.&quot;&gt;&lt;/textarea&gt;
                &lt;/div&gt;
                &lt;div class=&quot;review&quot;&gt;
                    &lt;button onclick=&quot;makeReview()&quot; type=&quot;button&quot; class=&quot;btn btn-primary&quot;&gt;리뷰 작성하기&lt;/button&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;reviews&quot;&gt;
                &lt;table class=&quot;table&quot;&gt;
                    &lt;thead&gt;
                    &lt;tr&gt;
                        &lt;th scope=&quot;col&quot;&gt;제목&lt;/th&gt;
                        &lt;th scope=&quot;col&quot;&gt;저자&lt;/th&gt;
                        &lt;th scope=&quot;col&quot;&gt;리뷰&lt;/th&gt;
                    &lt;/tr&gt;
                    &lt;/thead&gt;
                    &lt;tbody id=&quot;reviews-box&quot;&gt;
                    &lt;/tbody&gt;
                &lt;/table&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/body&gt;

&lt;/html&gt;</code></pre><hr>
<h3 id="연습-2-나홀로-메모장">연습 2. 나홀로 메모장</h3>
<blockquote>
<p>🔥 <strong>sparta → projects → alonememo 폴더를 열고 시작!</strong>
<code>flask</code> <code>pymongo</code> <code>requests</code> <code>bs4</code> 패키지 설치.<br>
<strong>flask 폴더 구조 만들기</strong>
static, templates 폴더 + <code>app.py</code> 생성.
templates 폴더에 <code>index.html</code> 생성.</p>
</blockquote>
<h4 id="api-설계하기">API 설계하기</h4>
<p>✅ 포스팅API  - 카드 생성 (Create) <br>
<strong>① 요청 정보</strong>
      - 요청 URL= <code>/memo</code> , 요청 방식 = <code>POST</code>
      - 요청 데이터 : URL(url_give), 코멘트(comment_give)
<strong>② 서버가 제공할 기능</strong>
    - URL의 meta태그 정보를 바탕으로 제목, 설명, 이미지URL 스크래핑
    - (제목, 설명, URL, 이미지URL, 코멘트) 정보를 모두 DB에 저장
*<em>③ 응답 데이터 *</em>
    - API가 정상적으로 작동하는지 클라이언트에게 알려주기 위해서 성공 메시지 보내기
    - (JSON 형식) &#39;result&#39;= &#39;success&#39;
<br></p>
<p>✅ 리스팅API - 저장된 카드 보여주기 (Read)<br>
<strong>① 요청 정보</strong>
    - 요청 URL= <code>/memo</code> , 요청 방식 = <code>GET</code>
    - 요청 데이터 : 없음
<strong>② 서버가 제공할 기능</strong>
    - DB에 저장돼있는 모든 (제목, 설명, URL, 이미지URL, 코멘트) 정보를 가져오기
*<em>③ 응답 데이터 *</em>
    - 아티클(기사)들의 정보(제목, 설명, URL, 이미지URL, 코멘트) → 카드 만들어서 붙이기
    - (JSON 형식) &#39;articles&#39;: 아티클 정보</p>
<hr>
<h4 id="조각-기능-구현해보기">조각 기능 구현해보기</h4>
<p>→ URL에서 페이지 정보 가져오기<strong>(meta태그 스크래핑)</strong></p>
<ul>
<li>메타 태그는, <code>head</code> <code>/head</code> 부분에 들어가는, 눈으로 보이는 것(body) 외에 사이트의 속성을 설명해주는 태그들.</li>
<li>og:image / og:title / og:description 을 크롤링 할 예정
<img src = "https://images.velog.io/images/designer_rami/post/418b0b66-6db6-4692-ae6d-613dc8c5bc0f/image.png" style = width:400px;></p></li>
<li>크롤링 기본 코드<pre><code class="language-python">import requests
from bs4 import BeautifulSoup
</code></pre>
</li>
</ul>
<p>url = &#39;<a href="https://movie.naver.com/movie/bi/mi/basic.nhn?code=171539&#39;">https://movie.naver.com/movie/bi/mi/basic.nhn?code=171539&#39;</a></p>
<p>headers = {&#39;User-Agent&#39; : &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36&#39;}
data = requests.get(url,headers=headers)</p>
<p>soup = BeautifulSoup(data.text, &#39;html.parser&#39;)</p>
<h1 id="여기에-코딩을-해서-meta-tag를-먼저-가져와보겠습니다">여기에 코딩을 해서 meta tag를 먼저 가져와보겠습니다.</h1>
<pre><code>- 크롤링 연습 (meta_prac.py)
```python
import requests
from bs4 import BeautifulSoup

url = &#39;https://movie.naver.com/movie/bi/mi/basic.nhn?code=171539&#39;

headers = {&#39;User-Agent&#39; : &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36&#39;}
data = requests.get(url,headers=headers)

soup = BeautifulSoup(data.text, &#39;html.parser&#39;)

# 여기에 코딩을 해서 meta tag를 먼저 가져와보겠습니다.
title = soup.select_one(&#39;meta[property=&quot;og:title&quot;]&#39;)[&#39;content&#39;]
image = soup.select_one(&#39;meta[property=&quot;og:image&quot;]&#39;)[&#39;content&#39;]
desc = soup.select_one(&#39;meta[property=&quot;og:description&quot;]&#39;)[&#39;content&#39;]

print(title, image, desc)</code></pre><ul>
<li>서버 <code><span style ="color:rgb(32,201,151);">app.py</span></code><pre><code class="language-python">from flask import Flask, render_template, jsonify, request
app = Flask(__name__)
</code></pre>
</li>
</ul>
<p>import requests
from bs4 import BeautifulSoup</p>
<p>from pymongo import MongoClient
client = MongoClient(&#39;localhost&#39;, 27017)
db = client.dbsparta</p>
<h2 id="html을-주는-부분-1">HTML을 주는 부분</h2>
<p>@app.route(&#39;/&#39;)
def home():
   return render_template(&#39;index.html&#39;)</p>
<p>@app.route(&#39;/memo&#39;, methods=[&#39;GET&#39;])
def listing():
    articles = list(db.articles.find({},{&#39;_id&#39;:false}))  # articles는 aaa로 해도 무방
    return jsonify({&#39;all_articles&#39;:articles})  # articles는 aaa로 해도 무방</p>
<h2 id="api-역할을-하는-부분-1">API 역할을 하는 부분</h2>
<p>@app.route(&#39;/memo&#39;, methods=[&#39;POST&#39;])
def saving():
    url_receive = request.form[&#39;url_give&#39;]
    comment_receive = request.form[&#39;comment_give&#39;]</p>
<pre><code>headers = {&#39;User-Agent&#39; : &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36&#39;}
data = requests.get(url_receive,headers=headers)

soup = BeautifulSoup(data.text, &#39;html.parser&#39;)

title = soup.select_one(&#39;meta[property=&quot;og:title&quot;]&#39;)[&#39;content&#39;]
image = soup.select_one(&#39;meta[property=&quot;og:image&quot;]&#39;)[&#39;content&#39;]
desc = soup.select_one(&#39;meta[property=&quot;og:description&quot;]&#39;)[&#39;content&#39;]

doc = {
    &#39;title&#39;:title,
    &#39;image&#39;:image,
    &#39;desc&#39;:desc,
    &#39;url&#39;:url_receive,
    &#39;comment&#39;:comment_receive
}

db.articles.insert_one(doc)

return jsonify({&#39;msg&#39;:&#39;저장이 완료되었습니다!&#39;})</code></pre><p>if <strong>name</strong> == &#39;<strong>main</strong>&#39;:
   app.run(&#39;0.0.0.0&#39;,port=5000,debug=True)</p>
<pre><code>
- 클라이언트 &lt;code&gt;&lt;span style =&quot;color:rgb(32,201,151);&quot;&gt;index.html&lt;/span&gt;&lt;/code&gt;
```html
&lt;!Doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;

    &lt;head&gt;
        &lt;!-- Required meta tags --&gt;
        &lt;meta charset=&quot;utf-8&quot;&gt;
        &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, shrink-to-fit=no&quot;&gt;

        &lt;!-- Bootstrap CSS --&gt;
        &lt;link rel=&quot;stylesheet&quot; href=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css&quot;
              integrity=&quot;sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm&quot;
              crossorigin=&quot;anonymous&quot;&gt;

        &lt;!-- JS --&gt;
        &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js&quot;&gt;&lt;/script&gt;
        &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js&quot;
                integrity=&quot;sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q&quot;
                crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;

        &lt;!-- 구글폰트 --&gt;
        &lt;link href=&quot;https://fonts.googleapis.com/css?family=Stylish&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

        &lt;title&gt;스파르타코딩클럽 | 나홀로 메모장&lt;/title&gt;

        &lt;!-- style --&gt;
        &lt;style type=&quot;text/css&quot;&gt;
            * {
                font-family: &quot;Stylish&quot;, sans-serif;
            }

            .wrap {
                width: 900px;
                margin: auto;
            }

            .comment {
                color: blue;
                font-weight: bold;
            }

            #post-box {
                width: 500px;
                margin: 20px auto;
                padding: 50px;
                border: black solid;
                border-radius: 5px;
            }
        &lt;/style&gt;
        &lt;script&gt;
            $(document).ready(function () {
                showArticles();
            });

            function openClose() {
                if ($(&quot;#post-box&quot;).css(&quot;display&quot;) == &quot;block&quot;) {
                    $(&quot;#post-box&quot;).hide();
                    $(&quot;#btn-post-box&quot;).text(&quot;포스팅 박스 열기&quot;);
                } else {
                    $(&quot;#post-box&quot;).show();
                    $(&quot;#btn-post-box&quot;).text(&quot;포스팅 박스 닫기&quot;);
                }
            }

            function postArticle() {
              let url = $(&#39;#post-url&#39;).val()
             let comment = $(&#39;#post-comment&#39;).val()

                $.ajax({
                    type: &quot;POST&quot;,
                    url: &quot;/memo&quot;,
                    data: {url_give:url, comment_give:comment},
                    success: function (response) { // 성공하면
                        alert(response[&quot;msg&quot;]);
                  window.location.reload()
                    }
                })
            }

            function showArticles() {
                $.ajax({
                    type: &quot;GET&quot;,
                    url: &quot;/memo&quot;,
                    data: {},
                    success: function (response) {
                        let articles = response[&#39;all_articles&#39;]
                  for (let i = 0; i &lt; articles.length; i++){
                              let title = articles[i] [&#39;title&#39;]
                            let image = articles[i] [&#39;image&#39;]
                              let url = articles[i] [&#39;url&#39;]
                            let desc = articles[i] [&#39;desc&#39;]
                            let comment = articles[i] [&#39;comment&#39;]

                            let temp_html = `&lt;div class=&quot;card&quot;&gt;
                                                &lt;img class=&quot;${image}&quot; alt=&quot;Card image cap&quot;&gt;
                                                &lt;div class=&quot;card-body&quot;&gt;
                                                       &lt;a target=&quot;_blank&quot; href=&quot;&quot;${url}&quot;&quot; class=&quot;card-title&quot;&gt;&quot;${title}&quot;&lt;/a&gt;
                                                       &lt;p class=&quot;card-text&quot;&gt;&quot;${desc}&quot;&lt;/p&gt;
                                                     &lt;p class=&quot;card-text comment&quot;&gt;&quot;${comment}&quot;&lt;/p&gt;
                                            &lt;/div&gt;`
                     $(&#39;#cards-box&#39;).append(temp_html)
                     }
                    }
                })
            }
        &lt;/script&gt;

    &lt;/head&gt;

    &lt;body&gt;
        &lt;div class=&quot;wrap&quot;&gt;
            &lt;div class=&quot;jumbotron&quot;&gt;
                &lt;h1 class=&quot;display-4&quot;&gt;나홀로 링크 메모장!&lt;/h1&gt;
                &lt;p class=&quot;lead&quot;&gt;중요한 링크를 저장해두고, 나중에 볼 수 있는 공간입니다&lt;/p&gt;
                &lt;hr class=&quot;my-4&quot;&gt;
                &lt;p class=&quot;lead&quot;&gt;
                    &lt;button onclick=&quot;openClose()&quot; id=&quot;btn-post-box&quot; type=&quot;button&quot; class=&quot;btn btn-primary&quot;&gt;포스팅 박스 열기
                    &lt;/button&gt;
                &lt;/p&gt;
            &lt;/div&gt;
            &lt;div id=&quot;post-box&quot; class=&quot;form-post&quot; style=&quot;display:none&quot;&gt;
                &lt;div&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;post-url&quot;&gt;아티클 URL&lt;/label&gt;
                        &lt;input id=&quot;post-url&quot; class=&quot;form-control&quot; placeholder=&quot;&quot;&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;post-comment&quot;&gt;간단 코멘트&lt;/label&gt;
                        &lt;textarea id=&quot;post-comment&quot; class=&quot;form-control&quot; rows=&quot;2&quot;&gt;&lt;/textarea&gt;
                    &lt;/div&gt;
                    &lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot; onclick=&quot;postArticle()&quot;&gt;기사저장&lt;/button&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div id=&quot;cards-box&quot; class=&quot;card-columns&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/body&gt;

&lt;/html&gt;</code></pre><hr>
<hr>
<p aline="center"><img src = "https://images.velog.io/images/designer_rami/post/76cd93a4-791a-43b5-bc77-a6c0e31ebacd/1-6.png" style = width:100px;></p>

<h2 id="👩💻-4주차-마무리하며">👩‍💻 4주차 마무리하며.</h2>
<p>🤍 코딩은 외워서 하는 것이 아니다, 가져다 쓰는 것!
🤍 [ ] / { } / &quot; &quot; / . → 맥락과 사용법을 익혀라!
🤍 헷갈리지 않게 &quot;정렬(ctrl+alt+L)&quot; 잘하기!
🤍 태그 짝 잘 맞는지 확인하기!
🤍 완벽하게 하려고 하지 않기
🤍 익숙할 정도로 반복/연습하기
🤍 구글링을 습관화
🤍 에러를 무서워하지 말고, 최대한 읽어보고 익숙해지려고 노력하기!</p>
<p>💜 게더(스파랜드)에서 스온스 진행 중
💜 11일 챌린지 도전 중
💜 개발일지 작성 중 (+복습)
💜 틈틈히 개별 프로젝트 아이디어</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[스파르타] #웹개발 종합반 #3주차 개발일지👊🏻]]></title>
            <link>https://velog.io/@designer_rami/%EC%8A%A4%ED%8C%8C%EB%A5%B4%ED%83%80-%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%A2%85%ED%95%A9%EB%B0%98-3%EC%A3%BC%EC%B0%A8-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@designer_rami/%EC%8A%A4%ED%8C%8C%EB%A5%B4%ED%83%80-%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%A2%85%ED%95%A9%EB%B0%98-3%EC%A3%BC%EC%B0%A8-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Thu, 06 Jan 2022 12:08:12 GMT</pubDate>
            <description><![CDATA[<p>🌼 <a href="https://www.notion.so/3-ed5a2f9b258b4ac6bb63b95c3af4f6a5"><strong>Notion 강의자료</strong></a></p>
<h2 id="🚩수업-목표">🚩수업 목표</h2>
<ol>
<li>파이썬 기초 문법을 안다.</li>
<li>원하는 페이지를 크롤링 할 수 있다.</li>
<li>pymongo를 통해 mongoDB를 제어할 수 있다.</li>
</ol>
<hr>
<h2 id="📝파이썬python">📝파이썬(python)</h2>
<blockquote>
<p><strong>파이썬을 설치한다는 것의 의미</strong>
일종의 <span style="color:rgb(32, 201, 151);"><strong>파이썬 번역팩을 설치했다</strong></span>라고 생각. 컴퓨터는 101010001 과 같은 언어만 알아듣기 때문에 파이썬 문법으로 된 것을 101010001로 변환해줄 수 있도록, 번역 패키지를 설치하는 것.</p>
</blockquote>
<h4 id="파이썬-기초-문법">파이썬 기초 문법</h4>
<h3 id="👉-변수--기본연산">👉 변수 &amp; 기본연산</h3>
<pre><code class="language-python">a = 3      # 3을 a에 넣는다
b = a      # a를 b에 넣는다
a = a + 1  # a+1을 다시 a에 넣는다

num1 = a*b # a*b의 값을 num1이라는 변수에 넣는다
num2 = 99 # 99의 값을 num2이라는 변수에 넣는다

# 변수의 이름은 마음대로 지을 수 있음!
# 진짜 &quot;마음대로&quot; 짓는 게 좋을까? var1, var2 이렇게?</code></pre>
<hr>
<h3 id="👉-자료형">👉 자료형</h3>
<ul>
<li>숫자, 문자형<pre><code class="language-python">name = &#39;bob&#39; # 변수에는 문자열이 들어갈 수도 있고,
num = 12 # 숫자가 들어갈 수도 있고,
</code></pre>
</li>
</ul>
<p>is_number = True # True 또는 False -&gt; &quot;Boolean&quot;형이 들어갈 수도 있습니다.</p>
<p>#########</p>
<h1 id="그리고-list-dictionary-도-들어갈-수도-있죠">그리고 List, Dictionary 도 들어갈 수도 있죠.</h1>
<pre><code>- 리스트 형 (Javascript의 배열형과 동일)
```python
a_list = []
a_list.append(1)     # 리스트에 값을 넣는다
a_list.append([2,3]) # 리스트에 [2,3]이라는 리스트를 다시 넣는다

# a_list의 값은? [1,[2,3]]
# a_list[0]의 값은? 1
# a_list[1]의 값은? [2,3]
# a_list[1][0]의 값은? 2</code></pre><ul>
<li>Dictionary 형 (Javascript의 dictionary형과 동일)<pre><code class="language-python">a_dict = {}
a_dict = {&#39;name&#39;:&#39;bob&#39;,&#39;age&#39;:21}
a_dict[&#39;height&#39;] = 178
</code></pre>
</li>
</ul>
<h1 id="a_dict의-값은-namebobage21-height178">a_dict의 값은? {&#39;name&#39;:&#39;bob&#39;,&#39;age&#39;:21, &#39;height&#39;:178}</h1>
<h1 id="a_dictname의-값은-bob">a_dict[&#39;name&#39;]의 값은? &#39;bob&#39;</h1>
<h1 id="a_dictage의-값은-21">a_dict[&#39;age&#39;]의 값은? 21</h1>
<h1 id="a_dictheight의-값은-178">a_dict[&#39;height&#39;]의 값은? 178</h1>
<pre><code>- Dictionary 형과 List형의 조합
```python
people = [{&#39;name&#39;:&#39;bob&#39;,&#39;age&#39;:20},{&#39;name&#39;:&#39;carry&#39;,&#39;age&#39;:38}]

# people[0][&#39;name&#39;]의 값은? &#39;bob&#39;
# people[1][&#39;name&#39;]의 값은? &#39;carry&#39;

person = {&#39;name&#39;:&#39;john&#39;,&#39;age&#39;:7}
people.append(person)

# people의 값은? [{&#39;name&#39;:&#39;bob&#39;,&#39;age&#39;:20},{&#39;name&#39;:&#39;carry&#39;,&#39;age&#39;:38},{&#39;name&#39;:&#39;john&#39;,&#39;age&#39;:7}]
# people[2][&#39;name&#39;]의 값은? &#39;john&#39;</code></pre><hr>
<h3 id="👉-함수">👉 함수</h3>
<pre><code class="language-python">def sum_all(a,b,c):
    return a+b+c

def mul(a,b):
    return a*b

result = sum_all(1,2,3) + mul(10,10)

# result라는 변수의 값은?</code></pre>
<hr>
<h3 id="👉-조건문">👉 조건문</h3>
<blockquote>
<p>if / else 로 구성!</p>
</blockquote>
<pre><code class="language-python">def is_adult(age):
    if age &gt; 20:
        print(&#39;성인입니다&#39;)    # 조건이 참이면 성인입니다를 출력
    else:
        print(&#39;청소년이에요&#39;)  # 조건이 거짓이면 청소년이에요를 출력

is_adult(30)
# 무엇이 출력될까요?</code></pre>
<hr>
<h3 id="👉-반복문">👉 반복문</h3>
<blockquote>
<p>파이썬에서의 반복문은, 리스트의 요소들을 하나씩 꺼내쓰는 형태.</p>
</blockquote>
<pre><code class="language-python">fruits = [&#39;사과&#39;,&#39;배&#39;,&#39;감&#39;,&#39;귤&#39;]

for fruit in fruits:
    print(fruit)

# 사과, 배, 감, 귤 하나씩 꺼내어 찍힙니다.</code></pre>
<pre><code class="language-python">people = [{&#39;name&#39;: &#39;bob&#39;, &#39;age&#39;: 20}, 
          {&#39;name&#39;: &#39;carry&#39;, &#39;age&#39;: 38},
          {&#39;name&#39;: &#39;john&#39;, &#39;age&#39;: 7},
          {&#39;name&#39;: &#39;smith&#39;, &#39;age&#39;: 17},
          {&#39;name&#39;: &#39;ben&#39;, &#39;age&#39;: 27}]

# 모든 사람의 이름과 나이를 출력해봅시다.
for person in people:
    print(person[&#39;name&#39;], person[&#39;age&#39;])


# 이번엔, 반복문과 조건문을 응용한 함수를 만들어봅시다.
# 이름을 받으면, age를 리턴해주는 함수
def get_age(myname):
    for person in people:
        if person[&#39;name&#39;] == myname:
            return person[&#39;age&#39;]
    return &#39;해당하는 이름이 없습니다&#39;


print(get_age(&#39;bob&#39;))
print(get_age(&#39;kay&#39;))</code></pre>
<hr>
<h2 id="📝파이썬-패키지-설치">📝파이썬 패키지 설치</h2>
<blockquote>
<p>패키지? 라이브러리? → 
Python 에서 패키지는 모듈(일종의 기능들 묶음)을 모아 놓은 단위입니다. 이런 패키지 의 묶음을 라이브러리 라고 볼 수 있습니다. 지금 여기서는 외부 라이브러리를 사용하기 위해서 패키지를 설치합니다. <br>
즉, 여기서는 <strong>패키지 설치 = 외부 라이브러리 설치!</strong></br></p>
</blockquote>
<ul>
<li><p><strong>가상환경(<span style="color:rgb(32, 201, 151);">v</span>irtual <span style="color:rgb(32, 201, 151);">env</span>ironment)</strong>은 같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향을 주지 않기 위해, 파이썬 배포 패키지들을 설치하거나 업그레이드하는 것을 가능하게 하는 <span style="color:rgb(32, 201, 151);"><strong>격리된 실행 환경 = 라이브러리를 담아두는 폴더</strong></span></p>
</li>
<li><p><strong>pip(python install package) 사용</strong> - 앱을 설치할 때 앱스토어/플레이스토어를 가듯이, 새로운 프로젝트의 라이브러리를 가상환경(공구함)에 설치하려면 pip 를 이용하게 됩니다.
<code>requests</code> 패키지 설치</p>
<pre><code class="language-python">import requests # requests 라이브러리 설치 필요
</code></pre>
</li>
</ul>
<p>r = requests.get(&#39;<a href="http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99&#39;">http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99&#39;</a>)
rjson = r.json()</p>
<p>print(rjson[&#39;RealtimeCityAir&#39;][&#39;row&#39;][0][&#39;NO2&#39;])</p>
<pre><code>- 모든 구의 IDEX_MVL 값을 찍어주자!
```python
import requests # requests 라이브러리 설치 필요

r = requests.get(&#39;http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99&#39;)
rjson = r.json()

gus = rjson[&#39;RealtimeCityAir&#39;][&#39;row&#39;] # 임의의 이름(gus)

for gu in gus:
    print(gu[&#39;MSRSTE_NM&#39;], gu[&#39;IDEX_MVL&#39;])</code></pre><ul>
<li>IDEX_MVL 값이 60 미만인 구만 찍어주자!(들여쓰기가 얼마나 중요한지 다시한번 확인)<pre><code class="language-python">import requests # requests 라이브러리 설치 필요
</code></pre>
</li>
</ul>
<p>r = requests.get(&#39;<a href="http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99&#39;">http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99&#39;</a>)
rjson = r.json()</p>
<p>gus = rjson[&#39;RealtimeCityAir&#39;][&#39;row&#39;]</p>
<p>for gu in gus:
    if gu[&#39;IDEX_MVL&#39;] &lt; 60:
        print (gu[&#39;MSRSTE_NM&#39;], gu[&#39;IDEX_MVL&#39;]) #&#39;구&#39;들 중 &#39;미세먼지 수치&#39;가 60 초과면 &#39;이름&#39;, &#39;미세먼지 수치&#39; 표시</p>
<pre><code>## 📝웹스크래핑(크롤링) 기초
&gt; 크롤링(crawling) 혹은 스크레이핑(scraping)은 웹 페이지를 그대로 가져와서 거기서 데이터를 추출해 내는 행위.

`bs4` 패키지 추가설치
#### 크롤링 기본 세팅
```python
import requests
from bs4 import BeautifulSoup

# 타겟 URL을 읽어서 HTML를 받아오고,
headers = {&#39;User-Agent&#39; : &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36&#39;}
data = requests.get(&#39;https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&amp;date=20200303&#39;,headers=headers)

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 &quot;파싱 용이해진 html&quot;이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.
soup = BeautifulSoup(data.text, &#39;html.parser&#39;)

#############################
# (입맛에 맞게 코딩)
#############################</code></pre><ul>
<li>Select / Select_one 사용법
태그 안의 텍스트를 찍고 싶을 땐 → 태그.text
태그 안의 속성을 찍고 싶을 땐 → 태그[&#39;속성&#39;]<h4 id="네이버영화-페이지">네이버영화 페이지</h4>
<pre><code class="language-python">import requests
from bs4 import BeautifulSoup
</code></pre>
</li>
</ul>
<h1 id="url을-읽어서-html를-받아오고">URL을 읽어서 HTML를 받아오고,</h1>
<p>headers = {&#39;User-Agent&#39; : &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36&#39;}
data = requests.get(&#39;<a href="https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&amp;date=20200303&#39;,headers=headers">https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&amp;date=20200303&#39;,headers=headers</a>)</p>
<h1 id="html을-beautifulsoup이라는-라이브러리를-활용해-검색하기-용이한-상태로-만듦">HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦</h1>
<p>soup = BeautifulSoup(data.text, &#39;html.parser&#39;)</p>
<h1 id="select를-이용해서-tr들을-불러오기">select를 이용해서, tr들을 불러오기</h1>
<p>movies = soup.select(&#39;#old_content &gt; table &gt; tbody &gt; tr&#39;) # 갖고 오고 싶은 데이터 우클릭&gt;Copy&gt;Copy Selector</p>
<p>#old_content &gt; table &gt; tbody &gt; tr:nth-child(2) &gt; td.title &gt; div &gt; a
#old_content &gt; table &gt; tbody &gt; tr:nth-child(2) &gt;</p>
<h1 id="movies-tr들-의-반복문을-돌리기">movies (tr들) 의 반복문을 돌리기</h1>
<p>for movie in movies:
    # movie 안에 a 가 있으면,
    a_tag = movie.select_one(&#39;td.title &gt; div &gt; a&#39;)
    if a_tag is not None: # 중간의 구분선 등 값이 None인 값 제외
        rank = movie.select_one(&#39;td:nth-child(1) &gt; img&#39;)[&#39;alt&#39;] # img 태그의 alt 속성값을 가져오기
        title = a_tag.text                                      # a 태그 사이의 텍스트를 가져오기
        star = movie.select_one(&#39;td.point&#39;).text                # td 태그 사이의 텍스트를 가져오기</p>
<pre><code>    print(rank,title,star)</code></pre><pre><code>#### beautifulsoup 내 select에 미리 정의된 다른 방법
```python
# 선택자를 사용하는 방법 (copy selector)
soup.select(&#39;태그명&#39;)
soup.select(&#39;.클래스명&#39;)
soup.select(&#39;#아이디명&#39;)

soup.select(&#39;상위태그명 &gt; 하위태그명 &gt; 하위태그명&#39;)
soup.select(&#39;상위태그명.클래스명 &gt; 하위태그명.클래스명&#39;)

# 태그와 속성값으로 찾는 방법
soup.select(&#39;태그명[속성=&quot;값&quot;]&#39;)

# 한 개만 가져오고 싶은 경우
soup.select_one(&#39;위와 동일&#39;)</code></pre><hr>
<h2 id="📝dbdatabase개괄">📝DB(Database)개괄</h2>
<blockquote>
<p><span style="color:rgb(32, 201, 151);"><strong>DB의 두 가지 종류.</strong></span>
<br>👉 <strong>RDBMS(SQL)</strong>
행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사합니다. 데이터 50만 개가 적재된 상태에서, 갑자기 중간에 열을 하나 더하기는 어려울 것입니다. 그러나, 정형화되어 있는 만큼, 데이터의 일관성이나 / 분석에 용이할 수 있습니다.
ex) MS-SQL, My-SQL 등
<br>👉 <strong>No-SQL</strong>
딕셔너리 형태로 데이터를 저장해두는 DB입니다. 고로 데이터 하나 하나 마다 같은 값들을 가질 필요가 없게 됩니다. 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있습니다.
ex) MongoDB</br></p>
</blockquote>
<h4 id="db-설치-확인">DB 설치 확인</h4>
<p>크롬 창에 localhost:27017 이라고 쳤을 때, 아래와 같은 화면이 나오면 mongoDB가 돌아가고 있는 것.
<img src = https://images.velog.io/images/designer_rami/post/ffd5166d-01b7-422b-9a60-7392da4ead25/image.png style = width:800px;></p>
<hr>
<h2 id="📝pymongo로-db조작하기">📝pymongo로 DB조작하기</h2>
<p><code>pymongo</code> 패키지 설치</p>
<ul>
<li><strong>pymongo 기본 코드</strong><pre><code class="language-python">from pymongo import MongoClient  # pymongo를 임포트 하기
client = MongoClient(&#39;localhost&#39;, 27017)  # mongoDB는 27017 포트로 돌아갑니다.
db = client.dbsparta  # &#39;dbsparta&#39;라는 이름의 db를 만듭니다.
</code></pre>
</li>
</ul>
<h1 id="코딩-시작">코딩 시작</h1>
<pre><code>- **pymongo(insert)** 데이터 넣기
```python
doc = {&#39;name&#39;:&#39;bobby&#39;,&#39;age&#39;:21}  
db.users.insert_one(doc)  # &#39;users&#39;라는 collection에 {&#39;name&#39;:&#39;bobby&#39;,&#39;age&#39;:21}를 넣습니다.

db.users.insert_one({&#39;name&#39;:&#39;kay&#39;,&#39;age&#39;:27})
db.users.insert_one({&#39;name&#39;:&#39;john&#39;,&#39;age&#39;:30})</code></pre><ul>
<li><strong>pymongo(find)</strong> 모든 결과 값을 보기 <pre><code class="language-python"># MongoDB에서 데이터 모두 보기
all_users = list(db.users.find({}))
</code></pre>
</li>
</ul>
<p>same_ages = list(db.users.find({&#39;age&#39;:21},{&#39;_id&#39;:False}))  # MongoDB에서 특정 조건의 데이터 모두 보기</p>
<p>print (same_ages) 
#또는
for person in same_ages:
print(person)</p>
<pre><code>- **pymongo(find_one)** 특정 결과 값을 뽑아 보기
```python
user = db.users.find_one({&#39;name&#39;:&#39;bobby&#39;})  # 이름이 bobby인 값이 여러 개라도 가장 상단의 값만 가져 옴

print(user)</code></pre><ul>
<li><strong>pymongo(update_one)</strong> 수정하기<pre><code class="language-python">db.users.update_one({&#39;name&#39;:&#39;bobby&#39;},{&#39;$set&#39;:{&#39;age&#39;:19}})  # 오타가 많으니 이 줄을 복사해서 씁시다!</code></pre>
</li>
<li><strong>pymongo(delete_one)</strong> 삭제하기<pre><code class="language-python">db.users.delete_one({&#39;name&#39;:&#39;bobby&#39;})</code></pre>
<blockquote>
<p><span style="color:rgb(32, 201, 151);"><strong>pymongo 사용법. 코드요약</strong></span></p>
</blockquote>
<pre><code class="language-python"># 저장 - 예시
doc = {&#39;name&#39;:&#39;bobby&#39;,&#39;age&#39;:21}
db.users.insert_one(doc)
# 한 개 찾기 - 예시
user = db.users.find_one({&#39;name&#39;:&#39;bobby&#39;})
# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
same_ages = list(db.users.find({&#39;age&#39;:21},{&#39;_id&#39;:False}))
# 바꾸기 - 예시
db.users.update_one({&#39;name&#39;:&#39;bobby&#39;},{&#39;$set&#39;:{&#39;age&#39;:19}})
# 지우기 - 예시
db.users.delete_one({&#39;name&#39;:&#39;bobby&#39;})</code></pre>
</li>
</ul>
<h4 id="웹스크래핑-결과-db에-저장하기">웹스크래핑 결과 DB에 저장하기</h4>
<ul>
<li>insert 연습하기<pre><code class="language-python">import requests
from bs4 import BeautifulSoup
</code></pre>
</li>
</ul>
<p>from pymongo import MongoClient           # pymongo를 임포트 하기(패키지 인스톨 먼저 해야겠죠?)
client = MongoClient(&#39;localhost&#39;, 27017)  # mongoDB는 27017 포트로 돌아갑니다.
db = client.dbsparta                      # &#39;dbsparta&#39;라는 이름의 db를 만듭니다.</p>
<h1 id="url을-읽어서-html를-받아오고-1">URL을 읽어서 HTML를 받아오고,</h1>
<p>headers = {&#39;User-Agent&#39; : &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36&#39;}
data = requests.get(&#39;<a href="https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&amp;date=20200303&#39;,headers=headers">https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&amp;date=20200303&#39;,headers=headers</a>)</p>
<h1 id="html을-beautifulsoup이라는-라이브러리를-활용해-검색하기-용이한-상태로-만듦-1">HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦</h1>
<p>soup = BeautifulSoup(data.text, &#39;html.parser&#39;)</p>
<h1 id="select를-이용해서-tr들을-불러오기-1">select를 이용해서, tr들을 불러오기</h1>
<p>movies = soup.select(&#39;#old_content &gt; table &gt; tbody &gt; tr&#39;)</p>
<h1 id="movies-tr들-의-반복문을-돌리기-1">movies (tr들) 의 반복문을 돌리기</h1>
<p>for movie in movies:
    # movie 안에 a 가 있으면,
    a_tag = movie.select_one(&#39;td.title &gt; div &gt; a&#39;)
    if a_tag is not None:
        rank = movie.select_one(&#39;td:nth-child(1) &gt; img&#39;)[&#39;alt&#39;] # img 태그의 alt 속성값을 가져오기
        title = a_tag.text                                      # a 태그 사이의 텍스트를 가져오기
        star = movie.select_one(&#39;td.point&#39;).text                # td 태그 사이의 텍스트를 가져오기
        doc = {
            &#39;rank&#39; : rank,
            &#39;title&#39; : title,
            &#39;star&#39; : star
        }
        db.movies.insert_one(doc)  # db에 insert</p>
<pre><code>- find, update 연습하기
```python
from pymongo import MongoClient
client = MongoClient(&#39;localhost&#39;, 27017)
db = client.dbsparta 

## 코딩 할 준비 ##

# &#39;매트릭스&#39; 평점 가져오기
target_movie = db.movies.find_one({&#39;title&#39;:&#39;매트릭스&#39;})  # 하나만 찾기
print (target_movie[&#39;star&#39;])

# &#39;매트릭스&#39;의 평점과 같은 평점의 영화 제목들을 가져오기
movies = list(db.movies.find({&#39;star&#39;:target_star}))

for movie in movies:
    print(movie[&#39;title&#39;])

#매트릭스 영화의 평점을 0으로 만들기
db.movies.update_one({&#39;title&#39;:&#39;매트릭스&#39;},{&#39;$set&#39;:{&#39;star&#39;:&#39;0&#39;}})</code></pre><hr>
<hr>
<p aline="center"><img src = "https://images.velog.io/images/designer_rami/post/76cd93a4-791a-43b5-bc77-a6c0e31ebacd/1-6.png" style = width:100px;></p>

<h2 id="👩💻-3주차-마무리하며">👩‍💻 3주차 마무리하며.</h2>
<p>🤍 <strong>에러보는 꿀팁!</strong> 맨 마지막줄(에러에 대한 설명→구글링)과 바로 윗줄(에러난곳) 읽기<br>🤍 반드시 마우스 오른쪽 클릭! <strong>Run</strong>으로 실행하기!
🤍 차근차근 consol에 찍어보고, 나아가는 훈련! (코드쭈-욱 짜놓고 에러찾기 X)
🤍 코딩은 외워서 하는 것이 아니다, 가져다 쓰는 것!
🤍 { } / &quot; &quot; / . → 맥락과 사용법을 익혀라!
🤍 헷갈리지 않게 &quot;정렬(ctrl+alt+L)&quot; 잘하기!
🤍 태그 짝 잘 맞는지 확인하기!
🤍 완벽하게 하려고 하지 않기
🤍 익숙할 정도로 반복/연습하기
🤍 구글링을 습관화
🤍 에러를 무서워하지 말고, 최대한 읽어보고 익숙해지려고 노력하기!</p>
<p>💜 게더(스파랜드)에서 스온스 진행 중
💜 11일 챌린지 도전 중 ~12/31
💜 개발일지 작성 중 (+복습)
💜 틈틈히 개별 프로젝트 아이디어</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[스파르타] #웹개발 종합반 #2주차 개발일지👊🏻]]></title>
            <link>https://velog.io/@designer_rami/%EC%8A%A4%ED%8C%8C%EB%A5%B4%ED%83%80-%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%A2%85%ED%95%A9%EB%B0%98-2%EC%A3%BC%EC%B0%A8-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@designer_rami/%EC%8A%A4%ED%8C%8C%EB%A5%B4%ED%83%80-%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%A2%85%ED%95%A9%EB%B0%98-2%EC%A3%BC%EC%B0%A8-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Sun, 26 Dec 2021 17:32:46 GMT</pubDate>
            <description><![CDATA[<p>🌼 <a href="https://www.notion.so/2-f9706fef663a4b5ca7c7013a57c1785d"><strong>Notion 강의자료</strong></a></p>
<h2 id="🚩수업-목표">🚩수업 목표</h2>
<ol>
<li>Javascript 문법에 익숙해진다.</li>
<li>jQuery로 간단한 HTML을 조작할 수 있다.</li>
<li>Ajax로 서버 API(약속)에 데이터를 주고, 결과를 받아온다.</li>
</ol>
<hr>
<h3 id="js-복습">JS 복습</h3>
<ul>
<li>짝/홀수 onclick 함수<pre><code class="language-js">  &lt;script&gt;
      let count = 1; // 변수를 함수 안에서 선언하면 함수가 끝나면서 사라짐.
      function hey() {
          if (count % 2 == 0) { // count를 2로 나눈 나머지가 0이라면
              alert(&#39;짝수입니다!&#39;);
          } else {
              alert(&#39;홀수입니다!&#39;);
          }    
          count += 1; // = count + 1
      }
  &lt;/script&gt;</code></pre>
</li>
</ul>
<hr>
<h2 id="📝jquery">📝JQuery</h2>
<blockquote>
<p>HTML의 요소들을 조작하는, 편리한 Javascript를 미리 작성해둔 <span style="color:rgb(32, 201, 151);"><strong>라이브러리!</strong></span></p>
</blockquote>
<ul>
<li>Javascript로도 모든 기능(예 - 버튼 글씨 바꾸기 등)을 구현할 수는 있지만,
1) 코드가 복잡하고, 2) 브라우저 간 호환성 문제도 고려해야해서, jQuery라는 라이브러리가 등장.</li>
<li>jQuery는 Javascript와 다른 특별한 소프트웨어가 아니라 <strong>미리 작성된 Javascript 코드</strong>, 전문 개발자들이 짜둔 코드를 <strong>import</strong>하여 간단하게 쓸 수 있음.<pre><code class="language-js">// Javascript로 길고 복잡하게 써야 하는 것.
document.getElementById(&quot;element&quot;).style.display = &quot;none&quot;;
</code></pre>
</li>
</ul>
<p>// jQuery로 보다 직관적으로 작성.
$(&#39;#element&#39;).hide();</p>
<pre><code>#### jQuery CDN
&lt;p&gt;&lt;a href=&quot;https://www.w3schools.com/jquery/jquery_get_started.asp&quot;&gt; 구글 CDN&lt;/a&gt; &lt;code&gt;https://fonts.google.com/?subset=korean&lt;/code&gt;&lt;/p&gt;

**부트스트랩**을 사용할 경우, jQuery CDN이 임포트 되어있음.
`&lt;head&gt;` 와 `&lt;/head&gt;` 사이에 작성.
```html
&lt;head&gt;
&lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;</code></pre><hr>
<p><code>css에서는 선택지로 class, jQuery에서는 id 값을 통해 특정 버튼/인풋박스/div/.. 등을 가리키게 됨.</code></p>
<h3 id="👉-input-박스의-값을-가져와보기">👉 input 박스의 값을 가져와보기</h3>
<blockquote>
<p><strong>값 가져오기</strong>  $(&#39;#id값&#39;).val(); 
 <strong>input값 입력하기</strong>  $(&#39;#id값&#39;).val(&#39;장영실&#39;); </p>
</blockquote>
<pre><code class="language-js">&lt;div class=&quot;posting-box&quot;&gt;
    &lt;div class=&quot;form-group&quot;&gt;
        &lt;label for=&quot;exampleInputEmail1&quot;&gt;아티클 URL&lt;/label&gt;
        &lt;input id=&quot;post-url&quot; type=&quot;email&quot; class=&quot;form-control&quot; aria-describedby=&quot;emailHelp&quot;
            placeholder=&quot;&quot;&gt;
    &lt;/div&gt;
    &lt;div class=&quot;form-group&quot;&gt;
        &lt;label for=&quot;exampleInputPassword1&quot;&gt;간단 코멘트&lt;/label&gt;
        &lt;input type=&quot;password&quot; class=&quot;form-control&quot; placeholder=&quot;&quot;&gt;
    &lt;/div&gt;
    &lt;button type=&quot;submit&quot; class=&quot;btn btn-primary&quot;&gt;기사 저장&lt;/button&gt;
&lt;/div&gt;

// 크롬 개발자도구 콘솔창에 입력.
// id 값이 post-url인 곳을 가리키고, val()로 값을 가져온다.
$(&#39;#post-url&#39;).val(); </code></pre>
<hr>
<h3 id="👉-div-보이기--숨기기">👉 div 보이기 / 숨기기</h3>
<blockquote>
<p><strong>나타내기</strong> $(&#39;#id값&#39;).show()
<strong>숨기기</strong> $(&#39;#id값&#39;).hide() </p>
</blockquote>
<pre><code class="language-js">&lt;div class=&quot;posting-box&quot; id=&quot;post-box&quot;&gt;
    &lt;div class=&quot;form-group&quot;&gt;
        &lt;label for=&quot;exampleInputEmail1&quot;&gt;아티클 URL&lt;/label&gt;
        &lt;input id=&quot;post-url&quot; type=&quot;email&quot; class=&quot;form-control&quot; aria-describedby=&quot;emailHelp&quot;
            placeholder=&quot;&quot;&gt;
    &lt;/div&gt;
    &lt;div class=&quot;form-group&quot;&gt;
        &lt;label for=&quot;exampleInputPassword1&quot;&gt;간단 코멘트&lt;/label&gt;
        &lt;input type=&quot;password&quot; class=&quot;form-control&quot; placeholder=&quot;&quot;&gt;
    &lt;/div&gt;
    &lt;button type=&quot;submit&quot; class=&quot;btn btn-primary&quot;&gt;기사 저장&lt;/button&gt;
&lt;/div&gt;

// 크롬 개발자도구 콘솔창에 입력.
// show()로 보이게 한다.(=css의 display 값을 block으로 바꾼다)
$(&#39;#post-box&#39;).show();

// id 값이 post-box인 곳을 가리키고, hide()로 안보이게 한다.(=css의 display 값을 none으로 바꾼다)
$(&#39;#post-box&#39;).hide();</code></pre>
<hr>
<h3 id="👉-css의-값-가져와보기">👉 css의 값 가져와보기</h3>
<pre><code class="language-js">$(&#39;#post-box&#39;).hide();
$(&#39;#post-box&#39;).css(&#39;display&#39;); // 예 display 속성 값 가져오기

$(&#39;#post-box&#39;).show();
$(&#39;#post-box&#39;).css(&#39;display&#39;);</code></pre>
<hr>
<h3 id="👉-태그-내-텍스트-입력하기">👉 태그 내 텍스트 입력하기</h3>
<blockquote>
<p> <strong>텍스트 바꾸기</strong> $(&#39;#id값&#39;).text(&#39;텍스트&#39;)</p>
</blockquote>
<pre><code class="language-js">// input box의 경우
$(&#39;#post-url&#39;).val(&#39;여기에 텍스트를 입력하면!&#39;);

//다른 것들 - 예) 버튼의 텍스트 바꾸기
// 가리키고 싶은 버튼에 id 값을 준다음
&lt;button id=&quot;btn-posting-box&quot; type=&quot;button&quot; class=&quot;btn btn-primary&quot;&gt;포스팅 박스 열기&lt;/button&gt;

$(&#39;#btn-posting-box&#39;).text(&#39;포스팅 박스 닫기&#39;);</code></pre>
<hr>
<h3 id="👉-태그-내-html-입력하기">👉 태그 내 html 입력하기</h3>
<blockquote>
<p><strong>이어 붙이기</strong> $(&#39;#id값&#39;).append(temp_html) 
<span style="color:rgb(32, 201, 151);"><strong>back tick(`)</strong></span> -  html처럼 생긴 문자열을 html로 변환.</p>
</blockquote>
<p><code>&lt;div&gt; ~ &lt;/div&gt; 내에,
동적으로 html을 넣고 싶을 땐? (예를 들어, 포스팅되면 → 카드 추가)</code></p>
<pre><code class="language-js">// 사이에 html을 넣고 싶은 태그에 id값을 준 다음
&lt;div id=&quot;cards-box&quot; class=&quot;card-columns&quot;&gt;
    &lt;div class=&quot;card&quot;&gt;
      &lt;img class=&quot;card-img-top&quot; src=&quot;https://www.fodors.com/wp-content/uploads/2018/10/4_UltimateRome_PiazzaNavona-975x650.jpg&quot; alt=&quot;Card image cap&quot;&gt;
      &lt;div class=&quot;card-body&quot;&gt;
        &lt;a href=&quot;https://naver.com/&quot; class=&quot;card-title&quot;&gt;여기 기사 제목이 들어가죠&lt;/a&gt;
        &lt;p class=&quot;card-text&quot;&gt;여기에 기사 내용이 들어가겠죠&lt;/p&gt;
        &lt;p class=&quot;card-text comment&quot;&gt;여기엔 코멘트가 들어갑니다&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

// 버튼 넣어보기
let temp_html = &#39;&lt;button&gt;나는 추가될 버튼이다!&lt;/button&gt;&#39;;
$(&#39;#cards-box&#39;).append(temp_html);

// 버튼 말고, 카드 넣어보기
// 주의: 홑따옴표(&#39;)가 아닌 backtick(`)으로 감싸야 합니다.
// backtick을 사용하면 문자 중간에 Javascript 변수 삽입 가능.
let img_url = &#39;https://www.eurail.com/content/dam/images/eurail/Italy%20OCP%20Promo%20Block.adaptive.767.1535627244182.jpg&#39;;
let link_url = &#39;https://naver.com/&#39;;
let title = &#39;여기 기사 제목이 들어가죠&#39;;
let desc = &#39;기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...&#39;;
let comment = &#39;여기에 코멘트가 들어갑니다.&#39;;

let temp_html = `&lt;div class=&quot;card&quot;&gt;
                    &lt;img class=&quot;card-img-top&quot;
                        src=&quot;${img_url}&quot;
                        alt=&quot;Card image cap&quot;&gt;
                    &lt;div class=&quot;card-body&quot;&gt;
                        &lt;a href=&quot;${link_url}&quot; class=&quot;card-title&quot;&gt;${title}&lt;/a&gt;
                        &lt;p class=&quot;card-text&quot;&gt;${desc}&lt;/p&gt;
                        &lt;p class=&quot;card-text comment&quot;&gt;${comment}&lt;/p&gt;
                    &lt;/div&gt;
                &lt;/div&gt;`;
$(&#39;#cards-box&#39;).append(temp_html);</code></pre>
<hr>
<ul>
<li><h4 id="jquery-적용하기나홀로메모장">JQuery 적용하기(나홀로메모장)</h4>
<pre><code class="language-js"></code></pre>
</li>
</ul>
<p>// 포스팅박스 열기 버튼에 id 값 주기, onclick 속성(attribute)을 추가.
<button id="btn-posting-box" onclick="openclose()" class="btn btn-primary btn-lg">포스팅박스 열기</a></p>
<script>
function openclose() { 
  let status = $('#post-box').css('display'); // post-box'가 보이는 상태(block)인지 아닌지(none)
  // console.log(status); 찍어보기
  if (status == 'block'){ // id 값 post-box의 display 값이 block 이면
    $('#post-box').hide(); // post-box를 가리고
    $('#btn-posting-box').text('포스팅박스 열기'); // 가렸으니까 이제 열기로 바꿔두기
  } else {
    $('#post-box').show(); // 아니면 post-box를 펴라
    $('#btn-posting-box').text('포스팅박스 닫기'); // 폈으니까 이제 닫기로 바꿔두기
  }
}
</script>

<p>// 포스팅박스에 id값 주기</p>
<div class="form-post" id="post-box">

<p>// posting-box 시작부터 감춰두기</p>
<style>
  .posting-box {
    display:none;
}
</style>
<pre><code>
***
## 📝서버→클라이언트: &quot;JSON&quot; 이해
&gt; &lt;span style=&quot;color:rgb(32, 201, 151);&quot;&gt;**JSON**&lt;/span&gt;은 Key:Value로 이루어져 있고, 자료형 Dictionary와 아주 유사.

***
## 📝클라이언트→서버: &quot;GET 요청&quot; 이해
&gt; 👉**API는 은행 창구와 같은 것!**
같은 예금 창구에서도 개인 고객이냐 기업 고객이냐에 따라
가져와야 하는 것 / 처리해주는 것이 다른 것처럼,&lt;br&gt;
클라이언트가 요청 할 때에도, &quot;타입&quot;이라는 것이 존재합니다. &lt;br&gt;
* GET        →      통상적으로! **데이터 조회(Read)**를 요청할 때
                           예) 영화 목록 조회&lt;br&gt;
* POST     →      통상적으로! **데이터 생성(Create), 변경(Update), 삭제(Delete)** 요청 할 때
                           예) 회원가입, 회원탈퇴, 비밀번호 수정

#### GET 방식으로 데이터를 전달하는 방법
?  : 여기서부터 전달할 데이터가 작성된다는 의미입니다.
&amp; : 전달할 데이터가 더 있다는 뜻입니다.
`예시) google.com/search?q=아이폰&amp;sourceid=chrome&amp;ie=UTF-8`

         위 주소는 google.com의 search 창구에 다음 정보를 전달합니다!
         q=아이폰                        (검색어)
         sourceid=chrome        (브라우저 정보)
         ie=UTF-8                      (인코딩 정보)
***
## 📝Ajax 
&gt; Ajax는 jQuery를 임포트한 페이지에서만 동작 가능.

#### Ajax 기본 골격
```js
$.ajax({
  type: &quot;GET&quot;, // GET 방식으로 요청한다.
  url: &quot;여기에URL을입력&quot;, // 요청할 url
  data: {}, // 요청하면서 함께 줄 데이터 (GET 요청시엔 비워두세요)
  success: function(response){ // 서버에서 준 결과를 response라는 변수에 담음
    // success: 성공하면, response 값에 서버의 결과 값을 담아서 함수를 실행

    console.log(response) // 서버에서 준 결과를 이용해서 나머지 코드를 작성
  }
})</code></pre><h4 id="data-요청하면서-함께-줄-데이터">data: 요청하면서 함께 줄 데이터</h4>
<ul>
<li><p>GET 요청은, url뒤에 아래와 같이 붙여서 데이터를 가져갑니다.
<code>http://naver.com?param=value&amp;param2=value2</code></p>
</li>
<li><p>POST 요청은, data : {} 에 넣어서 데이터를 가져갑니다.
<code>data: { param: &#39;value&#39;, param2: &#39;value2&#39; },</code></p>
</li>
</ul>
<h4 id="ajax-연습">Ajax 연습</h4>
<pre><code class="language-js">// 모든 구의 미세먼지 값을 찍어보기
$.ajax({
  type: &quot;GET&quot;,
  url: &quot;http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99&quot;,
  data: {},
  success: function(response){
    let rows = [&#39;RealtimeCityAir&#39;][&#39;row&#39;] // 데이터 꺼내는 부분!
    for (let i = 0;, i &lt; rows.length; i++){ 
        let gu_name = rows[i][&#39;MSRSTE_NM&#39;]
        let gu_mise = row[i][&#39;IDEX_MVL&#39;]
        if(gu_mise &lt; 70){
          console.log(gu_name,gu_mise)
        }
    }
  }
})</code></pre>
<hr>
<hr>
<p aline="center"><img src = "https://images.velog.io/images/designer_rami/post/76cd93a4-791a-43b5-bc77-a6c0e31ebacd/1-6.png" style = width:100px;></p>

<h2 id="👩💻-2주차-마무리하며">👩‍💻 2주차 마무리하며.</h2>
<p>🤍 차근차근 consol에 찍어보고, 나아가는 훈련! (코드쭈-욱 짜놓고 에러찾기 X)
🤍 코딩은 외워서 하는 것이 아니다, 가져다 쓰는 것!
🤍 { } / &quot; &quot; / . → 맥락과 사용법을 익혀라!
🤍 헷갈리지 않게 &quot;정렬(ctrl+alt+L)&quot; 잘하기!
🤍 태그 짝 잘 맞는지 확인하기!
🤍 완벽하게 하려고 하지 않기
🤍 익숙할 정도로 반복/연습하기
🤍 구글링을 습관화
🤍 에러를 무서워하지 말고, 최대한 읽어보고 익숙해지려고 노력하기!</p>
<p>💜 게더(스파랜드)에서 스온스 진행 중
💜 11일 챌린지 도전 중
💜 개발일지 작성 중 (+복습)
💜 틈틈히 개별 프로젝트 아이디어</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[스파르타] #웹개발 종합반 #1주차 개발일지👊🏻]]></title>
            <link>https://velog.io/@designer_rami/%EC%8A%A4%ED%8C%8C%EB%A5%B4%ED%83%80-%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%A2%85%ED%95%A9%EB%B0%98-1%EC%A3%BC%EC%B0%A8-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@designer_rami/%EC%8A%A4%ED%8C%8C%EB%A5%B4%ED%83%80-%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%A2%85%ED%95%A9%EB%B0%98-1%EC%A3%BC%EC%B0%A8-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Wed, 22 Dec 2021 18:51:13 GMT</pubDate>
            <description><![CDATA[<p>🌼 <a href="https://www.notion.so/1-59315708468149fc9cb2877ca0784f65"><strong>Notion 강의자료</strong></a></p>
<h2 id="🚩수업-목표">🚩수업 목표</h2>
<ol>
<li>서버와 클라이언트의 역할에 대해 이해한다.</li>
<li>HTML, CSS의 기초 지식을 이해한다. 부트스트랩을 가져다 쓸 줄 안다!</li>
<li>Javascript 기초 문법을 익힌다.</li>
</ol>
<hr>
<h2 id="📝웹의-동작-개념">📝웹의 동작 개념</h2>
<blockquote>
<p>브라우저가 서버에 ① 요청을 보내고 서버로부터 ② 결과물을 받아서 그려주는 것.</p>
</blockquote>
<h4 id="요청을-보내는-곳은">요청을 보내는 곳은?</h4>
<p><code>서버가 만들어 놓은 <span style="color:rgb(32, 201, 151);">"API"</span> 라는 창구에 미리 정해진 약속대로 요청을 보내는 것.</code><br>
<code>예)https://naver.com/</code><br><code>→ 이것은 "naver.com"이라는 이름의 서버에 있는, "/" 창구에 요청을 보낸 것!</code></p>

<ul>
<li><p>HTML(파일)을 받는 경우</p>
<!--우리가 보는 웹페이지는 서버에서 미리 준비해두었던 것을 받아서 그려주는 것.-->
<p aline="center"><img src = "https://images.velog.io/images/designer_rami/post/cef1804e-5291-41e2-af6e-1a7d3ddb34c1/image.png" width="700px"></p>
<!--`ex) 네이버 웹페이지를 해킹
  `- 1) 내가 보는 웹페이지만 내 마음대로 바꿀 수 있었다.`
  `- 2) 내가 보고 있는 웹페이지는 인터넷과 관련이 없다.`
  `- 3) 새로고침을 하면 원상복귀된다 → 서버로부터 뭔가 새로 받아서 그려준다`-->
</li>
<li><p><span style="color:rgb(32, 201, 151);"><strong>JSON</strong></span> (데이터)을 받는 경우
예) 티켓팅 때 새로고침하면 예매된 좌석과 예매되지 않은 좌석 색 변경</p>
<p aline="center"><img src = "https://images.velog.io/images/designer_rami/post/1afb2d60-247c-40c7-b2a9-bcd4df48428d/image.png" width="700px"></p>

</li>
</ul>
<hr>
<h2 id="📝html-기초">📝HTML 기초</h2>
<blockquote>
<p><strong>HTML</strong>은 뼈대, 구역과 텍스트를 나타내는 코드, <strong>CSS</strong>는 꾸미기, 잡은 구역을 꾸며주는 것</p>
</blockquote>
<p>HTML은 크게 <code>head</code>와 <code>body</code>로 구성.
<code>head</code>안에는 페이지의 속성 정보를, <code>body</code> 안에는 페이지의 내용을 담습니다.</p>
<p><code>head</code> 안에 들어가는 대표적은 요소들 : <code>meta</code> <code>script</code> <code>link</code> <code>title</code> 등 body를 제외한 모든 것.</p>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;

&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;스파르타코딩클럽 | HTML 기초&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;!-- 구역을 나누는 태그들 --&gt;
    &lt;div&gt;나는 구역을 나누죠&lt;/div&gt; &lt;!--괄호느낌, 묶어서 이동 --&gt;
    &lt;p&gt;나는 문단이에요&lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt; bullet point!1 &lt;/li&gt;
        &lt;li&gt; bullet point!2 &lt;/li&gt;
    &lt;/ul&gt;

    &lt;!-- 구역 내 콘텐츠 태그들 --&gt;
    &lt;h1&gt;h1은 제목을 나타내는 태그입니다. 페이지마다 하나씩 꼭 써주는 게 좋아요. 그래야 구글 검색이 잘 되거든요.&lt;/h1&gt;
    &lt;h2&gt;h2는 소제목입니다.&lt;/h2&gt;
    &lt;h3&gt;h3~h6도 각자의 역할이 있죠. 비중은 작지만..&lt;/h3&gt;
    &lt;hr&gt;
    span 태그입니다: 특정 &lt;span style=&quot;color:red&quot;&gt;글자&lt;/span&gt;를 꾸밀 때 써요 &lt;!-- 부분적용 --&gt;
    &lt;hr&gt;
    a 태그입니다: &lt;a href=&quot;http://naver.com/&quot;&gt; 하이퍼링크 &lt;/a&gt;
    &lt;hr&gt;
    img 태그입니다: &lt;img src=&quot;https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png&quot; /&gt;
    &lt;hr&gt;
    input 태그입니다: &lt;input type=&quot;text&quot; /&gt;
    &lt;hr&gt;
    button 태그입니다: &lt;button&gt; 버튼입니다&lt;/button&gt;
    &lt;hr&gt;
    textarea 태그입니다: &lt;textarea&gt;나는 무엇일까요?&lt;/textarea&gt;
&lt;/body&gt;

&lt;/html&gt;</code></pre><br>

<p>✋ 잠깐! <strong>정렬</strong>의 중요성
코드의 정렬이 제대로 되어있지 않으면, 코드의 생김새를 파악할 수 없어 오류를 해결하기가 무척 어려워집니다. Pycharm에서 <span style="color:rgb(32, 201, 151);"><strong>ctrl+alt+L</strong></span> 로 자동정렬 기능을 사용해보세요. </p>
<hr>
<h2 id="📝css-기초">📝CSS 기초</h2>
<blockquote>
<p><strong>HTML 부모-자식 구조 살펴보기</strong>
html 태그는, &quot;누가 누구 안에 있느냐&quot;를 이해하는 것이 가장 중요. 나를 감싸고 있는 태그가 바뀌면, 그 안의 내용물도 모두 영향을 받음.</p>
</blockquote>
<p aline="center"><img src = "https://images.velog.io/images/designer_rami/post/352ce5d3-ea9e-4d8d-acbe-dc02a66f25a5/image.png" width="700px"></p>
<!-- ex)
`- 빨간색 div 안에, 초록색/파란색 div가 들어있습니다. 아래와 같은 상황에서 빨간색 div를 가운데로 옮기면, 내용물인 초록/파란 div도 모두 함께 이동하겠죠!`
`- 즉, 박스를 옮기면 안의 내용물도 함께 옮겨지는 것과 같은 원리입니다.`
`- 같은 원리로, 초록 div의 글씨색을 바꾸면, 나는버튼1의 글씨색도 바뀐답니다!`-->

<p><code>head</code> ~ <code>/head</code> 안에 <code>style</code> ~ <code>/style</code> 로 공간을 만들어 작성.
<code>mytitle</code>라는 클래스를 가리킬 때, <span style="color:rgb(32, 201, 151);"><strong>.mytitle { ... }</strong></span> 라고 써줘야 하는 것을 꼭! 기억</p>
<p aline="center"><img src = "https://images.velog.io/images/designer_rami/post/f2948db0-507a-4d11-9a6e-a9ed92e9c9c5/image.png" width="800px"></p>

<h4 id="만들어진-화면을-가운데로-가져오려면">만들어진 화면을 가운데로 가져오려면?</h4>
<p><code>width</code>를 주고, <code>margin: auto</code>를 사용, 그래도 안되면? <span style="color:rgb(32, 201, 151);"><strong>display:block</strong></span> (글 속성→ BOX 속성 변경)을 추가!</p>
<hr>
<h2 id="📝폰트-주석-파일분리">📝폰트, 주석, 파일분리</h2>
<h3 id="구글-웹폰트-입히기">구글 웹폰트 입히기</h3>
<p><a href="https://fonts.google.com/?subset=korean"> 구글웹폰트</a> <code>https://fonts.google.com/?subset=korean</code></p>

<pre><code>&lt;!-- HTML &lt;heda&gt; ~ &lt;head&gt; 사이에 이 부분을 추가하고 --&gt;
&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Jua&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;</code></pre><pre><code class="language-css">/* CSS &lt;style&gt; ~ &lt;/style&gt; 사이에 이 부분을 추가하면 완성! */
* {
    font-family: &#39;Jua&#39;, sans-serif;
}</code></pre>
<h3 id="주석은-언제-사용하나요">주석은 언제 사용하나요?</h3>
<p>1) 필요없어진 코드를 삭제하는 대신 임시로 작동하지 못하게 하고 싶을 때
2) 코드에 대한 간단한 설명을 붙여두고 싶을 때 사용합니다.</p>
<p>주석을 붙여놓으면, 브라우저/컴퓨터가 읽지 않아요.
즉, 개발자 본인 또는 동료를 위해 붙여두는 것! → 단축키 <span style="color:rgb(32, 201, 151);"><strong>ctrl + / (슬래시)</strong></span></p>
<h3 id="css-파일-분리도-가능">CSS 파일 분리도 가능</h3>
<p><code>style</code> ~ <code>/style</code> 부분이 너무 길어지면 아래와 같이 파일을 분리해둘 수 있다.</code></p></p>
<pre><code>&lt;!-- style.css 파일을 같은 폴더에 만들고, head 태그에서 불러오기 --&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href = &quot;(css파일이름).css&quot;&gt;</code></pre><hr>
<h2 id="📝부트스트랩">📝부트스트랩</h2>
<p><a href="https://getbootstrap.com/docs/4.0/components/alerts/"> 부트스트랩 컴포넌트(4.0)</a> <code>https://fonts.google.com/?subset=korean</code></p>

<blockquote>
<p>남이 미리 작성한 CSS를 내 HTML 파일에 적용한다는 점에서, bootstrap 적용은 CSS 파일 분리와 원리가 동일.
다만, CSS의 파일이 인터넷 어딘가에 있다는 점이 다를 뿐.</p>
</blockquote>
<hr>
<h2 id="📝javascript-기초">📝Javascript 기초</h2>
<blockquote>
<p>프로그래밍 언어 중 하나로, 브라우저가 유일하게 알아들을 수 있는 언어.
모든 브라우저는 기본적으로 Javascript를 알아듣게 설계되어있고, 모든 웹서버는 HTML+CSS+Javascript를 주게 되어있다.</p>
</blockquote>
<p><code>head</code> ~ <code>/head</code> 안에 <code>script</code> ~ <code>/script</code> 로 공간을 만들어 작성.
<code>script</code> ~ <code>/script</code> 내에 자바스크립트를 작성.</p>
<ul>
<li><p>HTML 연결. 버튼을 클릭하면 경고창 뜨게하기</p>
<pre><code class="language-html">  &lt;/style&gt;

  &lt;script&gt;
      function hey(){
          alert(&#39;안녕!&#39;)
      }
  &lt;/script&gt;
&lt;/head&gt;</code></pre>
</li>
<li><p>버튼에 함수 연결하기(버튼을 누르면 함수가 불림)</p>
<pre><code>&lt;button onclick=&quot;hey()&quot; type=&quot;button&quot; class=&quot;btn btn-primary&quot;&gt;기사저장&lt;/button&gt;</code></pre></li>
</ul>
<h4 id="크롬-개발자-도구-콘솔-창f12">크롬 개발자 도구 콘솔 창(F12)</h4>
<p>띄워놓은 페이지에서 빠르게 자바스크립트를 테스트 할 수 있는 개발자들을 위한 도구</p>
<h4 id="consolelog변수">console.log(변수)</h4>
<p><code>개발자가 결과값을 보기 편하도록 콘솔 창에 괄호 안의 값을 출력해줌.</code></p>
<pre><code class="language-js">console.log(변수) 는, 콘솔 창에 괄호 안의 값을 출력해줍니다.
개발자가 결과값을 보기 편하도록!

console.log(변수1,변수2) 로 여러 변수를 한번에 출력할 수도 있어요.
아래를 복사해서 붙여넣어보세요.

console.log(&quot;Hello World!&quot;);</code></pre>
<hr>
<h3 id="👉-변수">👉 <strong>변수</strong></h3>
<p><code>let으로 변수를 선언. 변수는 <strong>값을 저장하는 박스</strong>, 한번 선언했으면 다시 선언하지 않고 값을 넣는다.</code> </p>
<pre><code class="language-js">/* 사칙연산, 문자열 더하기가 기본적으로 가능 */

let a = 1 // a라는 박스를 꺼내서 그 안에 1을 담았다!
let b = 2 // 오른쪽에 있는 것을 왼쪽에 넣는 것(2를 b라는 변수에 넣는다)

a+b
3
a/b
0.5

let first_name = &#39;Bob&#39; // &#39;문자열&#39; 작은따옴표
let last_name = &quot;Lee&quot;

first_name+last_name
&#39;BebLee&#39;
first_name+&#39; &#39;+last_name
&#39;Bob Lee&#39;
first+a // 문자+숫자를 더하면, 숫자를 문자로 바꾼 뒤 수행
&#39;Bob1&#39;

let first_name = &#39;Bob&#39; // snake case
let firstName = &#39;Bob&#39; // camel case

/* 변수명은 쉽게 알아볼 수 있게 쓰는게 중요(특수문자 또는 띄워쓰기 불가능) */</code></pre>
<hr>
<h3 id="👉-자료형list--dict">👉 <strong>자료형(list &amp; dict)</strong></h3>
<p><code>순서를 표시하고, 정보를 묶을 수 있다(상호 호환 가능)</code></p>
<ul>
<li>리스트: <strong>순서</strong>를 지켜서 가지고 있는 형태 <pre><code class="language-js">let a_list = [&#39;수박&#39;,&#39;참외&#39;,&#39;배&#39;] // 리스트를 선언. 대괄호 사용
</code></pre>
</li>
</ul>
<p>// 또는,</p>
<p>let b_list = [1,2,&#39;hey&#39;,3] // 로 선언 가능</p>
<p>a_list[0] // 0부터 시작
&#39;수박&#39;
b_list[2]
&#39;hey&#39;</p>
<p>a_list.push(&#39;감&#39;) // 리스트에 요소 넣기, 소괄호 사용
b_list
[&#39;수박&#39;,&#39;참외&#39;,&#39;배&#39;,&#39;감&#39;]</p>
<p>b_list.length // 리스트의 길이 구하기
4</p>
<pre><code>
- 딕셔너리: 키(key)-밸류(value) 값의 **묶음** 
```js
let a_dict = {&#39;name&#39;:&#39;Bob&#39;,&#39;age&#39;:27} // 딕셔너리 선언. 중괄호 사용

a_dict[&#39;name&#39;]
&#39;Bob&#39;
a_dict[&#39;age&#39;]
21

a_dict[&#39;height&#39;] = 180 // 딕셔너리에 키:밸류 추가
a_dict
{name: &quot;Bob&quot;, age: 21, height: 180}

a_dict[&#39;fruits&#39;] = a_list
(4)[&#39;수박&#39;,&#39;참외&#39;,&#39;배&#39;,&#39;감&#39;]
a_dict
{name: &quot;Bob&quot;, age: 21, height: 180, fruits:Array(4) }

a_dict[&#39;fruits&#39;][2] //리스트와 딕셔너리의 조합
&#39;배&#39;</code></pre><ul>
<li>리스트와 딕셔너리 조합<pre><code class="language-js">names = [{&#39;name&#39;:&#39;bob&#39;,&#39;age&#39;:20},{&#39;name&#39;:&#39;carry&#39;,&#39;age&#39;:38}]
</code></pre>
</li>
</ul>
<p>// names[0][&#39;name&#39;]의 값은? &#39;bob&#39;
// names[1][&#39;name&#39;]의 값은? &#39;carry&#39;</p>
<p>new_name = {&#39;name&#39;:&#39;john&#39;,&#39;age&#39;:7}
names.push(new_name)</p>
<p>// names의 값은? [{&#39;name&#39;:&#39;bob&#39;,&#39;age&#39;:20},{&#39;name&#39;:&#39;carry&#39;,&#39;age&#39;:38},{&#39;name&#39;:&#39;john&#39;,&#39;age&#39;:7}]
// names[2][&#39;name&#39;]의 값은? &#39;john&#39;</p>
<pre><code>***
### 👉 **함수**
&lt;code&gt;부르면 정해진 **동작**을 한다&lt;/code&gt;
```js
function sum(num1, num2) { // function 함수이름(필요한 변수들)
    return num1+num2 // 내릴 명령들을 순차적으로 작성
}

let result = sum(2,3)
result // 끝내고 나를 변신시켜줘!
5</code></pre><ul>
<li>기본함수<pre><code class="language-js">let a = 20
let b = 7
</code></pre>
</li>
</ul>
<p>a % b // a를 b로 나눈 나머지 값
6
a &lt; 50 // a는 50보다 작다
true
a == 20 // a는 20과 같다
true
a != 20 // a는 20과 같지 않다
false</p>
<p>let myname = &#39;spartacodingclub&#39;</p>
<pre><code>- 모든 알파벳을 대문자로 바꾸고 싶은 경우
```js
myname.toUpperCase()
&#39;SPARTACODIGCLUB&#39;</code></pre><ul>
<li>특정 문자로 문자열을 나누고 싶은 경우<pre><code class="language-js">let myemail = &#39;sparta@gmail.com&#39;
</code></pre>
</li>
</ul>
<p>mmyemail.split(&#39;@&#39;)
(2) [&#39;sparta&#39;,&#39;gmail.com&#39;]</p>
<p>myemail.split(&#39;@&#39;)[1]
&#39;gmail.com&#39;</p>
<p>myemail.split(&#39;@&#39;)[1].split(&#39;.&#39;)
(2)[&#39;gmail&#39;,&#39;com&#39;]</p>
<p>myemail.split(&#39;@&#39;)[1].split(&#39;.&#39;)[0] // 어떤 도메인의 이메일인지 판별
&#39;gmail&#39;</p>
<pre><code>***
### 👉 **조건문**
&lt;code&gt;20 보다 작으면 작다고, 크면 크다고 알려주는 함수&lt;/code&gt;
```js
if(age &gt; 20){
  console.log(&#39;성인입니다&#39;)
} else {
  console.log(&#39;청소년입니다&#39;)
}
// &#39;성입입니다&#39;

let sex = &#39;남성&#39;

if(age &gt; 20 &amp;&amp; sex == &#39;남성&#39;){ // &amp;&amp; AND
  console.log(&#39;성인 남성입니다&#39;)
} else {
  console.log(&#39;청소년입니다&#39;)    
}

if(age &gt; 20 || sex == &#39;남성&#39;){ // || OR
  console.log(&#39;성인 남성입니다&#39;)
} else {
  console.log(&#39;청소년입니다&#39;)    
}

if (age &gt; 20) {
  console.log(&#39;성인입니다&#39;)
} else if (age &gt; 10) {
  console.log(&#39;청소년입니다&#39;)
} else {
  console.log(&#39;아동입니다&#39;) // if, else if, else if, else if else</code></pre><hr>
<h3 id="👉-반복문">👉 <strong>반복문</strong></h3>
<pre><code class="language-js">console.log(0)
console.log(1)
console.log(2)
console.log(3)
console.log(4)
console.log(5)
...
console.log(99) // 이렇게 쓰기엔 무리가 있겠죠? 그래서, 반복문이라는 것이 존재합니다!</code></pre>
<pre><code class="language-js">/* 반복문을 이용하면 단 세줄로, 출력*/

for (let i = 0; i &lt; 100; i++) { //오타 조심!
    console.log(i);
}</code></pre>
<pre><code class="language-js">for (1. 시작조건; 2. 반복조건; 3. 더하기) {
    4. 매번실행
}

1 -&gt; 2체크하고 -&gt; (괜찮으면) -&gt; 4 -&gt; 3
-&gt; 2체크하고 -&gt; (괜찮으면) -&gt; 4 -&gt; 3
-&gt; 2체크하고 -&gt; (괜찮으면) -&gt; 4 -&gt; 3
-&gt; 2체크하고 -&gt; (괜찮으면) -&gt; 4 -&gt; 3

// 와 같은 순서로 실행됩니다.
// i가 증가하다가 반복조건에 맞지 않으면, 반복을 종료하고 빠져나옵니다.</code></pre>
<pre><code class="language-js">let people = [&#39;철수&#39;,&#39;영희&#39;,&#39;민수&#39;,&#39;형준&#39;,&#39;기남&#39;,&#39;동희&#39;]

// 이렇게 하면 리스트의 모든 원소를 한번에 출력할 수 있겠죠?
// i가 1씩 증가하면서, people의 원소를 차례대로 불러올 수 있게 됩니다.
for (let i = 0 ; i &lt; people.length ; i++) {
    console.log(people[i])
}</code></pre>
<hr>
<hr>
<p aline="center"><img src = "https://images.velog.io/images/designer_rami/post/76cd93a4-791a-43b5-bc77-a6c0e31ebacd/1-6.png" style = width:100px;></p>

<h2 id="👩💻-1주차-마무리하며">👩‍💻 1주차 마무리하며.</h2>
<p>🤍 코딩은 외워서 하는 것이 아니다, 가져다 쓰는 것!
🤍 [ ] / { } / &quot; &quot; / . → 맥락과 사용법을 익혀라!
🤍 헷갈리지 않게 &quot;정렬(ctrl+alt+L)&quot; 잘하기!
🤍 태그 짝 잘 맞는지 확인하기!
🤍 완벽하게 하려고 하지 않기
🤍 익숙할 정도로 반복/연습하기
🤍 구글링을 습관화
🤍 에러를 무서워하지 말고, 최대한 읽어보고 익숙해지려고 노력하기!</p>
<p>💜 게더(스파랜드)에서 스온스 진행 중
💜 11일 챌린지 도전 중
💜 개발일지 작성 중 (+복습)
💜 틈틈히 개별 프로젝트 아이디어</p>
]]></description>
        </item>
    </channel>
</rss>