<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>dainchoi</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Sat, 28 Nov 2020 05:07:34 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>dainchoi</title>
            <url>https://images.velog.io/images/dain-choi/profile/adc3b1cc-d7f8-426b-9465-66481f7bb4fa/tent-5635679_1920.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. dainchoi. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/dain-choi" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[게시판 GET 만들기]]></title>
            <link>https://velog.io/@dain-choi/%EA%B2%8C%EC%8B%9C%ED%8C%90-GET-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@dain-choi/%EA%B2%8C%EC%8B%9C%ED%8C%90-GET-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Sat, 28 Nov 2020 05:07:34 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>app.py</p>
</blockquote>
<pre><code>@app.route(&#39;/board&#39;, methods=[&#39;GET&#39;])
def boarding():
    # 1. DB 모든 값 가져오기
    reviews = list(db.reviews.find({}, {&#39;_id&#39;: 0}))
    # 2. 성공여부 및 상품목록 보여주기
    return jsonify({&#39;result&#39;: &#39;success&#39;, &#39;reviews&#39;: reviews})</code></pre><blockquote>
<p>desc.html</p>
</blockquote>
<pre><code>
        function showBoard() {
            $.ajax({
                type: &quot;GET&quot;,
                url: &quot;/board&quot;,
                data: {},
                success: function (response) {
                    if (response[&quot;result&quot;] == &quot;success&quot;) {
                        let reviews = response[&quot;reviews&quot;];
                        for (let i = 0; i &lt; reviews.length; i++) {
                            makeCard(reviews[i][&quot;nickname&quot;], reviews[i][&quot;comment&quot;]);
                        }
                    } else {
                        alert(&quot;상품을 받아오지 못했습니다.&quot;)
                    }
                }
            })
        }

        function makeCard(nickname, comment) {
            let tempHtml = `&lt;tr&gt;
                    &lt;td&gt;${nickname}&lt;/td&gt;
                    &lt;td&gt;${comment}&lt;/td&gt;
                &lt;/tr&gt;`
            $(&quot;#board&quot;).append(tempHtml);
        }</code></pre><p><img src="https://images.velog.io/images/dain-choi/post/f59ff283-a9ae-43bf-9fa0-237859469431/image.png" alt=""></p>
<p>얘도 밖으로 튕겨지네 .......</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[게시판 POST 만들기]]></title>
            <link>https://velog.io/@dain-choi/%EA%B2%8C%EC%8B%9C%ED%8C%90-POST-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@dain-choi/%EA%B2%8C%EC%8B%9C%ED%8C%90-POST-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Sat, 28 Nov 2020 03:43:10 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>app.py</p>
</blockquote>
<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.dbsparta


## HTML을 주는 부분
@app.route(&#39;/&#39;)
def home():
    return render_template(&#39;desc.html&#39;)

## API 역할을 하는 부분
@app.route(&#39;/board&#39;, methods=[&#39;POST&#39;])
def boardsaving():
    # # (1) nickname_receive로 닉네임 가져오기
    nickname_receive = request.form[&#39;nickname_give&#39;]
    # (2) comment_receive로 후기 가져오기
    comment_receive = request.form[&#39;comment_give&#39;]

    # DB에 삽입 할 자료
    review = {
        &#39;nickname&#39;: nickname_receive,
        &#39;comment&#39;: comment_receive,
    }
    # reviews에 review 저장하기
    db.reviews.insert_one(review)

    # 성공 여부 확인 및 메시지 출력
    return jsonify({&#39;result&#39;: &#39;success&#39;, &#39;msg&#39;: &#39;후기 등록 완료&#39;})


if __name__ == &#39;__main__&#39;:
    app.run(&#39;0.0.0.0&#39;, port=5000, debug=True)
</code></pre><blockquote>
<p>desc.html</p>
</blockquote>
<pre><code>function makeReview() {
            // 1. 게시판에 입력된 닉네임 후기 가져오기
            let nickname = $(&quot;#nickname&quot;).val();
            let comment = $(&quot;#comment&quot;).val();

            // 2. 닉네임 후기  중 하나라도 입력안한게 있으면 alert 보여주기
            if (nickname == &quot;&quot;) {
                alert(&quot;닉네임을 입력해주세요.&quot;);
                $(&quot;#nickname&quot;).focus();
                return;
            } else if (comment == &quot;&quot;) {
                alert(&quot;후기를 입력해주세요.&quot;);
                $(&quot;#comment&quot;).focus();
                return;
            }

            // 3. POST /product 에 저장(create)요청

            $.ajax({
                type: &quot;POST&quot;,
                url: &quot;/board&quot;,
                data: {nickname_give: nickname, comment_give: comment},
                success: function (response) { // 성공하면
                    if (response[&quot;result&quot;] == &quot;success&quot;) {
                        alert(response[&quot;msg&quot;]);
                        window.location.reload();
                    }
                }
            })
        }
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[제품 GET 만들기]]></title>
            <link>https://velog.io/@dain-choi/%EC%A0%9C%ED%92%88-GET-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@dain-choi/%EC%A0%9C%ED%92%88-GET-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Sat, 28 Nov 2020 02:59:10 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>app.py</p>
</blockquote>
<pre><code>@app.route(&#39;/product&#39;, methods=[&#39;GET&#39;])
def listing():
    # 1. DB 모든 값 가져오기 
    goods = list(db.goods.find({}, {&#39;_id&#39;:0}))
    # 2. 성공여부 및 상품목록 보여주기
    return jsonify({&#39;result&#39;: &#39;success&#39;, &#39;goods&#39;: goods})</code></pre><blockquote>
<p>cosmetic.html</p>
</blockquote>
<pre><code>function showProduct() {
            $.ajax({
                type: &quot;GET&quot;,
                url: &quot;/product&quot;,
                data: {},
                success: function (response) {
                    if (response[&quot;result&quot;] == &quot;success&quot;) {
                        let goods = response[&quot;goods&quot;];
                        for (let i = 0; i &lt; goods.length; i++) {
                            makeCard(goods[i][&quot;img&quot;], goods[i][&quot;name&quot;], goods[i][&quot;price&quot;]);
                        }
                    } else {
                        alert(&quot;상품을 받아오지 못했습니다.&quot;)
                    }
                }
            })
        }

        function makeCard(img, name, price) {
            let tempHtml = `${img}
                &lt;h4&gt;${name}&lt;/h4&gt;
                &lt;p&gt;&lt;strong&gt;${price}&lt;/strong&gt;&lt;/p&gt;`;
            $(&quot;#cards-box&quot;).append(tempHtml);
        }</code></pre><p><img src="https://images.velog.io/images/dain-choi/post/e8b5cade-1324-444c-bd11-c5fc0085cf4c/image.png" alt="">
1차 오류:
GET이 화면에 나오기는 하는데...
CSS가 전혀 안먹히는 채로 나오는 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[제품 POST 시작]]></title>
            <link>https://velog.io/@dain-choi/%EC%A0%9C%ED%92%88-POST-%EC%8B%9C%EC%9E%91</link>
            <guid>https://velog.io/@dain-choi/%EC%A0%9C%ED%92%88-POST-%EC%8B%9C%EC%9E%91</guid>
            <pubDate>Thu, 26 Nov 2020 14:27:55 GMT</pubDate>
            <description><![CDATA[<p>app.py 에서 POST 수정 중 
처음이라 너무 헷갈릴 것 같아서 단계별로 설명을 붙여봄</p>
<pre><code>@app.route(&#39;/product&#39;, methods=[&#39;POST&#39;])
def saving():

    # (1) img_receive로 추천하는 제품 이미지 가져오기
        img_receive = request.form[&#39;product_img&#39;]

        # (2) name_receive로 추천하는 제품 이름 가져오기
        name_receive = request.form[&#39;product_name&#39;]

        # (3) price_receive로 추천하는 제품 이름 가져오기
        price_receive = request.form[&#39;product_price&#39;]

    # DB에 삽입 할 자료
        item={
            &#39;img&#39; : img_receive,
            &#39;name&#39; : name_receive,
            &#39;price&#39; : price_receive
        }
        # items에 item 저장하기
        db.items.insert_one(item)

        #성공 여부 확인 및 메시지 출력

    return jsonify({&#39;result&#39;: &#39;success&#39;, &#39;msg&#39;:&#39;추천 등록 완료&#39;})</code></pre><p>불안하게 return 부분에서 빨간 밑줄이 쭈욱 그어졌다...</p>
<h2 id="오류-파티apppy-실행-중">오류 파티(app.py 실행 중)</h2>
<p><del>1차 오류 :</del>
IndentationError: unindent does not match any outer indentation level
<del>=&gt;들여쓰기 오류로 자동 줄 정렬 사용</del></p>
<p><del>2차 오류</del>
SyntaxError: &#39;return&#39; outside function
<del>=&gt; 자동 줄 맞춤 했더니 return이 밖으로 나가버림.. 탭키로 다시 들여쓰기</del></p>
<p><strong>해결!!</strong></p>
<h2 id="오류-파티cosmetichtml-실행-중">오류 파티(cosmetic.html 실행 중)</h2>
<p><del>1차 오류 : ~</del>
<del>작성할 때도 아 이 부분이 이게 맞나 싶었던 부분이 결국 오류가 나는구나.</del>
<img src="https://images.velog.io/images/dain-choi/post/c534af78-c6bb-4dfc-b5dd-4c8f3930813a/image.png" alt=""></p>
<p>진행하려고 했던 화면
위 화면에서 추천하기 버튼을 클릭 시 입력 내용이 DB에 저장.
input 박스에 저장하려는 id-&gt;name, price 주었음.
하면서 이건 어떡하지 라고 했던 부분이
이미지 업로드 부분인데 여기서 이걸 서버에 어떻게 저장하나 어디에 id를 줘야하나 하다가 똑같이 input 박스에 id-&gt;img를 주고 서버에 저장하려 했는데
결국 오류가 남....</p>
<pre><code>&lt;div class=&quot;file_input&quot;&gt;
    &lt;input type=&quot;text&quot; readonly=&quot;readonly&quot; id=&quot;img&quot;&gt;
       &lt;label&gt; 이미지 업로드
       &lt;input type=&quot;file&quot; onchange=&quot;javascript:document.getElementById(&#39;file_route&#39;).value=this.value&quot;&gt;
                &lt;/label&gt;
            &lt;/div&gt;</code></pre><p><img src="https://images.velog.io/images/dain-choi/post/5ecabb25-00dd-4015-b51f-166e17c3b881/image.png" alt="">
이미지 업로드 input 박스에 변화가 없음</p>
<p>그래도 한 공간이 빌 시 출력 되도록 하는 alert이 출력되는거로
아 ... 완전 망하진 않았구나 살짝 위안을 받음.
<img src="https://images.velog.io/images/dain-choi/post/05725d11-3eaa-4851-9682-c1c7d11ba063/image.png" alt=""></p>
<p><del>2차 오류:</del>
(↓HTML 부분)
    <div class="modal-bg">
        <div class="modal">
            <h2>추천하는 제품이 뭔가요?</h2>
            <div class="file_input">
                <input type="text" readonly="readonly" id="img">
                <label>
                    이미지 업로드
                    <input type="file" onchange="javascript:document.getElementById('img').value=this.value">
                </label>
            </div>
            <label for="name">제품명</label>
            <input type="text" name="name" id="name">
            <label for="price">가격</label>
            <input type="text" name="price" id="price">
            <button onclick="postProduct()">추천하기</button>
            <span class="modal-close">X</span>
        </div>
    </div></p>
<p>파일 input에 id를 모두 img 로 변경했지만..
정상이라면 &#39;추천 등록 완료&#39; 라는 메시지가 떠야하지만
<img src="https://images.velog.io/images/dain-choi/post/af1c2c10-7c9b-483c-8637-092e244723e8/image.png" alt="">
아무런 반응이 없다...</p>
<p>console 창에 뜨는 오류</p>
<p><del>Failed to load resource: the server responded with a status of 500 (INTERNAL SERVER ERROR)</del></p>
<p>해결.
give_ 부분들을 모두 실수를 했었다.
<img src="https://images.velog.io/images/dain-choi/post/eb623d66-c577-42fd-95d3-2f6651ea5985/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[제품 POST 연결하기]]></title>
            <link>https://velog.io/@dain-choi/POST-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@dain-choi/POST-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0</guid>
            <pubDate>Thu, 26 Nov 2020 13:35:12 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>app.py</p>
</blockquote>
<pre><code>@app.route(&#39;/&#39;)
def home():
   return render_template(&#39;cosmetic.html&#39;)

@app.route(&#39;/product&#39;, methods=[&#39;POST&#39;])
def saving():
    return jsonify({&#39;result&#39;: &#39;success&#39;, &#39;msg&#39;:&#39;POST 연결&#39;})</code></pre><h2 id="cosmetichtml-과-연결-할-예정">cosmetic.html 과 연결 할 예정</h2>
<p>(해당 페이지는 상품 리스트를 보여주며, modal 기능의 버튼을 이용하여
상품 추천하기를 POST 할 예정입니다.)</p>
<p>잘 연결 됐는지 확인하기 위해서 성공 시 &#39;POST 연결&#39; alert 출력</p>
<blockquote>
<p>cosmetic.html</p>
</blockquote>
<pre><code>function postProduct() {
   $.ajax({
          type: &quot;POST&quot;,
          url: &quot;/product&quot;,
          data: {},
          success: function (response) { // 성공하면
                if (response[&quot;result&quot;] == &quot;success&quot;) {
                  alert(response[&quot;msg&quot;]);
                    }
                }
            })
        }</code></pre><p><del>=&gt; 연결 실패...</del>
console 창을 보니 
Uncaught ReferenceError: $ is not defined
오류가 뜸</p>
<p>제이쿼리 js 로딩 실패로 생각됨...</p>
<pre><code>&lt;!-- JS --&gt;
&lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js&quot;
        integrity=&quot;sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q&quot;
        crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;</code></pre><p>head 부분 상단에 위 코드 작성 후
정상적으로 연결 완료 확인!!!</p>
<p><img src="https://images.velog.io/images/dain-choi/post/a1d5320d-6144-4688-931e-f2d5be3e42c7/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[백엔드 준비하기]]></title>
            <link>https://velog.io/@dain-choi/%EB%B0%B1%EC%97%94%EB%93%9C-%EC%A4%80%EB%B9%84%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@dain-choi/%EB%B0%B1%EC%97%94%EB%93%9C-%EC%A4%80%EB%B9%84%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 22 Nov 2020 02:10:07 GMT</pubDate>
            <description><![CDATA[<h2 id="파이썬-패키지-설치하기">파이썬 패키지 설치하기</h2>
<p>(웹개발 3주차 강의자료 참고)</p>
<blockquote>
<p>파이참 실행 시 requests 패키지 추가 (크롤링)</p>
</blockquote>
<p>(pyCharm 실행 - File - Setting - project : - Pycharm Interpreter 내 + requests 검색)</p>
<pre><code>import requests #py파일 상단 입력</code></pre><blockquote>
<p>파이참 실행 시 bs4 패키지 추가</p>
</blockquote>
<p>bs4 설치 =&gt; beautifulsoup4 약자
(pyCharm 실행 - File - Setting - project : - Pycharm Interpreter 내 + bs4 검색)</p>
<p>후 파일썬 파일 생성 후 아래 크롤링 기본셋팅</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 Safari/537.36&#39;}
data = requests.get(&#39;https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&amp;date=20200303&#39;,headers=headers)

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

#############################
코딩 시작</code></pre><blockquote>
<p>파이참 실행 시 pymongo 패키지 추가 (DB저장)</p>
</blockquote>
<p>(pyCharm 실행 - File - Setting - project : - Pycharm Interpreter 내 + pymongo 검색)</p>
<pre><code>from pymongo import MongoClient           # pymongo를 임포트 하기(패키지 인스톨 먼저 해야겠죠?)
client = MongoClient(&#39;localhost&#39;, 27017)  # mongoDB는 27017 포트로 돌아갑니다.
db = client.dbsparta                      # &#39;dbsparta&#39;라는 이름의 db를 만듭니다.</code></pre><pre><code># 저장 - 예시
doc = {&#39;name&#39;:&#39;bobby&#39;,&#39;age&#39;:21}
db.users.insert_one(doc)

# 한 개 찾기 - 예시
user = db.users.find_one({&#39;name&#39;:&#39;bobby&#39;})

# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
same_ages = list(db.users.find({&#39;age&#39;:21},{&#39;_id&#39;:False}))

# 바꾸기 - 예시
db.users.update_one({&#39;name&#39;:&#39;bobby&#39;},{&#39;$set&#39;:{&#39;age&#39;:19}})

# 지우기 - 예시
db.users.delete_one({&#39;name&#39;:&#39;bobby&#39;})</code></pre><blockquote>
<p>파이참 실행 시 flask 패키지 추가 (DB저장)</p>
</blockquote>
<p>(pyCharm 실행 - File - Setting - project : - Pycharm Interpreter 내 + flask 검색)</p>
<pre><code>from flask import Flask, render_template
app = Flask(__name__)

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

@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><p>Flask 기본 파일 구조
(1) static -&gt; 디렉토리 (이미지, CSS 파일)
(2) templates -&gt; 디렉토리 (html 파일)
(3) app.py -&gt; 파이썬 파일</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[html_첫 화면 만들기_(3)]]></title>
            <link>https://velog.io/@dain-choi/html%EC%B2%AB-%ED%99%94%EB%A9%B4-%EB%A7%8C%EB%93%A4%EA%B8%B03</link>
            <guid>https://velog.io/@dain-choi/html%EC%B2%AB-%ED%99%94%EB%A9%B4-%EB%A7%8C%EB%93%A4%EA%B8%B03</guid>
            <pubDate>Fri, 20 Nov 2020 01:43:28 GMT</pubDate>
            <description><![CDATA[<h2 id="카테고리-내-제품-업데이트-완료">카테고리 내 제품 업데이트 완료</h2>
<h4 id="11월-19일">11월 19일</h4>
<p><img src="https://images.velog.io/images/dain-choi/post/3b023db2-6606-4d6c-be47-346545117509/image.png" alt=""></p>
<p>제품 리스트 업데이트 완료</p>
<pre><code>&lt;div class=&quot;card&quot;&gt;
    &lt;!-- 각 카드 헤더 --&gt;
    &lt;div class=&quot;card-header-one&quot;&gt;
        &lt;div class=&quot;card-header-text&quot;&gt;
            추천
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;!-- 각 카드 바디 헤더 --&gt;
    &lt;div class=&quot;card-body-header&quot;&gt;

        &lt;h2&gt;록시땅 핸드크림&lt;/h2&gt;
        &lt;p class=&quot;card-body-hashtag&quot;&gt;#겨울 #기본템 #메이커&lt;/p&gt;
        &lt;p&gt;
            선물 중의 제일 기본 아이템!
            핸드크림이라고 모두 같은 핸드크림이아니다.
            &#39;록시땅&#39; 이름 하나로 주는 사람 체면도 살리고
            받는 사람도 훈훈해지는 마법의 핸드크림
        &lt;/p&gt;
        &lt;a class=&quot;btn btn-outline-danger&quot; href=&quot;birthdaymore.html&quot; role=&quot;button&quot;&gt;자세히 보기&lt;/a&gt;
    &lt;/div&gt;
&lt;/div&gt;</code></pre><p>카드 한 개의 html 내용</p>
<pre><code>    /* card 공통 */
    .card-header-text {
        background-color: #fa2414 ;
        color: #FFF ;
        font-weight: bold ;
        text-align: center ;
        float: right;
        margin: 15px 15px 15px 15px;
        border-radius: 50%;
        font-weight: bold;
        padding: 10px 10px 10px 10px;
        line-height: 30px;
    }

    .card-body-header{
        margin: 10px 20px 0px 20px;
    }

    .card-body-hashtag {
        color: #2478ff;
    }

    .btn btn-outline-danger{
    margin: 0 auto;
    }

    .card {
        height: 400px;
        width: 350px;
        border-radius: 15px;
        display: inline-block;
        margin-top: 30px;
        margin-left: 30px;
        margin-bottom: 30px;
        box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 
        rgba(0, 0, 0, 0.19);
        overflow: hidden;
        /* float: left; */
        }

     /* card1 */
    .card-header-one{
        width: 100%;
        height: 300px;
        background-image: url(&quot;img/handcream.jpg&quot;);
        background-size: 100% 280px;
        background-repeat: no-repeat;
    }

    .card:hover .card-header-one  {
        opacity: 0.8;
        height: 100px;
    }</code></pre><p>overflow: hidden; 사용으로 내용을 숨겼다가 마우스를 올렸을 때 공개하는 거로 작성
각 제품 자세히 보기 클릭 시 해당 기능을 삭제하고 hight를 늘려서 전체 내용을 보이게 할 생각
<img src="https://images.velog.io/images/dain-choi/post/fb4abc79-e841-45e9-a34f-7a07d4f893b8/image.png" alt=""></p>
<blockquote>
<p>11월 19일 문제점 : 화면 비율 조정 시 그대로 작아지는게 아니라
                   이미지들의 가운데 정렬 위치가 변경이 됨</p>
</blockquote>
<h2 id="간단-후기-작성-및-게시판-만들기">간단 후기 작성 및 게시판 만들기</h2>
<p><img src="https://images.velog.io/images/dain-choi/post/c958f153-d542-47ca-a7d6-401b9fff7f11/image.png" alt=""></p>
<p>자세히 보기 클릭 시 보여 줄 간단 후기 작성 화면과 후기 게시판 목록
float: left; 으로 옆으로 착착! 보여줄 예정!</p>
<h2 id="최종-프론트엔드-화면">최종 프론트엔드 화면</h2>
<p><img src="https://images.velog.io/images/dain-choi/post/0d073f66-0c4e-4cbb-99f6-3a93ed15cff1/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[html_첫 화면 만들기_(2)]]></title>
            <link>https://velog.io/@dain-choi/%EC%B2%AB-%ED%99%94%EB%A9%B4-%EB%A7%8C%EB%93%A4%EA%B8%B02</link>
            <guid>https://velog.io/@dain-choi/%EC%B2%AB-%ED%99%94%EB%A9%B4-%EB%A7%8C%EB%93%A4%EA%B8%B02</guid>
            <pubDate>Fri, 13 Nov 2020 06:33:10 GMT</pubDate>
            <description><![CDATA[<h2 id="메인화면-이미지-슬라이드-만들기">메인화면 이미지 슬라이드 만들기</h2>
<h4 id="11월-13일">11월 13일</h4>
<p>처음 화면 구상을 했을 때는 홈 메뉴를 생각하지 않았다.
그런데 처음 화면들어가서 바로 생일선물 화면을 보여주기엔 다른 메뉴들을 너무 차별하는 것 같아서 홈화면을 보여준 후 메뉴들을 클릭하도록 하는게 낫겠다라는 생각을 했다.</p>
<p>그래서 생각한게, &#39;홈 화면에서 선물 관련 이미지들을 슬라이드쇼로 보여주자.&#39;
그래서 부트스트랩에서 이미지 슬라이드 관련 소스를 찾아봤다.</p>
<p><a href="https://getbootstrap.com/docs/4.0/components/carousel/">부트스트랩_Carousel</a></p>
<p>위 페이지 내 &#39;With indicators&#39;를 사용하기로 결정.</p>
<pre><code>&lt;!--그림슬라이드 출처 : 부트스트랩--&gt;
&lt;div id=&quot;carouselExampleIndicators&quot; class=&quot;carousel slide&quot; data-ride=&quot;carousel&quot;&gt;
    &lt;ol class=&quot;carousel-indicators&quot;&gt;
        &lt;li data-target=&quot;#carouselExampleIndicators&quot; data-slide-to=&quot;0&quot; class=&quot;active&quot;&gt;&lt;/li&gt;
        &lt;li data-target=&quot;#carouselExampleIndicators&quot; data-slide-to=&quot;1&quot;&gt;&lt;/li&gt;
        &lt;li data-target=&quot;#carouselExampleIndicators&quot; data-slide-to=&quot;2&quot;&gt;&lt;/li&gt;
    &lt;/ol&gt;
    &lt;div class=&quot;carousel-inner&quot;&gt;
        &lt;div class=&quot;carousel-item active&quot;&gt;
            &lt;img class=&quot;d-block w-100&quot; src=&quot;img/birthday.jpg&quot; alt=&quot;First slide&quot;&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel-item&quot;&gt;
            &lt;img class=&quot;d-block w-100&quot; src=&quot;img/xmas.jpg&quot; alt=&quot;Second slide&quot;&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel-item&quot;&gt;
            &lt;img class=&quot;d-block w-100&quot; src=&quot;img/gift.jpg&quot; alt=&quot;Third slide&quot;&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;a class=&quot;carousel-control-prev&quot; href=&quot;#carouselExampleIndicators&quot; role=&quot;button&quot; data-slide=&quot;prev&quot;&gt;
        &lt;span class=&quot;carousel-control-prev-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;
        &lt;span class=&quot;sr-only&quot;&gt;Previous&lt;/span&gt;
    &lt;/a&gt;
    &lt;a class=&quot;carousel-control-next&quot; href=&quot;#carouselExampleIndicators&quot; role=&quot;button&quot; data-slide=&quot;next&quot;&gt;
        &lt;span class=&quot;carousel-control-next-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;
        &lt;span class=&quot;sr-only&quot;&gt;Next&lt;/span&gt;
    &lt;/a&gt;
&lt;/div&gt;</code></pre><p>이렇게 작성
img src=&quot;...&quot; 부분은 이미지 주소 복사 시 화면이 너무 깨져서, 
따로 이미지 경로를 만들고 이미지 저장해서 붙여넣었다.</p>
<p><a href="https://pixabay.com/ko/">일러스트 무료저작권 사이트</a></p>
<p><img src="https://images.velog.io/images/dain-choi/post/ff34e69b-aff6-484f-a389-cd3ac3edf5fe/image.png" alt=""></p>
<blockquote>
<p><del>11월 13일 문제점 : 캐러셀 이미지의 세로 높이가 너무 길어 이미지를 한눈에 보기 힘들다.</del> 
11월 16일 해결</p>
</blockquote>
<h4 id="11월-16일">11월 16일</h4>
<p>캐러셀 이미지 슬라이드 높이를 조정해보기로 했다.
스타일 태그 내에서 아래 코드를 추가.</p>
<pre><code>     &lt;style&gt;
     /* 캐러셀(이미지슬라이드) 이미지 크기변경 */
      .carousel-inner{
        width:auto;
        height:790px; /* 이미지 높이 변경 */
      }
      .carousel-item{
        width: auto;
        height:100%;
      }
      .d-block {
        display:block;
        width: auto;
        height: 100%;
      }
      &lt;/style&gt;</code></pre><p><img src="https://images.velog.io/images/dain-choi/post/1f9326cb-ddf9-4cfc-834b-4f21662f8a8c/image.png" alt=""></p>
<p>이 정도 크기로 만족!</p>
<h2 id="서브화면-카드-이미지-만들기">서브화면 카드 이미지 만들기</h2>
<h4 id="11월-13일-1">11월 13일</h4>
<p>부트스트랩 내 카드 소스를 활용해보기로 했다.
<img src="https://images.velog.io/images/dain-choi/post/8a38c9c5-dbfe-44b9-96ee-1527c6a9bf3a/image.png" alt=""></p>
<blockquote>
<p>11월 13일 문제점 : 부트스트랩 기본 카드 정렬이 마음에 안 든다.</p>
</blockquote>
<h4 id="11월-17일">11월 17일</h4>
<p>부트스트랩으로 작성한 카드의 모양이 마음에 안들어서 직접 만들기로했다.
(폭풍 구글링...)</p>
<blockquote>
<p>html 코드</p>
</blockquote>
<pre><code>&lt;div class=&quot;card&quot;&gt;
        &lt;!-- 각 카드 헤더 --&gt;
        &lt;div class=&quot;card-header&quot;&gt;
            &lt;div class=&quot;card-header-text&quot;&gt;
                HOT
            &lt;/div&gt;
        &lt;/div&gt;
        &lt;!--  카드 바디 헤더 --&gt;
        &lt;div class=&quot;card-body-header&quot;&gt;
            &lt;img src=&quot;&quot;&gt;
            &lt;h1&gt;록시땅 핸드크림&lt;/h1&gt;
            &lt;p class=&quot;card-body-hashtag&quot;&gt;#겨울 #기본템 #메이커&lt;/p&gt;
            &lt;p&gt;
                선물 중의 제일 기본 아이템!
                핸드크림이라고 모두 같은 핸드크림이아니다.
                &#39;록시땅&#39; 이름 하나로 주는 사람 체면도 살리고
                받는 사람도 훈훈해지는 마법의 핸드크림
            &lt;/p&gt;
            &lt;button type=&quot;button&quot; class=&quot;btn btn-outline-danger&quot;&gt;자세히 보기&lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;
</code></pre><p>위 카드를 총 10 개 정도 보이게 할 생각</p>
<blockquote>
<p>CSS코드</p>
</blockquote>
<pre><code>&lt;style&gt;
.cards {
              background: #f6f0fa;
              /* border: 1px solid #ffffff; */
              padding: 10px;
              margin: 0 auto;
              overflow: hidden; /* float 속성인식 */

            }

        .card {
            height: 400px;
            width: 350px;
            border-radius: 15px;
            display: inline;
            margin-top: 30px;
            margin-left: 30px;
            margin-bottom: 30px;
            box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
            overflow: hidden;
            float: left;
            }

        .card-header{
            width: 100%;
            height: 270px;
        }

        .card:hover .card-header  {
            opacity: 0.8;
            height: 100px;
        }

        .card-header-text {
            background-color: #fa2414 ;
            color: #FFF ;
            font-weight: bold ;
            text-align: center ;
            float: right;
            margin: 15px 15px 15px 15px;
            border-radius: 50%;
            font-weight: bold;
            padding: 10px 10px 10px 10px;
            line-height: 30px;
        }

        .card-body-header{
            margin: 10px 20px 0px 20px;
        }


        .card-body-hashtag {
            color: #2478ff;
        }

        .btn btn-outline-danger{
        margin: 0 auto;
        }

    &lt;/style&gt;</code></pre><p><img src="https://images.velog.io/images/dain-choi/post/b6493054-fe55-4710-ac83-9a007cb2e235/222.JPG" alt=""></p>
<blockquote>
<p><del>11월 17일 문제점 : card 내 이미지 위치 실패 / cards의 가운데 정렬 실패</del>
11월 18일 card 이미지 위치 수정
11월 19일 cards margin-left 설정으로 수정</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[html_첫 화면 만들기_(1)]]></title>
            <link>https://velog.io/@dain-choi/%EC%B2%AB-%ED%99%94%EB%A9%B4-%EB%A7%8C%EB%93%A4%EA%B8%B01</link>
            <guid>https://velog.io/@dain-choi/%EC%B2%AB-%ED%99%94%EB%A9%B4-%EB%A7%8C%EB%93%A4%EA%B8%B01</guid>
            <pubDate>Thu, 12 Nov 2020 00:47:19 GMT</pubDate>
            <description><![CDATA[<h2 id="레이아웃구분">레이아웃구분</h2>
<p><img src="https://images.velog.io/images/dain-choi/post/23f0b0af-901a-4eee-b91b-7e4f9dfa67f4/html%EA%B5%AC%EB%B6%84.png" alt=""></p>
<h2 id="메인페이지-만들어보기">메인페이지 만들어보기</h2>
<h4 id="11월-12일">11월 12일</h4>
<p>웹 개발 3주차를 완강하고, 4주차의 서버를 들어가기 전에 메인페이지를 만들어보기로 했다.
처음에 만들었던 화면
<img src="https://images.velog.io/images/dain-choi/post/e42215ea-5a1f-4319-820a-86a38547509e/image.png" alt="">
친구한테 보여주자마자 까였다.
옥색은 뭐냐, Present 밑에 한글은 왜 썼냐. 
하필 그 때 친구가 인터넷쇼핑몰을 구경 중이라 더 처참하게 비교당했다.
<img src="https://images.velog.io/images/dain-choi/post/48da1a32-d205-48b2-944d-f2da2ae85f5b/image.png" alt="">
친구가 이렇게 디자인하라고 보내줬던 사진......
<img src="https://images.velog.io/images/dain-choi/post/29ad1e31-12ef-41d8-8890-03a6c339d264/image.png" alt="">
열심히 따라했지만 결과 .. 열심히 구글링하고 부트스트랩보면서 수정해나가도록 하자.</p>
<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;Present,Present&lt;/title&gt;</code></pre><blockquote>
<p>스파르타 온라인 웹개발 1주차 7강 부트스트랩 시작 템플릿
<a href="https://getbootstrap.com/docs/4.0/components/alerts/">부트스트랩 컴포넌트 링크</a></p>
</blockquote>
<pre><code>   &lt;style&gt;
/*상단 연노란색 P 부분*/
  .header_point{
            color:#fff29a;
            font-size: 60px;
             }
/*상단 연회색 present, present 부분*/
  .header {
              padding: 5px;
              text-align: center;
              background: #d7d0e3;
              color: #a7a7a7;
              font-size: 30px;
            }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;!--상단--&gt;
&lt;div class=&quot;header&quot;&gt;
    &lt;h1 class=&quot;header_point&quot;&gt;P&lt;/h1&gt;
    &lt;p&gt;&lt;/p&gt;
    &lt;p&gt;&lt;/p&gt;
    &lt;p&gt;&lt;/p&gt;
    &lt;p&gt;&lt;/p&gt;
    &lt;p&gt;Present, Present&lt;/p&gt;
&lt;/div&gt;
</code></pre><p><img src="https://images.velog.io/images/dain-choi/post/17b39db0-340a-48f9-9a66-ce4690d6bdfa/image.png" alt=""></p>
<p><strong>nav 만들기</strong>
    <nav>
     <ul>
        <li><a class="active" href="#home">홈</a></li> <!--class = "active"는 활성화 된 메뉴는 별도 색으로 표시하기 위해 만들었다.-->
        <li><a href="brithday.html">생일</a></li>
        <li><a href="#success">합격/취업</a></li>
        <li><a href="#marriage">결혼축하</a></li>
        <li><a href="#anniversary">기념일</a></li>
     </ul>
    </nav>
이렇게만 작성하면</p>
<nav>
    <ul>
        <li><a class="active" href="#home">홈</a></li>
        <li><a href="brithday.html">생일</a></li>
        <li><a href="#success">합격/취업</a></li>
        <li><a href="#marriage">결혼축하</a></li>
        <li><a href="#anniversary">기념일</a></li>
    </ul>
</nav>

<p>위처럼 세로로 쫘르륵 만들어진다.</p>
<pre><code>ul {
          list-style-type: none;
          margin: 0;
          padding:0;
          overflow: hidden;
          background-color: #ffffff;
          text-align: center;
        }

        li {
          display: inline-block; /*카테고리 가로정렬 */
        }

        li a {
          display: block;
          color: #2f2a38;
          text-align: center;
          padding: 14px 16px;
          text-decoration: none;
        }

        li a:hover:not(.active) {
          background-color: #e7e4ec; /* 메뉴에 마우스 올렸을 때 색상 변화 */
          text-decoration:none; /* 메뉴에 마우스 올렸을 때 링크 밑줄 없애기*/
          color:#8b79ae; /* 메뉴에 마우스 올렸을 때 글자 색 */
        }


       li a:hover{
          background-color: b1a4c9; /* 메뉴에 마우스 올렸을 때 색상 변화 */
          text-decoration:none; /* 메뉴에 마우스 올렸을 때 링크 밑줄 없애기*/
          color:#8b79ae; /* 메뉴에 마우스 올렸을 때 글자 색 */
        }

        .active {
          background-color: #b1a4c9; /*활성화(보고있는페이지) 메뉴 색 */
          text-decoration:none; /* 메뉴에 마우스 올렸을 때 링크 밑줄 없애기*/
        }

</code></pre><p>이렇게 스타일을 수정하면, 마우스 올렸을 때, 클릭했을 때 메뉴 모양 바뀌고 가로로 변경 가능하다.
<img src="https://images.velog.io/images/dain-choi/post/6fa0c9b2-45be-46e2-ae68-99b88983c91b/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA['PRESENT, PRESENT' 기획안]]></title>
            <link>https://velog.io/@dain-choi/PRESENT-PRESENT-%EA%B8%B0%ED%9A%8D%EC%95%88</link>
            <guid>https://velog.io/@dain-choi/PRESENT-PRESENT-%EA%B8%B0%ED%9A%8D%EC%95%88</guid>
            <pubDate>Tue, 10 Nov 2020 07:38:31 GMT</pubDate>
            <description><![CDATA[<h2 id="1-present-present-프로젝트-설명-">1. &#39;PRESENT, PRESENT&#39; 프로젝트 설명 :</h2>
<p>평소 친구들 생일 선물 고를 때 &#39;카카오톡 - 선물하기&#39; 기능을 자주 쓴다.
사용하는 이유는 2만원대 / 3만원대 / 4만원대 / 5만원대 금액 별로 나눠져있으며, 정말 선물로 괜찮은 아이템들이 알아서 목록이 있어, 선택하여 구매만 하면 되기 때문이다.
하지만, &#39;카카오톡 선물하기&#39; 기능이 모바일에서만 지원이 가능하며, 최저가가 아니라는 단점이 있다.
그래서 가끔 선물하기에서 괜찮은 선물용 목록만 보고, 네이버에서 최저가를 다시 검색할 때가 있다.(내 기준)
프로젝트 겸사 해서, 아이템을 클릭하면 자동으로 최저가 사이트로 이동하게 되는 게 편할 것 같아서..... 해보기로 했다.</p>
<p>처음엔 카테고리를 2만원대 / 3만원대 / 4만원대 / 5만원대 식으로 정리할까 하다가,
생각해보니 최저가를 목적으로 하게 되면, 위 금액이 매번 달라질 수 있을 것 같다는 생각이 들었다. </p>
<p>그래서, 선물 용도에 따라 구분만 하기로 변경
(선물  카테고리는 고정 / 카테고리 내 리스트도 내 기준을 괜찮은 선물을 골라 고정.)</p>
<p>(+) 생각해보니 그럼 금액과 아이템 이름을 같이 쓰는게 의미없다.
내가 만드는 목적은 괜찮은 선물용 목록과 해당 아이템의 당일 최저가를 알고 싶은 것 뿐이니까 상관없을까 ...?</p>
<h2 id="2-화면-구상-">2. 화면 구상 :</h2>
<h4 id="메인화면">메인화면</h4>
<p><img src="https://images.velog.io/images/dain-choi/post/572112fe-4cac-4ac1-b6d1-4eb6404195d1/main2.JPG" alt=""></p>
<h4 id="넣고-싶은-기능">넣고 싶은 기능</h4>
<p><img src="https://images.velog.io/images/dain-choi/post/b89637f9-5431-4fb7-b92a-71c7536a4464/%EC%83%81%EC%84%B8.JPG" alt=""></p>
<pre><code>메인화면 아이템 자세히 보기 클릭 시 -&gt; 추천 이유 전체 표시와 리뷰 작성 공간 표시</code></pre><p><img src="https://images.velog.io/images/dain-choi/post/f7568b5e-960b-4975-9819-6c81f7f781b4/rank.JPG" alt=""></p>
<pre><code>각 카테고리 메인화면 오른쪽에 사람들 추천 비추천 표시 랭킹을 보여주고 싶음.</code></pre><h2 id="3-개발해야-하는-기능들-">3. 개발해야 하는 기능들 :</h2>
<p>(1) 메인 화면 html/css 설계</p>
<p>(2) API 설계</p>
<p><img src="https://images.velog.io/images/dain-choi/post/1f5bcf67-6f76-4d28-8aba-6aa7a796fab2/image.png" alt="">
상품  API 설계</p>
<p>리스팅 API - 저장 카드 읽기 (Read)
(1) 요청 방식 = GET
      요청 데이터 없음
(2) 서버가 제공 할 기능</p>
<ul>
<li>DB에 저장돼있는 상품명, 이미지, 추천 이유, URL 정보 가져오기</li>
</ul>
<p>포스팅 API - 카드 생성 (Create)
(1) 요청방식 = POST
      요청 데이터 : URL, 추천 이유
(2) 서버가 제공 할 기능</p>
<ul>
<li>URL의 meta 태그 정보를 바탕으로 상품명, 이미지 스크래핑</li>
<li>상품명, 이미지, URL, 추천 이유 정보를 모두 DB 저장</li>
</ul>
<p>게시판 API 설계</p>
<p>리스팅 API - 저장 게시글 읽기 (Read)
(1) 요청 방식 = GET
      요청 데이터 없음
(2) 서버가 제공 할 기능</p>
<ul>
<li>DB에 저장돼있는 넘버, 간단 후기, 닉네임 가져오기</li>
</ul>
<p>포스팅 API - 게시글 생성 (Create)
(1) 요청방식 = POST
      요청 데이터 : 닉네임, 간단 후기
(2) 서버가 제공 할 기능</p>
<ul>
<li>닉네임, 간단 후기 정보를 모두 DB 저장</li>
</ul>
<h2 id="4-프로젝트에-필요한-데이터-소스-">4. 프로젝트에 필요한 데이터 소스 :</h2>
<p>(1) 카카오 선물하기 선물 리스트 
(2) 네이버에서 검색 후 뜨는 쇼핑 최저가 리스트 순</p>
]]></description>
        </item>
    </channel>
</rss>