<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>우당탕탕 도비의 코딩로그</title>
    <link>https://dobbie-coding.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 7 Jun 2026 12:15:37 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>dobbie</managingEditor>
    <image>
      <title>우당탕탕 도비의 코딩로그</title>
      <url>https://tistory1.daumcdn.net/tistory/4355678/attach/c6da5a03443a42f680de7aed33d41320</url>
      <link>https://dobbie-coding.tistory.com</link>
    </image>
    <item>
      <title>[n8n] 비밀번호 까먹었을때 해결 방법! How to reset password on n8n</title>
      <link>https://dobbie-coding.tistory.com/32</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;docker로 n8n을 셀프 호스팅하면서 구동하고 있을때 계정 비밀번호를 잊은 경우에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n8n에서 바로 비밀번호를 재설정할 수가 없다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해결하기 위해서 블로그를 찾아보다가 user 테이블을 아예 지워버렸는데 user 테이블을 지워버리면 흔히 쓰는 reset 방법을 바로 사용할 수가 없다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;전체 DB 재시드&lt;/b&gt;를 할 수 밖에 없었는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기존의 workflow와 credential을 유지&lt;/b&gt;하면서 진행하는 방법을 찾았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) 우선, workflow와 credential을 백업하기&lt;/h4&gt;
&lt;pre id=&quot;code_1757986811922&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CTR=&amp;lt;n8n을 실행시키고 있는 컨테이너 넘버&amp;gt;

docker exec -u node -it $CTR sh -lc '
  mkdir -p /home/node/backup &amp;amp;&amp;amp;
  n8n export:workflow --backup --output=/home/node/backup/workflows &amp;amp;&amp;amp;
  n8n export:credentials --backup --output=/home/node/backup/credentials
'
docker cp $CTR:/home/node/backup ./n8n-backup&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;2) 컨테이너 중지&lt;/h4&gt;
&lt;pre id=&quot;code_1757986848340&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker stop $CTR&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;3) DB 파일 삭제(재시드용)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 우선 경로 확인 후,&lt;/p&gt;
&lt;pre id=&quot;code_1757986876489&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker inspect $CTR --format '{{range .Mounts}}{{.Source}} -&amp;gt; {{.Destination}}{{println}}{{end}}'
# .../your/path -&amp;gt; /home/node/.n8n  또는  &amp;lt;named-volume&amp;gt; -&amp;gt; /home/node/.n8n&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- DB file 삭제&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;pre id=&quot;code_1757986894140&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rm -f &amp;lt;호스트경로&amp;gt;/database.sqlite*&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;4)&lt;span&gt; 재가동 &amp;rarr; 사용자관리 리셋 &amp;rarr; 재시작&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1757987023843&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker start $CTR
docker exec -u node -it $CTR sh -lc 'n8n user-management:reset'
docker restart $CTR   # DB 조작 후엔 재시작이 필요함&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;4)&lt;span&gt;&lt;span&gt; Setup에서 오너 생성 후 백업 복원&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1757987064222&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 워크플로우
docker exec -u node -it $CTR sh -lc 'n8n import:workflow --separate --input=/home/node/backup/workflows'

# 크리덴셜
docker exec -u node -it $CTR sh -lc 'n8n import:credentials --separate --input=/home/node/backup/credentials'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 workflow와&amp;nbsp; credential을 백업 한후 디비를 삭제하고 사용자 관리를 reset 후 백업 복원을 진행하였더니&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;workflow와 credential을 모두 유지한 채로 계정을 다시 생성할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;혹시나 비밀번호 재설정을 위해 이것저것 시도해보다가 user 테이블을 지워버린 상황에는 이 방법을 따라하시면 workflow 손실 없이 새 계정 추가를 하실 수 있을 거에요 &lt;/b&gt;&lt;/p&gt;</description>
      <category>ERROR_SOLUTION/n8n</category>
      <category>n8n</category>
      <category>n8n password</category>
      <category>n8n user table</category>
      <category>n8n 비밀번호</category>
      <category>n8n계정</category>
      <category>비밀번호</category>
      <author>dobbie</author>
      <guid isPermaLink="true">https://dobbie-coding.tistory.com/32</guid>
      <comments>https://dobbie-coding.tistory.com/32#entry32comment</comments>
      <pubDate>Tue, 16 Sep 2025 10:48:21 +0900</pubDate>
    </item>
    <item>
      <title>[PTE] PTE 첫트 오버롤 80 후기!</title>
      <link>https://dobbie-coding.tistory.com/31</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;졸업비자 신청하는 기간이 다가와서 처음으로 PTE 준비를 시작하게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5년 전쯤에 IELTS를 봤었는데 그때 점수가 오버롤 6.5였었고 PTE는 처음이고 너무 오랜만의 영어시험이라 준비를 어떻게 해야할지 막막 했었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;듣기로는 PTE는 컴퓨터가 채점하는거라 IELTS보다 점수도 잘나오고 쉽다고 알고 있었는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;막상 PTE 준비를 시작하려고 보니 과목도 너무 다양하고 생각보다 문제가 너무 어려웠다 &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(특히, Repeat Sentecne 과목에서 나오는 문장들이 너무 길어서 한번만 듣고 따라하기가 생각보다 너무너무 어려웠다 ㅠㅠ)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험은 종로 PTE 프로페셔널 센터(?)에서 2025년 6월에 봤고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결과는 오버롤 80!&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-06-30 at 12.16.09 PM.png&quot; data-origin-width=&quot;2430&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bncJCL/btsOXICueVx/9EYmHVVFDXGknTDWWEl0XK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bncJCL/btsOXICueVx/9EYmHVVFDXGknTDWWEl0XK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bncJCL/btsOXICueVx/9EYmHVVFDXGknTDWWEl0XK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbncJCL%2FbtsOXICueVx%2F9EYmHVVFDXGknTDWWEl0XK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2430&quot; height=&quot;512&quot; data-filename=&quot;Screenshot 2025-06-30 at 12.16.09 PM.png&quot; data-origin-width=&quot;2430&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IELTS로 환산했을때는 오버롤 8.0에서 8.5 정도의 점수이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호주 졸업비자는 오버롤 57 이 나오면 되는걸로 알고 있는데 생각한 점수보다 잘 나와서 기분이 좋았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내 기준에서는 APEuni의 목테스트들 보다 문제에 나오는 문장들이 쉬웠다. 그래서 점수에 대한 기대도 좀 했던 것 같다  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 PTE를 준비할 때 도움이되었던 자료들이다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;☑️&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;PTE를 준비할 때 도움이되었던 자료들&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;APEUni 등록하기 &lt;/b&gt;(모의고사랑 각 과목별 유형파악하고 연습하는데 필수!)&lt;br /&gt;&lt;b&gt; 제이슨 PTE 네이버 카페 &lt;/b&gt;(시험 장 분위기 미리 파악하는데 도움됨)&lt;br /&gt;&lt;b&gt;✨ WFD 300-400문장 외우기 &lt;/b&gt;(매주 업데이트 되므로, 시험 전에 업데이트된 자료로 외우기!)&lt;br /&gt;&lt;b&gt;  WE, DI, RL, SWT, SST 템플릿 외우기 &lt;/b&gt;(템플릿은 가장 최신 걸로 네이버 블로그에 올려주신 자료들로 외움)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 4가지 자료들만 잘 활용해서 2-3주 정도 준비했었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;APEUni 등록하기&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;APEuni는 PTE 모의 테스트랑 각 과목별 유형을 진짜 시험처럼 연습해 볼 수 있는 플랫폼이다. (PTE를 준비할 때는 필수로 등록을 해야할 것 같다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;PTE 시험을 처음 준비할때는 꼭꼭 Apeuni를 통해 어떤 과목들이 있는지 살펴보고 익숙해져야한다!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;나는 VIP로 한달짜리 멤버쉽을 끊고 목테스트는 3번, 그리고 다른 세부 과목들을 매일 풀어보았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특히, RS를 집중적으로 하루에 50 문제 정도 풀어보고 좋은 점수가 나올때까지 반복해서 다시 풀어보기도 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;보통은 RS를 할때 노트테이킹이랑 같이 한다고 하시는데 (앞의 몇 단어 적어놓고 마지막 단어는 기억하기), 나는 노트테이킹을 하다보면 노트테이킹을 해놓은 단어를 다시봐도 기억이 잘 안나서 그냥 문장을 듣고 최대한 머리속에서 여러번 되뇌인 후에 말하는 방식을 사용했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 가장 중요한 것은 PTE speaking 문제들은 단어가 틀리더라도 절대로 &quot;음&quot;이나 중간에 쉬는 부분이 있으면 안된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fluency 점수도 체크하기 때문에 내가 말하는 단어가 틀리고 말이 안되는 단어더라도 쉬지않고 유창하게 보이도록 끝까지 말하는 것이 너무너무 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목테스트는 실제 시험하고 비슷하게 나오므로 시험 전에 시험에 익숙해지기 위해 3번정도 풀어보면 충분할 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 제이슨 PTE 네이버 카페&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;PTE를 준비하는 분들이 정보를 서로 공유하는 가장 큰 카페이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;여기서 시험장 분위기나 최근에 문제 변동이 있었는지 등의 정보를 얻을 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✨ WFD 300-400문장 외우기&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WFD에 나왔던 문장들은 외우는 것을 추천한다. 실제 시험에서도 3문제 중에 2문제 정도 기출에서 출제되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WFD 문장 정리해둔 파일은 블로그에서 쉽게 찾아볼 수 있고, 문장들을 외운 후에 WFD 유튜브를 틀어놓고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 음성을 들으면서 받아적는 연습을 꼭 해봐야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문장을 외우기만 하지 말고 음성 파일도 꼭 들어서 듣고 받아쓰는것에 익숙해질 수 있도록 준비하는 것이 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  WE, DI, RL, SWT, SST 템플릿 외우기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;템플릿들도 네이버 블로그에서 쉽게 찾을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 최근에 작성한 템플릿으로 공부하고 (옛날에 나온 템플릿들 중에는 PTE에서 막힌 템플릿도 있다고 한다.)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DI와 RL템플릿은 노트에 빠르게 적을 수 있는 연습을 하기를 추천한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WE 템플릿이 너무 길어서 외울 수 있을까 걱정했는데 이틀이면 쉬는 타임에 조금씩 외워도 금방 외울 수 있었던 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정말 집중해서 외우면 2-3시간이면 다 외울 수 있을 것 같고 사실 외우는게 계속 반복해야 까먹지 않기 때문에 3일 정도 여유시간을 두고 한번 쭉 외운 다음 반복해서 쉬는 시간 마다 외운 것을 적는 연습을 하면 충분할 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 SST템플릿은 따로 외우지 않고 RL템플릿을 그대로 썼는데 writing이 점수가 다른 과목에 비해서 낮게 나온것을 보면 sst템플릿도 따로 외우는게 좋을 것 같긴하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SWT는 템플릿이랄 거는 따로 없고 주어진 글에서 중요한 문장 3-4가지 정도를 뽑아서&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;A, and B, and C.&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;A, and B, and C; furthermore, D.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 작성해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;☑️ 추가로 PTE 준비할때 개인적으로 궁금 했었던 점들을 정리해봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  한국에 있는 시험장 개수와 위치&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 한국에는 시험장이 총 3개 있는 걸로 알고 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서울 2, 부산 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서울은 압구정과 종로 이렇게 두 개의 시험장이 있고 압구정이 조금 더 편안한 분위기이지만 시설은 조금 노후되었고 종로는 시설이 좋은 대신 분위기가 압구정에 비해서는 조금 엄격한 걸로 알고있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래 압구정에서 시험을 보려고 했지만 일주일 전에 시험 등록을 하려고 보니 종로 시험장 밖에 남아있지 않아서 어쩔 수 없이 종로에서 봤다. &lt;b&gt;(원하는 시간과 날짜 그리고 장소에서 보고 싶으면 최소 2주 전에는 등록해야할것 같다.)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 오히려 종로에서 봤던게 좋았던거 같은게 시험장에 일찍 도착해도 일층에 스타벅스 매장이 있어서 대기하기에도 편했고 시험장이 깔끔하게 되어있고 생각보다 감독관님들도 엄청 엄격한 느낌은 아니었어서 다음에 PTE를 본다고 해도 종로에서 볼것같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  노트 테이킹을 할 수 있는 시간&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종로 시험장에서 감독관님께 여쭤봤을때는 화면에서 오른쪽 위에 시간이 표시되는데 이 시간이 카운팅 되기 시작하면 그때 부터 노트테이킹이 가능하다고 하셨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마이크랑 헤드셋 테스트 그리고 자기소개를 마치고 나면 각 과목 시작 전에 시험이 총 몇 분으로 구성되어있는지 설명해주는 화면이 나오는데 이때 부터 노트테이킹을 시작했던 것 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RA 문제가 나올때 연습시간 30초 정도 주어졌을때 RA문장 한번 연습용으로 빠르게 읽어보고 시간이 남으면 그때 노트테이킹을 추가로 해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 DI템플릿이랑 RL 템플릿만 노트테이킹 해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  시험 결과가 언제 나오는지, 주말에도 나오는지?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 시험을 목요일에 봤는데 결과가 일요일 오후 3-4시 쯤에 나왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  시험장에 들어가서 템플릿을 볼 수 있는지?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험장 대기실에서 부터 핸드폰이나 템플릿 같은거를 볼 수 없으니 시험 시작 30분 전까지 근처 스타벅스나 다른 곳에서 템플릿을 충분히 읽오보고 시험 시작 30 분 전에 시험장에 입실하는 것을 추천한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  시험 시작 전에 하는 것들?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험 시작전에 시험 관련 안내문 읽어보고 핸드폰이랑 노트북 다 전원 끄고 사물함에 넣고 혈관 인식 등의 절차를 거친다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이어플러그랑 노트도 나누어주셨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  노트테이킹을 할 수 있는 노트와 펜은 어떻게 생겼는지?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노트테이킹을 할 수 있는 노트와 펜은 시험장에서 나누어주시는데 노트는 a4용지 정도 크기의 종이를 코팅해서 여러장 묶음 형태로 나누어 주시고, 펜은 얇은 네임펜을 나누어주셨다. 노트테이킹을 할때 조금 미끄러울 수 있으니 아이패드 같은 걸로 노트테이킹 연습을 하고 오면 더 좋을 것 같다. 하지만 크게 거슬릴 정도는 아니였다.&lt;/p&gt;</description>
      <category>PTE</category>
      <category>영어시험</category>
      <category>피티이</category>
      <author>dobbie</author>
      <guid isPermaLink="true">https://dobbie-coding.tistory.com/31</guid>
      <comments>https://dobbie-coding.tistory.com/31#entry31comment</comments>
      <pubDate>Mon, 30 Jun 2025 13:02:23 +0900</pubDate>
    </item>
    <item>
      <title>[VS Code] 설치해 두면 유용한 extension들!</title>
      <link>https://dobbie-coding.tistory.com/30</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt; Highlight Matching&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-06-24 at 1.36.50 PM.png&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;134&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djL5yB/btsOPVuBPkf/tYv8pFzCSEJwVqlfwtSGD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djL5yB/btsOPVuBPkf/tYv8pFzCSEJwVqlfwtSGD1/img.png&quot; data-alt=&quot;HTML, JSX, XML 같은 문서에서 여는 태그와 닫는 태그를 동시에 하이라이팅 해주는 확장&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djL5yB/btsOPVuBPkf/tYv8pFzCSEJwVqlfwtSGD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjL5yB%2FbtsOPVuBPkf%2FtYv8pFzCSEJwVqlfwtSGD1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;602&quot; height=&quot;113&quot; data-filename=&quot;Screenshot 2025-06-24 at 1.36.50 PM.png&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;134&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HTML, JSX, XML 같은 문서에서 여는 태그와 닫는 태그를 동시에 하이라이팅 해주는 확장&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; Auto Rename Tag&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-06-24 at 1.36.37 PM.png&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBRVSq/btsONDCugme/VFq2okMQ4TN5kcODB51iZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBRVSq/btsONDCugme/VFq2okMQ4TN5kcODB51iZ0/img.png&quot; data-alt=&quot;HTML/JSX 같은 문서에서 태그 이름을 바꾸면 자동으로 여닫는 쌍을 같이 바꿔줌&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBRVSq/btsONDCugme/VFq2okMQ4TN5kcODB51iZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBRVSq%2FbtsONDCugme%2FVFq2okMQ4TN5kcODB51iZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;548&quot; height=&quot;129&quot; data-filename=&quot;Screenshot 2025-06-24 at 1.36.37 PM.png&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;138&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HTML/JSX 같은 문서에서 태그 이름을 바꾸면 자동으로 여닫는 쌍을 같이 바꿔줌&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; Prettier&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-06-24 at 1.36.24 PM.png&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJCdAT/btsOM2WNh3L/nkJrX83n8p4W0BinafAujK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJCdAT/btsOM2WNh3L/nkJrX83n8p4W0BinafAujK/img.png&quot; data-alt=&quot;작성한 코드를 자동으로 예쁘게 정리해주는 코드 포매터(Formatter)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJCdAT/btsOM2WNh3L/nkJrX83n8p4W0BinafAujK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJCdAT%2FbtsOM2WNh3L%2FnkJrX83n8p4W0BinafAujK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;457&quot; height=&quot;123&quot; data-filename=&quot;Screenshot 2025-06-24 at 1.36.24 PM.png&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;140&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;작성한 코드를 자동으로 예쁘게 정리해주는 코드 포매터(Formatter)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; Emmet&lt;/p&gt;
&lt;div style=&quot;background-color: #1f1f1f; color: #cccccc;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre id=&quot;code_1750740594308&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; &quot;emmet.includeLanguages&quot;: {
    &quot;javascript&quot;: &quot;javascriptreact&quot;,
    &quot;javascriptreact&quot;: &quot;html&quot;
  }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;➡️ settings.json에 삽입하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;➡️ ex) h2#someID + tab만으로 자동 id가 설정된 h2태크 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; ES7&lt;/p&gt;
&lt;div style=&quot;background-color: #1f1f1f; color: #cccccc;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-06-24 at 1.51.30 PM.png&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;130&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNGy75/btsONJpfXO1/SVgbqdp7e0NRBsLzq8p0K1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNGy75/btsONJpfXO1/SVgbqdp7e0NRBsLzq8p0K1/img.png&quot; data-alt=&quot;helps to set to components very fast&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNGy75/btsONJpfXO1/SVgbqdp7e0NRBsLzq8p0K1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNGy75%2FbtsONJpfXO1%2FSVgbqdp7e0NRBsLzq8p0K1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;838&quot; height=&quot;130&quot; data-filename=&quot;Screenshot 2025-06-24 at 1.51.30 PM.png&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;130&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;helps to set to components very fast&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>extension</category>
      <category>Visual Studio Code</category>
      <category>vscode</category>
      <author>dobbie</author>
      <guid isPermaLink="true">https://dobbie-coding.tistory.com/30</guid>
      <comments>https://dobbie-coding.tistory.com/30#entry30comment</comments>
      <pubDate>Tue, 24 Jun 2025 13:39:00 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] image와 container 생성하고 관리하는 기본 커맨드 정리</title>
      <link>https://dobbie-coding.tistory.com/27</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;- Dockerfile: image 생성하는 instructions를 담은 파일&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- image를 build하는 command&lt;/p&gt;
&lt;pre id=&quot;code_1748346500395&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker build .&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: image name이랑tag 지정하면서 생성하기&lt;/p&gt;
&lt;pre id=&quot;code_1748585511846&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker build -t &quot;name&quot;:&quot;tag&quot; .&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- image 이름 바꾸기&lt;/p&gt;
&lt;pre id=&quot;code_1748588964921&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker tag &quot;name&quot;:&quot;tag&quot; &quot;new_name&quot;:&quot;new_tag&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- image를 기반으로 container를 생성하고 실행하는 command&lt;/p&gt;
&lt;pre id=&quot;code_1748346609913&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -p &quot;port_num&quot;:&quot;port_num&quot; &quot;image_ID&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: detached mode에서 실행하기 위해서는 -d 태그 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: container 이름 지정하면서 생성하기&lt;/p&gt;
&lt;pre id=&quot;code_1748584991359&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -p 3000:80 -d --rm --name &quot;container_name&quot; &quot;image_ID&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 실행 중인 container list를 확인하는 command&lt;/p&gt;
&lt;pre id=&quot;code_1748346631096&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker ps&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- stop 된 container까지 list 하는 command&lt;/p&gt;
&lt;pre id=&quot;code_1748346667262&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker ps -a&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- stop된 container를 다시 실행시키는 command(runs in background)&lt;/p&gt;
&lt;pre id=&quot;code_1748346712081&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker start &quot;container_name&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: attached mode에서 실행시키기 위해서는 -a 태그 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- container 중지시키는 command&lt;/p&gt;
&lt;pre id=&quot;code_1748346739714&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker stop &quot;container_name&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- container를 attached mode에서 실행하는 command&lt;/p&gt;
&lt;pre id=&quot;code_1748347280359&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker attach &quot;container_name&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- detached mode의 background mode에서 실행중인 container의 past logs를 확인하는 command&lt;/p&gt;
&lt;pre id=&quot;code_1748347398410&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker logs &quot;container_name&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 계속해서 log를 확인하는 command&lt;/p&gt;
&lt;pre id=&quot;code_1748347493597&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker logs -f &quot;container_name&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- input을 받아야할 때 쓰는 tag&lt;/p&gt;
&lt;pre id=&quot;code_1748403213875&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -it &quot;image_name&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- container를 restart하고 input을 받아야할 때&lt;/p&gt;
&lt;pre id=&quot;code_1748403242928&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker start -ai &quot;container_name&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모든 container를 삭제하는 command&lt;/p&gt;
&lt;pre id=&quot;code_1748404765656&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container prune&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 특정 container 지울때&lt;/p&gt;
&lt;pre id=&quot;code_1748404794574&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker rm &quot;container_name&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- image list 확인&lt;/p&gt;
&lt;pre id=&quot;code_1748404941728&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker images&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- image 삭제&lt;/p&gt;
&lt;pre id=&quot;code_1748404966662&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker rmi &quot;image_ID&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- image 전부 삭제&lt;/p&gt;
&lt;pre id=&quot;code_1748589303349&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker image prune -a&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* image를 지울때는 image를 기반으로 생성된 container를 먼저 지워야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- container가 stopped되면 자동으로 container 삭제&lt;/p&gt;
&lt;pre id=&quot;code_1748405176868&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run --rm &quot;image_ID&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- image에 대한 정보&lt;/p&gt;
&lt;pre id=&quot;code_1748583627924&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker image inspect &quot;image_ID&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 파일 복사해서 옮기기(컨테이너 running하는 동안에): container를 다시 시작하거나 image를 rebuild할 필요 없음&lt;/p&gt;
&lt;pre id=&quot;code_1748584563282&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker cp &quot;file_path/file&quot; &quot;container_name&quot;:&quot;path_to_paste_file&quot;
docker cp &quot;container_name&quot;:&quot;file_path&quot; &quot;path_to_paste_file&quot;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>CI_CD/Docker</category>
      <author>dobbie</author>
      <guid isPermaLink="true">https://dobbie-coding.tistory.com/27</guid>
      <comments>https://dobbie-coding.tistory.com/27#entry27comment</comments>
      <pubDate>Fri, 30 May 2025 16:28:44 +0900</pubDate>
    </item>
    <item>
      <title>[SVM]SVM(Support Vector Machine) 이란?</title>
      <link>https://dobbie-coding.tistory.com/26</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;**SVM (Support Vector Machine)** 설명에 관한 포스팅입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt; &amp;zwj;♀️ &lt;b&gt;SVM은&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;Supervised learning 기반의 분류 알고리즘으로, 주어진 데이터를 가장 넓은 margin을 두고 두 개 또는 다중 그룹으로 나누는 최적의 경계선(Hyperplane)을 찾는 것이 핵심!&lt;br /&gt;&lt;br /&gt;즉, 데이터를 나누는 가장 좋은 선 또는 면을 찾아주는 알고리즘&lt;br /&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-04-04 at 3.39.49 PM.png&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;522&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l4vxQ/btsM79DoaG2/FYMwikDhi6kUkO8ZyF9lK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l4vxQ/btsM79DoaG2/FYMwikDhi6kUkO8ZyF9lK1/img.png&quot; data-alt=&quot;svm&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l4vxQ/btsM79DoaG2/FYMwikDhi6kUkO8ZyF9lK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl4vxQ%2FbtsM79DoaG2%2FFYMwikDhi6kUkO8ZyF9lK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;363&quot; height=&quot;350&quot; data-filename=&quot;Screenshot 2025-04-04 at 3.39.49 PM.png&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;522&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;svm&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; 핵심 개념&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SVM이 찾는 선은 마진(Margin)이 가장 넓은 경계선입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;782&quot; data-start=&quot;643&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;681&quot; data-start=&quot;643&quot;&gt;&lt;b&gt;Hyperplane(초평면)&lt;/b&gt;: 데이터를 나누는 선 또는 면&lt;/li&gt;
&lt;li data-end=&quot;736&quot; data-start=&quot;682&quot;&gt;&lt;b&gt;Support Vectors(서포트 벡터)&lt;/b&gt;: 경계선과 가장 가까이 위치한 데이터 포인트&lt;/li&gt;
&lt;li data-end=&quot;782&quot; data-start=&quot;737&quot;&gt;&lt;b&gt;Margin&lt;/b&gt;: 서포트 벡터와 경계선 사이의 거리 &amp;rarr; 이 거리를 최대화함&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&quot;가장 마진이 넓은 선이 가장 일반화(generalization)가 잘 될 것이다!&quot;&lt;br /&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;  &lt;b&gt;데이터가 직선으로 나누어질 수 없을때는,&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;비선형 분류:&amp;nbsp;&lt;/b&gt;Kernel Trick 을 사용해서 고차원으로 데이터를 변환하여 분리!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;대표적인 커널 종류:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1097&quot; data-start=&quot;1043&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1072&quot; data-start=&quot;1043&quot;&gt;RBF (Radial Basis Function)&lt;/li&gt;
&lt;li data-end=&quot;1085&quot; data-start=&quot;1073&quot;&gt;Polynomial&lt;/li&gt;
&lt;li data-end=&quot;1097&quot; data-start=&quot;1086&quot;&gt;Sigmoid&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-end=&quot;1385&quot; data-start=&quot;1345&quot; data-ke-size=&quot;size20&quot;&gt;  &lt;b&gt;SVM이 쓰이는 곳&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;1285&quot; data-end=&quot;1343&quot;&gt;
&lt;li data-start=&quot;1285&quot; data-end=&quot;1296&quot;&gt;스팸 메일 필터링&lt;/li&gt;
&lt;li data-start=&quot;1297&quot; data-end=&quot;1309&quot;&gt;신용카드 사기 탐지&lt;/li&gt;
&lt;li data-start=&quot;1310&quot; data-end=&quot;1328&quot;&gt;이미지 분류 (얼굴 인식 등)&lt;/li&gt;
&lt;li data-start=&quot;1329&quot; data-end=&quot;1343&quot;&gt;바이오 분야 질병 진단&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;실제로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;금융, 헬스케어, 보안 분야&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등에서 널리 활용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;  장점 VS 단점&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 71px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px; text-align: center;&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px; text-align: center;&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 14px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 14px; text-align: center;&quot;&gt;경계가 명확할 때 높은 정확도&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 14px; text-align: center;&quot;&gt;큰 데이터셋에는 학습 속도가 느릴 수 있음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 19px;&quot;&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;고차원 데이터에 강함&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 19px;&quot;&gt;커널과 파라미터 설정이 까다로움&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 19px;&quot;&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;서포트 벡터만 사용하므로 효율적&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 19px;&quot;&gt;노이즈에 민감할 수 있음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;  SVM을 활용한 Iris 분류 문제 예제 코드&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1743749627388&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y)

model = SVC(kernel='rbf')
model.fit(X_train, y_train)

accuracy = model.score(X_test, y_test)
print(&quot;정확도:&quot;, accuracy)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;  학습된 SVM 모델의 직선 y = ax + b 구하는 방법&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1743750451918&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np

coefficient = np.array(svc.coef_)

a1 = coefficient[0][0]
a2 = coefficient[0][1]

intercept = svc.intercept_

a = -(a1/a2)
b = -(intercept[0]/a2)

print(f&quot;y = {a}x + {b}&quot;)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>AI/Machine_Learning</category>
      <category>SVM</category>
      <category>기초머신러닝</category>
      <category>데이터분석</category>
      <category>머신러닝</category>
      <category>서포트벡터머신</category>
      <author>dobbie</author>
      <guid isPermaLink="true">https://dobbie-coding.tistory.com/26</guid>
      <comments>https://dobbie-coding.tistory.com/26#entry26comment</comments>
      <pubDate>Fri, 4 Apr 2025 15:55:22 +0900</pubDate>
    </item>
    <item>
      <title>[Django] Custom User 만드는 법</title>
      <link>https://dobbie-coding.tistory.com/25</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트를 처음 만들 때&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 인증시스템에서 사용할 Custom User를 사용하고 싶다면 가장 먼저 AbstractUser를 상속받는 User class를 먼저 선언해 주어야한다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✨ 반드시 프로젝트 초반에 미리 해놓을 것! 안그러면 나중에 복잡해진다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  먼저 users app 생성&lt;/p&gt;
&lt;pre id=&quot;code_1741794135773&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python manage.py startapps users&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  user 폴더의 models.py에 아래 코드 첨부&lt;/p&gt;
&lt;pre id=&quot;code_1741794241858&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from django.contrib.auth.models import AbstractUser

# Create your models here.
class User(AbstractUser):
    pass&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  setting.py 에 코드 추가&amp;nbsp; (커스텀 사용자 모델 지정)&lt;/p&gt;
&lt;pre id=&quot;code_1741794283575&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#Auth 
AUTH_USER_MODEL = &quot;users.User&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1741794340426&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CUSTOM_APPS = [
    'houses.apps.HousesConfig',
    'users.apps.UsersConfig'#users app 추가
]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  이후에 migration 생성&lt;/p&gt;
&lt;pre id=&quot;code_1741794556862&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python manage.py makemigrations&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1741794667397&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python manage.py migrate&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  admin.py에 코드 추가&lt;/p&gt;
&lt;pre id=&quot;code_1741795205802&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from django.contrib.auth.admin import UserAdmin
from .models import User

# Register your models here.
@admin.register(User)
class CustomUserAdmin(UserAdmin):
    pass&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고할 수 있는 Django Documentation&lt;/p&gt;
&lt;figure id=&quot;og_1741794583913&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Customizing authentication in Django | Django documentation&quot; data-og-description=&quot;The web framework for perfectionists with deadlines.&quot; data-og-host=&quot;docs.djangoproject.com&quot; data-og-source-url=&quot;https://docs.djangoproject.com/en/5.1/topics/auth/customizing/&quot; data-og-url=&quot;https://docs.djangoproject.com/en/5.1/topics/auth/customizing/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cnWtix/hyYrU7gRdx/uxYvzAMmKL864ZKjtdknVk/img.png?width=1200&amp;amp;height=546&amp;amp;face=0_0_1200_546&quot;&gt;&lt;a href=&quot;https://docs.djangoproject.com/en/5.1/topics/auth/customizing/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.djangoproject.com/en/5.1/topics/auth/customizing/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cnWtix/hyYrU7gRdx/uxYvzAMmKL864ZKjtdknVk/img.png?width=1200&amp;amp;height=546&amp;amp;face=0_0_1200_546');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Customizing authentication in Django | Django documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The web framework for perfectionists with deadlines.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.djangoproject.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>WEB/Django</category>
      <author>dobbie</author>
      <guid isPermaLink="true">https://dobbie-coding.tistory.com/25</guid>
      <comments>https://dobbie-coding.tistory.com/25#entry25comment</comments>
      <pubDate>Thu, 13 Mar 2025 01:57:00 +0900</pubDate>
    </item>
    <item>
      <title>[RNN] Pytorch로 RNN구현하기 (나라별 Family name 구분하기)</title>
      <link>https://dobbie-coding.tistory.com/24</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;데이터 전처리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  데이터 다운로드 및 압축해제&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1740636744107&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;!wget https://download.pytorch.org/tutorial/data.zip
!unzip data.zip&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  Family name에 있는 특수 부호나 문자들을 알파벳으로 변환&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1740636798638&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from glob import glob

file_list = glob('data/names/*.txt')
n_countries = len(file_list)
print(&quot;number of countries: {}&quot;.format(n_countries))&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1740636853724&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import string
import unicodedata

alphs = string.ascii_letters + &quot; .,;'&quot;
n_alphs = len(alphs)
print(&quot;number of alphabets:{}&quot;.format(n_alphs))&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1740636899525&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def unicodeToAscii(word):
  ascii_word = []
  for char in unicodedata.normalize(&quot;NFD&quot;, word): # base character + combining character
    if char in alphs and unicodedata.category(char) != &quot;Mn&quot;: # 발음 구별 기호 제거하고 알파벳만
      ascii_word.append(char)

  return ''.join(ascii_word)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1740636909776&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 파일을 읽어서 이름의 char들을 알파벳으로 변환
def readLines(file):
  names = []
  lines = open(file, encoding='utf-8').read().strip().split(&quot;\n&quot;)
  for line in lines:
    names.append(unicodeToAscii(line))
  return names&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  Family name 을 one-hot encoding 하기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1740636920409&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import os

namesxcountry_dict = {}
countries = []

for file in file_list:
  country = os.path.splitext(os.path.basename(file))[0]
  countries.append(country)
  namesxcountry_dict[country] = readLines(file)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1740636987243&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch

def alph2idx(char):
    return alphs.find(char)

def alph2tensor(char):
    tensor = torch.zeros(1, n_alphs)
    tensor[0][alph2idx(char)] = 1

    return tensor

def word2tensor(word):
    tensor = torch.zeros(len(word), 1, n_alphs)
    for idx, char in enumerate(word):
        tensor[idx][0][alph2idx(char)] = 1
    return tensor&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;RNN 모델 구현과 학습&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  RNN 구현&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1740637034759&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch.nn as nn

class RNN(nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim):
        super().__init__()
        self.hidden_dim = hidden_dim
        self.input2hidden = nn.Linear(input_dim + hidden_dim, hidden_dim)
        self.hidden2output = nn.Linear(hidden_dim, output_dim)

    def forward(self, input, hidden):
        combined = torch.cat((input, hidden), 1)
        hidden = self.input2hidden(combined)
        hidden = torch.tanh(hidden)
        output = self.hidden2output(hidden)

        return output, hidden

    def initial_hidden(self):
        return torch.zeros(1, self.hidden_dim)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  RNN 모델 생성&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1740637063027&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nn = RNN(len(alphs), 128, n_countries)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  Random하게&amp;nbsp; Family name 과 해당하는 Country 데이터 가져오는 함수&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1740637101824&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import random

def extractRandomData():
    country = random.choice(countries)
    word = random.choice(namesxcountry_dict[country])
    country_tensor = torch.tensor([countries.index(country)], dtype=torch.long)
    word_tensor = word2tensor(word)

    return country, word, country_tensor, word_tensor

for _ in range(5):
    country, word, country_tensor, word_tensor = extractRandomData()
    print('country =', country, '/ word =', word, '/ country_tensor =', country_tensor)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-02-27 at 3.18.30 PM.png&quot; data-origin-width=&quot;1078&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n038x/btsMzgBdZfg/iO3MzlIZ4zFMdHzK8XrKl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n038x/btsMzgBdZfg/iO3MzlIZ4zFMdHzK8XrKl0/img.png&quot; data-alt=&quot;결과 출력문&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n038x/btsMzgBdZfg/iO3MzlIZ4zFMdHzK8XrKl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn038x%2FbtsMzgBdZfg%2FiO3MzlIZ4zFMdHzK8XrKl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;666&quot; height=&quot;110&quot; data-filename=&quot;Screenshot 2025-02-27 at 3.18.30 PM.png&quot; data-origin-width=&quot;1078&quot; data-origin-height=&quot;178&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;결과 출력문&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  train 함수&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1740637186960&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;loss_fn = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(rnn.parameters())

def train(country_tensor, word_tensor):
    optimizer.zero_grad()
    hidden = rnn.initial_hidden()

    for i in range(word_tensor.size()[0]):
        output, hidden = rnn(word_tensor[i], hidden)

    loss = loss_fn(output, country_tensor)

    loss.backward()

    optimizer.step()

    return output, loss.item()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  Training data 10000개를 추출하여 학습진행&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1740637256427&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 100,000 개의 training data
import time
import math

iteration = 100000
print_iter = 5000
plot_iter = 1000

cur_loss = 0
losses = []

def output2country(output):
    top_val, top_idx = output.topk(1)
    country_idx = top_idx[0].item()
    return countries[country_idx], country_idx

for i in range(1, iteration+1):
    country, word, country_tensor, word_tensor = extractRandomData()
    output, loss = train(country_tensor, word_tensor)
    cur_loss += loss

    if i % print_iter == 0:
        pred, pred_idx = output2country(output)
        if pred == country:
            correct = 'correct!'
        else:
            correct = 'wrong (%s)' % country
        print('iteration: %d loss: %.5f Family name: %s / Predicted name: %s %s' % (i, loss, word, pred, correct))

    if i % plot_iter == 0:
        losses.append(cur_loss / plot_iter)
        cur_loss = 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-02-27 at 3.21.27 PM.png&quot; data-origin-width=&quot;1514&quot; data-origin-height=&quot;658&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctmbwT/btsMzO5AbGS/C6KxRqglU3uamgkX2d0IzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctmbwT/btsMzO5AbGS/C6KxRqglU3uamgkX2d0IzK/img.png&quot; data-alt=&quot;5000 iteration마다 찍은 출력문 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctmbwT/btsMzO5AbGS/C6KxRqglU3uamgkX2d0IzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctmbwT%2FbtsMzO5AbGS%2FC6KxRqglU3uamgkX2d0IzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1514&quot; height=&quot;658&quot; data-filename=&quot;Screenshot 2025-02-27 at 3.21.27 PM.png&quot; data-origin-width=&quot;1514&quot; data-origin-height=&quot;658&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;5000 iteration마다 찍은 출력문 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  예측 함수&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1740637335663&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def predict(input_word, n_preds=3):
  print(f'input word:{input_word}')

  with torch.no_grad():
    output = torch.softmax(evaluate(word2tensor(input_word)), 1)

    top_v, top_idx = output.topk(n_preds, 1, True)
    predictions = []

    for i in range(n_preds):
      value = top_v[0][i].item()
      country_idx = top_idx[0][i].item()
      print(f&quot;top-{i} score:{value:.4f}/ country: {countries[country_idx]}&quot;)
      predictions.append([value, countries[country_idx]])
  print(&quot;\n&quot;)

predict(&quot;Kim&quot;)
predict(&quot;Stone&quot;)
predict(&quot;Gao&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-02-27 at 3.22.22 PM.png&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;534&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p44UA/btsMyHMJzp8/zyhEST7zgYGrs7GoObZEOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p44UA/btsMyHMJzp8/zyhEST7zgYGrs7GoObZEOK/img.png&quot; data-alt=&quot;랜덤하게 뽑은 3개의 데이터로 각 top-3의 country 출력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p44UA/btsMyHMJzp8/zyhEST7zgYGrs7GoObZEOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp44UA%2FbtsMyHMJzp8%2FzyhEST7zgYGrs7GoObZEOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;405&quot; height=&quot;327&quot; data-filename=&quot;Screenshot 2025-02-27 at 3.22.22 PM.png&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;534&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;랜덤하게 뽑은 3개의 데이터로 각 top-3의 country 출력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  각 나라 간의 Family name 유사도 Confusion matrix 로 분석&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1740637388929&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

confusion = torch.zeros(n_countries, n_countries)
n_confusion = 10000

def evaluate(word_tensor):
  hidden = rnn.initial_hidden()

  for i in range(word_tensor.size()[0]):
    output, hidden = rnn(word_tensor[i], hidden)

  return output

for i in range(n_confusion):
  country, word, country_tensor, word_tensor = extractRandomData()
  output = evaluate(word_tensor)
  pred, pred_idx = output2country(output)
  country_idx = countries.index(country)
  confusion[country_idx][pred_idx] += 1


for i in range(n_countries):
  confusion[i] = confusion[i] / confusion[i].sum()

fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(confusion.numpy(), cmap=&quot;coolwarm&quot;)
fig.colorbar(cax)

ax.set_xticklabels([''] + countries, rotation=90)
ax.set_yticklabels([''] + countries)

ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
ax.yaxis.set_major_locator(ticker.MultipleLocator(1))

plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-02-27 at 3.24.23 PM.png&quot; data-origin-width=&quot;1150&quot; data-origin-height=&quot;974&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ymkRO/btsMy1qGD6F/USKOF5200F6UJ3rSdnyZAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ymkRO/btsMy1qGD6F/USKOF5200F6UJ3rSdnyZAK/img.png&quot; data-alt=&quot;confusion matrix&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ymkRO/btsMy1qGD6F/USKOF5200F6UJ3rSdnyZAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FymkRO%2FbtsMy1qGD6F%2FUSKOF5200F6UJ3rSdnyZAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;641&quot; height=&quot;543&quot; data-filename=&quot;Screenshot 2025-02-27 at 3.24.23 PM.png&quot; data-origin-width=&quot;1150&quot; data-origin-height=&quot;974&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;confusion matrix&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  예측 함수&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1740638750755&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;def predict(input_word, n_preds=3):
  print(f'input word:{input_word}')

  with torch.no_grad():
    output = torch.softmax(evaluate(word2tensor(input_word)), 1)

    top_v, top_idx = output.topk(n_preds, 1, True)
    predictions = []

    for i in range(n_preds):
      value = top_v[0][i].item()
      country_idx = top_idx[0][i].item()
      print(f&quot;top-{i} score:{value:.4f}/ country: {countries[country_idx]}&quot;)
      predictions.append([value, countries[country_idx]])
  print(&quot;\n&quot;)

predict(&quot;Kim&quot;)
predict(&quot;Stone&quot;)
predict(&quot;Gao&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-02-27 at 3.22.22 PM.png&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;534&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p44UA/btsMyHMJzp8/zyhEST7zgYGrs7GoObZEOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p44UA/btsMyHMJzp8/zyhEST7zgYGrs7GoObZEOK/img.png&quot; data-alt=&quot;Family name 별 top-3 나라&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p44UA/btsMyHMJzp8/zyhEST7zgYGrs7GoObZEOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp44UA%2FbtsMyHMJzp8%2FzyhEST7zgYGrs7GoObZEOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;405&quot; height=&quot;327&quot; data-filename=&quot;Screenshot 2025-02-27 at 3.22.22 PM.png&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;534&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Family name 별 top-3 나라&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  loss 가 5000 iteration마다 줄어드는 정도 그래프로 표현&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1740637535863&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

def smooth_curve(points, window_size=10):
    return np.convolve(points, np.ones(window_size)/window_size, mode='valid')

smoothed_losses = smooth_curve(losses, window_size=10)

plt.figure(figsize=(10, 5))
plt.plot(losses, label=&quot;Raw Loss&quot;, alpha=0.3)
plt.plot(range(len(smoothed_losses)), smoothed_losses, label=&quot;Smoothed Loss&quot;, linewidth=2, color='red')  # 부드러운 곡선

plt.title(&quot;Loss Trend&quot;)
plt.xlabel(&quot;Epochs&quot;)
plt.ylabel(&quot;Loss&quot;)
plt.legend()

plt.gca().xaxis.set_major_locator(ticker.MaxNLocator(integer=True))
plt.grid(True, linestyle=&quot;--&quot;, alpha=0.6)

plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;GitHub Link: &lt;a href=&quot;https://github.com/DanbiAubrey/RNN&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/DanbiAubrey/RNN&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1740637567187&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - DanbiAubrey/RNN: RNN for Identifying the Country of Origin from a Family Name&quot; data-og-description=&quot;RNN for Identifying the Country of Origin from a Family Name - DanbiAubrey/RNN&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/DanbiAubrey/RNN&quot; data-og-url=&quot;https://github.com/DanbiAubrey/RNN&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Hcr3t/hyYmIrTOnf/OMnyj581nap7qUt2mYO7h0/img.png?width=1200&amp;amp;height=600&amp;amp;face=941_110_1092_276,https://scrap.kakaocdn.net/dn/NVbbb/hyYjkTMW7D/KbCbL3qLbG6a78NDLluYK1/img.png?width=1200&amp;amp;height=600&amp;amp;face=941_110_1092_276&quot;&gt;&lt;a href=&quot;https://github.com/DanbiAubrey/RNN&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/DanbiAubrey/RNN&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Hcr3t/hyYmIrTOnf/OMnyj581nap7qUt2mYO7h0/img.png?width=1200&amp;amp;height=600&amp;amp;face=941_110_1092_276,https://scrap.kakaocdn.net/dn/NVbbb/hyYjkTMW7D/KbCbL3qLbG6a78NDLluYK1/img.png?width=1200&amp;amp;height=600&amp;amp;face=941_110_1092_276');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - DanbiAubrey/RNN: RNN for Identifying the Country of Origin from a Family Name&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;RNN for Identifying the Country of Origin from a Family Name - DanbiAubrey/RNN&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;아니그니까님의 블로그글 참조:&lt;span&gt; &lt;a href=&quot;https://dykm.tistory.com/39&quot;&gt;https://dykm.tistory.com/39&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1740637645131&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Machine Learning] PyTorch로 RNN(순환 신경망) 구현하기&quot; data-og-description=&quot;본 블로그의 Machine Learning 카테고리에서는 주로 이미지를 처리하는 내용을 다루었다.각각의 이미지 데이터는 하나의 독립적인 데이터였다.하지만 이런 패러다임에 맞지 않는 데이터는 어떻게 &quot; data-og-host=&quot;dykm.tistory.com&quot; data-og-source-url=&quot;https://dykm.tistory.com/39&quot; data-og-url=&quot;https://dykm.tistory.com/39&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bhdJWi/hyYm8RB9oG/Mu65ujGj33rHkBlvqfMIf0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/kcT2Z/hyYjhiuh6N/luP2h3AJqAKrPxhxidp4u1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/fi1ER/hyYjELrqUU/SjRb1llL4kqgBEN3pweujk/img.png?width=1573&amp;amp;height=1513&amp;amp;face=0_0_1573_1513&quot;&gt;&lt;a href=&quot;https://dykm.tistory.com/39&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dykm.tistory.com/39&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bhdJWi/hyYm8RB9oG/Mu65ujGj33rHkBlvqfMIf0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/kcT2Z/hyYjhiuh6N/luP2h3AJqAKrPxhxidp4u1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/fi1ER/hyYjELrqUU/SjRb1llL4kqgBEN3pweujk/img.png?width=1573&amp;amp;height=1513&amp;amp;face=0_0_1573_1513');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Machine Learning] PyTorch로 RNN(순환 신경망) 구현하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;본 블로그의 Machine Learning 카테고리에서는 주로 이미지를 처리하는 내용을 다루었다.각각의 이미지 데이터는 하나의 독립적인 데이터였다.하지만 이런 패러다임에 맞지 않는 데이터는 어떻게&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dykm.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI/NLP</category>
      <category>rnn</category>
      <category>rnn구현</category>
      <category>순환신경망</category>
      <author>dobbie</author>
      <guid isPermaLink="true">https://dobbie-coding.tistory.com/24</guid>
      <comments>https://dobbie-coding.tistory.com/24#entry24comment</comments>
      <pubDate>Thu, 27 Feb 2025 15:47:44 +0900</pubDate>
    </item>
    <item>
      <title>Django 기본 명령어</title>
      <link>https://dobbie-coding.tistory.com/23</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;  server 실행 명령어&lt;/p&gt;
&lt;pre id=&quot;code_1740534991738&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python manage.py runserver&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  super user 생성 명령어&lt;/p&gt;
&lt;pre id=&quot;code_1740535036352&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python manage.py createsuperuser&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;➡️ 실행하면 user name, user email, 그리고 password 를 입력하면 admin user 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;➡️ http://127.0.0.1:8000/admin 페이지에서 admin으로 로그인 하면 admin 패널에 user 추가되어있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  app 생성 명령어&lt;/p&gt;
&lt;pre id=&quot;code_1740615268719&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python manage.py startapp &quot;APP_NAME&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;➡️&lt;span&gt; app을 생성하면 app폴더 안에 아래와 같은 파일들이 생성&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-02-27 at 9.18.20 AM.png&quot; data-origin-width=&quot;530&quot; data-origin-height=&quot;320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6UNOj/btsMxqruDfI/w1JyrPkH9wQs0DQrrAYKx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6UNOj/btsMxqruDfI/w1JyrPkH9wQs0DQrrAYKx0/img.png&quot; data-alt=&quot;app폴더 안의 파일들&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6UNOj/btsMxqruDfI/w1JyrPkH9wQs0DQrrAYKx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6UNOj%2FbtsMxqruDfI%2Fw1JyrPkH9wQs0DQrrAYKx0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;396&quot; height=&quot;239&quot; data-filename=&quot;Screenshot 2025-02-27 at 9.18.20 AM.png&quot; data-origin-width=&quot;530&quot; data-origin-height=&quot;320&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;app폴더 안의 파일들&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1/&lt;/b&gt; models.py: app안에서 사용하는 데이터의 shape을 묘사하는 파일&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2/&lt;/b&gt; admin.py: model의 admin 등록할 수 있는 파일&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt; &lt;span&gt; app을 생성하고 등록하는 방법 (&lt;b&gt;등록을 꼭 해주어야함!&lt;/b&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;config -&amp;gt; settings.py의 INSTALLED_APPS에 &quot;[APP_NAME].apps.[APP_CONFIG]&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;➡️&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;[APP_CONFIG]는 app의 apps.py파일의 클래스 이름&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Migration&lt;/b&gt;이란?&lt;br /&gt;데이터베이스의 state를 변경하기 위한 python 코드가 담긴 파일&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;  Migratoin 생성하는 명령어&lt;/p&gt;
&lt;pre id=&quot;code_1740617526784&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python manage.py makemigrations&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  Migration을 database에 적용하는 명령어&lt;/p&gt;
&lt;pre id=&quot;code_1740617627368&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python manage.py migrate&lt;/code&gt;&lt;/pre&gt;</description>
      <category>WEB/Django</category>
      <category>Django</category>
      <author>dobbie</author>
      <guid isPermaLink="true">https://dobbie-coding.tistory.com/23</guid>
      <comments>https://dobbie-coding.tistory.com/23#entry23comment</comments>
      <pubDate>Thu, 27 Feb 2025 14:27:53 +0900</pubDate>
    </item>
    <item>
      <title>MacOS에서 Poetry 가상환경 설정하기</title>
      <link>https://dobbie-coding.tistory.com/22</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 먼저 pipx를 설치&lt;/p&gt;
&lt;pre id=&quot;code_1740451379437&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew install pipx
pipx ensurepath​&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) pipx로 poetry 설치&lt;/p&gt;
&lt;pre id=&quot;code_1740451403505&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pipx install poetry&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 성공적으로 되면&lt;/p&gt;
&lt;pre id=&quot;code_1740451343686&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;poetry init&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;으로 poetry 가상환경 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;☑️ poetry 가상 환경에 패키지를 설치하고 싶을때는 아래의 명령어를 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1740451557223&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;poetry add [패키지 이름]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;☑️ &lt;/span&gt;가상환경을 실행할때는 아래의 명령에 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1740451595122&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;poetry shell&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 shell명령어를 더이상 사용할 수 없다는 메세지가 나오면&lt;/p&gt;
&lt;pre id=&quot;code_1740451674407&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;poetry self add poetry-plugin-shell&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 커맨드로 shell 명령어를 사용할 수 있도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;☑️&lt;span&gt; &lt;/span&gt;&lt;/span&gt;가상환경에서 나올때는 아래의 명령어를 사용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1740451708940&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;exit&lt;/code&gt;&lt;/pre&gt;</description>
      <category>WEB/Django</category>
      <category>poetry</category>
      <category>virtual env</category>
      <category>가상환경</category>
      <author>dobbie</author>
      <guid isPermaLink="true">https://dobbie-coding.tistory.com/22</guid>
      <comments>https://dobbie-coding.tistory.com/22#entry22comment</comments>
      <pubDate>Tue, 25 Feb 2025 11:49:36 +0900</pubDate>
    </item>
    <item>
      <title>Machine Learning VS Deep Learning</title>
      <link>https://dobbie-coding.tistory.com/21</link>
      <description>&lt;table style=&quot;border-collapse: collapse; width: 100.349%; height: 293px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignCenter&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;Machine Learning&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;Deep Learning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;입력 데이터&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;tabular data&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;비정형 데이터 (e.g., 이미지, 오디오, 텍스트)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;모델 종류&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;SVM, Logistic Regression, K-means, Decision Tree&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;MLP(Multilayer Perceptron), CNN, GNN, RNN, Transformer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;explainability&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;결과 성명 가능함&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;결과 설명 할 수 없음 (black box)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI</category>
      <category>Deep learning</category>
      <category>Machine Learning</category>
      <category>딥러닝</category>
      <category>머신러닝</category>
      <category>머신러닝 딥러닝</category>
      <author>dobbie</author>
      <guid isPermaLink="true">https://dobbie-coding.tistory.com/21</guid>
      <comments>https://dobbie-coding.tistory.com/21#entry21comment</comments>
      <pubDate>Fri, 21 Feb 2025 14:12:04 +0900</pubDate>
    </item>
  </channel>
</rss>