<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>waterlily_0101.log</title>
        <link>https://velog.io/</link>
        <description>:)</description>
        <lastBuildDate>Thu, 28 Jul 2022 07:31:17 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>waterlily_0101.log</title>
            <url>https://images.velog.io/images/waterlily_0101/profile/5dbe30a2-1598-4f6f-a38a-3640d567c98b/프랑스.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. waterlily_0101.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/waterlily_0101" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[개인정보처리방침]]]></title>
            <link>https://velog.io/@waterlily_0101/%EA%B0%9C%EC%9D%B8%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EB%B0%A9%EC%B9%A8</link>
            <guid>https://velog.io/@waterlily_0101/%EA%B0%9C%EC%9D%B8%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EB%B0%A9%EC%B9%A8</guid>
            <pubDate>Thu, 28 Jul 2022 07:31:17 GMT</pubDate>
            <description><![CDATA[<p>&lt; Hi &gt;(&#39;<a href="https://velog.io/@waterlily_0101&#39;%EC%9D%B4%ED%95%98">https://velog.io/@waterlily_0101&#39;이하</a> &#39;Hi&#39;)은(는) 「개인정보 보호법」 제30조에 따라 정보주체의 개인정보를 보호하고 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 하기 위하여 다음과 같이 개인정보 처리방침을 수립·공개합니다.</p>
<p>○ 이 개인정보처리방침은 2022년 7월 28부터 적용됩니다.</p>
<p>제1조(개인정보의 처리 목적)</p>
<p>&lt; Hi &gt;(&#39;<a href="https://velog.io/@waterlily_0101&#39;%EC%9D%B4%ED%95%98">https://velog.io/@waterlily_0101&#39;이하</a> &#39;Hi&#39;)은(는) 다음의 목적을 위하여 개인정보를 처리합니다. 처리하고 있는 개인정보는 다음의 목적 이외의 용도로는 이용되지 않으며 이용 목적이 변경되는 경우에는 「개인정보 보호법」 제18조에 따라 별도의 동의를 받는 등 필요한 조치를 이행할 예정입니다.</p>
<ol>
<li>홈페이지 회원가입 및 관리</li>
</ol>
<p>회원 가입의사 확인 목적으로 개인정보를 처리합니다.</p>
<p>제2조(개인정보의 처리 및 보유 기간)</p>
<p>① &lt; Hi &gt;은(는) 법령에 따른 개인정보 보유·이용기간 또는 정보주체로부터 개인정보를 수집 시에 동의받은 개인정보 보유·이용기간 내에서 개인정보를 처리·보유합니다.</p>
<p>② 각각의 개인정보 처리 및 보유 기간은 다음과 같습니다.</p>
<p>1.&lt;홈페이지 회원가입 및 관리&gt;
&lt;홈페이지 회원가입 및 관리&gt;와 관련한 개인정보는 수집.이용에 관한 동의일로부터&lt;지체없이 파기&gt;까지 위 이용목적을 위하여 보유.이용됩니다.
보유근거 : 서비스 이용 동의
관련법령 :
예외사유 :</p>
<p>제3조(처리하는 개인정보의 항목)</p>
<p>① &lt; Hi &gt;은(는) 다음의 개인정보 항목을 처리하고 있습니다.</p>
<p>1&lt; 홈페이지 회원가입 및 관리 &gt;
필수항목 : 이메일, 서비스 이용 기록, 접속 로그, 접속 IP 정보
선택항목 :</p>
<p>제4조(개인정보의 제3자 제공에 관한 사항)</p>
<p>① &lt; Hi &gt;은(는) 개인정보를 제1조(개인정보의 처리 목적)에서 명시한 범위 내에서만 처리하며, 정보주체의 동의, 법률의 특별한 규정 등 「개인정보 보호법」 제17조 및 제18조에 해당하는 경우에만 개인정보를 제3자에게 제공합니다.</p>
<p>② &lt; Hi &gt;은(는) 다음과 같이 개인정보를 제3자에게 제공하고 있습니다.</p>
<ol>
<li>&lt; Google Firebase &gt;
개인정보를 제공받는 자 : Google Firebase
제공받는 자의 개인정보 이용목적 : 이메일, 서비스 이용 기록, 접속 로그, 접속 IP 정보
제공받는 자의 보유.이용기간: 지체없이 파기</li>
</ol>
<p>제5조(개인정보의 파기절차 및 파기방법)</p>
<p>① &lt; Hi &gt; 은(는) 개인정보 보유기간의 경과, 처리목적 달성 등 개인정보가 불필요하게 되었을 때에는 지체없이 해당 개인정보를 파기합니다.</p>
<p>② 정보주체로부터 동의받은 개인정보 보유기간이 경과하거나 처리목적이 달성되었음에도 불구하고 다른 법령에 따라 개인정보를 계속 보존하여야 하는 경우에는, 해당 개인정보를 별도의 데이터베이스(DB)로 옮기거나 보관장소를 달리하여 보존합니다.</p>
<ol>
<li>법령 근거 :</li>
<li>보존하는 개인정보 항목 : 계좌정보, 거래날짜</li>
</ol>
<p>③ 개인정보 파기의 절차 및 방법은 다음과 같습니다.</p>
<ol>
<li><p>파기절차
&lt; Hi &gt; 은(는) 파기 사유가 발생한 개인정보를 선정하고, &lt; Hi &gt; 의 개인정보 보호책임자의 승인을 받아 개인정보를 파기합니다.</p>
</li>
<li><p>파기방법</p>
</li>
</ol>
<p>전자적 파일 형태의 정보는 기록을 재생할 수 없는 기술적 방법을 사용합니다</p>
<p>제6조(정보주체와 법정대리인의 권리·의무 및 그 행사방법에 관한 사항)</p>
<p>① 정보주체는 Hi에 대해 언제든지 개인정보 열람·정정·삭제·처리정지 요구 등의 권리를 행사할 수 있습니다.</p>
<p>② 제1항에 따른 권리 행사는Hi에 대해 「개인정보 보호법」 시행령 제41조제1항에 따라 서면, 전자우편, 모사전송(FAX) 등을 통하여 하실 수 있으며 Hi은(는) 이에 대해 지체 없이 조치하겠습니다.</p>
<p>③ 제1항에 따른 권리 행사는 정보주체의 법정대리인이나 위임을 받은 자 등 대리인을 통하여 하실 수 있습니다.이 경우 “개인정보 처리 방법에 관한 고시(제2020-7호)” 별지 제11호 서식에 따른 위임장을 제출하셔야 합니다.</p>
<p>④ 개인정보 열람 및 처리정지 요구는 「개인정보 보호법」 제35조 제4항, 제37조 제2항에 의하여 정보주체의 권리가 제한 될 수 있습니다.</p>
<p>⑤ 개인정보의 정정 및 삭제 요구는 다른 법령에서 그 개인정보가 수집 대상으로 명시되어 있는 경우에는 그 삭제를 요구할 수 없습니다.</p>
<p>⑥ Hi은(는) 정보주체 권리에 따른 열람의 요구, 정정·삭제의 요구, 처리정지의 요구 시 열람 등 요구를 한 자가 본인이거나 정당한 대리인인지를 확인합니다.</p>
<p>제7조(개인정보의 안전성 확보조치에 관한 사항)</p>
<p>&lt; Hi &gt;은(는) 개인정보의 안전성 확보를 위해 다음과 같은 조치를 취하고 있습니다.</p>
<ol>
<li>정기적인 자체 감사 실시
개인정보 취급 관련 안정성 확보를 위해 정기적(분기 1회)으로 자체 감사를 실시하고 있습니다.</li>
</ol>
<p>제8조(개인정보를 자동으로 수집하는 장치의 설치·운영 및 그 거부에 관한 사항)</p>
<p>Hi 은(는) 정보주체의 이용정보를 저장하고 수시로 불러오는 ‘쿠키(cookie)’를 사용하지 않습니다.</p>
<p>제9조 (개인정보 보호책임자에 관한 사항)</p>
<p>① Hi 은(는) 개인정보 처리에 관한 업무를 총괄해서 책임지고, 개인정보 처리와 관련한 정보주체의 불만처리 및 피해구제 등을 위하여 아래와 같이 개인정보 보호책임자를 지정하고 있습니다.</p>
<p>▶ 개인정보 보호책임자
성명 :김문선
직책 :개발자
직급 :개발자
연락처 :01020600637, <a href="mailto:msun0637@gmail.com">msun0637@gmail.com</a>,
※ 개인정보 보호 담당부서로 연결됩니다.</p>
<p>▶ 개인정보 보호 담당부서
부서명 :
담당자 :
연락처 :, ,
② 정보주체께서는 Hi 의 서비스(또는 사업)을 이용하시면서 발생한 모든 개인정보 보호 관련 문의, 불만처리, 피해구제 등에 관한 사항을 개인정보 보호책임자 및 담당부서로 문의하실 수 있습니다. Hi 은(는) 정보주체의 문의에 대해 지체 없이 답변 및 처리해드릴 것입니다.</p>
<p>제10조(개인정보의 열람청구를 접수·처리하는 부서)
정보주체는 ｢개인정보 보호법｣ 제35조에 따른 개인정보의 열람 청구를 아래의 부서에 할 수 있습니다.
&lt; Hi &gt;은(는) 정보주체의 개인정보 열람청구가 신속하게 처리되도록 노력하겠습니다.</p>
<p>▶ 개인정보 열람청구 접수·처리 부서
부서명 :
담당자 :
연락처 : , ,</p>
<p>제11조(정보주체의 권익침해에 대한 구제방법)</p>
<p>정보주체는 개인정보침해로 인한 구제를 받기 위하여 개인정보분쟁조정위원회, 한국인터넷진흥원 개인정보침해신고센터 등에 분쟁해결이나 상담 등을 신청할 수 있습니다. 이 밖에 기타 개인정보침해의 신고, 상담에 대하여는 아래의 기관에 문의하시기 바랍니다.</p>
<ol>
<li>개인정보분쟁조정위원회 : (국번없이) 1833-6972 (<a href="http://www.kopico.go.kr">www.kopico.go.kr</a>)</li>
<li>개인정보침해신고센터 : (국번없이) 118 (privacy.kisa.or.kr)</li>
<li>대검찰청 : (국번없이) 1301 (<a href="http://www.spo.go.kr">www.spo.go.kr</a>)</li>
<li>경찰청 : (국번없이) 182 (ecrm.cyber.go.kr)</li>
</ol>
<p>「개인정보보호법」제35조(개인정보의 열람), 제36조(개인정보의 정정·삭제), 제37조(개인정보의 처리정지 등)의 규정에 의한 요구에 대 하여 공공기관의 장이 행한 처분 또는 부작위로 인하여 권리 또는 이익의 침해를 받은 자는 행정심판법이 정하는 바에 따라 행정심판을 청구할 수 있습니다.</p>
<p>※ 행정심판에 대해 자세한 사항은 중앙행정심판위원회(<a href="http://www.simpan.go.kr">www.simpan.go.kr</a>) 홈페이지를 참고하시기 바랍니다.</p>
<p>제12조(개인정보 처리방침 변경)</p>
<p>① 이 개인정보처리방침은 2022년 7월 28부터 적용됩니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SpartaCodingClub] 웹서비스 개발 프로젝트 : "FaceTheNew" 개발일지(3)]]></title>
            <link>https://velog.io/@waterlily_0101/SpartaCodingClub-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B0%9C%EB%B0%9C-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-FaceTheNew-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%803</link>
            <guid>https://velog.io/@waterlily_0101/SpartaCodingClub-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B0%9C%EB%B0%9C-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-FaceTheNew-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%803</guid>
            <pubDate>Tue, 26 Oct 2021 06:22:15 GMT</pubDate>
            <description><![CDATA[<h1 id="facethenew">FaceTheNew</h1>
<h2 id="1-서버">1. 서버</h2>
<h3 id="db-쌓기-전-코드">[DB 쌓기 전 코드]</h3>
<pre><code>from flask import Flask, render_template, jsonify, request
app = Flask(__name__)

import requests
from bs4 import BeautifulSoup

from pymongo import MongoClient
client = MongoClient(&#39;localhost&#39;, 27017)
db = client.dbfacethenew


# HTML 화면 보여주기
@app.route(&#39;/&#39;)
def home():
    return render_template(&#39;mainhome.html&#39;)

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

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

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

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


# API 역할을 하는 부분
@app.route(&#39;/chooseunivname&#39;, methods=[&#39;GET&#39;])
def choose():
    univ_name = list(db.searchunivs.find({}, {&#39;_id&#39;: False, &#39;formControlContinent&#39;: False, &#39;formControlNation&#39;: False, &#39;formControlUniv&#39;: False, &#39;UnivLocation&#39;: False, &#39;UnivOfficeTelNum&#39;: False, &#39;UnivContactEmail&#39;: False, &#39;UnivWebsite&#39;: False}))
    return jsonify({&#39;choose_univ_name&#39;: univ_name})

@app.route(&#39;/searchunivinfo&#39;, methods=[&#39;GET&#39;])
def listing():
    univinfo = list(db.searchunivs.find({}, {&#39;_id&#39;: False, &#39;formControlContinent&#39;: False, &#39;formControlNation&#39;: False, &#39;formControlUniv&#39;: False}))
    return jsonify({&#39;each_univinfo&#39;: univinfo})


if __name__ == &#39;__main__&#39;:
    app.run(&#39;0.0.0.0&#39;, port=5000, debug=True)</code></pre><br>

<h2 id="2-html--파견-대학-검색-page">2. HTML : &#39;파견 대학 검색&#39; page</h2>
<h3 id="db-쌓기-전-코드-1">[DB 쌓기 전 코드]</h3>
<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 http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;
        &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
        &lt;title&gt;FaceTheNew : 파견 대학 검색&lt;/title&gt;

        &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js&quot;&gt;&lt;/script&gt;

        &lt;link rel=&quot;shortcut icon&quot;
              href=&quot;https://media.vlpt.us/images/waterlily_0101/post/b0a997db-b387-4f8f-a9c5-5042800353db/world-map.png&quot;&gt;

        &lt;meta property=&quot;og:image&quot;
              content=&quot;https://media.vlpt.us/images/waterlily_0101/post/fb89d14c-a927-46b9-94fc-bcf7b237df3e/FaceTheNew-MAIN-TITLE-%EC%9B%90%EB%B3%B8.gif&quot;&gt;
        &lt;meta property=&quot;og:title&quot; content=&quot;FaceTheNew : 파견 대학 검색&quot;&gt;
        &lt;meta property=&quot;og:description&quot; content=&quot;&quot;&gt;

        &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Noto+Sans+KR&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

        &lt;style&gt;
            * {
                font-family: &#39;Noto Sans KR&#39;, sans-serif;
            }

            .mytitle {
                margin-top: 50px;
                margin-bottom: 50px;
                text-align: center;
                cursor: pointer;
            }

            .mybtn-group {
                background-color: black;
                width: 1400px;
                height: 45px;
                margin: 25px auto 0 auto;

                border-top: 1px black solid;
                border-bottom: 1px black solid;
            }

            .mybtn-secondary {
                background-color: black;
                color: white;

                width: 200px;
                height: 45px;
                border: 1px black solid;;

                font-size: 17px;

                cursor: pointer;

                transition-duration: 0.3s;
            }

            .mybtn-secondary:hover {color:#A3A4FF}

            .mybtn-secondary:active {color:grey}

            .subtitle {
                background-color: white;
                width: 1400px;
                height: 70px;
                line-height: 70px;

                margin: 120px auto 60px auto;

                border-top: 1px lightgrey solid;
                border-bottom: 1px lightgrey solid;
            }

            .searchuniv {
                background-color: lightgrey;
                width: 1100px;
                height: 50px;
                line-height: 50px;

                border-radius: 13px;

                color: white;
                font-size: 17px;

                margin: 0 auto 60px auto;

                box-shadow: 5px 5px 5px #A3A4FF;
                transition-duration: 0.3s;
            }

            .input-group-text {
                padding:40px;
            }

            .form-control-continent {
                background-color: lightgrey;
                width: 282.3px;
                height: 50px;
                line-height: 50px;

                border-left: 1px lightgrey solid;
                border-right: 1px lightgrey solid;
                border-top: 1px lightgrey solid;
                border-bottom: 1px lightgrey solid;

                padding-left: 10px;

                color: white;
                font-size: 17px;

                cursor: pointer;
            }

            .form-control-nation {
                background-color: lightgrey;
                width: 282.3px;
                height: 50px;
                line-height: 50px;

                border-left: 1px lightgrey solid;
                border-right: 1px lightgrey solid;
                border-top: 1px lightgrey solid;
                border-bottom: 1px lightgrey solid;

                padding-left: 10px;

                color: white;
                font-size: 17px;

                cursor: pointer;
            }

            .form-control-univ {
                background-color: lightgrey;
                width: 282.3px;
                height: 50px;
                line-height: 50px;

                border-left: 1px lightgrey solid;
                border-right: 1px lightgrey solid;
                border-top: 1px lightgrey solid;
                border-bottom: 1px lightgrey solid;

                padding-left: 10px;

                color: white;
                font-size: 17px;

                cursor: pointer;
            }

            .sch_smit {
                background-color: lightgrey;
                height: 50px;
                width: 50px;
                line-height: 50px;

                border: 1px lightgrey solid;
                border-radius: 13px;

                background-image: url(&quot;https://media.vlpt.us/images/waterlily_0101/post/cd260f99-d6dc-49cf-b144-bf8f3af30a49/search.png&quot;);
                background-position: center;
                background-size: cover;

                float: right;

                cursor: pointer;
            }

            .univimage {
                background-color: white;
                width: 1400px;
                height: 500px;
                margin: 0 auto 0 auto;
            }

            table {
                width: 1400px;
                margin: 0 auto 0 auto;
            }

            td {
                padding: 0 0 20px 0;
                width: 33%;
            }

            .someinfo {
                background-color: lightgrey;
                width: 1400px;
                height: 50px;
                line-height: 50px;
                margin: 0 auto 0 auto;

                text-align: center;

                vertical-align: text-bottom;
            }

            .messagebox2 {
                width: 1400px;
                margin: 15px auto 300px auto;

                border: 1px black solid;
            }
        &lt;/style&gt;

        &lt;script type=&quot;text/javascript&quot;&gt;
            function categoryOption1(e) {
                var formControlNation_asia = [&quot;-- 국가 --&quot;, &quot;대만&quot;, &quot;레바논&quot;, &quot;말레이시아&quot;, &quot;베트남&quot;, &quot;우즈베키스탄&quot;, &quot;인도네시아&quot;, &quot;일본&quot;, &quot;중국&quot;, &quot;태국&quot;, &quot;파키스탄&quot;];
                var formControlNation_europe = [&quot;-- 국가 --&quot;, &quot;노르웨이&quot;, &quot;독일&quot;, &quot;러시아&quot;, &quot;스웨덴&quot;, &quot;스위스&quot;, &quot;스페인&quot;, &quot;영국&quot;, &quot;터키&quot;, &quot;프랑스&quot;];
                var formControlNation_northamerica = [&quot;-- 국가 --&quot;, &quot;멕시코&quot;, &quot;미국&quot;, &quot;캐나다&quot;];
                var formControlNation_southamerica = [&quot;-- 국가 --&quot;, &quot;브라질&quot;, &quot;우루과이&quot;, &quot;칠레&quot;, &quot;콜롬비아&quot;];
                var formControlNation_oceania = [&quot;-- 국가 --&quot;, &quot;호주&quot;];
                var formControlNation_africa = [&quot;-- 국가 --&quot;, &quot;모로코&quot;, &quot;이집트&quot;];
                var target = document.getElementById(&quot;formControlNation&quot;);

                if(e.value == &quot;asia&quot;) var d = formControlNation_asia;
                else if(e.value == &quot;europe&quot;) var d = formControlNation_europe;
                else if(e.value == &quot;northamerica&quot;) var d = formControlNation_northamerica;
                else if(e.value == &quot;southamerica&quot;) var d = formControlNation_southamerica;
                else if(e.value == &quot;oceania&quot;) var d = formControlNation_oceania;
                else if(e.value == &quot;africa&quot;) var d = formControlNation_africa;

                target.options.length = 0;

                for (x in d) {
                    var opt = document.createElement(&quot;option&quot;);
                    opt.value = d[x];
                    opt.innerHTML = d[x];
                    target.appendChild(opt);
                }
            }

            function categoryOption2(e) {
                var formControlUniv_대만 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_레바논 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_말레이시아 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_베트남 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_우즈베키스탄 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_인도네시아 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_일본 = [&quot;-- 대학 --&quot;, &quot;Sapporo University&quot;];
                var formControlUniv_중국 = [&quot;-- 대학 --&quot;, &quot;Jinan University&quot;];
                var formControlUniv_태국 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_파키스탄 = [&quot;-- 대학 --&quot;, &quot;&quot;];

                var formControlUniv_노르웨이 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_독일 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_러시아 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_스웨덴 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_스위스 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_스페인 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_영국 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_터키 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_프랑스 = [&quot;-- 대학 --&quot;,&quot;Neoma Business School&quot;];

                var formControlUniv_멕시코 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_미국 = [&quot;-- 대학 --&quot;, &quot;Loyola University New Orleans&quot;, &quot;University of Wisconsin-Stout&quot;];
                var formControlUniv_캐나다 = [&quot;-- 대학 --&quot;, &quot;University of Ottawa&quot;, &quot;University of Saskatchewan&quot;];

                var formControlUniv_브라질 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_우루과이 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_칠레 = [&quot;-- 대학 --&quot;, &quot;Finis Terrae University&quot;];
                var formControlUniv_콜롬비아 = [&quot;-- 대학 --&quot;, &quot;&quot;];

                var formControlUniv_호주 = [&quot;-- 대학 --&quot;, &quot;Deakin University&quot;];

                var formControlUniv_모로코 = [&quot;-- 대학 --&quot;, &quot;Groupe ISCAE&quot;];
                var formControlUniv_이집트 = [&quot;-- 대학 --&quot;, &quot;&quot;];

                var target = document.getElementById(&quot;formControlUniv&quot;);

                if(e.value == &quot;대만&quot;) var d = formControlUniv_대만;
                else if(e.value == &quot;레바논&quot;) var d = formControlUniv_레바논;
                else if(e.value == &quot;말레이시아&quot;) var d = formControlUniv_말레이시아;
                else if(e.value == &quot;베트남&quot;) var d = formControlUniv_베트남;
                else if(e.value == &quot;우즈베키스탄&quot;) var d = formControlUniv_우즈베키스탄;
                else if(e.value == &quot;인도네시아&quot;) var d = formControlUniv_인도네시아;
                else if(e.value == &quot;일본&quot;) var d = formControlUniv_일본;
                else if(e.value == &quot;중국&quot;) var d = formControlUniv_중국;
                else if(e.value == &quot;태국&quot;) var d = formControlUniv_태국;
                else if(e.value == &quot;파키스탄&quot;) var d = formControlUniv_파키스탄;

                else if(e.value == &quot;노르웨이&quot;) var d = formControlUniv_노르웨이;
                else if(e.value == &quot;독일&quot;) var d = formControlUniv_독일;
                else if(e.value == &quot;러시아&quot;) var d = formControlUniv_러시아;
                else if(e.value == &quot;스웨덴&quot;) var d = formControlUniv_스웨덴;
                else if(e.value == &quot;스위스&quot;) var d = formControlUniv_스위스;
                else if(e.value == &quot;스페인&quot;) var d = formControlUniv_스페인;
                else if(e.value == &quot;영국&quot;) var d = formControlUniv_영국;
                else if(e.value == &quot;터키&quot;) var d = formControlUniv_터키;
                else if(e.value == &quot;프랑스&quot;) var d = formControlUniv_프랑스;

                else if(e.value == &quot;멕시코&quot;) var d = formControlUniv_멕시코;
                else if(e.value == &quot;미국&quot;) var d = formControlUniv_미국;
                else if(e.value == &quot;캐나다&quot;) var d = formControlUniv_캐나다;

                else if(e.value == &quot;브라질&quot;) var d = formControlUniv_브라질;
                else if(e.value == &quot;우루과이&quot;) var d = formControlUniv_우루과이;
                else if(e.value == &quot;칠레&quot;) var d = formControlUniv_칠레;
                else if(e.value == &quot;콜롬비아&quot;) var d = formControlUniv_콜롬비아;

                else if(e.value == &quot;호주&quot;) var d = formControlUniv_호주;

                else if(e.value == &quot;모로코&quot;) var d = formControlUniv_모로코;
                else if(e.value == &quot;이집트&quot;) var d = formControlUniv_이집트;

                target.options.length = 0;

                for (x in d) {
                    var opt = document.createElement(&quot;option&quot;);
                    opt.value = d[x];
                    opt.innerHTML = d[x];
                    target.appendChild(opt);
                }
            }

            function categoryOption3() {
                var selectedValue = document.getElementById(&quot;formControlUniv&quot;).value;
                console.log(selectedValue);

                $.ajax({
                    type: &quot;GET&quot;,
                    url: &quot;/chooseunivname&quot;,
                    data: {},
                    success: function (response) {
                        let univ_name = response[&#39;choose_univ_name&#39;]
                        for (let i = 0; i &lt; univ_name.length; i++) {
                            let Name = univ_name[i][&#39;UnivName&#39;]

                            if (Name === selectedValue) {
                            console.log(Name)
                            }
                        }
                    }
                })
            }

            function searchUniv() {
                var selectedValue = document.getElementById(&quot;formControlUniv&quot;).value;
                console.log(selectedValue);

                $(&#39;#messagebox1&#39;).empty()
                $.ajax({
                    type: &quot;GET&quot;,
                    url: &quot;/searchunivinfo&quot;,
                    data: {},
                    success: function (response) {
                        let univinfo = response[&#39;each_univinfo&#39;]
                        for (let i = 0; i &lt; univinfo.length; i++) {
                            let ContactEmail = univinfo[i][&#39;UnivContactEmail&#39;]
                            let Location = univinfo[i][&#39;UnivLocation&#39;]
                            let Name = univinfo[i][&#39;UnivName&#39;]
                            let OfficeTelNum = univinfo[i][&#39;UnivOfficeTelNum&#39;]
                            let Website = univinfo[i][&#39;UnivWebsite&#39;]

                            let temp_html = ``
                            if (Name === selectedValue) {
                                temp_html = `&lt;tr&gt;
                                                &lt;td&gt;&lt;h3&gt;◦ University Name&lt;/h3&gt;&lt;span id=&quot;Name&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;${Name}&lt;/h4&gt;&lt;/span&gt;&lt;/td&gt;
                                            &lt;/tr&gt;
                                            &lt;tr&gt;
                                                &lt;td&gt;&lt;h3&gt;◦ Location&lt;/h3&gt;&lt;span id=&quot;Location&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;${Location}&lt;/h4&gt;&lt;/span&gt;&lt;/td&gt;
                                            &lt;/tr&gt;
                                            &lt;tr&gt;
                                                &lt;td&gt;&lt;h3&gt;◦ Office Telephone Number&lt;/h3&gt;&lt;span id=&quot;OfficeTelNum&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;${OfficeTelNum}&lt;/h4&gt;&lt;/span&gt;
                                                &lt;/td&gt;
                                                &lt;td&gt;&lt;h3&gt;◦ Contact Email&lt;/h3&gt;&lt;span id=&quot;ContactEmail&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;${ContactEmail}&lt;/h4&gt;&lt;/span&gt;
                                                &lt;/td&gt;
                                                &lt;td&gt;&lt;h3&gt;◦ Website&lt;/h3&gt;&lt;span id=&quot;Website&quot;&gt;&lt;h4 style=&quot;color: blue; cursor: pointer;&quot; onclick=&quot;location.href=&#39;${Website}&#39;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;${Website}&lt;/h4&gt;&lt;/span&gt;
                                                &lt;/td&gt;
                                            &lt;/tr&gt;`
                            }
                            $(&#39;#messagebox1&#39;).append(temp_html)
                        }
                    }
                })
            }
        &lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div class=&quot;mytitle&quot;&gt;
            &lt;img src=&quot;https://media.vlpt.us/images/waterlily_0101/post/02ff83ce-0474-4e0d-b886-69cf1b445588/FaceTheNew-TITLE-%EC%9B%90%EB%B3%B8-%EC%B5%9C%EC%A2%85.gif&quot;
                 style=&quot;max-width:30%; height: auto;&quot;
                 onclick=&quot;location.href=&#39;/&#39;&quot;&gt;
        &lt;/div&gt;

        &lt;div class=&quot;mybtn-group&quot;&gt;
            &lt;button class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;/aboutfacethenew&#39;&quot;&gt;FaceTheNew 소개&lt;/button&gt;
            &lt;button class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;/requireddocs&#39;&quot;&gt;교환학생 지원 서류&lt;/button&gt;
            &lt;button class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;/searchunivs&#39;&quot;&gt;파견 대학 검색&lt;/button&gt;
            &lt;button class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;/lifehack&#39;&quot;&gt;교환학생 학교생활 Tip&lt;/button&gt;
        &lt;/div&gt;

        &lt;div&gt;
            &lt;h1 class=&quot;subtitle&quot;&gt;◦ 파견 대학 검색&lt;/h1&gt;

            &lt;div class=&quot;searchuniv&quot; id=&quot;searchUniv&quot; name=&quot;searchUniv&quot;&gt;
                &lt;span class=&quot;input-group-text&quot; id=&quot;inputGroupPrepend&quot;&gt;파견 대학 검색&lt;/span&gt;
                &lt;select class=&quot;form-control-continent&quot; id=&quot;formControlContinent&quot; name=&quot;formControlContinent&quot; onchange=&quot;categoryOption1(this)&quot; aria-describedby=&quot;inputGroupPrepend1&quot; required&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;option1&quot;&gt;대륙 &lt;/option&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;asia&quot;&gt;아시아&lt;/option&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;europe&quot;&gt;유럽&lt;/option&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;northamerica&quot;&gt;북아메리카&lt;/option&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;southamerica&quot;&gt;남아메리카&lt;/option&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;oceania&quot;&gt;오세아니아&lt;/option&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;africa&quot;&gt;아프리카&lt;/option&gt;
                &lt;/select&gt;
                &lt;select class=&quot;form-control-nation&quot; id=&quot;formControlNation&quot; name=&quot;formControlNation&quot; onchange=&quot;categoryOption2(this)&quot; aria-describedby=&quot;inputGroupPrepend2&quot; required&gt;
                    &lt;option value=&quot;option2&quot;&gt;국가&lt;/option&gt;
                &lt;/select&gt;
                &lt;select class=&quot;form-control-univ&quot; id=&quot;formControlUniv&quot; name=&quot;formControlUniv&quot; onchange=&quot;categoryOption3()&quot; aria-describedby=&quot;inputGroupPrepend2&quot; required&gt;
                    &lt;option value=&quot;option3&quot;&gt;대학&lt;/option&gt;
                &lt;/select&gt;
                &lt;button id=&quot;search_btn&quot; type=&quot;submit&quot; title=&quot;검색&quot; class=&quot;sch_smit&quot; onclick=&quot;searchUniv()&quot;&gt;&lt;/button&gt;
            &lt;/div&gt;

            &lt;div id=&#39;result&#39;&gt;&lt;/div&gt;

            &lt;div class=&quot;univimage&quot; id=&quot;UnivImage&quot;&gt;
                &lt;img src=&quot;https://t4.ftcdn.net/jpg/02/87/59/67/240_F_287596718_0Y53hkbfo5wTYUg31Ogdqs93YRA1QDpG.jpg&quot;
                     alt=&quot;univimage&quot;
                     style=&quot;width: 1400px; height: 500px;&quot;&gt;
            &lt;/div&gt;

            &lt;div id=&quot;SearchUnivResult&quot; class=&quot;searchunivresult&quot;&gt;
                &lt;table id=&quot;message-box&quot;&gt;
                    &lt;tbody id=&quot;messagebox1&quot;&gt;
                    &lt;/tr&gt;
                    &lt;/tbody&gt;
                &lt;/table&gt;

                &lt;div class=&quot;someinfo&quot;&gt;
                    &lt;p&gt;학교 유형:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;사립/공립&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                        &lt;span&gt;학교 규모:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;S/M/L/XL&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                        &lt;span&gt;재적학생수:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;00명&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                        &lt;span&gt;취업률:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;00%&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                        &lt;span&gt;Exam Type:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;TOEFL, IELTS&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                        &lt;span&gt;QS World University Ranking:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;00등&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
                &lt;/div&gt;

                &lt;div class=&quot;messagebox2&quot; id=&quot;messagebox2&quot;&gt;
                    &lt;h3&gt;◦ 학교 소개&lt;/h3&gt;
                    &lt;p&gt;학교 소개입니다.&lt;/p&gt;&lt;br/&gt;

                    &lt;h3&gt;◦ 설치 학과&lt;/h3&gt;
                    &lt;p&gt;설치 학과는 00입니다.&lt;/p&gt;&lt;br/&gt;

                    &lt;h3&gt;◦ Study Duration&lt;/h3&gt;
                    &lt;p&gt;학기 기간입니다.&lt;/p&gt;&lt;br/&gt;

                    &lt;h3&gt;◦ Requirement&lt;/h3&gt;
                    &lt;h5&gt;- GPA&lt;/h5&gt;
                    &lt;p&gt;000&lt;/p&gt;
                    &lt;h5&gt;- Language Proficiency:&lt;/h5&gt;
                    &lt;p&gt;000&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre><br>

<h2 id="3-할-것">3. 할 것</h2>
<p>✅ 검색 대학 DB 쌓기
✅ messagebox 부분 한 PART로 코드 짜기</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SpartaCodingClub] 웹서비스 개발 프로젝트 : "FaceTheNew" 개발일지(2)]]></title>
            <link>https://velog.io/@waterlily_0101/SpartaCodingClub-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B0%9C%EB%B0%9C-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-FaceTheNew-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%802</link>
            <guid>https://velog.io/@waterlily_0101/SpartaCodingClub-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B0%9C%EB%B0%9C-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-FaceTheNew-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%802</guid>
            <pubDate>Sat, 23 Oct 2021 10:01:21 GMT</pubDate>
            <description><![CDATA[<h1 id="facethenew">FaceTheNew</h1>
<h2 id="1-서버">1. 서버</h2>
<h3 id="미완-코드">[미완 코드]</h3>
<pre><code>from flask import Flask, render_template, jsonify, request
app = Flask(__name__)

import requests
from bs4 import BeautifulSoup

from pymongo import MongoClient
client = MongoClient(&#39;localhost&#39;, 27017)
db = client.dbfacethenew


# HTML 화면 보여주기
@app.route(&#39;/&#39;)
def home():
    return render_template(&#39;mainhome.html&#39;)

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

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

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

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


# API 역할을 하는 부분
@app.route(&#39;/searchunivsinfo&#39;, methods=[&#39;GET&#39;])
def listing():
    univsinfo = list(db.searchunivs.find({}, {&#39;_id&#39;: False, &#39;formControlContinent&#39;: False, &#39;formControlNation&#39;: False, &#39;formControlUniv&#39;: False}))
    return jsonify({&#39;all_univsinfo&#39;: univsinfo})


if __name__ == &#39;__main__&#39;:
    app.run(&#39;0.0.0.0&#39;, port=5000, debug=True)</code></pre><br>

<h2 id="2-파견-대학-검색-page">2. &#39;파견 대학 검색&#39; page</h2>
<h3 id="미완-코드-1">[미완 코드]</h3>
<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 http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;
        &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
        &lt;title&gt;FaceTheNew : 파견 대학 검색&lt;/title&gt;

        &lt;link rel=&quot;shortcut icon&quot;
              href=&quot;https://media.vlpt.us/images/waterlily_0101/post/b0a997db-b387-4f8f-a9c5-5042800353db/world-map.png&quot;&gt;

        &lt;meta property=&quot;og:image&quot;
              content=&quot;https://media.vlpt.us/images/waterlily_0101/post/fb89d14c-a927-46b9-94fc-bcf7b237df3e/FaceTheNew-MAIN-TITLE-%EC%9B%90%EB%B3%B8.gif&quot;&gt;
        &lt;meta property=&quot;og:title&quot; content=&quot;FaceTheNew : 파견 대학 검색&quot;&gt;
        &lt;meta property=&quot;og:description&quot; content=&quot;&quot;&gt;

        &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Noto+Sans+KR&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

        &lt;style&gt;
            * {
                font-family: &#39;Noto Sans KR&#39;, sans-serif;
            }

            .mytitle {
                margin-top: 50px;
                margin-bottom: 50px;
                text-align: center;
                cursor: pointer;
            }

            .mybtn-group {
                background-color: black;
                width: 1400px;
                height: 45px;
                margin: 25px auto 0 auto;

                border-top: 1px black solid;
                border-bottom: 1px black solid;
            }

            .mybtn-secondary {
                background-color: black;
                color: white;

                width: 200px;
                height: 45px;
                border: 1px black solid;;

                font-size: 17px;

                cursor: pointer;

                transition-duration: 0.3s;
            }

            .mybtn-secondary:hover {color:#A3A4FF}

            .mybtn-secondary:active {color:grey}

            .subtitle {
                background-color: white;
                width: 1400px;
                height: 70px;
                line-height: 70px;

                margin: 120px auto 60px auto;

                border-top: 1px lightgrey solid;
                border-bottom: 1px lightgrey solid;
            }

            .searchuniv {
                background-color: lightgrey;
                width: 1100px;
                height: 50px;
                line-height: 50px;

                border-radius: 13px;

                color: white;
                font-size: 17px;

                margin: 0 auto 60px auto;

                box-shadow: 5px 5px 5px #A3A4FF;
                transition-duration: 0.3s;
            }

            .input-group-text {
                padding:40px;
            }

            .form-control-continent {
                background-color: lightgrey;
                width: 282.3px;
                height: 50px;
                line-height: 50px;

                border-left: 1px lightgrey solid;
                border-right: 1px lightgrey solid;
                border-top: 1px lightgrey solid;
                border-bottom: 1px lightgrey solid;

                padding-left: 10px;

                color: white;
                font-size: 17px;

                cursor: pointer;
            }

            .form-control-nation {
                background-color: lightgrey;
                width: 282.3px;
                height: 50px;
                line-height: 50px;

                border-left: 1px lightgrey solid;
                border-right: 1px lightgrey solid;
                border-top: 1px lightgrey solid;
                border-bottom: 1px lightgrey solid;

                padding-left: 10px;

                color: white;
                font-size: 17px;

                cursor: pointer;
            }

            .form-control-univ {
                background-color: lightgrey;
                width: 282.3px;
                height: 50px;
                line-height: 50px;

                border-left: 1px lightgrey solid;
                border-right: 1px lightgrey solid;
                border-top: 1px lightgrey solid;
                border-bottom: 1px lightgrey solid;

                padding-left: 10px;

                color: white;
                font-size: 17px;

                cursor: pointer;
            }

            .sch_smit {
                background-color: lightgrey;
                height: 50px;
                width: 50px;
                line-height: 50px;

                border: 1px lightgrey solid;
                border-radius: 13px;

                background-image: url(&quot;https://media.vlpt.us/images/waterlily_0101/post/cd260f99-d6dc-49cf-b144-bf8f3af30a49/search.png&quot;);
                background-position: center;
                background-size: cover;

                float: right;

                cursor: pointer;
            }

            .univimage {
                background-color: white;
                width: 1400px;
                height: 500px;
                margin: 0 auto 0 auto;
            }

            table {
                width: 1400px;
                margin: 0 auto 0 auto;
            }

            td {
                padding: 0 0 20px 0;
                width: 33%;
            }

            .someinfo {
                background-color: lightgrey;
                width: 1400px;
                height: 50px;
                line-height: 50px;
                margin: 0 auto 0 auto;

                text-align: center;

                vertical-align: text-bottom;
            }

            .messagebox2 {
                width: 1400px;
                margin: 15px auto 300px auto;

                border: 1px black solid;
            }
        &lt;/style&gt;

        &lt;script type=&quot;text/javascript&quot;&gt;
            function categoryOption1(e) {
                var formControlNation_asia = [&quot;-- 국가 --&quot;, &quot;대만&quot;, &quot;레바논&quot;, &quot;말레이시아&quot;, &quot;베트남&quot;, &quot;우즈베키스탄&quot;, &quot;인도네시아&quot;, &quot;일본&quot;, &quot;중국&quot;, &quot;태국&quot;, &quot;파키스탄&quot;];
                var formControlNation_europe = [&quot;-- 국가 --&quot;, &quot;노르웨이&quot;, &quot;독일&quot;, &quot;러시아&quot;, &quot;스웨덴&quot;, &quot;스위스&quot;, &quot;스페인&quot;, &quot;영국&quot;, &quot;터키&quot;, &quot;프랑스&quot;];
                var formControlNation_northamerica = [&quot;-- 국가 --&quot;, &quot;멕시코&quot;, &quot;미국&quot;, &quot;캐나다&quot;];
                var formControlNation_southamerica = [&quot;-- 국가 --&quot;, &quot;브라질&quot;, &quot;우루과이&quot;, &quot;칠레&quot;, &quot;콜롬비아&quot;];
                var formControlNation_oceania = [&quot;-- 국가 --&quot;, &quot;호주&quot;];
                var formControlNation_africa = [&quot;-- 국가 --&quot;, &quot;모로코&quot;, &quot;이집트&quot;];
                var target = document.getElementById(&quot;formControlNation&quot;);

                if(e.value == &quot;asia&quot;) var d = formControlNation_asia;
                else if(e.value == &quot;europe&quot;) var d = formControlNation_europe;
                else if(e.value == &quot;northamerica&quot;) var d = formControlNation_northamerica;
                else if(e.value == &quot;southamerica&quot;) var d = formControlNation_southamerica;
                else if(e.value == &quot;oceania&quot;) var d = formControlNation_oceania;
                else if(e.value == &quot;africa&quot;) var d = formControlNation_africa;

                target.options.length = 0;

                for (x in d) {
                    var opt = document.createElement(&quot;option&quot;);
                    opt.value = d[x];
                    opt.innerHTML = d[x];
                    target.appendChild(opt);
                }
            }

            function categoryOption2(e) {
                var formControlUniv_대만 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_레바논 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_말레이시아 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_베트남 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_우즈베키스탄 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_인도네시아 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_일본 = [&quot;-- 대학 --&quot;, &quot;Sapporo University&quot;];
                var formControlUniv_중국 = [&quot;-- 대학 --&quot;, &quot;Jinan University&quot;];
                var formControlUniv_태국 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_파키스탄 = [&quot;-- 대학 --&quot;, &quot;&quot;];

                var formControlUniv_노르웨이 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_독일 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_러시아 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_스웨덴 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_스위스 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_스페인 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_영국 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_터키 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_프랑스 = [&quot;-- 대학 --&quot;,&quot;Neoma Business School&quot;];

                var formControlUniv_멕시코 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_미국 = [&quot;-- 대학 --&quot;, &quot;Loyola University New Orleans&quot;, &quot;University of Wisconsin-Stout&quot;];
                var formControlUniv_캐나다 = [&quot;-- 대학 --&quot;, &quot;University of Ottawa&quot;, &quot;University of Saskatchewan&quot;];

                var formControlUniv_브라질 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_우루과이 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_칠레 = [&quot;-- 대학 --&quot;, &quot;Finis Terrae University&quot;];
                var formControlUniv_콜롬비아 = [&quot;-- 대학 --&quot;, &quot;&quot;];

                var formControlUniv_호주 = [&quot;-- 대학 --&quot;, &quot;Deakin University&quot;];

                var formControlUniv_모로코 = [&quot;-- 대학 --&quot;, &quot;Groupe ISCAE&quot;];
                var formControlUniv_이집트 = [&quot;-- 대학 --&quot;, &quot;&quot;];

                var target = document.getElementById(&quot;formControlUniv&quot;);

                if(e.value == &quot;대만&quot;) var d = formControlUniv_대만;
                else if(e.value == &quot;레바논&quot;) var d = formControlUniv_레바논;
                else if(e.value == &quot;말레이시아&quot;) var d = formControlUniv_말레이시아;
                else if(e.value == &quot;베트남&quot;) var d = formControlUniv_베트남;
                else if(e.value == &quot;우즈베키스탄&quot;) var d = formControlUniv_우즈베키스탄;
                else if(e.value == &quot;인도네시아&quot;) var d = formControlUniv_인도네시아;
                else if(e.value == &quot;일본&quot;) var d = formControlUniv_일본;
                else if(e.value == &quot;중국&quot;) var d = formControlUniv_중국;
                else if(e.value == &quot;태국&quot;) var d = formControlUniv_태국;
                else if(e.value == &quot;파키스탄&quot;) var d = formControlUniv_파키스탄;

                else if(e.value == &quot;노르웨이&quot;) var d = formControlUniv_노르웨이;
                else if(e.value == &quot;독일&quot;) var d = formControlUniv_독일;
                else if(e.value == &quot;러시아&quot;) var d = formControlUniv_러시아;
                else if(e.value == &quot;스웨덴&quot;) var d = formControlUniv_스웨덴;
                else if(e.value == &quot;스위스&quot;) var d = formControlUniv_스위스;
                else if(e.value == &quot;스페인&quot;) var d = formControlUniv_스페인;
                else if(e.value == &quot;영국&quot;) var d = formControlUniv_영국;
                else if(e.value == &quot;터키&quot;) var d = formControlUniv_터키;
                else if(e.value == &quot;프랑스&quot;) var d = formControlUniv_프랑스;

                else if(e.value == &quot;멕시코&quot;) var d = formControlUniv_멕시코;
                else if(e.value == &quot;미국&quot;) var d = formControlUniv_미국;
                else if(e.value == &quot;캐나다&quot;) var d = formControlUniv_캐나다;

                else if(e.value == &quot;브라질&quot;) var d = formControlUniv_브라질;
                else if(e.value == &quot;우루과이&quot;) var d = formControlUniv_우루과이;
                else if(e.value == &quot;칠레&quot;) var d = formControlUniv_칠레;
                else if(e.value == &quot;콜롬비아&quot;) var d = formControlUniv_콜롬비아;

                else if(e.value == &quot;호주&quot;) var d = formControlUniv_호주;

                else if(e.value == &quot;모로코&quot;) var d = formControlUniv_모로코;
                else if(e.value == &quot;이집트&quot;) var d = formControlUniv_이집트;

                target.options.length = 0;

                for (x in d) {
                    var opt = document.createElement(&quot;option&quot;);
                    opt.value = d[x];
                    opt.innerHTML = d[x];
                    target.appendChild(opt);
                }
            }

            function SearchUniv() {
                $.ajax({
                    type: &quot;GET&quot;,
                    url: &quot;/searchunivsinfo&quot;,
                    data: {},
                    success: function(response) {
                        let univsinfo = response[&#39;all_univsinfo&#39;]
                        console.log(univsinfo)
                    }
                })
            }
        &lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div class=&quot;mytitle&quot;&gt;
            &lt;img src=&quot;https://media.vlpt.us/images/waterlily_0101/post/02ff83ce-0474-4e0d-b886-69cf1b445588/FaceTheNew-TITLE-%EC%9B%90%EB%B3%B8-%EC%B5%9C%EC%A2%85.gif&quot;
                 style=&quot;max-width:30%; height: auto;&quot;
                 onclick=&quot;location.href=&#39;/&#39;&quot;&gt;
        &lt;/div&gt;

        &lt;div class=&quot;mybtn-group&quot;&gt;
            &lt;button class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;/aboutfacethenew&#39;&quot;&gt;FaceTheNew 소개&lt;/button&gt;
            &lt;button class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;/requireddocs&#39;&quot;&gt;교환학생 지원 서류&lt;/button&gt;
            &lt;button class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;/searchunivs&#39;&quot;&gt;파견 대학 검색&lt;/button&gt;
            &lt;button class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;/lifehack&#39;&quot;&gt;교환학생 학교생활 Tip&lt;/button&gt;
        &lt;/div&gt;

        &lt;div&gt;
            &lt;h1 class=&quot;subtitle&quot;&gt;◦ 파견 대학 검색&lt;/h1&gt;

            &lt;div class=&quot;searchuniv&quot; id=&quot;searchUniv&quot; name=&quot;searchUniv&quot;&gt;
                &lt;span class=&quot;input-group-text&quot; id=&quot;inputGroupPrepend&quot;&gt;파견 대학 검색&lt;/span&gt;
                &lt;select class=&quot;form-control-continent&quot; id=&quot;formControlContinent&quot; name=&quot;formControlContinent&quot; onchange=&quot;categoryOption1(this)&quot; aria-describedby=&quot;inputGroupPrepend1&quot; required&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;option1&quot;&gt;대륙 &lt;/option&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;asia&quot;&gt;아시아&lt;/option&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;europe&quot;&gt;유럽&lt;/option&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;northamerica&quot;&gt;북아메리카&lt;/option&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;southamerica&quot;&gt;남아메리카&lt;/option&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;oceania&quot;&gt;오세아니아&lt;/option&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;africa&quot;&gt;아프리카&lt;/option&gt;
                &lt;/select&gt;
                &lt;select class=&quot;form-control-nation&quot; id=&quot;formControlNation&quot; name=&quot;formControlNation&quot; onchange=&quot;categoryOption2(this)&quot; aria-describedby=&quot;inputGroupPrepend2&quot; required&gt;
                    &lt;option value=&quot;option2&quot;&gt;국가&lt;/option&gt;
                &lt;/select&gt;
                &lt;select class=&quot;form-control-univ&quot; id=&quot;formControlUniv&quot; name=&quot;formControlUniv&quot; aria-describedby=&quot;inputGroupPrepend2&quot; required&gt;
                    &lt;option value=&quot;option3&quot;&gt;대학&lt;/option&gt;
                &lt;/select&gt;
                &lt;button id=&quot;search_btn&quot; type=&quot;button&quot; title=&quot;검색&quot; class=&quot;sch_smit&quot; onclick=&quot;SearchUniv()&quot;&gt;&lt;/button&gt;
            &lt;/div&gt;

            &lt;div class=&quot;univimage&quot; id=&quot;UnivImage&quot;&gt;
                &lt;img src=&quot;https://t4.ftcdn.net/jpg/02/87/59/67/240_F_287596718_0Y53hkbfo5wTYUg31Ogdqs93YRA1QDpG.jpg&quot;
                     alt=&quot;univimage&quot;
                     style=&quot;width: 1400px; height: 500px;&quot;&gt;
            &lt;/div&gt;

            &lt;div id=&quot;SearchUnivResult&quot; class=&quot;searchunivresult&quot;&gt;
                &lt;table id=&quot;message-box&quot;&gt;
                    &lt;tbody id=&quot;messagebox1&quot;&gt;
                    &lt;tr&gt;
                        &lt;td&gt;&lt;h3&gt;◦ University Name&lt;/h3&gt;&lt;span id=&quot;UnivName&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;대학교 이름&lt;/h4&gt;&lt;/span&gt;&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;&lt;h3&gt;◦ Location&lt;/h3&gt;&lt;span id=&quot;UnivLocation&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;대학교 위치&lt;/h4&gt;&lt;/span&gt;&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;&lt;h3&gt;◦ Office Telephone Number&lt;/h3&gt;&lt;span id=&quot;UnivOfficeTelNum&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;대학교 전화번호&lt;/h4&gt;&lt;/span&gt;
                        &lt;/td&gt;
                        &lt;td&gt;&lt;h3&gt;◦ Contact Email&lt;/h3&gt;&lt;span id=&quot;UnivContactEmail&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;대학교 이메일&lt;/h4&gt;&lt;/span&gt;
                        &lt;/td&gt;
                        &lt;td&gt;&lt;h3&gt;◦ Website&lt;/h3&gt;&lt;span id=&quot;UnivWebsite&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;대학교 웹사이트&lt;/h4&gt;&lt;/span&gt;
                        &lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;/tbody&gt;
                &lt;/table&gt;

                &lt;div class=&quot;someinfo&quot;&gt;
                    &lt;p&gt;학교 유형:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;사립/공립&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                        &lt;span&gt;학교 규모:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;S/M/L/XL&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                        &lt;span&gt;재적학생수:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;00명&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                        &lt;span&gt;취업률:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;00%&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                        &lt;span&gt;Exam Type:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;TOEFL, IELTS&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                        &lt;span&gt;QS World University Ranking:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;00등&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
                &lt;/div&gt;

                &lt;div class=&quot;messagebox2&quot; id=&quot;messagebox2&quot;&gt;
                    &lt;h3&gt;◦ 학교 소개&lt;/h3&gt;
                    &lt;p&gt;학교 소개입니다.&lt;/p&gt;&lt;br/&gt;

                    &lt;h3&gt;◦ 설치 학과&lt;/h3&gt;
                    &lt;p&gt;설치 학과는 00입니다.&lt;/p&gt;&lt;br/&gt;

                    &lt;h3&gt;◦ Study Duration&lt;/h3&gt;
                    &lt;p&gt;학기 기간입니다.&lt;/p&gt;&lt;br/&gt;

                    &lt;h3&gt;◦ Requirement&lt;/h3&gt;
                    &lt;h5&gt;- GPA&lt;/h5&gt;
                    &lt;p&gt;000&lt;/p&gt;
                    &lt;h5&gt;- Language Proficiency:&lt;/h5&gt;
                    &lt;p&gt;000&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre><h3 id="문제점">[문제점]</h3>
<p>✅ 버튼(<code>onclick=&quot;SearchUniv()&quot;</code>)을 누르면 클라이언트가 선택한 대학의 정보를 Robo 3T에 저장되어 있는 <code>searchunivs</code>라는 collections에서 data를 가져와야 한다. 그런데 안 가져와져서 <code>script</code>에 작성한 <code>function SearchUniv()</code> 코드를 지우고 다시 처음부터 짜봤다. 일단 선택된 학교의 정보 말고, 모든 학교의 data를 가져오게끔 코드를 짜보았는데 <code>success</code>가 반응을 안 한다.</p>
<hr>
<h3 id="모든-대학-정보를-db에서-가져오는-코드">[모든 대학 정보를 db에서 가져오는 코드]</h3>
<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 http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;
        &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
        &lt;title&gt;FaceTheNew : 파견 대학 검색&lt;/title&gt;

        &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js&quot;&gt;&lt;/script&gt;

        &lt;link rel=&quot;shortcut icon&quot;
              href=&quot;https://media.vlpt.us/images/waterlily_0101/post/b0a997db-b387-4f8f-a9c5-5042800353db/world-map.png&quot;&gt;

        &lt;meta property=&quot;og:image&quot;
              content=&quot;https://media.vlpt.us/images/waterlily_0101/post/fb89d14c-a927-46b9-94fc-bcf7b237df3e/FaceTheNew-MAIN-TITLE-%EC%9B%90%EB%B3%B8.gif&quot;&gt;
        &lt;meta property=&quot;og:title&quot; content=&quot;FaceTheNew : 파견 대학 검색&quot;&gt;
        &lt;meta property=&quot;og:description&quot; content=&quot;&quot;&gt;

        &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Noto+Sans+KR&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

        &lt;style&gt;
            * {
                font-family: &#39;Noto Sans KR&#39;, sans-serif;
            }

            .mytitle {
                margin-top: 50px;
                margin-bottom: 50px;
                text-align: center;
                cursor: pointer;
            }

            .mybtn-group {
                background-color: black;
                width: 1400px;
                height: 45px;
                margin: 25px auto 0 auto;

                border-top: 1px black solid;
                border-bottom: 1px black solid;
            }

            .mybtn-secondary {
                background-color: black;
                color: white;

                width: 200px;
                height: 45px;
                border: 1px black solid;;

                font-size: 17px;

                cursor: pointer;

                transition-duration: 0.3s;
            }

            .mybtn-secondary:hover {color:#A3A4FF}

            .mybtn-secondary:active {color:grey}

            .subtitle {
                background-color: white;
                width: 1400px;
                height: 70px;
                line-height: 70px;

                margin: 120px auto 60px auto;

                border-top: 1px lightgrey solid;
                border-bottom: 1px lightgrey solid;
            }

            .searchuniv {
                background-color: lightgrey;
                width: 1100px;
                height: 50px;
                line-height: 50px;

                border-radius: 13px;

                color: white;
                font-size: 17px;

                margin: 0 auto 60px auto;

                box-shadow: 5px 5px 5px #A3A4FF;
                transition-duration: 0.3s;
            }

            .input-group-text {
                padding:40px;
            }

            .form-control-continent {
                background-color: lightgrey;
                width: 282.3px;
                height: 50px;
                line-height: 50px;

                border-left: 1px lightgrey solid;
                border-right: 1px lightgrey solid;
                border-top: 1px lightgrey solid;
                border-bottom: 1px lightgrey solid;

                padding-left: 10px;

                color: white;
                font-size: 17px;

                cursor: pointer;
            }

            .form-control-nation {
                background-color: lightgrey;
                width: 282.3px;
                height: 50px;
                line-height: 50px;

                border-left: 1px lightgrey solid;
                border-right: 1px lightgrey solid;
                border-top: 1px lightgrey solid;
                border-bottom: 1px lightgrey solid;

                padding-left: 10px;

                color: white;
                font-size: 17px;

                cursor: pointer;
            }

            .form-control-univ {
                background-color: lightgrey;
                width: 282.3px;
                height: 50px;
                line-height: 50px;

                border-left: 1px lightgrey solid;
                border-right: 1px lightgrey solid;
                border-top: 1px lightgrey solid;
                border-bottom: 1px lightgrey solid;

                padding-left: 10px;

                color: white;
                font-size: 17px;

                cursor: pointer;
            }

            .sch_smit {
                background-color: lightgrey;
                height: 50px;
                width: 50px;
                line-height: 50px;

                border: 1px lightgrey solid;
                border-radius: 13px;

                background-image: url(&quot;https://media.vlpt.us/images/waterlily_0101/post/cd260f99-d6dc-49cf-b144-bf8f3af30a49/search.png&quot;);
                background-position: center;
                background-size: cover;

                float: right;

                cursor: pointer;
            }

            .univimage {
                background-color: white;
                width: 1400px;
                height: 500px;
                margin: 0 auto 0 auto;
            }

            table {
                width: 1400px;
                margin: 0 auto 0 auto;
            }

            td {
                padding: 0 0 20px 0;
                width: 33%;
            }

            .someinfo {
                background-color: lightgrey;
                width: 1400px;
                height: 50px;
                line-height: 50px;
                margin: 0 auto 0 auto;

                text-align: center;

                vertical-align: text-bottom;
            }

            .messagebox2 {
                width: 1400px;
                margin: 15px auto 300px auto;

                border: 1px black solid;
            }
        &lt;/style&gt;

        &lt;script type=&quot;text/javascript&quot;&gt;
            function categoryOption1(e) {
                var formControlNation_asia = [&quot;-- 국가 --&quot;, &quot;대만&quot;, &quot;레바논&quot;, &quot;말레이시아&quot;, &quot;베트남&quot;, &quot;우즈베키스탄&quot;, &quot;인도네시아&quot;, &quot;일본&quot;, &quot;중국&quot;, &quot;태국&quot;, &quot;파키스탄&quot;];
                var formControlNation_europe = [&quot;-- 국가 --&quot;, &quot;노르웨이&quot;, &quot;독일&quot;, &quot;러시아&quot;, &quot;스웨덴&quot;, &quot;스위스&quot;, &quot;스페인&quot;, &quot;영국&quot;, &quot;터키&quot;, &quot;프랑스&quot;];
                var formControlNation_northamerica = [&quot;-- 국가 --&quot;, &quot;멕시코&quot;, &quot;미국&quot;, &quot;캐나다&quot;];
                var formControlNation_southamerica = [&quot;-- 국가 --&quot;, &quot;브라질&quot;, &quot;우루과이&quot;, &quot;칠레&quot;, &quot;콜롬비아&quot;];
                var formControlNation_oceania = [&quot;-- 국가 --&quot;, &quot;호주&quot;];
                var formControlNation_africa = [&quot;-- 국가 --&quot;, &quot;모로코&quot;, &quot;이집트&quot;];
                var target = document.getElementById(&quot;formControlNation&quot;);

                if(e.value == &quot;asia&quot;) var d = formControlNation_asia;
                else if(e.value == &quot;europe&quot;) var d = formControlNation_europe;
                else if(e.value == &quot;northamerica&quot;) var d = formControlNation_northamerica;
                else if(e.value == &quot;southamerica&quot;) var d = formControlNation_southamerica;
                else if(e.value == &quot;oceania&quot;) var d = formControlNation_oceania;
                else if(e.value == &quot;africa&quot;) var d = formControlNation_africa;

                target.options.length = 0;

                for (x in d) {
                    var opt = document.createElement(&quot;option&quot;);
                    opt.value = d[x];
                    opt.innerHTML = d[x];
                    target.appendChild(opt);
                }
            }

            function categoryOption2(e) {
                var formControlUniv_대만 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_레바논 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_말레이시아 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_베트남 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_우즈베키스탄 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_인도네시아 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_일본 = [&quot;-- 대학 --&quot;, &quot;Sapporo University&quot;];
                var formControlUniv_중국 = [&quot;-- 대학 --&quot;, &quot;Jinan University&quot;];
                var formControlUniv_태국 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_파키스탄 = [&quot;-- 대학 --&quot;, &quot;&quot;];

                var formControlUniv_노르웨이 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_독일 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_러시아 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_스웨덴 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_스위스 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_스페인 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_영국 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_터키 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_프랑스 = [&quot;-- 대학 --&quot;,&quot;Neoma Business School&quot;];

                var formControlUniv_멕시코 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_미국 = [&quot;-- 대학 --&quot;, &quot;Loyola University New Orleans&quot;, &quot;University of Wisconsin-Stout&quot;];
                var formControlUniv_캐나다 = [&quot;-- 대학 --&quot;, &quot;University of Ottawa&quot;, &quot;University of Saskatchewan&quot;];

                var formControlUniv_브라질 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_우루과이 = [&quot;-- 대학 --&quot;, &quot;&quot;];
                var formControlUniv_칠레 = [&quot;-- 대학 --&quot;, &quot;Finis Terrae University&quot;];
                var formControlUniv_콜롬비아 = [&quot;-- 대학 --&quot;, &quot;&quot;];

                var formControlUniv_호주 = [&quot;-- 대학 --&quot;, &quot;Deakin University&quot;];

                var formControlUniv_모로코 = [&quot;-- 대학 --&quot;, &quot;Groupe ISCAE&quot;];
                var formControlUniv_이집트 = [&quot;-- 대학 --&quot;, &quot;&quot;];

                var target = document.getElementById(&quot;formControlUniv&quot;);

                if(e.value == &quot;대만&quot;) var d = formControlUniv_대만;
                else if(e.value == &quot;레바논&quot;) var d = formControlUniv_레바논;
                else if(e.value == &quot;말레이시아&quot;) var d = formControlUniv_말레이시아;
                else if(e.value == &quot;베트남&quot;) var d = formControlUniv_베트남;
                else if(e.value == &quot;우즈베키스탄&quot;) var d = formControlUniv_우즈베키스탄;
                else if(e.value == &quot;인도네시아&quot;) var d = formControlUniv_인도네시아;
                else if(e.value == &quot;일본&quot;) var d = formControlUniv_일본;
                else if(e.value == &quot;중국&quot;) var d = formControlUniv_중국;
                else if(e.value == &quot;태국&quot;) var d = formControlUniv_태국;
                else if(e.value == &quot;파키스탄&quot;) var d = formControlUniv_파키스탄;

                else if(e.value == &quot;노르웨이&quot;) var d = formControlUniv_노르웨이;
                else if(e.value == &quot;독일&quot;) var d = formControlUniv_독일;
                else if(e.value == &quot;러시아&quot;) var d = formControlUniv_러시아;
                else if(e.value == &quot;스웨덴&quot;) var d = formControlUniv_스웨덴;
                else if(e.value == &quot;스위스&quot;) var d = formControlUniv_스위스;
                else if(e.value == &quot;스페인&quot;) var d = formControlUniv_스페인;
                else if(e.value == &quot;영국&quot;) var d = formControlUniv_영국;
                else if(e.value == &quot;터키&quot;) var d = formControlUniv_터키;
                else if(e.value == &quot;프랑스&quot;) var d = formControlUniv_프랑스;

                else if(e.value == &quot;멕시코&quot;) var d = formControlUniv_멕시코;
                else if(e.value == &quot;미국&quot;) var d = formControlUniv_미국;
                else if(e.value == &quot;캐나다&quot;) var d = formControlUniv_캐나다;

                else if(e.value == &quot;브라질&quot;) var d = formControlUniv_브라질;
                else if(e.value == &quot;우루과이&quot;) var d = formControlUniv_우루과이;
                else if(e.value == &quot;칠레&quot;) var d = formControlUniv_칠레;
                else if(e.value == &quot;콜롬비아&quot;) var d = formControlUniv_콜롬비아;

                else if(e.value == &quot;호주&quot;) var d = formControlUniv_호주;

                else if(e.value == &quot;모로코&quot;) var d = formControlUniv_모로코;
                else if(e.value == &quot;이집트&quot;) var d = formControlUniv_이집트;

                target.options.length = 0;

                for (x in d) {
                    var opt = document.createElement(&quot;option&quot;);
                    opt.value = d[x];
                    opt.innerHTML = d[x];
                    target.appendChild(opt);
                }
            }

            function categoryOption3(g) {
                const text = g.options[g.selectedIndex].text;
                console.log(g.options[g.selectedIndex].text);
            }

            function searchUniv() {
                $(&#39;#messagebox1&#39;).empty()
                $.ajax({
                    type: &quot;GET&quot;,
                    url: &quot;/searchunivsinfo&quot;,
                    data: {},
                    success: function (response) {
                        let univsinfo = response[&#39;all_univsinfo&#39;]
                        for (let i = 0; i &lt; univsinfo.length; i++) {
                            let ContactEmail = univsinfo[i][&#39;UnivContactEmail&#39;]
                            let Location = univsinfo[i][&#39;UnivLocation&#39;]
                            let Name = univsinfo[i][&#39;UnivName&#39;]
                            let OfficeTelNum = univsinfo[i][&#39;UnivOfficeTelNum&#39;]
                            let Website = univsinfo[i][&#39;UnivWebsite&#39;]

                            let temp_html = `&lt;tr&gt;
                                                &lt;td&gt;&lt;h3&gt;◦ University Name&lt;/h3&gt;&lt;span id=&quot;Name&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;${Name}&lt;/h4&gt;&lt;/span&gt;&lt;/td&gt;
                                            &lt;/tr&gt;
                                            &lt;tr&gt;
                                                &lt;td&gt;&lt;h3&gt;◦ Location&lt;/h3&gt;&lt;span id=&quot;Location&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;${Location}&lt;/h4&gt;&lt;/span&gt;&lt;/td&gt;
                                            &lt;/tr&gt;
                                            &lt;tr&gt;
                                                &lt;td&gt;&lt;h3&gt;◦ Office Telephone Number&lt;/h3&gt;&lt;span id=&quot;OfficeTelNum&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;${OfficeTelNum}&lt;/h4&gt;&lt;/span&gt;
                                                &lt;/td&gt;
                                                &lt;td&gt;&lt;h3&gt;◦ Contact Email&lt;/h3&gt;&lt;span id=&quot;ContactEmail&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;${ContactEmail}&lt;/h4&gt;&lt;/span&gt;
                                                &lt;/td&gt;
                                                &lt;td&gt;&lt;h3&gt;◦ Website&lt;/h3&gt;&lt;span id=&quot;Website&quot;&gt;&lt;h4 style=&quot;color: blue; cursor: pointer;&quot; onclick=&quot;location.href=&#39;${Website}&#39;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;${Website}&lt;/h4&gt;&lt;/span&gt;
                                                &lt;/td&gt;
                                            &lt;/tr&gt;`
                            $(&#39;#messagebox1&#39;).append(temp_html)
                        }
                    }
                })
            }
        &lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div class=&quot;mytitle&quot;&gt;
            &lt;img src=&quot;https://media.vlpt.us/images/waterlily_0101/post/02ff83ce-0474-4e0d-b886-69cf1b445588/FaceTheNew-TITLE-%EC%9B%90%EB%B3%B8-%EC%B5%9C%EC%A2%85.gif&quot;
                 style=&quot;max-width:30%; height: auto;&quot;
                 onclick=&quot;location.href=&#39;/&#39;&quot;&gt;
        &lt;/div&gt;

        &lt;div class=&quot;mybtn-group&quot;&gt;
            &lt;button class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;/aboutfacethenew&#39;&quot;&gt;FaceTheNew 소개&lt;/button&gt;
            &lt;button class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;/requireddocs&#39;&quot;&gt;교환학생 지원 서류&lt;/button&gt;
            &lt;button class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;/searchunivs&#39;&quot;&gt;파견 대학 검색&lt;/button&gt;
            &lt;button class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;/lifehack&#39;&quot;&gt;교환학생 학교생활 Tip&lt;/button&gt;
        &lt;/div&gt;

        &lt;div&gt;
            &lt;h1 class=&quot;subtitle&quot;&gt;◦ 파견 대학 검색&lt;/h1&gt;

            &lt;div class=&quot;searchuniv&quot; id=&quot;searchUniv&quot; name=&quot;searchUniv&quot;&gt;
                &lt;span class=&quot;input-group-text&quot; id=&quot;inputGroupPrepend&quot;&gt;파견 대학 검색&lt;/span&gt;
                &lt;select class=&quot;form-control-continent&quot; id=&quot;formControlContinent&quot; name=&quot;formControlContinent&quot; onchange=&quot;categoryOption1(this)&quot; aria-describedby=&quot;inputGroupPrepend1&quot; required&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;option1&quot;&gt;대륙 &lt;/option&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;asia&quot;&gt;아시아&lt;/option&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;europe&quot;&gt;유럽&lt;/option&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;northamerica&quot;&gt;북아메리카&lt;/option&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;southamerica&quot;&gt;남아메리카&lt;/option&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;oceania&quot;&gt;오세아니아&lt;/option&gt;
                    &lt;option name=&quot;Continent&quot; value=&quot;africa&quot;&gt;아프리카&lt;/option&gt;
                &lt;/select&gt;
                &lt;select class=&quot;form-control-nation&quot; id=&quot;formControlNation&quot; name=&quot;formControlNation&quot; onchange=&quot;categoryOption2(this)&quot; aria-describedby=&quot;inputGroupPrepend2&quot; required&gt;
                    &lt;option value=&quot;option2&quot;&gt;국가&lt;/option&gt;
                &lt;/select&gt;
                &lt;select class=&quot;form-control-univ&quot; id=&quot;formControlUniv&quot; name=&quot;formControlUniv&quot; onchange=&quot;categoryOption3(this)&quot; aria-describedby=&quot;inputGroupPrepend2&quot; required&gt;
                    &lt;option value=&quot;option3&quot;&gt;대학&lt;/option&gt;
                &lt;/select&gt;
                &lt;button id=&quot;search_btn&quot; type=&quot;button&quot; title=&quot;검색&quot; class=&quot;sch_smit&quot; onclick=&quot;searchUniv()&quot;&gt;&lt;/button&gt;
            &lt;/div&gt;

            &lt;div id=&#39;result&#39;&gt;&lt;/div&gt;

            &lt;div class=&quot;univimage&quot; id=&quot;UnivImage&quot;&gt;
                &lt;img src=&quot;https://t4.ftcdn.net/jpg/02/87/59/67/240_F_287596718_0Y53hkbfo5wTYUg31Ogdqs93YRA1QDpG.jpg&quot;
                     alt=&quot;univimage&quot;
                     style=&quot;width: 1400px; height: 500px;&quot;&gt;
            &lt;/div&gt;

            &lt;div id=&quot;SearchUnivResult&quot; class=&quot;searchunivresult&quot;&gt;
                &lt;table id=&quot;message-box&quot;&gt;
                    &lt;tbody id=&quot;messagebox1&quot;&gt;
                    &lt;/tr&gt;
                    &lt;/tbody&gt;
                &lt;/table&gt;

                &lt;div class=&quot;someinfo&quot;&gt;
                    &lt;p&gt;학교 유형:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;사립/공립&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                        &lt;span&gt;학교 규모:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;S/M/L/XL&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                        &lt;span&gt;재적학생수:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;00명&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                        &lt;span&gt;취업률:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;00%&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                        &lt;span&gt;Exam Type:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;TOEFL, IELTS&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                        &lt;span&gt;QS World University Ranking:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;00등&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
                &lt;/div&gt;

                &lt;div class=&quot;messagebox2&quot; id=&quot;messagebox2&quot;&gt;
                    &lt;h3&gt;◦ 학교 소개&lt;/h3&gt;
                    &lt;p&gt;학교 소개입니다.&lt;/p&gt;&lt;br/&gt;

                    &lt;h3&gt;◦ 설치 학과&lt;/h3&gt;
                    &lt;p&gt;설치 학과는 00입니다.&lt;/p&gt;&lt;br/&gt;

                    &lt;h3&gt;◦ Study Duration&lt;/h3&gt;
                    &lt;p&gt;학기 기간입니다.&lt;/p&gt;&lt;br/&gt;

                    &lt;h3&gt;◦ Requirement&lt;/h3&gt;
                    &lt;h5&gt;- GPA&lt;/h5&gt;
                    &lt;p&gt;000&lt;/p&gt;
                    &lt;h5&gt;- Language Proficiency:&lt;/h5&gt;
                    &lt;p&gt;000&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre><h3 id="한-것">[한 것]</h3>
<p>✅ selectbox에서 선택한 대학 이름을 console창에 뜨게 했다.
✅ 모든 대학 정보를 DB에서 가져오게 했다.</p>
<h3 id="할-것">[할 것]</h3>
<p>✅ 선택한 대학 이름을 서버로 보내고, 서버에서는 전달받은 대학 이름으로 DB에서 조회해야 한다.
✅ 대학 이름을 받으면 그 대학 이름만 정보 반환하는 용도의 API를 하나 만들어야 한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SpartaCodingClub] 웹서비스 개발 프로젝트 : "FaceTheNew" 개발일지(1)]]></title>
            <link>https://velog.io/@waterlily_0101/SpartaCodingClub-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B0%9C%EB%B0%9C-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-FaceTheNew-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%801</link>
            <guid>https://velog.io/@waterlily_0101/SpartaCodingClub-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B0%9C%EB%B0%9C-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-FaceTheNew-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%801</guid>
            <pubDate>Sat, 16 Oct 2021 09:40:14 GMT</pubDate>
            <description><![CDATA[<h1 id="facethenew">FaceTheNew</h1>
<h2 id="1-main-home">1. Main Home</h2>
<p><img src="https://images.velog.io/images/waterlily_0101/post/84e132ac-c30d-403c-9159-9c0a013e7698/Main%20Home.png" alt=""></p>
<h3 id="완성-코드">[완성 코드]</h3>
<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 http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;FaceTheNew&lt;/title&gt;

    &lt;link rel=&quot;shortcut icon&quot; href=&quot;https://media.vlpt.us/images/waterlily_0101/post/b0a997db-b387-4f8f-a9c5-5042800353db/world-map.png&quot;&gt;

    &lt;meta property=&quot;og:image&quot; content=&quot;https://media.vlpt.us/images/waterlily_0101/post/fb89d14c-a927-46b9-94fc-bcf7b237df3e/FaceTheNew-MAIN-TITLE-%EC%9B%90%EB%B3%B8.gif&quot;&gt;
    &lt;meta property=&quot;og:title&quot; content=&quot;FaceTheNew&quot;&gt;
    &lt;meta property=&quot;og:description&quot; content=&quot;교환학생을 위한 정보 공유 웹서비스입니다.&quot;&gt;

    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Noto+Sans+KR&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

    &lt;style&gt;
        * {
            font-family: &#39;Noto Sans KR&#39;, sans-serif;
        }

        .mytitle {
            background-color: white;
            width: 910px;
            height: 502px;
            margin: 290px auto 100px auto;
            background-image: url(&quot;https://media.vlpt.us/images/waterlily_0101/post/fb89d14c-a927-46b9-94fc-bcf7b237df3e/FaceTheNew-MAIN-TITLE-%EC%9B%90%EB%B3%B8.gif&quot;);
            background-position: center;
            background-size: cover;
        }

        .mybtn {
            display: inline-block;

            width: 300px;
            height: 50px;
            line-height: 50px;
            border: 1px lightgrey solid;

            margin-top: 10px;
            margin-right:50px;

            background-color: lightgray;

            text-align: center;
            cursor: pointer;

            border-radius: 13px;

            color: white;
            font-size: 17px;

            box-shadow: 5px 5px 5px #A3A4FF;
            transition-duration: 0.3s;
        }

        .mybtn:hover {color:#A3A4FF}

        .hover1:hover {
            box-shadow: 200px 0 0 0 rgba(1,1,1,1) inset,
                       -200px 0 0 0 rgba(1,1,1,1) inset;
        }

        .mybtn:active {color:grey}

        .mybtn-group {
            text-align: center;
        }

        .SmallExplain {
            text-align: center;
            margin-top: 150px;
            color: black;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div&gt;
        &lt;div class=&quot;mytitle&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;mybtn-group&quot;&gt;
            &lt;button href=&quot;&quot; class=&quot;mybtn hover1&quot; onclick=&quot;location.href=&#39;facethenewintro.html&#39;&quot;&gt;FaceTheNew 소개&lt;/button&gt;
            &lt;button href=&quot;&quot; class=&quot;mybtn hover1&quot; onclick=&quot;location.href=&#39;requireddocuments.html&#39;&quot;&gt;교환학생 지원 서류&lt;/button&gt;
            &lt;button href=&quot;&quot; class=&quot;mybtn hover1&quot; onclick=&quot;location.href=&#39;searchuniv.html&#39;&quot;&gt;파견 대학 검색&lt;/button&gt;
            &lt;button href=&quot;&quot; class=&quot;mybtn hover1&quot; onclick=&quot;location.href=&#39;lifehack.html&#39;&quot;&gt;교환학생 학교생활 Tip&lt;/button&gt;
        &lt;/div&gt;
        &lt;h4 class=&quot;SmallExplain&quot;&gt;- 교환학생을 위한 정보 공유 웹서비스입니다 -&lt;/h4&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre><br>

<h2 id="2-facethenew-소개-page">2. &#39;FaceTheNew 소개&#39; page</h2>
<p><img src="https://images.velog.io/images/waterlily_0101/post/6fe3e435-c0a4-47cd-b21c-2db8d3e058b4/'FaceTheNew%20%EC%86%8C%EA%B0%9C'%20page.png" alt=""></p>
<h3 id="완성-코드-1">[완성 코드]</h3>
<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 http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;FaceTheNew 소개&lt;/title&gt;

    &lt;link rel=&quot;shortcut icon&quot;
          href=&quot;https://media.vlpt.us/images/waterlily_0101/post/b0a997db-b387-4f8f-a9c5-5042800353db/world-map.png&quot;&gt;

    &lt;meta property=&quot;og:image&quot;
          content=&quot;https://media.vlpt.us/images/waterlily_0101/post/fb89d14c-a927-46b9-94fc-bcf7b237df3e/FaceTheNew-MAIN-TITLE-%EC%9B%90%EB%B3%B8.gif&quot;&gt;
    &lt;meta property=&quot;og:title&quot; content=&quot;FaceTheNew 소개&quot;&gt;
    &lt;meta property=&quot;og:description&quot; content=&quot;&quot;&gt;

    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Noto+Sans+KR&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

    &lt;style&gt;
        * {
            font-family: &#39;Noto Sans KR&#39;, sans-serif;
        }

        .mytitle {
            margin-top: 50px;
            margin-bottom: 50px;
            text-align: center;
            cursor: pointer;
        }

        .mybtn-group {
            background-color: black;
            width: 1400px;
            height: 45px;
            margin: 25px auto 0 auto;

            border-top: 1px black solid;
            border-bottom: 1px black solid;
        }

        .mybtn-secondary {
            background-color: black;
            color: white;

            width: 200px;
            height: 45px;
            border: 1px black solid;;

            font-size: 17px;

            cursor: pointer;

            transition-duration: 0.3s;
        }

        .mybtn-secondary:hover {color:#A3A4FF}

        .mybtn-secondary:active {color:grey}

        .subtitle {
            background-color: white;
            width: 1400px;
            height: 70px;
            line-height: 70px;

            margin: 120px auto 60px auto;

            border-top: 1px lightgrey solid;
            border-bottom: 1px lightgrey solid;
        }

        .messagebox {
            width: 1300px;
            margin: 0 auto 300px auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;mytitle&quot;&gt;
        &lt;img src=&quot;https://media.vlpt.us/images/waterlily_0101/post/02ff83ce-0474-4e0d-b886-69cf1b445588/FaceTheNew-TITLE-%EC%9B%90%EB%B3%B8-%EC%B5%9C%EC%A2%85.gif&quot;
             style=&quot;max-width:30%; height: auto;&quot;
             onclick=&quot;location.href=&#39;index.html&#39;&quot;&gt;
    &lt;/div&gt;

    &lt;div class=&quot;mybtn-group&quot;&gt;
        &lt;button href=&quot;&quot; class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;facethenewintro.html&#39;&quot;&gt;FaceTheNew 소개&lt;/button&gt;
        &lt;button href=&quot;&quot; class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;requireddocuments.html&#39;&quot;&gt;교환학생 지원 서류&lt;/button&gt;
        &lt;button href=&quot;&quot; class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;searchuniv.html&#39;&quot;&gt;파견 대학 검색&lt;/button&gt;
        &lt;button href=&quot;&quot; class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;lifehack.html&#39;&quot;&gt;교환학생 학교생활 Tip&lt;/button&gt;
    &lt;/div&gt;

    &lt;h1 class=&quot;subtitle&quot;&gt;◦ FaceTheNew 소개&lt;/h1&gt;

    &lt;div class=&quot;messagebox&quot;&gt;
        &lt;h3 style=&quot;font-size: 22px;&quot;&gt;&lt;span style=&quot;color: #F23005;&quot;&gt;FaceTheNew&lt;/span&gt;는 교환학생을 &lt;span style=&quot;color: #A3A4FF;&quot;&gt;준비 중&lt;/span&gt;인, &lt;span style=&quot;color: #A3A4FF;&quot;&gt;경험 중&lt;/span&gt;인, &lt;span style=&quot;color: #A3A4FF;&quot;&gt;경험한&lt;/span&gt; 학생들을 위한 정보 공유 웹서비스입니다.&lt;/h3&gt;

        &lt;br&gt;

        &lt;h3 style=&quot;font-size: 20px;&quot;&gt;💡 &lt;span style=&quot;color: #F23005;&quot;&gt;FaceTheNew&lt;/span&gt;는 교환학생을 &lt;span style=&quot;color: #A3A4FF;&quot;&gt;준비&lt;/span&gt;하고 있는 학생들에게 필요한 정보를 공유하고자 만든 공간입니다.&lt;br /&gt;&lt;/h3&gt;
        &lt;h3 style=&quot;line-height: 40px&quot;&gt;교환학생을 가기 위해 준비해야 할 것들이 참 많습니다.&lt;br/&gt;
            영어 성적은 기본이고, 교환학생 합격 후에 더 바빠집니다.&lt;br/&gt;
            새로운 환경에서 길게는 1년 동안 생활해야 하기 때문에 꼼꼼히 확인해야 할 것들이 많습니다.&lt;br/&gt;
            교환학생을 가서 마주할 익숙지 않을 수많은 새로움들과 좀 더 쉽게 친해지기 위해&lt;br /&gt;
            준비하고 알아야 할 정보들을 &lt;span style=&quot;color: #F23005;&quot;&gt;FaceTheNew&lt;/span&gt;에서 정리해드리고자 합니다.&lt;br /&gt;
            &lt;span style=&quot;color: #F23005;&quot;&gt;FaceTheNew&lt;/span&gt;가 교환학생을 시작하는 학생들에게 안전범퍼가 되길 바랍니다.&lt;/h3&gt;

        &lt;br&gt;

        &lt;h3 style=&quot;font-size: 20px;&quot;&gt;💡 &lt;span style=&quot;color: #F23005;&quot;&gt;FaceTheNew&lt;/span&gt;는 교환학생을 현재 &lt;span style=&quot;color: #A3A4FF;&quot;&gt;경험 중&lt;/span&gt;인 학생들에게 필요한 정보를 공유하고자 만든 공간입니다.&lt;br /&gt;&lt;/h3&gt;
        &lt;h3 style=&quot;line-height: 40px&quot;&gt;교환학생을 가면 지금까지 살아온 환경과 다른 문화와 마주합니다.&lt;br /&gt;
            그 과정에서 수많은 새로움과 부딪힙니다.&lt;br /&gt;
            그 새로움을 자신의 것으로 만드는 과정에서 익숙하지 않았던 것들과 친해집니다.&lt;br /&gt;
            그 가운데 &lt;span style=&quot;color: #F23005;&quot;&gt;FaceTheNew&lt;/span&gt;가 교환학생으로 외국에 가 있는 학생들에게 한숨 돌릴 수 있는 쉼터가 되길 바랍니다.&lt;/h3&gt;

        &lt;br&gt;

        &lt;h3 style=&quot;font-size: 20px;&quot;&gt;💡 &lt;span style=&quot;color: #F23005;&quot;&gt;FaceTheNew&lt;/span&gt;는 교환학생을 &lt;span style=&quot;color: #A3A4FF;&quot;&gt;경험&lt;/span&gt;한 학생들이 교환학생을 통해 배운 것들을 나눌 수 있는 공간입니다.&lt;br /&gt;&lt;/h3&gt;
        &lt;h3 style=&quot;line-height: 40px&quot;&gt;익숙하지 않은 환경에서 마주한 새로움은 많은 것을 배울 수 있게 해줍니다.&lt;br /&gt;
            그 과정에서 쌓인 경험치는 삶을 대하는 자세에서, 세상을 바라보는 새로운 시각에서 나타납니다.&lt;br /&gt;
            &lt;span style=&quot;color: #F23005;&quot;&gt;FaceTheNew&lt;/span&gt;는 여러분들이 마주한 새로움이 궁금합니다.&lt;br /&gt;
            여러분들이 배우고 느낀 새로운 시각이 궁급합니다.&lt;br /&gt;
            &lt;span style=&quot;color: #F23005;&quot;&gt;FaceTheNew&lt;/span&gt;가 그 새로움들을 공유하는 공간이 되길 바랍니다.&lt;/h3&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre><br>

<h2 id="3-교환학생-지원-서류-page">3. &#39;교환학생 지원 서류&#39; page</h2>
<p><img src="https://images.velog.io/images/waterlily_0101/post/c4508132-09f0-43e8-a54c-6709d91fb9a2/'%EA%B5%90%ED%99%98%ED%95%99%EC%83%9D%20%EC%A7%80%EC%9B%90%20%EC%84%9C%EB%A5%98'%20page.png" alt=""></p>
<h3 id="완성-코드-2">[완성 코드]</h3>
<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 http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;FaceTheNew : 교환학생 지원 서류&lt;/title&gt;

    &lt;link rel=&quot;shortcut icon&quot;
          href=&quot;https://media.vlpt.us/images/waterlily_0101/post/b0a997db-b387-4f8f-a9c5-5042800353db/world-map.png&quot;&gt;

    &lt;meta property=&quot;og:image&quot;
          content=&quot;https://media.vlpt.us/images/waterlily_0101/post/fb89d14c-a927-46b9-94fc-bcf7b237df3e/FaceTheNew-MAIN-TITLE-%EC%9B%90%EB%B3%B8.gif&quot;&gt;
    &lt;meta property=&quot;og:title&quot; content=&quot;FaceTheNew : 교환학생 지원 서류&quot;&gt;
    &lt;meta property=&quot;og:description&quot; content=&quot;&quot;&gt;

    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Noto+Sans+KR&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

    &lt;style&gt;
        * {
            font-family: &#39;Noto Sans KR&#39;, sans-serif;
        }

        .mytitle {
            margin-top: 50px;
            margin-bottom: 50px;
            text-align: center;
            cursor: pointer;
        }

        .mybtn-group {
            background-color: black;
            width: 1400px;
            height: 45px;
            margin: 25px auto 0 auto;

            border-top: 1px black solid;
            border-bottom: 1px black solid;
        }

        .mybtn-secondary {
            background-color: black;
            color: white;

            width: 200px;
            height: 45px;
            border: 1px black solid;;

            font-size: 17px;

            cursor: pointer;

            transition-duration: 0.3s;
        }

        .mybtn-secondary:hover {color:#A3A4FF}

        .mybtn-secondary:active {color:grey}

        .commondocuments {
            background-color: white;
            width: 1400px;
            height: 70px;
            line-height: 70px;

            margin: 120px auto 60px auto;

            border-top: 1px lightgrey solid;
            border-bottom: 1px lightgrey solid;
        }

        .messagebox {
            width: 1300px;
            margin: 0 auto 0 auto;
        }

        .individualdocuments {
            background-color: white;
            width: 1400px;
            height: 70px;
            line-height: 70px;

            margin: 120px auto 60px auto;

            border-top: 1px lightgrey solid;
            border-bottom: 1px lightgrey solid;
        }

        .searchdocuments {
            background-color: lightgrey;
            width: 1100px;
            height: 50px;
            line-height: 50px;

            border-radius: 13px;

            color: white;
            font-size: 17px;

            margin: 0 auto 60px auto;

            box-shadow: 5px 5px 5px #A3A4FF;
            transition-duration: 0.3s;
        }

        .input-group-text {
            padding:40px;
        }

        .form-control-continent {
            background-color: lightgrey;
            width: 400px;
            height: 50px;
            line-height: 50px;

            border-left: 1px lightgrey solid;
            border-right: 1px lightgrey solid;
            border-top: 1px lightgrey solid;
            border-bottom: 1px lightgrey solid;

            padding-left: 10px;

            color: white;
            font-size: 17px;

            cursor: pointer;
        }

        .form-control-nation {
            background-color: lightgrey;
            width: 400px;
            height: 50px;
            line-height: 50px;

            border-left: 1px lightgrey solid;
            border-right: 1px lightgrey solid;
            border-top: 1px lightgrey solid;
            border-bottom: 1px lightgrey solid;

            padding-left: 10px;

            color: white;
            font-size: 17px;

            cursor: pointer;
        }

        .sch_smit {
            background-color: lightgrey;
            height: 50px;
            width: 50px;
            line-height: 50px;

            border: 1px lightgrey solid;
            border-radius: 13px;

            background-image: url(&quot;https://media.vlpt.us/images/waterlily_0101/post/cd260f99-d6dc-49cf-b144-bf8f3af30a49/search.png&quot;);
            background-position: center;
            background-size: cover;

            float: right;

            cursor: pointer;
        }

        .messagebox2 {
            width: 1300px;
            margin: 0 auto 300px auto;

            border: 1px black solid;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;mytitle&quot;&gt;
        &lt;img src=&quot;https://media.vlpt.us/images/waterlily_0101/post/02ff83ce-0474-4e0d-b886-69cf1b445588/FaceTheNew-TITLE-%EC%9B%90%EB%B3%B8-%EC%B5%9C%EC%A2%85.gif&quot;
             style=&quot;max-width:30%; height: auto;&quot;
             onclick=&quot;location.href=&#39;index.html&#39;&quot;&gt;
    &lt;/div&gt;

    &lt;div class=&quot;mybtn-group&quot;&gt;
        &lt;button href=&quot;&quot; class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;facethenewintro.html&#39;&quot;&gt;FaceTheNew 소개&lt;/button&gt;
        &lt;button href=&quot;&quot; class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;requireddocuments.html&#39;&quot;&gt;교환학생 지원 서류&lt;/button&gt;
        &lt;button href=&quot;&quot; class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;searchuniv.html&#39;&quot;&gt;파견 대학 검색&lt;/button&gt;
        &lt;button href=&quot;&quot; class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;lifehack.html&#39;&quot;&gt;교환학생 학교생활 Tip&lt;/button&gt;
    &lt;/div&gt;

    &lt;h1 class=&quot;commondocuments&quot;&gt;◦ 교환학생 지원시 필요한 공통 서류&lt;/h1&gt;

    &lt;div class=&quot;messagebox&quot;&gt;
        &lt;h3 style=&quot;font-size: 22px;&quot;&gt;* 중앙대학교 교환학생 서류양식 기준입니다.&lt;br /&gt;&lt;/h3&gt;
        &lt;h3 style=&quot;font-size: 20px;&quot;&gt;1. Learning Agreement&lt;br /&gt;&lt;/h3&gt;
        &lt;p style=&quot;font-size: 18px;&quot;&gt;- 대부분의 경우 상대교에서 제공하는 양식이 있습니다. 상대교 양식대로 작성해 제출해야 합니다.&lt;br /&gt;&lt;/p&gt;
        &lt;h3 style=&quot;font-size: 20px;&quot;&gt;2. 교환학생 과목이수계획서(전공)&lt;br /&gt;&lt;/h3&gt;
        &lt;h3 style=&quot;font-size: 20px;&quot;&gt;3. 교환학생 과목이수계획서(자유선택)&lt;br /&gt;&lt;/h3&gt;
        &lt;p style=&quot;font-size: 18px;&quot;&gt;- syllabus 혹은 course list를 준비하여 이수할 과목들의 과목명, 학기, 학점이 적혀진 증거자료를 필수적으로 구비해야 합니다.&lt;br /&gt;
                                    - &quot;수학기간&quot; 란에는 &quot;정확한 파견 연도 및 학기&quot;를 적어야 합니다.&lt;br /&gt;&lt;/p&gt;
        &lt;h3 style=&quot;font-size: 20px;&quot;&gt;4. 개인정보 수집ㆍ이용 동의서&lt;br /&gt;&lt;/h3&gt;
        &lt;h3 style=&quot;font-size: 20px;&quot;&gt;5. 고유식별정보 수집ㆍ이용 동의서&lt;br /&gt;&lt;/h3&gt;
        &lt;h3 style=&quot;font-size: 20px;&quot;&gt;6. 안전 관련 서약서&lt;br /&gt;&lt;/h3&gt;
    &lt;/div&gt;

    &lt;h1 class=&quot;individualdocuments&quot;&gt;◦ 국가별 교환학생 지원시 필요한 필수 서류&lt;/h1&gt;

    &lt;div class=&quot;searchdocuments&quot;&gt;
        &lt;span class=&quot;input-group-text&quot; id=&quot;inputGroupPrepend&quot;&gt;국가별 필수 지원 서류&lt;/span&gt;
        &lt;select class=&quot;form-control-continent&quot; id=&quot;formControlContinent&quot; aria-describedby=&quot;inputGroupPrepend1&quot; required&gt;
            &lt;option selected&gt;대륙&lt;/option&gt;
            &lt;option value=&quot;asia&quot;&gt;아시아&lt;/option&gt;
            &lt;option value=&quot;europe&quot;&gt;유럽&lt;/option&gt;
            &lt;option value=&quot;northamerica&quot;&gt;북아메리카&lt;/option&gt;
            &lt;option value=&quot;southamerica&quot;&gt;남아메리카&lt;/option&gt;
            &lt;option value=&quot;oceania&quot;&gt;오세아니아&lt;/option&gt;
            &lt;option value=&quot;africa&quot;&gt;아프리카&lt;/option&gt;
        &lt;/select&gt;
        &lt;select class=&quot;form-control-nation&quot; id=&quot;formControlNation&quot; aria-describedby=&quot;inputGroupPrepend2&quot; required&gt;
            &lt;option selected&gt;국가&lt;/option&gt;
            &lt;option value=&quot;1&quot;&gt;1&lt;/option&gt;
            &lt;option value=&quot;2&quot;&gt;2&lt;/option&gt;
            &lt;option value=&quot;3&quot;&gt;3&lt;/option&gt;
        &lt;/select&gt;
        &lt;button id=&quot;search_btn&quot; type=&quot;button&quot; title=&quot;검색&quot; class=&quot;sch_smit&quot;&gt;&lt;/button&gt;
    &lt;/div&gt;

    &lt;div class=&quot;searchdocumentsresult&quot;&gt;
        &lt;div class=&quot;messagebox2&quot;&gt;가나다라마바사&lt;br /&gt;
            가나다라마바사&lt;br /&gt;
            가나다라마바사&lt;br /&gt;
            가나다라마바사&lt;br /&gt;
            가나다라마바사&lt;br /&gt;
            가나다라마바사&lt;br /&gt;
            가나다라마바사&lt;br /&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre><h3 id="to-do-list">[To do list]</h3>
<p>✅ &#39;국가별 교환학생 지원시 필요한 필수 서류&#39; 부분 db 생성하기
✅ 동적 select box 코드 작성하기
✅ 동적 select box와 db 연결하기
✅ 서버 만들기</p>
<br>

<h2 id="4-파견-대학-검색-page">4. &#39;파견 대학 검색&#39; page</h2>
<p><img src="https://images.velog.io/images/waterlily_0101/post/3fa3f7ac-dbc3-4237-99b4-edfa45d24917/'%ED%8C%8C%EA%B2%AC%20%EB%8C%80%ED%95%99%20%EA%B2%80%EC%83%89'%20page.png" alt=""></p>
<h3 id="완성-코드-3">[완성 코드]</h3>
<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 http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;FaceTheNew : 파견 대학 검색&lt;/title&gt;

    &lt;link rel=&quot;shortcut icon&quot;
          href=&quot;https://media.vlpt.us/images/waterlily_0101/post/b0a997db-b387-4f8f-a9c5-5042800353db/world-map.png&quot;&gt;

    &lt;meta property=&quot;og:image&quot;
          content=&quot;https://media.vlpt.us/images/waterlily_0101/post/fb89d14c-a927-46b9-94fc-bcf7b237df3e/FaceTheNew-MAIN-TITLE-%EC%9B%90%EB%B3%B8.gif&quot;&gt;
    &lt;meta property=&quot;og:title&quot; content=&quot;FaceTheNew : 파견 대학 검색&quot;&gt;
    &lt;meta property=&quot;og:description&quot; content=&quot;&quot;&gt;

    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Noto+Sans+KR&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

    &lt;style&gt;
        * {
            font-family: &#39;Noto Sans KR&#39;, sans-serif;
        }

        .mytitle {
            margin-top: 50px;
            margin-bottom: 50px;
            text-align: center;
            cursor: pointer;
        }

        .mybtn-group {
            background-color: black;
            width: 1400px;
            height: 45px;
            margin: 25px auto 0 auto;

            border-top: 1px black solid;
            border-bottom: 1px black solid;
        }

        .mybtn-secondary {
            background-color: black;
            color: white;

            width: 200px;
            height: 45px;
            border: 1px black solid;;

            font-size: 17px;

            cursor: pointer;

            transition-duration: 0.3s;
        }

        .mybtn-secondary:hover {color:#A3A4FF}

        .mybtn-secondary:active {color:grey}

        .subtitle {
            background-color: white;
            width: 1400px;
            height: 70px;
            line-height: 70px;

            margin: 120px auto 60px auto;

            border-top: 1px lightgrey solid;
            border-bottom: 1px lightgrey solid;
        }

        .searchuniv {
            background-color: lightgrey;
            width: 1100px;
            height: 50px;
            line-height: 50px;

            border-radius: 13px;

            color: white;
            font-size: 17px;

            margin: 0 auto 60px auto;

            box-shadow: 5px 5px 5px #A3A4FF;
            transition-duration: 0.3s;
        }

        .input-group-text {
            padding:40px;
        }

        .form-control-continent {
            background-color: lightgrey;
            width: 282.3px;
            height: 50px;
            line-height: 50px;

            border-left: 1px lightgrey solid;
            border-right: 1px lightgrey solid;
            border-top: 1px lightgrey solid;
            border-bottom: 1px lightgrey solid;

            padding-left: 10px;

            color: white;
            font-size: 17px;

            cursor: pointer;
        }

        .form-control-nation {
            background-color: lightgrey;
            width: 282.3px;
            height: 50px;
            line-height: 50px;

            border-left: 1px lightgrey solid;
            border-right: 1px lightgrey solid;
            border-top: 1px lightgrey solid;
            border-bottom: 1px lightgrey solid;

            padding-left: 10px;

            color: white;
            font-size: 17px;

            cursor: pointer;
        }

        .form-control-univ {
            background-color: lightgrey;
            width: 282.3px;
            height: 50px;
            line-height: 50px;

            border-left: 1px lightgrey solid;
            border-right: 1px lightgrey solid;
            border-top: 1px lightgrey solid;
            border-bottom: 1px lightgrey solid;

            padding-left: 10px;

            color: white;
            font-size: 17px;

            cursor: pointer;
        }

        .sch_smit {
            background-color: lightgrey;
            height: 50px;
            width: 50px;
            line-height: 50px;

            border: 1px lightgrey solid;
            border-radius: 13px;

            background-image: url(&quot;https://media.vlpt.us/images/waterlily_0101/post/cd260f99-d6dc-49cf-b144-bf8f3af30a49/search.png&quot;);
            background-position: center;
            background-size: cover;

            float: right;

            cursor: pointer;
        }

        .univimage {
            background-color: white;
            width: 1400px;
            height: 500px;
            margin: 0 auto 0 auto;
        }

        table {
            width: 1400px;
            margin: 0 auto 0 auto;

            # border: 1px black solid;
            # border-collapse: collapse;
        }

        td {
            # border: 1px black solid;
            padding: 0 0 20px 0;
            width: 33%;
        }

        .someinfo {
            background-color: lightgrey;
            width: 1400px;
            height: 50px;
            line-height: 50px;
            margin: 0 auto 0 auto;

            text-align: center;

            vertical-align: text-bottom;
        }

        .messagebox2 {
            width: 1400px;
            margin: 15px auto 300px auto;

            border: 1px black solid;
        }
    &lt;/style&gt;

    &lt;script type=&quot;text/javascript&quot;&gt;
        $(document).ready(function() {
            $(&#39;#searchuniv&#39;).html(&#39;&#39;);
            searchuniv();
            searchunivresult();
        });

        function searchuniv(sParam) {
            var $target = $(&quot;select[name=&#39;formControlNation&#39;]&quot;);

            $target.empty();
            if(sParam == &quot;&quot;) {
                $target.append(&quot;&lt;option value=&#39;&#39;&gt;국가&lt;/option&gt;&quot;);
                return;
            }

            $.ajax({
                type: &quot;POST&quot;,
                url: &quot;/searchuniv&quot;,
                async: false,
                data: {P_NO: sParam},
                dataType: &quot;json&quot;,
                success: function(jdata) {
                    if(jdata.length == 0) {
                        $target.append(&quot;&lt;option value=&#39;&#39;&gt;국가&lt;/option&gt;&quot;);
                    } else {
                        $(jdata).each(function(i) {
                            $target.append(&quot;&lt;option value=&#39;&quot;+ jdata[i].REG_NO +&quot;&#39;&gt;&quot;+ jdata[i].formControlNation +&quot;&lt;/option&gt;&quot;);
                        });
                    }
                }, error: function(xhr) {
                    console.log(xhr.responseText);
                    alert(response[&quot;msg&quot;]);
                }
            });
        }

        function searchunivresult() {
            $.ajax({
                type: &quot;GET&quot;,
                url: &quot;/searchuniv&quot;,
                data: {},
                success: function (response) {
                    let searchuniv = response[&#39;all_searchuniv&#39;]
                    for (let i = 0; i &lt; searchuniv.length; i++) {
                        let UnivName = searchuniv[i][&#39;UnivName&#39;]
                        let UnivLocation = searchuniv[i][&#39;UnivLocation&#39;]
                        let UnivOfficeTelNum = searchuniv[i][&#39;UnivOfficeTelNum&#39;]
                        let UnivContactEmail = searchuniv[i][&#39;UnivContactEmail&#39;]
                        let UnivWebsite = searchuniv[i][&#39;UnivWebsite&#39;]

                        let temp_html = `&lt;tbody id=&quot;messagebox1&quot;&gt;
                                            &lt;tr&gt;
                                                &lt;td&gt;&lt;h3&gt;◦ University Name&lt;/h3&gt;&lt;span id=&quot;UnivName&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;${UnivName}&lt;/h4&gt;&lt;/span&gt;&lt;/td&gt;
                                            &lt;/tr&gt;
                                            &lt;tr&gt;
                                                &lt;td&gt;&lt;h3&gt;◦ Location&lt;/h3&gt;&lt;span id=&quot;UnivLocation&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;${UnivLocation}&lt;/h4&gt;&lt;/span&gt;&lt;/td&gt;
                                            &lt;/tr&gt;
                                            &lt;tr&gt;
                                                &lt;td&gt;&lt;h3&gt;◦ Office Telephone Number&lt;/h3&gt;&lt;span id=&quot;UnivOfficeTelNum&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;${UnivOfficeTelNum}&lt;/h4&gt;&lt;/span&gt;&lt;/td&gt;
                                                &lt;td&gt;&lt;h3&gt;◦ Contact Email&lt;/h3&gt;&lt;span id=&quot;UnivContactEmail&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;${UnivContactEmail}&lt;/h4&gt;&lt;/span&gt;&lt;/td&gt;
                                                &lt;td&gt;&lt;h3&gt;◦ Website&lt;/h3&gt;&lt;span id=&quot;UnivWebsite&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;${UnivWebsite}&lt;/h4&gt;&lt;/spanwebsite&gt;&lt;/td&gt;
                                            &lt;/tr&gt;
                                        &lt;/tbody&gt;`
                        $(&#39;#message-box&#39;).append(temp_html)
                    }
                }
            })
        }
    &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;mytitle&quot;&gt;
        &lt;img src=&quot;https://media.vlpt.us/images/waterlily_0101/post/02ff83ce-0474-4e0d-b886-69cf1b445588/FaceTheNew-TITLE-%EC%9B%90%EB%B3%B8-%EC%B5%9C%EC%A2%85.gif&quot;
             style=&quot;max-width:30%; height: auto;&quot;
             onclick=&quot;location.href=&#39;index.html&#39;&quot;&gt;
    &lt;/div&gt;

    &lt;div class=&quot;mybtn-group&quot;&gt;
        &lt;button href=&quot;&quot; class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;facethenewintro.html&#39;&quot;&gt;FaceTheNew 소개&lt;/button&gt;
        &lt;button href=&quot;&quot; class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;requireddocuments.html&#39;&quot;&gt;교환학생 지원 서류&lt;/button&gt;
        &lt;button href=&quot;&quot; class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;searchuniv.html&#39;&quot;&gt;파견 대학 검색&lt;/button&gt;
        &lt;button href=&quot;&quot; class=&quot;mybtn-secondary hover1&quot; onclick=&quot;location.href=&#39;lifehack.html&#39;&quot;&gt;교환학생 학교생활 Tip&lt;/button&gt;
    &lt;/div&gt;

    &lt;h1 class=&quot;subtitle&quot;&gt;◦ 파견 대학 검색&lt;/h1&gt;

    &lt;div class=&quot;searchuniv&quot; id=&quot;searchUniv&quot; name=&quot;searchUniv&quot; onkeyup=&quot;printSearchUniv()&quot;&gt;
        &lt;span class=&quot;input-group-text&quot; id=&quot;inputGroupPrepend&quot;&gt;파견 대학 검색&lt;/span&gt;
        &lt;select class=&quot;form-control-continent&quot; id=&quot;formControlContinent&quot; name=&quot;formControlContinent&quot; onchange=&quot;searchuniv(this.value);&quot; aria-describedby=&quot;inputGroupPrepend1&quot; required&gt;
            &lt;option name=&quot;selectOption1&quot; value=&quot;&quot; selected=&quot;selected&quot;&gt;대륙&lt;/option&gt;
            &lt;option name=&quot;selectOption1&quot; value=&quot;asia&quot; &gt;아시아&lt;/option&gt;
            &lt;option name=&quot;selectOption1&quot; value=&quot;europe&quot;&gt;유럽&lt;/option&gt;
            &lt;option name=&quot;selectOption1&quot; value=&quot;northamerica&quot;&gt;북아메리카&lt;/option&gt;
            &lt;option name=&quot;selectOption1&quot; value=&quot;southamerica&quot;&gt;남아메리카&lt;/option&gt;
            &lt;option name=&quot;selectOption1&quot; value=&quot;oceania&quot;&gt;오세아니아&lt;/option&gt;
            &lt;option name=&quot;selectOption1&quot; value=&quot;africa&quot;&gt;아프리카&lt;/option&gt;
        &lt;/select&gt;
        &lt;select class=&quot;form-control-nation&quot; id=&quot;formControlNation&quot; name=&quot;formControlNation&quot; aria-describedby=&quot;inputGroupPrepend2&quot; required&gt;
            &lt;option value=&quot;option2&quot; selected&gt;국가&lt;/option&gt;
        &lt;/select&gt;
        &lt;select class=&quot;form-control-univ&quot; id=&quot;formControlUniv&quot; name=&quot;formControlUniv&quot; aria-describedby=&quot;inputGroupPrepend2&quot; required&gt;
            &lt;option value=&quot;option3&quot; selected&gt;대학&lt;/option&gt;
        &lt;/select&gt;
        &lt;button id=&quot;search_btn&quot; type=&quot;button&quot; title=&quot;검색&quot; class=&quot;sch_smit&quot; onclick=&quot;postSearchUniv()&quot;&gt;&lt;/button&gt;
    &lt;/div&gt;

    &lt;div class=&quot;univimage&quot; id=&quot;UnivImage&quot;&gt;
        &lt;img src=&quot;https://t4.ftcdn.net/jpg/02/87/59/67/240_F_287596718_0Y53hkbfo5wTYUg31Ogdqs93YRA1QDpG.jpg&quot;
             alt=&quot;univimage&quot;
             style=&quot;width: 1400px; height: 500px;&quot;&gt;
    &lt;/div&gt;

    &lt;div id=&quot;SearchUnivResult&quot; class=&quot;searchunivresult&quot;&gt;
        &lt;table id=&quot;message-box&quot;&gt;
            &lt;tbody id=&quot;messagebox1&quot;&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;h3&gt;◦ University Name&lt;/h3&gt;&lt;span id=&quot;UnivName&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;대학교 이름&lt;/h4&gt;&lt;/span&gt;&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;h3&gt;◦ Location&lt;/h3&gt;&lt;span id=&quot;UnivLocation&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;대학교 위치&lt;/h4&gt;&lt;/span&gt;&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;h3&gt;◦ Office Telephone Number&lt;/h3&gt;&lt;span id=&quot;UnivOfficeTelNum&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;대학교 전화번호&lt;/h4&gt;&lt;/span&gt;&lt;/td&gt;
                    &lt;td&gt;&lt;h3&gt;◦ Contact Email&lt;/h3&gt;&lt;span id=&quot;UnivContactEmail&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;대학교 이메일&lt;/h4&gt;&lt;/span&gt;&lt;/td&gt;
                    &lt;td&gt;&lt;h3&gt;◦ Website&lt;/h3&gt;&lt;span id=&quot;UnivWebsite&quot;&gt;&lt;h4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;대학교 웹사이트&lt;/h4&gt;&lt;/spanwebsite&gt;&lt;/td&gt;
                &lt;/tr&gt;
            &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;div class=&quot;someinfo&quot;&gt;
            &lt;p&gt;학교 유형:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;사립/공립&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                &lt;span&gt;학교 규모:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;S/M/L/XL&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                &lt;span&gt;재적학생수:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;00명&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                &lt;span&gt;취업률:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;00%&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                &lt;span&gt;Exam Type:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;TOEFL, IELTS&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
                &lt;span&gt;QS World University Ranking:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: white;&quot;&gt;00등&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
        &lt;/div&gt;

        &lt;div class=&quot;messagebox2&quot; id=&quot;messagebox2&quot;&gt;
            &lt;h3&gt;◦ 학교 소개&lt;/h3&gt;
            &lt;p&gt;학교 소개입니다.&lt;/p&gt;&lt;br/&gt;

            &lt;h3&gt;◦ 설치 학과&lt;/h3&gt;
            &lt;p&gt;설치 학과는 00입니다.&lt;/p&gt;&lt;br/&gt;

            &lt;h3&gt;◦ Study Duration&lt;/h3&gt;
            &lt;p&gt;학기 기간입니다.&lt;/p&gt;&lt;br/&gt;

            &lt;h3&gt;◦ Requirement&lt;/h3&gt;
            &lt;h5&gt;- GPA&lt;/h5&gt;
            &lt;p&gt;000&lt;/p&gt;
            &lt;h5&gt;- Language Proficiency:&lt;/h5&gt;
            &lt;p&gt;000&lt;/p&gt;
        &lt;/div&gt;

    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre><h3 id="to-do-list-1">[To do list]</h3>
<p>✅ &#39;파견 대학&#39; 부분 db 생성하기
✅ 동적 select box 코드 작성하기
✅ 동적 select box와 db 연결하기
✅ 서버 만들기</p>
<br>

<h2 id="5-교환학생-학교생활-tip">5. 교환학생 학교생활 Tip</h2>
<h3 id="to-do-list-2">[To do list]</h3>
<p>✅ HTML 만들기</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SpartaCodingClub] 웹서비스 개발 프로젝트 : "FaceTheNew" 기획안]]></title>
            <link>https://velog.io/@waterlily_0101/211005-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@waterlily_0101/211005-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Tue, 05 Oct 2021 13:35:10 GMT</pubDate>
            <description><![CDATA[<h1 id="facethenew-기획안">FaceTheNew 기획안</h1>
<h2 id="1-web-service--facethenew">1. Web Service : &quot;FaceTheNew&quot;</h2>
<h3 id="✅-프로젝트-시작-이유">✅ 프로젝트 시작 이유</h3>
<blockquote>
</blockquote>
<h5 id="교환학생을-준비하면서-관련-정보를-얻기위해-구글링을-하거나-멘토링에-참여했었다-그-과정에서-외국의-파견교에-가기-위해-준비해야-하는것들-뿐만-아니라-실제로-교환학생-생활을-경험한-학생들로부터-학교생활--현지생활의-전반의-유용한-tip들을-알-수-있었다">교환학생을 준비하면서 관련 정보를 얻기위해 구글링을 하거나 멘토링에 참여했었다. 그 과정에서 외국의 파견교에 가기 위해 준비해야 하는것들 뿐만 아니라 실제로 교환학생 생활을 경험한 학생들로부터 학교생활 + 현지생활의 전반의 유용한 tip들을 알 수 있었다.</h5>
<h5 id="그런데-이-유익한-정보들이-혼재되어-있어서-관련-data들을-검색하고-필요없거나-중복되는-정보들을-삭제하고-이것들을-다시-정리하는데-많은-시간을-할애해야-했다-그래서-교환학생-관련-정보를-찾는-학생들이-이-data들을-좀-더-빠르고-효율적으로-connect하고-산재되어-있는-data들을-직관적으로-찾아볼-수-있는-웹서비스를-개발하고-싶어졌다">그런데 이 유익한 정보들이 혼재되어 있어서 관련 data들을 검색하고, 필요없거나 중복되는 정보들을 삭제하고, 이것들을 다시 정리하는데 많은 시간을 할애해야 했다. 그래서 교환학생 관련 정보를 찾는 학생들이 이 data들을 좀 더 빠르고 효율적으로 connect하고, 산재되어 있는 data들을 직관적으로 찾아볼 수 있는 웹서비스를 개발하고 싶어졌다.</h5>
<h3 id="✅-웹서비스-이름을-facethenew이라고-정한-이유">✅ 웹서비스 이름을 &quot;FaceTheNew&quot;이라고 정한 이유</h3>
<blockquote>
<h5 id="내가-교환학생을-가고자-하는-이유는-익숙하지-않은-공간에서-새로움에-부딪히는-경험을-하고-싶기-때문이다-교환학생을-가게-되면-지금까지-살아온-환경과-다른-문화와-마주하게-될-것이다-그-과정에서-삶을-대하는-새로운-경험치가-쌓일-것이다-나는-이-새로운-경험치를--facethenew를-통해-공유하고-싶다-그렇게-facethenew가-교환학생을-경험하게-될-또는-경험-중인-혹은-경험한-학생들의-이야기로-가득차는-place가-되길-바란다">내가 교환학생을 가고자 하는 이유는 익숙하지 않은 공간에서 새로움에 부딪히는 경험을 하고 싶기 때문이다. 교환학생을 가게 되면 지금까지 살아온 환경과 다른 문화와 마주하게 될 것이다. 그 과정에서 삶을 대하는 새로운 경험치가 쌓일 것이다. 나는 이 &#39;새로운 경험치&#39;를  &quot;FaceTheNew&quot;를 통해 공유하고 싶다. 그렇게 &quot;FaceTheNew&quot;가 교환학생을 경험하게 될, 또는 경험 중인, 혹은 경험한 학생들의 이야기로 가득차는 place가 되길 바란다.</h5>
</blockquote>
<br>

<h2 id="2-project-layout">2. Project Layout</h2>
<h3 id="①-main-home">① Main Home</h3>
<p><img src="https://images.velog.io/images/waterlily_0101/post/36d2a4a9-e155-4a90-a70a-65a6aa0650af/00-FaceTheNew-MAIN-HOME-%EC%9B%90%EB%B3%B8.gif" alt=""></p>
<hr>
<h3 id="②-facethenew-소개-page">② &#39;FaceTheNew 소개&#39; page</h3>
<p><img src="https://images.velog.io/images/waterlily_0101/post/df5a6025-b1eb-41a4-90f7-549e66bf9323/01-01-FaceTheNew-%EC%86%8C%EA%B0%9C-%EC%9B%90%EB%B3%B8.gif" alt=""></p>
<hr>
<h3 id="③-국가별-필수-지원-서류-page">③ &#39;국가별 필수 지원 서류&#39; page</h3>
<p><img src="https://images.velog.io/images/waterlily_0101/post/f918d0da-5429-4bdf-b8f2-7229e5ffa9df/02-01-FaceTheNew-%EA%B5%AD%EA%B0%80%EB%B3%84%ED%95%84%EC%88%98%EC%A7%80%EC%9B%90%EC%84%9C%EB%A5%98-%EA%B2%80%EC%83%89%EA%B2%B0%EA%B3%BC-%EC%9B%90%EB%B3%B8.gif" alt=""></p>
<hr>
<h3 id="④-파견-대학-검색-home">④ &#39;파견 대학 검색&#39; Home</h3>
<p><img src="https://images.velog.io/images/waterlily_0101/post/386a0431-51d6-47f9-a85f-fc64c19a7300/03-01-FaceTheNew-%ED%8C%8C%EA%B2%AC%EB%8C%80%ED%95%99%EA%B2%80%EC%83%89-HOME-%EC%9B%90%EB%B3%B8.gif" alt=""></p>
<h3 id="⑤-파견-대학-검색-결과-page">⑤ &#39;파견 대학 검색&#39; 결과 page</h3>
<p><img src="https://images.velog.io/images/waterlily_0101/post/5cef4592-c79d-486f-8609-e7c5f7143cf4/03-02-FaceTheNew-%ED%8C%8C%EA%B2%AC%EB%8C%80%ED%95%99%EA%B2%80%EC%83%89-%EA%B2%B0%EA%B3%BC-%EC%9B%90%EB%B3%B8.gif" alt=""></p>
<hr>
<h3 id="⑥-교환학생-학교생활-tip-page">⑥ &#39;교환학생 학교생활 Tip&#39; page</h3>
<p><img src="https://images.velog.io/images/waterlily_0101/post/48e06dca-36ae-4852-a891-34bafa97691c/04-01-FaceTheNew-%EA%B5%90%ED%99%98%ED%95%99%EC%83%9D%ED%95%99%EA%B5%90%EC%83%9D%ED%99%9CTIP-%EA%B2%80%EC%83%89%EA%B2%B0%EA%B3%BC-%EC%9B%90%EB%B3%B8.gif" alt=""></p>
<h2 id="3-data-sauce">3. Data Sauce</h2>
<blockquote>
<h4 id="qs-world-university-rankings-2022">QS World University Rankings 2022</h4>
<p><a href="https://www.topuniversities.com/university-rankings/world-university-rankings/2022">https://www.topuniversities.com/university-rankings/world-university-rankings/2022</a></p>
</blockquote>
<blockquote>
<h4 id="office-of-international-affairs-chung-ang-university">Office of International Affairs, Chung-Ang University</h4>
<p>교환학생 상대교 정보
<a href="https://oia.cau.ac.kr/bbs/board.php?tbl=k_bbs34">https://oia.cau.ac.kr/bbs/board.php?tbl=k_bbs34</a></p>
</blockquote>
<br>

<p>✈🌍🌎🌏🗺🧭</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[211003 개발일지]]></title>
            <link>https://velog.io/@waterlily_0101/211003-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@waterlily_0101/211003-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Sun, 03 Oct 2021 14:48:37 GMT</pubDate>
            <description><![CDATA[<h1 id="🎯원페이지쇼핑몰-업로드하기🎯">🎯원페이지쇼핑몰 업로드하기🎯</h1>
<h2 id="1-원페이지쇼핑몰-업로드하기">1. 원페이지쇼핑몰 업로드하기</h2>
<h3 id="1-1-robo3t를-이용해서-내-컴퓨터에서-→-서버에-있는-mongodb에-접속하기">1-1) Robo3T를 이용해서, &quot;내 컴퓨터에서&quot; → &quot;서버에 있는 mongoDB&quot;에 접속하기</h3>
<p>💻 좌측 상단 File 아래에 위치한 아이콘(컴퓨터모양) 클릭
↓ <code>Create</code> 클릭
↓ 접속 정보 세팅하기
↓ 상단 Authentication 탭 클릭</p>
<blockquote>
<p>① Perform authentication 체크박스 클릭
② 생성한 계정의 아이디와 비밀번호 입력 후, <code>save</code> 클릭</p>
</blockquote>
<h3 id="1-2-원페이지쇼핑몰-완성본을-filezilla로-ec2에-업로드하기">1-2) 원페이지쇼핑몰 완성본을 filezilla로 EC2에 업로드하기</h3>
<ul>
<li><p>그 전에! MongoDB 접속 세팅을 바꿔주기</p>
<blockquote>
<h5 id="💡-aws의-mongodb에-아이디와-비밀번호를-추가했으니-내-pymongo에도-아이디와-비밀번호를-입력해주어야-한다-그래야-pymongo가-올바르게-db에-접근할-수-있다">💡 AWS의 MongoDB에 아이디와 비밀번호를 추가했으니, 내 pymongo에도 아이디와 비밀번호를 입력해주어야 한다. 그래야 pymongo가 올바르게 DB에 접근할 수 있다.</h5>
<p><code>app.py</code> 파일을 열어서, 아래처럼 가운데 한 줄을 바꿔주기!!</p>
<h4 id="pymongo-계정-접속">pymongo 계정 접속</h4>
<p><code>client = MongoClient(&#39;mongodb://test:test@localhost&#39;, 27017)</code></p>
</blockquote>
</li>
<li><p>filezilla에서 homework 폴더 째로 드래그 드롭으로 EC2 인스턴스의 home/ubuntu 폴더에 업로드한다.</p>
</li>
</ul>
<h3 id="1-3-완성본을-실행해보기">1-3) 완성본을 실행해보기</h3>
<ul>
<li>실행하려고 시도하기<pre><code># home 디렉토리로 이동
cd ~
</code></pre></li>
</ul>
<h1 id="해당-폴더로-이동해서-아래-코드를-실행합니다">해당 폴더로 이동해서 아래 코드를 실행합니다.</h1>
<p>python app.py</p>
<pre><code>- 에러가 난다. 패키지를 설치하지 않았기 때문이다.</code></pre><h1 id="설치하기">설치하기</h1>
<p>pip install pymongo</p>
<pre><code>- 다시 실행해본다.</code></pre><p>python app.py</p>
<pre><code>
### 1-4) 접속해보기
- 브라우저에서 접속하기</code></pre><p>http://내AWS아이피:5000/</p>
<pre><code>
&lt;br&gt;

## 2. 포트포워딩
### 2-1) 포트 번호를 떼고 접속해보기</code></pre><p>http://내AWS아이피/</p>
<pre><code>
### 2-2) 포트 번호 없애기 - 기본 개념
&gt; - 지금은 5000포트에서 웹 서비스가 실행되고 있다. 그래서 매번 `:5000` 이라고 뒤에 붙여줘야 한다.
- http 요청에서는 80포트가 기본이기 때문에, 굳이 `:80`을 붙이지 않아도 자동으로 연결이 된다.
- 포트 번호를 입력하지 않아도 자동으로 접속되기 위해, 80포트로 오는 요청을 5000 포트로 전달하게 하는 포트포워
딩(port forwarding)을 사용해야 한다.
- 리눅스에서 기본으로 제공해주는 포트포워딩을 사용하면 된다.

&lt;br&gt;

## 3. nohup 설정하기
### 3-1) SSH 접속을 끊어도 서버가 계속 돌게 하기
- 현재 상황
: Git bash 또는 맥의 터미널을 종료하면 (=즉, SSH 접속을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않고 있다.
🎯 그러나 원격접속을 끊어도, 서버는 계속 동작해야 하는데..

- 원격 접속을 종료하더라도 서버가 계속 돌아가게 하기</code></pre><h1 id="아래의-명령어로-실행하면-된다">아래의 명령어로 실행하면 된다</h1>
<p>nohup python app.py &amp;</p>
<pre><code>
- 서버 종료하기 - 강제종료하는 방법</code></pre><h1 id="아래-명령어로-미리-pid-값프로세스-번호을-본다">아래 명령어로 미리 pid 값(프로세스 번호)을 본다</h1>
<p>ps -ef | grep &#39;app.py&#39;</p>
<h1 id="아래-명령어로-특정-프로세스를-죽인다">아래 명령어로 특정 프로세스를 죽인다</h1>
<p>kill -9 [pid값]</p>
<pre><code>
- 다시 켜기</code></pre><p>nohup python app.py &amp;</p>
<pre><code>
### 3-2) SSH 접속을 종료한 뒤, 접속해보기
- 브라우저에서 접속하기</code></pre><p>http://내AWS아이피/</p>
<pre><code>
&lt;br&gt;

## 4. 도메인 구입하기
### 4-1) 도메인 구입/연결
- 도메인을 구매한다는 것은, 네임서버를 운영해주는 업체에, IP와 도메인 매칭 유지비를 내는 것이다. 한국 또는 글로벌 업체 어디든 상관 없지만, 한국의 &#39;가비아&#39;라는 회사에서 구입해보겠다.
&gt; ##### 가비아 링크: https://my.gabia.com/service#/

### 4-2) 구입 후 우측상단에 위치한 &#39;My가비아&#39; 클릭
&gt; ##### ↓ DNS 관리툴 클릭
##### ↓ 도메인 연결 클릭
##### ↓ DNS 설정 클릭
##### ↓ 호스트 이름에 @, IP주소에 IP주소를 입력

### 4-3) 10분 정도 기다리기
- 네임서버에 내 도메인-IP가 매칭되는 시간이 필요하다.

### 4-4) IP주소로 접근해보기
- 내 IP주소로 지금 flask 서버가 잘 도고 있는지 먼저 확인해본다.</code></pre><p>http://내AWS아이피/</p>
<pre><code>- 약간의 시간을 가진 후, 내 도메인으로 접근하면, 접속이 된다.</code></pre><p>http://내도메인/</p>
<pre><code>
&lt;br&gt;

## 5. og 태그
### 5-1) og 태그 만들기
- 나홀로메모장에서 배웠던 `og:image`, `og:title`, `og:description` 태그
&gt; ##### 💡 내 프로젝트도 카톡/페이스북/슬랙에 공유했을 때 예쁘게 나오도록, 미리 꾸며보기

- `static` 폴더 아래에 이미지 파일을 넣고, 각자 프로젝트 HTML의 `&lt;head&gt;~&lt;/head&gt;` 사이에 아래 내용을 작성하면 og 태그를 개인 프로젝트에 사용할 수 있다.
&gt; ##### ① &quot;내 사이트의 제목&quot; 입력하기
&gt; ##### ② &quot;보고 있는 페이지의 내용 요약&quot; 입력하기
&gt; ##### ③ 적당한 이미지를 만들거나/골라서 static폴더에 ogimage.png로 저장하기!
&gt; ##### (사이즈 800*400인 이미지를 구글에서 검색!)

- og태그 넣기</code></pre><meta property="og:title" content="내 사이트의 제목" />
<meta property="og:description" content="보고 있는 페이지의 내용 요약" />
<meta property="og:image" content="{{ url_for('static', filename='ogimage.png') }}" />
```
***
> #### 💡 참고! 이미지를 바꿨는데 이전 ogimage가 그대로 나오는 경우
→ 페이스북/카카오톡 등에서 처음 것을 한동안 저장해놓기 때문에 그렇다. 그러므로 아래 링크에 들어 og 태그 초기화를 해주어야 한다.
##### ✅ 페이스북 og 태그 초기화 하기: https://developers.facebook.com/tools/debug/
##### ✅ 카카오톡 og 태그 초기화 하기: https://developers.kakao.com/tool/clear/og


]]></description>
        </item>
        <item>
            <title><![CDATA[211002 개발일지]]></title>
            <link>https://velog.io/@waterlily_0101/211002-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@waterlily_0101/211002-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Sat, 02 Oct 2021 10:15:52 GMT</pubDate>
            <description><![CDATA[<h1 id="프로젝트-서버에-올리는-방법">프로젝트 서버에 올리는 방법</h1>
<h2 id="1-웹서비스-런칭에-필요한-개념-소개">1. &quot;웹서비스 런칭&quot;에 필요한 개념 소개</h2>
<h5 id="📍-웹-서비스를-런칭하기-위해-클라이언트의-요청에-항상-응답해줄-수-있는-서버에-프로젝트를-실행시켜줄-것이다">📍 웹 서비스를 런칭하기 위해 클라이언트의 요청에 항상 응답해줄 수 있는 서버에 프로젝트를 실행시켜줄 것이다.</h5>
<h5 id="📍-언제나-요청에-응답하려면">📍 언제나 요청에 응답하려면,</h5>
<blockquote>
<h5 id="①-컴퓨터가-항상-켜져있고-프로그램이-실행되어-있어야하고">① 컴퓨터가 항상 켜져있고 프로그램이 실행되어 있어야하고,</h5>
</blockquote>
<h5 id="②-모두가-접근할-수-있는-공개-주소인-공개-ip-주소public-ip-address로-나의-웹-서비스에-접근할-수-있도록-해야한다">② 모두가 접근할 수 있는 공개 주소인 공개 IP 주소(Public IP Address)로 나의 웹 서비스에 접근할 수 있도록 해야한다.</h5>
<h5 id="📍-외부-접속이-가능하게-설정한-다음에-내-컴퓨터를-서버로-사용할-수도-있다">📍 외부 접속이 가능하게 설정한 다음에 내 컴퓨터를 서버로 사용할 수도 있다.</h5>
<h5 id="📍-aws-라는-클라우드-서비스에서-편하게-서버를-관리하기-위해서-항상-켜-놓을-수-있는-컴퓨터인-ec2-사용권을-구입해-서버로-사용할-것이다">📍 AWS 라는 클라우드 서비스에서 편하게 서버를 관리하기 위해서 항상 켜 놓을 수 있는 컴퓨터인 EC2 사용권을 구입해 서버로 사용할 것이다.</h5>
<blockquote>
<h4 id="ip-주소와-포트">&lt;IP 주소와 포트&gt;</h4>
</blockquote>
<ul>
<li>우리가 접속하는 컴퓨터는 숫자로 되어있는 주소(IP 주소)가 붙어있다. 우리가 아는 URL 은 우리가 알아보기 쉽게하는 등의 이유로 IP 주소를 알파벳으로 바꾼 것이다. 이렇게 변환해주는 시스템을 DNS 라고 한다.<blockquote>
<blockquote>
<h4 id="ex">EX)</h4>
<h4 id="url--httpgooglecom">URL = <a href="http://google.com">http://google.com</a></h4>
<h4 id="↓-dns-domain-name-system">↓ DNS (Domain Name System)</h4>
<h4 id="ip--http172217251480">IP = <a href="http://172.217.25.14:80">http://172.217.25.14:80</a></h4>
<h5 id="여기서-port--80에-해당">(여기서 <strong>Port =</strong> <code>:80</code>에 해당)</h5>
</blockquote>
</blockquote>
<h4 id="✅-ip-주소-줄여서-ip">✅ <strong>IP 주소</strong> (줄여서 IP)</h4>
<h5 id="-컴퓨터가-통신할-수-있도록-컴퓨터마다-가지는-고유한-주소라고-생각하면-된다-정확히는-네트워크가-가능한-모든-기기가-통신할-수-있도록-가지고-있는-특수한-번호이다-서버는-하나의-주소를-가지고-있다">: 컴퓨터가 통신할 수 있도록 컴퓨터마다 가지는 고유한 주소라고 생각하면 된다. 정확히는 네트워크가 가능한 모든 기기가 통신할 수 있도록 가지고 있는 특수한 번호이다. 서버는 하나의 주소를 가지고 있다.</h5>
<h4 id="✅-포트port">✅ <strong>포트(port)</strong></h4>
<h5 id="-하나의-ip에-여러-포트가-있다-하나의-포트에-하나의-프로그램을-실행시킬-수-있다">: 하나의 IP에 여러 포트가 있다. 하나의 포트에 하나의 프로그램을 실행시킬 수 있다.</h5>
</li>
</ul>
<br>

<h2 id="2-aws-서버-구매하기">2. AWS 서버 구매하기</h2>
<h3 id="2-1-aws-ec2-서버-구매하기">2-1) AWS EC2 서버 구매하기</h3>
<blockquote>
<h5 id="ec2-콘솔페이지">EC2 콘솔페이지</h5>
<p><a href="https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-2">https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-2</a></p>
</blockquote>
<h3 id="2-2-aws-ec2-서버-종료하는-방법-1년-후-자동결제-방지">2-2) AWS EC2 서버 종료하는 방법 (1년 후 자동결제 방지!)</h3>
<blockquote>
<h5 id="중지-또는-종료하는-법-무료-기간1년-후-결제가-되기-전에-이렇게-종료하기">중지 또는 종료하는 법. 무료 기간(1년) 후 결제가 되기 전에, 이렇게 종료하기!!</h5>
</blockquote>
<h5 id="✔-대상-인스턴스에-마우스-우클릭-→-인스턴스-상태-클릭">✔ 대상 인스턴스에 마우스 우클릭 → &#39;인스턴스 상태&#39; 클릭</h5>
<h5 id="✔-중지-또는-종료-중-하나를-클릭하면-명령을-실행한다">✔ 중지 또는 종료 중 하나를 클릭하면 명령을 실행한다.</h5>
<h3 id="2-3-aws-ec2에-접속하기">2-3) AWS EC2에 접속하기</h3>
<h4 id="1-ssh-secure-shell-protocol">(1) SSH (Secure Shell Protocol)</h4>
<ul>
<li>다른 컴퓨터에 접속할 때 쓰는 프로그램이다. 다른 것들 보다 보안이 상대적으로 뛰어나다.</li>
<li>접속할 컴퓨터에 22번 포트가 열려있어야 접속 가능하다. AWS EC2의 경우, 이미 22번 포트가 열려있다.</li>
</ul>
<h4 id="2-aws-ec2에-접속하기">(2) AWS EC2에 접속하기</h4>
<ul>
<li><strong>Window</strong>에는 SSH가 없으므로, <strong>git bash</strong>라는 프로그램을 이용!!<blockquote>
<h5 id="--git-bash를-실행하고-아래를-입력하기">- git bash를 실행하고, 아래를 입력하기</h5>
<p><code>ssh -i 받은키페어를끌어다놓기 ubuntu@AWX에적힌내아이피</code></p>
<h5 id="--ex-아래와-비슷한-생김새">- EX) 아래와 비슷한 생김새!</h5>
<p><code>ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20</code></p>
<h5 id="--key-fingerprint-관련-메시지가-나올-경우-yes-입력하기">- Key fingerprint 관련 메시지가 나올 경우 Yes 입력하기</h5>
<h5 id="--git-bash를-종료할-때는-exit-명령어를-입력하여-ssh-접속을-먼저-끊어주기">- git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어주기</h5>
</blockquote>
</li>
</ul>
<h3 id="2-4-간단한-리눅스-명령어">2-4) 간단한 리눅스 명령어</h3>
<ul>
<li>리눅스는 윈도우 같지 않아서, &#39;쉘 명령어&#39;를 통해 OS를 조작한다.
(일종의 마우스 역할)<blockquote>
<h4 id="가장-많이-쓰는-명령어"><strong>&lt;가장 많이 쓰는 명령어&gt;</strong></h4>
<h5 id="ls-내-위치의-모든-파일을-보여준다">ls: 내 위치의 모든 파일을 보여준다.</h5>
<h5 id="pwd-내-위치폴더의-경로를-알려준다">pwd: 내 위치(폴더의 경로)를 알려준다.</h5>
<h5 id="mkdir-내-위치-아래에-폴더를-하나-만든다">mkdir: 내 위치 아래에 폴더를 하나 만든다.</h5>
<h5 id="cd-갈-곳-나를-갈-곳-폴더로-이동시킨다">cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다.</h5>
<h5 id="cd---나를-상위-폴더로-이동시킨다">cd .. : 나를 상위 폴더로 이동시킨다.</h5>
<h5 id="cp--r-복사할-것-붙여넣기-할-것-복사-붙여넣기">cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기</h5>
<h5 id="rm--rf-지울-것-지우기">rm -rf [지울 것]: 지우기</h5>
<h5 id="sudo-실행-할-명령어-명령어를-관리자-권한으로-실행한다">sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다.</h5>
<h5 id="sudo-su-관리가-권한으로-들어간다-나올때는-exit으로-나옴">sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)</h5>
</blockquote>
<h4 id="💡-tip-리눅스-커널에서-윗화살표를-누르면-바로-전에-썼던-명령어가-나온다">💡 TIP. 리눅스 커널에서 윗화살표를 누르면 바로 전에 썼던 명령어가 나온다.</h4>
</li>
</ul>
<br>

<h2 id="3-서버-세팅하기">3. 서버 세팅하기</h2>
<h3 id="3-1-filezilla를-이용해서-간단한-python-파일을-올려보자">3-1) filezilla를 이용해서, 간단한 python 파일을 올려보자.</h3>
<h4 id="1st-서버에-업로드-할-간단한-파일을-다운로드한다">1st. 서버에 업로드 할 간단한 파일을 다운로드한다.</h4>
<blockquote>
<p> EX) <strong><code>test.py</code></strong>
<a href="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/593aa12f-0c04%EE%82%8840dc-9573%EE%82%8840e1b6">https://s3-us-west-2.amazonaws.com/secure.notion-static.com/593aa12f-0c0440dc-957340e1b6</a></p>
</blockquote>
<blockquote>
<h5 id="아주-간단하게-이-정도만-적어보자">아주 간단하게, 이 정도만 적어보자.</h5>
</blockquote>
<h5 id="그리고-적당한-곳에-파일을-저장해보자">그리고 적당한 곳에 파일을 저장해보자.</h5>
<p><code>print(&#39;hello sparta!!&#39;)</code></p>
<h4 id="2nd-filezilla-실행-후-file-클릭-→-new-site-클릭-→-파일-제목-myec2-입력">2nd. filezilla 실행 후, File 클릭 → New Site 클릭 → 파일 제목 <code>myec2</code> 입력</h4>
<h4 id="3rd-정보들을-입력하고-ok-누르면-서버의-파일들을-볼-수-있다">3rd. 정보들을 입력하고, OK 누르면 서버의 파일들을 볼 수 있다.</h4>
<p>(HOST: 내 EC2서버의 IP // User: ubuntu로 입력)</p>
<h4 id="4th-마우스로-드래그-해서-파일을-업로드다운로드하면-된다">4th. 마우스로 드래그 해서 파일을 업로드/다운로드하면 된다.</h4>
<h3 id="3-2-파이썬-파일-실행해보기">3-2) 파이썬 파일 실행해보기</h3>
<ul>
<li>EC2 콘솔창에서 아래와 같이 입력하기<blockquote>
<h5 id="home-디렉토리로-이동">home 디렉토리로 이동</h5>
<p><code>cd ~</code></p>
<h5 id="실행-콘솔창에-hellow-world가-뜨는-것을-확인-할-수-있다">실행. 콘솔창에 hellow world!가 뜨는 것을 확인 할 수 있다.</h5>
<p><code>python3 test.py</code></p>
</blockquote>
</li>
</ul>
<h3 id="3-3-서버-환경-통일하기">3-3) 서버 환경 통일하기</h3>
<h4 id="💡-지금-막-컴퓨터를-구매한-상태이기-때문에-여기에-업그레이드-db설치-명령어-통일-등의-세팅을-해줘야-본격적으로-이용할-때-편리하다">💡 지금 막! 컴퓨터를 구매한 상태이기 때문에 여기에 <code>업그레이드, DB설치, 명령어 통일 등의 세팅</code>을 해줘야 본격적으로 이용할 때 편리하다.</h4>
<blockquote>
<p><strong>EC2 한방에 세팅하기</strong>
<a href="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3623fe8%EE%82%888b17%EE%82%8845d1-bb70%EE%82%88304e88dfb537/initial_ec2.sh">https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3623fe88b1745d1-bb70304e88dfb537/initial_ec2.sh</a></p>
</blockquote>
<blockquote>
<h5 id="✔-filezilla로-업로드하고-git-bash또는-터미널에서-아래-코드를-차례대로-입력해주기">✔ filezilla로 업로드하고, git bash(또는 터미널)에서 아래 코드를 차례대로 입력해주기</h5>
</blockquote>
<h5 id="✔-3분-정도-기다리면-모든-세팅이-완료된다">✔ 3분 정도 기다리면 모든 세팅이 완료된다.</h5>
<p><code>sudo chmod 755 initial_ec2.sh</code>
<code>./initial_ec2.sh</code></p>
<h3 id="3-4-다시-파이썬-파일을-실행해보기">3-4) 다시, 파이썬 파일을 실행해보기</h3>
<h4 id="💡-이제-python-이라고-입력해도-가능">💡 이제, <code>python</code> 이라고 입력해도 가능!</h4>
<blockquote>
<p><code>python test.py</code></p>
</blockquote>
<br>

<h2 id="4-서버-환경-세팅---한-걸음-더">4. 서버 환경 세팅 - [한 걸음 더]</h2>
<h3 id="4-1-한국시간-세팅">4-1) 한국시간 세팅</h3>
<blockquote>
<h5 id="--ec2-컴퓨터의-시간대를-한국으로-맞추는-명령어">- EC2 컴퓨터의 시간대를 한국으로 맞추는 명령어</h5>
</blockquote>
<pre><code>sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime</code></pre><h3 id="4-2-파이썬-python3-→-python">4-2) 파이썬 (python3 → python)</h3>
<blockquote>
<h5 id="--python3-명령어를-python으로-사용할-수-있게-하는-명령어">- python3 명령어를 python으로 사용할 수 있게 하는 명령어</h5>
</blockquote>
<pre><code>sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10</code></pre><h3 id="4-3-pip-pip3-→-pip">4-3) pip (pip3 → pip)</h3>
<blockquote>
<h5 id="1-pip3-설치">1) pip3 설치</h5>
</blockquote>
<h5 id="2-pip3-명령어를-pip으로-사용할-수-있게-하는-명령어">2) pip3 명령어를 pip으로 사용할 수 있게 하는 명령어</h5>
<h5 id="-한-줄-씩-복사-붙여넣기">* 한 줄 씩 복사 붙여넣기!</h5>
<blockquote>
<h5 id="pip3-설치">pip3 설치</h5>
<p><code>sudo apt-get update</code>
<code>sudo apt-get install -y python3-pip</code></p>
</blockquote>
<blockquote>
<h5 id="pip3-대신-pip라고-입력하기-위한-명령어">pip3 대신 pip라고 입력하기 위한 명령어</h5>
</blockquote>
<pre><code>sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1</code></pre><h3 id="4-4-mongodb-설치">4-4) mongoDB 설치</h3>
<h4 id="1-mongodb-설치-코드">(1) mongoDB 설치 코드</h4>
<blockquote>
<pre><code>wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -</code></pre></blockquote>
<pre><code>
&gt; ```
echo &quot;deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse&quot; | sudo tee /e</code></pre><blockquote>
<p><code>sudo apt-get update</code></p>
</blockquote>
<blockquote>
<p><code>sudo apt-get install -y mongodb-org</code></p>
</blockquote>
<h4 id="2-mongodb-실행하기">(2) mongoDB 실행하기</h4>
<blockquote>
<h5 id="✔--실행-아무-반응이-없으면-잘-실행된-것">✔  실행. 아무 반응이 없으면, 잘 실행된 것!</h5>
</blockquote>
<h5 id="✔--리눅스는-보통-잘-되면-아무것도-안나온다">✔  리눅스는 보통 잘 되면 아무것도 안나온다.</h5>
<p><code>sudo service mongod start</code></p>
<h4 id="3-mongodb-접속-계정-생성하기">(3) mongoDB 접속 계정 생성하기</h4>
<ul>
<li><p>mongoDB를 외부에 열어주기 전에, 접속에 필요한 아이디와 비밀번호를 세팅해보자!! (설정 안 하면 누구나 DB정보를 볼 수 있다는...)</p>
<blockquote>
<p><code>mongo</code></p>
</blockquote>
</li>
<li><p>좌측에 <code>&gt;</code> 표시가 나오면 성공적으로 MongoDB에 접속한 것이다!</p>
</li>
<li><p>다음 명령어를 순차적으로 입력하기 (test, test 자리에 내가 넣고 싶은 아이디/비밀번호를 넣으면 된다.(영어로))</p>
<blockquote>
<h5 id="✔-admin으로-계정-바꾸기">✔ admin으로 계정 바꾸기</h5>
<p><code>use admin;</code></p>
<h5 id="✔-계정-생성하기">✔ 계정 생성하기</h5>
<p><code>db.createUser({user: &quot;test&quot;, pwd: &quot;test&quot;, roles:[&quot;root&quot;]});</code></p>
</blockquote>
</li>
<li><p>그 후</p>
<blockquote>
<h5 id="✔-나오기">✔ 나오기</h5>
<p><code>exit</code></p>
</blockquote>
<h5 id="✔-mongodb-재시작">✔ MongoDB 재시작</h5>
<p><code>sudo service mongod restart</code></p>
</li>
</ul>
<h4 id="4-mongodb를-외부에-열어주기">(4) mongoDB를 외부에 열어주기</h4>
<blockquote>
<h5 id="💡-mongodb는-디폴트로-내부에서만-접속을-허용하고-있다-이-작업은-외부에서-접근이-가능하도록-잠금을-풀어는-것이다">💡 mongoDB는 디폴트로 내부에서만 접속을 허용하고 있다. 이 작업은 외부에서 접근이 가능하도록 잠금을 풀어는 것이다.</h5>
</blockquote>
<ul>
<li>리눅스 자체 에디터(고급 메모장 정도로 생각!)인 Vimn이 등장한다.</li>
<li><code>a</code>를 눌러야 입력 모드가 되고, <code>:wq</code>를 눌러야 저장하고 나올 수 있다.<blockquote>
<p><code>sudo vi /etc/mongod.conf</code></p>
<h5 id="sudo-관리자superuser-권한으로-다음을-실행">sudo: 관리자(SuperUser) 권한으로 다음을 실행</h5>
<h5 id="-관리자-권한으로-etc-폴더-아래-mongodconf-파일을-vim으로-켜줘라는-뜻">=&gt; &quot;관리자 권한으로 /etc 폴더 아래 mongod.conf 파일을 Vim으로 켜줘!&quot;라는 뜻</h5>
</blockquote>
</li>
<li>위 멸영어 실행 후, 아래 방향 화살 키 누르기</li>
</ul>
<blockquote>
<p>입력 모드 전환
<code>a</code></p>
</blockquote>
<ul>
<li><code>bindIp:</code> 내용을 <code>0.0.0.0</code>으로</li>
<li><code>security:</code> 내용을 <code>authorization: enabled</code>로  바꾸기</li>
</ul>
<blockquote>
<h5 id="내용-저장하고-에디터-종료하기-esc-누르고-다음-입력">내용 저장하고 에디터 종료하기. esc 누르고 다음 입력.</h5>
<p><code>:wq</code></p>
</blockquote>
<h5 id="재시작">재시작</h5>
<p><code>sudo service mongod restart</code></p>
<h4 id="5-robo3t를-이용해서-내-컴퓨터에서-→-서버에-있는-mongodb에-접속하기">(5) Robo3T를 이용해서, &quot;내 컴퓨터에서&quot; → &quot;서버에 있는 mongoDB&quot;에 접속하기</h4>
<p>💻 좌측 상단 File 아래에 위치한 아이콘(컴퓨터모양) 클릭
 ↓ <code>Create</code> 클릭
 ↓ 접속 정보 세팅하기
 ↓ 상단 Authentication 탭 클릭</p>
<blockquote>
<p>① Perform authentication 체크박스 클릭
② 생성한 계정의 아이디와 비밀번호 입력 후, <code>save</code> 클릭</p>
</blockquote>
<h3 id="4-5-포트포워딩-80포트-→-5000포트">4-5) 포트포워딩 (80포트 → 5000포트)</h3>
<blockquote>
<h5 id="--80포트로-들어오는-요청을-5000포트로-넘겨주는-명령어">- 80포트로 들어오는 요청을 5000포트로 넘겨주는 명령어</h5>
</blockquote>
<pre><code>sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000</code></pre><br>

<h2 id="5-flask-서버-실행해보기">5. Flask 서버 실행해보기</h2>
<h3 id="5-1-기초적인-flask-서버-파일-만들기">5-1) 기초적인 flask 서버 파일 만들기</h3>
<ul>
<li><code>app.py</code> 파일 준비<pre><code>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;:
    app.run(&#39;0.0.0.0&#39;, port=5000, debug=True)</p>
<pre><code>- filezilla를 통해 EC2에 업로드한 다음, 실행해보기</code></pre><h1 id="실행">실행</h1>
<p>python app.py</p>
<pre><code>🎯 실행시키면, &#39;flask 패키지가 없다&#39;는 에러가 난다. 패키지를 설치해야 한다.

### 5-2) pip로 패키지 설치하기
&gt; ##### 💡 file → setting → ..에서 `+` 버튼 누르고 설치했던 작업을, 명령어로 해야한다.
`pip install flask`


### 5-3) 다시 flask 서버를 실행해보기
- 아래 명령어로 flask 서버를 실행한다.</code></pre><p>python app.py</p>
<pre><code>- 서버 실행이 되면, 크롬에서 접속을 해본다.
✔ 크롬 브라우저 창에 아래와 같이 입력한다.</code></pre><p>http://[내 EC2 IP]:5000/</p>
<p>```
🎯 아직 작동하지 않는다. AWS에서 약간의 설정이 더 필요하다.</p>
<br>

<h2 id="6-aws에서-포트-열어주기">6. AWS에서 포트 열어주기</h2>
<h3 id="6-1-aws에서-5000포트-열어주기">6-1) AWS에서 5000포트 열어주기</h3>
<h5 id="--ec2-서버가상의-내-컴퓨터에서-포트를-따로-설정하는-것-외에도-aws-ec2에서도-자체적으로-포트를-열고닫을-수-있게-관리를-하고-있다">- EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도, AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있다.</h5>
<blockquote>
<h5 id="→-그래서-aws-ec2-security-group에서-인바운드-요청-포트를-열어줘야-한다">→ 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 한다.</h5>
</blockquote>
<h5 id="💻-일단-ec2-관리-콘솔로-들어간다-그리고-보안그룹영문-security-group을-눌러-들어간다">💻 일단, EC2 관리 콘솔로 들어간다. 그리고 보안그룹(영문: Security Group)을 눌러 들어간다.</h5>
<h5 id="↓-해당-보안그룹을-클릭한다">↓ 해당 보안그룹을 클릭한다.</h5>
<h5 id="↓-edit-inbound-rules를-선택한다">↓ Edit inbound rules를 선택한다.</h5>
<h5 id="↓-아래--세-가지-포트를-추가한다">↓ 아래  세 가지 포트를 추가한다.</h5>
<blockquote>
<h5 id="①-80포트-http-접속을-위한-기본포트">① 80포트: HTTP 접속을 위한 기본포트</h5>
</blockquote>
<h5 id="②-5000포트-flask-기본포트">② 5000포트: flask 기본포트</h5>
<h5 id="③-27017포트-외부에서-mongodb-접속을-하기-위한-포트">③ 27017포트: 외부에서 mongoDB 접속을 하기 위한 포트</h5>
<h3 id="6-2-다시-접속해보기">6-2) 다시 접속해보기!!</h3>
<ul>
<li>http://내아이피:5000
→ 잘 작동하는 것을 확인할 수 있다.</li>
<li>이제 <code>app.py</code> 파일을 수정하고, 다듬어서 올리면 진짜 프로젝트가 된다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[210926 개발일지]]></title>
            <link>https://velog.io/@waterlily_0101/210926-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@waterlily_0101/210926-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Sun, 26 Sep 2021 12:25:38 GMT</pubDate>
            <description><![CDATA[<h1 id="1-flask시작하기---서버만들기">1. Flask시작하기 - 서버만들기</h1>
<h2 id="1-1-flask-패키지-설치하기">1-1) Flask 패키지 설치하기</h2>
<p>✅ 윈도우</p>
<blockquote>
<h4 id="좌상단file-→-setting-→-python-interpreter-→-python-interpreter-화면에서--버튼-누르기-→-flask-검색-→-install-package-클릭">좌상단File → setting → Python interpreter → Python interpreter 화면에서 + 버튼 누르기 → <code>Flask</code> 검색 → Install package 클릭</h4>
</blockquote>
<br>

<h2 id="1-2-flask-기초--기본-실행">1-2) Flask 기초 : 기본 실행</h2>
<ul>
<li>Flask 프레임워크: 서버를 구동시켜주는 편한 코드 모음. 
(서버를 구동하려면 필요한 복잡한 일들을 쉽게 가져다 쓸 수 있다.)</li>
<li><strong>app.py</strong> 파일을 만들어 아래 코드를 붙여넣는다.
(통상적으로 flask 서버를 돌리는 파일은 <strong>app.py</strong>라고 이름 짓는다!)</li>
</ul>
<h3 id="✅-flask-시작-코드">✅ flask 시작 코드</h3>
<pre><code>from flask import Flask
app = Flask(__name__)

@app.route(&#39;/&#39;)
def home():
    return &#39;This is Home!&#39;

if __name__ == &#39;__main__&#39;:
app.run(&#39;0.0.0.0&#39;,port=5000,debug=True)</code></pre><br>

<h1 id="2-flask시작하기---html-파일-주기">2. Flask시작하기 - HTML 파일 주기</h1>
<h2 id="2-1-flask-기초--기본-폴더구조">2-1) Flask 기초 : 기본 폴더구조</h2>
<ul>
<li><p>Flask 서버를 만들 때는 항!상!
프로젝트 폴더 안에, 아래 세 개를 만들고 시작하기!!!</p>
<blockquote>
<p>① <strong>static 폴더</strong> : 이미지, css파일을 넣어둔다.
② <strong>templates 폴더</strong> : html파일을 넣어둔다.
③ <strong>app.py 파일</strong></p>
</blockquote>
</li>
<li><p>venv은 실제로 보이지만, <strong>안 보인다</strong>고 생각하기</p>
</li>
</ul>
<br>

<h2 id="2-2-flask-기초--html-파일-불러오기">2-2) Flask 기초 : HTML 파일 불러오기</h2>
<blockquote>
<p><strong>templates</strong> 폴더는 HTML 파일을 담아두고, 불러오는 역할을 한다!</p>
</blockquote>
<h3 id="1-간단한-indexhtml-파일을-templates-안에-만들기">(1) 간단한 index.html 파일을 templates 안에 만들기</h3>
<p>✅ index.html 예제코드</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;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><h3 id="2-html-파일-불러오기">(2) html 파일 불러오기</h3>
<blockquote>
<p>flask 내장함수 render_template 이용하기!!!</p>
</blockquote>
<pre><code>from flask import Flask, render_template
app = Flask(__name__)

## URL 별로 함수명이 같거나,
## route(&#39;/&#39;) 등의 주소가 같으면 안됩니다.

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

if __name__ == &#39;__main__&#39;:
    app.run(&#39;0.0.0.0&#39;, port=5000, debug=True)</code></pre><br>

<h1 id="3-flask시작하기---api-만들기">3. Flask시작하기 - API 만들기</h1>
<h2 id="3-1-get-post-방식">3-1) GET, POST 방식</h2>
<h3 id="✅-get">✅ GET</h3>
<blockquote>
<ul>
<li><strong>데이터 조회(Read)</strong>를 요청할 때
EX) 영화 목록 조회</li>
</ul>
</blockquote>
<ul>
<li>데이터 전달 : URL 뒤에 물음표를 붙여 key=value로 전달
EX) 예: google.com?q=북극곰</li>
</ul>
<h3 id="✅-post">✅ POST</h3>
<blockquote>
<ul>
<li><strong>데이터 생성(Create), 변경(Update), 삭제(Delete)</strong> 요청할 때
EX) 회원가입, 회원탈퇴, 비밀번호 수정</li>
</ul>
</blockquote>
<ul>
<li>데이터 전달 : 바로 보이지 않는 HTML body에 key:value 형태로 전달</li>
</ul>
<br>

<h2 id="3-2-get-post-요청에서-클라이언트의-데이터를-얻는-방법">3-2) GET, POST 요청에서 클라이언트의 데이터를 얻는 방법</h2>
<ul>
<li>예를 들어, 클라이언트에서 서버에 title_give란 키 값으로 데이터를 들고왔다고 해보자.</li>
<li>받은 값을 개발자가 볼 수 있게 print로 찍어볼 수 있게 했다.</li>
</ul>
<h3 id="✅-get-요청-api코드">✅ GET 요청 API코드</h3>
<pre><code>@app.route(&#39;/test&#39;, methods=[&#39;GET&#39;])
def test_get():
    title_receive = request.args.get(&#39;title_give&#39;)
    print(title_receive)
    return jsonify({&#39;result&#39;:&#39;success&#39;, &#39;msg&#39;: &#39;이 요청은 GET!&#39;})</code></pre><h3 id="✅-get-요청-확인-ajax코드">✅ GET 요청 확인 Ajax코드</h3>
<pre><code>$.ajax({
    type: &quot;GET&quot;,
    url: &quot;/test?title_give=봄날은간다&quot;,
    data: {},
    success: function(response){
        console.log(response)
    }
})</code></pre><h3 id="✅-post-요청-api코드">✅ POST 요청 API코드</h3>
<pre><code>@app.route(&#39;/test&#39;, methods=[&#39;POST&#39;])
def test_post():
     title_receive = request.form[&#39;title_give&#39;]
     print(title_receive)
     return jsonify({&#39;result&#39;:&#39;success&#39;, &#39;msg&#39;: &#39;이 요청은 POST!&#39;})</code></pre><h3 id="✅-post-요청-확인-ajax코드">✅ POST 요청 확인 Ajax코드</h3>
<pre><code>$.ajax({
    type: &quot;POST&quot;,
    url: &quot;/test&quot;,
    data: { title_give:&#39;봄날은간다&#39; },
    success: function(response){
        console.log(response)
    }
})</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[SpartaCodingClub] 힙한취미코딩 개발일지 (2)]]></title>
            <link>https://velog.io/@waterlily_0101/%ED%9E%99%ED%95%9C%EC%B7%A8%EB%AF%B8%EC%BD%94%EB%94%A9-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80-2</link>
            <guid>https://velog.io/@waterlily_0101/%ED%9E%99%ED%95%9C%EC%B7%A8%EB%AF%B8%EC%BD%94%EB%94%A9-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80-2</guid>
            <pubDate>Fri, 17 Sep 2021 18:42:03 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h4 id="🎈힙한취미코딩-이벤트-url">🎈힙한취미코딩 이벤트 URL</h4>
<h6 id="httpsspartacodingclubkrhiputm_sourcekakao_plusfriendutm_mediumcrmutm_campaignec98a8eb9dbcec9db8utm_contentecb9b4ecb9b4ec98a4ed948cecb99ceca084ec8898utm_termeab2bded9288eab095eca1b0_210913"><a href="https://spartacodingclub.kr/hip?utm_source=kakao_plusfriend&amp;utm_medium=crm&amp;utm_campaign=%EC%98%A8%EB%9D%BC%EC%9D%B8&amp;utm_content=%EC%B9%B4%EC%B9%B4%EC%98%A4%ED%94%8C%EC%B9%9C%EC%A0%84%EC%88%98&amp;utm_term=%EA%B2%BD%ED%92%88%EA%B0%95%EC%A1%B0_210913">https://spartacodingclub.kr/hip?utm_source=kakao_plusfriend&amp;utm_medium=crm&amp;utm_campaign=%EC%98%A8%EB%9D%BC%EC%9D%B8&amp;utm_content=%EC%B9%B4%EC%B9%B4%EC%98%A4%ED%94%8C%EC%B9%9C%EC%A0%84%EC%88%98&amp;utm_term=%EA%B2%BD%ED%92%88%EA%B0%95%EC%A1%B0_210913</a></h6>
<h4 id="🎈-미션-완성-작품-url">🎈 미션 완성 작품 URL</h4>
<h6 id="httpsxmasspartacodingclubkrckpncwkzt1fbxmashtml"><a href="https://xmas.spartacodingclub.kr/CkpnCWKzT1Fb/xmas.html">https://xmas.spartacodingclub.kr/CkpnCWKzT1Fb/xmas.html</a></h6>
</blockquote>
<br>

<h1 id="힙한취미코딩-2일차-_mission_">[힙한취미코딩 2일차 _MISSION_]</h1>
<h1 id="🎯나만의-invitation-card-만들어보기🎯">🎯나만의 Invitation Card 만들어보기!🎯</h1>
<h2 id="📍-1-카드-봉투-html-만들기">📍 1. 카드 봉투 HTML 만들기</h2>
<p><img src="https://images.velog.io/images/waterlily_0101/post/e6f559f3-b4a2-4a1f-bbb1-853d7f7e53f7/2021-09-18%20(9)_%EC%B9%B4%EB%93%9C%EB%B4%89%ED%88%AChtml%EB%A7%8C%EB%93%A4%EA%B8%B0.png" alt=""></p>
<h4 id="1-1-새로운-html-파일-만들기">1-1) 새로운 HTML 파일 만들기</h4>
<blockquote>
<p>이름은 <code>xmas.html</code></p>
</blockquote>
<p>💡 <code>html:5</code> 입력후 <code>tab</code>을 누르면 템플릿이 자동 완성 된다!!</p>
<h4 id="1-2-배경색-바꾸기">1-2) 배경색 바꾸기</h4>
<blockquote>
<p>회색빛이 섞인 진청록색: <code>#264C59</code></p>
</blockquote>
<p>💡 배경색은 자신이 원하는 color &#39;pick&#39;하면 된다!!</p>
<h4 id="1-3-카드-봉투-이미지-가운데에-놓기">1-3) 카드 봉투 이미지 가운데에 놓기</h4>
<h5 id="✅-카드-봉투-이미지-url">✅ 카드 봉투 이미지 URL</h5>
<pre><code>https://media.istockphoto.com/vectors/mail-customer-service-icon-vector-id1152903919?k=20&amp;m=1152903919&amp;s=612x612&amp;w=0&amp;h=fSfMK-4dtkcHuujrDXk2mMZrQnl9QC6CHpeaL9jsRIk=</code></pre><h5 id="✅-head-태그-안의-style-태그-사이에">✅ <code>&lt;head&gt;</code> 태그 안의 <code>&lt;style&gt;</code> 태그 사이에</h5>
<pre><code>.envelope {
    width: 300px;
    height: 300px;

    background-image: url(&#39;https://media.istockphoto.com/vectors/mail-customer-service-icon-vector-id1152903919?k=20&amp;m=1152903919&amp;s=612x612&amp;w=0&amp;h=fSfMK-4dtkcHuujrDXk2mMZrQnl9QC6CHpeaL9jsRIk=&#39;);
    background-size: cover;
    background-position: center;

    margin: 100px auto 0px auto;
}</code></pre><h5 id="✅-body-태그-사이에">✅ <code>&lt;body&gt;</code> 태그 사이에</h5>
<pre><code>&lt;div class=&quot;envelope&quot;&gt;&lt;/div&gt;</code></pre><h4 id="1-4-카드-봉투-밑에-글씨-놓기">1-4) 카드 봉투 밑에 글씨 놓기</h4>
<h5 id="✅-head-태그-안의-style-태그-사이에-1">✅ <code>&lt;head&gt;</code> 태그 안의 <code>&lt;style&gt;</code> 태그 사이에</h5>
<pre><code>.envelope-title {
    color: white;
    text-align: center;
}

.envelope-msg {
    color: white;
    text-align: center;
}</code></pre><h5 id="✅-body-태그-사이에-1">✅ <code>&lt;body&gt;</code> 태그 사이에</h5>
<pre><code>&lt;h2 class=&quot;envelope-title&quot;&gt;2021 MS&#39;s Online Piano Recital Invitation Card&lt;/h2&gt;
&lt;h5 class=&quot;envelope-msg&quot;&gt;LET&#39;S OPEN IT!&lt;/h5&gt;</code></pre><h4 id="1-5-마지막으로-셋을-div로-묶어주기--class-붙여주기">1-5) 마지막으로, 셋을 div로 묶어주기 + class 붙여주기</h4>
<h5 id="✅-body-태그-사이에-2">✅ <code>&lt;body&gt;</code> 태그 사이에</h5>
<pre><code>&lt;div class=&quot;letter-close&quot;&gt;
    &lt;div class=&quot;envelope&quot; onclick=&quot;open_letter()&quot;&gt;&lt;/div&gt;
    &lt;h2 class=&quot;envelope-title&quot;&gt;2021 MS&#39;s Online Piano Recital Invitation Card&lt;/h2&gt;
    &lt;h5 class=&quot;envelope-msg&quot;&gt;LET&#39;S OPEN IT!&lt;/h5&gt;
&lt;/div&gt;</code></pre><blockquote>
<p><strong>WHY?</strong> 이 셋은 같이 나타나고, 없어져야 하는 존재!!
💡 즉, 함께 행동해야 하는 존재이기 때문에, div로 묶어준다.</p>
</blockquote>
<br>

<h2 id="📍-2-웹폰트-적용하기">📍 2. 웹폰트 적용하기</h2>
<p><img src="https://images.velog.io/images/waterlily_0101/post/563b0053-e1f0-4fcc-98d4-8d412b016e31/2021-09-18%20(10)_%EC%9B%B9%ED%8F%B0%ED%8A%B8%20%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0.png" alt=""></p>
<h4 id="2-1-구글-웹폰트-접속하기">2-1) 구글 웹폰트 접속하기</h4>
<blockquote>
<p><a href="https://fonts.google.com/">https://fonts.google.com/</a></p>
</blockquote>
<h4 id="2-2-원하는-글꼴-찾기">2-2) 원하는 글꼴 찾기</h4>
<blockquote>
<p>Josefin Sans체
<a href="https://fonts.google.com/specimen/Josefin+Sans#standard-styles">https://fonts.google.com/specimen/Josefin+Sans#standard-styles</a></p>
</blockquote>
<h4 id="2-3-select-this-style-클릭하기">2-3) Select this style 클릭하기</h4>
<h4 id="2-4-link-아래-태그들-복사하기">2-4) link 아래 태그들 복사하기</h4>
<h5 id="✅-head-태그-안에-위치한-title-태그-아래에-붙여넣기">✅ <code>&lt;head&gt;</code> 태그 안에 위치한 <code>&lt;title&gt;</code> 태그 아래에 붙여넣기</h5>
<pre><code>&lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.googleapis.com&quot;&gt;
&lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.gstatic.com&quot; crossorigin&gt;
&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Josefin+Sans:wght@500&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
</code></pre><h4 id="2-5-css-입히기">2-5) css 입히기</h4>
<h5 id="✅-head-태그-안의-style-태그-사이에-2">✅ <code>&lt;head&gt;</code> 태그 안의 <code>&lt;style&gt;</code> 태그 사이에</h5>
<pre><code>* {
    font-family: &#39;Josefin Sans&#39;, sans-serif;
}</code></pre><br>

<h2 id="📍-3-편지-html-만들기---르탄이">📍 3. 편지 HTML 만들기 - 르탄이</h2>
<p><img src="https://images.velog.io/images/waterlily_0101/post/0a885ba6-957d-4821-b91c-e70049c1552c/2021-09-18%20(14)_%EB%A5%B4%ED%83%84%EC%9D%B4.png" alt=""></p>
<h4 id="3-1-카드-봉투-html-안-보이게-해두기">3-1) 카드 봉투 HTML 안 보이게 해두기</h4>
<blockquote>
<p><code>display 값을 none으로</code> 주면 안 보이게 할 수 있다!!</p>
</blockquote>
<h5 id="✅-body-태그-사이에-3">✅ <code>&lt;body&gt;</code> 태그 사이에</h5>
<pre><code>&lt;div class=&quot;letter-close&quot;&gt;
    &lt;div class=&quot;envelope&quot;&gt;&lt;/div&gt;
    &lt;h2 class=&quot;envelope-title&quot;&gt;2021 MS&#39;s Online Piano Recital Invitation Card&lt;/h2&gt;
    &lt;h5 class=&quot;envelope-msg&quot;&gt;LET&#39;S OPEN IT!&lt;/h5&gt;
&lt;/div&gt;</code></pre><h5 id="✅-head-태그-안의-style-태그-사이에-3">✅ <code>&lt;head&gt;</code> 태그 안의 <code>&lt;style&gt;</code> 태그 사이에</h5>
<pre><code>.letter-close {
    display: none;
}  </code></pre><h4 id="3-2-르탄이-만들기">3-2) 르탄이 만들기</h4>
<h5 id="✅-르탄이-코드스니펫">✅ 르탄이 코드스니펫</h5>
<pre><code>https://s3.ap-northeast-2.amazonaws.com/materials.spartacodingclub.kr/xmas/Webp.net-gifmaker.gif</code></pre><p><strong>&lt;르탄이 이미지 띄우기&gt;</strong></p>
<h5 id="✅-head-태그-안의-style-태그-사이에-4">✅ <code>&lt;head&gt;</code> 태그 안의 <code>&lt;style&gt;</code> 태그 사이에</h5>
<pre><code>.rtan {
    background-color: white;

    width: 200px;
    height: 200px;

    background-image: url(&#39;https://s3.ap-northeast-2.amazonaws.com/materials.spartacodingclub.kr/xmas/Webp.net-gifmaker.gif&#39;);
    background-size: cover;
    background-position: center;
}</code></pre><h5 id="✅-body-태그-사이에-4">✅ <code>&lt;body&gt;</code> 태그 사이에</h5>
<pre><code>&lt;div class=&quot;rtan&quot;&gt;&lt;/div&gt;</code></pre><h4 id="3-3-르탄이를-동그랗게--흰-테두디로--가운데로">3-3) 르탄이를 동그랗게 + 흰 테두디로 + 가운데로</h4>
<h5 id="✅-head-태그-안의-style-태그-사이에-5">✅ <code>&lt;head&gt;</code> 태그 안의 <code>&lt;style&gt;</code> 태그 사이에</h5>
<pre><code>.rtan {
    background-color: white;

    width: 200px;
    height: 200px;

    background-image: url(&#39;https://s3.ap-northeast-2.amazonaws.com/materials.spartacodingclub.kr/xmas/Webp.net-gifmaker.gif&#39;);
    background-size: cover;
    background-position: center;

    margin: auto;

    border-radius: 100px;

    border: 5px solid white;
}</code></pre><blockquote>
<ul>
<li><code>border</code> 속성은 태그의 테두리를 설정하는 속성이다.</li>
</ul>
</blockquote>
<ul>
<li><code>5px solid white</code>는 순서대로 각각 &#39;테두리의 두께&#39;, &#39;테두리의 스타일&#39;, &#39;테두리의 색상&#39;을 의미하고 각 코드 명령에 따라 테두리를 변경한다.</li>
</ul>
<h4 id="3-4-르탄이-띄우기">3-4) 르탄이 띄우기</h4>
<h5 id="✅-head-태그-안의-style-태그-사이에-6">✅ <code>&lt;head&gt;</code> 태그 안의 <code>&lt;style&gt;</code> 태그 사이에</h5>
<pre><code>.rtan {
    background-color: white;

    width: 200px;
    height: 200px;

    background-image: url(&#39;https://s3.ap-northeast-2.amazonaws.com/materials.spartacodingclub.kr/xmas/Webp.net-gifmaker.gif&#39;);
    background-size: cover;
    background-position: center;

    margin: 30px auto 0px auto;

    border-radius: 100px;

    border: 5px solid white;
}</code></pre><h4 id="3-5-그림자-효과-넣어주기">3-5) 그림자 효과 넣어주기</h4>
<h5 id="✅-head-태그-안의-style-태그-사이에-7">✅ <code>&lt;head&gt;</code> 태그 안의 <code>&lt;style&gt;</code> 태그 사이에</h5>
<pre><code>.rtan {
    background-color: white;

    width: 200px;
    height: 200px;

    background-image: url(&#39;https://s3.ap-northeast-2.amazonaws.com/materials.spartacodingclub.kr/xmas/Webp.net-gifmaker.gif&#39;);
    background-size: cover;
    background-position: center;

    margin: 30px auto 0px auto;

    border-radius: 100px;

    border: 5px solid white;
    box-shadow: 0px 0px 10px 0px white;
}</code></pre><blockquote>
<ul>
<li>box-shadow 속성은 요소의 테두리를 감싼 그림자 효과를 추가한다.</li>
</ul>
</blockquote>
<br>

<h2 id="📍-4-편지-html-만들기---메시지">📍 4. 편지 HTML 만들기 - 메시지</h2>
<p><img src="https://images.velog.io/images/waterlily_0101/post/2f0f9330-2ace-4107-846f-674c15ef4445/2021-09-19_%EB%A9%94%EC%8B%9C%EC%A7%80.png" alt=""></p>
<h4 id="4-1-메시지-제목-넣기">4-1) 메시지 제목 넣기</h4>
<h5 id="하얀색-글씨--가운데에-놓기">&lt;하얀색 글씨 + 가운데에 놓기 &gt;</h5>
<h5 id="✅-head-태그-안의-style-태그-사이에-8">✅ <code>&lt;head&gt;</code> 태그 안의 <code>&lt;style&gt;</code> 태그 사이에</h5>
<pre><code>.hone {
    color: white;
    text-align: center;
}

.htwo {
    color: white;
    text-align: center;
}</code></pre><h5 id="✅-body-태그-사이에-5">✅ <code>&lt;body&gt;</code> 태그 사이에</h5>
<pre><code>&lt;h1 class=&quot;hone&quot;&gt;We invite medical workers&lt;/h1&gt;
&lt;h1 class=&quot;htwo&quot;&gt;to &#39;2021 MS&#39;s Online Piano Recital&#39;&lt;/h1&gt;</code></pre><h4 id="4-2-메시지-넣기">4-2) 메시지 넣기</h4>
<h5 id="메시지-쓰기">&lt;메시지 쓰기&gt;</h5>
<h5 id="✅-body-태그-사이에-6">✅ <code>&lt;body&gt;</code> 태그 사이에</h5>
<pre><code>&lt;div class=&quot;messagebox&quot;&gt;
    To. All Medical Workers &lt;br /&gt;
    We would like to express our gratitude to the medical personnel who are struggling more than anyone else to save COVID-19 patients and doing all they can to flatten the coronavirus. &lt;br /&gt;
    We wish for the medical staffs who are working hard even at this moment for human life to get a rest time through our online piano recital for a while. &lt;br /&gt;
    Sincerely, we are very appreciative of their efforts.
&lt;/div&gt;</code></pre><blockquote>
<ul>
<li><code>&lt;br /&gt;</code>는 &#39;줄바꿈&#39;을 의미!!</li>
</ul>
</blockquote>
<h5 id="메시지를-가운데로-오게-하기--메시지-박스에-색-넣기--그림자-효과-넣기">&lt;메시지를 가운데로 오게 하기 + 메시지 박스에 색 넣기 + 그림자 효과 넣기&gt;</h5>
<h5 id="✅-head-태그-안의-style-태그-사이에-9">✅ <code>&lt;head&gt;</code> 태그 안의 <code>&lt;style&gt;</code> 태그 사이에</h5>
<pre><code>.messagebox {
    background-color: ivory;

    width: 550px;
    margin: auto;

    color: burlywood;

    padding: 30px;

    font-size: 15px;
    line-height: 30px;

    box-shadow: 0px 0px 10px 0px white;
}</code></pre><blockquote>
<ul>
<li><code>line-height</code> 줄간격(줄의 높이)은 폰트 사이즈보다 큰게 보기에 좋다.</li>
</ul>
</blockquote>
<h5 id="from---넣기">&lt;from - 넣기&gt;</h5>
<h5 id="✅-head-태그-안의-style-태그-사이에-10">✅ <code>&lt;head&gt;</code> 태그 안의 <code>&lt;style&gt;</code> 태그 사이에</h5>
<pre><code>.from {
    text-align: right;
    margin-bottom: 0px;
}</code></pre><h5 id="✅-body-태그-사이에-7">✅ <code>&lt;body&gt;</code> 태그 사이에</h5>
<pre><code>&lt;div class=&quot;messagebox&quot;&gt;
    To. All Medical Workers &lt;br /&gt;
    We would like to express our gratitude to the medical personnel who are struggling more than anyone else to save COVID-19 patients and doing all they can to flatten the coronavirus. &lt;br /&gt;
    We wish for the medical staffs who are working hard even at this moment for human life to get a rest time through our online piano recital for a while. &lt;br /&gt;
    Sincerely, we are very appreciative of their efforts.
    &lt;p class=&quot;from&quot;&gt;From. MS&lt;/p&gt;
&lt;/div&gt;</code></pre><h4 id="4-3-메시지-제목-바깥쪽-여백글자-간격-조정하기">4-3) 메시지 제목 바깥쪽 여백(글자 간격) 조정하기</h4>
<h5 id="✅-head-태그-안의-style-태그-사이에-11">✅ <code>&lt;head&gt;</code> 태그 안의 <code>&lt;style&gt;</code> 태그 사이에</h5>
<pre><code>.hone {
    color: white;
    text-align: center;

    margin-top: 30px;
}

.htwo {
    color: white;
    text-align: center;

    margin-bottom: 30px;
}</code></pre><h4 id="4-4-마지막으로-div로-묶어주기--class-붙여주기">4-4) 마지막으로, div로 묶어주기 + class 붙여주기</h4>
<h5 id="✅-body-태그-사이에-8">✅ <code>&lt;body&gt;</code> 태그 사이에</h5>
<pre><code>&lt;div class=&quot;letter-open&quot;&gt;
    &lt;div class=&quot;rtan&quot;&gt;&lt;/div&gt;
    &lt;h1 class=&quot;hone&quot;&gt;We invite medical workers&lt;/h1&gt;
    &lt;h1 class=&quot;htwo&quot;&gt;to &#39;2021 MS&#39;s Online Piano Recital&#39;&lt;/h1&gt;
    &lt;div class=&quot;messagebox&quot;&gt;
        To. All Medical Workers &lt;br /&gt;
        We would like to express our gratitude to the medical personnel who are struggling more than anyone else to save COVID-19 patients and doing all they can to flatten the coronavirus. &lt;br /&gt;
        We wish for the medical staffs who are working hard even at this moment for human life to get a rest time through our online piano recital for a while. &lt;br /&gt;
        Sincerely, we are very appreciative of their efforts.
        &lt;p class=&quot;from&quot;&gt;From. MS&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;</code></pre><blockquote>
<p><strong>WHY?</strong> 편지 HTML 태그들은 같이 나타나고, 없어져야 하는 존재!!
💡 즉, 함께 행동해야 하는 존재이기 때문에, div로 묶어준다.</p>
</blockquote>
<br>

<h2 id="📍-5-모바일-버전-처리">📍 5. 모바일 버전 처리</h2>
<h4 id="5-1-크롬-개발자-도구-이용하기">5-1) 크롬 개발자 도구 이용하기</h4>
<blockquote>
<ul>
<li>마우스 오른쪽 키 누르고 → <code>검사</code> click → 모바일 보기 click</li>
</ul>
</blockquote>
<ul>
<li>Responsive로 맞추고, 가로길이를 356px로 맞추기</li>
</ul>
<h4 id="5-2-편지-html-모바일-버전-처리하기">5-2) 편지 HTML 모바일 버전 처리하기</h4>
<h5 id="✅-head-태그-안의-style-태그-사이에-12">✅ <code>&lt;head&gt;</code> 태그 안의 <code>&lt;style&gt;</code> 태그 사이에</h5>
<pre><code>@media screen and (max-width: 760px) {

}</code></pre><blockquote>
<p>↓ &#39;편지지 사이즈&#39;, &#39;르탄이 사이즈&#39;, &#39;편지 제목 폰트 사이즈&#39; 고쳐주기</p>
</blockquote>
<pre><code>@media screen and (max-width: 760px) {
    .messagebox {
        width: 300px;
        padding: 20px;
    }
    .rtan {
        margin: 50px auto 0px auto;
    }
    .hone {
        font-size: 22px;
    }
    .htwo {
        font-size: 22px;
    }
    .messagebox {
        margin-bottom: 50px;
    }
}    </code></pre><h4 id="5-3-카드-봉투-html-모바일-버전-처리하기">5-3) 카드 봉투 HTML 모바일 버전 처리하기</h4>
<blockquote>
<ul>
<li>잠시 편지를 숨기고, 카드 봉투를 보여주기!!</li>
</ul>
</blockquote>
<pre><code>.letter-close {
    display: block;
}

.letter-open {
    display: none;
}</code></pre><blockquote>
<p>↓ &#39;카드 봉투 위치&#39; 고쳐주기</p>
</blockquote>
<pre><code>@media screen and (max-width: 760px) {
    .messagebox {
        width: 300px;
        padding: 20px;
    }
    .rtan {
        margin: 50px auto 0px auto;
    }
    .hone {
        font-size: 22px;
    }
    .htwo {
        font-size: 22px;
    }
    .messagebox {
        margin-bottom: 50px;
    }
    .envelope {
        margin: 50px auto 0px auto;
    }
}        </code></pre><br>

<h2 id="📍-6-카드-봉투에-클릭-함수-붙이기---javascript">📍 6. 카드 봉투에 클릭 함수 붙이기 - Javascript</h2>
<h4 id="6-1-함수-만들기">6-1) 함수 만들기</h4>
<h5 id="열고-닫는-javascript-코드">&lt;열고 닫는 Javascript 코드&gt;</h5>
<h5 id="✅-head-태그-안의-script-태그-사이에">✅ <code>&lt;head&gt;</code> 태그 안의 <code>&lt;script&gt;</code> 태그 사이에</h5>
<pre><code>function open_letter() {
    document.getElementsByClassName(&quot;letter-close&quot;)[0].style.display = &#39;none&#39;
    document.getElementsByClassName(&quot;letter-open&quot;)[0].style.display = &#39;block&#39;
}</code></pre><h5 id="✅-body-태그-사이에-9">✅ <code>&lt;body&gt;</code> 태그 사이에</h5>
<pre><code>&lt;div class=&quot;envelope&quot; onclick=&quot;open_letter()&quot;&gt;&lt;/div&gt;</code></pre><h4 id="6-2-카드-봉투-마우스-모양-바꾸기">6-2) 카드 봉투 마우스 모양 바꾸기</h4>
<h5 id="✅-head-태그-안의-style-태그-사이에-13">✅ <code>&lt;head&gt;</code> 태그 안의 <code>&lt;style&gt;</code> 태그 사이에</h5>
<pre><code>.envelope {
    width: 300px;
    height: 300px;

    background-image: url(&#39;https://media.istockphoto.com/vectors/mail-customer-service-icon-vector-id1152903919?k=20&amp;m=1152903919&amp;s=612x612&amp;w=0&amp;h=fSfMK-4dtkcHuujrDXk2mMZrQnl9QC6CHpeaL9jsRIk=&#39;);
    background-size: cover;
    background-position: center;

    margin: 100px auto 0px auto;

    cursor: pointer;
}</code></pre><blockquote>
<ul>
<li><code>cursor</code> 속성을 이용하면 해당 태그 위에 위치하는 마우스 cursor의 모양을 바꿀 수 있다.</li>
</ul>
</blockquote>
<ul>
<li><code>pointer</code>는 손가락 모양의 클릭 가능한 버튼!!</li>
</ul>
<br>

<h2 id="📍-7-눈오는-효과-붙이기">📍 7. 눈오는 효과 붙이기</h2>
<p><img src="https://images.velog.io/images/waterlily_0101/post/ab28f7a1-a6d2-45d7-90b8-38f0d96e5f82/2021-09-18%20(13)_%EB%88%88%EC%98%A4%EB%8A%94%ED%9A%A8%EA%B3%BC%EB%B6%99%EC%9D%B4%EA%B8%B0.png" alt=""></p>
<h4 id="7-1-라이브러리-찾아보기">7-1) 라이브러리 찾아보기</h4>
<h5 id="✅-눈오는-효과-코드스니펫">✅ 눈오는 효과 코드스니펫</h5>
<pre><code>    &lt;script src=&quot;https://s3.ap-northeast-2.amazonaws.com/materials.spartacodingclub.kr/xmas/snow.js&quot;&gt;&lt;/script&gt;</code></pre><h5 id="✅-위-코드스니펫을-head-태그-안에-위치한-title-태그-아래에-붙여넣기">✅ 위 코드스니펫을 <code>&lt;head&gt;</code> 태그 안에 위치한 <code>&lt;title&gt;</code> 태그 아래에 붙여넣기</h5>
<br>

<h2 id="📍-8-히든메시지-넣어보기">📍 8. 히든메시지 넣어보기</h2>
<h4 id="8-1-르탄이에-함수-붙이기">8-1) 르탄이에 함수 붙이기</h4>
<h5 id="✅-head-태그-안의-script-태그-사이에-1">✅ <code>&lt;head&gt;</code> 태그 안의 <code>&lt;script&gt;</code> 태그 사이에</h5>
<pre><code>function go_rtan() {
    alert(&#39;앗, 어떻게 찾았지!&#39;);
    window.location.href=&#39;https://www.youtube.com/watch?v=E4zTPrVx4Lc&amp;list=OLAK5uy_m8Zrr2fonba63dH1AgQm9ywOGb5vt_ofk&amp;index=3&#39;;
}</code></pre><blockquote>
<ul>
<li>alert 메시지 띄우기: <code>alert(&#39;앗, 어떻게 찾았지!&#39;);</code></li>
</ul>
</blockquote>
<ul>
<li>링크로 이동하게 하기: <code>window.location.href=&#39;...&#39;;</code></li>
</ul>
<h5 id="✅-body-태그-사이에-10">✅ <code>&lt;body&gt;</code> 태그 사이에</h5>
<pre><code>&lt;div class=&quot;rtan&quot; onclick=&quot;go_rtan()&quot;&gt;&lt;/div&gt;</code></pre><br>

<h2 id="📍-9-공유를-위한-기초작업">📍 9. 공유를 위한 기초작업</h2>
<h4 id="카카오톡-페이스북에-공유하기">&lt;카카오톡, 페이스북에 공유하기&gt;</h4>
<h4 id="9-1-og-태그-넣기">9-1) og 태그 넣기</h4>
<p><img src="https://images.velog.io/images/waterlily_0101/post/a0323da7-488c-479f-a617-83455f0ecc56/2021-09-18%20(12)_og%ED%83%9C%EA%B7%B8%EB%84%A3%EA%B8%B0.jpg" alt=""></p>
<h5 id="✅-아래-코드스니펫을-head-태그-안에-위치한-title-태그-아래에-붙여넣기">✅ 아래 코드스니펫을 <code>&lt;head&gt;</code> 태그 안에 위치한 <code>&lt;title&gt;</code> 태그 아래에 붙여넣기</h5>
<pre><code>&lt;meta property=&quot;og:image&quot; content=&quot;https://media.istockphoto.com/photos/grand-piano-picture-id540856596?k=20&amp;m=540856596&amp;s=612x612&amp;w=0&amp;h=13JroUZzU-23Dd4afIbs_4-34KzuC7RW766VBDdzWdc=&quot;&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;2021 MS&#39;s Online Piano Recital&quot;&gt;
&lt;meta property=&quot;og:description&quot; content=&quot;For The Medical Workers&quot;&gt;
</code></pre><h4 id="9-2-favicon-넣기">9-2) favicon 넣기</h4>
<p><img src="https://images.velog.io/images/waterlily_0101/post/2c77448c-63cc-4087-bee6-2deb7c396de5/2021-09-18%20(13)_favicon%EB%84%A3%EA%B8%B0.png" alt=""></p>
<h5 id="✅-아래-코드스니펫을-head-태그-안에-위치한-title-태그-아래에-붙여넣기-1">✅ 아래 코드스니펫을 <code>&lt;head&gt;</code> 태그 안에 위치한 <code>&lt;title&gt;</code> 태그 아래에 붙여넣기</h5>
<pre><code>&lt;link rel=&quot;shortcut icon&quot; href=&quot;https://icons-for-free.com/iconfiles/png/512/Piano-1320568874543813841.png&quot;&gt;</code></pre><br>

<h2 id="📍-10-배포해보기">📍 10. 배포해보기</h2>
<h4 id="10-1-배포하고-url-받기">10-1) 배포하고, URL 받기</h4>
<p>💡 받은 링크를 카카오톡에 보내서 og:image가 잘 뜨는지 확인해보기!!</p>
<h5 id="✅-배포페이지-url">✅ 배포페이지 URL</h5>
<blockquote>
<p><a href="http://spartacodingclub.shop/upload_xmas">http://spartacodingclub.shop/upload_xmas</a></p>
</blockquote>
<h5 id="✅-미션-완성-작품-url">✅ 미션 완성 작품 URL</h5>
<blockquote>
<p><a href="https://xmas.spartacodingclub.kr/CkpnCWKzT1Fb/xmas.html">https://xmas.spartacodingclub.kr/CkpnCWKzT1Fb/xmas.html</a></p>
</blockquote>
<br>

<h1 id="🏆나만의-invitation-card-완성🏆">🏆나만의 Invitation Card 완성🏆</h1>
<p><img src="https://images.velog.io/images/waterlily_0101/post/22bc0da1-ed1f-4e7c-82bb-fc7e4c57116b/2021-09-18%20(13)_%EB%88%88%EC%98%A4%EB%8A%94%ED%9A%A8%EA%B3%BC%EB%B6%99%EC%9D%B4%EA%B8%B0.png" alt=""></p>
<h5 id="완성-코드">&lt;완성 코드&gt;</h5>
<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 http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;2021 MS&#39;s Online Piano Recital&lt;/title&gt;

    &lt;link rel=&quot;shortcut icon&quot; href=&quot;https://icons-for-free.com/iconfiles/png/512/Piano-1320568874543813841.png&quot;&gt;

    &lt;meta property=&quot;og:image&quot; content=&quot;https://media.istockphoto.com/photos/grand-piano-picture-id540856596?k=20&amp;m=540856596&amp;s=612x612&amp;w=0&amp;h=13JroUZzU-23Dd4afIbs_4-34KzuC7RW766VBDdzWdc=&quot;&gt;
    &lt;meta property=&quot;og:title&quot; content=&quot;2021 MS&#39;s Online Piano Recital&quot;&gt;
    &lt;meta property=&quot;og:description&quot; content=&quot;For The Medical Workers&quot;&gt;

    &lt;script src=&quot;https://s3.ap-northeast-2.amazonaws.com/materials.spartacodingclub.kr/xmas/snow.js&quot;&gt;&lt;/script&gt;

    &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.googleapis.com&quot;&gt;
    &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.gstatic.com&quot; crossorigin&gt;
    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Josefin+Sans:wght@500&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

    &lt;style&gt;
        * {
            font-family: &#39;Josefin Sans&#39;, sans-serif;
        }

        body {
            background-color: #264C59;
        }

        .envelope {
            width: 300px;
            height: 300px;

            background-image: url(&#39;https://media.istockphoto.com/vectors/mail-customer-service-icon-vector-id1152903919?k=20&amp;m=1152903919&amp;s=612x612&amp;w=0&amp;h=fSfMK-4dtkcHuujrDXk2mMZrQnl9QC6CHpeaL9jsRIk=&#39;);
            background-size: cover;
            background-position: center;

            margin: 100px auto 0px auto;

            cursor: pointer;
        }

        .envelope-title {
            color: white;
            text-align: center;
        }

        .envelope-msg {
            color: white;
            text-align: center;
        }

        .letter-close {
            display: block;
        }

        .letter-open {
            display: none;
        }

        .rtan {
            background-color: white;

            width: 200px;
            height: 200px;

            background-image: url(&#39;https://s3.ap-northeast-2.amazonaws.com/materials.spartacodingclub.kr/xmas/Webp.net-gifmaker.gif&#39;);
            background-size: cover;
            background-position: center;

            margin: 30px auto 0px auto;

            border-radius: 100px;

            border: 5px solid white;
            box-shadow: 0px 0px 10px 0px white;
        }

        .hone {
            color: white;
            text-align: center;

            margin-top: 30px;
        }

        .htwo {
            color: white;
            text-align: center;

            margin-bottom: 30px;
        }

        .messagebox {
            background-color: ivory;

            width: 550px;
            margin: auto;

            color: burlywood;

            padding: 30px;

            font-size: 15px;
            line-height: 30px;

            box-shadow: 0px 0px 10px 0px white;
        }

        .from {
            text-align: right;
            margin-bottom: 0px;
        }

        @media screen and (max-width: 760px) {
            .messagebox {
                width: 300px;
                padding: 20px;
            }
            .rtan {
                margin: 50px auto 0px auto;
            }
            .hone {
                font-size: 22px;
            }
            .htwo {
                font-size: 22px;
            }
            .messagebox {
                margin-bottom: 50px;
            }
            .envelope {
                margin: 50px auto 0px auto;
            }   
        }        
    &lt;/style&gt;

    &lt;script&gt;
        function open_letter() {
            document.getElementsByClassName(&quot;letter-close&quot;)[0].style.display = &#39;none&#39;
            document.getElementsByClassName(&quot;letter-open&quot;)[0].style.display = &#39;block&#39;
        }

        function go_rtan() {
            alert(&#39;앗, 어떻게 찾았지!&#39;);
            window.location.href=&#39;https://www.youtube.com/watch?v=E4zTPrVx4Lc&amp;list=OLAK5uy_m8Zrr2fonba63dH1AgQm9ywOGb5vt_ofk&amp;index=3&#39;;
        }
    &lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;div class=&quot;letter-close&quot;&gt;
        &lt;div class=&quot;envelope&quot; onclick=&quot;open_letter()&quot;&gt;&lt;/div&gt;
        &lt;h2 class=&quot;envelope-title&quot;&gt;2021 MS&#39;s Online Piano Recital Invitation Card&lt;/h2&gt;
        &lt;h5 class=&quot;envelope-msg&quot;&gt;LET&#39;S OPEN IT!&lt;/h5&gt;
    &lt;/div&gt;

    &lt;div class=&quot;letter-open&quot;&gt;
        &lt;div class=&quot;rtan&quot; onclick=&quot;go_rtan()&quot;&gt;&lt;/div&gt;
        &lt;h1 class=&quot;hone&quot;&gt;We invite medical workers&lt;/h1&gt;
        &lt;h1 class=&quot;htwo&quot;&gt;to &#39;2021 MS&#39;s Online Piano Recital&#39;&lt;/h1&gt;
        &lt;div class=&quot;messagebox&quot;&gt;
            To. All Medical Workers &lt;br /&gt;
            We would like to express our gratitude to the medical personnel who are struggling more than anyone else to save COVID-19 patients and doing all they can to flatten the coronavirus. &lt;br /&gt;
            We wish for the medical staffs who are working hard even at this moment for human life to get a rest time through our online piano recital for a while. &lt;br /&gt;
            Sincerely, we are very appreciative of their efforts.
            &lt;p class=&quot;from&quot;&gt;From. MS&lt;/p&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;

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

<p>나에게 힙한취미코딩 이벤트는 웹개발종합반에서 아직 다루지 않은 것들을 미리 쉽게 접해볼 수 있는 기회였다. 직접 웹페이지를 만들고 배포까지 해보니 너무 뿌뜻했다. 특히 모바일 버전 코드를 다시 짜보는 프로그래밍 과정이 되게 재밌었다. <code>@media screen and (max-width: 760px)</code> 코드를 사용해서 모바일 버전 코드를 따로 변경했는데, 어떻게 모바일 버전으로 웹페이지가 만들어지고 수정되는지 배울 수 있었다. 그리고 공유 기초 작업을 위해 og 태그와 favicon 넣는 것까지 해봤는데 이 부분이 너무 신기했다. 이렇게 코드를 하나하나씩 쌓아가니까 완성도 있는 웹페이지를 완성할 수 있었다. 이번 경험이 앞으로 웹페이지를 개발할 때 정말 큰 도움이 될 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ [SpartaCodingClub] 힙한취미코딩 개발일지 (1)]]></title>
            <link>https://velog.io/@waterlily_0101/%ED%9E%99%ED%95%9C%EC%B7%A8%EB%AF%B8%EC%BD%94%EB%94%A9-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80-1</link>
            <guid>https://velog.io/@waterlily_0101/%ED%9E%99%ED%95%9C%EC%B7%A8%EB%AF%B8%EC%BD%94%EB%94%A9-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80-1</guid>
            <pubDate>Fri, 17 Sep 2021 18:28:50 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h4 id="🎈힙한취미코딩-이벤트-url">🎈힙한취미코딩 이벤트 URL</h4>
<h6 id="httpsspartacodingclubkrhiputm_sourcekakao_plusfriendutm_mediumcrmutm_campaignec98a8eb9dbcec9db8utm_contentecb9b4ecb9b4ec98a4ed948cecb99ceca084ec8898utm_termeab2bded9288eab095eca1b0_210913"><a href="https://spartacodingclub.kr/hip?utm_source=kakao_plusfriend&amp;utm_medium=crm&amp;utm_campaign=%EC%98%A8%EB%9D%BC%EC%9D%B8&amp;utm_content=%EC%B9%B4%EC%B9%B4%EC%98%A4%ED%94%8C%EC%B9%9C%EC%A0%84%EC%88%98&amp;utm_term=%EA%B2%BD%ED%92%88%EA%B0%95%EC%A1%B0_210913">https://spartacodingclub.kr/hip?utm_source=kakao_plusfriend&amp;utm_medium=crm&amp;utm_campaign=%EC%98%A8%EB%9D%BC%EC%9D%B8&amp;utm_content=%EC%B9%B4%EC%B9%B4%EC%98%A4%ED%94%8C%EC%B9%9C%EC%A0%84%EC%88%98&amp;utm_term=%EA%B2%BD%ED%92%88%EA%B0%95%EC%A1%B0_210913</a></h6>
</blockquote>
<br>

<h1 id="힙한취미코딩-1일차-_mission_">[힙한취미코딩 1일차 _MISSION_]</h1>
<h1 id="🎯간단한-로그인-페이지-만들어보기🎯">🎯간단한 로그인 페이지 만들어보기!🎯</h1>
<h2 id="1-html-css">1. HTML?? CSS??</h2>
<p>로그인 페이지를 만들기 전에 HTML과 CSS가 각각 무엇이고 어떤 역할을 하는지 배웠다.</p>
<h4 id="📚-html--뼈대-css--꾸미기">📚 HTML = 뼈대, CSS = 꾸미기!!</h4>
<blockquote>
<p><strong>HTML</strong>은 &#39;구역과 텍스트를 나타내는 코드&#39;이고,
<strong>CSS</strong>는 &#39;잡은 구역을 꾸며주는 것&#39;이다.</p>
</blockquote>
<p>💡 HTML 코드 내에 CSS 파일을 불러와서 적용한다!!</p>
<h3 id="1-1-html-기초">1-1) HTML 기초</h3>
<blockquote>
<p><strong>HTML</strong>은 크게 <strong>head</strong>와 <strong>body</strong>로 구성되어 있다.</p>
</blockquote>
<ul>
<li><strong>head</strong> 안에는 &#39;페이지의 속성 정보&#39;를,</li>
<li><strong>body</strong> 안에는 &#39;페이지의 내용&#39;을 담는다.</li>
</ul>
<p>💡 head 안에 들어가는 대표적인 요소로 meta, title, link, style, script 등이 있다!!</p>
<blockquote>
<p>Visual Studio Code에서 HTML 파일을 만들어 거기에 <code>html:5</code>을 쓰고 enter를 누르면 아래와 같이 나온다.</p>
</blockquote>
<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 http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Document&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    ...
&lt;/body&gt;
&lt;/html&gt;</code></pre><h3 id="1-2-css-기초">1-2) CSS 기초</h3>
<h4 id="📚-css-사용방법">📚 <strong>CSS</strong> 사용방법</h4>
<blockquote>
<ul>
<li><code>&lt;head&gt; ~ &lt;/head&gt;</code> 안에 <code>&lt;style&gt; ~ &lt;/style&gt;</code>로 공간을 만들어 작성하기!!!</li>
</ul>
</blockquote>
<ul>
<li>class를 가리킬 때는 꼭!! 반드시!! <code>.아무거나이름 {...}</code> 형태로 써주기!!!</li>
<li>EX) mytitle이라는 class를 가리킬 때, <code>.mytitle {...}</code> 형태로!!!</li>
</ul>
<h4 id="📚-오늘-배운-css">📚 오늘 배운 <strong>CSS</strong></h4>
<p>✅ 배경관련</p>
<blockquote>
<p>① background-color
② background-image
③ background-size</p>
</blockquote>
<h6 id="-위-3개는-항상-붙어-다닌다">*** 위 3개는 항상 붙어 다닌다.</h6>
<p>✅ 사이즈</p>
<blockquote>
<p>① width
② height</p>
</blockquote>
<p>✅ 폰트</p>
<blockquote>
<p>① font-size
② font-weight
③ font-famliy
④ color</p>
</blockquote>
<p>✅ 간격</p>
<blockquote>
<p>① margin 
② padding</p>
</blockquote>
<h5 id="💡-margin은-바깥쪽-여백을-padding은-내-안쪽-여백을-조정해준다">💡 margin은 바깥쪽 여백을, padding은 내 안쪽 여백을 조정해준다.</h5>
<p>✅ 추가로 자주 쓰이는 CSS</p>
<blockquote>
<p>① border-radius</p>
</blockquote>
<br>

<h2 id="2-간단한-로그인-페이지-만들기">2. 간단한 로그인 페이지 만들기</h2>
<p>이제 본격적으로 &#39;로그인 페이지&#39;를 만들어보도록 하겠다.🚩
<img src="https://images.velog.io/images/waterlily_0101/post/f7e687ba-fc7a-4053-a50f-d2e96f980568/2021-09-18_%EB%A1%9C%EA%B7%B8%EC%9D%B8%ED%8E%98%EC%9D%B4%EC%A7%80.png" alt=""></p>
<h3 id="📍-1st-visual-studio-code에서-html-파일-만들기">📍 1st. Visual Studio Code에서 HTML 파일 만들기</h3>
<blockquote>
<h4 id="loginhtml-이라는-파일을-하나-만든다">login.html 이라는 파일을 하나 만든다.</h4>
<p>💡 파일명에 꼭!! <code>.html</code>이 포함하기!!!</p>
</blockquote>
<h3 id="📍-2nd-html5로-html-기본-뼈대-가져오기">📍 2nd. &quot;html:5&quot;로 HTML 기본 뼈대 가져오기</h3>
<blockquote>
<pre><code>&lt;!DOCTYPE html&gt;</code></pre></blockquote>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    ...
</body>
</html>
```

<h3 id="📍-3rd-head--head-안의-title--title-사이에-있는-document-지우고-로그인페이지라고-쓰기">📍 3rd. <code>&lt;head&gt; ~ &lt;/head&gt;</code> 안의 <code>&lt;title&gt; ~ &lt;/title&gt;</code> 사이에 있는 &#39;Document&#39; 지우고, &#39;로그인페이지&#39;라고 쓰기</h3>
<blockquote>
<pre><code>&lt;!DOCTYPE html&gt;</code></pre></blockquote>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>로그인페이지</title>
</head>
<body>
    ...
</body>
</html>
```

<h3 id="📍-4th-css를-활용하여-로그인-페이지-제목-브라우저에-띄우기">📍 4th. CSS를 활용하여 로그인 페이지 &#39;제목&#39; 브라우저에 띄우기</h3>
<p><img src="https://images.velog.io/images/waterlily_0101/post/de7ba1b1-3123-4ca3-94e5-c0262655b8a1/2021-09-18%20(1)_%EB%A1%9C%EA%B7%B8%EC%9D%B8%ED%8E%98%EC%9D%B4%EC%A7%80_%EC%A0%9C%EB%AA%A9.png" alt=""></p>
<blockquote>
<ul>
<li><code>&lt;h1&gt;</code> 태그는 제목을 나타내는 태그이다.</li>
</ul>
</blockquote>
<ul>
<li><code>&lt;h5&gt;</code> 태그도 비중은 작지만 역할이 있다.<pre><code>&lt;body&gt;
  &lt;h1&gt;로그인 페이지&lt;/h1&gt;
  &lt;h5&gt;아이디, 비밀번호를 입력해주세요&lt;/h5&gt;
&lt;/body&gt;</code></pre></li>
</ul>
<h3 id="📍-5th-id와-password-입력할-칸-만들기">📍 5th. ID와 PASSWORD 입력할 칸 만들기</h3>
<p><img src="https://images.velog.io/images/waterlily_0101/post/7a52c55e-df14-4f32-8a11-2878a95da117/2021-09-18%20(3)_%EB%A1%9C%EA%B7%B8%EC%9D%B8%ED%8E%98%EC%9D%B4%EC%A7%80_ID,PW.png" alt=""></p>
<blockquote>
<ul>
<li><code>&lt;input type=&quot;text&quot; /&gt;</code> 코드를 사용하면 text를 입력할 칸을 만들 수 있다.<pre><code></code></pre></li>
</ul>
</blockquote>
<body>
    <h1>로그인 페이지</h1>
    <h5>아이디, 비밀번호를 입력해주세요</h5>
    <p>ID: <input type="text" /></p>
    <p>PW: <input type="text" /></p>
</body>
```

<h3 id="📍-6th-로그인하기-버튼-만들기">📍 6th. 로그인하기 버튼 만들기</h3>
<p><img src="https://images.velog.io/images/waterlily_0101/post/a693a6ca-0ccf-481c-a193-d997ae6bcae5/2021-09-18%20(4)_%EB%A1%9C%EA%B7%B8%EC%9D%B8%ED%8E%98%EC%9D%B4%EC%A7%80_%EB%B2%84%ED%8A%BC.png" alt=""></p>
<blockquote>
<ul>
<li>버튼을 만들고 싶다면, <code>&lt;button&gt;</code> 태그를 활용하면 된다.</li>
</ul>
</blockquote>
<pre><code>&lt;body&gt;
    &lt;h1&gt;로그인 페이지&lt;/h1&gt;
    &lt;h5&gt;아이디, 비밀번호를 입력해주세요&lt;/h5&gt;
    &lt;p&gt;ID: &lt;input type=&quot;text&quot; /&gt;&lt;/p&gt;
    &lt;p&gt;PW: &lt;input type=&quot;text&quot; /&gt;&lt;/p&gt;
    &lt;button&gt;로그인하기&lt;/button&gt;
&lt;/body&gt;</code></pre><h3 id="📍-7th-background-이미지-삽입하기">📍 7th. Background 이미지 삽입하기</h3>
<p><img src="https://images.velog.io/images/waterlily_0101/post/4a09f6c0-9a99-416a-8b32-12431abbd27a/2021-09-18%20(5)_%EB%A1%9C%EA%B7%B8%EC%9D%B8%20%ED%8E%98%EC%9D%B4%EC%A7%80_%EC%9D%B4%EB%AF%B8%EC%A7%80%EC%82%BD%EC%9E%85.png" alt=""></p>
<blockquote>
<ul>
<li><code>&lt;body&gt;</code> 태그 사이에 <code>&lt;div&gt;</code> 태그를 만든다.</li>
</ul>
</blockquote>
<ul>
<li><code>&lt;div&gt;</code>에 &quot;mytitle&quot;라는 class를 입력한다.<pre><code>&lt;body&gt;
  &lt;div class=&quot;mytitle&quot;&gt;
      &lt;h1&gt;로그인 페이지&lt;/h1&gt;
      &lt;h5&gt;아이디, 비밀번호를 입력해주세요&lt;/h5&gt;
  &lt;/div&gt;
  &lt;p&gt;ID: &lt;input type=&quot;text&quot; /&gt;&lt;/p&gt;
  &lt;p&gt;PW: &lt;input type=&quot;text&quot; /&gt;&lt;/p&gt;
  &lt;button&gt;로그인하기&lt;/button&gt;
&lt;/body&gt;</code></pre></li>
</ul>
<blockquote>
<ul>
<li><code>&lt;head&gt;</code> 태그 사이에 <code>&lt;style&gt;</code> 태그를 만든다.</li>
</ul>
</blockquote>
<ul>
<li>&quot;mytitle&quot;이라는 class를 가리키기 위해 <code>&lt;style&gt;</code> 태그 안에 <code>.title {...}</code> 코드를 입력한다.</li>
<li>이미지 코드 삽입 전, 이 class 부분이 자리를 얼마나 차지하고 있는지를 확인해야 하는데, 이때 <code>background-color: green;</code> 코드를 사용하면 확인이 가능하다.</li>
<li><code>background-color: green;</code> 코드를 통해 확인한 크기를 줄이기 위해 <code>width</code>와 <code>height</code>를 사용했다.</li>
<li>text를 가운데로 옮기기 위해 <code>text-align</code>을 이용하여 위치를 center로 옮겼고, <code>padding-top</code>을 이용하여 box 위부분으로 부터 안쪽으로 20px 떨어진 곳에 위치하도록 조정했다.</li>
<li><code>background-image</code>와 <code>background-size</code>, <code>background-position</code> 이 3개는 항상  붙어다닌다.<pre><code>&lt;head&gt;
  &lt;style&gt;
      .mytitle {
          width: 300px;
          height: 200px;
          color: white;
          text-align: center;
          background-image: url(&#39;https://www.ancient-origins.net/sites/default/files/field/image/Agesilaus-II-cover.jpg&#39;);
          background-size: cover;
          background-position: center;
          border-radius: 10px;
          padding-top: 20px;
      }
  &lt;/style&gt;
&lt;/head&gt;</code></pre></li>
</ul>
<h3 id="📍-8th-정중앙으로-옮기기">📍 8th. 정중앙으로 옮기기</h3>
<p><img src="https://images.velog.io/images/waterlily_0101/post/3ec48b75-fb82-451f-b9b2-d7525addbfc8/2021-09-18%20(6)_%EB%A1%9C%EA%B7%B8%EC%9D%B8%ED%8E%98%EC%9D%B4%EC%A7%80_%EC%A0%95%EC%A4%91%EC%95%99.png" alt=""></p>
<blockquote>
<ul>
<li><code>&lt;body&gt;</code> 태그 사이에 <code>&lt;div&gt;</code> 태그를 만든다.</li>
</ul>
</blockquote>
<ul>
<li><code>&lt;div&gt;</code>에 &quot;wrap&quot;라는 class를 입력한다.</li>
<li>각 코드를 하나씩 중앙으로 옮기는 것보다 하나의 묶음으로 만들어서 옮기는 것이 더 효율적. 그래서 <code>&lt;div class=&quot;wrap&quot;&gt;</code> 코드를 만든 것임.<pre><code>&lt;body&gt;
  &lt;div class=&quot;wrap&quot;&gt;
      &lt;div class=&quot;mytitle&quot;&gt;
          &lt;h1&gt;로그인 페이지&lt;/h1&gt;
          &lt;h5&gt;아이디, 비밀번호를 입력해주세요&lt;/h5&gt;
      &lt;/div&gt;
      &lt;p&gt;ID: &lt;input type=&quot;text&quot; /&gt;&lt;/p&gt;
      &lt;p&gt;PW: &lt;input type=&quot;text&quot; /&gt;&lt;/p&gt;
      &lt;button&gt;로그인하기&lt;/button&gt;
  &lt;/div&gt;
&lt;/body&gt;</code></pre></li>
</ul>
<blockquote>
<ul>
<li>&quot;wrap&quot; class가 자리를 얼마나 차지하고 있는지를 확인하기 위해 <code>background-color: green;</code> 코드를 사용한다.</li>
</ul>
</blockquote>
<ul>
<li><code>background-color: green;</code> 코드를 통해 확인한 크기를 줄이기 위해 <code>width</code>를 사용했다.</li>
<li><code>margin: auto;</code>에서 auto는 좌우의 바깥 여백을 똑같이 배분하는 역할을 한다. 그래서 이 코드를 사용하면 브라우저 화면 중앙에 위치하게 된다.<pre><code>&lt;head&gt;
   &lt;style&gt;
       .wrap {
           width: 300px;
           margin: auto;
       }
   &lt;/style&gt;
&lt;/head&gt;</code></pre></li>
</ul>
<h3 id="📍-9th-로그인하기-button-크기-색-바꾸기">📍 9th. &#39;로그인하기&#39; button 크기, 색 바꾸기</h3>
<p><img src="https://images.velog.io/images/waterlily_0101/post/22783fb5-922d-457e-917a-44631e0e6773/2021-09-18%20(7)_%EB%A1%9C%EA%B7%B8%EC%9D%B8%ED%8E%98%EC%9D%B4%EC%A7%80_%EB%B2%84%ED%8A%BC%ED%81%AC%EA%B8%B0%EC%83%89.png" alt=""></p>
<blockquote>
<ul>
<li><code>&lt;button&gt;</code> 태그에 &quot;mybtn&quot;이라는 class를 입력한다.</li>
</ul>
</blockquote>
<pre><code>&lt;body&gt;
    &lt;div class=&quot;wrap&quot;&gt;
        &lt;div class=&quot;mytitle&quot;&gt;
            &lt;h1&gt;로그인 페이지&lt;/h1&gt;
            &lt;h5&gt;아이디, 비밀번호를 입력해주세요&lt;/h5&gt;
        &lt;/div&gt;
        &lt;p&gt;ID: &lt;input type=&quot;text&quot; /&gt;&lt;/p&gt;
        &lt;p&gt;PW: &lt;input type=&quot;text&quot; /&gt;&lt;/p&gt;
        &lt;button class=&quot;mybtn&quot;&gt;로그인하기&lt;/button&gt;
    &lt;/div&gt;
&lt;/body&gt;</code></pre><blockquote>
<ul>
<li><code>width</code>와 <code>height</code>를 이용해  버튼의 가로, 세로 길이를 조절했다.</li>
</ul>
</blockquote>
<ul>
<li><code>border-radius</code>를 이용해 button 모서리를 덜각지게 만들었다.<pre><code>&lt;head&gt;
  &lt;style&gt;
      .mybtn {
          width: 300px;
          height: 50px;
          border-radius: 10px;
          background-color: brown;
          color: white;
      }
  &lt;/style&gt;
&lt;/head&gt;</code></pre></li>
</ul>
<h3 id="📍-10th-폰트-입히기">📍 10th. 폰트 입히기</h3>
<p><img src="https://images.velog.io/images/waterlily_0101/post/af472b62-0e3f-4265-a5c5-5ba33e2e6c5b/2021-09-18_%EB%A1%9C%EA%B7%B8%EC%9D%B8%ED%8E%98%EC%9D%B4%EC%A7%80.png" alt=""></p>
<blockquote>
<ul>
<li>먼저 구글웹에서 마음에 드는 폰트를 click한다.</li>
</ul>
</blockquote>
<ul>
<li>[ + Select this style ]을 click한다.</li>
<li>link를 복사해서 <code>&lt;head&gt; ~ &lt;/head&gt;</code>사이 <code>&lt;title&gt;</code> 태그 아래에 넣는다.</li>
<li>CSS를 복사해서 <code>&lt;style&gt; ~ &lt;/style&gt;</code> 사이에 넣는다. 이때 주의할 점은, <code>*</code>의 의미는 모든 태그에 폰트스타일을 다 먹이겠다는 뜻이다.<pre><code>&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;title&gt;로그인페이지&lt;/title&gt;
  &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.googleapis.com&quot;&gt;
  &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Jua&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
  &lt;style&gt;
      * {
          font-family: &#39;Jua&#39;, sans-serif;
      }
  &lt;/style&gt;
&lt;/head&gt;</code></pre></li>
</ul>
<br>

<h2 id="3-로그인-페이지-완성-🏆">3. 로그인 페이지 완성 🏆</h2>
<p><img src="https://images.velog.io/images/waterlily_0101/post/e57ac714-5006-44c6-81fa-743db460588c/2021-09-18_%EB%A1%9C%EA%B7%B8%EC%9D%B8%ED%8E%98%EC%9D%B4%EC%A7%80.png" alt=""></p>
<h4 id="완성-코드">&lt;완성 코드&gt;</h4>
<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;title&gt;로그인페이지&lt;/title&gt;

    &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.googleapis.com&quot;&gt;
    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Jua&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

    &lt;style&gt;
        * {
            font-family: &#39;Jua&#39;, sans-serif;
        }

        .mytitle {
            width: 300px;
            height: 200px;

            color: white;
            text-align: center;

            background-image: url(&#39;https://www.ancient-origins.net/sites/default/files/field/image/Agesilaus-II-cover.jpg&#39;);
            background-size: cover;
            background-position: center;

            border-radius: 10px;

            padding-top: 20px;
        }

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

        .mybtn {
            width: 300px;
            height: 50px;

            border-radius: 10px;

            background-color: brown;
            color: white;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;wrap&quot;&gt;
        &lt;div class=&quot;mytitle&quot;&gt;
            &lt;h1&gt;로그인 페이지&lt;/h1&gt;
            &lt;h5&gt;아이디, 비밀번호를 입력해주세요&lt;/h5&gt;
        &lt;/div&gt;
        &lt;p&gt;ID: &lt;input type=&quot;text&quot;/&gt;&lt;/p&gt;
        &lt;p&gt;PW: &lt;input type=&quot;text&quot;/&gt;&lt;/p&gt;
        &lt;button class=&quot;mybtn&quot;&gt;로그인하기&lt;/button&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre><br>

<p>웹개발  종합반에서 배웠던 내용을 힙한취미코딩 이벤트를 통해 다시 한번 더 복습하는 시간을 가질 수 있어서 너무 좋았다. 배웠던 것을 반복해서 한번 더 되새기니 더 꼼꼼하게 머리에 새길수 있어서 매우 유익한 시간이었다.( •̀ .̫ •́ )✧</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[210917 개발일지]]></title>
            <link>https://velog.io/@waterlily_0101/210917-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@waterlily_0101/210917-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Fri, 17 Sep 2021 12:33:24 GMT</pubDate>
            <description><![CDATA[<h1 id="🎯지니뮤직의-150위-곡-스크래핑🎯">🎯지니뮤직의 1~50위 곡 스크래핑🎯</h1>
<h2 id="✅-지니뮤직-사이트">✅ 지니뮤직 사이트</h2>
<blockquote>
<p><a href="https://www.genie.co.kr/chart/top200?ditc=D&amp;ymd=20200403&amp;hh=23&amp;rtm=N&amp;pg=1">https://www.genie.co.kr/chart/top200?ditc=D&amp;ymd=20200403&amp;hh=23&amp;rtm=N&amp;pg=1</a></p>
</blockquote>
<br>

<h2 id="✅-순위-곡-제목-가수를-스크래핑-하기">✅ 순위/ 곡 제목/ 가수를 스크래핑 하기</h2>
<p><img src="https://images.velog.io/images/waterlily_0101/post/274f07f6-5187-4d86-b0cf-2ea0dac624ba/2021-09-20_%EC%A7%80%EB%8B%88%EB%AE%A4%EC%A7%81%20%ED%81%AC%EB%A1%A4%EB%A7%81%20%EC%99%84%EC%84%B1.png" alt=""></p>
<blockquote>
<ul>
<li>힌트: 순위와 곡제목이 깔끔하게 나오지 않을 때(EX) 옆에 여백이 있다던가, 다른 글씨도 나온다던가...), 파이썬 내장 함수인 <code>scrip()</code> 사용하기</li>
</ul>
</blockquote>
<br>

<h3 id="📍-1st-크롤링-기본-세팅">📍 1st. 크롤링 기본 세팅</h3>
<pre><code>import requests
from bs4 import BeautifulSoup

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://www.genie.co.kr/chart/top200?ditc=D&amp;ymd=20200403&amp;hh=23&amp;rtm=N&amp;pg=1&#39;,headers=headers)

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

# 코딩 시작</code></pre><br>

<h3 id="📍-2nd-select를-이용해서-trs을-불러오기">📍 2nd. select를 이용해서, trs을 불러오기</h3>
<pre><code>trs = soup.select(&#39;#body-content &gt; div.newest-list &gt; div &gt; table &gt; tbody &gt; tr&#39;)</code></pre><br>

<h3 id="📍-3rd-trs-반복문-돌리기">📍 3rd. trs 반복문 돌리기</h3>
<pre><code>for tr in trs:
    title = tr.select_one(&#39;td.info &gt; a.title.ellipsis&#39;).text.strip()
    rank = tr.select_one(&#39;td.number&#39;).text[0:2].strip()
    artist = tr.select_one(&#39;td.info &gt; a.artist.ellipsis&#39;).text</code></pre><br>

<h3 id="📍-4th-순위-곡-제목-가수-print-하기">📍 4th. 순위/ 곡 제목/ 가수 print 하기</h3>
<pre><code>for tr in trs:
    title = tr.select_one(&#39;td.info &gt; a.title.ellipsis&#39;).text.strip()
    rank = tr.select_one(&#39;td.number&#39;).text[0:2].strip()
    artist = tr.select_one(&#39;td.info &gt; a.artist.ellipsis&#39;).text
    print(rank, title, artist)</code></pre><blockquote>
<ul>
<li>태그 안의 텍스트를 찍고 싶을 땐 → <code>태그.text</code></li>
<li>태그 안의 속성을 찍고 싶을 땐 → <code>태그.[&#39;속성&#39;]</code></li>
</ul>
</blockquote>
<blockquote>
<ul>
<li><code>.strip()</code>은 &#39;문자열&#39; 또는 &#39;공백&#39;을 제거해준다.</li>
</ul>
</blockquote>
<blockquote>
<p><strong>&lt;&#39;문자열 인덱싱(슬라이싱)&#39;&gt;</strong></p>
</blockquote>
<ul>
<li>파이썬에서는 ‘슬라이싱(slice)’이라는 기능을 제공하는데, 다음과 같이 가져오고 싶은 문자열의 범위를 지정하면 된다.</li>
<li>위 코드를 보면 <code>[0:2]</code>라는 표현을 사용했다. </li>
<li><code>[ ]</code>는 슬라이싱할 범위를 지정할 때 사용하는 기호이다.</li>
<li><code>0</code>은 시작 위치를, <code>2</code>는 끝 위치를 의미한다.</li>
<li>시작과 끝을 구분하기 위해 그 사이에 콜론(<code>:</code>)을 사용한다.</li>
</ul>
<br>

<h1 id="🏆지니뮤직의-150위-곡-스크래핑-완성🏆">🏆지니뮤직의 1~50위 곡 스크래핑 완성🏆</h1>
<h5 id="완성-코드">&lt;완성 코드&gt;</h5>
<pre><code>import requests
from bs4 import BeautifulSoup

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://www.genie.co.kr/chart/top200?ditc=D&amp;ymd=20200403&amp;hh=23&amp;rtm=N&amp;pg=1&#39;,headers=headers)

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

trs = soup.select(&#39;#body-content &gt; div.newest-list &gt; div &gt; table &gt; tbody &gt; tr&#39;)

for tr in trs:
    title = tr.select_one(&#39;td.info &gt; a.title.ellipsis&#39;).text.strip()
    rank = tr.select_one(&#39;td.number&#39;).text[0:2].strip()
    artist = tr.select_one(&#39;td.info &gt; a.artist.ellipsis&#39;).text
    print(rank, title, artist)</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[210916 개발일지]]></title>
            <link>https://velog.io/@waterlily_0101/210916-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@waterlily_0101/210916-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Thu, 16 Sep 2021 08:34:31 GMT</pubDate>
            <description><![CDATA[<h1 id="1-python">1. Python</h1>
<h2 id="1-1-파이썬-기초-문법">1-1) 파이썬 기초 문법</h2>
<h3 id="1-변수--기본연산">(1) 변수 &amp; 기본연산</h3>
<pre><code>a = 3 # 3을 a에 넣는다
b = a # a를 b에 넣는다
a = a + 1 # a+1을 다시 a에 넣는다

num1 = a*b # a*b의 값을 num1이라는 변수에 넣는다
num2 = 99 # 99의 값을 num2이라는 변수에 넣는다</code></pre><blockquote>
<ul>
<li>&#39;변수 이름&#39;은 마음대로 지을 수 있다!!</li>
</ul>
</blockquote>
<br>

<h3 id="2-자료형">(2) 자료형</h3>
<h4 id="①-숫자-문자형">① 숫자, 문자형</h4>
<pre><code>name = &#39;bob&#39; # 변수로 &#39;문자열&#39; 가능,
num = 12 # &#39;숫자&#39;도 가능,
is_number = True # &#39;True&#39; 또는 &#39;False&#39; → &#39;Boolean 형&#39;도 가능</code></pre><blockquote>
<p>그리고 <strong><code>List</code></strong>와 <strong><code>Dictionary</code></strong> 도 가능!!</p>
</blockquote>
<h4 id="②-list-형-javascript의-배열형과-동일">② List 형 (Javascript의 배열형과 동일)</h4>
<pre><code>a_list = []
a_list.append(1) # 리스트에 값을 넣는다
a_list.append([2,3]) # 리스트에 [2,3]이라는 리스트를 다시 넣는다</code></pre><ul>
<li>a_list의 값은? <code>[1,[2,3]]</code></li>
<li>a_list[0]의 값은? <code>1</code></li>
<li>a_list[1]의 값은? <code>[2,3]</code></li>
<li>a_list[1][0]의 값은? <code>2</code></li>
</ul>
<h4 id="③-dictionary-형-javascript의-dictionary형과-동일">③ Dictionary 형 (Javascript의 dictionary형과 동일)</h4>
<pre><code>a_dict = {}
a_dict = {&#39;name&#39;:&#39;bob&#39;,&#39;age&#39;:21}
a_dict[&#39;height&#39;] = 178</code></pre><ul>
<li>a_dict의 값은? <code>{&#39;name&#39;:&#39;bob&#39;,&#39;age&#39;:21, &#39;height&#39;:178}</code></li>
<li>a_dict[&#39;name&#39;]의 값은? <code>&#39;bob&#39;</code></li>
<li>a_dict[&#39;age&#39;]의 값은? <code>21</code></li>
<li>a_dict[&#39;height&#39;]의 값은? <code>178</code></li>
</ul>
<h4 id="④-dictionary-형과-list-형의-조합">④ Dictionary 형과 List 형의 조합</h4>
<pre><code>people = [{&#39;name&#39;:&#39;bob&#39;,&#39;age&#39;:20},{&#39;name&#39;:&#39;carry&#39;,&#39;age&#39;:38}]</code></pre><ul>
<li>people[0][&#39;name&#39;]의 값은? <code>&#39;bob&#39;</code></li>
<li>people[1][&#39;name&#39;]의 값은? <code>&#39;carry&#39;</code></li>
</ul>
<pre><code>person = {&#39;name&#39;:&#39;john&#39;,&#39;age&#39;:7}
people.append(person)</code></pre><ul>
<li>people의 값은? <code>[{&#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}]</code></li>
<li>people[2][&#39;name&#39;]의 값은? <code>&#39;john&#39;</code></li>
</ul>
<br>

<h3 id="3-함수">(3) 함수</h3>
<h4 id="①-함수의-정의">① 함수의 정의</h4>
<blockquote>
<ul>
<li>코딩에서 함수는 (변수를 받든 안 받든) 정해진 동작을 수행하는 것이다.</li>
</ul>
</blockquote>
<ul>
<li>&#39;이름&#39;을 마음대로 정할 수 있다.</li>
</ul>
<h5 id="📚-수학문제에서">📚 수학문제에서</h5>
<pre><code>f(x) = 2*x+3
y = f(2)</code></pre><ul>
<li>y의 값은? <code>7</code></li>
</ul>
<h5 id="📚-참고-자바스크립트에서는">📚 참고: 자바스크립트에서는</h5>
<pre><code>function f(x) {
    return 2*x+3
}</code></pre><h5 id="💡-파이썬에서">💡 파이썬에서</h5>
<pre><code>def f(x):
    return 2*x+3

y = f(2)</code></pre><ul>
<li>y의 값은? <code>7</code></li>
</ul>
<h4 id="②-함수의-응용">② 함수의 응용</h4>
<pre><code>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)</code></pre><ul>
<li>result라는 변수의 값은? <code>106</code></li>
</ul>
<br>

<h3 id="4-조건문">(4) 조건문</h3>
<h4 id="①-ifelse로-구성">① if/else로 구성!</h4>
<pre><code>def oddeven(num): # oddeven이라는 이름의 함수를 정의한다. num을 변수로 받는다.
    if num % 2 == 0: # num을 2로 나눈 나머지가 0이면
        return True # True (참)을 반환한다.
    else: # 아니면,
        return False # False (거짓)을 반환한다.

result = oddeven(20)</code></pre><ul>
<li>result의 값은? <code>True</code></li>
</ul>
<pre><code>def is_adult(age):
    if age &gt; 20:
        print(&#39;성인입니다&#39;) # 조건이 참이면 성인입니다를 출력
    else:
        print(&#39;청소년이에요&#39;) # 조건이 거짓이면 청소년이에요를 출력

is_adult(30)</code></pre><ul>
<li>무엇이 출력될까요? <code>성인입니다</code></li>
</ul>
<br>

<h3 id="5-반복문">(5) 반복문</h3>
<blockquote>
<ul>
<li>파이썬에서의  반복문은, 리스트의 요소들을 하나씩 꺼내쓰는 형태이다</li>
</ul>
</blockquote>
<ul>
<li>반복문은 무조건 리스트와 함께 쓰인다!!</li>
</ul>
<pre><code>fruits = [&#39;사과&#39;,&#39;배&#39;,&#39;감&#39;,&#39;귤&#39;]

for fruit in fruits:
    print(fruit)</code></pre><ul>
<li>사과, 배, 감, 귤 하나씩 꺼내어 찍힌다.</li>
</ul>
<p><strong>&lt;리스트 예제 - 과일 갯수 세기 함수&gt;</strong></p>
<h5 id="↓-사과의-갯수를-세어-보여준다">↓ 사과의 갯수를 세어 보여준다.</h5>
<pre><code>fruits = [&#39;사과&#39;,&#39;배&#39;,&#39;배&#39;,&#39;감&#39;,&#39;수박&#39;,&#39;귤&#39;,&#39;딸기&#39;,&#39;사과&#39;,&#39;배&#39;,&#39;수박&#39;]

count = 0
for fruit in fruits:
    if fruit == &#39;사과&#39;:
        count += 1

print(count)</code></pre><hr>
<pre><code>def count_fruits(target):
    count = 0
    for fruit in fruits:
        if fruit == target:
            count += 1
    return count

subak_count = count_fruits(&#39;수박&#39;)
print(subak_count) #수박의 갯수

gam_count = count_fruits(&#39;감&#39;)
print(gam_count) #감의 갯수</code></pre><p><strong>&lt;딕셔너리 예제&gt;</strong></p>
<pre><code>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;])

# 반복문과 조건문을 응용한 함수&gt;**
# 이름을 받으면, 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><br>

<h1 id="2-python-package">2. Python package</h1>
<h2 id="2-1-패키지-라이브러리">2-1) 패키지? 라이브러리?</h2>
<blockquote>
<ul>
<li>Python에서 패키지는 모듈(일종의 기능들 묶음)을 모아 놓은 단위이다.이런 패키지의 묶음을 라이브러리라고 볼 수 있다.</li>
</ul>
</blockquote>
<br>

<h2 id="2-2-requests-라이브러리-사용해보기--listdictionary함수iffor문-연습">2-2) Requests 라이브러리 사용해보기 + List/Dictionary/함수/If/For문 연습</h2>
<h4 id="✅-아래-방법으로-서울시-대기-open-api에서-중구의-no2-값을-가져올-수-있다">✅ 아래 방법으로 서울시 대기 Open API에서, 중구의 NO2 값을 가져올 수 있다.</h4>
<pre><code>import requests # requests 라이브러리 설치 필요

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

print(rjson[&#39;RealtimeCityAir&#39;][&#39;row&#39;][0][&#39;NO2&#39;])</code></pre><h4 id="✅-모든-구의-idex_mvl-값을-찍어주기">✅ 모든 구의 IDEX_MVL 값을 찍어주기</h4>
<pre><code>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;]

for gu in gus:
    print(gu[&#39;MSRSTE_NM&#39;], gu[&#39;IDEX_MVL&#39;])</code></pre><h4 id="✅-idex_mlv-값이-60-미만인-구만-찍어주기">✅ IDEX_MLV 값이 60 미만인 구만 찍어주기</h4>
<pre><code>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;]

for gu in gus:
    if gu[&#39;IDEX_MVL&#39;] &lt; 60:
        print (gu[&#39;MSRSTE_NM&#39;], gu[&#39;IDEX_MVL&#39;])</code></pre><br>

<h1 id="3-web-scrapingcrawling">3. Web Scraping(Crawling)</h1>
<h2 id="3-1-웹스크래핑크롤링-기초">3-1) 웹스크래핑(크롤링) 기초</h2>
<h3 id="1--웹스크래핑-해보기-영화-제목">(1)  웹스크래핑 해보기 (영화 제목)</h3>
<blockquote>
<ul>
<li>&#39;네이버 영화 페이지&#39; 스크래핑 하기
<a href="https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&amp;date=20200303">https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&amp;date=20200303</a></li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>bs4(beautifulsoup4) 패키지 추가 설치해야 한다.</li>
</ul>
</blockquote>
<h3 id="✅-크롤링-기본-세팅">✅ 크롤링 기본 세팅</h3>
<pre><code>import requests
from bs4 import BeautifulSoup

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)

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

# 코딩 시작</code></pre><p><strong>&lt;크롤링 기본 세팅 설명&gt;</strong></p>
<pre><code>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
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><h3 id="✅-select--select_one의-사용법">✅ select / select_one의 사용법</h3>
<p><strong>&lt;영화 제목 가져오기&gt;</strong></p>
<ul>
<li>태그 안의 텍스트를 찍고 싶을 땐 → <code>태그.text</code></li>
<li>태그 안의 속성을 찍고 싶을 땐 → <code>태그.[&#39;속성&#39;]</code><pre><code>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
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;)</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:
        # a의 text를 찍어본다.
        print (a_tag.text)</p>
<pre><code>
### ✅ beautifulsoup 내 select에 미리 정의된 다른 방법</code></pre><h1 id="선택자를-사용하는-방법-copy-selector">선택자를 사용하는 방법 (copy selector)</h1>
<p>soup.select(&#39;태그명&#39;)
soup.select(&#39;.클래스명&#39;)
soup.select(&#39;#아이디명&#39;)</p>
<p>soup.select(&#39;상위태그명 &gt; 하위태그명 &gt; 하위태그명&#39;)
soup.select(&#39;상위태그명.클래스명 &gt; 하위태그명.클래스명&#39;)</p>
<h1 id="태그와-속성값으로-찾는-방법">태그와 속성값으로 찾는 방법</h1>
<p>soup.select(&#39;태그명[속성=&quot;값&quot;]&#39;)</p>
<h1 id="한-개만-가져오고-싶은-경우">한 개만 가져오고 싶은 경우</h1>
<p>soup.select_one(&#39;위와 동일&#39;)</p>
<pre><code>
&gt; - 항상 정확한 것은 아니지만, 크롬 개발자도구를 참고할 수도 있다!!
1 원하는 부분에서 마우스 오른쪽 click → 검사
2 원하는 태그에서 마우스 오른쪽 click
3 Copy → Copy selector로 선택자를 복살 할 수 있음

&lt;br&gt;

## 3-2) 웹스크래핑(크롤링) 연습 [Quiz]
### (1) 웹스크래핑 해보기 (순위, 제목, 별점)
![](https://images.velog.io/images/waterlily_0101/post/f0dfd553-96a4-4551-a86e-9cf5e34f3fc8/2021-09-19%20(1)_%EC%9B%B9%EC%8A%A4%ED%81%AC%EB%9E%98%ED%95%91_%EC%88%9C%EC%9C%84,%EC%A0%9C%EB%AA%A9,%EB%B3%84%EC%A0%90.png)

##### &lt;완성 코드&gt;</code></pre><p>import requests
from bs4 import BeautifulSoup</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
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들-의-반복문을-돌리기">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 태그 사이의 텍스트를 가져오기
        print(rank,title,star)</p>
<pre><code>
&lt;br&gt;

# 4. DB
## 4-1) DB의 종류
### (1) RDBMS(SQL)
&gt; - 행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사하다.
- 데이터 50만 개가 적재된 상태에서, 갑자기 중간에 열을 하나 더하기는 어렵다.
- 그러나, 정형화되어 있는 만큼, 데이터의 일관성이나 / 분석에 용이할 수 있다.
- EX) MS-SQL, My-SQL 등

### (2) No-SQL
&gt; - 딕서너리 형태로 데이터를 저장해두는 DB이다.
- 그래서 데이터 하나 하나 마다 같은 값들을 가질 필요가 없게 된다.
-자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있다.

&lt;br&gt;

# 5. pymongo로 DB 조작하기
## 5-1) pymongo 라이브러리의 역할
&gt; - 예를 들어, MS Excel를 파이썬으로 조작하려면, 특별한 라이브러리가 필요하다.
- 마찬가지로, mongoDB라는 프로그램을 조작하려면, 특별한 라이브러리, pymongo가 필요하다!!
- 따라서 **pymongo 패키지**를 설치해야 한다!!

## 5-2) pymongo 기본 코드</code></pre><p>from pymongo import MongoClient
client = MongoClient(&#39;localhost&#39;, 27017)
db = client.dbsparta</p>
<h1 id="코딩-시작">코딩 시작</h1>
<pre><code>
## 5-3) pymongo의 네 가지 기능
#### ① DB 연결하기 &amp; 데이터 넣기
&gt; **pymongo(insert)** 코드스니펫</code></pre><p>doc = {&#39;name&#39;:&#39;bobby&#39;,&#39;age&#39;:21}
db.users.insert_one(doc)</p>
<pre><code></code></pre><p>from pymongo import MongoClient # pymongo를 임포트 하기(패키지 인스톨 먼저 해야겠죠?)
client = MongoClient(&#39;localhost&#39;, 27017) # mongoDB는 27017 포트로 돌아갑니다.
db = client.dbsparta # &#39;dbsparta&#39;라는 이름의 db를 만듭니다.</p>
<h1 id="mongodb에-insert-하기">MongoDB에 insert 하기</h1>
<h1 id="users라는-collection에-namebobbyage21를-넣습니다">&#39;users&#39;라는 collection에 {&#39;name&#39;:&#39;bobby&#39;,&#39;age&#39;:21}를 넣습니다.</h1>
<p>db.users.insert_one({&#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})</p>
<pre><code>
#### ②-1 모든 결과 값을 보기
&gt; **pymongo(find)** 코드스니펫</code></pre><p>same_ages = list(db.users.find({&#39;age&#39;:21},{&#39;_id&#39;:False}))</p>
<pre><code></code></pre><p>from pymongo import MongoClient # pymongo를 임포트 하기(패키지 인스톨 먼저 해야겠죠?)
client = MongoClient(&#39;localhost&#39;, 27017) # mongoDB는 27017 포트로 돌아갑니다.
db = client.dbsparta # &#39;dbsparta&#39;라는 이름의 db를 만듭니다.</p>
<h1 id="mongodb에서-데이터-모두-보기">MongoDB에서 데이터 모두 보기</h1>
<p>all_users = list(db.users.find({}))</p>
<h1 id="참고-mongodb에서-특정-조건의-데이터-모두-보기">참고) MongoDB에서 특정 조건의 데이터 모두 보기</h1>
<p>same_ages = list(db.users.find({&#39;age&#39;:21},{&#39;_id&#39;:False}))</p>
<p>print(all_users[0]) # 0번째 결과값을 보기
print(all_users[0][&#39;name&#39;]) # 0번째 결과값의 &#39;name&#39;을 보기</p>
<p>for user in all_users: # 반복문을 돌며 모든 결과값을 보기
    print(user)</p>
<pre><code>
#### ②-2 특정 결과 값을 뽑아 보기 
&gt; **pymongo(find_one)** 코드스니펫</code></pre><p>user = db.users.find_one({&#39;name&#39;:&#39;bobby&#39;})</p>
<pre><code></code></pre><p>user = db.users.find_one({&#39;name&#39;:&#39;bobby&#39;})
print(user)</p>
<pre><code>
#### ③ 수정하기
&gt; **pymongo(update_one)** 코드스니펫</code></pre><p>db.users.update_one({&#39;name&#39;:&#39;bobby&#39;},{&#39;$set&#39;:{&#39;age&#39;:19}})</p>
<pre><code></code></pre><h1 id="생김새">생김새</h1>
<p>db.people.update_many(찾을조건,{ &#39;$set&#39;: 어떻게바꿀지 })</p>
<h1 id="예시---오타가-많으니-이-줄을-복사해서-씁시다">예시 - 오타가 많으니 이 줄을 복사해서 씁시다!</h1>
<p>db.users.update_one({&#39;name&#39;:&#39;bobby&#39;},{&#39;$set&#39;:{&#39;age&#39;:19}})</p>
<p>user = db.users.find_one({&#39;name&#39;:&#39;bobby&#39;})
print(user)</p>
<pre><code>&gt; 🎈 참고:
- DB에서 따옴표(`&#39;&#39;` ) 없이 숫자로만 표시할 경우 `#`로 표시된다.
- 반면, `&#39;숫자&#39;` 형태로 문자열을 표현하면 `&quot;&quot;`로 표시된다.

#### ④ 삭제하기 (거의 안 씀)
&gt; **pymongo(delete_one)** 코드스니펫</code></pre><p>db.users.delete_one({&#39;name&#39;:&#39;bobby&#39;})</p>
<pre><code></code></pre><p>db.users.delete_one({&#39;name&#39;:&#39;bobby&#39;})</p>
<p>user = db.users.find_one({&#39;name&#39;:&#39;bobby&#39;})
print(user)</p>
<pre><code>
## 5-4) pymongo 코드요약 (예시)
- 저장하고, 찾고, 바꾸고, 지우고!!!

&gt; **① 저장하기**</code></pre><p>doc = {&#39;name&#39;:&#39;bobby&#39;,&#39;age&#39;:21}
db.users.insert_one(doc)</p>
<pre><code>**②-1 여러개 찾기 - ( _id 값은 제외하고 출력)**</code></pre><p>same_ages = list(db.users.find({&#39;age&#39;:21},{&#39;_id&#39;:False}))</p>
<pre><code>**②-2 한 개 찾기**</code></pre><p>user = db.users.find_one({&#39;name&#39;:&#39;bobby&#39;})</p>
<pre><code>**③ 바꾸기(수정)**</code></pre><p>db.users.update_one({&#39;name&#39;:&#39;bobby&#39;},{&#39;$set&#39;:{&#39;age&#39;:19}})</p>
<pre><code>**④ 지우기(삭제)**</code></pre><p>db.users.delete_one({&#39;name&#39;:&#39;bobby&#39;})</p>
<pre><code>
&lt;br&gt;

## 5-5) 웹스크래핑 결과 저장하기
### (1) insert 연습하기 - 웹스크래핑 결과를 DB에 저장하기

### ✅ pymongo 기본 세팅 (크롤링 완성 코드에서 시작하기)</code></pre><p>import requests
from bs4 import BeautifulSoup</p>
<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를-받아오고-2">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
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이라는-라이브러리를-활용해-검색하기-용이한-상태로-만듦-2">HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦</h1>
<p>soup = BeautifulSoup(data.text, &#39;html.parser&#39;)</p>
<h1 id="select를-이용해서-tr들을-불러오기-2">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 태그 사이의 텍스트를 가져오기
        print(rank,title,star)</p>
<pre><code>
### ✅ 도큐먼트 만들어 하나씩 insert 하기</code></pre><p>import requests
from bs4 import BeautifulSoup</p>
<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를-받아오고-3">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
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이라는-라이브러리를-활용해-검색하기-용이한-상태로-만듦-3">HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦</h1>
<p>soup = BeautifulSoup(data.text, &#39;html.parser&#39;)</p>
<h1 id="select를-이용해서-tr들을-불러오기-3">select를 이용해서, tr들을 불러오기</h1>
<p>movies = soup.select(&#39;#old_content &gt; table &gt; tbody &gt; tr&#39;)</p>
<h1 id="movies-tr들-의-반복문을-돌리기-2">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)</p>
<pre><code>
&lt;br&gt;

## 5-6) 웹스크래핑 결과 이용하기 [Quiz]

### (1) find, update 연습하기
- 파이썬 파일을 새로 하나 만들어 연습하기
### ✅ pymongo 기본 코드</code></pre><p>from pymongo import MongoClient
client = MongoClient(&#39;localhost&#39;, 27017)
db = client.dbsparta</p>
<h1 id="코딩-시작-1">코딩 시작</h1>
<pre><code>
### 📍 1st. 영화제목 &#39;매트릭스&#39;의 평점 가져오기
##### &lt;완성 코드&gt;</code></pre><p>from pymongo import MongoClient
client = MongoClient(&#39;localhost&#39;, 27017)
db = client.dbsparta</p>
<h2 id="코딩-할-준비">코딩 할 준비</h2>
<p>target_movie = db.movies.find_one({&#39;title&#39;:&#39;매트릭스&#39;})
print (target_movie[&#39;star&#39;])</p>
<pre><code>
### 📍 2nd. &#39;매트릭스&#39;의 평점과 같은 평점의 영화 제목들 가져오기
##### &lt;완성 코드&gt;</code></pre><p>from pymongo import MongoClient
client = MongoClient(&#39;localhost&#39;, 27017)
db = client.dbsparta</p>
<h2 id="코딩-할-준비-1">코딩 할 준비</h2>
<p>target_movie = db.movies.find_one({&#39;title&#39;:&#39;매트릭스&#39;})
target_star = target_movie[&#39;star&#39;]</p>
<p>movies = list(db.movies.find({&#39;star&#39;:target_star}))</p>
<p>for movie in movies:
    print(movie[&#39;title&#39;])</p>
<pre><code>
### 📍 3rd. 매트릭스 영화의 평점을 0으로 만들기
- 결과 robo3T로 보기
##### &lt;완성 코드&gt;</code></pre><p>from pymongo import MongoClient
client = MongoClient(&#39;localhost&#39;, 27017)
db = client.dbsparta</p>
<h2 id="코딩-할-준비-2">코딩 할 준비</h2>
<p>db.movies.update_one({&#39;title&#39;:&#39;매트릭스&#39;},{&#39;$set&#39;:{&#39;star&#39;:&#39;0&#39;}})</p>
<pre><code></code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[210915 개발일지]]></title>
            <link>https://velog.io/@waterlily_0101/210915-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@waterlily_0101/210915-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Wed, 15 Sep 2021 14:29:57 GMT</pubDate>
            <description><![CDATA[<h1 id="🎯나만의-쇼핑몰-메인-페이지-만들기🎯"><em>🎯나만의 쇼핑몰 메인 페이지 만들기🎯</em></h1>
<h2 id="📍-1st-부트스트랩-시작-템플릿">📍 1st. 부트스트랩 시작 템플릿</h2>
<pre><code>&lt;!doctype html&gt;
&lt;html lang=&quot;en&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;!-- Optional JavaScript --&gt;
    &lt;!-- jQuery first, then Popper.js, then Bootstrap 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;script src=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js&quot;
        integrity=&quot;sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl&quot;
        crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;

    &lt;title&gt;스파르타코딩클럽 | 부트스트랩 연습하기&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;h1&gt;이걸로 시작해보죠!&lt;/h1&gt;
&lt;/body&gt;

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

<h2 id="📍-2nd-사용할-폰트-링크-가져오기">📍 2nd. 사용할 폰트 링크 가져오기</h2>
<h4 id="☑-head--head-사이에-위치한-title-태그-아래-폰트-링크-붙여넣기">☑ <code>&lt;head&gt; ~ &lt;/head&gt;</code> 사이에 위치한 <code>&lt;title&gt;</code> 태그 아래 폰트 링크 붙여넣기</h4>
<blockquote>
<pre><code></code></pre></blockquote>
<link href="https://fonts.googleapis.com/css2?family=Jua&display=swap" rel="stylesheet">
```

<h4 id="☑-style--style-사이에-font-family-붙여넣기">☑ <code>&lt;style&gt; ~ &lt;/style&gt;</code> 사이에 font-family 붙여넣기</h4>
<blockquote>
<pre><code></code></pre></blockquote>
<ul>
<li>{
  font-family: &#39;Jua&#39;, sans-serif;
}<pre><code></code></pre></li>
</ul>
<br>

<h2 id="📍-3rd-아이템-이미지-가져오기">📍 3rd. 아이템 이미지 가져오기</h2>
<p><img src="https://images.velog.io/images/waterlily_0101/post/f2d705f7-33f9-42ca-a11f-56a1292fdf54/2021-09-17%20%ED%96%A5%EC%B4%88%20%EC%9D%B4%EB%AF%B8%EC%A7%80.png" alt=""></p>
<h3 id="☑-내가-한-방법---body--body-사이에-이미지-url-삽입">☑ 내가 한 방법 - <code>&lt;body&gt; ~ &lt;/body&gt;</code> 사이에 이미지 url 삽입</h3>
<p><code>&lt;body&gt; ~ &lt;/body&gt;</code> 사이에</p>
<blockquote>
<pre><code></code></pre></blockquote>
<div class="item-img">
    <img src="https://media.istockphoto.com/photos/spa-massage-picture-id607910912?k=20&m=607910912&s=612x612&w=0&h=GEney-H5Z87um9h8t34MeTm3FM-wOZ5PvW06SThhCuY=">
</div>
```

<p><code>&lt;style&gt; ~ &lt;/style&gt;</code> 사이에</p>
<blockquote>
<pre><code>.item-img {
    text-align: center;
    padding: 40px 0px 30px 0px;
}</code></pre></blockquote>
<pre><code>##### • text-align을 통해서 이미지 위치를  center로 조정했다.
###### ↳ text-align을 사용해서도 이미지 위치를 center로 움직이는데 error가 나지는 않지만,
###### ↳ text-align의 속성은 텍스트의 정렬 방향을 의미하기 떄문에,
###### ↳ background-position을 사용해 이미지 위치를 center로 조정하자!!!!!
##### • padding을 통해서 이미지 안쪽 여백을 조정했다.
###### ↳ 쉽게 말해 이미지 위와 아래의 간격을 조절했다.
##### • 이미지 크기는 따로 조절하지 않았다.

### ☑ 또 다른 방법 - `&lt;style&gt; ~ &lt;/style&gt;`  사이에 이미지 url 삽입
`&lt;body&gt; ~ &lt;/body&gt;` 사이에
&gt; ```
&lt;div class =&quot;item-img&quot;&gt;&lt;/div&gt;</code></pre><p><code>&lt;style&gt; ~ &lt;/style&gt;</code> 사이에</p>
<blockquote>
<pre><code>.item-img {
    width: 500px;
    height: 300px;
    background-image: url(&quot;https://media.istockphoto.com/photos/spa-massage-picture-id607910912?k=20&amp;m=607910912&amp;s=612x612&amp;w=0&amp;h=GEney-H5Z87um9h8t34MeTm3FM-wOZ5PvW06SThhCuY=&quot;);
    background-position: center;
    background-size: cover;
}</code></pre></blockquote>
<pre><code>##### • background-image를 통해 이미지 url을 가져왔다.
##### • width와 height로 이미지의 가로, 세로 길이를 조절했다.
##### • background-size를 통해 width와 height가 설정한 가로, 세로 길이 만큼 이미지가 cover한다.
##### • background-position을 통해 이미지의 위치를 center로 조정했다.

&lt;br&gt;

## 📍 4th. 상품명, 가격, 설명 쓰기
![](https://images.velog.io/images/waterlily_0101/post/41e279ea-c776-4994-8518-44058250aa50/2021-09-17%20%ED%96%A5%EC%B4%88%20%EC%83%81%ED%92%88%EB%AA%85,%20%EA%B0%80%EA%B2%A9,%20%EC%84%A4%EB%AA%85.png)
### ☑ 내가 한 방법
`&lt;body&gt; ~ &lt;/body&gt;` 사이에
&gt; ```
&lt;div class=&quot;item-desc&quot;&gt;
    &lt;p&gt;&lt;span style=&quot;font-size: 250%;&quot;&gt;라벤더 향초&lt;/span&gt;
       &lt;span style=&quot;font-size: 100%;&quot;&gt;가격: 10,000원/개&lt;/span&gt;&lt;/p&gt;
    &lt;p class=&quot;explain&quot;&gt;이 향초는 사실 특별한 힘을 가지고 있어요. 향초를 켜고 소원을 빌면 짜자잔 뭐든지 이뤄지게 됩니다. 하나 사가세요! 라벤더 향이 아주 좋아요!&lt;/p&gt;
&lt;/div&gt;</code></pre><h5 id="-span-태그를-통해-상품명-옆에-가격을-쓸-수-있었다">• <code>&lt;span&gt;</code> 태그를 통해 상품명 옆에 가격을 쓸 수 있었다.</h5>
<h5 id="-span-태그-안에-style-태그를-사용해-상품명과-가격의-font-size를-조정했다">• <code>&lt;span&gt;</code> 태그 안에 <code>&lt;style&gt;</code> 태그를 사용해 상품명과 가격의 font-size를 조정했다.</h5>
<p><code>&lt;style&gt; ~ &lt;/style&gt;</code> 사이에</p>
<blockquote>
<pre><code>.item-desc {
    width: 610px;
    margin: auto;
}
.explain {
    margin-top: -20px;
}</code></pre></blockquote>
<pre><code>##### • auto는 좌우의 바깥 여백을 똑같이 배분한 것이다. 그래서 브라우저 화면 중앙에 위치하게 된다.
##### • margin: auto; 를 통해 item-desc에 해당하는 부분이 center로 올 수 있게 조정했다.
##### • 상품 설명하는 부분(explain)이 상품명과 가격이 쓰여져 있는 부분(explain 윗부분)과 많이 떨어져 있어서 그 간격을 줄이기 위해 margin-top: -20px; 코드를 통해 줄였다.

### ☑ 또 다른 방법
`&lt;body&gt; ~ &lt;/body&gt;` 사이에
&gt; ```
&lt;div class=&quot;item-desc&quot;&gt;
    &lt;h1&gt;라벤더 향초 &lt;span class=&quot;price&quot;&gt;가격: 10,000원/개&lt;/span&gt;&lt;/h1&gt;
    &lt;p&gt;이 향초는 사실 특별한 힘을 가지고 있어요. 향초를 켜고 소원을 빌면 짜자잔 뭐든지 이뤄지게 됩니다. 하나 사가세요! 라벤더 향이 아주 좋아요!&lt;/p&gt;
&lt;/div&gt;</code></pre><h5 id="-h1-태그를-통해-item-제목을-가장-크게-보이게-했다">• <code>&lt;h1&gt;</code> 태그를 통해 item 제목을 가장 크게 보이게 했다.</h5>
<h5 id="-h1-태그-안에-span-태그를-삽입해-item-제목-옆에-바로-가격이-나타날-수-있도록-했다">• <code>&lt;h1&gt;</code> 태그 안에 <code>&lt;span&gt;</code> 태그를 삽입해 item 제목 옆에 바로 가격이 나타날 수 있도록 했다.</h5>
<h5 id="-가격의-font-size를-조정하기-위해서-classprice-코드를-짰다">• 가격의 font-size를 조정하기 위해서 class=&quot;price&quot; 코드를 짰다.</h5>
<p><code>&lt;style&gt; ~ &lt;/style&gt;</code> 사이에</p>
<blockquote>
<pre><code>.price {
    font-size: 20px;
}
.item-desc {
    width: 500px;
    margin-top: 20px;
    margin-bottom: 20px;
}</code></pre></blockquote>
<pre><code>##### • margin-top과 margin-bottom을 통해 item-desc의 위쪽, 아래쪽 바깥 여백 간격을 조정했다.
###### ↳ 쉽게 말해 이미지와 item-desc의 사이 간격, 주문자 이름 칸과 item-desc의 사이 간격 조절했다.

&lt;br&gt;

## 📍 5th. 로딩이 완료되면, 환율 API를 이용해서 환율 표시하기
![](https://images.velog.io/images/waterlily_0101/post/2d418141-1c75-48c1-8d17-4abd82242f99/2021-09-17%20%ED%96%A5%EC%B4%88%20%ED%99%98%EC%9C%A8.png)
### ☑ 내가 한 방법
`&lt;body&gt; ~ &lt;/body&gt;` 사이에
&gt; ```
&lt;div class=&quot;item-desc&quot;&gt;
    &lt;p class=&quot;rate&quot;&gt;달러-원 환율: &lt;span id=&quot;now-rate&quot;&gt;1219.15&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;</code></pre><p><code>&lt;style&gt; ~ &lt;/style&gt;</code> 사이에</p>
<blockquote>
<pre><code>.rate {
    color: blue;
}</code></pre></blockquote>
<pre><code>
`&lt;script&gt; ~ &lt;/script&gt;` 사이에
&gt; ```
$(document).ready(function () {
    get_rate();
});
function get_rate(){
    $.ajax({
        type: &quot;GET&quot;,
        url: &quot;http://spartacodingclub.shop/sparta_api/rate&quot;,
        data: {},
        success: function (response) {
            let now_rate = response[&#39;rate&#39;];
            $(&#39;#now-rate&#39;).text(now_rate);
        }
    })
}</code></pre><h5 id="-로딩-후-바로-실시간-환율로-업데이트된-상태로-구현한-코드">• 로딩 후 바로 실시간 환율로 업데이트된 상태로 구현한 코드</h5>
<h6 id="↳-function-get_rate-부분-바로-실행하기">↳ function get_rate() 부분 바로 실행하기</h6>
<pre><code>$(document).ready(function () {
    get_rate();
});</code></pre><h5 id="-데이터-조회read-요청하기-위해-ajax-코드를-사용했다">• 데이터 조회(READ) 요청하기 위해 ajax 코드를 사용했다.</h5>
<h5 id="-let-now_rate--responserate-코드는-rate-api의-실시간-환율-data를-가져온다">• let now_rate = response[&#39;rate&#39;]; 코드는 rate API의 실시간 환율 data를 가져온다.</h5>
<h6 id="↳-처음에-let-now_rate--response0rate라고-코딩했더니-error가-났다">↳ 처음에 let now_rate = response[0][&#39;rate&#39;];라고 코딩했더니 error가 났다.</h6>
<h6 id="↳-210917-error가-난-이유는-환율-api-주소로-들어가면-화면에-아래와-같이-뜨는데-json-형태로-값이-1개만-들어가-있다-이-경우-값이-array-형태가-아니기-때문에-response0-또는-response1을-로그로-찍어보면-undefined되어-있다고-나온다-따라서-api-json-형태에-맞게-ajax를-사용해야-error가-나오지-않는다">↳ (210917+) error가 난 이유는 환율 API 주소로 들어가면 화면에 아래와 같이 뜨는데, JSON 형태로 값이 1개만 들어가 있다. 이 경우 값이 array 형태가 아니기 때문에 response[0] 또는 response[1]을 로그로 찍어보면 undefined되어 있다고 나온다. 따라서 API JSON 형태에 맞게 Ajax를 사용해야 error가 나오지 않는다.</h6>
<p><img src="https://images.velog.io/images/waterlily_0101/post/5f9cc770-b55a-4ae6-89c0-a8c9584a5b25/2021-09-17%20(4).png" alt=""></p>
<h5 id="-now-ratetextnow_rate-코드는-쇼핑몰-메인-페이지에-실시간-환율-data를-시각적으로-보여주는데-사용되었다">• $(&#39;#now-rate&#39;).text(now_rate); 코드는 쇼핑몰 메인 페이지에 실시간 환율 data를 시각적으로 보여주는데 사용되었다.</h5>
<br>

<h2 id="📍-6th-item-order-박스-만들기">📍 6th. item order 박스 만들기</h2>
<p><img src="https://images.velog.io/images/waterlily_0101/post/2a408093-7cb3-46ca-af5c-49fa93aee9b9/2021-09-17%20%ED%96%A5%EC%B4%88%20ITEM%20ORDER%20BOX.png" alt=""></p>
<h3 id="bootstrap-forms-코드스니펫-활용하기">Bootstrap forms 코드스니펫 활용하기</h3>
<blockquote>
<p><a href="https://getbootstrap.com/docs/4.0/components/forms/">https://getbootstrap.com/docs/4.0/components/forms/</a></p>
</blockquote>
<h3 id="☑-내가-한-방법">☑ 내가 한 방법</h3>
<p><code>&lt;body&gt; ~ &lt;/body&gt;</code> 사이에</p>
<h4 id="①-주문자-이름">① 주문자 이름</h4>
<blockquote>
<pre><code></code></pre></blockquote>
<div class="form-group">
    <p>
    <div class="input-group">
        <div class="input-group-prepend">
            <span class="input-group-text" id="inputGroupPrepend">주문자 이름</span>
        </div>
        <input type="text" class="form-control" id="validationCustomUsername" placeholder="" aria-describedby="inputGroupPrepend" required>
    </div>
    </p>
</div>

<h4 id="②-수량">② 수량</h4>
<blockquote>
<pre><code></code></pre></blockquote>
<div class="form-group">
    <p>
    <div class="input-group">
        <div class="input-group-prepend">
            <span class="input-group-text" id="inputGroupPrepend">수량</span>
        </div>
        <select name="custom-select mr-sm-2" class="form-control" id="validationCustomUsername" placeholder="" aria-describedby="inputGroupPrepend" required>
            <option selected>-- 수량을 선택하세요 --</option>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
        </select>
    </div>
    </p>
</div>
```

<h4 id="③-주소">③ 주소</h4>
<blockquote>
<pre><code></code></pre></blockquote>
<div class="form-group">
    <p>
    <div class="input-group">
        <div class="input-group-prepend">
            <span class="input-group-text" id="inputGroupPrepend">주소</span>
        </div>
        <input type="text" class="form-control" id="validationCustomUsername" placeholder="" aria-describedby="inputGroupPrepend" required>
    </div>
    </p>
</div>
```

<h4 id="④-전화번호">④ 전화번호</h4>
<blockquote>
<pre><code></code></pre></blockquote>
<div class="form-group">
    <p>
    <div class="input-group">
        <div class="input-group-prepend">
            <span class="input-group-text" id="inputGroupPrepend">전화번호</span>
        </div>
        <input type="text" class="form-control" id="validationCustomUsername" placeholder="" aria-describedby="inputGroupPrepend" required>
    </div>
    </p>
</div>
```

<p><code>&lt;style&gt; ~ &lt;/style&gt;</code> 사이에</p>
<blockquote>
<pre><code>.form-group {
    width: 610px;
    margin: auto;
}</code></pre></blockquote>
<pre><code>##### • auto는 좌우의 바깥 여백을 똑같이 배분한 것이다. 그래서 브라우저 화면 중앙에 위치하게 된다.

&lt;br&gt;

## 📍 7th. &#39;주문하기&#39; 버튼을 클릭했을 때, &#39;주문이 완료되었습니다.&#39;라는 alert 띄우기
### ☑ 내가 한 방법
`&lt;body&gt; ~ &lt;/body&gt;` 사이에
&gt; ```
&lt;div class=&quot;form-group2&quot;&gt;
    &lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot; onclick=&quot;order()&quot;&gt;주문하기&lt;/button&gt;
&lt;/div&gt;</code></pre><h5 id="--button-태그-안에-onclickorder를-언급해야-기능으로-작동한다">•  <code>&lt;button&gt;</code> 태그 안에 onclick=&quot;order()&quot;를 언급해야 기능으로 작동한다.</h5>
<p><code>&lt;style&gt; ~ &lt;/style&gt;</code> 사이에</p>
<blockquote>
<pre><code>.form-group2 {
    text-align: center;
    margin-bottom: 250px;
}</code></pre></blockquote>
<pre><code>##### • text-align 속성은 텍스트의 정렬 방향을 의미한다. 정렬 방향을 center(중앙 정렬)로 코딩했기 때문에 &#39;주문하기&#39; text 위치가 button 안에서 중앙에 위치한다.

`&lt;script&gt; ~ &lt;/script&gt;` 사이에
&gt; ```
function order() {
    alert(&quot;주문이 완료되었습니다.&quot;);
}</code></pre><br>

<hr>
<p><img src="https://images.velog.io/images/waterlily_0101/post/35625127-13d9-42ef-afc1-c5caf1f0d9bd/2021-09-15_1,2%EC%A3%BC%EC%B0%A8HW.png" alt=""></p>
<h5 id="완성-코드">&lt;완성 코드&gt;</h5>
<pre><code>&lt;!doctype html&gt;
&lt;html lang=&quot;en&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;!-- Optional JavaScript --&gt;
    &lt;!-- jQuery first, then Popper.js, then Bootstrap 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;script src=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js&quot;
            integrity=&quot;sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl&quot;
            crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;

    &lt;title&gt;스파르타코딩클럽 | 부트스트랩 연습하기&lt;/title&gt;

    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Jua&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

    &lt;style&gt;
        * {
            font-family: &#39;Jua&#39;, sans-serif;
        }

        .item-img {
            text-align: center;
            padding: 40px 0px 30px 0px;
        }

        .item-desc {
            width: 610px;
            margin: auto;
        }

        .explain {
            margin-top: -20px;
        }

        .form-group {
            width: 610px;
            margin: auto;
        }

        .form-group2 {
            text-align: center;
            margin-bottom: 250px;
        }

        .rate {
            color: blue;
        }
    &lt;/style&gt;

    &lt;script&gt;
        $(document).ready(function () {
            get_rate();
        });

        function get_rate(){
            $.ajax({
                type: &quot;GET&quot;,
                url: &quot;http://spartacodingclub.shop/sparta_api/rate&quot;,
                data: {},
                success: function (response) {
                    let now_rate = response[&#39;rate&#39;];
                    $(&#39;#now-rate&#39;).text(now_rate);
                }
            })
        }

        function order() {
            alert(&quot;주문이 완료되었습니다.&quot;);
        }
    &lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;div class=&quot;wrap&quot;&gt;
        &lt;div class=&quot;item-img&quot;&gt;
            &lt;img src=&quot;https://media.istockphoto.com/photos/spa-massage-picture-id607910912?k=20&amp;m=607910912&amp;s=612x612&amp;w=0&amp;h=GEney-H5Z87um9h8t34MeTm3FM-wOZ5PvW06SThhCuY=&quot;&gt;
        &lt;/div&gt;

        &lt;div class=&quot;item-desc&quot;&gt;
            &lt;p&gt;&lt;span style=&quot;font-size: 250%;&quot;&gt;라벤더 향초&lt;/span&gt;
               &lt;span style=&quot;font-size: 100%;&quot;&gt;가격: 10,000원/개&lt;/span&gt;&lt;/p&gt;
            &lt;p class=&quot;explain&quot;&gt;이 향초는 사실 특별한 힘을 가지고 있어요. 향초를 켜고 소원을 빌면 짜자잔 뭐든지 이뤄지게 됩니다. 하나 사가세요! 라벤더 향이 아주 좋아요!&lt;/p&gt;
            &lt;p class=&quot;rate&quot;&gt;달러-원 환율: &lt;span id=&quot;now-rate&quot;&gt;1219.15&lt;/span&gt;&lt;/p&gt;
        &lt;/div&gt;

        &lt;div&gt;
            &lt;div class=&quot;form-group&quot;&gt;
                &lt;p&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;div class=&quot;input-group-prepend&quot;&gt;
                        &lt;span class=&quot;input-group-text&quot; id=&quot;inputGroupPrepend&quot;&gt;주문자 이름&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;input type=&quot;text&quot; class=&quot;form-control&quot; id=&quot;validationCustomUsername&quot; placeholder=&quot;&quot; aria-describedby=&quot;inputGroupPrepend&quot; required&gt;
                &lt;/div&gt;
                &lt;/p&gt;
            &lt;/div&gt;

            &lt;div class=&quot;form-group&quot;&gt;
                &lt;p&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;div class=&quot;input-group-prepend&quot;&gt;
                        &lt;span class=&quot;input-group-text&quot; id=&quot;inputGroupPrepend&quot;&gt;수량&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;select name=&quot;custom-select mr-sm-2&quot; class=&quot;form-control&quot; id=&quot;validationCustomUsername&quot; placeholder=&quot;&quot; aria-describedby=&quot;inputGroupPrepend&quot; required&gt;
                        &lt;option selected&gt;-- 수량을 선택하세요 --&lt;/option&gt;
                        &lt;option value=&quot;1&quot;&gt;1&lt;/option&gt;
                        &lt;option value=&quot;2&quot;&gt;2&lt;/option&gt;
                        &lt;option value=&quot;3&quot;&gt;3&lt;/option&gt;
                    &lt;/select&gt;
                &lt;/div&gt;
                &lt;/p&gt;
            &lt;/div&gt;

            &lt;div class=&quot;form-group&quot;&gt;
                &lt;p&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;div class=&quot;input-group-prepend&quot;&gt;
                        &lt;span class=&quot;input-group-text&quot; id=&quot;inputGroupPrepend&quot;&gt;주소&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;input type=&quot;text&quot; class=&quot;form-control&quot; id=&quot;validationCustomUsername&quot; placeholder=&quot;&quot; aria-describedby=&quot;inputGroupPrepend&quot; required&gt;
                &lt;/div&gt;
                &lt;/p&gt;
            &lt;/div&gt;

            &lt;div class=&quot;form-group&quot;&gt;
                &lt;p&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;div class=&quot;input-group-prepend&quot;&gt;
                        &lt;span class=&quot;input-group-text&quot; id=&quot;inputGroupPrepend&quot;&gt;전화번호&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;input type=&quot;text&quot; class=&quot;form-control&quot; id=&quot;validationCustomUsername&quot; placeholder=&quot;&quot; aria-describedby=&quot;inputGroupPrepend&quot; required&gt;
                &lt;/div&gt;
                &lt;/p&gt;
            &lt;/div&gt;

            &lt;div class=&quot;form-group2&quot;&gt;
                &lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot; onclick=&quot;order()&quot;&gt;주문하기&lt;/button&gt;
            &lt;/div&gt;

        &lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[210914 개발일지]]></title>
            <link>https://velog.io/@waterlily_0101/210914-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@waterlily_0101/210914-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Tue, 14 Sep 2021 09:35:40 GMT</pubDate>
            <description><![CDATA[<h1 id="ajax"><code>&lt;Ajax&gt;</code></h1>
<h1 id="1-ajax-기본-골격">1. Ajax 기본 골격</h1>
<blockquote>
</blockquote>
<pre><code>$.ajax({
    type: &quot;GET&quot;,
    url: &quot;여기에URL을입력&quot;,
    data: {},
    success: function(response){
        console.log(response)
    }
})</code></pre><br>

<h1 id="2-ajax-코드-설명">2. $ajax 코드 설명</h1>
<p>☑ type: &quot;GET&quot; → GET 방식으로 요청한다.</p>
<blockquote>
<h5 id="get-데이터-조회read-요청할-때">GET: 데이터 조회(READ) 요청할 때</h5>
</blockquote>
<h5 id="post-데이터-생성create-변경update-삭제delete-요청할-때">POST: 데이터 생성(CREATE), 변경(UPDATE), 삭제(DELETE) 요청할 때</h5>
<p>☑ url: 요청할 url
☑ data: 요청하면서 함게 줄 데이터 (GET 요청시에는 비워두기)</p>
<blockquote>
<h5 id="get-요청은-url뒤에-아래와-같이-붙여서-데이터를-가져간다">GET 요청은, url뒤에 아래와 같이 붙여서 데이터를 가져간다.</h5>
</blockquote>
<pre><code>url: &quot;http://naver.com?param=value&amp;param2=value2&quot;,</code></pre><h5 id="post-요청은-data---에-넣어서-데이터를-가져간다">POST 요청은, data : {} 에 넣어서 데이터를 가져간다.</h5>
<pre><code>data: {param: &#39;value&#39;, param2: &#39;value2&#39;},</code></pre><p>☑ success: 성공하면, response값에 서버의 결과 값을 담아서 함수를 실행한다.</p>
<blockquote>
</blockquote>
<pre><code>success: function(response){ // 서버에서 준 결과를 response라는 변수에 담음
    console.log(response) // 서버에서 준 결과를 이용해서 나머지 코드를 작성
}</code></pre><br>

<h1 id="3-jquery와-ajax의-조합-연습">3. jQuery와 Ajax의 조합 연습</h1>
<h2 id="3-1-서울시-실시간-미세먼지-상태">3-1) 서울시 실시간 미세먼지 상태</h2>
<h4 id="☑-서울시-실시간-미세먼지-상태-openaip-httpopenapiseoulgokr80886d4d776b466c656533356a4b4b5872jsonrealtimecityair199">☑ 서울시 실시간 미세먼지 상태 OpenAIP <a href="http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99">http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99</a></h4>
<blockquote>
<h5 id="url-클릭하면-아래-이미지-나옴">(url 클릭하면 아래 이미지 나옴.)</h5>
<p><img src="https://images.velog.io/images/waterlily_0101/post/fd1cb3cf-ebdb-4bf1-a8bf-267ce348e45b/2021-09-14_ajax%EC%97%B0%EC%8A%B5(1)%EB%AF%B8%EC%84%B8%EB%A8%BC%EC%A7%80.png" alt=""></p>
</blockquote>
<h4 id="☑-업데이트-버튼을-누를-때마다-지웠다-새로-씌여지는-상태로-구현하기">☑ 업데이트 버튼을 누를 때마다 지웠다 새로 씌여지는 상태로 구현하기</h4>
<blockquote>
<p><code>$(&#39;#names-q1&#39;).empty()</code></p>
</blockquote>
<h4 id="☑-미세먼지-수치가-50-이상인-지역구만-빨간색인-상태로-구현하기">☑ &#39;미세먼지 수치&#39;가 &#39;50 이상&#39;인 지역구만 &#39;빨간색&#39;인 상태로 구현하기</h4>
<blockquote>
<h4 id="①-url---에-서울시-실시간-미세먼지-상태-openaip-넣기">① url: &quot; &quot;, 에 서울시 실시간 미세먼지 상태 OpenAIP 넣기</h4>
</blockquote>
<h4 id="②-가져올-data값-부르기">② 가져올 data값 부르기</h4>
<p>  ☐ <code>let rows = response[&#39;RealtimeCityAir&#39;][&#39;row&#39;]</code>
  ☛ RealtimeCityAir 하위에 위치해 있는 row data값 가져온다. </p>
<h4 id="③-가져올-rows의-범위-정하기">③ 가져올 rows의 범위 정하기</h4>
<p>  ☐ <code>for (let i = 0; i &lt; rows.length; i++)</code>
  ☛ i는 0부터 rows.length까지의 data값을 1개씩 +해서 가져온다.</p>
<h4 id="④-row-하위에-위치한-구이름gu_name과-미세먼지-수치gu_mise의-data값-이름을-가져오기">④ row 하위에 위치한 &#39;구이름(gu_name)&#39;과 &#39;미세먼지 수치(gu_mise)&#39;의 data값 이름을 가져오기</h4>
<p>  ☐ <code>let gu_name = rows[i][&#39;MSRSTE_NM&#39;]</code>
  ☛ 구이름(gu_name)의 data값을 row의 MSRSTE_NM에서 가져온다.
  ☐ <code>let gu_mise = rows[i][&#39;IDEX_MVL&#39;]</code>
  ☛ 미세먼지 수치(gu_mise)의 data값을을 row의 IDEX_MVL에서 가져온다.</p>
<h4 id="⑤-미세먼지-수치가-50-이상인-지역구만-빨간색인-상태로-구현하기">⑤ &#39;미세먼지 수치&#39;가 &#39;50 이상&#39;인 지역구만 &#39;빨간색&#39;인 상태로 구현하기</h4>
<p>  ☐ <code>&lt;script&gt; ~ &lt;/script&gt;</code> 안에</p>
<pre><code>let temp_html = ``
if (gu_mise &gt; 50) {
    temp_html = `&lt;li class=&quot;bad&quot;&gt;${gu_name} : ${gu_mise}&lt;/li&gt;`
} else {
    temp_html = `&lt;li&gt;${gu_name} : ${gu_mise}&lt;/li&gt;`
}
$(&#39;#names-q1&#39;).append(temp_html)</code></pre><p>  ☐ <code>&lt;style&gt; ~ &lt;/style&gt;</code> 안에</p>
<pre><code>.bad {
    color: red;
}</code></pre><hr>
<p><img src="https://images.velog.io/images/waterlily_0101/post/1b28a32e-4b59-4b04-a0e0-9021813510f6/2021-09-14_ajax%EC%97%B0%EC%8A%B5(1)%EB%AF%B8%EC%84%B8%EB%A8%BC%EC%A7%80%EC%99%84%EC%84%B1.png" alt=""></p>
<h5 id="완성-코드">&lt;완성 코드&gt;</h5>
<pre><code>&lt;!doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;

&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;jQuery 연습하고 가기!&lt;/title&gt;

    &lt;!-- jQuery를 import 합니다 --&gt;
    &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js&quot;&gt;&lt;/script&gt;

    &lt;style type=&quot;text/css&quot;&gt;
        div.question-box {
            margin: 10px 0 20px 0;
        }

        .bad {
            color: red;
        }
    &lt;/style&gt;

    &lt;script&gt;
        function q1() {
            $(&#39;#names-q1&#39;).empty()
            $.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 = response[&#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 = rows[i][&#39;IDEX_MVL&#39;]

                        let temp_html = ``
                        if (gu_mise &gt; 50) {
                            temp_html = `&lt;li class=&quot;bad&quot;&gt;${gu_name} : ${gu_mise}&lt;/li&gt;`
                        } else {
                            temp_html = `&lt;li&gt;${gu_name} : ${gu_mise}&lt;/li&gt;`
                        }
                        $(&#39;#names-q1&#39;).append(temp_html)
                    }
                }
            })
        }
    &lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;h1&gt;jQuery와 Ajax의 조합 연습&lt;/h1&gt;

    &lt;hr /&gt;

    &lt;div class=&quot;question-box&quot;&gt;
        &lt;h2&gt;서울시 OpenAPI(실시간 미세먼지 상태)를 이용하기&lt;/h2&gt;
        &lt;button onclick=&quot;q1()&quot;&gt;업데이트&lt;/button&gt;
        &lt;ul id=&quot;names-q1&quot;&gt;
        &lt;/ul&gt;
    &lt;/div&gt;
&lt;/body&gt;

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

<h2 id="3-2-서울시-실시간-따릉이-현황">3-2) 서울시 실시간 따릉이 현황</h2>
<h4 id="☑-서울시-실시간-따릉이-현황-openaip-httpspartacodingclubshopsparta_apiseoulbike">☑ 서울시 실시간 따릉이 현황 OpenAIP <a href="http://spartacodingclub.shop/sparta_api/seoulbike">http://spartacodingclub.shop/sparta_api/seoulbike</a></h4>
<blockquote>
<h5 id="url-클릭하면-아래-이미지-나옴-1">(url 클릭하면 아래 이미지 나옴.)</h5>
<p><img src="https://images.velog.io/images/waterlily_0101/post/db7c638a-67fb-4b72-9b60-1dcd4cc34e9a/2021-09-14_ajax%EC%97%B0%EC%8A%B5(2)%EB%94%B0%EB%A6%89%EC%9D%B4OpenAPI.png" alt=""></p>
</blockquote>
<h4 id="☑-업데이트-버튼을-누를-때마다-지웠다-새로-씌여지는-상태로-구현하기-1">☑ 업데이트 버튼을 누를 때마다 지웠다 새로 씌여지는 상태로 구현하기</h4>
<blockquote>
<p><code>$(&#39;#names-q1&#39;).empty()</code></p>
</blockquote>
<h4 id="☑-현재-거치된-따릉이-수가-5-이하인-거치대-위치만-빨간색인-상태로-구현하기">☑ &#39;현재 거치된 따릉이 수&#39;가 &#39;5 이하&#39;인 거치대 위치만 &#39;빨간색&#39;인 상태로 구현하기</h4>
<blockquote>
<h4 id="①-url---에-서울시-실시간-따릉이-현황-openaip-넣기">① url: &quot; &quot;, 에 서울시 실시간 따릉이 현황 OpenAIP 넣기</h4>
</blockquote>
<h4 id="②-가져올-data값-부르기-1">② 가져올 data값 부르기</h4>
<p>☐ <code>let rows = response[&#39;getStationList&#39;][&#39;row&#39;]</code>
☛ getStationList 하위에 위치해 있는 row data값 가져온다. </p>
<h4 id="③-가져올-rows의-범위-정하기-1">③ 가져올 rows의 범위 정하기</h4>
<p>☐ <code>for (let i = 0; i &lt; rows.length; i++)</code>
☛ i는 0부터 rows.length까지의 data값을 1개씩 +해서 가져온다.</p>
<h4 id="④-row-하위에-위치한-거치대-위치name와-거치대-수rack-현재-거치된-따릉이의-수bike의-data값-이름-가져오기">④ row 하위에 위치한 &#39;거치대 위치(name)&#39;와 &#39;거치대 수(rack)&#39;, &#39;현재 거치된 따릉이의 수(bike)&#39;의 data값 이름 가져오기</h4>
<p>  ☐ <code>let name = rows[i][&#39;stationName&#39;]</code>
  ☛ 거치대 위치(name)의 data값을 row의 stationName에서 가져온다.
  ☐ <code>let rack = rows[i][&#39;rackTotCnt&#39;]</code>
  ☛ 거치대 수(rack)의 data값을을 row의 rackTotCnt에서 가져온다.
  ☐ <code>let bike = rows[i][&#39;parkingBikeTotCnt&#39;]</code>
  ☛ 현재 거치된 따릉이의 수(bike)의 data값을을 row의 parkingBikeTotCnt 에서 가져온다.</p>
<h4 id="⑤-현재-거치된-따릉이-수가-5-이하인-거치대-위치만-빨간색인-상태로-구현하기">⑤ &#39;현재 거치된 따릉이 수&#39;가 &#39;5 이하&#39;인 거치대 위치만 &#39;빨간색&#39;인 상태로 구현하기</h4>
<p>  ☐ <code>&lt;script&gt; ~ &lt;/script&gt;</code> 안에</p>
<pre><code>let temp_html = ``
    if (bike &lt; 5) {
        temp_html = `&lt;tr class=&quot;bad&quot;&gt;
                        &lt;td&gt;${name}&lt;/td&gt;
                        &lt;td&gt;${rack}&lt;/td&gt;
                        &lt;td&gt;${bike}&lt;/td&gt;
                    &lt;/tr&gt;`
    } else {
        temp_html = `&lt;tr&gt;
                        &lt;td&gt;${name}&lt;/td&gt;
                        &lt;td&gt;${rack}&lt;/td&gt;
                        &lt;td&gt;${bike}&lt;/td&gt;
                     &lt;/tr&gt;`
    }
$(&#39;#names-q1&#39;).append(temp_html)</code></pre><p>  ☐ <code>&lt;style&gt; ~ &lt;/style&gt;</code> 안에</p>
<pre><code>.bad {
    color: red;
}</code></pre><hr>
<p><img src="https://images.velog.io/images/waterlily_0101/post/8e0c4f96-f4fe-43d8-af31-807c0c29f1d6/2021-09-14_ajax%EC%97%B0%EC%8A%B5(2)%EB%94%B0%EB%A6%89%EC%9D%B4%EC%99%84%EC%84%B1.png" alt=""></p>
<h5 id="완성-코드-1">&lt;완성 코드&gt;</h5>
<pre><code>&lt;!doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;

&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;JQuery 연습하고 가기!&lt;/title&gt;
    &lt;!-- JQuery를 import 합니다 --&gt;
    &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js&quot;&gt;&lt;/script&gt;

    &lt;style type=&quot;text/css&quot;&gt;
        div.question-box {
            margin: 10px 0 20px 0;
        }

        table {
            border: 1px solid;
            border-collapse: collapse;
        }

        td,
        th {
            padding: 10px;
            border: 1px solid;
        }

        .bad {
            color: red;
        }
    &lt;/style&gt;

    &lt;script&gt;
        function q1() {
            $(&#39;#names-q1&#39;).empty()
            $.ajax({
                type: &quot;GET&quot;,
                url: &quot;http://spartacodingclub.shop/sparta_api/seoulbike&quot;,
                data: {},
                success: function (response) {
                    let rows = response[&#39;getStationList&#39;][&#39;row&#39;]
                    for (let i = 0; i &lt; rows.length; i++) {
                        let name = rows[i][&#39;stationName&#39;]
                        let rack = rows[i][&#39;rackTotCnt&#39;]
                        let bike = rows[i][&#39;parkingBikeTotCnt&#39;]

                        let temp_html = ``
                            if (bike &lt; 5) {
                                temp_html = `&lt;tr class=&quot;bad&quot;&gt;
                                                &lt;td&gt;${name}&lt;/td&gt;
                                                &lt;td&gt;${rack}&lt;/td&gt;
                                                &lt;td&gt;${bike}&lt;/td&gt;
                                            &lt;/tr&gt;`
                            } else {
                                temp_html = `&lt;tr&gt;
                                                &lt;td&gt;${name}&lt;/td&gt;
                                                &lt;td&gt;${rack}&lt;/td&gt;
                                                &lt;td&gt;${bike}&lt;/td&gt;
                                            &lt;/tr&gt;`
                            }
                        $(&#39;#names-q1&#39;).append(temp_html)
                    }
                }
            })
        }
    &lt;/script&gt;

&lt;/head&gt;

&lt;body&gt;
    &lt;h1&gt;jQuery와 Ajax의 조합 연습&lt;/h1&gt;

    &lt;hr /&gt;

    &lt;div class=&quot;question-box&quot;&gt;
        &lt;h2&gt;서울시 OpenAPI(실시간 따릉이 현황)를 이용하기&lt;/h2&gt;
        &lt;button onclick=&quot;q1()&quot;&gt;업데이트&lt;/button&gt;
        &lt;table&gt;
            &lt;thead&gt;
                &lt;tr&gt;
                    &lt;td&gt;거치대 위치&lt;/td&gt;
                    &lt;td&gt;거치대 수&lt;/td&gt;
                    &lt;td&gt;현재 거치된 따릉이 수&lt;/td&gt;
                &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody id=&quot;names-q1&quot;&gt;
            &lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;
&lt;/body&gt;

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

<h2 id="3-3-랜덤-고양이-사진">3-3) 랜덤 고양이 사진</h2>
<h4 id="☑-고양이-openaip-httpspartacodingclubshopsparta_apiseoulbike">☑ 고양이 OpenAIP <a href="http://spartacodingclub.shop/sparta_api/seoulbike">http://spartacodingclub.shop/sparta_api/seoulbike</a></h4>
<blockquote>
<h5 id="url-클릭하면-아래-이미지-나옴-2">(url 클릭하면 아래 이미지 나옴.)</h5>
<p><img src="https://images.velog.io/images/waterlily_0101/post/3f6586e8-f9ff-4e10-8cf2-96305b6806dd/2021-09-14_ajax%EC%97%B0%EC%8A%B5(3)%EA%B3%A0%EC%96%91%EC%9D%B4OpenAPI.png" alt=""></p>
</blockquote>
<h4 id="☑-로딩-후-바로-실행하는-방법">☑ 로딩 후 바로 실행하는 방법</h4>
<p>: 로딩 후 바로 고양이 사진 나오게 하기</p>
<blockquote>
</blockquote>
<pre><code>$(document).ready(function () {
    q1();
});</code></pre><h4 id="☑-업데이트-버튼을-누를-때마다-지웠다-새로-씌여지는-상태로-구현하기-2">☑ 업데이트 버튼을 누를 때마다 지웠다 새로 씌여지는 상태로 구현하기</h4>
<p>: 새로운 고양이 사진 나오게 하기</p>
<blockquote>
<h4 id="①-url---에-고양이-openaip-넣기">① url: &quot; &quot;, 에 고양이 OpenAIP 넣기</h4>
</blockquote>
<h4 id="②-가져올-data값-부르기-2">② 가져올 data값 부르기</h4>
<p>☐ <code>let imgurl = response[0][&#39;url&#39;]</code>
☛ list에는 하나의 dictionary만 존재하기 때문에 0번째에 있는 url data값을 가져오도록 프로그래밍한다.</p>
<h4 id="③-jquery-이미지-태그-src-바꾸는-방법">③ jQuery 이미지 태그 src 바꾸는 방법</h4>
<p>☐ <code>$(&#39;#img-cat&#39;).attr(&quot;src&quot;, imgurl);</code></p>
<hr>
<p><img src="https://images.velog.io/images/waterlily_0101/post/785e8f1d-e108-4437-8db4-12a4a6e968a4/2021-09-14_ajax%EC%97%B0%EC%8A%B5(3)%EA%B3%A0%EC%96%91%EC%9D%B41.png" alt="">
<img src="https://images.velog.io/images/waterlily_0101/post/982b5714-a093-424c-94ac-b2ff7d677fe5/2021-09-14_ajax%EC%97%B0%EC%8A%B5(3)%EA%B3%A0%EC%96%91%EC%9D%B4%EC%99%84%EC%84%B12.png" alt=""></p>
<h5 id="완성-코드-2">&lt;완성 코드&gt;</h5>
<pre><code>&lt;!doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;
  &lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;JQuery 연습하고 가기!&lt;/title&gt;
    &lt;!-- JQuery를 import 합니다 --&gt;
    &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js&quot;&gt;&lt;/script&gt;

    &lt;style type=&quot;text/css&quot;&gt;
      div.question-box {
        margin: 10px 0 20px 0;
      }
      div.question-box &gt; div {
        margin-top: 30px;
      }

    &lt;/style&gt;

    &lt;script&gt;
        $(document).ready(function () {
            q1();
        });

        function q1() {
            $.ajax({
                type: &quot;GET&quot;,
                url: &quot;https://api.thecatapi.com/v1/images/search&quot;,
                data: {},
                success: function (response) {
                    let imgurl = response[0][&#39;url&#39;]
                    $(&#39;#img-cat&#39;).attr(&quot;src&quot;, imgurl);
                }
            })
        }
    &lt;/script&gt;

  &lt;/head&gt;
  &lt;body&gt;
    &lt;h1&gt;JQuery와 Ajax의 조합 연습&lt;/h1&gt;

    &lt;hr/&gt;

    &lt;div class=&quot;question-box&quot;&gt;
      &lt;h2&gt;랜덤 고양이 사진 API를 이용하기&lt;/h2&gt;
      &lt;button onclick=&quot;q1()&quot;&gt;고양이를 보자&lt;/button&gt;
      &lt;div&gt;
        &lt;img id=&quot;img-cat&quot; src=&quot;https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png&quot;/&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><br>

<h2 id="3-4-나홀로메모장에-openapi-붙여보기">3-4) 나홀로메모장에 OpenAPI 붙여보기</h2>
<h4 id="☑-나홀로메모장-openaipget">☑ 나홀로메모장 OpenAIP(GET)</h4>
<p><a href="http://spartacodingclub.shop/post">http://spartacodingclub.shop/post</a></p>
<blockquote>
<h5 id="url-클릭하면-아래-이미지-나옴-3">(url 클릭하면 아래 이미지 나옴.)</h5>
<p><img src="https://images.velog.io/images/waterlily_0101/post/0f905838-b858-438d-8c92-53b3d054ef3b/2021-09-16_%EB%82%98%ED%99%80%EB%A1%9C%EB%A9%94%EB%AA%A8%EC%9E%A5OpenAPI.png" alt=""></p>
</blockquote>
<h4 id="☑-로딩-후-바로-실행하는-방법-1">☑ 로딩 후 바로 실행하는 방법</h4>
<p>: 로딩 후 바로 movie articles 나오게 하기</p>
<blockquote>
</blockquote>
<pre><code>$(document).ready(function () {
    $(&#39;#cards-box&#39;).empty();
    listing();
});</code></pre><h4 id="☑-ajax-코드를-활용하여-나홀로메모장-openapi-가져오기">☑ $ajax 코드를 활용하여 나홀로메모장 OpenAPI 가져오기</h4>
<blockquote>
<h4 id="①-url---에-나홀로메모장movie-articles-openaip-넣기">① url: &quot; &quot;, 에 나홀로메모장(movie articles) OpenAIP 넣기</h4>
</blockquote>
<h4 id="②-가져올-data값-부르기-3">② 가져올 data값 부르기</h4>
<p>☐ <code>let rows = response[&#39;articles&#39;]</code>
☛ articles data값 가져온다. </p>
<h4 id="③-가져올-rows의-범위-정하기-2">③ 가져올 rows의 범위 정하기</h4>
<p>☐ <code>for (let i = 0; i &lt; rows.length; i++)</code>
☛ i는 0부터 rows.length까지의 data값을 1개씩 +해서 가져온다.</p>
<h4 id="④-dictionary-순서에-따른-comment와-desc-image-title-url의-data값-가져오기">④ dictionary 순서에 따른 &#39;comment&#39;와 &#39;desc&#39;, &#39;image&#39;, &#39;title&#39;, &#39;url&#39;의 data값 가져오기</h4>
<p>  ☐ <code>let comment = rows[i][&#39;comment&#39;]</code>
  ☛ i번째에 위치한 comment의 data값을 가져온다.
  ☛ 이하 같은 원리로 i번째에 위치한 각각의 data값을 가져온다.</p>
<h4 id="⑤-브라우저에-data가-시각화되어-보이게-하는-코드-작성하기">⑤ 브라우저에 data가 시각화되어 보이게 하는 코드 작성하기</h4>
<pre><code>let temp_html = `&lt;div class=&quot;card&quot;&gt;
                    &lt;img class=&quot;card-img-top&quot;
                         src=&quot;${image}&quot;
                         alt=&quot;Card image cap&quot;&gt;
                    &lt;div class=&quot;card-body&quot;&gt;
                        &lt;a href=&quot;${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;`</code></pre><p>☛ <code>&lt;body&gt;</code>태그 사이에 위치한 <code>&lt;div class=&quot;card&quot;&gt;</code>를 <code>let temp_html =</code> 뒤에 붙여 바뀌는 data값을 <code>${}</code> 형태로 변경한다.</p>
<h4 id="⑥-코딩한temp_html이-실제로-브라우저에-시각화되어-보이게-하기">⑥ 코딩한<code>temp_html</code>이 실제로 브라우저에 시각화되어 보이게 하기</h4>
<p>☐ <code>$(&#39;#cards-box&#39;).append(temp_html)</code></p>
<hr>
<p><img src="https://images.velog.io/images/waterlily_0101/post/2a78277b-75ba-4373-a660-d1922680c0b6/2021-09-16_%EB%82%98%ED%99%80%EB%A1%9C%EB%A9%94%EB%AA%A8%EC%9E%A5%EC%99%84%EC%84%B1.png" alt=""></p>
<h5 id="완성-코드-3">&lt;완성 코드&gt;</h5>
<pre><code>&lt;!doctype html&gt;
&lt;html lang=&quot;en&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;!-- Optional JavaScript --&gt;
    &lt;!-- jQuery first, then Popper.js, then Bootstrap 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;script src=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js&quot;
            integrity=&quot;sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl&quot;
            crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;

    &lt;title&gt;스파르타코딩클럽 | 부트스트랩 연습하기&lt;/title&gt;

    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Jua&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

    &lt;style&gt;
        * {
            font-family: &#39;Jua&#39;, sans-serif;
        }

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

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

        .posting-box {
            width: 500px;
            margin: 10px auto 30px auto;
            border: 3px solid black;
            border-radius: 5px;
            padding: 25px;

            display: none;
        }
    &lt;/style&gt;

    &lt;script&gt;
        $(document).ready(function () {
            $(&#39;#cards-box&#39;).empty();
            listing();
        });

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

                        let temp_html = `&lt;div class=&quot;card&quot;&gt;
                                            &lt;img class=&quot;card-img-top&quot;
                                                 src=&quot;${image}&quot;
                                                 alt=&quot;Card image cap&quot;&gt;
                                            &lt;div class=&quot;card-body&quot;&gt;
                                                &lt;a href=&quot;${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)
                    }
                }
            })
        }

        function openclose() {
            let status = $(&#39;#post-box&#39;).css(&#39;display&#39;);
            if (status == &#39;block&#39;) {
                $(&#39;#post-box&#39;).hide();
                $(&#39;#btn-posting-box&#39;).text(&#39;포스팅박스 열기&#39;);
            } else {
                $(&#39;#post-box&#39;).show();
                $(&#39;#btn-posting-box&#39;).text(&#39;포스팅박스 닫기&#39;);
            }
        }
    &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;a onclick=&quot;openclose()&quot; id=&quot;btn-posting-box&quot; class=&quot;btn btn-primary btn-lg&quot; href=&quot;#&quot; role=&quot;button&quot;&gt;포스트박스 열기&lt;/a&gt;
        &lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;posting-box&quot; id=&quot;post-box&quot;&gt;
        &lt;div class=&quot;form-group&quot;&gt;
            &lt;label&gt;아티클 URL&lt;/label&gt;
            &lt;input type=&quot;email&quot; class=&quot;form-control&quot; id=&quot;article-url&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;exampleInputEmail1&quot;&gt;간단 코멘트&lt;/label&gt;
            &lt;textarea class=&quot;form-control&quot; id=&quot;exampleInputEmail1&quot; rows=&quot;&quot;&gt;&lt;/textarea&gt;
        &lt;/div&gt;
        &lt;button type=&quot;submit&quot; class=&quot;btn btn-primary form-group&quot;&gt;기사저장&lt;/button&gt;
    &lt;/div&gt;

    &lt;div class=&quot;card-columns&quot; id=&quot;cards-box&quot;&gt;
        &lt;div class=&quot;card&quot;&gt;
            &lt;img class=&quot;card-img-top&quot;
                 src=&quot;https://image.theminda.com/data/tg/image/tour/middle/201905/e74f31986c1b37aba4d446a5500e1ed8.jpg&quot;
                 alt=&quot;Card image cap&quot;&gt;
            &lt;div class=&quot;card-body&quot;&gt;
                &lt;a href=&quot;http://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 class=&quot;card&quot;&gt;
            &lt;img class=&quot;card-img-top&quot;
                 src=&quot;https://image.theminda.com/data/tg/image/tour/middle/201905/e74f31986c1b37aba4d446a5500e1ed8.jpg&quot;
                 alt=&quot;Card image cap&quot;&gt;
            &lt;div class=&quot;card-body&quot;&gt;
                &lt;a href=&quot;http://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 class=&quot;card&quot;&gt;
            &lt;img class=&quot;card-img-top&quot;
                 src=&quot;https://image.theminda.com/data/tg/image/tour/middle/201905/e74f31986c1b37aba4d446a5500e1ed8.jpg&quot;
                 alt=&quot;Card image cap&quot;&gt;
            &lt;div class=&quot;card-body&quot;&gt;
                &lt;a href=&quot;http://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 class=&quot;card&quot;&gt;
            &lt;img class=&quot;card-img-top&quot;
                 src=&quot;https://image.theminda.com/data/tg/image/tour/middle/201905/e74f31986c1b37aba4d446a5500e1ed8.jpg&quot;
                 alt=&quot;Card image cap&quot;&gt;
            &lt;div class=&quot;card-body&quot;&gt;
                &lt;a href=&quot;http://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 class=&quot;card&quot;&gt;
            &lt;img class=&quot;card-img-top&quot;
                 src=&quot;https://image.theminda.com/data/tg/image/tour/middle/201905/e74f31986c1b37aba4d446a5500e1ed8.jpg&quot;
                 alt=&quot;Card image cap&quot;&gt;
            &lt;div class=&quot;card-body&quot;&gt;
                &lt;a href=&quot;http://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 class=&quot;card&quot;&gt;
            &lt;img class=&quot;card-img-top&quot;
                 src=&quot;https://image.theminda.com/data/tg/image/tour/middle/201905/e74f31986c1b37aba4d446a5500e1ed8.jpg&quot;
                 alt=&quot;Card image cap&quot;&gt;
            &lt;div class=&quot;card-body&quot;&gt;
                &lt;a href=&quot;http://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;
&lt;/body&gt;

&lt;/html&gt;</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[210907 개발일지]]></title>
            <link>https://velog.io/@waterlily_0101/210907-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@waterlily_0101/210907-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Tue, 07 Sep 2021 12:58:50 GMT</pubDate>
            <description><![CDATA[<h1 id="학습내용">학습내용</h1>
<h2 id="1-bootstrap">1. Bootstrap</h2>
<h3 id="1-1-bootstrap이란">1-1) Bootstrap이란?</h3>
<blockquote>
<p>: 예쁜 CSS를 미리모아둔 것.</p>
</blockquote>
<h5 id="코드스니펫-부트스트랩-컴포넌트-40-httpsgetbootstrapcomdocs40componentsalerts">[코드스니펫] 부트스트랩 컴포넌트 4.0 <a href="https://getbootstrap.com/docs/4.0/components/alerts/">https://getbootstrap.com/docs/4.0/components/alerts/</a></h5>
<br>

<h3 id="1-2-bootstrap-사용---나홀로-메모장-만들기">1-2) Bootstrap 사용 - &#39;나홀로 메모장&#39; 만들기</h3>
<h4 id="1-나홀로-메모장-뼈대-잡기">(1) &#39;나홀로 메모장&#39; 뼈대 잡기</h4>
<blockquote>
<h5 id="1st-bootstrap-components-페이지에서-필요한-jumbotron-코드-찾아--copy하기">1st. Bootstrap Components 페이지에서 필요한 Jumbotron 코드 찾아  copy하기</h5>
</blockquote>
<h6 id="코드스니펫-부트스트랩-컴포넌트-40-httpsgetbootstrapcomdocs40componentsjumbotron">[코드스니펫] 부트스트랩 컴포넌트 4.0 <a href="https://getbootstrap.com/docs/4.0/components/jumbotron/">https://getbootstrap.com/docs/4.0/components/jumbotron/</a></h6>
<blockquote>
<h5 id="2nd-bootstrap-components-페이지에서-필요한-card-columns-코드-찾아-copy하기">2nd. Bootstrap Components 페이지에서 필요한 Card columns 코드 찾아 copy하기</h5>
<blockquote>
<h6 id="-나열되어-있는-코드-중-나에게-필요한-코드-빠르게-찾는-방법">*** 나열되어 있는 코드 중 나에게 필요한 코드 빠르게 찾는 방법</h6>
</blockquote>
</blockquote>
<h6 id="1st-해당-페이지에서-마우스-오른쪽-클릭-후-검사--클릭">1st. 해당 페이지에서 마우스 오른쪽 클릭 후 &#39;검사&#39;  클릭</h6>
<h6 id="2nd-코드-위에-마우스-올려다-놓으면-그-코드에-해당하는-card-표시됨">2nd. 코드 위에 마우스 올려다 놓으면 그 코드에 해당하는 card 표시됨</h6>
<h6 id="코드스니펫-부트스트랩-컴포넌트-40-httpsgetbootstrapcomdocs40componentscardcard-columns">[코드스니펫] 부트스트랩 컴포넌트 4.0 <a href="https://getbootstrap.com/docs/4.0/components/card/#card-columns">https://getbootstrap.com/docs/4.0/components/card/#card-columns</a></h6>
<h4 id="2-나홀로-메모장에-포스팅-박스-넣기">(2) &#39;나홀로 메모장&#39;에 포스팅 박스 넣기</h4>
<p><img src="https://images.velog.io/images/waterlily_0101/post/8b9406c1-0210-4506-8fea-289c50c963b2/2021-09-07_%EB%82%98%ED%99%80%EB%A1%9C%EB%A9%94%EB%AA%A8%EC%9E%A5(2).png" alt=""></p>
<blockquote>
<h5 id="1st-bootstrap-components-페이지에서-필요한-form-코드-참고하기">1st. Bootstrap Components 페이지에서 필요한 Form 코드 참고하기</h5>
</blockquote>
<h5 id="2nd-copy한-코드-중-from-태그formform가-있다면-form-태그를-div-태그divdiv로-바꾸기">2nd. copy한 코드 중 from 태그(<code>&lt;form&gt;...&lt;/form&gt;</code>)가 있다면, form 태그를 div 태그(<code>&lt;div&gt;...&lt;/div&gt;</code>)로 바꾸기</h5>
<pre><code>&lt;div class=&quot;posting-box&quot; id=&quot;post-box&quot;&gt;
    &lt;div class=&quot;form-group&quot;&gt;
        &lt;label&gt;아티클 URL&lt;/label&gt;
        &lt;input type=&quot;email&quot; class=&quot;form-control&quot; id=&quot;article-url&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;exampleInputEmail1&quot;&gt;간단 코멘트&lt;/label&gt;
        &lt;textarea class=&quot;form-control&quot; id=&quot;exampleInputEmail1&quot; rows=&quot;&quot;&gt;&lt;/textarea&gt;
    &lt;/div&gt;
    &lt;button type=&quot;submit&quot; class=&quot;btn btn-primary form-group&quot;&gt;기사저장&lt;/button&gt;
&lt;/div&gt;</code></pre><h5 id="3nd-포스팅-박스-경계선-모양과-내부-요소의-간격-조절하기">3nd. 포스팅 박스 경계선 모양과 내부 요소의 간격 조절하기</h5>
<pre><code>&lt;style&gt;
    .posting-box {
        width: 500px;
        margin: 10px auto 30px auto;
        border: 3px solid black;   
        border-radius: 5px;
        padding: 25px;
    }
&lt;/style&gt;</code></pre><br>

<h2 id="2-jquery">2. jQuery</h2>
<h3 id="2-1-jquery란">2-1) jQuery란?</h3>
<blockquote>
<p>: HTML의 요소들을 조작하는, 편리한 Javascript를 미리 작성해 둔 것. 라이브러리!</p>
</blockquote>
<br>

<h3 id="2-2-jquery와-javascript-코드-비교">2-2) jQuery와 Javascript 코드 비교</h3>
<blockquote>
<p>: jQuery는 Javascript와 다른 특별한 소프트웨어가 아니라 &#39;미리 작성된 Javascript 코드&#39;!</p>
</blockquote>
<h6 id="-사용-전에-임포트를-해야한다">*** 사용 전에 &#39;임포트&#39;를 해야한다.</h6>
<blockquote>
<blockquote>
<h5 id="javascript로-길고-복잡하게-써야-하는-것을">Javascript로 길고 복잡하게 써야 하는 것을</h5>
</blockquote>
</blockquote>
<pre><code>document.getElementById(&quot;element&quot;).style.display = &quot;none&quot;;</code></pre><h5 id="jquery는-직관적으로-쓴다">jQuery는 직관적으로 쓴다.</h5>
<pre><code>$(&#39;#element&#39;).hide();</code></pre><br>

<h3 id="2-3-jquery-사용방법-1">2-3) jQuery 사용방법 (1)</h3>
<blockquote>
<h4 id="1st-임포트-하기">1st. &#39;임포트&#39; 하기</h4>
<p>: 미리 작성된 Javascript 코드를 가져오는 것</p>
</blockquote>
<h5 id="코드스니펫-jquery-cdn-httpswwww3schoolscomjqueryjquery_get_startedasp">[코드스니펫] jQuery CDN <a href="https://www.w3schools.com/jquery/jquery_get_started.asp">https://www.w3schools.com/jquery/jquery_get_started.asp</a></h5>
<blockquote>
<h4 id="2nd-head와-head-사이에-아래를-넣으면-끝">2nd. <code>&lt;head&gt;</code>와 <code>&lt;/head&gt;</code> 사이에 아래를 넣으면 끝!</h4>
</blockquote>
<pre><code>&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><h3 id="2-4-jquery-사용방법-2">2-4) jQuery 사용방법 (2)</h3>
<blockquote>
<h4 id="-css와-마찬가지로-jquery를-쓸-때에도-가리켜야→-조작할-수-있다">*** CSS와 마찬가지로, jQuery를 쓸 때에도 &quot;가리켜야&quot;→ 조작할 수 있다.</h4>
<p>ex) 특정 인풋박스의 값을 → 가져와줘!
ex) 특정 div를 → 안보이게 해줘!</p>
</blockquote>
<h4 id="-css에서는-선택자로-class를-사용했다면-jquery에서는-id-값을-통해-특정-버튼인풋박스div등을-가리킨다">*** CSS에서는 선택자로 class를 사용했다면, jQuery에서는 id 값을 통해 특정 버튼/인풋박스/div/..등을 가리킨다.</h4>
<br>

<h3 id="2-5-자주쓰는-jquery">2-5) 자주쓰는 jQuery</h3>
<h4 id="1-input-박스의-값을-가져오기">(1) input 박스의 값을 가져오기</h4>
<blockquote>
<h5 id="예를-들어-id-값이-post-url인-곳을-가리키고-val로-값을-가져온다">예를 들어 id 값이 post-url인 곳을 가리키고, val()로 값을 가져온다.</h5>
</blockquote>
<pre><code>$(&#39;#post-url&#39;).val();</code></pre><h4 id="2-div-보이기--숨기기">(2) div 보이기 / 숨기기</h4>
<blockquote>
<h5 id="1-div-보이기--예를-들어-id-값이-post-box인-곳을-가리키고-hide로-안-보이게-한다-css의-display-값을-none으로-바꾼다">[1] div 보이기 : 예를 들어 id 값이 post-box인 곳을 가리키고, hide()로 안 보이게 한다. (=css의 display 값을 none으로 바꾼다.)</h5>
</blockquote>
<pre><code>$(&#39;#post-box&#39;).hide();</code></pre><h6 id="↓-나홀로-메모장에서-가져온-코드">↓ 나홀로 메모장에서 가져온 코드</h6>
<pre><code>&lt;head&gt;
    &lt;style&gt;
        .posting-box {
            width: 500px;
            margin: 10px auto 30px auto;
            border: 3px solid black;
            border-radius: 5px;
            padding: 25px;
            display: none;
        }
    &lt;/style&gt;
&lt;/head&gt;</code></pre><h5 id="2-div-숨기기--예를-들어-id-값이-post-box인-곳을-가리키고-show로-보이게-한다-css의-display-값을-block으로-바꾼다">[2] div 숨기기 : 예를 들어 id 값이 post-box인 곳을 가리키고, show()로 보이게 한다. (=css의 display 값을 block으로 바꾼다.)</h5>
<blockquote>
<pre><code>$(&#39;#post-box&#39;).show();</code></pre></blockquote>
<pre><code>
#### (3) css의 값 가져오기
&gt; ##### display 속성 값을 가져왔다.</code></pre><p>$(&#39;#post-box&#39;).hide();
$(&#39;#post-box&#39;).css(&#39;display&#39;);</p>
<pre><code></code></pre><p>$(&#39;#post-box&#39;).show();
$(&#39;#post-box&#39;).css(&#39;display&#39;);</p>
<pre><code>###### ↓ 나홀로 메모장에서 가져온 코드</code></pre><head>
    <script>
        function openclose() {
            let status = $('#post-box').css('display');
            if (status == 'block') {
                $('#post-box').hide();
                $('#btn-posting-box').text('포스팅박스 열기');
            } else {
                $('#post-box').show();
                $('#btn-posting-box').text('포스팅박스 닫기');
            }
        }
    </script>
</head>
```

<h4 id="4-태그-내-텍스트-입력하기">(4) 태그 내 텍스트 입력하기</h4>
<blockquote>
<h5 id="1-input-박스의-경우">[1] input 박스의 경우</h5>
</blockquote>
<pre><code>$(&#39;#post-url&#39;).val(&#39;여기에 텍스트를 입력하면!&#39;);</code></pre><h5 id="2-다른-것들---ex-버튼의-텍스트-바꾸기">[2] 다른 것들 - ex) 버튼의 텍스트 바꾸기</h5>
<h5 id="1st-가리키고-싶은-버튼에-id-값을-준다">1st. 가리키고 싶은 버튼에 id 값을 준다.</h5>
<pre><code>&lt;button id=&quot;btn-posting-box&quot; type=&quot;button&quot; class=&quot;btn btn-primary&quot;&gt;포스팅 박스 열기&lt;/button&gt;</code></pre><h5 id="2nd">2nd.</h5>
<pre><code>$(&#39;#btn-posting-box&#39;).text(&#39;포스팅 박스 열기&#39;);</code></pre><pre><code>$(&#39;#btn-posting-box&#39;).text(&#39;포스팅 박스 닫기&#39;);</code></pre><h6 id="↓-나홀로-메모장에서-가져온-코드-1">↓ 나홀로 메모장에서 가져온 코드</h6>
<pre><code>&lt;a onclick=&quot;openclose()&quot; id=&quot;btn-posting-box&quot; class=&quot;btn btn-primary btn-lg&quot; href=&quot;#&quot; role=&quot;button&quot;&gt;포스트박스 열기&lt;/a&gt;</code></pre><h4 id="5-태그-내-html-입력하기">(5) 태그 내 html 입력하기</h4>
<blockquote>
<h5 id="div--div-사이에-동적으로-html을-넣고-싶을-땐-ex-포스팅되면-→-카드-추가"><code>&lt;div&gt; ~ &lt;/div&gt;</code> 사이에, 동적으로 html을 넣고 싶을 땐? (ex) 포스팅되면 → 카드 추가)</h5>
</blockquote>
<h5 id="1st-html을-넣고-싶은-태그에-id-값을-준-다음">1st. html을 넣고 싶은 태그에 id 값을 준 다음</h5>
<pre><code>&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;&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;</code></pre><h5 id="2nd-1">2nd.</h5>
<h5 id="1-버튼을-넣어보기">[1] 버튼을 넣어보기</h5>
<pre><code>let temp_html = &#39;&lt;button&gt;나는 추가될 버튼이다!&lt;/button&gt;&#39;;
$(&#39;#cards-box&#39;).append(temp_html);</code></pre><p>OR</p>
<h5 id="2-버튼-말고-카드를-넣어보기">[2] 버튼 말고, 카드를 넣어보기</h5>
<h6 id="-주의-홑따옴표가-아닌-backtick으로-감싸야-한다">*** 주의: 홑따옴표(&#39;)가 아닌 backtick(`)으로 감싸야 한다.</h6>
<pre><code>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;;</code></pre><pre><code>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><br>

<h3 id="2-6-jquery와-javascript의-조합-연습">2-6) jQuery와 Javascript의 조합 연습</h3>
<h4 id="1-빈칸-체크-함수-만들기">(1) 빈칸 체크 함수 만들기</h4>
<blockquote>
<h5 id="버튼을-눌렀을-때-칸에-아무것도-없으면-입력하세요-alert-띄우기">버튼을 눌렀을 때 칸에 아무것도 없으면 &quot;입력하세요!&quot; alert 띄우기</h5>
</blockquote>
<pre><code>&lt;script&gt;
    function q1() {
        let txt = $(&#39;#input-q1&#39;).val();
        if (txt == &#39;&#39;)
            alert (&#39;입력하세요!&#39;)
        else {
            alert(txt)
        }   
    }
&lt;/script&gt;</code></pre><p>① input-q1의 입력값을 가져온다. $(&#39;# .... &#39;).val() 이렇게!
② 만약 입력값이 빈칸이면 if(입력값==&#39;&#39;)
③ alert(&#39;입력하세요!&#39;) 띄우기
④ alert(입력값) 띄우기</p>
<h4 id="2-이메일-판별-함수-만들기">(2) 이메일 판별 함수 만들기</h4>
<blockquote>
<h5 id="이메일이-아니면가-없으면-이메일이-아닙니다라는-alert-띄우기">이메일이 아니면(@가 없으면) &quot;이메일이 아닙니다.&quot;라는 alert 띄우기</h5>
</blockquote>
<h5 id="이메일이면가-있으면-이메일-도메인만-alert-띄우기">이메일이면(@가 있으면) 이메일 도메인만 alert 띄우기</h5>
<pre><code>&lt;script&gt;
    function q2() {
        let txt = $(&#39;#input-q2&#39;).val();
        if (txt.includes(&#39;@&#39;)) {
            let domain = txt.split(&#39;@&#39;)[1].split(&#39;.&#39;)[0]
            alert(domain)
        } else {
            alert(&#39;이메일이 아닙니다.&#39;)
        }
    }
&lt;/script&gt;</code></pre><p>① input-q2 값을 가져온다.
② 만약 가져온 값에 @가 있으면 (includes 이용하기)
③ <a href="mailto:info.spartacoding@gmail.com">info.spartacoding@gmail.com</a> -&gt; gmail만 추출해서 ( .split(&#39;@&#39;) 이용하기)
④ alert(도메인 값);으로 띄우기
⑤ 만약 이메일이 아니면 &#39;이메일이 아닙니다.&#39; 라는 얼럿 띄우기</p>
<h4 id="3-html-붙이기지우기-연습">(3) HTML 붙이기/지우기 연습</h4>
<blockquote>
<h5 id="이름을-입력하면-아래-나오게-하기">이름을 입력하면 아래 나오게 하기</h5>
</blockquote>
<pre><code>&lt;script&gt;
    function q3() {
        let txt = $(&#39;#input-q3&#39;).val();
        let temp_html = `&lt;li&gt;${txt}&lt;/li&gt;`
        $(&#39;#names-q3&#39;).append(temp_html)
    }
    function q3_remove() {
        $(&#39;#names-q3&#39;).empty()
    }
&lt;/script&gt;</code></pre><p>① input-q3 값을 가져온다. let txt = ... q1, q2에서 했던 걸 참고!
② 가져온 값을 이용해 names-q3에 붙일 태그를 만든다.</p>
<pre><code>let temp_html = `&lt;li&gt;${txt}&lt;/li&gt;`</code></pre><p>③ 만들어둔 temp_html을 names-q3에 붙인다.(jQuery의 $(&#39;...&#39;).append(temp_html) 이용하기)
④ names-q3의 내부 태그를 모두 비운다.(jQuery의 $(&#39;....&#39;).empty() 이용하기)</p>
<br>

<h3 id="2-7-jquery-적용---나홀로-메모장-포스팅박스-열기닫기-기능">2-7) jQuery 적용 - &#39;나홀로 메모장&#39; 포스팅박스 열기/닫기 기능</h3>
<p><img src="https://images.velog.io/images/waterlily_0101/post/b7b08f11-99b2-44b7-b0f2-8077eef1a8aa/2021-09-07_%EB%82%98%ED%99%80%EB%A1%9C%EB%A9%94%EB%AA%A8%EC%9E%A5%20(3).png" alt=""></p>
<h4 id="1-포스팅박스-열기-버튼에-function-달기">(1) &#39;포스팅박스 열기&#39; 버튼에 function 달기</h4>
<blockquote>
</blockquote>
<pre><code>&lt;script&gt;
    function openclose() {
    // 여기에 jQuery를 이용해 코드를 짤 예정
    }
&lt;/script&gt;</code></pre><pre><code>// onclick 속성(attribute)을 추가한다.
&lt;button onclick=&quot;openclose()&quot; class=&quot;btn btn-primary btn-lg&quot;&gt;포스팅박스 열기&lt;/button&gt;</code></pre><h6 id="↓-나홀로-메모장에서-가져온-코드-2">↓ 나홀로 메모장에서 가져온 코드</h6>
<pre><code>&lt;a onclick=&quot;openclose()&quot; id=&quot;btn-posting-box&quot; class=&quot;btn btn-primary btn-lg&quot; href=&quot;#&quot; role=&quot;button&quot;&gt;포스트박스 열기&lt;/a&gt;</code></pre><h4 id="2-클릭해서-포스팅박스를-여닫게-하기">(2) 클릭해서 포스팅박스를 여닫게 하기</h4>
<p>[1] 포스팅박스에 id 값을 주기</p>
<blockquote>
</blockquote>
<pre><code>&lt;div class=&quot;form-post&quot; id=&quot;post-box&quot;&gt;
    &lt;div&gt;
        &lt;div class=&quot;form-group&quot;&gt;
            &lt;label for=&quot;exampleFormControlInput1&quot;&gt;아티클 URL&lt;/label&gt;
            &lt;input class=&quot;form-control&quot; placeholder=&quot;&quot;&gt;
        &lt;/div&gt;
        &lt;div class=&quot;form-group&quot;&gt;
            &lt;label for=&quot;exampleFormControlTextarea1&quot;&gt;간단 코멘트&lt;/label&gt;
            &lt;textarea 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;&gt;기사저장&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;</code></pre><p>[2] 포스팅박스 제어하기</p>
<blockquote>
</blockquote>
<pre><code>function openclose() {
    // id 값 post-box의 display 값이 block 이면
    if ($(&#39;#post-box&#39;).css(&#39;display&#39;) == &#39;block&#39;) {
        // post-box를 가리고
        $(&#39;#post-box&#39;).hide();
    } else {
        // 아니면 post-box를 펴라
        $(&#39;#post-box&#39;).show();
    }
}</code></pre><h6 id="↓-나홀로-메모장에서-가져온-코드-3">↓ 나홀로 메모장에서 가져온 코드</h6>
<pre><code>&lt;head&gt;
    &lt;script&gt;
        function openclose() {
            let status = $(&#39;#post-box&#39;).css(&#39;display&#39;);
            if (status == &#39;block&#39;) {
                $(&#39;#post-box&#39;).hide();
                $(&#39;#btn-posting-box&#39;).text(&#39;포스팅박스 열기&#39;);
            } else {
                $(&#39;#post-box&#39;).show();
                $(&#39;#btn-posting-box&#39;).text(&#39;포스팅박스 닫기&#39;);
            }
        }
    &lt;/script&gt;
&lt;/head&gt;</code></pre><p>[3] posting-box를 시작부터 감춰두기 (css의 display: none 속성!)</p>
<blockquote>
<h5 id="이런-것을-inline-style-인라인-스타일이라고-부른다">이런 것을, inline-style (인라인 스타일)이라고 부른다.</h5>
</blockquote>
<h5 id="직관적으로-처음부터-안-보이는-태그">직관적으로 &#39;처음부터 안 보이는 태그&#39;!</h5>
<h5 id="물론-class-주고-css에서-displaynone-속성을-주는-것도-방법">(물론, class 주고, css에서 display:none 속성을 주는 것도 방법!)</h5>
<pre><code>&lt;div class=&quot;form-post&quot; id=&quot;post-box&quot; style=&quot;display:none&quot;&gt;
    &lt;div&gt;
        &lt;div class=&quot;form-group&quot;&gt;
            &lt;label for=&quot;exampleFormControlInput1&quot;&gt;아티클 URL&lt;/label&gt;
            &lt;input class=&quot;form-control&quot; placeholder=&quot;&quot;&gt;
        &lt;/div&gt;
        &lt;div class=&quot;form-group&quot;&gt;
            &lt;label for=&quot;exampleFormControlTextarea1&quot;&gt;간단 코멘트&lt;/label&gt;
            &lt;textarea 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;&gt;기사저장&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;</code></pre><h6 id="↓-나홀로-메모장에서-가져온-코드---class-주고-css에서-displaynone-속성을-준-방법">↓ 나홀로 메모장에서 가져온 코드 - class 주고, css에서 display:none 속성을 준 방법</h6>
<pre><code>&lt;head&gt;
    &lt;style&gt;
        .posting-box {
            width: 500px;
            margin: 10px auto 30px auto;
            border: 3px solid black;
            border-radius: 5px;
            padding: 25px;
            display: none;
        }
    &lt;/style&gt;
&lt;/head&gt;</code></pre><h4 id="3-포스팅박스-열기-버튼의-글씨-바꾸기">(3) &#39;포스팅박스 열기&#39; 버튼의 글씨 바꾸기</h4>
<p>[1] 포스팅박스 열기 버튼에 id 값 주기</p>
<blockquote>
</blockquote>
<pre><code>&lt;button id=&quot;btn-posting-box&quot; onclick=&quot;openclose()&quot; class=&quot;btn btn-primary btn-lg&quot;&gt;포스팅박스 열기&lt;/a&gt;</code></pre><h6 id="↓-나홀로-메모장에서-가져온-코드-4">↓ 나홀로 메모장에서 가져온 코드</h6>
<pre><code>&lt;a onclick=&quot;openclose()&quot; id=&quot;btn-posting-box&quot; class=&quot;btn btn-primary btn-lg&quot; href=&quot;#&quot; role=&quot;button&quot;&gt;포스트박스 열기&lt;/a&gt;</code></pre><p>[2] 버튼 텍스트 바꾸기</p>
<blockquote>
</blockquote>
<pre><code>function openclose() {
    // id 값 post-box의 display 값이 block 이면
    if ($(&#39;#post-box&#39;).css(&#39;display&#39;) == &#39;block&#39;) {
        // post-box를 가리고
        $(&#39;#post-box&#39;).hide();
        // 가렸으니까 이제 열기로 바꿔두기
        $(&#39;#btn-posting-box&#39;).text(&#39;포스팅 박스 열기&#39;);
    } else {
        // 아니면 post-box를 펴라
        $(&#39;#post-box&#39;).show();
        // 폈으니까 이제 닫기로 바꿔두기
        $(&#39;#btn-posting-box&#39;).text(&#39;포스팅 박스 닫기&#39;);
    }
}</code></pre><h6 id="↓-나홀로-메모장에서-가져온-코드-5">↓ 나홀로 메모장에서 가져온 코드</h6>
<pre><code>&lt;head&gt;
    &lt;script&gt;
        function openclose() {
            let status = $(&#39;#post-box&#39;).css(&#39;display&#39;);
            if (status == &#39;block&#39;) {
                $(&#39;#post-box&#39;).hide();
                $(&#39;#btn-posting-box&#39;).text(&#39;포스팅박스 열기&#39;);
            } else {
                $(&#39;#post-box&#39;).show();
                $(&#39;#btn-posting-box&#39;).text(&#39;포스팅박스 닫기&#39;);
            }
        }
    &lt;/script&gt;
&lt;/head&gt;</code></pre><p><img src="https://images.velog.io/images/waterlily_0101/post/e6d486f7-ebf9-41e8-bf80-4f486294833b/2021-09-07_%EB%82%98%ED%99%80%EB%A1%9C%EB%A9%94%EB%AA%A8%EC%9E%A5%20(4).png" alt=""></p>
<br>

<h2 id="3-나홀로-메모장-완성-코드">3. &#39;나홀로 메모장&#39; 완성 코드</h2>
<p> <img src="https://images.velog.io/images/waterlily_0101/post/5be951b0-7775-4af4-bc34-d595f839cc14/2021-09-07_%EB%82%98%ED%99%80%EB%A1%9C%EB%A9%94%EB%AA%A8%EC%9E%A5%20(1).png" alt=""></p>
<hr>
<pre><code>&lt;!doctype html&gt;
&lt;html lang=&quot;en&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;!-- Optional JavaScript --&gt;
    &lt;!-- jQuery first, then Popper.js, then Bootstrap 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;script src=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js&quot;
            integrity=&quot;sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl&quot;
            crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;
    &lt;title&gt;스파르타코딩클럽 | 부트스트랩 연습하기&lt;/title&gt;
    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Jua&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
    &lt;style&gt;
        * {
            font-family: &#39;Jua&#39;, sans-serif;
        }
        .wrap {
            width: 900px;
            margin: auto;
        }
        .comment {
            color: blue;
            font-weight: bold;
        }
        .posting-box {
            width: 500px;
            margin: 10px auto 30px auto;
            border: 3px solid black;
            border-radius: 5px;
            padding: 25px;
            display: none;
        }
    &lt;/style&gt;
    &lt;script&gt;
        function openclose() {
            let status = $(&#39;#post-box&#39;).css(&#39;display&#39;);
            if (status == &#39;block&#39;) {
                $(&#39;#post-box&#39;).hide();
                $(&#39;#btn-posting-box&#39;).text(&#39;포스팅박스 열기&#39;);
            } else {
                $(&#39;#post-box&#39;).show();
                $(&#39;#btn-posting-box&#39;).text(&#39;포스팅박스 닫기&#39;);
            }
        }
    &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;a onclick=&quot;openclose()&quot; id=&quot;btn-posting-box&quot; class=&quot;btn btn-primary btn-lg&quot; href=&quot;#&quot; role=&quot;button&quot;&gt;포스트박스 열기&lt;/a&gt;
        &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class=&quot;posting-box&quot; id=&quot;post-box&quot;&gt;
        &lt;div class=&quot;form-group&quot;&gt;
            &lt;label&gt;아티클 URL&lt;/label&gt;
            &lt;input type=&quot;email&quot; class=&quot;form-control&quot; id=&quot;article-url&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;exampleInputEmail1&quot;&gt;간단 코멘트&lt;/label&gt;
            &lt;textarea class=&quot;form-control&quot; id=&quot;exampleInputEmail1&quot; rows=&quot;&quot;&gt;&lt;/textarea&gt;
        &lt;/div&gt;
        &lt;button type=&quot;submit&quot; class=&quot;btn btn-primary form-group&quot;&gt;기사저장&lt;/button&gt;
    &lt;/div&gt;
    &lt;div class=&quot;card-columns&quot; id=&quot;cards-box&quot;&gt;
        &lt;div class=&quot;card&quot;&gt;
            &lt;img class=&quot;card-img-top&quot;
                 src=&quot;https://image.theminda.com/data/tg/image/tour/middle/201905/e74f31986c1b37aba4d446a5500e1ed8.jpg&quot;
                 alt=&quot;Card image cap&quot;&gt;
            &lt;div class=&quot;card-body&quot;&gt;
                &lt;a href=&quot;http://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 class=&quot;card&quot;&gt;
            &lt;img class=&quot;card-img-top&quot;
                 src=&quot;https://image.theminda.com/data/tg/image/tour/middle/201905/e74f31986c1b37aba4d446a5500e1ed8.jpg&quot;
                 alt=&quot;Card image cap&quot;&gt;
            &lt;div class=&quot;card-body&quot;&gt;
                &lt;a href=&quot;http://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 class=&quot;card&quot;&gt;
            &lt;img class=&quot;card-img-top&quot;
                 src=&quot;https://image.theminda.com/data/tg/image/tour/middle/201905/e74f31986c1b37aba4d446a5500e1ed8.jpg&quot;
                 alt=&quot;Card image cap&quot;&gt;
            &lt;div class=&quot;card-body&quot;&gt;
                &lt;a href=&quot;http://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 class=&quot;card&quot;&gt;
            &lt;img class=&quot;card-img-top&quot;
                 src=&quot;https://image.theminda.com/data/tg/image/tour/middle/201905/e74f31986c1b37aba4d446a5500e1ed8.jpg&quot;
                 alt=&quot;Card image cap&quot;&gt;
            &lt;div class=&quot;card-body&quot;&gt;
                &lt;a href=&quot;http://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 class=&quot;card&quot;&gt;
            &lt;img class=&quot;card-img-top&quot;
                 src=&quot;https://image.theminda.com/data/tg/image/tour/middle/201905/e74f31986c1b37aba4d446a5500e1ed8.jpg&quot;
                 alt=&quot;Card image cap&quot;&gt;
            &lt;div class=&quot;card-body&quot;&gt;
                &lt;a href=&quot;http://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 class=&quot;card&quot;&gt;
            &lt;img class=&quot;card-img-top&quot;
                 src=&quot;https://image.theminda.com/data/tg/image/tour/middle/201905/e74f31986c1b37aba4d446a5500e1ed8.jpg&quot;
                 alt=&quot;Card image cap&quot;&gt;
            &lt;div class=&quot;card-body&quot;&gt;
                &lt;a href=&quot;http://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;
&lt;/body&gt;
&lt;/html&gt;</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[210902 개발일지]]></title>
            <link>https://velog.io/@waterlily_0101/210902-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@waterlily_0101/210902-%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Thu, 02 Sep 2021 12:28:29 GMT</pubDate>
            <description><![CDATA[<h1 id="학습내용">학습내용</h1>
<h2 id="1--css">1.  CSS</h2>
<h3 id="1-1-css-기초-사용방법">1-1) CSS 기초 사용방법</h3>
<blockquote>
<p>: <code>&lt;head&gt; ~ &lt;/head&gt;</code> 안에 <code>&lt;style&gt; ~ &lt;/style&gt;</code> 공간을 만들어 작성한다.
: mytitle라는 class를 가리킬 때, .mytitle {...}라고 써야한다.</p>
</blockquote>
<br>

<h3 id="1-2-css-연습---로그인-페이지-만들기">1-2) CSS 연습 - 로그인 페이지 만들기</h3>
<h4 id="1-로그인-화면을-가운데로-가져오는-방법">(1) 로그인 화면을 가운데로 가져오는 방법</h4>
<blockquote>
<h5 id="1st-width와-margin-auto를-사용한다">1st. width와 margin: auto를 사용한다.</h5>
</blockquote>
<h5 id="2nd-1st-방법이-안-될-경우-display-block을-추가한다">2nd. 1st 방법이 안 될 경우 display: block을 추가한다.</h5>
<h4 id="2-margin과-padding의-차이점">(2) margin과 padding의 차이점</h4>
<blockquote>
<h5 id="-margin은-바깥-여백을-padding은-내-안쪽-여백을-조정해준다">: margin은 바깥 여백을, padding은 내 안쪽 여백을 조정해준다.</h5>
</blockquote>
<h4 id="3-구글웹폰트-입히는-방법">(3) 구글웹폰트 입히는 방법</h4>
<blockquote>
<h5 id="1st-폰트의-_link-태그_를-복사해서-title--title-다음-line에-붙여넣는다">1st. 폰트의 _link 태그_를 복사해서 <code>&lt;title&gt; ~ &lt;/title&gt;</code> 다음 line에 붙여넣는다.</h5>
</blockquote>
<h5 id="2nd-폰트의-_css-rules-to-specify-families_를-복사해서-style--style-사이의---안에-붙여넣는다">2nd. 폰트의 _CSS rules to specify families_를 복사해서 <code>&lt;style&gt; ~ &lt;/style&gt;</code> 사이의 * {...} 안에 붙여넣는다.</h5>
<h4 id="4-폰트-color-바꾸는-방법">(4) 폰트 color 바꾸는 방법</h4>
<blockquote>
<h5 id="1st-body-body-사이에서-바꾸고자-하는-부분의-class에-color-font를-넣는다">1st. <code>&lt;body&gt; ~&lt;/body&gt;</code> 사이에서 바꾸고자 하는 부분의 class=&quot;...&quot;에 color-font를 넣는다.</h5>
</blockquote>
<h5 id="예를-들어-blue로-바꾸고-싶다면-class에-blue-font를-넣으면-된다">예를 들어, blue로 바꾸고 싶다면 class=&quot;...&quot;에 blue-font를 넣으면 된다.</h5>
<pre><code>&lt;button class=&quot;mybtn blue-font&quot;&gt;로그인하기&lt;/botton&gt;</code></pre><h5 id="2nd-style--style-사이에">2nd. <code>&lt;style&gt; ~ &lt;/style&gt;</code> 사이에</h5>
<pre><code>.blue-font {
    color: blue;
}</code></pre><h5 id="를-추가하면-색이-변경된다">를 추가하면 색이 변경된다.</h5>
<br>

<h3 id="1-3-로그인-페이지-완성-코드">1-3) 로그인 페이지 완성 코드</h3>
<p><img src="https://images.velog.io/images/waterlily_0101/post/64259a51-64f1-4e3d-9d44-5d986e644c97/210902_%EB%A1%9C%EA%B7%B8%EC%9D%B8%ED%8E%98%EC%9D%B4%EC%A7%80(NEW).png" alt=""></p>
<hr>
<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;title&gt;로그인페이지&lt;/title&gt;
    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Do+Hyeon&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
    &lt;style&gt;
        * {
            font-family: &#39;Do Hyeon&#39;, sans-serif;
        }        
        .mytitle {
            background-color: green;
            width: 300px;
            height: 200px;
            color: white;
            text-align: center;
            padding-top:40px;
            border-radius: 10px;
            background-image: url(&quot;https://cdn.pixabay.com/photo/2017/09/08/20/29/chess-2730034__340.jpg&quot;);
            background-position: center;
            background-size: cover;
        }
        .wrap {
            width: 300px;
            margin: 25px auto;
        }
        .mybtn {
            width: 100px;
            margin: auto;
            display: block;
        }
        .blue-font {
            color: blue;
            font-size: 16px;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;wrap&quot;&gt;
        &lt;div class=&quot;mytitle&quot;&gt;
            &lt;h1&gt;로그인 페이지&lt;/h1&gt;
            &lt;h5&gt;아이디, 비밀번호를 입력해주세요&lt;/h5&gt;
        &lt;/div&gt;
        &lt;p&gt;ID: &lt;input style=&quot;margin: 0px 10px;&quot; type=&quot;text&quot;/&gt;&lt;/p&gt;
        &lt;p&gt;PW: &lt;input type=&quot;password&quot;/&gt;&lt;/p&gt;
        &lt;button class=&quot;mybtn blue-font&quot;&gt;로그인하기&lt;/button&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre><br>

<h2 id="2-javascript">2. Javascript</h2>
<h3 id="2-1-javascript란">2-1) Javascript란?</h3>
<blockquote>
<p>: 프로그래밍 언어  중 하나로, 브라우저가 알아드를 수 있는 언어.</p>
</blockquote>
<br>

<h3 id="2-2-javascript---html-연결">2-2) Javascript - HTML 연결.</h3>
<p><strong>&lt;버튼을 클릭하면 경고창이 뜨게하기&gt;</strong></p>
<blockquote>
<h4 id="1st-함수-만들어두기">1st. 함수 만들어두기</h4>
</blockquote>
<pre><code>&lt;head&gt;
    &lt;script&gt;
        function.hey() {
            alert.(&#39;안녕!&#39;);
        }
    &lt;/script&gt;
&lt;/head&gt;</code></pre><h5 id="-head--head-안에-script--script로-공간을-만들어-작성-한다-즉-script--script-내에-javascript를-작성하는-것이다">*** <code>&lt;head&gt; ~ &lt;/head&gt;</code> 안에 <code>&lt;script&gt; ~ &lt;/script&gt;</code>로 공간을 만들어 작성 한다. 즉, <code>&lt;script&gt; ~ &lt;/script&gt;</code> 내에 Javascript를 작성하는 것이다.</h5>
<h4 id="2nd-버튼에-함수-연결하기-버튼을-누르면-함수가-불린다">2nd. 버튼에 함수 연결하기 (버튼을 누르면 함수가 불린다.)</h4>
<pre><code>&lt;button onclick=&quot;hey()&quot; type=&quot;button&quot; class=&quot;btn btn-primary&quot;&gt;기사저장&lt;/button&gt;</code></pre><br>

<h3 id="2-3-javascript-기초-문법-1">2-3) Javascript 기초 문법 (1)</h3>
<h4 id="1-변수--기본연산">(1) 변수 &amp; 기본연산</h4>
<blockquote>
<h5 id="☑-변수--대입-a--2-의-의미-오른쪽에-있는-것을-왼쪽에-넣는-것">☑ 변수  대입( a = 2 )의 의미: &quot;오른쪽에 있는 것을 왼쪽에 넣는 것!&quot;</h5>
</blockquote>
<h5 id="☑-let으로-변수를-선언">☑ let으로 변수를 선언</h5>
<pre><code>let num = 20
num = &#39;Bob&#39;</code></pre><h6 id="-변수는-값을-저장하는-박스">*** 변수는 값을 저장하는 박스</h6>
<h6 id="-한-번-선언했으면-다시-선언하지-않고-값을-넣는다">*** 한 번 선언했으면, 다시 선언하지 않고 값을 넣는다.</h6>
<h5 id="☑-사칙연산-그리고-문자열-더하기가-기본적으로-가능">☑ 사칙연산, 그리고 문자열 더하기가 기본적으로 가능</h5>
<pre><code>let a = 1
let b = 2</code></pre><pre><code>a+b // 3
a/b // 0.5</code></pre><pre><code>let first = &#39;Bob&#39;
let last = &#39;Lee&#39;</code></pre><pre><code>first+last // &#39;BobLee&#39;</code></pre><pre><code>first+&#39; &#39;+last // &#39;Bob Lee&#39;</code></pre><pre><code>first+a // Bob1 -&gt; 문자+숫자를 하면, 숫자를 문자로 바꾼 뒤 수행</code></pre><h5 id="☑-변수명">☑ 변수명</h5>
<h5 id="--snake-case">- snake case</h5>
<pre><code>let first_name = &#39;bob&#39;</code></pre><h5 id="--camel-case">- camel case</h5>
<pre><code>let firstName = &#39;bob&#39;</code></pre><h4 id="2-리스트--딕셔너리">(2) 리스트 &amp; 딕셔너리</h4>
<blockquote>
<h5 id="☑-리스트-순서를-지켜서-가지고-있는-형태">☑ 리스트: 순서를 지켜서 가지고 있는 형태</h5>
</blockquote>
<pre><code>let a_list = [] // 리스트 선언
// 또는,
let b_list = [1,2,&#39;hey&#39;,3] // 로 선언 가능</code></pre><pre><code>b_list[1] // 2 를 출력
b_list[2] // &#39;hey&#39;를 출력</code></pre><h5 id="--리스트에-요소-넣기">- 리스트에 요소 넣기</h5>
<pre><code>b_list.push(&#39;헤이&#39;)
b_list // [1, 2, &quot;hey&quot;, 3, &quot;헤이&quot;] 를 출력</code></pre><h5 id="--리스트의-길이-구하기">- 리스트의 길이 구하기</h5>
<pre><code>b_list.length // 5를 출력</code></pre><h5 id="☑-딕서녀리-키key-밸류value-값의-묵음">☑ 딕서녀리: 키(key)-밸류(value) 값의 묵음</h5>
<pre><code>let a_dict = {} // 딕셔너리 선언</code></pre><pre><code>// 또는,
let b_dict = {&#39;name&#39;:&#39;Bob&#39;,&#39;age&#39;:21} // 로 선언 가능
b_dict[&#39;name&#39;] // &#39;Bob&#39;을 출력
b_dict[&#39;age&#39;] // 21을 출력</code></pre><pre><code>b_dict[&#39;height&#39;] = 180 // 딕셔너리에 키:밸류 넣기
b_dict // {name: &quot;Bob&quot;, age: 21, height: 180}을 출력</code></pre><h5 id="☑-리스트와-딕셔너리의-조합">☑ 리스트와 딕셔너리의 조합</h5>
<pre><code>names = [{&#39;name&#39;:&#39;bob&#39;,&#39;age&#39;:20},{&#39;name&#39;:&#39;carry&#39;,&#39;age&#39;:38}]</code></pre><pre><code>// names[0][&#39;name&#39;]의 값은? &#39;bob&#39;
// names[1][&#39;name&#39;]의 값은? &#39;carry&#39;</code></pre><pre><code>new_name = {&#39;name&#39;:&#39;john&#39;,&#39;age&#39;:7}
names.push(new_name)</code></pre><pre><code>// 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;</code></pre><h4 id="3-기본-함수들">(3) 기본 함수들</h4>
<blockquote>
<h5 id="☑-사칙연산-외에도-기본적으로-제공하는-여러-함수들-존재">☑ 사칙연산 외에도, 기본적으로 제공하는 여러 함수들 존재</h5>
</blockquote>
<h5 id="--나눗셈의-나머지를-구하고-싶은-경우">- &#39;나눗셈의 나머지&#39;를 구하고 싶은 경우&#39;</h5>
<pre><code>let a = 20
let b = 7
a % b = 6</code></pre><h5 id="--모든-알파벳을-대문자로-바꾸고-싶은-경우">- 모든 알파벳을 대문자로 바꾸고 싶은 경우</h5>
<pre><code>let myname = &#39;spartacodingclub&#39;
myname.toUpperCase() // SPARTACODINGCLUB</code></pre><h5 id="--특정-문자로-문자열을-나누고-싶은-경우">- 특정 문자로 문자열을 나누고 싶은 경우</h5>
<pre><code>let myemail = &#39;sparta@gmail.com&#39;</code></pre><pre><code>let result = myemail.split(&#39;@&#39;) // [&#39;sparta&#39;,&#39;gmail.com&#39;]</code></pre><pre><code>result[0] // sparta
result[1] // gmail.com</code></pre><pre><code>let result2 = result[1].split(&#39;.&#39;) // [&#39;gmail&#39;,&#39;com&#39;]</code></pre><pre><code>result2[0] // gmail -&gt; 우리가 알고 싶었던 것!
result2[1] // com</code></pre><pre><code>myemail.split(&#39;@&#39;)[1].split(&#39;.&#39;)[0] // gmail -&gt; 간단하게 쓸 수도 있다!</code></pre><h5 id="--특정-문자로-나누고-싶은-경우-2">- 특정 문자로 나누고 싶은 경우 2</h5>
<pre><code>let txt = &#39;서울시-마포구-망원동&#39;
let names = txt.split(&#39;-&#39;); // [&#39;서울시&#39;,&#39;마포구&#39;,&#39;망원동&#39;]</code></pre><h5 id="--특정-문자로-합치고-싶은-경우">- 특정 문자로 합치고 싶은 경우</h5>
<pre><code>let result = names.join(&#39;&gt;&#39;); // &#39;서울시&gt;마포구&gt;망원동&#39; (즉, 문자열 바꾸기!)</code></pre><br>

<h3 id="2-4-javascript-기초-문법-2">2-4) Javascript 기초 문법 (2)</h3>
<h4 id="1-함수">(1) 함수</h4>
<blockquote>
<h5 id="☑-기본-생김새">☑ 기본 생김새</h5>
</blockquote>
<h5 id="--만들기">- 만들기</h5>
<pre><code>function 함수이름(필요한 변수들) {
    내릴 명령들을 순차적으로 작성
}</code></pre><h5 id="--사용하기">- 사용하기</h5>
<pre><code>함수이름(필요한 변수들);</code></pre><h5 id="☑-예시">☑ 예시</h5>
<h5 id="--두-숫자를-입력받으면-더한-결과를-돌려주는-함수">- 두 숫자를 입력받으면 더한 결과를 돌려주는 함수</h5>
<pre><code>function sum(num1, num2) {
    console.log(&#39;num1: &#39;, num1, &#39;, num2: &#39;, num2);
    return num1 + num2;
}</code></pre><pre><code>sum(3, 5); // 8
sum(4, -1); // 3</code></pre><h4 id="2-조건문">(2) 조건문</h4>
<blockquote>
<h5 id="☑-20보다-작으면-작다고-크면-크다고-알려주는-함수">☑ 20보다 작으면 작다고, 크면 크다고 알려주는 함수</h5>
</blockquote>
<pre><code>function is_adult(age){
    if(age &gt; 20){
        alert(&#39;성인이에요&#39;)
    } else {
        alert(&#39;청소년이에요&#39;)
    }
}</code></pre><pre><code>is_adult(25)</code></pre><h5 id="☑-if-else-if-else-if-else-if-else">☑ if, else if, else if, else if else</h5>
<pre><code>function is_adult(age){
    if(age &gt; 20){
        alert(&#39;성인이에요&#39;)
    } else if (age &gt; 10) {
        alert(&#39;청소년이에요&#39;)
    } else {
        alert(&#39;10살 이하!&#39;)
    }
}</code></pre><pre><code>is_adult(12)</code></pre><h5 id="☑-and-조건과-or-조건">☑ AND 조건과 OR 조건</h5>
<h5 id="--and-조건">- AND 조건</h5>
<pre><code>function is_adult(age, sex){
    if(age &gt; 20 &amp;&amp; sex == &#39;여&#39;){
        alert(&#39;성인 여성&#39;)
    } else if (age &gt; 20 &amp;&amp; sex == &#39;남&#39;) {
        alert(&#39;성인 남성&#39;)
    } else {
        alert(&#39;청소년이에요&#39;)
    }
}</code></pre><h5 id="--or-조건">- OR 조건</h5>
<pre><code>function is_adult(age, sex){
    if (age &gt; 65 || age &lt; 10) {
        alert(&#39;탑승하실 수 없습니다&#39;)
    } else if(age &gt; 20 &amp;&amp; sex == &#39;여&#39;){
        alert(&#39;성인 여성&#39;)
    } else if (age &gt; 20 &amp;&amp; sex == &#39;남&#39;) {
        alert(&#39;성인 남성&#39;)
    } else {
        alert(&#39;청소년이에요&#39;)
    }
}</code></pre><pre><code>is_adult(25,&#39;남&#39;)</code></pre><h4 id="3-반복문">(3) 반복문</h4>
<blockquote>
<h5 id="☑-예를-들어-0부터-99까지-출력해야-하는-상황이라면">☑ 예를 들어 0부터 99까지 출력해야 하는 상황이라면!</h5>
</blockquote>
<pre><code>console.log(0)
console.log(1)
console.log(2)
console.log(3)
console.log(4)
console.log(5)
...
console.log(99)</code></pre><h6 id="-이렇게-쓰기에-무리가-있다-그래서-반복문이-존재">*** 이렇게 쓰기에 무리가 있다. 그래서 반복문이 존재</h6>
<h5 id="☑-반복문을-이용하면-아래와-같이-단-세줄로-출력할-수-있다">☑ 반복문을 이용하면 아래와 같이 단 세줄로, 출력할 수 있다.</h5>
<pre><code>for (let i = 0; i &lt; 100; i++) {
    console.log(i);
}</code></pre><pre><code>for (1.시작조건; 2.반복조건; 3.더하기) {
    4.매번실행
}</code></pre><h5 id="1-→-2체크하고-→-괜찮으면-→-4-→-3">1 → 2체크하고 → (괜찮으면) → 4 → 3</h5>
<h5 id="→-2체크하고-→-괜찮으면-→-4-→-3">→ 2체크하고 → (괜찮으면) → 4 → 3</h5>
<h5 id="→-2체크하고-→-괜찮으면-→-4-→-3-1">→ 2체크하고 → (괜찮으면) → 4 → 3</h5>
<h5 id="→-2체크하고-→-괜찮으면-→-4-→-3-와-같은-순서로-실행된다">→ 2체크하고 → (괜찮으면) → 4 → 3 와 같은 순서로 실행된다.</h5>
<h5 id="i가-증가하다가-반복조건에-맞지-않으면-반복을-종료하고-빠져나온다">i가 증가하다가 반복조건에 맞지 않으면, 반복을 종료하고 빠져나온다.</h5>
<blockquote>
<h5 id="☑-그러나-위처럼-숫자를-출력하는-경우보다는-반복문은-주로-리스트와-함께-쓰인다">☑ 그러나 위처럼 숫자를 출력하는 경우보다는, 반복문은 주로 리스트와 함께 쓰인다.</h5>
</blockquote>
]]></description>
        </item>
    </channel>
</rss>