<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>müllerkopf_.log</title>
        <link>https://velog.io/</link>
        <description>코린이를 넘어 데이터 시각화를 휘두르는(?) 그날까지</description>
        <lastBuildDate>Sun, 24 Oct 2021 14:54:44 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>müllerkopf_.log</title>
            <url>https://images.velog.io/images/hanjunhee_kr/profile/6fdd980c-5cb4-4441-be66-e39b4b1d07fa/20191015_112013.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. müllerkopf_.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hanjunhee_kr" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[배운 내용 정리 - SQL 하루완성]]></title>
            <link>https://velog.io/@hanjunhee_kr/%EB%B0%B0%EC%9A%B4-%EB%82%B4%EC%9A%A9-%EC%A0%95%EB%A6%AC-SQL-%ED%95%98%EB%A3%A8%EC%99%84%EC%84%B1</link>
            <guid>https://velog.io/@hanjunhee_kr/%EB%B0%B0%EC%9A%B4-%EB%82%B4%EC%9A%A9-%EC%A0%95%EB%A6%AC-SQL-%ED%95%98%EB%A3%A8%EC%99%84%EC%84%B1</guid>
            <pubDate>Sun, 24 Oct 2021 14:54:44 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/hanjunhee_kr/post/31c0c821-50aa-40f8-a544-ce364ef8d0a2/20211024_235034.jpg" alt=""></p>
<p><img src="https://images.velog.io/images/hanjunhee_kr/post/50882627-f475-45cf-aec0-5816b6a8756e/20211024_235048.jpg" alt=""></p>
<p><img src="https://images.velog.io/images/hanjunhee_kr/post/ffcb91c1-501f-4fef-9b0e-ba7e58f1eaa1/20211024_235103.jpg" alt=""></p>
<p><img src="https://images.velog.io/images/hanjunhee_kr/post/bdfd8646-34ec-40d1-88fa-84784b4b6eb5/20211024_235115.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SQL 하루완성반 - 4주차]]></title>
            <link>https://velog.io/@hanjunhee_kr/SQL-%ED%95%98%EB%A3%A8%EC%99%84%EC%84%B1%EB%B0%98-4%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@hanjunhee_kr/SQL-%ED%95%98%EB%A3%A8%EC%99%84%EC%84%B1%EB%B0%98-4%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 24 Oct 2021 14:52:23 GMT</pubDate>
            <description><![CDATA[<p>하루완성 게더 모임은 끝났지만, 끝날 떄까지 진정 끝난게 아니다. 내 장점은 물고 늘어지는 집념이니까!!! (ㅋㅋ 그렇게 믿고 있다) 스스로 부족했다고 생각한 4주차 수업을 완벽을 기해 듣고 있다. </p>
<p>Subquery 쿼리문 안에 안긴 쿼리문장이다. 영어문법이랑 같다.
예를 들면 이런식이다. </p>
<p>select * from point_users
where point &gt; (
    select avg(point) from point_users
)
where구문 안에 select문이 안겼다. 이런 방식으로 평균보다 높은 포인트를 가진 회원들의 정보만 추출할 수 있다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SQL 맛보기 아직 갈 길이 멀다.]]></title>
            <link>https://velog.io/@hanjunhee_kr/SQL-%EB%A7%9B%EB%B3%B4%EA%B8%B0-%EC%95%84%EC%A7%81-%EA%B0%88-%EA%B8%B8%EC%9D%B4-%EB%A9%80%EB%8B%A4</link>
            <guid>https://velog.io/@hanjunhee_kr/SQL-%EB%A7%9B%EB%B3%B4%EA%B8%B0-%EC%95%84%EC%A7%81-%EA%B0%88-%EA%B8%B8%EC%9D%B4-%EB%A9%80%EB%8B%A4</guid>
            <pubDate>Sun, 24 Oct 2021 10:34:55 GMT</pubDate>
            <description><![CDATA[<p>-학생, 직장인의 등록 비율을 구하기 위한 데이터 추출
select p.job, count(*) from enrolleds e
inner join prequestions p on e.user_id = p.user_id
where is_registered = 1
group by p.job </p>
<p>추가 작업 중인 부분 
-과목별을 추가한 학생, 직장인 등록 비율 데이터
select * from enrolleds e
inner join prequestions p on e.user_id = p.user_id
inner join courses c on e.course_id = c.course_id
where is_registered = 1</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SQL 하루완성반 - 3주차]]></title>
            <link>https://velog.io/@hanjunhee_kr/SQL-%ED%95%98%EB%A3%A8%EC%99%84%EC%84%B1%EB%B0%98-3%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@hanjunhee_kr/SQL-%ED%95%98%EB%A3%A8%EC%99%84%EC%84%B1%EB%B0%98-3%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 24 Oct 2021 08:10:02 GMT</pubDate>
            <description><![CDATA[<p>3주차 빡세다...하지만 가자~!! 
(오전11시부터 지금껏 SQL -ing)
join문을 배우는 중 범규 튜터의 &quot;정말 쉽죠&quot; 주문을 따라 외며 하나씩 풀어본다. </p>
<p>Q: 결재하고 시작하지 않은 유저들을 성씨별로 세어보기 
select name, count(*) as cnt_name from enrolleds en
inner join users u on en.user_id = u.user_id
where is_registered = 0
group by name 
order by cnt_name desc</p>
<p>Q: 과목 별로 시작하지 않은 유저들을 세어보기
select en.course_id, title, count(*) as cnt_notstart from enrolleds en
inner join courses c on en.course_id = c.course_id
where is_registered = 0
group by title</p>
<p>심화Q: 웹개발, 앱개발 종합반의 week 별 체크인 수를 세어보자(보기 좋게 정리해보기!)
select c.title, ch.week, count(ch.checkin_id) from courses c
inner join checkins ch on c.course_id = ch.course_id 
group by ch.week, c.title
order by c.title, ch.week</p>
<p>심화Q: 위 문제에 이어서 8월 1일 이후에 구매한 고객들만 추출해보기 
select c.title, ch.week, count(*) as cnt from courses c
inner join checkins ch on c.course_id = ch.course_id 
inner join orders o on ch.user_id = o.user_id
where o.created_at &gt;= &#39;2020-08-01&#39;
group by c.title, ch.week
order by c.title, ch.week</p>
<p>3주차 퀴즈 
select e.enrolled_id,
       e.user_id,
       count(*) as cnt
  from enrolleds e
 inner join enrolleds_detail ed on e.enrolled_id = ed.enrolled_id
 where ed.done = 1
 group by e.enrolled_id, e.user_id
 order by cnt desc</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SQL 하루완성반 - 2주차]]></title>
            <link>https://velog.io/@hanjunhee_kr/SQL-%ED%95%98%EB%A3%A8%EC%99%84%EC%84%B1%EB%B0%98-2%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@hanjunhee_kr/SQL-%ED%95%98%EB%A3%A8%EC%99%84%EC%84%B1%EB%B0%98-2%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 24 Oct 2021 06:15:42 GMT</pubDate>
            <description><![CDATA[<p>2주차 퀴즈를 풀며 동시에 기록을 남긴다.
1번 문제:앱개발 종합반의 결재수단별 주문건수 세어보기
select payment_method, count(*) from orders
where course_title = &#39;앱개발 종합반&#39;
group by payment_method </p>
<p>2번 문제:gmail을 사용하는 사용자 성씨별 회원수 세어보기
select name, count(*) from users
where email like &#39;%gmail.com&#39;
group by name</p>
<p>3번 문제:course_id별 오늘의 다짐에 달린 평균 likes 구해보기
select course_id, round(avg(likes),1) from checkins
group by course_id </p>
<p>그리고 대망의 2주차 숙제 
Q: 네이버 이메일을 사용하여 앱개발 종합반을 신청한 주문의 결재수단별 주문건수 세어보기 
select payment_method, count(*) from orders o
where email like &#39;%naver.com&#39; and course_title = &#39;앱개발 종합반&#39;
group by payment_method </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SQL 하루완성반 - 1주차]]></title>
            <link>https://velog.io/@hanjunhee_kr/SQL-%ED%95%98%EB%A3%A8%EC%99%84%EC%84%B1%EB%B0%98-1%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@hanjunhee_kr/SQL-%ED%95%98%EB%A3%A8%EC%99%84%EC%84%B1%EB%B0%98-1%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 24 Oct 2021 05:02:41 GMT</pubDate>
            <description><![CDATA[<p>select * from orders
where course_title = &#39;웹개발 종합반&#39; and payment_method = &#39;kakaopay&#39; and email like &#39;%naver.com&#39;</p>
<p>빨리 빨리 더 서둘러야 된다 ㅠㅜ 듣는 속도가 느린데도 할 건 다하는 고지식함...</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2주 팀프로젝트의 마지막]]></title>
            <link>https://velog.io/@hanjunhee_kr/2%EC%A3%BC-%ED%8C%80%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%9D%98-%EB%A7%88%EC%A7%80%EB%A7%89</link>
            <guid>https://velog.io/@hanjunhee_kr/2%EC%A3%BC-%ED%8C%80%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%9D%98-%EB%A7%88%EC%A7%80%EB%A7%89</guid>
            <pubDate>Thu, 07 Oct 2021 15:30:12 GMT</pubDate>
            <description><![CDATA[<p>시작하며 각오를 쓰던 일지 그 이후 중간 일지를 한 번도 쓰지 못했다. 핑계 아닌 핑계를 대자면, 정말 파이참과 ROBO3T를 번갈아가며 화면을 보고 있으면 정말 시간이 순식간에 사라졌다...
결국 시작 일지 다음 일지가 마지막 일지가 되어버렸다 (ㅠㅜㅠㅜ)</p>
<p>마지막까지 속 썩이던 워드클라우드...꼭 짚고 넘어가야 할 것 같다.
추석 특강으로 &lt;파이썬 가지고 혼자놀기&gt; 강의를 응용해서 적용해보고자 했지만 예상 외로 고전했던 부분이 많았다. 
:서버에서 워드클라우드를 가져오는 법 (추석 특강에서는 다운로드 받은 텍스트 파일을 불러오기만 하면 됐다 ㅠㅜ)
:워드클라우드 클랜징 후 필요 부분을 합쳐서 가져오는 법 
마지막으로 
:이미지로 출력하는 것이 아닌 HTML로 표현하는 법 (튜터님 특급 찬스로 성공!! @@ 아직도 이해가 잘 안간다...)</p>
<p>튜터님의 특급 도움을 받았지만...매일 평균 6시간 머리를 싸매고 고민하던 시간들이 없었다면 이 결과물을 얻을 수 없었으리라 생각한다. 시간을 갖고 다시 코드 로직을 복습해봐야겠다.</p>
<p>APP.PY 내용 </p>
<p>texts = list(db.travelLog.find({}, {&#39;_id&#39;: False, &#39;writer&#39;: False, &#39;numbers&#39;: False, &#39;date&#39;: False, &#39;weather&#39;: False}))
text_list = []
for text in texts:
    text_list.append(text[&#39;place&#39;])
    text_list.append(text[&#39;title&#39;].replace(&#39;!&#39;,&#39;&#39;).replace(&#39;<del>&#39;,&#39;&#39;).replace(&#39;.&#39;,&#39;&#39;))
    text_list.append(text[&#39;comment&#39;].replace(&#39;!&#39;,&#39;&#39;).replace(&#39;</del>&#39;,&#39;&#39;).replace(&#39;.&#39;,&#39;&#39;).replace(&#39;,&#39;,&#39;&#39;).replace(&#39;\n&#39;,&#39;&#39;))</p>
<p>new_text_list = &quot; &quot;.join(text_list)
print(new_text_list)</p>
<pre><code># print(cloud())</code></pre><p>mask = np.array(Image.open(&#39;cloud.png&#39;))</p>
<p>palettes = [&#39;Pastel1&#39;, &#39;Pastel2&#39;, &#39;Set1&#39;, &#39;Set2&#39;, &#39;Set3&#39;, &#39;Paired&#39;, &#39;Accent&#39;, &#39;Dark2&#39;]</p>
<p>wc = WordCloud(background_color=&#39;white&#39;,
               # 윈도우 폰트
               font_path=&#39;C:\Windows\Fonts\Hancom Gothic Bold.ttf&#39;,
               # 맥 폰트
               # font_path=&#39;C:/System/Library/Fonts/Supplemental/AppleGothic.ttf&#39;,
               mask=mask,
               colormap=&#39;Dark2&#39;)</p>
<p>wc.generate(new_text_list)
wc.to_file(&quot;static/wordcloud.png&quot;)</p>
<p>if <strong>name</strong> == &#39;<strong>main</strong>&#39;:
    app.run(&#39;0.0.0.0&#39;, port=5000, debug=True)</p>
<p>CLOUD.HTML 내용 
<SCRIPT>
   $(document).ready(function () {
            showcloud();
        });</p>
<pre><code>    function showcloud() {
        $.ajax({
            type: &quot;POST&quot;,
            url: &quot;/cloud&quot;,
            data: {},
            success: function (response) {
                let make_cloud = response[&#39;word_clouds&#39;]

                let temp_html = `&lt;div class=&quot;card-img&quot;&gt;
                                    &lt;img id=&quot;cloud-img&quot;                    
                                     src=&quot;${make_cloud}&quot; alt=&quot;img&quot;&gt;
                                &lt;/div&gt;`
                $(&#39;#cloud-img&#39;).append(temp_html)
            }
        })
    }</code></pre><p></SCRIPT></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[팀프로젝트_github로 코드공유 환경설정 단계]]></title>
            <link>https://velog.io/@hanjunhee_kr/%ED%8C%80%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8github%EB%A1%9C-%EC%BD%94%EB%93%9C%EA%B3%B5%EC%9C%A0-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95-%EB%8B%A8%EA%B3%84</link>
            <guid>https://velog.io/@hanjunhee_kr/%ED%8C%80%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8github%EB%A1%9C-%EC%BD%94%EB%93%9C%EA%B3%B5%EC%9C%A0-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95-%EB%8B%A8%EA%B3%84</guid>
            <pubDate>Tue, 28 Sep 2021 09:08:58 GMT</pubDate>
            <description><![CDATA[<p>환경설정이 팀원들을 이렇게 괴롭힐 줄 몰랐다. 생각보다 여러 부분에서 다양하게 헤메고 있는데, 그건 나 역시 마찬가지이다. </p>
<p>처음 git push origin 내브랜치이름 이 식이 pycham Terminal에서 계속 error와 함께 튕겼다. master 계정이 collaborator를 초대해줘야 한다는 것을 구글링을 통해 알았고, 내 선에서는 해결할 수 없음을 알았다. 새벽 1시 일단 git 관련 일은 내일하기로 했다. </p>
<p>아침 master 계정이 이메일로 초대장을 발송했고 invite를 수령하고 나서는 순조롭게 push/pull이 이뤄졌다. </p>
<p>팀원의 입장에서 git 팀프로젝트 환경에 처음 참여하는 방법을 정리해보면 다음과 같다. </p>
<ol start="0">
<li><p>master 계정의 invite를 받는다. </p>
</li>
<li><p>Git Bash를 통해 기본 설정을 한다
1.1 $ git clone 공유팀페이지로부터따온code 원하는파일명 
1.2 $ cd 파일명
1.3 $ ls (연 파일 안에 파일 및 폴더들 확인) 
1.4 $ pwd (컴퓨터 내 클론 파일 위치확인)</p>
</li>
<li><p>pycham을 통해 클론파일 오픈 
2.1 내용 입력 (내가 일할 부분 일한 후)
2.2 $ git init (처음 git 입력시에만)
2.3 $ git checkout -b 설정하고자는브랜치이름 (branch 처음 팔 경우에만 실행)
2.4 $ git add . (주의: add 뒤 한 칸 띄고 . 찍기)
2.5 $ git commit -m &quot;입력하고자는commit&quot; (주의: 반드시 &quot;&quot; 찍어)
2.6 $ git push origin 설정한브랜치이름 
  2.6.1 (만약 push가 제대로 실핼되지 않을 경우) $ git push origin +설정한브랜치이름 (주의: 여기서 +기호는 강제설정 기호로 작용한다)
2.7 팀프로젝트가 이뤄지는 github 를 새로고침하면 compare &amp; pull request 라는 초록 버튼 뜸
2.8 버튼 누르고 들어가 고쳐진 내용에 대한 설명 및 요청하는 사항 등 메모 및 코멘트 남긴다.</p>
<p>여기까지다. </p>
</li>
</ol>
<p>이후 마스터 파일에서 소스코드를 당겨오고 싶다면 pycham terminal에서 git pull origin master 입력하면 된다. </p>
<p>github를 한 번도 사용해보지 못한 사람도 하루만에 이해할 수 있는 내용이다. 새로 시작하는 모두 너무 걱정하지 말길 (내 자신에 보내는 응원이기도 하다) </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[wordcloud 패키지 in Python]]></title>
            <link>https://velog.io/@hanjunhee_kr/wordcloud-%ED%8C%A8%ED%82%A4%EC%A7%80-in-Python</link>
            <guid>https://velog.io/@hanjunhee_kr/wordcloud-%ED%8C%A8%ED%82%A4%EC%A7%80-in-Python</guid>
            <pubDate>Thu, 23 Sep 2021 08:00:25 GMT</pubDate>
            <description><![CDATA[<p>스파르타 코딩클럽의 추석 맞이 이벤트 강의를 완주했다. 웹개발 종합반 수업 중에 배웠던 파이썬 내용을 한 번 더 복습할 수 있는 강의였기에 따라가기 수월했고, (뭐 아마 처음 들었더라도 워낙 설명을 쉽게해주는 범규 튜터님이라...당연히 잘 따라갔을 것이다) 끝마치고 생기는 결과물이 마음에 들었다. </p>
<p>다음은 결과물 코딩문이다. </p>
<p>from wordcloud import WordCloud
from PIL import Image
import numpy as np</p>
<p>text = &#39;&#39;
with open(&quot;KakaoTalk.txt&quot;, &quot;r&quot;, encoding=&quot;utf-8&quot;) as f:
    lines = f.readlines()
    for line in lines[5:]:
        if &#39;,&#39; in line:
            text += line.split(&#39;,&#39;)[1].replace(&#39;<strong>* : &#39;, &#39;&#39;).replace(&#39;*</strong> : &#39;,&#39;&#39;).replace(&#39;ㅎㅎ&#39;,&#39;&#39;).replace(&#39;ㅋㅋ&#39;,&#39;&#39;).replace(&#39;ㅋㅋㅋ&#39;,&#39;&#39;).replace(&#39;ㅋㅋㅋㅋㅋ&#39;,&#39;&#39;).replace(&#39;ㅋ&#39;,&#39;&#39;)</p>
<p>mask = np.array(Image.open(&#39;cloud.png&#39;))
wc = WordCloud(font_path=&#39;Hancom Gothic C:\WINDOWS\Fonts\Hancom Gothic Bold.ttf&#39;, background_color=&quot;white&quot;, mask=mask)
wc.generate(text)
wc.to_file(&quot;result_masked.png&quot;)</p>
<p>코딩문의 replace 부분 중 ***은 사람이름이 들어가기에 생략한다. </p>
<p>올 추석엔 코딩을 배웠던 추억을 갖게 됐다. ㅎㅎ
코딩입문으로 스파르타코딩클럽 강추하며 오늘 개발일지는 끝 </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[파이썬으로 이메일 첨부파일 넣어 보내기]]></title>
            <link>https://velog.io/@hanjunhee_kr/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-%EC%9D%B4%EB%A9%94%EC%9D%BC-%EC%B2%A8%EB%B6%80%ED%8C%8C%EC%9D%BC-%EB%84%A3%EC%96%B4-%EB%B3%B4%EB%82%B4%EA%B8%B0</link>
            <guid>https://velog.io/@hanjunhee_kr/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-%EC%9D%B4%EB%A9%94%EC%9D%BC-%EC%B2%A8%EB%B6%80%ED%8C%8C%EC%9D%BC-%EB%84%A3%EC%96%B4-%EB%B3%B4%EB%82%B4%EA%B8%B0</guid>
            <pubDate>Wed, 22 Sep 2021 16:02:26 GMT</pubDate>
            <description><![CDATA[<p>2일차 미션 </p>
<p>성공적 </p>
<p>from openpyxl import Workbook</p>
<p>from bs4 import BeautifulSoup
from selenium import webdriver</p>
<p>driver = webdriver.Chrome(&#39;chromedriver&#39;)</p>
<p>url = &quot;<a href="https://search.naver.com/search.naver?where=news&amp;sm=tab_jum&amp;query=%EC%9E%AC%EB%82%9C%EC%A7%80%EC%9B%90%EA%B8%88&quot;">https://search.naver.com/search.naver?where=news&amp;sm=tab_jum&amp;query=%EC%9E%AC%EB%82%9C%EC%A7%80%EC%9B%90%EA%B8%88&quot;</a></p>
<p>driver.get(url)
req = driver.page_source
soup = BeautifulSoup(req, &#39;html.parser&#39;)</p>
<p>articles = soup.select(&#39;#main_pack &gt; section &gt; div &gt; div.group_news &gt; ul &gt; li&#39;)</p>
<p>wb = Workbook()
ws1 = wb.active
ws1.title = &quot;articles&quot;
ws1.append([&quot;제목&quot;, &quot;링크&quot;, &quot;썸네일&quot;])</p>
<p>for article in articles:
    title = article.select_one(&#39;div.news_wrap.api_ani_send &gt; div &gt; a&#39;)[&#39;title&#39;]
    url = article.select_one(&#39;div.news_wrap.api_ani_send &gt; div &gt; a&#39;)[&#39;href&#39;]
    press = article.select_one(&#39;div.news_wrap.api_ani_send &gt; div &gt; div.news_info &gt; div.info_group &gt; a.info.press&#39;).text.split(&#39; &#39;)[0].replace(&#39;언론사&#39;, &#39; &#39;)
    thumbnail = article.select_one(&#39;div.news_wrap.api_ani_send &gt; a &gt; img&#39;)[&#39;src&#39;]</p>
<pre><code>ws1.append([title, url, thumbnail])</code></pre><p>driver.quit()
wb.save(filename=&#39;articles.xlsx&#39;)</p>
<hr>
<p>이메일 파이썬 구문 </p>
<p>import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email import encoders</p>
<h1 id="보내는-사람-정보">보내는 사람 정보</h1>
<p>me = &quot;<a href="mailto:hhhhhh1227@gmail.com">hhhhhh1227@gmail.com</a>&quot;
my_password = &quot;!!!!!!&quot;</p>
<h1 id="로그인하기">로그인하기</h1>
<p>s = smtplib.SMTP_SSL(&#39;smtp.gmail.com&#39;)
s.login(me, my_password)</p>
<h1 id="받는-사람-정보">받는 사람 정보</h1>
<p>emails = [&#39;asdfgh@naver.com&#39;, &#39;qwerty@naver.com&#39;]</p>
<p>for you in emails:
    # 메일 기본 정보 설정
    msg = MIMEMultipart(&#39;alternative&#39;)
    msg[&#39;Subject&#39;] = &quot;파이썬_이메일_2일차&quot;
    msg[&#39;From&#39;] = me
    msg[&#39;To&#39;] = you</p>
<pre><code># 메일 내용 쓰기
content = &quot;파이썬 코딩연습 (이메일보내기) 2일차 실습숙제&quot;
part2 = MIMEText(content, &#39;plain&#39;)
msg.attach(part2)

# 첨부파일 보내기
part = MIMEBase(&#39;application&#39;, &quot;octet-stream&quot;)
with open(&quot;articles.xlsx&quot;, &#39;rb&#39;) as file:
    part.set_payload(file.read())
encoders.encode_base64(part)
part.add_header(&#39;Content-Disposition&#39;, &quot;attachment&quot;, filename=&quot;재난지원금기사.xlsx&quot;)
msg.attach(part)

# 메일 보내고 서버 끄기
s.sendmail(me, you, msg.as_string())</code></pre><p>s.quit()</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[추석이벤트_PYTHON 혼자놀기]]></title>
            <link>https://velog.io/@hanjunhee_kr/%EC%B6%94%EC%84%9D%EC%9D%B4%EB%B2%A4%ED%8A%B8PYTHON-%ED%98%BC%EC%9E%90%EB%86%80%EA%B8%B0</link>
            <guid>https://velog.io/@hanjunhee_kr/%EC%B6%94%EC%84%9D%EC%9D%B4%EB%B2%A4%ED%8A%B8PYTHON-%ED%98%BC%EC%9E%90%EB%86%80%EA%B8%B0</guid>
            <pubDate>Wed, 22 Sep 2021 09:17:10 GMT</pubDate>
            <description><![CDATA[<p>웹개발 종합반 11일 완주반을 저번주 금요일에 끝내고 추석을 잘 쉬고 있었다. 배웠던 HTML과 jQuery구문 (그냥 왕보초보라 let temp_html <code>여기에 긁어온 내용</code>을 사용하는 정도지만...) 그리고 백엔드로 PYTHON을 조금씩 복습하고 있었다. </p>
<p>너무도 늦게 (이미 추석 전에 이벤트가 시작됐다.) 하지만 아직 종료된 이벤트는 아니어서 빨리 이번 추석 코딩 이벤트에 참여하게 됐다. (스파르타 짱짱맨) </p>
<p>마음 같아서는 지도 위치 찍는 강의랑 지금 듣는 단어모음 강의를 둘 다 듣고 싶었지만 일단 선택한 강의를 열심히 듣기로 하고 1일차 수업을 들었다. </p>
<p>브라우저에서 파이썬을 이용 웹스크랩핑하여 이미지를 받는 수업이었다. 내가 다시 혼자 숙제로 한 코딩문은 다음과 같다. </p>
<p>import dload
from bs4 import BeautifulSoup
from selenium import webdriver
import time</p>
<p>driver = webdriver.Chrome(&#39;chromedriver&#39;)
driver.get(&quot;<a href="https://search.daum.net/search?nil_suggest=btn&amp;w=img&amp;DA=SBC&amp;q=%EC%86%90%ED%9D%A5%EB%AF%BC&quot;">https://search.daum.net/search?nil_suggest=btn&amp;w=img&amp;DA=SBC&amp;q=%EC%86%90%ED%9D%A5%EB%AF%BC&quot;</a>)
time.sleep(5)</p>
<p>req = driver.page_source
soup = BeautifulSoup(req, &#39;html.parser&#39;)</p>
<p>thumbnails = soup.select(&#39;#imgList &gt; div &gt; a &gt; img&#39;)</p>
<p>i = 1
for thumbnail in thumbnails:
    img = thumbnail[&#39;src&#39;]
    print(img)
    dload.save(img, f&#39;img/{i}.jpg&#39;)
    i += 1</p>
<p>driver.quit()</p>
<p>생각보다 쉬워서 당황
내 실력이 늘지는 않은 것 같은데...
따라하다보니 짧은 구문은 하나씩 단계별로 print 하다보니 금방 끝난다. (신난다) </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[11일 완주 챌린지 성공_웹개발 종합반 ]]></title>
            <link>https://velog.io/@hanjunhee_kr/11%EC%9D%BC-%EC%99%84%EC%A3%BC-%EC%B1%8C%EB%A6%B0%EC%A7%80-%EC%84%B1%EA%B3%B5%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%A2%85%ED%95%A9%EB%B0%98</link>
            <guid>https://velog.io/@hanjunhee_kr/11%EC%9D%BC-%EC%99%84%EC%A3%BC-%EC%B1%8C%EB%A6%B0%EC%A7%80-%EC%84%B1%EA%B3%B5%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%A2%85%ED%95%A9%EB%B0%98</guid>
            <pubDate>Fri, 17 Sep 2021 06:36:23 GMT</pubDate>
            <description><![CDATA[<p>대략 2주(9월 6일부터 9월 17일까지)가 어떻게 지나갔는지 모르게 열심히 수업을 좇아갔다. 따라가다보니 어느새 5주차 수업을 듣고 있는 자신을 발견했고 (진짜 듣다보니 남은 강의가 얼마 안 남았다는 걸 깨달았다...재밌어서 그냥 좇아가게 되는 마성의 강의), 마지막 강의가 끝날 때가 되니 내 첫 웹페이지가 완성되어 있었다. </p>
<p>물론 기성 웹페이지 만큼 멋지고 화려하고 기능이 많지는 않지만, 기본 골격을 갖추고 alert와 페이지 안에 저장 기능도 있는 페이지 하나가 완성됐다. (11일간 잘 완강한 내 자신에게 작은 칭찬을!) html, css, javascript를 두루두루 이용해봤고, python을 이용 라이브러리인 pymongo, bs4, requests 등을 사용해봤다. 서버와 클라이언트의 개념, API와 DB의 역할도 알게됐다. 내가 보는 브라우저가 보여지는 그림판이었다는 충격(?)적인 사실과 페이지에 버튼을 하나놓는데에도 Logic이 필요하다는 사실 그리고 내가 만들고 싶은 기능과 골격디자인을 Bootstrap에 누군가가 이미 다 만들어 놓았다는 사실등 배우면서 놀라움과 신기함의 연속이었다.  </p>
<p>나는 사회과학계열을 전공한 사람이라 정말 코딩의 &#39;코&#39;짜도 몰랐지만, 그래도 주변에서 파이썬, sql, java, c++등 그런 것들이 있고 중요하다는 말을 많이 들어왔다. 막상 내가 그것을 해보겠다는 마음을 먹게된 계기는 굉장히 단순했는데 바로 &quot;나도 나의 기술을 갖고 나의 것을 만들어보고 싶다&quot;는 생각에서였다. 다만, 앞으로 그러니까 미래에도 유효하게 쓸모가 있는 기술을 배우고 싶었고 그 시작으로 스파르타 왕초보 웹개발 종합반을 수강하게 되었다. 나도 이 강의의 수료로 코딩에 입문했다는 자신감을 갖게 됐다는 것에 너무나 만족스럽다. 소기의 목표를 이룬 기분이랄까. 데이터시각화를 배워 나가고 싶다는 생각에 디딤받침이 스파르타코딩클럽에서 만난 좋은 강의였다는 점에 감사를 느낀다. 이범규 튜터의 말대로 앞으로도 꾸준히 한 발짝씩이라도 코딩을 할 버릇(?)을 들여봐야겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[git bash <>filzilla 맛보기]]></title>
            <link>https://velog.io/@hanjunhee_kr/git-bash-filzilla-%EB%A7%9B%EB%B3%B4%EA%B8%B0</link>
            <guid>https://velog.io/@hanjunhee_kr/git-bash-filzilla-%EB%A7%9B%EB%B3%B4%EA%B8%B0</guid>
            <pubDate>Thu, 16 Sep 2021 15:54:04 GMT</pubDate>
            <description><![CDATA[<p>스파르타 왕초보 웹개발 종합반 5주차 수업을 마쳤다. 11일 완성반으로 빡세게(?) 달려서 그런지 머리 속에 여러 개념이 뒤섞여 있다. 복습 철저!! 3주 동안 팀 프로젝트로 웹페이지를 직접 만드는 프로젝트에 들어간다. 프로젝트를 하면서 혼자서 개념을 다시금 잡아갈 수 있는 시간이 될 것 같다. </p>
<p>단기간에 웹과 관련된 이해도를 높이는데에 이만한 수업이 없다고 생각한다. 개인적으로 미디어학을 전공한 사람으로서 우리가 사용하는 매체의 뒤편 (블랙박스)의 구조를 조금이나마 이해한다는 일은 굉장히 흥미롭다. 대부분의 경우는 미디어의 인터페이스만 대하며 살아가기 때문이다. 이 개념을 초석으로 데이터 시각화를 배워 나갈 것이다. 하나씩 조급해말고 꾸준히 해 나가야지 다짐해본다. </p>
  <title>5주차 숙제 | 웹개발종합반(2021년9월)</title>
    <meta property="og:title" content="곶감호랑이"/>
    <meta property="og:description" content="프리미엄 상주곶감 한가위선물세트"/>
    <meta property="og:image" content="{{ url_for('static', filename='ogimage.png')}}"/>

<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=Hahmlet:wght@200&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;</code></pre><p>부분을 html 파일에서 완성했고 static에 ogimg.png 파일을 집어넣었다. 
og태그 세팅이 생각보다 말썽인데 다시 차근히 해봐야겠다. </p>
<p>복습하면서 수강완료의 홀가분한 마음으로 천천히 보면 문제는 금방 해결될 거라 본다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[파이썬과 친해지기]]></title>
            <link>https://velog.io/@hanjunhee_kr/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EA%B3%BC-%EC%B9%9C%ED%95%B4%EC%A7%80%EA%B8%B0</link>
            <guid>https://velog.io/@hanjunhee_kr/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EA%B3%BC-%EC%B9%9C%ED%95%B4%EC%A7%80%EA%B8%B0</guid>
            <pubDate>Tue, 14 Sep 2021 17:49:24 GMT</pubDate>
            <description><![CDATA[<p>아직 친해지기 좀 힘들다. 새벽 2시 37분 너무 졸립지만 그래도 끝까지!!!간다!!! 
스파르타 웹개발 종합반 4주차 과제!  </p>
<hr>
<p><strong>서버</strong></p>
<p>from flask import Flask, render_template, jsonify, request</p>
<p>app = Flask(<strong>name</strong>)</p>
<p>from pymongo import MongoClient</p>
<p>client = MongoClient(&#39;localhost&#39;, 27017)
db = client.dbhomework</p>
<p>HTML 화면 보여주기
@app.route(&#39;/&#39;)
def homework():
    return render_template(&#39;homework_02week_junhee_Han.html&#39;)</p>
<p>주문하기(POST) API
@app.route(&#39;/order&#39;, methods=[&#39;POST&#39;])
def save_order():
    name_receive = request.form[&#39;name_give&#39;]
    quantity_receive = request.form[&#39;quantity_give&#39;]
    address_receive = request.form[&#39;address_give&#39;]
    phone_receive = request.form[&#39;phone_give&#39;]</p>
<pre><code>doc = {
    &#39;name&#39;:name_receive,
    &#39;quantity&#39;:quantity_receive,
    &#39;address&#39;:address_receive,
    &#39;phone&#39;:phone_receive
}
db.chuseokoder.insert_one(doc)
return jsonify({&#39;result&#39;: &#39;success&#39;, &#39;msg&#39;: &#39;해당주문이 정상적으로 등록됐습니다!&#39;})</code></pre><p>주문 목록보기(Read) API
@app.route(&#39;/order&#39;, methods=[&#39;GET&#39;])
def view_orders():
    orders = list(db.chuseokoder.find({},{&#39;_id&#39;:False}))</p>
<pre><code>return jsonify({&#39;result&#39;: &#39;success&#39;, &#39;orders&#39;: orders})</code></pre><p>if <strong>name</strong> == &#39;<strong>main</strong>&#39;:
    app.run(&#39;0.0.0.0&#39;, port=5000, debug=True)</p>
<hr>
<p>*<em>클라이언트 html 스크립트 *</em></p>
<pre><code>    $(document).ready(function () {
      get_rate();
      listing();
    })

     function listing() {
        $.ajax({
            type: &quot;GET&quot;,
            url: &quot;/order&quot;,
            data: {},
            success: function (response) {
                if (response[&quot;result&quot;] == &quot;success&quot;) {
                    let orders = response[&#39;orders&#39;];
                    for (let i = 0; i &lt; orders.length;i++) {
                        let name = orders[i][&#39;name&#39;]
                        let quantity = orders[i][&#39;quantity&#39;]
                        let address = orders[i][&#39;address&#39;]
                        let phone = orders[i][&#39;phone&#39;]

                        let temp_html = `&lt;tr&gt;
                                             &lt;th scope=&quot;row&quot;&gt;${name}&lt;/th&gt;
                                             &lt;td&gt;${quantity}&lt;/td&gt;
                                             &lt;td&gt;${address}&lt;/td&gt;
                                             &lt;td&gt;${phone}&lt;/td&gt;
                                         &lt;/tr&gt;`
                        $(&#39;#orders-box&#39;).append(temp_html)
                    }
                }
            }
        })
    }


    function order() {
        let name = $(&#39;#order-name&#39;).val()
        let quantity = $(&#39;#order-quantity&#39;).val()
        let address = $(&#39;#order-address&#39;).val()
        let phone = $(&#39;#order-phone&#39;).val()

        $.ajax({
            type: &quot;POST&quot;,
            url: &quot;/order&quot;,
            data: {name_give: name, quantity_give: quantity, address_give: address, phone_give: phone},
            success: function (response) {
                alert(response[&quot;msg&quot;]);
                window.location.reload();
            }
        })
    }


    function get_rate() {
        $.ajax({
            type: &quot;GET&quot;,
            url: &quot;http://spartacodingclub.shop/sparta_api/rate&quot;,
            data: {},
            success: function (response) {
                let wondallar = response[&#39;rate&#39;]
                $(&#39;#wondallor&#39;).text(wondallar)
            }
        })
    }</code></pre><p>스크립트 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Python 맛보기]]></title>
            <link>https://velog.io/@hanjunhee_kr/Python-%EB%A7%9B%EB%B3%B4%EA%B8%B0</link>
            <guid>https://velog.io/@hanjunhee_kr/Python-%EB%A7%9B%EB%B3%B4%EA%B8%B0</guid>
            <pubDate>Sun, 12 Sep 2021 13:42:16 GMT</pubDate>
            <description><![CDATA[<p>MongoDB를 이용해 (robo 3t를 통해 확인) 말로만 많이 듣던 파이썬을 드디어 직접 다뤄보는 경험을 했다. 앞서 기초의 기초를 배웠던 html, css, javascript 보다 훨씬 직관적인 명령어에 훨씬 배우는 동안 마음(?)이 편했다. 스파르타에 이범규 튜터님 강의가 워낙에 Bob Ross처럼 &quot;참 쉽죠?&quot;하며 진짜 (수강생들이 느끼기에) 쉽게 가르친다 생각했는데, 파이썬 강의는 앞선 주차에 비교해 정말 수업 따라가기가 쉬웠다. (나는 스파르타 웹개발 종합반 수업 전에는 코딩이라는 걸 다뤄본적이 없는 사람이다...) </p>
<p>쨌든 3주차가 끝났고 개발일지를 써본다. 숙제 코드다. 더불어 자가 진단을 해본다. </p>
<p>2가지 문제점 </p>
<p>1) 구글링을 해서 코드를 찾긴했는데 정작 코드가 아닌 &#39;&#39;혹은 :를 깜박해서 여러번 에러가 떴다. 조금 더 꼼꼼히 눈 똑바로 뜨고 코드를 써나갈 필요를 느꼈다. </p>
<p>2) 이번 파이썬 과제가 유독 페이지를 여러번 왔다갔다 (연결 주소 copy select 때문에)했어서 정신 없었지만 요령이 생겼다. 필요한 요소를 먼저 읽고 파악한 후 관련된 정보를 연속적으로 웹스크래핑 해야겠다는 교훈을 얻었다. (&quot;등수 찾고 주소 따고, 또 뭐 따야하더라...생각하고 진행하면 일이 너무 더디다.&quot;)</p>
<p>import requests
from bs4 import BeautifulSoup</p>
<p>from pymongo import MongoClient
client = MongoClient(&#39;localhost&#39;, 27017)
db = client.dbsparta</p>
<p>headers = {&#39;User-Agent&#39; : &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36&#39;}
data = requests.get(&#39;<a href="https://www.genie.co.kr/chart/top200?ditc=D&amp;ymd=20200403&amp;hh=23&amp;rtm=N&amp;pg=1&#39;,headers=headers">https://www.genie.co.kr/chart/top200?ditc=D&amp;ymd=20200403&amp;hh=23&amp;rtm=N&amp;pg=1&#39;,headers=headers</a>)</p>
<p>soup = BeautifulSoup(data.text, &#39;html.parser&#39;)</p>
<p>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)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[jQuery/Ajax 맛보기]]></title>
            <link>https://velog.io/@hanjunhee_kr/jQueryAjax-%EB%A7%9B%EB%B3%B4%EA%B8%B0</link>
            <guid>https://velog.io/@hanjunhee_kr/jQueryAjax-%EB%A7%9B%EB%B3%B4%EA%B8%B0</guid>
            <pubDate>Thu, 09 Sep 2021 18:26:06 GMT</pubDate>
            <description><![CDATA[<p>애먹었던 2주차 수업이 끝났다. 나는 명령문 구글검색을 해도 왜그렇게 검색 결과에 신뢰를 갖지 못하는지...코딩 사전이 있다면 책이라도 한 권 사야하나 싶다...(에휴) 그래도 열심히 잘 좇아왔다. </p>
<p>jQuery는 미리 작성된 자바스크립트 (라이브러리) / Ajax는 &quot;비동기식 자바스크립트 XML&quot;의 약자로 화면상 개체를 움직이기 위한 방식이다. </p>
<p>사용하기 위해서는 <head></head>사이에 jQuery CDN을 집어 넣는 것이 전제다. </p>
<p>pycham에서 class=&quot;&quot;를 주듯 id=&quot;&quot;를 주고 크롬 console에서 </p>
<blockquote>
<p>$(&#39;#id&#39;).val()/.append()/.text()/.hide()/.show() 등</p>
</blockquote>
<p>으로 조작 가능하다. </p>
<p>개인적으로 가장 오래 시간이 걸렸던 실습을 남긴다. 
어려웠던 점 3가지 </p>
<p>1) <head>-<script>에 
  let temp_html = `` 이렇게 빈값을 처리하는 방법을 몰라서 엄청 고생했다. </p>
<p>2) if (gu_mise > 70) {
       temp_html = <code>&lt;li class=&quot;bad&quot;&gt;${gu_name} : ${gu_mise}&lt;/li&gt;</code>
                        } else ... 여기서 나는 ${g_name : gu_mise}로 넣었다가 오류나서 다시 ${'gu_name' : 'gu_mise'}를 넣었다가 별짓을 다했는데 정답은 ${}을 두 개에 각각 쓰는 것이었다.</p>
<p>3) $('#names-q1').empty() 를 function q1() { 윗줄에 넣어버린 실수를 했었다. </p>
<!doctype html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <title>jQuery 연습하고 가기!</title>

<pre><code>&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;
    }
    .normal {
        color: lawngreen;
    }
    .good {
        color: dodgerblue;
    }
&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; 70) {
                        temp_html = `&lt;li class=&quot;bad&quot;&gt;${gu_name} : ${gu_mise}&lt;/li&gt;`
                    } else if (gu_mise &gt; 50) {
                        temp_html = `&lt;li class=&quot;normal&quot;&gt;${gu_name} : ${gu_mise}&lt;/li&gt;`
                    } else {
                        temp_html = `&lt;li class=&quot;good&quot;&gt;${gu_name} : ${gu_mise}&lt;/li&gt;`
                    }
                    $(&#39;#names-q1&#39;).append(temp_html)
                }
            }
        })
    }
&lt;/script&gt;</code></pre></head>

<body>
    <h1>jQuery+Ajax의 조합을 연습하자!</h1>

<pre><code>&lt;hr /&gt;

&lt;div class=&quot;question-box&quot;&gt;
    &lt;h2&gt;1. 서울시 OpenAPI(실시간 미세먼지 상태)를 이용하기&lt;/h2&gt;
    &lt;p&gt;모든 구의 미세먼지를 표기해주세요&lt;/p&gt;
    &lt;p&gt;업데이트 버튼을 누를 때마다 지웠다 새로 씌여져야 합니다.&lt;/p&gt;
    &lt;button onclick=&quot;q1()&quot;&gt;업데이트&lt;/button&gt;
    &lt;ul id=&quot;names-q1&quot;&gt;
        &lt;li&gt;중구 : 82&lt;/li&gt;
        &lt;li&gt;종로구 : 87&lt;/li&gt;
        &lt;li&gt;용산구 : 84&lt;/li&gt;
        &lt;li&gt;은평구 : 82&lt;/li&gt;
    &lt;/ul&gt;
&lt;/div&gt;</code></pre></body>

</html>]]></description>
        </item>
        <item>
            <title><![CDATA[HTML/CSS 맛보기]]></title>
            <link>https://velog.io/@hanjunhee_kr/HTMLCSS-%EB%A7%9B%EB%B3%B4%EA%B8%B0-d2333i7v</link>
            <guid>https://velog.io/@hanjunhee_kr/HTMLCSS-%EB%A7%9B%EB%B3%B4%EA%B8%B0-d2333i7v</guid>
            <pubDate>Wed, 08 Sep 2021 14:32:37 GMT</pubDate>
            <description><![CDATA[<p>스파르타 코딩클럽에 웹개발 종합반 9월반 수업을 듣고 있다. 헬린이처럼 코딩에 입문한 일명 &#39;코린이&#39;다. 데이터 시각화를 배우고 싶어 시작한 길인데 일단의 기초적으로 코딩의 전반적 구조와 개념을 배우고 싶어 선택했다. 시작이 좋다. 다행이 수업도 재밌고 따라갈만 하다. 11일 완주반으로 빡세게(?) 말 그대로 &#39;스파르타식&#39;배움을 이어가고 있는데 3일차인 오늘 1주차 수업일정이 끝났다. </p>
<p>아직 미약하지만 배운 것들을 잘 되짚어가며 하나씩 첫 숙제를 해봤다. 숙제는 Bootstrap을 이용해 지금껏 배운 HTML과 CSS의 태그들을 활용해보는 것으로 판매할 상품의 이미지와 내용 및 정보 input창을 브라우저에 구현해보는 것이었다. (다다음주 추석을 앞둔 시점이라는 점을 상기하며 과제에 적용해봤다.)</p>
<!doctype html>
<html lang="en">

<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<pre><code>&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;1주차 숙제 | 웹개발종합반(2021년9월)&lt;/title&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=Hahmlet:wght@200&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

&lt;style&gt;
    * {
        font: font-family: &#39;Hahmlet&#39;, serif;
    }
    .image {
        width: 500px;
        height: 400px;
        margin: auto;
        display: block;
    }
    .thema {
        font-size: 36px;
        font-weight: bold;
        width: 500px;
        margin: 10px auto 10px auto;
    }
    .sub {
        font-size: 20px;
        font-weight: normal;
        font-style: italic;
    }
    .context {
        width: 500px;
        margin: auto;
    }
    .input-group {
        width: 500px;
        margin: 15px auto 5px auto;
    }
    .btn {
        width: 100px;
        margin: auto;
        display: block;
    }
&lt;/style&gt;</code></pre></head>
<body>
    <img class="image" src="https://www.jingam.net/data/item/5776245031/67CY6rG07Iuc47Yyp67O17IKs8R.jpg">
    <h1 class="thema">상주곶감<span class="sub"> 가격: 70,000원 / 개 (회원카드특별상품)</span></h1>
    <p class="context">프리미엄 한가위 선물 상주곶감세트입니다. 품격있는 선물로 부모님과 친지 가족들 그리고 지인들에게 이번 한가위 감사인사를 전해보세요. (한 회원카드당 최대 3세트 구매제한) </p>

<pre><code>&lt;div class=&quot;input-group mb-3&quot;&gt;
    &lt;div class=&quot;input-group-prepend&quot;&gt;
        &lt;span class=&quot;input-group-text&quot; id=&quot;inputGroup-sizing-default&quot;&gt;주문자 이름&lt;/span&gt;
    &lt;/div&gt;
    &lt;input type=&quot;text&quot; class=&quot;form-control&quot; aria-label=&quot;Default&quot; aria-describedby=&quot;inputGroup-sizing-default&quot;&gt;
&lt;/div&gt;

&lt;div class=&quot;input-group mb-3&quot;&gt;
    &lt;div class=&quot;input-group-prepend&quot;&gt;
        &lt;label class=&quot;input-group-text&quot; for=&quot;inputGroupSelect01&quot;&gt;수량&lt;/label&gt;
    &lt;/div&gt;
    &lt;select class=&quot;custom-select&quot; id=&quot;inputGroupSelect01&quot;&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;div class=&quot;input-group mb-3&quot;&gt;
    &lt;div class=&quot;input-group-prepend&quot;&gt;
        &lt;span class=&quot;input-group-text&quot; id=&quot;inputGroup-sizing-default&quot;&gt;주소&lt;/span&gt;
    &lt;/div&gt;
    &lt;input type=&quot;text&quot; class=&quot;form-control&quot; aria-label=&quot;Default&quot; aria-describedby=&quot;inputGroup-sizing-default&quot;&gt;
&lt;/div&gt;

&lt;div class=&quot;input-group mb-3&quot;&gt;
    &lt;div class=&quot;input-group-prepend&quot;&gt;
        &lt;span class=&quot;input-group-text&quot; id=&quot;inputGroup-sizing-default&quot;&gt;전화번호&lt;/span&gt;
    &lt;/div&gt;
    &lt;input type=&quot;text&quot; class=&quot;form-control&quot; aria-label=&quot;Default&quot; aria-describedby=&quot;inputGroup-sizing-default&quot;&gt;
&lt;/div&gt;

&lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot;&gt;주문하기&lt;/button&gt;</code></pre></body>
</html>]]></description>
        </item>
        <item>
            <title><![CDATA[웹개발로 코딩입문]]></title>
            <link>https://velog.io/@hanjunhee_kr/%EC%9B%B9%EA%B0%9C%EB%B0%9C%EB%A1%9C-%EC%BD%94%EB%94%A9%EC%9E%85%EB%AC%B8</link>
            <guid>https://velog.io/@hanjunhee_kr/%EC%9B%B9%EA%B0%9C%EB%B0%9C%EB%A1%9C-%EC%BD%94%EB%94%A9%EC%9E%85%EB%AC%B8</guid>
            <pubDate>Mon, 06 Sep 2021 16:41:20 GMT</pubDate>
            <description><![CDATA[<p>배움에 늦은 나이는 없다는 일념으로 오늘도 배운다. 
이런 말을 한다는 것 자체가 본인의 나이가 찼음에 신경을 꽤나 쓰고 있다는 반증이지만 개념치 않는다. </p>
<p>HTML은 구조를 잡는 도구고, CSS는 만들어진 뼈대에 살과 색을 입히는 도구다. 듣기만 했던 유명한 Java script는 운동감을 씌우는 도구라는데 디자인의 에프터이펙트 같은 존재인가 싶다...</p>
<p>웹이라는 환경은 사실 접속을 통해 이뤄지지만, 점차 세상 자체가 접속된 채로 놓여있는 상태가 되어가는 것 같다. 오프라인과 온라인의 경계가 모호해질 수 록 결국 &quot;디지털 리터러시&quot;의 개념은 더 부각될 것이다. 미래에 고생하지 않기 위해 지금부터 착실히 배워야 한다 스스로를 이해시켜 본다. </p>
<p>&lt;...&gt;는 태그라 부른다. 태그로 시작해 태그로 마무리하는 구조로 <title>로 시작해 데이터가 들어가고 </title>로 끝나는 식이다. 이런 식은 꽤나 여러 종류가 있는데 입문자는 감히 어쩌지 못할 만큼 다양해보였다. 하나씩 보고 사용할 때 마다 친해지도록 노력해봐야겠다. </p>
<p>태그 head, body, p, div, h1 과는 일단 안면은 텄다. 이제 시작이다.</p>
]]></description>
        </item>
    </channel>
</rss>