<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>jinni_26.log</title>
        <link>https://velog.io/</link>
        <description>TIL 기록</description>
        <lastBuildDate>Tue, 26 Apr 2022 12:42:28 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>jinni_26.log</title>
            <url>https://images.velog.io/images/jinni_26/profile/6b51fc1d-7e44-4ea4-90f4-9c74b88447e1/KakaoTalk_20210722_172524156_01.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. jinni_26.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/jinni_26" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[#0426 Today's 10minutes Diary]]></title>
            <link>https://velog.io/@jinni_26/0426-Todays-10minutes-Diary</link>
            <guid>https://velog.io/@jinni_26/0426-Todays-10minutes-Diary</guid>
            <pubDate>Tue, 26 Apr 2022 12:42:28 GMT</pubDate>
            <description><![CDATA[<p>오늘은 Django allauth를 이용한 Social Account에대해 배웠다.
사실 social account는 금방 기업 코드 따와서 뚝딱 만들 수 있는 기능이라 생각했는데,
생각보다 사전에 설정해줘야 하는 것들이 많았고, 그 과정은 한번 해본다고 외우기엔 조금 무리가 있는 내용이였다. 
그래도 다음번에 정말 구현해야 할 일이 생긴다면, 금방 찾아서 구현할 수 있지 않을까? 싶다
저번주부터 Django 개발에 대해서 배웠는데, 생각보다 서버의 길은 재미있었고, 은근 논리적으로 생각한다면 간단?한 프로세스 아닌가 싶다. 분할되어있는것들이 좀 많고 복잡해서 그렇지... 이게 그냥 복잡한건가..?ㅎㅎ... 강사님이 설명을 잘해주셔서 그런지, 생각보다 쉽게 이해가 되었다.</p>
<p>오늘 오후엔 수업을 듣고 있었는데, 학교 선배님께서 데이터 분야쪽에서 인턴을 할 생각이 있냐고 여쭤보셨다. 사실 나는 5월20일 멋사 스쿨이 끝나고 나서, 전업으로 창업에 몰두 할 생각이였는데, 곰곰이 생각해보면 너무 무작정 하는건 아닌지, 내 경험이 얼마나 부족한지에 대한 생각이 많이 들었고, 무엇보다 지금 당장 가용할 수 있는 돈이 없없다. 안정적으로 돈을 받으며 창업을 준비하기엔 무리라는 생각이지만, 그건 내가 열심히 안했을 경우 아닐까? 지금 멋사도 생각해보면 6시까지 수업을 내내 듣고, 끝나고 나서야 내 창업아이템을 준비하고 있는데, 취업도 워라밸을 잘 지켜주는 회사에 들어간다면 충분히 내 아이템을 병행할 수 있을 것이라 생각한다. 나는 현실에 지는게 아니다.
여태까지 노래를 하고 싶어도 현실에 졌고, 창업을 하고 싶어도 취업에 졌다고 생각할 수 있지만, 나는 지금 내가 할 수 있는 최선을 하는 것이고, 그렇다고 다른것을 절대 포기하지 않을 것이다.</p>
<p>나 자신한테 약속하자. 나태해 지지 말고, 아무리 힘들어도 하고싶은 걸 포기하지 말자고.</p>
<p>잘 된다면 5월 말부터 인턴생활을 시작할텐데, 우선 그러기 위해 포폴준비도 열심히 하고,
데이터분석 공부를 다시금 해보자.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[#0304 Today's 10minutes Diary]]></title>
            <link>https://velog.io/@jinni_26/0304-Todays-10minutes-Diary</link>
            <guid>https://velog.io/@jinni_26/0304-Todays-10minutes-Diary</guid>
            <pubDate>Fri, 04 Mar 2022 15:14:11 GMT</pubDate>
            <description><![CDATA[<h2 id="멋사-오프라인-3일차">멋사 오프라인 3일차</h2>
<p>어제까지만 해도 정말 무언가를 빨리 할 생각에 기분도 좋고 설렘으로 가득 찼었는데, 오늘은 완전 정 반대로 고민도 제일 많고 복잡하고 머리가 터질 것 같다.</p>
<p>기창업자들은 이런 기분변화를 얼마나 느끼며 생활했을까, 창업자들이 지병을 괜히 앓는게 아닌 것 같다. 
엄청난 무게감과 스트레스를 받으며 몇년을 살아가니 안아픈게 이상한거 아닐까.. </p>
<p>오늘은 멋사의 Head of Product를 맡고계신 지훈님께서 하루종일 특강을 해주셨다. 가설검증 단계부터 기업의 가치관, 정체성, 문제설정 등등 
정말 많은 것들을 배운 것 같다. 특히나 특강이 끝난 후 따로 질문을 드리러
찾아간 후 질문을 드렸다. </p>
<h2 id="굳이-왜">굳이 왜?</h2>
<p>우선 내가 오늘 특강을 들으면서, 내 사업 아이템도 MVP모델을 정말 빠르게 출시하고, 배너를 세워서 사람들의 유입량을 체크해보는게 어떨까? 라는 생각이 들었다.
때문에 이 검증방법이 괜찮을까요? 라는 질문을 드렸는데,
정말 생각한거보다 가장 근본적인 문제부터 <em><strong>why?</strong></em> 를 던져주셨다.</p>
<p>내가 기획하고 있는 것은</p>
<p>어떻게보면 offline to online 이 될 수도 있는 사업이었고,
오프라인에서 더 잘 해결할 수 있는 문제를 왜 온라인으로 해결해?
에 대한 해결책을 도출해 내야만 한다고 하셨다.
때문에 오로지 온라인에서만 가능한 기능들이 무엇이있을까?
내가 정확하게 구현하고싶고, 제공하고 싶은 것은 무엇일까?
나도 그 문제에 대해 명확하게 확립해야될 것 같다는 생각이 들어 곰곰이 생각을 해보았다.</p>
<h2 id="문제">문제</h2>
<p>오프라인에서 더 잘 해결할 수 있는 문제를 왜 온라인으로 해결해?앞에 그냥 엑스배너형식으로 놓으면 되는거 아닌가? 이런식으로 뽑아서 놔주는 사업이 더 돈이 될 수도 있다라고 하셨다. 인정 솔직히 가게당 10만원만 받아도 무겁고 세련된 메탈형식으로도 팔면 B2B로 충분히 가능성이 있는 것 같다. 현재로만 따졌을땐.</p>
<p>But 나는 온라인으로 통합할거다 </p>
<p>Why 그렇다면 왜?</p>
<ul>
<li>온라인만의 장점</li>
<li>우선 소비자는 아직 의사결정을 하지 않았음 (결정단계, 다른 매장을 갈 가능성도 충분히 있음)</li>
<li>물론 카카오맵,네이버 등 가게를 알아보고 오는사람도 있지만, 그 매장을 가는 과정에서도 비슷한 업종의 가게를 본다면 충분히 이 플랫폼을 통해 <pre><code>그 매장에 대해서 알아볼 가능성이 있음</code></pre></li>
<li>때문에 가격, 리뷰라는 것을 통해 이 가게를 빠르게 평가해보고자 함.</li>
<li>사람이 근본적으로 가지고 있는 호기심 해결가능</li>
<li>멀리 가지 않고도 그자리에서 동일업종 비교 가능</li>
</ul>
<p>이러한 이유들이 나왔고, 충분히 생각을 더 해봐야 할 것 같다.
10분이 지나서 오늘은 이만. 주말동안 생각정리도 하고 녹음도 하자.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[#0303 Today's 10minutes Diary (10DD)]]></title>
            <link>https://velog.io/@jinni_26/0303-10minutes-Daily-Diary-10DD</link>
            <guid>https://velog.io/@jinni_26/0303-10minutes-Daily-Diary-10DD</guid>
            <pubDate>Thu, 03 Mar 2022 12:25:38 GMT</pubDate>
            <description><![CDATA[<p>오늘 오전에는 사업계획서를 간단하게 작성을 한 후,
오후에는 멋쟁이사자처럼 공동창업자이신 나성영대표님의 강의가 있었다.</p>
<p>예전에 예비창업패키지 때문에 사업계획서를 쓰다 만적이 있는데, 그때의 악몽이
스쳐지나갔지만, 이번에 작성하는 건 요약에 초점을 둔 간단한 사업계획서 였기 때문에, 그때보단 부담이 덜 되지 않았나 싶다.</p>
<p>우선 요즘 드는 생각은, 최근에 멋사 스타트업 스쿨을 시작 한 후 내 방향성에 대해서 굉장히 고민이 많았는데, 스타트업 스쿨에 들어오길 정말 잘 한 것 같다는 생각이다.</p>
<ol>
<li><p>효율적으로 말하기
우선 주변사람들에게 내 아이디어를 설명해주면서 내 생각이 정리가 되는 느낌이다.
아무래도 오랜시간 대화를 할 수 없기 때문에, 굉장히 함축적으로 내 생각을 상대방에게 전달을 해야 한다. 그 환경속에서 내 생각을 정리해서 계속 말함으로써
내 아이디어를 상대방에게 어떻게하면 효과적으로 전달하고 이해시킬까? 라는 생각을 지속적으로 하게된다. 여기에 예비 창업자들의 피드백은 정말 도움이 된다.</p>
</li>
<li><p>멋지고 좋은 사람들을 만날 수 있는 계기
보통 오후에 강사님들 혹은 대표님을 모셔서 강의를 기획해주셨는데,
한분한분 정말 대단하신 분들이고, 배울점이 너무 많은 것 같다.
추천해주신 책들은 오늘 사서 지금 카페에 와있는데, 이걸 다 쓰고 읽어 볼 예정이다.</p>
<ol start="3">
<li>멋지고 좋은 사람들엔 동기들이 물론 대부분이다.
이제 이틀차이지만, 생각보다 많은 동기분들의 피칭도 듣고, 많은 이야기를 나눌 수 있었다. 대화를 하면서 느낀점은 대부분 나보다 사회경험이 더 많으신 분들이 많았고, 그분들에게선 작은 것부터 큰 것들까지 배울게 너무나도 많다. 
앞으로도 이야기를 많이 나누고, 그들을 보며 많은 것들을 배워나가고 성장할 것 같다.</li>
</ol>
<p>또한 매니저님들도 개발자를 하다오신 분부터 전반적으로 많은 지식을 가지신 분들이라 배울게 너무 많다. 배울게 정말 너무너무너무 많은 사람들 뿐이라 
내일이 기대가 되고 배우는게 즐겁다. </p>
<p>벌써 10분이 딱 지났다. 메모해둔 기억에 남는 것들을 메모하고 오늘은 이만.</p>
</li>
</ol>
<ul>
<li><p>아이디어 보다 시장의 크기가 더 중요하다.</p>
</li>
<li><p>최소한의 전문성을 갖추고있는 동료들이 균형있게 팀빌딩</p>
</li>
<li><p>나혼자 의지가 넘치는 x , 서로 존중하며 버틸 수 있는 팀빌딩</p>
</li>
<li><p>지분은 상관이 없지만, 의사결정을 할 수 있는 최종권한자가 필요하다고 생각.( 나는 약간 선택장애가 있다고 대학생활때부터 느꼈는데, 앞으로는 결정하는 연습도 해야겠다)</p>
</li>
<li><p>멋사 베트남 현지검증 방법</p>
</li>
</ul>
<ol>
<li>사전알림으로 등록자 수 (베트남에서 많이쓰이는 페이스북 이용)</li>
<li>전환율을 따짐</li>
</ol>
<ul>
<li>기억에 남는 마지막 단계</li>
</ul>
<ol>
<li>완벽한 준비는 없다.</li>
<li>what이 아닌 why에 집중해야 한다.</li>
<li>장기적인 계획이 필요하다.</li>
</ol>
<p>내일도 모레도 다음주도 몇년 후의 나도 파이팅. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[#0302 Today's 10minutes Diary]]></title>
            <link>https://velog.io/@jinni_26/0302-Todays-10minutes-Diary</link>
            <guid>https://velog.io/@jinni_26/0302-Todays-10minutes-Diary</guid>
            <pubDate>Wed, 02 Mar 2022 11:36:52 GMT</pubDate>
            <description><![CDATA[<h1 id="10분일기">10분일기</h1>
<p>오늘부터 딱 10분의 제한시간을 두고 일기를 써보려고 한다.
규칙적으로 10분을 정해놓고, 일기를 무작정 써내려 가는 것인데,
정해져 있는 시간 탓에 정말 기억에 남는 것들만 써내려 가게 된다고 한다.
나는 내 기억력이 엄청 좋다고 생각하며 살았는데, 최근들어 까먹는 것들도 많아지고
내 기억력에 의구심이 들어 하루하루를 기록해 보려고 한다.</p>
<p>0302 (수)</p>
<p>멋쟁이 사자처럼 스타트업 스쿨 2기 첫 비대면 강의를 하는 날이였다.
졸업 후 생활패턴이 많이 꼬인 탓에 일어나는게 조금은 버거웠다.
사실 일어나고 20분은 레오(9개월, 러시안블루)를 만지작 만지작 하느라 게을러 지는 것 같기도 하다.
위치는 선릉역과 삼성역 사이 애플트리타워?인데, 생각보다 멀어서 앞날이 캄캄.,,,하다...</p>
<p>OT가 있는 날이였는데, 오전시간에는 간단한 멋사 소개와 3회차 30명이 자기소개 하는 시간을 가졌다.
그런데 정말 내 상상이상으로 대단한 커리어를 가진, 많은 경험을 하고오신 분들이 많았고, 그때문에 
사실 초반에 엄청 움츠라 들어 있었다. </p>
<p>오후에는 1기 수료생 두분이서 본인들의 이야기를 들려주셨고, 그 다음은 개발세션으로 넘어가 개발자 두분이서 개발에 대해 간단하게, 그리고 앞으로 해야 할 것들을 가볍게 말씀해주셨다.
일단 눈앞에서 좋은기업들에 개발자로 재직해있던 분들의 이야기를 듣자하니 신기했고, 저분들은 어떤 삶을 살아왔을까..? 하는 생각이 많이 들었다. 
4월에 개발세션 들어가면 많이 볼 것 같으니 질문도 많이많이 해야겠다.</p>
<p>마지막으로 그룹Orientation 시간을 가졌는데, 그 시간에 생각보다 많은 사람들과 대화를 할 수 있었고, 어떤 스타트업을 꿈꿔서 지원했는지, 서로의 꿈이 뭔지, 등등 많은 이야기를 나누며 조금은 친해질 수 있었다.</p>
<p>아 참 점심시간이 너무 기억에 남는다. 사실 내 MBTI는 ESTJ인데, 요즘 부쩍 I라고 느끼는 이유는
혼자 뭘 하고싶고 혼자있고싶다. 점심도 혼자 먹고 커피한잔 하면서 공원에서 쉬다 들어가려고 계획하고 있었는데, 옆 줄에 앉으신 동기님께서 친절하게 점심을 같이 먹자 해주셔서 점심을 어쩌다보니 4명이서 먹게 되었다. </p>
<p>그런데 생각보다 너무 좋으신 분들이였고, 하루 중 모든 것을 내려놓고 이야기를 제일 많이 한 것 같다. 생각 외로 찾아오는 상황이 나쁘지 않았고 아마 자주 볼 것 같다 :) 많은 생각도 들고 힘든 하루였지만, 더 힘들 날을 생각하며 오늘은 아무것도 아닌 날이라 생각하고 이만 10분이 지나서! 안녕</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[같이푸는 python (심화)]]></title>
            <link>https://velog.io/@jinni_26/%EA%B0%99%EC%9D%B4%ED%91%B8%EB%8A%94-python-%EC%8B%AC%ED%99%94</link>
            <guid>https://velog.io/@jinni_26/%EA%B0%99%EC%9D%B4%ED%91%B8%EB%8A%94-python-%EC%8B%AC%ED%99%94</guid>
            <pubDate>Fri, 25 Feb 2022 08:32:05 GMT</pubDate>
            <description><![CDATA[<h2 id="크롤링">크롤링</h2>
<p>크롤러는 사전적으로 두가지 의미를 가진다.</p>
<ol>
<li>기는것</li>
<li>파충류</li>
</ol>
<p>코드라이언님은 크롤러가 우리대신 기어다니면서 데이터를 모아주는 것이라고 설명을 하셨다.</p>
<p>web crawling
크롤러를 사용해 웹 페이지의 데이터를 추출하는 것</p>
<p>이번시간에는 파이썬을 통해 크롤링을 배워 보기로 하겠다.</p>
<h2 id="requests">requests</h2>
<p>터미널에서 pip install requests 입력해서 다운.</p>
<p>import requests</p>
<p>print(requests)</p>
<h3 id="put-요청">put 요청</h3>
<p>requests에는 put,get,post,delete 과 같은 함수들이 있는데, get은
요청을 보내는 기능이다. 햄버거집에서 햄버거와 감자튀김을 요리사님께 요청을 보내고, 요리사님은 요청을 받고, 음식을 보내줍니다. 이와같이 
클라이언트가 요청을 하면, 서버가 응답하는 것을 생각하면 get을 이해할 수 있다.    </p>
<pre><code>print(response.encoding)
인코딩이 어떻게 되어있는지 -&gt; 다음은 ISO-8859-1

#print(response.headers)

#print(response.json)

#print(response.links)

#print(response.ok)

#print(response.status_code)</code></pre><p>등등 많은 함수가 있다.</p>
<h2 id="beautifulsoup">Beautifulsoup</h2>
<p>이미 beautifulsoup을 다운해놨다고 가정했을때, 이건 import할때가 좀 다르다.</p>
<pre><code>from bs4 import BeautifulSoup</code></pre><p>이렇게 선언한다.</p>
<h3 id="기본문법">기본문법</h3>
<pre><code>BeautifulSoup (데이터,파싱방법)

print(BeautifulSoup(response.text,&#39;html.parser&#39;))</code></pre><h3 id="requests와의-차이점">requests와의 차이점</h3>
<pre><code>reponse = requests.get(url)
print(type(response.text))

print(type(BeautifulSoup(response.text, &#39;html.parser&#39;)))</code></pre><p>이런식으로 두개의 코드가 있는데, 사실 결과값은 보기에 똑같아 보인다.
그러나 사실 같지 않은데, 이것을 알기 위해 type을 붙혀준 것이다.</p>
<p>결과는 위에는 class &#39;str&#39; , 아래는 class &#39;bs4.BeautifulSoup&#39;으로 다른것을 볼 수 있다.</p>
<pre><code>BeautifulSoup (데이터,파싱방법)</code></pre><p>그 후, result라는 변수에 a태그중, link_favorsch 클래스를 가진 것만
가져와보도록 하겠다.</p>
<pre><code>print(soup.findAll(&quot;a&quot;,&quot;link_favorsch&quot;))</code></pre><p>이렇게하면 실시간검색어만 잘 나오는 것을 볼 수 있다.</p>
<p>실시간 검색어 가져오는 총 코드</p>
<pre><code>&#39;&#39;&#39;
from bs4 import BeautifulSoup
import requests
from datetime import datetime

url = &quot;http://www.daum.net/&quot;
response = requests.get(url)
soup = BeautifulSoup(response.text, &#39;html.parser&#39;)
rank = 1

results = soup.findAll(&#39;a&#39;,&#39;link_favorsch&#39;)

search_rank_file = open(&quot;rankresult.txt&quot;,&quot;a&quot;)

print(datetime.today().strftime(&quot;%Y년 %m월 %d일의 실시간 검색어 순위입니다.\n&quot;))

for result in results:
    search_rank_file.write(str(rank)+&quot;위:&quot;+result.get_text()+&quot;\n&quot;)
    print(rank,&quot;위 : &quot;,result.get_text(),&quot;\n&quot;)
    rank += 1
&#39;&#39;&#39;</code></pre><h2 id="api">API</h2>
<p><img src="https://images.velog.io/images/jinni_26/post/76789b79-d568-44b1-938d-3d2713a91ec7/api.PNG" alt="">
( Application Programming Interface )</p>
<h3 id="api-key-발급받기">API Key 발급받기</h3>
<p><a href="https://home.openweathermap.org/api_keys">https://home.openweathermap.org/api_keys</a></p>
<p>가입 후 이메일 인증만 해주면, my api key에서 내 api 키를 볼 수 있다.</p>
<p>개개인의 고유성을 위해 문자와 숫자로 구성.</p>
<h3 id="api-링크-만들기">API 링크 만들기</h3>
<p>Current Weather Data 를 이용해보도록 하겠음.
API doc을 누르면, 설명서 보기 가능.</p>
<pre><code>import requests

city = &quot;Seoul&quot;
apikey = &quot;################################&quot;
api = f&quot;http://api.openweathermap.org/data/2.5/weather?q={city}&amp;appid={apikey}&quot;

//여기서 fstring을 써서 city, apikey에 위에서 설정한 값으로 입력넣어줌

result = requests.get(api)
print(result.text)
</code></pre><p>--</p>
<pre><code>print(type(result.text))</code></pre><p>여기서 result의 type은 str임을 알 수있다.</p>
<h3 id="json-이용하기">json 이용하기</h3>
<p>javascript object notation
데이터를 주고받을때, json포맷으로 받아오는 경우가 많다.이미 위에 받아온 내용도 json형식.</p>
<pre><code>import json</code></pre><p>json을 사용할땐 dictionary를 생각하면 된다. 그렇다고 dictionary는 아님
때문에 형식 변환을 해줘야함.</p>
<pre><code>data = json.loads(result.text)</code></pre><p>이렇게 해주면 type을 활용해 보았을때, data는 dict형으로 변환된 것을 알 수 있다.</p>
<p><strong><em>그 후 원하는 것을 뽑을때는 dictionary문법을 이용해서 똑같이 뽑아주면 끝.
data[&quot;key값&quot;] 이것만 알면 된다.</em></strong></p>
<p>-최종 코드 -</p>
<pre><code>import requests
import json

city = &quot;Seoul&quot;
apikey = &quot;################################&quot;
api = f&quot;&quot;&quot;http://api.openweathermap.org/data/2.5/\
weather?q={city}&amp;appid={apikey}&quot;&quot;&quot;

result = requests.get(api)

# print(result.text)

data = json.loads(result.text)

print(data[&quot;name&quot;],&quot;의 날씨입니다.&quot;)
print(&quot;날씨는 &quot;,data[&quot;weather&quot;][0][&quot;description&quot;],&quot;입니다.&quot;)
print(&quot;현재 온도는 &quot;,data[&quot;main&quot;][&quot;temp&quot;],&quot;입니다.&quot;)
print(&quot;하지만 체감 온도는 &quot;,data[&quot;main&quot;][&quot;feels_like&quot;],&quot;입니다.&quot;)
print(&quot;최저 기온은 &quot;,data[&quot;main&quot;][&quot;temp_min&quot;],&quot;입니다.&quot;)
print(&quot;최고 기온은 &quot;,data[&quot;main&quot;][&quot;temp_max&quot;],&quot;입니다.&quot;)
print(&quot;습도는 &quot;,data[&quot;main&quot;][&quot;humidity&quot;],&quot;입니다.&quot;)
print(&quot;기압은 &quot;,data[&quot;main&quot;][&quot;pressure&quot;],&quot;입니다.&quot;)
print(&quot;풍향은 &quot;,data[&quot;wind&quot;][&quot;deg&quot;],&quot;입니다.&quot;)
print(&quot;풍속은 &quot;,data[&quot;wind&quot;][&quot;speed&quot;],&quot;입니다.&quot;)</code></pre><h2 id="googletrans-라이브러리">googletrans 라이브러리</h2>
<p>언어감지와 번역기능이 있는 googletrans.import를 해주자</p>
<pre><code>from googletrans import Translator

translator = Translator()

sentence = &quot;안녕하세요 코드라이언입니다.&quot;
detected = translator.detect(sentence)

print(detected)</code></pre><p>import 한 후, sentence에 글을 넣고
detect함수를 이용해주니 출력값으로 lang=ko 를 출력해준다. 한국어를 잘 감지했다.</p>
<p>이번엔 문장을 집적 입력받고, 무슨언어인지 출력해주는 코드를 짜보자.</p>
<pre><code>sentence = input(&quot;번역할 문장을 입력하세요\n&quot;)
detected = translator.detect(sentence)

print(detected.lang)</code></pre><h3 id="translate">translate</h3>
<p>이번엔 원하는 언어로 직접 번역을 해주는 것을 해보자.</p>
<pre><code>translator.translate(text,destination,src)</code></pre><p>를 이용해주면 된다.
첫번째는 텍스트, 두번째는 목적지(언어) ,src는 인식하는 언어의 종류 (시작지 언어라고 생각하면된다. 구글을 믿고 안써도 된다.)</p>
<p>-최종 코드-</p>
<pre><code>from googletrans import Translator

translator = Translator()

sentence = input(&quot;번역을 원하는 문장을 입력해주세요 : &quot;)
dest = input(&quot;어떤 언어로 번역을 원하시나요?&quot;)

result = translator.translate(sentence,dest)
detected = translator.detect(sentence)

print(&quot;===========출 력 결 과===========&quot;)
print(detected.lang,&quot;:&quot;,sentence)
print(result.dest,&quot;:&quot;,result.text)
print(&quot;=================================&quot;)</code></pre><h2 id="메일-만들기">메일 만들기</h2>
<p>SMTP 
( SIMPLE MAIL TRANSFER PROTOCOL )
간단하게 메일을 보내기위한 약속.</p>
<p>메일을 보낼땐 무조건 smtp를 씀
서버에서 클라한테 보낼땐 IMAP이용. 그 외 서버끼리나 클라에서 서버는 SMTP</p>
<p><img src="https://images.velog.io/images/jinni_26/post/d75f0566-d08d-4d45-9c68-7849d693ad3a/SMTP.PNG" alt=""></p>
<p>SMTP는 3가지 단계만 기억하자.</p>
<ol>
<li>SMTP 메일 서버를 연결한다.</li>
<li>SMTP 메일 서버에 로그인한다.</li>
<li>SMTP 메일 서버로 메일을 보낸다.</li>
</ol>
<ul>
<li>1단계 서버연결 코드 -</li>
</ul>
<pre><code>import smtplib

SMTP_SERVER = &quot;smtp.gmail.com&quot;
SMTP_PORT = 465

smtp = smtplib.SMTP_SSL(SMTP_SERVER,SMTP_PORT)</code></pre><ul>
<li>2단계 서버에 로그인 코드 -</li>
</ul>
<pre><code>print(smtp.login(&quot;###@gmail.com&quot;,&quot;######&quot;))</code></pre><p>3단계 가기전에, MIME에 대해서 이해하고 가자.
SMTP는 한국어를 알아듣지 못한다. 때문에 중간에 MIME형태로 변환을 해주고 보내줘야 한다.</p>
<p>그러기위해선</p>
<pre><code>from email.message import EmailMessage
</code></pre><p>를 임포트 해주고,</p>
<pre><code>message = EmailMessage()
message.set_content(&quot;중중&quot;)

message[&quot;Subject&quot;] = &quot;메일 제목&quot;
message[&quot;From&quot;] = &quot;dafdf@gmail.com&quot;
message[&quot;To&quot;] = &quot;sendedman34243@gmail.com&quot;</code></pre><p>이렇게 설정해주면 된다.</p>
<ul>
<li>총 코드 <pre><code>import smtplib
from email.message import EmailMessage
</code></pre></li>
</ul>
<p>SMTP_SERVER = &quot;smtp.gmail.com&quot;
SMTP_PORT = 465</p>
<p>message = EmailMessage()
message.set_content(&quot;코드라이언 수업중입니다.&quot;)</p>
<p>message[&quot;Subject&quot;] = &quot;이것은 제목입니다.&quot;
message[&quot;From&quot;] = &quot;###@gmail.com&quot;
message[&quot;To&quot;] = &quot;###@gmail.com&quot;</p>
<p>smtp = smtplib.SMTP_SSL(SMTP_SERVER,SMTP_PORT)
smtp.login(&quot;###@gmail.com&quot;,&quot;######&quot;)
smtp.send_message(message)
smtp.quit()</p>
<pre><code>
### 메일에 사진첨부하기

![](https://images.velog.io/images/jinni_26/post/9cc46b0e-cbac-43cc-ad7c-df64d9cdc279/image.png)

이미지를 컴퓨터가 읽을 수 있는 바이너리로 변환시키는 것이다.
</code></pre><p>image = open(&quot;codelion.png&quot;,&quot;rb&quot;)
print(image.read())</p>
<pre><code>이 코드를 실행하면 , 바이너리 코드로 바꿔준 것을 볼 수 있다.
</code></pre><p>with open(&quot;codelion.png&quot;,&quot;rb&quot;) as image:
    image_file = image.read()</p>
<pre><code>
위 코드 없이 이렇게 작성하면, close없이 안전하게 파일을 열고닫을 수 있다.

본격적으로 첨부하는 방법에 대해 알아보자.

add_attachment(...) 을 이용해서 첨부할 수 있다.
</code></pre><p>import imghdr //import 해줘야 밑에 imghdr.what 사용가능</p>
<p>image_type = imghdr.what(&#39;codelion&#39;,image_file)
message.add_attachment(image_file,maintype=&#39;image&#39;,subtype=image_type)</p>
<pre><code>
이렇게 해주면 이미지 첨부가 가능하다.

## 유효성 검사</code></pre><p>reg = &quot;^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9]+.[a-zA-Z]{2,3}$&quot;
print(re.match(reg,&quot;codelion.examplegmailcom&quot;))</p>
<pre><code>
이걸 이용해서 함수로 만들어 주도록 하겠다.
</code></pre><p>def sendEmail(addr):
    reg = &quot;^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9]+.[a-zA-Z]{2,3}$&quot;
    if bool(re.match(reg,addr)):
        smtp.send_message(message)
        print(&quot;정상적으로 메일이 발송되었습니다.&quot;)
    else:
        print(&quot;유효한 이메일 주소가 아닙니다.&quot;)</p>
<p>```</p>
<p>밑에서 나중에 sendEmail(이메일)입력해주면 끝</p>
<hr>
<p>이로써 5일차 강의가 끝났다. 하루에 1강씩 듣는게 쉽지는 않았지만
생각보다 많이 재미있었고, 유익한 것들을 많이 배울 수 있었다. 감사합니다 코드라이언 :)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[같이푸는 Python]]></title>
            <link>https://velog.io/@jinni_26/%EB%A9%8B%EC%82%AC-%EC%8A%A4%ED%83%80%ED%8A%B8%EC%97%85%EC%8A%A4%EC%BF%A8-%EA%B0%99%EC%9D%B4%ED%91%B8%EB%8A%94-Python</link>
            <guid>https://velog.io/@jinni_26/%EB%A9%8B%EC%82%AC-%EC%8A%A4%ED%83%80%ED%8A%B8%EC%97%85%EC%8A%A4%EC%BF%A8-%EA%B0%99%EC%9D%B4%ED%91%B8%EB%8A%94-Python</guid>
            <pubDate>Thu, 24 Feb 2022 12:49:43 GMT</pubDate>
            <description><![CDATA[<h1 id="같이푸는-python">같이푸는 Python</h1>
<p>드디어 4일차. 내일이면 비대면 강의는 끝이 난다. 오늘은 
같이푸는 Python 강의 인데, python 기본 문법이라던가, 간단한 알고리즘을 배울 것 같다.</p>
<p>가장 처음 소개해주는건</p>
<p>Input인데, 숫자를 받아주고, int형으로 변환시키는 코드를 배웠다.</p>
<h2 id="input-함수-정리">input() 함수 정리.</h2>
<ul>
<li>사용자의 입력을 받는다. </li>
<li>문자열로 취급한다. </li>
<li>사용자의 입력을 반환.</li>
<li>입력은 엔터가 입력될 때 엔터 전까지를 모두 받는다.
input(&quot;문자열&quot;) 은 사용자로부터 입력을 받을 때 보여줄 메시지를 입력하면 됩니다.
예를 들어 숫자를 입력해달라고 하려면  input(&quot;숫자를 입력해주세요 : &quot;)
라고 작성하면 됩니다.</li>
</ul>
<p>출처: <a href="https://blockdmask.tistory.com/462">https://blockdmask.tistory.com/462</a> [개발자 지망생]</p>
<p>여기서 주의 할 점은 input은 입력을 문자열로 받기 때문에, 숫자와 같은 경우 int형으로 변환을 해줘야 한다</p>
<pre><code>수학점수 = input(“점수를 입력 : “)
정수형_수학점수 = int(수학점수) 
</code></pre><p>이런식으로! 주의할 것</p>
<h2 id="list">List</h2>
<h3 id="리스트의-모든-숫자-더하기">리스트의 모든 숫자 더하기</h3>
<pre><code>Print ( sum (list))
</code></pre><p>이렇게 해줘도 되고</p>
<pre><code>Add = sum(list)
Print (add)
</code></pre><p>이런식으로 더하는 변수를 하나 생성해 주고, 그 변수를 출력하는 방법도 있다.</p>
<p>강의를 듣다 이중리스트,삼중리스트의 인덱싱이 헷갈려서 찾아보았던 것을 공유한다.</p>
<p>이번에는 다음 예처럼 리스트 a를 숫자 1, 2, 3과 </p>
<p>또 다른 리스트인 [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]를 포함하도록 만들어 보자.
 a = [1, 2, 3, [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]]
다음 예를 따라 해 보자.</p>
<pre><code>a[0]
1
a[-1]
[&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]
a[3]
[&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]</code></pre><p>예상한 대로 a[-1]은 마지막 요솟값 [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]를 나타낸다. a[3]은 리스트 a의 네 번째 요소를 나타내기 때문에 마지막 요소를 나타내는 a[-1]과 동일한 결괏값을 보여 준다.
그렇다면 여기에서 리스트 a에 포함된 [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;] 리스트에서 &#39;a&#39; 값을 인덱싱을 사용해 끄집어낼 수 있는 방법은 없을까? 다음 예를 보자.</p>
<pre><code>a[-1][0]
&#39;a&#39;</code></pre><p>위와 같이 하면 &#39;a&#39;를 끄집어낼 수 있다. a[-1]이 [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;] 리스트라는 것은 이미 말했다. 바로 이 리스트에서 첫 번째 요소를 불러오기 위해 [0]을 붙여 준 것이다.
다음 예도 마찬가지 경우이므로 어렵지 않게 이해될 것이다.</p>
<pre><code>a[-1][1]
&#39;b&#39;
a[-1][2]
&#39;c&#39;</code></pre><p>[삼중 리스트에서 인덱싱하기]
조금 복잡하지만 다음 예를 따라 해 보자.</p>
<pre><code>a = [1, 2, [&#39;a&#39;, &#39;b&#39;, [&#39;Life&#39;, &#39;is&#39;]]]</code></pre><p>리스트 a 안에 [&#39;a&#39;, &#39;b&#39;, [&#39;Life&#39;, &#39;is&#39;]] 리스트가 포함되어 있고,
그 리스트 안에 다시 [&#39;Life&#39;, &#39;is&#39;] 리스트가 포함되어 있다. 삼중 구조의 리스트이다.
이 경우 &#39;Life&#39; 문자열만 끄집어내려면 다음과 같이 해야 한다.</p>
<pre><code>a[2][2][0]
&#39;Life&#39;
</code></pre><p>위 예는 리스트 a의 세 번째 요소인 리스트 [&#39;a&#39;, &#39;b&#39;, [&#39;Life&#39;, &#39;is&#39;]]에서 
세 번째 요소인 리스트 [&#39;Life&#39;, &#39;is&#39;]의 첫 번째 요소를 나타낸다.
이렇듯 리스트를 삼중으로 중첩해서 쓰면 혼란스럽기 때문에 자주 사용하지는 않지만 알아두는 것이 좋다.</p>
<p>또한</p>
<p><strong><em>Append,insert,del,reverse,index</em></strong> 함수 등 많은 함수들은 더 정확하게 
<a href="https://wikidocs.net/14">https://wikidocs.net/14</a>
여기서 공부해 보았는데, 슬라이싱까지 리스트 관련 함수들을 괜찮게 공부한 것 같다. 참고하면 좋을 듯.</p>
<h2 id="dictionary">Dictionary</h2>
<h3 id="만드는법">만드는법</h3>
<pre><code>Menu = {“짜장면” : 4000,”짬뽕”:3000}
</code></pre><p>짜장면 -&gt; key
4000 -&gt; value 는 한쌍! ,로 구분</p>
<h3 id="추가방법">추가방법</h3>
<p>Dictionary에 값을 추가하고 싶다면</p>
<pre><code>Menu [“냉면”] = 6000 
</code></pre><p>이런식으로 키와 벨류값을 = 으로 나타내주면 된다.</p>
<h3 id="출력방법">출력방법</h3>
<pre><code>print(menu[“냉면”]) </code></pre><p>처럼, 키값을 찾아주면 된다. 그러면 냉면에 해당하는 value값을 출력해준다.</p>
<pre><code>print(menu[&quot;짜장&quot;],menu[&quot;짬뽕&quot;])</code></pre><p>두개를 찾고싶다면 이런식으로.</p>
<h3 id="수정하기">수정하기</h3>
<pre><code>menu[“냉면”] = 8000</code></pre><p>이런식으로 바꿔주면 된다.</p>
<h3 id="삭제하기">삭제하기</h3>
<p>Del menu[“key”] 이런식으로 dictionary에선 키값으로 거의 모든 것을 해결하는 것 같다.</p>
<h2 id="조건문">조건문</h2>
<p>if가 필요없는 비교연산자부터 배워보았다.</p>
<pre><code>myGrade = 10
yourGrade = 15

print(myGrade == yourGrade)</code></pre><p>로 출력하면 False가 나오게 된다.
!=를 사용해서</p>
<pre><code>print(myGrade != yourGrade)</code></pre><p>로 쓴다면 True가 출력!</p>
<h3 id="if문">if문</h3>
<p>If 문법은 조금 특이하다.</p>
<pre><code>If 조건문:
Tap.   실행할 코드</code></pre><p>여기서 탭은 4칸을 띄어주거나 , 탭을 누르는 것을 말하고, if 뒤에 꼭 한칸을 띄어쓰기 해줘야한다.</p>
<pre><code>If 조건문:
    실행내용
Elif:
    실행내용
Else :
    실행내용</code></pre><h2 id="list와-if">list와 if</h2>
<p>아까 만든 food 리스트에, 내가원하는게 있는지 찾을려면</p>
<pre><code>If food in orders:
    실행내용
Else :
    실행내용</code></pre><p>Dictionary도 위 문법과 똑같다.
다만 출력 시 value 값을 원하면 menu[food] 이런식으로 입력.</p>
<h2 id="반복문">반복문</h2>
<h3 id="while">while</h3>
<p>while문의 로직은 이와 같다. 참이면 코드가 실행되고, 거짓이면 그 밑에있는 문을 실행하게 된다.</p>
<p><img src="https://images.velog.io/images/jinni_26/post/555a752e-c6c1-48ca-b653-4c24b04d21a3/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-02-24%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%207.55.04.png" alt=""></p>
<pre><code>While True:
     print(“True”)</code></pre><p>이런식으로 놓으면 계속 무한반복이 되게 된다.
무한반복에서 빠져나올려면 ctrl+c 버튼을 누르면 된다.</p>
<h2 id="탈출하기">탈출하기</h2>
<p>반복에서 탈출하려면 , break를 쓰곤 한다.
보통 if문이랑 같이 사용을 하게된다. 예를들어</p>
<pre><code>I=0
While True:
    print(i)
    i++


if i&gt;=3:
    print(“if문 동작”)
    break</code></pre><p>print(“반복문 종료!”)</p>
<p>이런식으로 코드를 짠다면 ,
0
1
2
if문 동작
반복문 종료! 가 되게 된다.
이유는 i에 2가 들어갔을때, 2를 출력해주고 i++로 인해 i가 3이되게 되는데,
이때 조건문에서 &#39;3과 같거나 크다&#39; 조건에 걸리기 때문에, 그 밑에 출력문을 실행해주고 브레이크에 걸려 while문을 탈출하게 되는 것이다.</p>
<h2 id="for문">for문</h2>
<p>문법은 </p>
<pre><code>For 변수 in 시퀀스:
    실행코드</code></pre><p>이다. 시퀀스도 많이 사용하지만</p>
<p>range를 보통 이용하는데</p>
<pre><code>For x in range(시작,종료,스텝)</code></pre><p>이런식으로 생각하면 된다. 시작과 스텝은 생략가능.</p>
<p>스텝은 -만큼 증가이기 때문에, 2를 넣어준다면, 2씩 증가해서 나오게 된다.
-2를 넣어준다면 2씩 줄어든다.</p>
<h2 id="코드-풀어보기">코드 풀어보기</h2>
<h3 id="떨어지는-숫자">떨어지는 숫자</h3>
<p>숫자를 입력받고, 1이 될때까지 1씩 감소하면서 모든 숫자를 출력해주는 프로그램.
바로 풀어보았다.</p>
<pre><code>x = int(input(&quot;숫자를 입력해주셈&quot;))

while x&gt;0:
print(x)
x = x-1</code></pre><p>아맞다. 파이썬에는 검색해보니 ++ —와 같은 증감연산자가 없다고한다…ㅠㅠ 
X— 로 했었는데 안되는 바람에 찾아보았다… 잘 찾아본 것 같다!</p>
<h2 id="줄바꿔-출력하기">줄바꿔 출력하기</h2>
<p>다음 문제는 숫자를 입력받았을때, 한줄 씩 띄어쓰며 출력해주고,
10단위에서 줄바꿈을 해주는 문제이다.</p>
<p>풀이 ——</p>
<pre><code>x = int(input(&quot;숫자를 입력해주세요 : &quot;))

for i in range(1,x+1) :
print(i,end=&quot; &quot;)
if (i%10 == 0):
print(&quot;&quot;)</code></pre><h2 id="랜덤로또숫자-생성기">랜덤로또숫자 생성기</h2>
<p>파이썬 랜덤모듈이 기억이 안나서 찾아보았다.</p>
<p>우선 import random은 필수.</p>
<p><a href="https://www.daleseo.com/python-random/">https://www.daleseo.com/python-random/</a></p>
<p>거의모든 랜덤모듈 사용법이 나와있다. 참고!</p>
<p>.randint, .randrange(시작,끝,스텝),.choice를 많이 쓸 것 같다.</p>
<p>본론으로 들어가서, 몇개의 로또를 살건지 입력받고,
랜덤으로 1부터 45까지의 숫자중 6개를 뽑아준다.
그리고 로또의 갯수만큼 반복시켜서 출력시켜주는데, 로또번호는 오름차순으로 정리해서 출력해주는 프로그램이다.</p>
<p>풀이 —</p>
<pre><code>import random

lotto = int(input(&quot;몇 개 사실래요?&quot;))

for i in range(1,lotto+1):
lotto_num = random.sample(range(1,46),6)
lotto_num.sort()
print(lotto_num)</code></pre><p>오늘의 TIL 끝! 
비록 진짜 간단한 알고리즘 들이긴 하지만 ( 알고리즘 이라고 하기도 뭐한가..? ) 강의를 들으며 간만에 로직을 생각하고 풀수있는 강의다 보니까 시간가는 줄 모르고 기본부터 공부했던 것 같다. 혼자 신나서 다른 동기들도 잘 풀 수 있도록, 나 또한 다른 동기들의 코드를 보며 배울 수 있도록 Q&amp;A 답변을 엄청 열심히도 달았다.. 뭔가 근데 이 활동을 하면서 좀더 기본을 다잡고 문법을 많이 찾아보다 보니까 실력이 많이 는 기분이 들었다. 강의해주신 코드라이언 님께 감사드리며 
내일이면 비대면 강의는 끝! 마지막까지 힘내자 :) 파이팅</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[일단 만들어보는 javascript]]></title>
            <link>https://velog.io/@jinni_26/%EB%A9%8B%EC%82%AC-%EC%9D%BC%EB%8B%A8-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EB%8A%94-javascript</link>
            <guid>https://velog.io/@jinni_26/%EB%A9%8B%EC%82%AC-%EC%9D%BC%EB%8B%A8-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EB%8A%94-javascript</guid>
            <pubDate>Wed, 23 Feb 2022 14:51:17 GMT</pubDate>
            <description><![CDATA[<h1 id="로또번호-추첨기">로또번호 추첨기</h1>
<p>로또 번호 추첨기를 만들어 볼 건데, 가장 기본이되는 javascript의 문법을 알아보자.</p>
<h2 id="자료형">자료형</h2>
<p>문자열 String
숫자형 자료형 int float
불 자료형 bool - true false</p>
<p>확인하는 방법
Type of ‘변수’</p>
<p>Var name = ‘엄준식’;
document.write(typeof name);</p>
<h2 id="배열">배열</h2>
<p>하나의 변수에 여러개를 넣을 수 있어서 편함.</p>
<pre><code>Var lotto = [1,2,3,4,5,6];
</code></pre><p>여기서 1은 lotto[0]. 즉 0번째이다.
첫번째라해서 인덱스값이 1이 아님. 0임!</p>
<p>.push -&gt; 마지막에 값 추가 가능
lotto.push(7); 이런식으로 끝에 7 추가 가능</p>
<p>Var lotto = []; // 빈 배열을 만들어주고 여기에 push를 통해 랜덤숫자 넣어줌</p>
<pre><code>lotto.push(parseInt(Math.random() *45 +1));
</code></pre><h2 id="반복문">반복문</h2>
<p>여기서 6개의 숫자를 넣어줘야 하니까</p>
<pre><code>For ( var i = 0; I&lt;6;i++) {
    lotto.push(parseInt(Math.random() *45 +1));
}</code></pre><p>반복문의 문법. 첫번째 var i = 0 이 시작. 
0부터 시작을 해서 ,중간에 i&lt;6 즉 5까지 반복을해준다.
i++은 i가 1씩 증가하면서 반복한다는 뜻이다.</p>
<h2 id="조건문-중복제거">조건문 중복제거</h2>
<p>로또번호는 중복이 없기때문에, 같은 값이 나오는 경우를 제거해 줘야함.</p>
<p>조건 추가.
만약 중복이 아니라면 -&gt; push
만약 중복이면? -&gt; 푸쉬를 안해주고 다시돌림</p>
<p>조건문 기본구조</p>
<pre><code>if(조건) {
    참일경우 실행
}</code></pre><p>어떻게 구분할 것인가. .indexOf(값)
값이 있으면 위치 나타내주고, 없을때 -1이 나타남.
그렇다면 인덱스오브를 실행했을때, -1이 나오면 중복되는 숫자가 없다는 뜻이니까 실행.</p>
<pre><code>Var num = parseInt(Math.random() *45 +1 );
If (lotto.indexOf(num) == -1) {
    lotto.push(num);
}
</code></pre><p>이렇게하면 안댐 반복문 6번돌고 끝이기때문에.</p>
<p>.length는 배열의 길이를 출력해주는 것인데,</p>
<p>for문을 지우고,
While (lotto.length &lt; 6) 
이 문을 입력하면, 6개가 들어가면 끝.</p>
<h2 id="정렬">정렬</h2>
<pre><code>Lotto.sort((a,b) =&gt; a-b);</code></pre><p>이러면 오름차순 정렬</p>
<p>끝</p>
<h1 id="dom">DOM</h1>
<p>( Document Object Model )</p>
<p>웹 화면을 구성하는 html코드를 쉽게 접근하게 해주는 모델</p>
<pre><code>&lt;h1&gt;안녕&lt;/h1&gt;</code></pre><p>안에 있는 안녕을 하이로 바꿔준다거나,
클래스를 추가해준다거나, p태그를 추가해준다거나, 즉 화면을 구성하는 모든것에 접근할 수 있고, 수정할 수 있는 것을 돔이라고 함</p>
<h1 id="자소서-숫자-세기-프로그램">자소서 숫자 세기 프로그램</h1>
<p>이건 js강의이기 때문에 이미 페이지는 만들어져 있어서, 
만들어져 있는 구성품의 id를 가져오는 방식으로 진행이 되었다.</p>
<p>html문서 일부 중 문자를 쓰는 공간과, 밑에 글자수를 나타내주는 코드를 가져왔다.</p>
<pre><code>&lt;textarea class=&quot;form-control&quot; rows=&quot;3&quot; id=&quot;jasoseol&quot; onkeydown=&quot;counter();&quot;&gt;저는 인성 문제가 없습니다.&lt;/textarea&gt;
&lt;span id=&quot;count&quot;&gt;(0/200)&lt;/span&gt;</code></pre><p>여기서 id값을 추출해주고, 글자수를 세는 counter 이라는 함수를 만들어보자.</p>
<pre><code>&lt;script&gt;
function counter() {
var content = document.getElementById(&#39;jasoseol&#39;).value;

document.getElementById(&#39;count&#39;).innerHTML = &#39;(&#39; + content.length + &#39;/200)&#39;;
}
counter();
&lt;/script&gt;</code></pre><p>위 함수로는 그러나 200자가 넘어도 계속계속 세어주게 된다.
때문에 조건문을 추가하여 200자가 넘으면 짤라주는 코드를 작성해보자.</p>
<pre><code>if (content.length &gt; 200) {
content = content.substring(0,200);
document.getElementById(&#39;jasoseol&#39;).value = content;
}
</code></pre><h1 id="미니스타크래프트-게임-만들기">미니스타크래프트 게임 만들기</h1>
<p>HP가 정해져있고, 공격할때마다 HP가 1씩 깎이고, 0에 다다르면 벙커를 파괴하는 게임이다.
이번에는 jquery를 이용해서 하는데, jquery는 다른 문법으로 조금 더 간단하게
id를 불러오거나, 등등 많은 코딩을 할 수 있도록 도와준다.</p>
<p>예를 들어 </p>
<pre><code>document.getElementById(‘content’).value 
</code></pre><p>를 제이쿼리를 이용하게되면</p>
<pre><code>$(‘#content’).val(); 
</code></pre><p>이 문장하나면 똑같은 기능을 수행한다.</p>
<p>제이쿼리의 장점으로는 </p>
<ol>
<li>간결한 문법</li>
<li>편리한 API</li>
<li>크로스 브라우징</li>
</ol>
<p>모든 브라우저에서 동일한 동작을 수행할 수 있도록 해주는 크로스 브라우징 기능이 신기했다.</p>
<h2 id="사용법">사용법</h2>
<p><a href="https://code.jquery.com"><em>code.jquery.com</em></a> 에 들어가서
최신버전 minified를 누르고, 코드를 복사한 후 내 html 코드 Body 부분에 붙혀준다.</p>
<p>jquery 기본문법</p>
<p><em>*<em>$(선택자).행위;
*</em></em>
여기서 선택자는 css문법에서 가져오는 문법이랑 비슷하다. ‘ 따옴표 안쪽에 #뒤에 이름을 적어주면 된다.</p>
<h2 id="이벤트">이벤트</h2>
<p>onclick과 같은 js 문법을 다르게 실행 하는 문법은 다음과 같다.</p>
<pre><code>$(‘#click’).click(hello);
</code></pre><h2 id="침-나타내기">침 나타내기</h2>
<p>Fading 함수들.</p>
<p>Query 홈페이지 
<a href="https://api.jquery.com/">https://api.jquery.com/</a></p>
<p>에서 API Documentation 에 들어가게 되면, 모든 사용방법이 나와있으니, 여길 참고하면 좋을 것 같다.</p>
<p>Fadein 나타나게하는 함수는
<strong>.fadein(duration, complete)</strong> 라고한다.</p>
<h2 id="기념일-세기-만들기">기념일 세기 만들기</h2>
<p>객체</p>
<p>이사람은
이름은 조코딩이고
나이는 20살이다</p>
<p>이런 -는 -다 가 있을때, 코드로 표현해주는 것이다.
이걸 표현해주자면</p>
<pre><code>Var person {
    name : ‘geocoding’,
    age: 20
}
</code></pre><p>가 된다. 이런식으로 앞에 name과 age는 key라고 한다. 
뒤에는 값이 되고, 숫자뿐만 아니라 배열, 또다른 객체가 들어갈 수도 있다.
이떈 메소드라고 부른다.</p>
<p>호출할때는 객체.키;
Ex ) person.name;
함수일경우
person.hello() 
즉
document.write(); 과 같은 것도 객체였던 것이다. </p>
<pre><code>Var document {
    write : function(){출력해주는거}
    getElementById : function(){id따서 가져오는거}
}</code></pre><p>이런식으로 등등 많은 것들이 라이브러리에 엄청나게 선언되어 있겠지..? 하는 생각이 들었다. 대단한 사람들..</p>
<h2 id="date-객체-이용하기">Date() 객체 이용하기</h2>
<ul>
<li>선언방법</li>
</ul>
<p>Var 변수이름 = new Date();</p>
<h2 id="이걸-이용해-날짜-계산기-만들기-d-day">이걸 이용해 날짜 계산기 만들기 (d-day)</h2>
<p>날짜를 6월 30일이라고 가정하고 지금까지 얼마나 지났는지 알아보자.
현재시간 - 예전시간 을 한다면 얼마나 지났는지 알 수 있다.
그러나 디데이는 사귄날부터 1일이고, getTime으로 얻은건 ms이기 때문에 1000을 곱해주고, 분,초 60,60 24시간 하루를 곱해준 걸로 나눠줘야 한다. 그 후 1을 더해야 정확한 D-day가 설정 가능하다.
그리고 마지막으로 Math.floor을 써서 소숫점을 버려줘야 정수로 나온다. 이때 parseInt가 생각났다.</p>
<p>올림 내림 반올림이 궁금하여 찾아봤는데</p>
<pre><code>Math.round(); - 반올림
Math.floor(); - 내림
Math.ceil(); - 올림</code></pre><p>이라고 한다. 어쨌든 날짜 구하기를 코딩해보면</p>
<pre><code>var now = new Date();
var start = new Date(&#39;2020-06-30&#39;);

var timeDiff = now.getTime() - start.getTime();
var day = Math.floor(timeDiff / (1000 * 60 * 60 * 24) + 1);
$(&#39;#love&#39;).text(day + &#39;일째&#39;);
console.log(day);
</code></pre><p>이렇게 된다.</p>
<p>이번엔 기념일까지 얼마나 남았는지 계산해보자.</p>
<p>계산법은 </p>
<p>기념일 - 오늘 을 뺴주면 된다.</p>
<pre><code>var valentine = new Date(&#39;2021-02-14&#39;);
var timeDiff2 = valentine.getTime() - now.getTime();
var day2 = Math.floor(timeDiff2 / (1000 * 60 * 60 * 24) + 1);
$(&#39;#valentine&#39;).text(day2 + &#39;일 남음&#39;);</code></pre><p>이 두개만 잘 이용해도 모든 기념일 계산기를 만들 수 있다.</p>
<h2 id="github-push하기">Github push하기</h2>
<pre><code>// 시작하기: git init
// 유저 이름 설정: git config --global user.name &quot;codelion-jocoding&quot;
// 이메일 등록: git config --global user.email #####@gmail.com
// 파일 추가: git add .
// 메세지 입력: git commit -m &quot;first commit&quot;
// 보낼 곳 등록: git remote add origin https://github.com/codelion-jocoding/myrepo.git
// 보낼 곳으로 코드 전송: git push origin master</code></pre><p>터미널에서 이것만 입력해줘도 완벽가능!</p>
<p>뭔가 오늘이 제일 강의도 많고 만들것도 많아서 엄청 유익했던 것 같다.
Javascript 와 jquery를 이용해 보며 비록 간단한 기능들이였지만 
많은 것을 체험해 볼 수 있었던 강의였다! 감사합니다 조코딩님 :)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[일단 만드는 Python]]></title>
            <link>https://velog.io/@jinni_26/%EB%A9%8B%EC%82%AC-%EC%8A%A4%ED%83%80%ED%8A%B8%EC%97%85%EC%8A%A4%EC%BF%A8-%EC%9D%BC%EB%8B%A8-%EB%A7%8C%EB%93%9C%EB%8A%94-Python</link>
            <guid>https://velog.io/@jinni_26/%EB%A9%8B%EC%82%AC-%EC%8A%A4%ED%83%80%ED%8A%B8%EC%97%85%EC%8A%A4%EC%BF%A8-%EC%9D%BC%EB%8B%A8-%EB%A7%8C%EB%93%9C%EB%8A%94-Python</guid>
            <pubDate>Tue, 22 Feb 2022 14:31:08 GMT</pubDate>
            <description><![CDATA[<p>멋쟁이사자처럼 스타트업 스쿨2기 이틀차이다. 
오늘은 Python 강의를 듣는 날이다.
Velog를 존댓말로 쓰다보니 뭔가 TIL이랑 안맞는 것 같기도 하고,, 내가 보기 편하도록 편한 어투로 쓰기로 했다.</p>
<h2 id="러시아-인형">러시아 인형</h2>
<p>코딩을 러시아 인형에 비교를 많이 하셨다. 마트로시카? 라는 인형인데 인형속에 인형이 있고, 인형이 또 있고 감싸주는 인형같은 것이다.</p>
<p>가장 기본이 되는 코드를 안에 넣어줘서 하나의 작은 인형을 만들어 주고,  &quot;()&quot;과 같은 인형으로 그 인형을 감싸주는 인형을 만든다. 또 그 위에 함수와 같은 인형으로 감싸주고, 이런식으로 코드를 이해하기 쉽게 설명 해 주셨다.</p>
<h2 id="반복문">반복문</h2>
<p>예를들어 음식들 중 랜덤으로 하나 뽑아주는 프로그램을 작동시켜,
30번 음식을 뽑고싶다. 이때 가능한 방법은 여러가지가 있는데</p>
<pre><code>printf(random.choice([&quot;된장찌개&quot;,&quot;김치찌개&quot;,&quot;김치찜&quot;,&quot;냉면&quot;])
printf(random.choice([&quot;된장찌개&quot;,&quot;김치찌개&quot;,&quot;김치찜&quot;,&quot;냉면&quot;])
printf(random.choice([&quot;된장찌개&quot;,&quot;김치찌개&quot;,&quot;김치찜&quot;,&quot;냉면&quot;])
printf(random.choice([&quot;된장찌개&quot;,&quot;김치찌개&quot;,&quot;김치찜&quot;,&quot;냉면&quot;])
printf(random.choice([&quot;된장찌개&quot;,&quot;김치찌개&quot;,&quot;김치찜&quot;,&quot;냉면&quot;])
printf(random.choice([&quot;된장찌개&quot;,&quot;김치찌개&quot;,&quot;김치찜&quot;,&quot;냉면&quot;])
</code></pre><p>가장 원초적인 방법을 이용하여 이런 코드를 이용하여 30번 반복해 줄 수 있는데, 이 방법은 굉장히 나쁜 방법이다. 요즘은 이런 약어가 있다고 한다.</p>
<p>*<em>DRY
*</em><em>Don&#39;t Repeat Yourself</em></p>
<p>혼자서 반복하지 말아라. 즉 무언가를 시켜서 반복시켜라 라는 뜻인데, 이를 어떻게 간단하게 반복시킬지 알아보도록 하자.</p>
<p>대표 문법으로</p>
<pre><code>for i in range(30):
    print(random.choice([&quot;된장찌개&quot;,--]))</code></pre><p>이런식으로 반복문을 돌리게 된다면 0부터 29까지 반복을 하며 총 30번 반복을 해서 출력을 해주는 것을 볼 수 있다.</p>
<h3 id="무한반복-시키기">무한반복 시키기</h3>
<p>무한반복은 쉽다.</p>
<pre><code>while True:</code></pre><p>이런식으로 while에 트루값을 주면 무한대로 반복하게 된다.
이때 조건문을 대입해 break;를 이용하여 반복을 멈출 수 있다.</p>
<h2 id="list와-dictionary">List와 Dictionary</h2>
<p>**</p>
<h3 id="list와-차이점">List와 차이점**</h3>
<p>Dictionary는 <em><strong>-는 : -다.</strong></em>
List는 <em><strong>그냥 진짜 나열!</strong></em></p>
<p>Dictionary는 <em><strong>{} 중괄호</strong></em>
List는 <strong><em>[]대괄호!</em></strong></p>
<p>코드로 알아봅시다.</p>
<pre><code>information = {&quot;고향&quot;:&quot;수원&quot;, &quot;취미&quot;:&quot;영화관람&quot;,&quot;좋아하는 음식&quot;:&quot;국수&quot;}
foods = [&quot;된장찌개&quot;, &quot;피자&quot;, &quot;제육볶음&quot;]</code></pre><p>이와같이 dictionary는 위에서 설명한 것과 같이 key값과 value가 쌍으로 존재! 
List는 음식들과 같이 쭉 나열해 주는 용도임을 알 수 있었다.</p>
<h2 id="list와-set">List와 SET</h2>
<p>리스트와 집합의 차이를 알아보자.</p>
<p>리스트는 기본적으로 순서가 있다.
List1 = [&#39;지니&#39;,&#39;램프,&#39;요정&#39;]
이라고 한다면, 0번째가 지니 1번째가 램프, 요정은 2번째이다.
즉 순서가 명확하다.</p>
<p>그러나 SET은 순서가 있지 않다. 집합이기 때문에 그저 집합 안에 원소로 존재하며 순서는 의미가 없다.
집합의 특징은 중복이 없다는 것이다.</p>
<p>그렇다면 리스트를 집합으로 바꾸는 방법에 대해 알아보자.</p>
<pre><code>foods = [&quot;된장찌개&quot;,&quot;김치찌개&quot;,&quot;고등어조림&quot;]</code></pre><p>과 같은 foods라는 리스트가 있다.</p>
<p>그렇다면 간단하게 </p>
<pre><code>set_foods = set(foods)</code></pre><p>이런식으로 foods를 set이라는 러시아인형으로 감싸주어 집합으로 변환시켜주고,
set_foods에 저장을 해주는 것이다.</p>
<p>이후 위에 배운 기초 문법들과 append 와 del을 이용하여 음식들을 추가하고, 삭제하면서 마지막에 랜덤으로 음식을 골라주는 프로그램을 작성해 보았다.</p>
<pre><code>lunch = [&quot;된장찌개&quot;, &quot;피자&quot;, &quot;제육볶음&quot;, &quot;짜장면&quot;]

while True:
    print(lunch)
    item = input(&quot;음식을 추가 해주세요 : &quot;)
    if(item == &quot;q&quot;):
        break
    else:
        lunch.append(item)
print(lunch)</code></pre><p>이런식으로 무한반복 시켜놓고 음식을 추가하고, q를 입력하면 break를 건다.
일부를 발췌했다.</p>
<h1 id="이상형이-어떻게-되나요-코딩">이상형이 어떻게 되나요? 코딩</h1>
<p><img src="https://images.velog.io/images/jinni_26/post/de8374a4-070e-44d6-806f-dfd79b5c352b/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-02-22%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%208.15.52.png" alt=""></p>
<p>이런식으로 내가 원하는 만큼 질문을 입력해 주고, 답변을 입력하면
질문과 답변이 입력한 순서대로 쫘라락 출력이 되는 프로그램이다.</p>
<p><img src="https://images.velog.io/images/jinni_26/post/b31470bd-8614-490c-b041-ae9ffbf25fb6/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-02-22%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%208.16.46.png" alt=""></p>
<h3 id="dictionary를-이용한-코드풀이">Dictionary를 이용한 코드풀이</h3>
<pre><code>total_dictionary = {}

while True:
    question = input(&quot;질문을 입력해주세요 : &quot;)
    if question == &quot;q&quot;:
        break
    else:
        total_dictionary[question] = &quot;&quot;

for i in total_dictionary:
    print(i)
    answer = input(&quot;답변을 입력해주세요 : &quot;)
    total_dictionary[i] = answer
print(total_dictionary)</code></pre><h3 id="list를-이용한-코드풀이">List를 이용한 코드풀이</h3>
<pre><code>total_list = []
while True:
    question = input(&quot;질문을 입력해주세요 : &quot;)
    if question == &quot;q&quot;:
        break
    else:
        total_list.append({&quot;질문&quot; : question, &quot;답변&quot; : &quot;&quot;})


for i in total_list:
    print(i[&quot;질문&quot;])
    answer = input(&quot;답변을 입력해주세요 : &quot;)
    i[&quot;답변&quot;] = answer
print(total_list)</code></pre><p>단일 방법이 아니라, dictionary를 이용해서도 비슷하게 먼저 풀어보고,
List를 이용해서 제대로 풀어내는 과정이 참신하면서도 머리에 쏙쏙 박혀서 좋았던 것 같다. 다만 코드리뷰 전 전체코드를 작성할 때 문제를 보여준다거나 하면 내가 처음부터 다시 작성하기 편할 것 같다. html/css편도 마찬가지.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTML/CSS 를 이용한 포트폴리오 만들기]]></title>
            <link>https://velog.io/@jinni_26/HTMLCSS-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@jinni_26/HTMLCSS-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Mon, 21 Feb 2022 10:05:37 GMT</pubDate>
            <description><![CDATA[<h2 id="멋쟁이사자처럼-스타트업-스쿨-til">멋쟁이사자처럼 스타트업 스쿨 TIL</h2>
<p>안녕하세요! 운이 좋게도 멋쟁이 사자처럼 스타트업 스쿨2기에 합격하게 되어 
교육과정을 시작하게 되었습니다 :) </p>
<p>첫 주차에는 하루마다 다른 강의들을 수강하며 전반적인 언어들에 대하여 학습을 진행하게 됩니다.</p>
<p>오늘 수강한 강의는 <em><strong>&quot;일단 시작하는 HTML/CSS&quot;</strong></em> 강의이며, 이두희 대표님께서 직접 강의를 하십니다.</p>
<p>저는 우선 컴퓨터공학을 전공했고, 최근에 기초를 다잡고자 HTML/CSS에 대해 공부를 했었는데,</p>
<p>이두희 대표님의 강의를 들어보면서 다시 한번 기초를 다잡자! 하는 마음으로 강의를 수강했습니다.</p>
<p>우선 오늘 수강하는 내용은 <em><strong>포트폴리오 만들기</strong></em> 입니다.</p>
<p>이두희 대표님은 HTML/CSS를 문서에 비교하셨습니다.</p>
<p>사실 HTML은 코딩이야! 라는 말에 전공자들은 격하게 반응을 하는데요, </p>
<p>이에 이두희 대표님은 <em><strong>&quot; HTML을 코딩을 한다기보단 문서를 만든다고 생각해라!&quot;</strong></em> 라고 하셨습니다.</p>
<p>또한 기초 문법을 <strong>가방</strong>에 비교를 해주셨는데요, </p>
<p>가령 &lt;가방1&gt; 내용물 입니다 &lt;/가방1&gt; 이런코드가 있다고 생각을 하면,</p>
<p>&lt;가방2&gt; &lt;가방1&gt; 내용물 입니다. &lt;/가방1&gt;&lt;/가방2&gt;
는 큰 가방2 속에 가방1이 들어가 있는 느낌을 연상하면 됩니다.</p>
<h2 id="head와-body">HEAD와 BODY</h2>
<p>head는 html의 큰틀 중 하나인데요, </p>
<p>head는 수화물 가방에 비유할 수 있습니다.</p>
<p>공항에 가서 수화물을 붙히게 되면 캐리어에 태그를 부착해주죠? </p>
<p>그 태그 속에는 목적지가 어디인지, 몇시에 출발하는지 등등 많은 정보들이 나와있습니다. </p>
<p>이처럼 head도 똑같으며, 안에있는 더 세부적인 내용들은 body에 들어가게 된다고 생각하면 될 것 같습니다.</p>
<p>제가 생각하는 head와 body는 </p>
<p>저희의 몸은 HEAD가 되고, 눈,코,입,다리와 같은 것들은 BODY가 된다고 생각합니다.</p>
<h2 id="google-fonts-사용법">Google fonts 사용법</h2>
<p>웹을 만들면서 폰트는 사실 제일 중요하다고 해도 무방한 내용입니다.</p>
<p>강의 중 구글 폰트 사용법이 나오길래 공유해 봅니다.</p>
<p>*구글폰트 사용법</p>
<p>우선 구글폰트에 들어가서 원하는 폰트의 url를 복사합니다.
<img src="https://images.velog.io/images/jinni_26/post/63d15079-0a60-4cb2-8977-238f1d015d5b/image.png" alt=""></p>
<p>여기서 저 오른쪽 import를 누르시게되면 스타일태그와 함께 코드가 나옵니다! 복사만 해주시면 끝나기 때문에 참 쉽습니다.</p>
<pre><code>@import url(&#39;구글 폰트에서 복사한 주소 url&#39;);

* {
    font-family : &#39;Montserrat&#39;; /*다운받은 폰트*/
}</code></pre><p>이런식으로 *태그와 함께 폰트를 지정해주면 모든 글씨체에 다운받은 폰트가 적용이 되는 것을 보실 수 있습니다.</p>
<h2 id="왼쪽-정렬-오른쪽-정렬--float">왼쪽 정렬, 오른쪽 정렬 : float</h2>
<p>가장 기초이자 한글에서는 사진을 왼쪽에 넣고, 글을 오른쪽에 넣고 하는 것과 같은 정렬방법 입니다.</p>
<p><img src="https://images.velog.io/images/jinni_26/post/3b9d8c15-ea76-487e-9076-ce44b1aab587/image.png" alt=""></p>
<p>이런식으로 Awesome Programming Company는 왼쪽에 있고, 같은줄인데 2020-Now는 오른쪽에 있죠? </p>
<p>이두희 대표님은 이걸 크게 섹션을 나눠놓고, 클래스만 바꿔주며 float 정렬을 함으로써 손쉽게 해결하셨습니다.</p>
<p>HTML 내용</p>
<pre><code>&lt; div class=&quot;float wrap&quot; &gt;
    &lt;p class=&quot;title-text&quot;&gt;UI/UX Designer &lt;/p&gt;
    &lt;p class=&quot;year-text&quot;&gt;2011 - 2015 &lt;/p&gt;
&lt;/div&gt;</code></pre><p>이런식으로 하나의 div 안에 타이틀과 년도 텍스트를 p태그로 설정해놓고, 밑에 css에서 float : left와 float: right 속성값을 주게 됩니다.</p>
<p>css내용</p>
<pre><code>.float wrap {
 overflow: hidden;
margin-bottom: 4px;
}

.title-text {
float : left
}

.year-text {
float : right 
}

&lt;p&gt; 내용 &lt;/p&gt;
&lt;p&gt; 내용2 &lt;/p&gt;</code></pre><h2 id="이미지에-하이퍼링크-추가하기">이미지에 하이퍼링크 추가하기</h2>
<p><img src="https://images.velog.io/images/jinni_26/post/e98e90a5-5b24-440b-8ddd-9070fa019e06/image.png" alt=""></p>
<p>보통 이런 아이콘을 클릭하면 바로 구글로 넘어가는 기능을 추가할 일이 굉장히 많은데요, 바로 알아보도록 하겠습니다</p>
<pre><code>&lt;a href=&quot;내 sns 주소&quot;&gt;
&lt; img class=&quot;sns-img&quot; src=&quot;images/facebook.png&quot;&gt;
&lt;/a&gt;
.sns-img {
    width : 12px;
    height : 12px;
}
</code></pre><p>이와같이 a태그 안에 img를 주고, 클래스로 가로세로만 작게 해주면 완성! 참 쉽죠?</p>
<p>마지막은 제가 요즘 애용하는 emmet 사용법에 대해 설명 드리고 끝내도록 하겠습니다.</p>
<h2 id="emmet">Emmet</h2>
<p>강력한 자동완성 기능 등으로 HTML 작성 속도를 크게 향상시켜주는 플러그인입니다.</p>
<p>원하는 태그를 입력후 Tap버튼을 누르면 알아서 자동완성을 해주는데요, 예를들어 설명드리겠습니다.</p>
<pre><code>div.hihi</code></pre><p>라는 코드를 쓰고 tap을 누르게 된다면</p>
<pre><code>&lt;div class=&quot;hihi&gt;&lt;/div&gt;</code></pre><p>라는 코드가 완성이 됩니다. 참 쉽죠?</p>
<p>이 외에도</p>
<pre><code>div*4</code></pre><p>를 하면 div가 같은 단계에 4개가 완성이 됩니다.</p>
<p>.다음에 들어가는건 클래스명 ! *는 갯수 그리고 +는 추가생성으로 알아두시면 정말 편하게 코딩하실 수 있습니다.</p>
<p><a href="https://nachwon.github.io/How_to_use_emmet/">https://nachwon.github.io/How_to_use_emmet/</a></p>
<p>어떤분이 잘 정리해 놓으신 문서 공유드립니다 :)</p>
<p>참 여러가지 문법들을 주저리주저리 써놓은 것 같은데요, 다음번에는 좀 더 깔끔하게 정리된 글로 찾아뵙도록 하겠습니다. 감사합니다.</p>
]]></description>
        </item>
    </channel>
</rss>