<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>기웅이낸스</title>
    <link>https://cholink.tistory.com/</link>
    <description>메모장</description>
    <language>ko</language>
    <pubDate>Sun, 26 Jul 2026 02:13:36 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Samsun</managingEditor>
    <item>
      <title>CPU 스케줄링 FIFO, SJF, STCF, RR</title>
      <link>https://cholink.tistory.com/226</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;FIFO은 선입선출(First In Frist Out, FIFO) 많은&amp;nbsp; 장점을 가진다. 단순하고 구현하기 쉽다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 예를 스케줄 해보자. 시스템에 3개의 작업 A, B, C가 거의 동시에 도착했다고 가정하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간발의 차이로 A,B,C 순서대로 도착했다고 가정하자. 또한 각 작업은 10초 동안 실행된다고 가정하자.&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;&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;h3 data-ke-size=&quot;size23&quot;&gt;선입선출(First In First Out, FIFO)&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;347&quot; data-origin-height=&quot;104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1XfXl/btsKM4KJIdw/GdWHsj7e6JiOekkl99O8k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1XfXl/btsKM4KJIdw/GdWHsj7e6JiOekkl99O8k0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1XfXl/btsKM4KJIdw/GdWHsj7e6JiOekkl99O8k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1XfXl%2FbtsKM4KJIdw%2FGdWHsj7e6JiOekkl99O8k0%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;347&quot; height=&quot;104&quot; data-origin-width=&quot;347&quot; data-origin-height=&quot;104&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A는 10, B는 20, C는 30에 종료했다는 것을 알 수 있다. 세 작업IFO은 선입선출(First In Frist Out, FIFI) 많은 장점을 가진다. 단순하고 구현하기 쉽다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 예를 스케줄 해보자. 시스템에 3개의 작업 A, B, C가 거의 동시에 도착했다고 가정하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간발의 차이로 A,B,C 순서대로 도착했다고 가정하자. 또한 각 작업은 10초 동안 실행된다고 가정하자.&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;A는 10, B는 20, C는 30에 종료했다는 것을 알 수 있다. 세 작업의 평균 반환 시간은 (10+20+30) 3 = 20이다. 반환 시간의 계산은 쉽다.&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;&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;h3 data-ke-size=&quot;size23&quot;&gt;최단 작업 우선(Shortest Job First, SJF)&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;384&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DKnLd/btsKN2kSUaN/r7B3IC3f6SSEQhQ2gfjx3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DKnLd/btsKN2kSUaN/r7B3IC3f6SSEQhQ2gfjx3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DKnLd/btsKN2kSUaN/r7B3IC3f6SSEQhQ2gfjx3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDKnLd%2FbtsKN2kSUaN%2Fr7B3IC3f6SSEQhQ2gfjx3K%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;384&quot; height=&quot;118&quot; data-origin-width=&quot;384&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SJF은 가장 짧은 실행 시간을 가진 작업을 먼저 실행시킨다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B, C, A 순서로 실행시킴으로써 SJF는 평균 반환 시간을 110초에서 50초로 2배 이상 향상시켰다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 작업이 동시에 도착한다면 SJF가 최적의 스케줄링 알고리즘임을 증명할 수 있다.&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;&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;h3 data-ke-size=&quot;size23&quot;&gt;최단 잔여시간 우선(Shortest Time-to-Completion First, STCF)&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;134&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UCr6q/btsKM5JAC1E/3dDLQ9eZjlPK0923J2A1zK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UCr6q/btsKM5JAC1E/3dDLQ9eZjlPK0923J2A1zK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UCr6q/btsKM5JAC1E/3dDLQ9eZjlPK0923J2A1zK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUCr6q%2FbtsKM5JAC1E%2F3dDLQ9eZjlPK0923J2A1zK%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;360&quot; height=&quot;134&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;134&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;STCF는 A를 선점하고 B와 C를 끝날 때까지 실행시킨다. 그 결과 평균 반환 시간이 단축되어 50초가 된다. 작업들이 동시에 도착할 경우, SFJ가 최적의 결과를 낸다는 것을 고려하면, STCF가 최적의 스케줄링이 되는 이유를 쉽게 알 수 있다.&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;&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;h3 data-ke-size=&quot;size23&quot;&gt;라운드 로빈(Round-Robin, RR)&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSGoUA/btsKMIVhmtj/0fTArS3pE7SIZVxwMZsi0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSGoUA/btsKMIVhmtj/0fTArS3pE7SIZVxwMZsi0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSGoUA/btsKMIVhmtj/0fTArS3pE7SIZVxwMZsi0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSGoUA%2FbtsKMIVhmtj%2F0fTArS3pE7SIZVxwMZsi0k%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;360&quot; height=&quot;124&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;124&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;기본 발상은 간단하다. RR은 작업이 끝날때까지 기다리지 않는다. 대신 일정 시간 동안 실행한 후 실행 큐의 다음 작업으로 전환된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3개의 작업 A, B, C가 시스템에 동시에 도착하고, 각각 5초간 실행된다고 가정한다. SJF 스케줄러는 다른 작업을 실행하기 전에 각 작업을 종료할 때까지 실행한다.&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/운영체제</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/226</guid>
      <comments>https://cholink.tistory.com/226#entry226comment</comments>
      <pubDate>Tue, 19 Nov 2024 11:42:41 +0900</pubDate>
    </item>
    <item>
      <title>프로세스 개념</title>
      <link>https://cholink.tistory.com/225</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 프로세스는 &lt;b&gt;실행 중인 프로그램&lt;/b&gt;으로 정의한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제는 CPU를 &lt;b&gt;가상화&lt;/b&gt;하여 이러한 환상을 만들어 낸다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제는 &lt;b&gt;실행 중인 프로그램&lt;/b&gt;의 개념을 지공하는데, 이를 &lt;b&gt;프로세스(proccess)&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;385&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6GQo8/btsKMmYu67M/C4NYwNUNsy7Up4xUfTDzFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6GQo8/btsKMmYu67M/C4NYwNUNsy7Up4xUfTDzFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6GQo8/btsKMmYu67M/C4NYwNUNsy7Up4xUfTDzFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6GQo8%2FbtsKMmYu67M%2FC4NYwNUNsy7Up4xUfTDzFK%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;368&quot; height=&quot;385&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;385&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램 실행을 위하여 운영체제가 하는 첫 번째 작업은 프로그램 코드와 정적 데이터를 메모리, 프로세스의 주소 공간에 탑재(load)하는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제는 프로그램의 힙(heap)을 위한 메모리 영역을 할당한다. C 프로그램에서 힙은 동적으로 할당된 데이터를 저장하기 위해 사용된다. 프로그램은 malloc()을 호출하여 필요한 공간을 요청하고 free()를 호출하여 사용했던 공간을 반환하여 다른 프로그램이 사용할 수 있도록 한다.&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;bull; 실행 (Running): 실행 상태에서 프로세스는 프로세서에서 실행 중이다. 즉, 프로세 스는 명령어를 실행하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 준비 (Ready): 준비 상태에서 프로세스는 실행할 준비가 되어 있지만 운영체제가 다른 프로세스를 실행하고 있는 등의 이유로 대기 중이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 대기 (Blocked): 프로세스가 다른 사건을 기다리는 동안 프로세스의 수행을 중단시 키는 연산이다. 흔한 예 : 프로세스가 디스크에 대한 입출력 요청을 하였을 때 프로세스는 입출력이 완료될 때까지 대기 상태가 되고, 다른 프로세스가 실행 상태로 될 수 있다.&lt;/p&gt;</description>
      <category>IT/운영체제</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/225</guid>
      <comments>https://cholink.tistory.com/225#entry225comment</comments>
      <pubDate>Mon, 18 Nov 2024 16:02:22 +0900</pubDate>
    </item>
    <item>
      <title>운영체제 개요</title>
      <link>https://cholink.tistory.com/224</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램을 쉽게 실행하고 프로그램 간의 메모리 공유를 가능케 하고, 장치와 상호작용을 가능케하고, 다양한 흥미로운 일을 할 수 있게 하는 소프트웨어가 있다. 시스템을 사용하기 편리하면서 정확하고 올바르게 동작시킬 책임이 있기 때문에 소프트웨어를 &lt;b&gt;운영체제(operating system, OS)&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;운영체제는 가상화(virtualization)라고 불리는 기법을 사용한다. 운영체제는 프로세서, 메모리, 또는 디스크와 같은 물리적 자원을 이용하고, 사용이 편리한 가상 형태의 자원을 생성하기 때문에 운영체제를 때로는 &lt;b&gt;가상 머신(virtual machine)&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;가상화는 많은 프로그램들이 CPU를 공유하여, 동시에 실행될 수 있게 한다. 프로그램들이 각자 명령어와 데이터를 접근할 수 있게 한다. 프로그램들이 디스크 등의 장치를 공유할 수 있게 한다. 이러한 이유로 운영체제는 &lt;b&gt;자원 관리자(resource manager)&lt;/b&gt; 라고도 불린다. CPU, 메모리, 및 디스크는 시스템의 자원이다. 이들 자원을 관리하는 것이 운영체제의 역할이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731835058363&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;sys/time.h&amp;gt;
#include &amp;lt;assert.h&amp;gt;
#include&amp;ldquo;common.h &amp;rdquo;
int main(int argc, char *argv[])
{
   if (argc != 2) {
   printf(stderr, &amp;ldquo;usage: cpu &amp;lt;string&amp;gt;\n &amp;rdquo;);
   exit(1);
 }
 char *str = argv[1];
 while (1) {
 Spin(1);
 printf(&amp;ldquo;%s\n &amp;rdquo;, str);
 }
 return 0;
 }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spin()을 호출하는 프로그램이다. Spin()은 1초 동안 실행된 후 리턴하는 함수이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 프로그램을 실행하면 1초가 지나면 사용자가 전달한 입력 문자열을 출력한다. 출력 후 실행은 계속된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731835203177&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;prompt&amp;gt; ./cpu A &amp;amp; ; ./cpu B &amp;amp; ; ./cpu C &amp;amp; ; ./cpu D &amp;amp;
[1] 7353
[2] 7354
[3] 7355
[4] 7356&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세서가 하나밖에 없음에도 프로그램 4개 모두 동시에 실행되는 것처럼 보였다. 어떻게 된 일인걸까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드웨어의 도움을 받아 OS가 시스템에 많은 수의 가상 CPU가 존재하는 듯한 환상을 만들어낸것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 CPU 또는 소규모 CPU 집합을 무한개의&amp;nbsp; CPU가 존재하는 것처럼 변환하여 동시에 많은 수의 프로그램을 실행시키는 것을 CPU 가상화(virtualizing the CPU)라 한다.&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;pre id=&quot;code_1731835423512&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;unistd.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include&amp;ldquo;common.h &amp;rdquo;
 int main(int argc, char *argv[])
 {
 int *p = malloc(sizeof(int)); // a1
 assert(p != NULL);
 printf(&amp;ldquo;(%d) memory address of p: %08x\n &amp;rdquo;,
 getpid() , (unsigned) p); // a2
 *p = 0; // a3
 while (1) {
 Spin(1);
 *p = *p + 1;
 printf(&amp;ldquo;(%d) p: %d\n &amp;rdquo;, getpid() , *p); // a4
 }
 return 0;
 }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모리 접근 프로그램이다. 메모리는 프로그램이 실행되는 동안 항상 접근된다. malloc()을 호출하여 메모리를 할당하는 코드이다. 같은 프로그램을 여러번 실행시켜보면 프로그램들은 같은 주소에 메모리를 할당받지만, 각각이 독립적으로 0020000 번지의 값을 갱신한다. 각 프로그램은 물리 메모리를 다른 프로그램과 공유하는 것이 아니라 각자 자신의 메모리를 가지고 있는 것처럼 보인다. 운영체제가 메모리 가상화(virtualizing memory)를 하기 때문에 이런 현상이 생긴다.&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;</description>
      <category>IT/운영체제</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/224</guid>
      <comments>https://cholink.tistory.com/224#entry224comment</comments>
      <pubDate>Sun, 17 Nov 2024 18:50:42 +0900</pubDate>
    </item>
    <item>
      <title>소프트웨어 개발 방법론 - Agile, Hybrid Agile, CBD</title>
      <link>https://cholink.tistory.com/221</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Agile (애자일 방법론) : 애자일은 유연하고 반복적인 소프트웨어 개발 방법론이다. 프로젝트를 작은 반복으로 나누어 점진적으로 완성해 나가는 방식이다...&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;장점 : 요구 사항의 변경에 유연하게 대응 가능.. 짧은 주기로 사용자에게 가치를 전달, 팀 간의 협업 강화&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;Waterfall (폭포수 방법론) : 전통적인 소프트웨어 방법론이다.. 단계별로 순차적으로 진행하는 방식을 사용함..&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;장점 : 명확한 계획과 일정 관리가 가능, 문서화가 잘 이루어짐. 이해하고 따라가기 쉬움&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;Hybrid Agile (하이브리드 애자일) : 하이브리드 Agile과 Waterfall의 장점을 결합한 방법론입니다. 각 컴포넌트는 독립적으로 개발되어 다른 시스템에서도 재사용이 가능함.. 이 컴포넌트들을 조합해 전체 시스템을 구축함&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;CBD(Component-Based Development, 컴포넌트 기반 개발) : 소프트웨어를 재사용 가능한 컴포넌트로 나누어 개발하는 방법론이다. 각 컴포넌트는 독립적으로 개발되어 다른 시스템에서도 재사용이 가능함. 이 컴포넌트들을 조합해 전체 시스템을 구축함.&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;/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;결론적으로는 agile은 빠르게 변화하는 환경에 적합하고, Waterfall은 명확한 요구 사항이 있는 프로젝트에 적합하며, Hybrid Agile은 대규모 및 복합적인 프로젝트에, CDB는 재사용성이 중요한 경우에 효과적이다.&lt;/p&gt;</description>
      <category>IT</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/221</guid>
      <comments>https://cholink.tistory.com/221#entry221comment</comments>
      <pubDate>Tue, 15 Oct 2024 16:05:00 +0900</pubDate>
    </item>
    <item>
      <title>[Spring Boot+Vue.js] WebSocket 실시간 채팅 구현</title>
      <link>https://cholink.tistory.com/219</link>
      <description>&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;101&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4aufy/btsJGuWQEc4/1xxXaVzjWzr1AGOX9hko11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4aufy/btsJGuWQEc4/1xxXaVzjWzr1AGOX9hko11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4aufy/btsJGuWQEc4/1xxXaVzjWzr1AGOX9hko11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4aufy%2FbtsJGuWQEc4%2F1xxXaVzjWzr1AGOX9hko11%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;768&quot; height=&quot;101&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;101&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 gradle.build에 스프링 부트 웹소켓 의존성을 추가한다.&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;pre id=&quot;code_1726749154564&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
	
	@Override
	public void configureMessageBroker(MessageBrokerRegistry config) {
		config.enableSimpleBroker(&quot;/send&quot;);
	}
	
	@Override
	public void registerStompEndpoints(StompEndpointRegistry registry) {
		registry.addEndpoint(&quot;/ws&quot;)
		.setAllowedOriginPatterns(&quot;*&quot;)
		.withSockJS();
	}
	
	
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WebSocketConfig 클래스를 생성해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링 부트에서 웹 소켓을 설정해주는 클래스라고 보면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;STOMP 프로토콜을 사용해 메시지 브로커와 통신함.&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;@EnableWebSocketMessageBroker : 웹소켓 메세지 브로커를 활성화 함.&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;WebSocketMessageBrokerConfigurer : 이 인터페이스를 구현해야지 웹 소켓과 STOMP 프로토콜 설정 가능&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;config.enableSimpleBroker(&quot;/send&quot;) : 간단한 메시지 브로커를 설정함. /send로 시작하는 경로에 대해 클라이언트로 메세지를 전달할 수 있는 브로커를 만듬.&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;registry.addEndpoint(&quot;/ws&quot;) : 클라이언트가 웹 소켓 서버에 연결할 때 사용할 엔드포인트 지정&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;참고로 엔드포인트란.. 어떤 경로에 요청 및 전달을 하기 위한 URL을 뜻함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;STOMP 프로토콜이란.. 웹 소켓을 통해 메시지를 주고받을 때 사용하는 프로토콜임&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;/ws 은 웹 소켓 연결을 위한 엔드포인트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/send 은 메시지를 주고 받기 위한&amp;nbsp; STOMP 경로임&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;573&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dVZcOy/btsJFKTwYam/mw85CKBgNkUx3kM20v40fK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dVZcOy/btsJFKTwYam/mw85CKBgNkUx3kM20v40fK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dVZcOy/btsJFKTwYam/mw85CKBgNkUx3kM20v40fK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdVZcOy%2FbtsJFKTwYam%2Fmw85CKBgNkUx3kM20v40fK%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;573&quot; height=&quot;350&quot; data-origin-width=&quot;573&quot; data-origin-height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;클라이언트에서 서버측으로 요청보낼때 처리 하는 컨트롤러이다.&lt;/h3&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;570&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oXNnX/btsJES5IskH/o4sSkDnjnHomsCUBEQvVh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oXNnX/btsJES5IskH/o4sSkDnjnHomsCUBEQvVh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oXNnX/btsJES5IskH/o4sSkDnjnHomsCUBEQvVh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoXNnX%2FbtsJES5IskH%2Fo4sSkDnjnHomsCUBEQvVh0%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;577&quot; height=&quot;570&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;570&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;data() 에는 메세지 관련 정보들을 recvList 배열 담음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sendMessage() 은 사용자가 메시지를 보내는 메서드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;send() 은 STOMP 프로토콜을 사용해 서버로 메세지를 전송하는 메서드&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;send와 sendMessage는 구별하도록 하자.&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;h3 data-ke-size=&quot;size23&quot;&gt;나중에 Nginx 설정에서 포트포워딩 설정할때는 ip주소/ws 이런식으로 써줘야함.&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;요약:&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;클라이언트 &amp;rarr; 서버&lt;/b&gt;: 클라이언트가 /receive 경로로 메시지를 전송.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;서버 처리&lt;/b&gt;: 서버는 클라이언트가 보낸 메시지를 받아 SocketHandler 메서드에서 처리.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;서버 &amp;rarr; 클라이언트&lt;/b&gt;: 처리된 메시지는 /send 경로로 전송되어, 이를 구독 중인 클라이언트들이 메시지를 수신.&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;</description>
      <category>IT/파이널 프로젝트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/219</guid>
      <comments>https://cholink.tistory.com/219#entry219comment</comments>
      <pubDate>Thu, 19 Sep 2024 22:05:04 +0900</pubDate>
    </item>
    <item>
      <title>[AWS EC2] Vue.js + Spring Boot 연동 배포 과정에서 문제가 생김</title>
      <link>https://cholink.tistory.com/218</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;562&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKO1u1/btsJvvJEd2X/GfnRvL6xYfnFlkR4Hkn3xK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKO1u1/btsJvvJEd2X/GfnRvL6xYfnFlkR4Hkn3xK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKO1u1/btsJvvJEd2X/GfnRvL6xYfnFlkR4Hkn3xK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKO1u1%2FbtsJvvJEd2X%2FGfnRvL6xYfnFlkR4Hkn3xK%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;670&quot; height=&quot;562&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;562&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요청 URL을 입력하니까 다음과 같이 요청한 URL이 서버에서 찾을 수 없는 경로로 뜹니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프론트쪽이나 백엔드쪽 url 문제라 생각이드는데 일단 path에 적힌걸로 봐서는 경로는 잘 적혀있는데 ..?&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1364&quot; data-origin-height=&quot;921&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTUgv1/btsJwS4KZsd/Z776a6oHpgcJ4QlkohotI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTUgv1/btsJwS4KZsd/Z776a6oHpgcJ4QlkohotI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTUgv1/btsJwS4KZsd/Z776a6oHpgcJ4QlkohotI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTUgv1%2FbtsJwS4KZsd%2FZ776a6oHpgcJ4QlkohotI1%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;1364&quot; height=&quot;921&quot; data-origin-width=&quot;1364&quot; data-origin-height=&quot;921&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 참 이해가 안가는건데 아주 오래전에 vscode에서 작업한 초창기 vue.js 작업물이 왜 뜨는가...&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;283&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cT9HVG/btsJvSRZAu1/K3g7Z9q9j2fHk66EZw4E70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cT9HVG/btsJvSRZAu1/K3g7Z9q9j2fHk66EZw4E70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cT9HVG/btsJvSRZAu1/K3g7Z9q9j2fHk66EZw4E70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcT9HVG%2FbtsJvSRZAu1%2FK3g7Z9q9j2fHk66EZw4E70%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;597&quot; height=&quot;283&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;283&quot;/&gt;&lt;/span&gt;&lt;/figure&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;&lt;span&gt;port&lt;/span&gt;: &lt;span&gt;9000&lt;/span&gt;,&amp;nbsp; --&amp;gt;&lt;span&gt;&amp;nbsp;Vue.js 개발 서버가 실행될 포트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 Proxy 설정을 했고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/api로 시작하는 요청을 보내면 이 요청은 프록시를 통해 지정된 target으로 전달함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;target은 저기 써져있듯이 EC2 인스턴스 주소임.&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;target: target&amp;nbsp; &amp;nbsp;--&amp;gt; 프록시 요청이 전달될 백엔드 서버의 URL을 지정했음. 이 경우 http://3.34.231.185:8787&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;pathRewrite: { &quot;^/api&quot;: &quot;&quot; } --&amp;gt; 요청 경로에서 /api를 제거함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 클라이언트가 http://localhost:9000/api/board/get-board-list.do로 요청을 보내면, 이 요청은 백엔드 서버의 http://3.34.231.185:8787/board/get-board-list.do로 전달함&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;그런데...&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;564&quot; data-origin-height=&quot;230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q8VxA/btsJvrG8zhq/mETpTPsFFcOEQFHiN8sAv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q8VxA/btsJvrG8zhq/mETpTPsFFcOEQFHiN8sAv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q8VxA/btsJvrG8zhq/mETpTPsFFcOEQFHiN8sAv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq8VxA%2FbtsJvrG8zhq%2FmETpTPsFFcOEQFHiN8sAv1%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;564&quot; height=&quot;230&quot; data-origin-width=&quot;564&quot; data-origin-height=&quot;230&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기다가 /api를 적고 사이트를 실행해보면 /api/api 중첩되는 오류가 뜸...&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5rFDj/btsJxiBUQiZ/A2hPkLWO3NhJ8NK5Iv8wSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5rFDj/btsJxiBUQiZ/A2hPkLWO3NhJ8NK5Iv8wSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5rFDj/btsJxiBUQiZ/A2hPkLWO3NhJ8NK5Iv8wSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5rFDj%2FbtsJxiBUQiZ%2FA2hPkLWO3NhJ8NK5Iv8wSk%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;660&quot; height=&quot;295&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;295&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;일단 아까 그 긴 도메인 주소가아니라 IP를 수정해봤음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;proxy_pass http://3.34.231.185:8787;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/api 요청을 http://3.34.231.185:8787로 프록시함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, Nginx가 API 요청을 백엔드 서버로 전달함&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;309&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wGJ2k/btsJvgFWgA8/LM4EjfKOQWst8d0jlpEkSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wGJ2k/btsJvgFWgA8/LM4EjfKOQWst8d0jlpEkSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wGJ2k/btsJvgFWgA8/LM4EjfKOQWst8d0jlpEkSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwGJ2k%2FbtsJvgFWgA8%2FLM4EjfKOQWst8d0jlpEkSK%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;701&quot; height=&quot;309&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;309&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;이대로 서버측에 전달 받으면 대충 URL 요청이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;http://3.34.231.185:8787/api/board/get-board-list.do 가 될텐데&amp;nbsp;&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;&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;/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;/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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLzbeG/btsJvysRl7O/By0oczibWKstJxb82yfWhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLzbeG/btsJvysRl7O/By0oczibWKstJxb82yfWhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLzbeG/btsJvysRl7O/By0oczibWKstJxb82yfWhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLzbeG%2FbtsJvysRl7O%2FBy0oczibWKstJxb82yfWhK%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;685&quot; height=&quot;322&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 vue.js는 이렇게 설정햇음 ㅇㅇ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;273&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4aHsn/btsJvr77c1X/awiv9Uwg6YMoIjQF0SwVd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4aHsn/btsJvr77c1X/awiv9Uwg6YMoIjQF0SwVd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4aHsn/btsJvr77c1X/awiv9Uwg6YMoIjQF0SwVd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4aHsn%2FbtsJvr77c1X%2Fawiv9Uwg6YMoIjQF0SwVd0%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;463&quot; height=&quot;273&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;273&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 get방식으로 서버측으로 보내는 경로인데 잘보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/api =&lt;span style=&quot;color: #98c379; background-color: #282c34; letter-spacing: 0px;&quot;&gt;http://3.34.231.185:8787&amp;nbsp; 인것임&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;span style=&quot;background-color: #ffffff; color: #212121; text-align: left;&quot;&gt;http://3.34.231.185/api/board/get-board-list.do의 형태로 클라이언트에서 요청을 보낸다는 말임&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 style=&quot;background-color: #ffffff; color: #212121; text-align: left;&quot;&gt;자 그럼 어디로 가느냐??&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5rFDj/btsJxiBUQiZ/A2hPkLWO3NhJ8NK5Iv8wSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5rFDj/btsJxiBUQiZ/A2hPkLWO3NhJ8NK5Iv8wSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5rFDj/btsJxiBUQiZ/A2hPkLWO3NhJ8NK5Iv8wSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5rFDj%2FbtsJxiBUQiZ%2FA2hPkLWO3NhJ8NK5Iv8wSk%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;660&quot; height=&quot;295&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;295&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;&lt;span style=&quot;background-color: #ffffff; color: #212121; text-align: left;&quot;&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;http://3.34.231.185/api/board/get-board-list.do 요청은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;http:// 3.34.231.185:8787/board/get-board-list.do로 변경되어 Spring Boot 애플리케이션으로 전달됨&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;h3 data-ke-size=&quot;size23&quot;&gt;요청 흐름&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Vue.js에서 http://3.34.231.185/api/board/get-board-list.do로 요청을 보냄&lt;/li&gt;
&lt;li&gt;Nginx에서 이 요청을 http:// 3.34.231.185 :8787/board/get-board-list.do로 변경하여 Spring Boot 애플리케이션으로 전달&lt;/li&gt;
&lt;li&gt;Spring Boot의 BoardController가 최종적으로 GET /api/board/get-board-list.do 경로로 들어온 요청을 처리함..&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이해하고잇는게 맞는지를 모르겟음&lt;/p&gt;</description>
      <category>IT/파이널 프로젝트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/218</guid>
      <comments>https://cholink.tistory.com/218#entry218comment</comments>
      <pubDate>Mon, 9 Sep 2024 20:20:56 +0900</pubDate>
    </item>
    <item>
      <title>[Github] Generic High Entropy Secret exposed on GitHub 해결 방법</title>
      <link>https://cholink.tistory.com/217</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;583&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7Aeg0/btsJn9lhiAo/dmnELKzDPYk53IDOY7kvP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7Aeg0/btsJn9lhiAo/dmnELKzDPYk53IDOY7kvP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7Aeg0/btsJn9lhiAo/dmnELKzDPYk53IDOY7kvP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7Aeg0%2FbtsJn9lhiAo%2FdmnELKzDPYk53IDOY7kvP1%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;583&quot; height=&quot;419&quot; data-origin-width=&quot;583&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;/figure&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;Generic High Entropy Secret exposed on GitHub ??????????????&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;그대로 Fix This Secret Leak 버튼을 눌러봤음&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;503&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RFwl5/btsJntYOeIj/PJ6AmKNItObmBCwjsiTli1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RFwl5/btsJntYOeIj/PJ6AmKNItObmBCwjsiTli1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RFwl5/btsJntYOeIj/PJ6AmKNItObmBCwjsiTli1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRFwl5%2FbtsJntYOeIj%2FPJ6AmKNItObmBCwjsiTli1%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;1157&quot; height=&quot;503&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;503&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요약을 하자면, 내가 Vue.js 코드에 Open API를 썻는데, 이게 보안상 문제 이슈가 되어서 깃허브 측에서 알려준것임&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnO4wC/btsJoZI5Ke2/zrLKAwN4YpFQfMGslipoK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnO4wC/btsJoZI5Ke2/zrLKAwN4YpFQfMGslipoK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnO4wC/btsJoZI5Ke2/zrLKAwN4YpFQfMGslipoK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnO4wC%2FbtsJoZI5Ke2%2FzrLKAwN4YpFQfMGslipoK1%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;779&quot; height=&quot;316&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;316&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해결 방법은 Vue.js 프로젝트의 루트 디렉토리에 .env 파일을 생성하고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;API 키와 같은 민감한 정보를 코드에 직접 포함하지 않고, 환경 변수로 관리하는 것이다.&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;pre id=&quot;code_1725250184386&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        const cryptoCompareResponse = await fetch(
          `https://min-api.cryptocompare.com/data/pricemulti?fsyms=BTC,ETH,XRP,SOL,DOGE,TRX,WLD,BNB,AVAX,NEAR,MATIC,LINK,DOT,TON,ADA,SUI&amp;amp;tsyms=KRW&amp;amp;api_key=${process.env.VUE_APP_CRYPTO_API_KEY}`
        );&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #282c34; color: #abb2bf;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;VUE_APP_CRYPTO_API_KEY&lt;/span&gt;&lt;/div&gt;
&lt;/div&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yicXi/btsJn802Bvt/Wkuxkvw3IqbyED50qC5a3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yicXi/btsJn802Bvt/Wkuxkvw3IqbyED50qC5a3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yicXi/btsJn802Bvt/Wkuxkvw3IqbyED50qC5a3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyicXi%2FbtsJn802Bvt%2FWkuxkvw3IqbyED50qC5a3K%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;382&quot; height=&quot;124&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;124&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gitignore 에&amp;nbsp; ..env를 추가하고 커밋하면&amp;nbsp; 끝&lt;/p&gt;</description>
      <category>IT/파이널 프로젝트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/217</guid>
      <comments>https://cholink.tistory.com/217#entry217comment</comments>
      <pubDate>Mon, 2 Sep 2024 13:13:30 +0900</pubDate>
    </item>
    <item>
      <title>Vue.js 파일 디렉토리 구조 이해</title>
      <link>https://cholink.tistory.com/216</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;&amp;nbsp;&lt;/p&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-origin-width=&quot;257&quot; data-origin-height=&quot;576&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c46Gk7/btsJfRLadhu/lmv0C1bfwBJIfRNpEph5RK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c46Gk7/btsJfRLadhu/lmv0C1bfwBJIfRNpEph5RK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c46Gk7/btsJfRLadhu/lmv0C1bfwBJIfRNpEph5RK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc46Gk7%2FbtsJfRLadhu%2Flmv0C1bfwBJIfRNpEph5RK%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;257&quot; height=&quot;576&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;576&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. public 디렉토리 구조&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 처음 로드되는 기본 html 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적인 html과 동일하며, 하단 div 태그의 id 값인 &quot;App&quot;을 통해서 뷰가 호출되어 보여지게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &quot;App&quot;을 통해서 호출되는 관련된 내용을 없애거나 div 태그를 없애고 단순히 &quot;HelloWorld&quot;를 입력하게 되면 helloworld만 보이게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1724502213429&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;&quot;&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;utf-8&quot; /&amp;gt;
    &amp;lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot; /&amp;gt;
    &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,initial-scale=1.0&quot; /&amp;gt;
    &amp;lt;link rel=&quot;icon&quot; href=&quot;&amp;lt;%= BASE_URL %&amp;gt;favicon.ico&quot; /&amp;gt;
    &amp;lt;title&amp;gt;&amp;lt;%= htmlWebpackPlugin.options.title %&amp;gt;&amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;noscript&amp;gt;
      &amp;lt;strong
        &amp;gt;We're sorry but &amp;lt;%= htmlWebpackPlugin.options.title %&amp;gt; doesn't work
        properly without JavaScript enabled. Please enable it to
        continue.&amp;lt;/strong
      &amp;gt;
    &amp;lt;/noscript&amp;gt;
    &amp;lt;div id=&quot;app&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;!-- built files will be auto injected --&amp;gt;
    &amp;lt;h1&amp;gt;ewqe&amp;lt;/h1&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. src 디렉토리 구조&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) assets&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;초기에는 이미지만 저장이 되어 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;보통 기타 부수적인 내용의 파일 및 폴더를 만들어 넣어놓는 디렉토리 대표적으로 css, image 등이 있습니다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;126&quot; data-origin-height=&quot;65&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUNeR6/btsJebxATO2/NgBeTP8Xxm83qb3a7ysCI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUNeR6/btsJebxATO2/NgBeTP8Xxm83qb3a7ysCI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUNeR6/btsJebxATO2/NgBeTP8Xxm83qb3a7ysCI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUNeR6%2FbtsJebxATO2%2FNgBeTP8Xxm83qb3a7ysCI1%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;126&quot; height=&quot;65&quot; data-origin-width=&quot;126&quot; data-origin-height=&quot;65&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;h4 data-ke-size=&quot;size20&quot;&gt;2) components (컴포넌트)&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;각각의 기능 및 웹 페이지들의 화면을 구성할 컴포넌트들로 구성되어 있으며, 새로운 html파일의 내용을 생성해 호출할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;각 페이지를 독립적으로 생성하되 호출은 한 곳에서 진행한다고 이해하면 됩니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 유형, 기능별로 나누어 생성하게 되면 프로젝트의 규모가 커져도 유지보수에 용이하고 디버깅도 수월하게 진행할 수 있음,, vue를 쓰는 이유,,,&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이것을 우리는 싱글 페이지 어플리케이션(SPA-Single Page Application)이라고 부릅니다&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;3) App.vue&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;App.vue 파일은 최상위 컴포넌트이다. 본 어플리케이션의 전체 레이아웃은 상단 메뉴부와 컨텐츠부로 구성된다. 컨텐츠부는 vue.router를 통해 처리된다.&lt;/span&gt;&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;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;873&quot; data-origin-height=&quot;605&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUHkJ6/btsJfNPARmu/HRBZLXiRrTYpgvlidyjtlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUHkJ6/btsJfNPARmu/HRBZLXiRrTYpgvlidyjtlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUHkJ6/btsJfNPARmu/HRBZLXiRrTYpgvlidyjtlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUHkJ6%2FbtsJfNPARmu%2FHRBZLXiRrTYpgvlidyjtlK%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;873&quot; height=&quot;605&quot; data-origin-width=&quot;873&quot; data-origin-height=&quot;605&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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;4) main.js&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;main.js 파일은 애플리케이션의 진입점 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;최상위 컨테이너 뷰인 App.vue 파일을 로드하는 구조로 구성됨&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;466&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LfMkj/btsJdppLJiY/Flpqk5rzkK7cUiH0yXlROk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LfMkj/btsJdppLJiY/Flpqk5rzkK7cUiH0yXlROk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LfMkj/btsJdppLJiY/Flpqk5rzkK7cUiH0yXlROk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLfMkj%2FbtsJdppLJiY%2FFlpqk5rzkK7cUiH0yXlROk%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;732&quot; height=&quot;466&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;466&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;간단하게 보자면 아래와 같이 순차적으로 호출하여 불러오고 있는 것이다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; 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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGxlWL/btsJejPXJ5z/D0oyUXxNzK5KqUkM58q9K1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGxlWL/btsJejPXJ5z/D0oyUXxNzK5KqUkM58q9K1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGxlWL/btsJejPXJ5z/D0oyUXxNzK5KqUkM58q9K1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGxlWL%2FbtsJejPXJ5z%2FD0oyUXxNzK5KqUkM58q9K1%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;800&quot; height=&quot;426&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;426&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;h4 id=&quot;4-vueconfigjs-구조&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;5. vue.config.js 구조&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;vue에 대한 설정(웹팩 등)을 하기 위한 환경설정 파일입니다.&lt;/p&gt;
&lt;h4 id=&quot;5-gitignore&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;6. .gitignore&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;깃에서 특정 파일 혹은 디렉토리를 관리 대상에서 제외할 때 사용하는 파일입니다.&lt;br /&gt;파일 안에 기입된 내용들은 깃에서 관리하지 않으며, 자동으로 생성되는 로그파일, 프로젝트 설정 파일 등을 관리 대상에서 제외할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;❗ 이미 업로드된 파일(폴더)를 제외한 경우 다시 커밋해야 적용됨.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;6-babelconfigjs-바벨&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;7. babel.config.js (바벨)&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;개발자들이 실행 환경에 구애받지 않고 항상 최신 문법의 자바스크립트로 코딩할 수 있도록 도와주는 유용한 도구이다. (쉽게 말해 제이쿼리 같은 느낌,,?)&lt;br /&gt;​&lt;/p&gt;
&lt;h4 id=&quot;7-package-lockjson&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;8. package-lock.json&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;package-lock.json은 npm을 사용하여 &quot;package.json&quot; 파일을 또는 &quot;node_modules&quot; 트리를 수정하면 자동으로 생성되는 파일이다. 한마디로 파일이 생성되는 시점의 의존성 트리에 대한 정보를 가지고 있다. 혹 업데이트된 버전이 오류를 발생시키는 경우가 있기 때문에 안정성을 위해 &quot;package-lock.json&quot;은 매우 중요한 파일이다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;​&lt;/p&gt;
&lt;h4 id=&quot;8-packagejson&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;9. package.json&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;package.json은 프로젝트 정보와 의존성(dependencies)을 관리하는 문서이다.&lt;br /&gt;패키지, 버전이 기록되어 있어 관리하기 쉬움&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;​&lt;/p&gt;
&lt;h4 id=&quot;9-readmemd&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;10. Readme.md&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;깃(깃허브)과 같은 저장소에서 프로젝트에 대한 설명을 기입하도록 하는 파일. 일반적으로 소프트웨어와 함께 배포한다.&lt;/p&gt;</description>
      <category>IT/파이널 프로젝트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/216</guid>
      <comments>https://cholink.tistory.com/216#entry216comment</comments>
      <pubDate>Sat, 24 Aug 2024 21:34:21 +0900</pubDate>
    </item>
    <item>
      <title>[Spring Boot]스프링 부트 &amp;amp; Vue.js 프로젝트 연동</title>
      <link>https://cholink.tistory.com/215</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H0u3y/btsJdALl2YV/LuUakoVH6dfBK6OHjgDMe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H0u3y/btsJdALl2YV/LuUakoVH6dfBK6OHjgDMe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H0u3y/btsJdALl2YV/LuUakoVH6dfBK6OHjgDMe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH0u3y%2FbtsJdALl2YV%2FLuUakoVH6dfBK6OHjgDMe0%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;574&quot; height=&quot;245&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링 부트와 Vue.js 연동 하는 방법에 대해 알아보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선은 이러한 방법으로 연동하게 되면 깃허브에 올려둬야할 레포지트리는 총 2개이다&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;저는 인텔리제이를 안쓰고 STS(이클립스)를 쓰고 vscode를 쓰겠습니다.&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cExnqn/btsJdqvclge/icJt9aoSyQfRqZJFugWPDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cExnqn/btsJdqvclge/icJt9aoSyQfRqZJFugWPDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cExnqn/btsJdqvclge/icJt9aoSyQfRqZJFugWPDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcExnqn%2FbtsJdqvclge%2FicJt9aoSyQfRqZJFugWPDk%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;747&quot; height=&quot;567&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;567&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;우리는 스프링 부트라는 프로젝트를 생성해야하니, File - New - Spring Starter Project를 클릭합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;749&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cO2yxF/btsJe7AUaZb/rzKYdwd02O54p0VrCtjVg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cO2yxF/btsJe7AUaZb/rzKYdwd02O54p0VrCtjVg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cO2yxF/btsJe7AUaZb/rzKYdwd02O54p0VrCtjVg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcO2yxF%2FbtsJe7AUaZb%2FrzKYdwd02O54p0VrCtjVg0%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;547&quot; height=&quot;749&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;749&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Name 칸에는 본인이 정하고 싶은 프로젝트명을 적습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jdk는 17버전을 씁니다.&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;748&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciBryE/btsJeCOWti8/0K19T62BUGfku0e50Mrpk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciBryE/btsJeCOWti8/0K19T62BUGfku0e50Mrpk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciBryE/btsJeCOWti8/0K19T62BUGfku0e50Mrpk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciBryE%2FbtsJeCOWti8%2F0K19T62BUGfku0e50Mrpk1%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;542&quot; height=&quot;748&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;748&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vue.js와 연동을 우선시로 해야하기 때문에 2개 말고는 다른 라이브러리는 추가를 안하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추후에 필요하게 되면 하나하나씩 gradle에 추가하면 되기 때문입니다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;488&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5CsSm/btsJd7B1P0e/xWZtSKdwdI9QlsFbvnXrN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5CsSm/btsJd7B1P0e/xWZtSKdwdI9QlsFbvnXrN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5CsSm/btsJd7B1P0e/xWZtSKdwdI9QlsFbvnXrN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5CsSm%2FbtsJd7B1P0e%2FxWZtSKdwdI9QlsFbvnXrN1%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;1227&quot; height=&quot;488&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;488&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;controller 클래스 파일을 모아둘 패키지를 생성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성하고 나서 HelloController를 생성합니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1724417201911&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {
	@GetMapping(&quot;/&quot;)
	public String index() {
		return &quot;index.html&quot;;
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성된 HelloController에 다음과 같은 코드를 적어줍시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접속 시 Vue.js 빌드에 의해 생성되는 index.html을 리턴합니다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbt0wM/btsJfchVhFe/sL9gOYt7Cs1DK8bVI0mKPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbt0wM/btsJfchVhFe/sL9gOYt7Cs1DK8bVI0mKPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbt0wM/btsJfchVhFe/sL9gOYt7Cs1DK8bVI0mKPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbbt0wM%2FbtsJfchVhFe%2FsL9gOYt7Cs1DK8bVI0mKPk%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;916&quot; height=&quot;432&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;432&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt;프론트엔드(Vue.js) 포트와의 충돌을 방지하기 위해 서버의 포트번호를 80으로 변경합니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwZUtD/btsJeSKO305/1PFNlKVsK10EubjKyBiuf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwZUtD/btsJeSKO305/1PFNlKVsK10EubjKyBiuf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwZUtD/btsJeSKO305/1PFNlKVsK10EubjKyBiuf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwZUtD%2FbtsJeSKO305%2F1PFNlKVsK10EubjKyBiuf0%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;386&quot; height=&quot;402&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;402&quot;/&gt;&lt;/span&gt;&lt;/figure&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 vscode로 넘어가서 프론트엔드 Vue.js 프로젝트를 생성해보겠습니다.&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbWSdl/btsJfnpWhv6/JRLokQT1A5Z99IOcfGF72K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbWSdl/btsJfnpWhv6/JRLokQT1A5Z99IOcfGF72K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbWSdl/btsJfnpWhv6/JRLokQT1A5Z99IOcfGF72K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbWSdl%2FbtsJfnpWhv6%2FJRLokQT1A5Z99IOcfGF72K%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;371&quot; height=&quot;264&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;File - Open Folder로 들어가서 &lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt;전에 생성한 Spring Boot 프로젝트를 열어 봅시다.&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;&amp;nbsp;&lt;/p&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-origin-width=&quot;1242&quot; data-origin-height=&quot;745&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OCuEp/btsJe6aXpZn/P2opu2lDkof9pvLcaB3puK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OCuEp/btsJe6aXpZn/P2opu2lDkof9pvLcaB3puK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OCuEp/btsJe6aXpZn/P2opu2lDkof9pvLcaB3puK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOCuEp%2FbtsJe6aXpZn%2FP2opu2lDkof9pvLcaB3puK%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;1242&quot; height=&quot;745&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;745&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt;Spring Boot 프로젝트를 vscode에서 열었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt;그리고 터미널 창을 띄어서&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1724417623582&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vue create final-btc-frontend&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vue create 프로젝트명&amp;nbsp; &amp;lt;&amp;lt; 을 입력해서 Vue.js 프로젝트를 생성합니다.&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQvkN0/btsJfBuLeRi/ZPuwJsxR2rpLaP7g9t47sK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQvkN0/btsJfBuLeRi/ZPuwJsxR2rpLaP7g9t47sK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQvkN0/btsJfBuLeRi/ZPuwJsxR2rpLaP7g9t47sK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQvkN0%2FbtsJfBuLeRi%2FZPuwJsxR2rpLaP7g9t47sK%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;425&quot; height=&quot;152&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8mAYP/btsJfACCSfq/fiUhJbnmgYB0mZKfJhdblK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8mAYP/btsJfACCSfq/fiUhJbnmgYB0mZKfJhdblK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8mAYP/btsJfACCSfq/fiUhJbnmgYB0mZKfJhdblK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8mAYP%2FbtsJfACCSfq%2FfiUhJbnmgYB0mZKfJhdblK%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;631&quot; height=&quot;372&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;372&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;&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;File - Open Folder 에서 생성된 프론티엔트 파일을 열어줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;657&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VJAyx/btsJeDtxAPt/jbaUFaxxF0AI7UP69oOq31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VJAyx/btsJeDtxAPt/jbaUFaxxF0AI7UP69oOq31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VJAyx/btsJeDtxAPt/jbaUFaxxF0AI7UP69oOq31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVJAyx%2FbtsJeDtxAPt%2FjbaUFaxxF0AI7UP69oOq31%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;992&quot; height=&quot;657&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;657&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;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1724417920002&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm run serve&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vue 프로젝트 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;417&quot; data-origin-height=&quot;210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdKS0U/btsJfjumgjy/3GaTp1tlfy5V2Q94O2cZl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdKS0U/btsJfjumgjy/3GaTp1tlfy5V2Q94O2cZl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdKS0U/btsJfjumgjy/3GaTp1tlfy5V2Q94O2cZl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdKS0U%2FbtsJfjumgjy%2F3GaTp1tlfy5V2Q94O2cZl1%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;417&quot; height=&quot;210&quot; data-origin-width=&quot;417&quot; data-origin-height=&quot;210&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;692&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEYufR/btsJearB1RT/m06ctHHnlPRbejiDsgneI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEYufR/btsJearB1RT/m06ctHHnlPRbejiDsgneI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEYufR/btsJearB1RT/m06ctHHnlPRbejiDsgneI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEYufR%2FbtsJearB1RT%2Fm06ctHHnlPRbejiDsgneI1%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;950&quot; height=&quot;692&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;692&quot;/&gt;&lt;/span&gt;&lt;/figure&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;&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;span style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt;그 다음으로 Vue 프로젝트와 Spring Boot 프로젝트를 연동해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt; Vue&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;프로젝트를 빌드하여 생성된 파일들을 Spring Boot 프로젝트 내 /src/main/resource/static 하위로 빌드되어 Spring Boot 프로젝트 실행 시 생성된 Vue 프론트엔드를 보여주어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;833&quot; data-origin-height=&quot;326&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjux7w/btsJfAo5DXJ/YoJP0kvKlPLCM2vJXKeuvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjux7w/btsJfAo5DXJ/YoJP0kvKlPLCM2vJXKeuvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjux7w/btsJfAo5DXJ/YoJP0kvKlPLCM2vJXKeuvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcjux7w%2FbtsJfAo5DXJ%2FYoJP0kvKlPLCM2vJXKeuvk%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;833&quot; height=&quot;326&quot; data-origin-width=&quot;833&quot; data-origin-height=&quot;326&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1724418225380&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const { defineConfig } = require(&quot;@vue/cli-service&quot;);
module.exports = defineConfig({
  transpileDependencies: true,
  outputDir: &quot;../src/main/resources/static&quot;, //Build Directory
  devServer: {
    proxy: &quot;http://localhost&quot;, // Spring Boot Server
  },
});&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;Vue 프로젝트 빌드&lt;/p&gt;
&lt;pre id=&quot;code_1724418287750&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm run build&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;639&quot; data-origin-height=&quot;286&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DwKaD/btsJfqfUI9D/POcs2JXItcAOAke6prbPV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DwKaD/btsJfqfUI9D/POcs2JXItcAOAke6prbPV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DwKaD/btsJfqfUI9D/POcs2JXItcAOAke6prbPV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDwKaD%2FbtsJfqfUI9D%2FPOcs2JXItcAOAke6prbPV1%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;639&quot; height=&quot;286&quot; data-origin-width=&quot;639&quot; data-origin-height=&quot;286&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;&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;477&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7Ui5V/btsJfbpJOUz/llmnoN7M2ZTneQIomE9Yi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7Ui5V/btsJfbpJOUz/llmnoN7M2ZTneQIomE9Yi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7Ui5V/btsJfbpJOUz/llmnoN7M2ZTneQIomE9Yi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7Ui5V%2FbtsJfbpJOUz%2FllmnoN7M2ZTneQIomE9Yi0%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;477&quot; height=&quot;460&quot; data-origin-width=&quot;477&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;STS에서 프로젝트를 새로고침(F5)를 눌러 줍니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;440&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmcBu1/btsJemZVUT0/l8Xm8Fjv0E2wCh2bqlgls1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmcBu1/btsJemZVUT0/l8Xm8Fjv0E2wCh2bqlgls1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmcBu1/btsJemZVUT0/l8Xm8Fjv0E2wCh2bqlgls1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmcBu1%2FbtsJemZVUT0%2Fl8Xm8Fjv0E2wCh2bqlgls1%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;440&quot; height=&quot;435&quot; data-origin-width=&quot;440&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;/figure&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;gt; Run As -&amp;gt; Spring Boot App&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1041&quot; data-origin-height=&quot;667&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sVTKC/btsJfzqbmIQ/pnjtDP0ZaKv1ZW9cKTm0tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sVTKC/btsJfzqbmIQ/pnjtDP0ZaKv1ZW9cKTm0tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sVTKC/btsJfzqbmIQ/pnjtDP0ZaKv1ZW9cKTm0tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsVTKC%2FbtsJfzqbmIQ%2FpnjtDP0ZaKv1ZW9cKTm0tk%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;1041&quot; height=&quot;667&quot; data-origin-width=&quot;1041&quot; data-origin-height=&quot;667&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt;http://localhost:80 접속 시 Vue로 생성된 화면이 출력됩니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt; 이렇게 Spring Boot(백엔드)와 Vue(프론트엔드)를 간단하게나마 연동해 개발환경을 구축해보았습니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt;Vue(프론트엔드) 개발 시 Spring Boot 서버를 띄워놓은 상태로 데이터를 조회하여 Vue로 화면이나 데이터를 보여주는 방식으로 개발을 진행하면 됩니다&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT/파이널 프로젝트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/215</guid>
      <comments>https://cholink.tistory.com/215#entry215comment</comments>
      <pubDate>Fri, 23 Aug 2024 22:23:40 +0900</pubDate>
    </item>
    <item>
      <title>가상화폐 거래소를 만들어 보자.</title>
      <link>https://cholink.tistory.com/214</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;아무래도 혼자서 해야하고 빠른 시일내로 만들어야 하는 조건이 있어서 팀 프로젝트처럼 거대한 프로젝트는 만들지 못한다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1446&quot; data-origin-height=&quot;814&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rUjF0/btsJcKeMpp0/lujKmUxiKZeMTEHrmMUb00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rUjF0/btsJcKeMpp0/lujKmUxiKZeMTEHrmMUb00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rUjF0/btsJcKeMpp0/lujKmUxiKZeMTEHrmMUb00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrUjF0%2FbtsJcKeMpp0%2FlujKmUxiKZeMTEHrmMUb00%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;1446&quot; height=&quot;814&quot; data-origin-width=&quot;1446&quot; data-origin-height=&quot;814&quot;/&gt;&lt;/span&gt;&lt;/figure&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;가상자산 실시간 시세 Open API를 활용해서 시세를 보여주는 기능과 WebSocket을 사용한 실시간 채팅 기능까지만 만들어보려고 한다.&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;/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;우선 프론트 화면은 React.js로 구성해야할거같다.&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;여기서 문제점은 IntellJ 유료 버전에선 리액트와 스프링을 쓸 수 있는데 무료버전에서는 기능 제한이 되어버렸다.&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;그래서 STS(이클립스)와 vscode를 활용해야한다.&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;깃허브 레포지토리도 프론트 저장소 따로 백엔드 저장소 따로 총 2개를 분리해야한다.&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;기술스택은 변동될 수 있으나 일단 현업 개발자분들의 조언을 듣고 다시 구성을 해봐야겠다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/파이널 프로젝트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/214</guid>
      <comments>https://cholink.tistory.com/214#entry214comment</comments>
      <pubDate>Thu, 22 Aug 2024 16:16:45 +0900</pubDate>
    </item>
    <item>
      <title>[Kotlin] 코틀린 함수</title>
      <link>https://cholink.tistory.com/213</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1724149389900&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Kotlin IDE REPL support is experimental. It may be slow or unstable. Please, report problems to https://youtrack.jetbrains.com/issues/KTIJ.
Welcome to Kotlin version 1.9.0-release-358 (JRE 17.0.8+9-LTS-211)
Type :help for help, :quit for quit

fun max(a: Int, b: Int) : Int {
     return if (a&amp;gt;b) a else b
 }
 println(max(1,2))
2

// 블록이 본문인 함수&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;다음과 같은 코드를 한 번 살펴보자.&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;함수의 선언은 fun 키워드로 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fun 다음에는 함수의 이름이 온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 괄호 안에는 a:Int , b: Int와 같은 파라미터 목록이 온다.&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;그리고 자바의 3항 연사자로 (a&amp;gt;b) ? a : b 식과 비슷한 코드를 작성하고 결과를 리턴시킴.&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;fun max(a: Int, b: Int) : Int = if (a&amp;gt;b) a else b - &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;b&gt;블록이 본문인 함수&lt;/b&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;h2 data-ke-size=&quot;size26&quot;&gt;타입 추론&lt;/h2&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;</description>
      <category>Kotlin</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/213</guid>
      <comments>https://cholink.tistory.com/213#entry213comment</comments>
      <pubDate>Tue, 20 Aug 2024 19:36:56 +0900</pubDate>
    </item>
    <item>
      <title>자바(Java)-코틀린(Kotlin) 변환기</title>
      <link>https://cholink.tistory.com/212</link>
      <description>&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;기존 자바 프로젝트에 코틀린을 도입하고 싶을 때 변환기를 사용하면 쓸모가 있음.&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;인텔리J 아이디어에서 변환기를 사용하기는 쉽다.&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;857&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mfbgR/btsI7qnqyax/Rq0qOUWYLLXWuA2FPKCjH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mfbgR/btsI7qnqyax/Rq0qOUWYLLXWuA2FPKCjH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mfbgR/btsI7qnqyax/Rq0qOUWYLLXWuA2FPKCjH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmfbgR%2FbtsI7qnqyax%2FRq0qOUWYLLXWuA2FPKCjH0%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;727&quot; height=&quot;857&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;857&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Kotlin</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/212</guid>
      <comments>https://cholink.tistory.com/212#entry212comment</comments>
      <pubDate>Sun, 18 Aug 2024 20:53:10 +0900</pubDate>
    </item>
    <item>
      <title>[Kotlin] 코틀린 맛보기</title>
      <link>https://cholink.tistory.com/210</link>
      <description>&lt;pre id=&quot;code_1723727102382&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;data class Person(val name: String, val age: Int? = null)
fun main(args: Array&amp;lt;String&amp;gt;) {
    val persons = listOf(Person(&quot;영희&quot;), Person(&quot;철수&quot;, age=29))
    
    val oldest = persons.maxBy { it.age ?: 0}
    println(&quot;나이가 가장 많은 사람: $oldest&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;name와 age라는 프로퍼티가 들어간 데이터 클래스를 정의 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;age의 디폴트 값은 null로 지정했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사람이라는 리스트를 만들었는데 영희의 나이는 지정하지 않았기 때문에 null 값이 들어감.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리스트에서 가장 나이가 많은 사람을 찾기 위해 우리느 maxBy 함수를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;maxBy 함수에는 it.age ?: 0 이라는 람다식을 쓰는데, age가 0일 경우에는 0을 반환하고 그렇지 않은 경우에는 age의 값을 반환해준다는 식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로, 영희의 null은 0으로 반환되기 때문에 나이가 가장 많은 사람은 철수가 된다.&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;코틀린은 Null이 될 수 있는 타입을 지원한다는 중요한 특성이 있다.&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;코틀린 타입 시스템은 null 값을 정확히 추적하며 널 포인터로 인해 생기는 문제를 줄여준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바에서 Null PointerException을 일으키는 유형의 코드는 대부분 코틀린에서는 컴파일도 되지 않는다.&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;/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;Getter, Setter, 생성자 파라미터를 필드에 대입하기 위한 로직 등 자바에 존재하는 여러 가지 번거러운 준비 코드를 코틀린은 묵시적으로 제공하기 때문에 코틀린 소스코드는 그런 준비 코드로 인해 지저분해지는 일이 없다.&lt;/p&gt;</description>
      <category>Kotlin</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/210</guid>
      <comments>https://cholink.tistory.com/210#entry210comment</comments>
      <pubDate>Thu, 15 Aug 2024 22:35:44 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] PV, VG, LV 명령어</title>
      <link>https://cholink.tistory.com/209</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Physical Volume (PV) 관련 명령어&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;pvremove&lt;/b&gt;: 물리적 볼륨(PV)을 제거합니다. 물리적 볼륨에서 LVM 메타데이터를 제거하여 더 이상 LVM에서 사용되지 않도록 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;pvchange&lt;/b&gt;: 물리적 볼륨의 속성을 변경합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;pvs&lt;/b&gt;: 시스템의 모든 물리적 볼륨에 대한 요약 정보를 표시합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;pvdisplay&lt;/b&gt;: 물리적 볼륨에 대한 자세한 정보를 표시합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;pvscan&lt;/b&gt;: 시스템의 모든 물리적 볼륨을 검색하여 목록을 갱신합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Volume Group (VG) 관련 명령어&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;vgcreate&lt;/b&gt;: 새로운 볼륨 그룹(VG)을 만듭니다. 여러 개의 물리적 볼륨을 하나의 논리적 볼륨 그룹으로 결합할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;vgremove&lt;/b&gt;: 볼륨 그룹을 제거합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;vgreduce&lt;/b&gt;: 볼륨 그룹에서 물리적 볼륨을 제거합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;vgextend&lt;/b&gt;: 볼륨 그룹에 물리적 볼륨을 추가하여 크기를 확장합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;vgchange&lt;/b&gt;: 볼륨 그룹의 속성을 변경합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;vgs&lt;/b&gt;: 시스템의 모든 볼륨 그룹에 대한 요약 정보를 표시합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;vgdisplay&lt;/b&gt;: 볼륨 그룹에 대한 자세한 정보를 표시합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;vgscan&lt;/b&gt;: 시스템의 모든 볼륨 그룹을 검색하여 목록을 갱신합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Logical Volume (LV) 관련 명령어&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;lvcreate&lt;/b&gt;: 새로운 논리적 볼륨(LV)을 만듭니다. 볼륨 그룹 내에서 사용할 수 있는 공간을 기반으로 논리적 볼륨을 생성합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;lvremove&lt;/b&gt;: 논리적 볼륨을 제거합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;lvreduce&lt;/b&gt;: 논리적 볼륨의 크기를 줄입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;lvextend&lt;/b&gt;: 논리적 볼륨의 크기를 확장합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;lvchange&lt;/b&gt;: 논리적 볼륨의 속성을 변경합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;lvs&lt;/b&gt;: 시스템의 모든 논리적 볼륨에 대한 요약 정보를 표시합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;lvdisplay&lt;/b&gt;: 논리적 볼륨에 대한 자세한 정보를 표시합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;lvscan&lt;/b&gt;: 시스템의 모든 논리적 볼륨을 검색하여 목록을 갱신합니다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>IT/운영체제</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/209</guid>
      <comments>https://cholink.tistory.com/209#entry209comment</comments>
      <pubDate>Fri, 9 Aug 2024 14:48:27 +0900</pubDate>
    </item>
    <item>
      <title>파일 시스템(File System)</title>
      <link>https://cholink.tistory.com/208</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #c0d1e7;&quot;&gt;파일 시스템 이란?&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;공식 문서에서는 컴퓨터 파일의 발견 및 접근의 용이성을 위해 보관, 조직하는 체제라고만 하면 아무래도 이해하기가 어렵다..&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 그림으로 보고 이해하자면 이렇다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjG7vd/btsIZ6Po2dR/kjjsVkHQNpRiulDvZljjOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjG7vd/btsIZ6Po2dR/kjjsVkHQNpRiulDvZljjOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjG7vd/btsIZ6Po2dR/kjjsVkHQNpRiulDvZljjOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjG7vd%2FbtsIZ6Po2dR%2FkjjsVkHQNpRiulDvZljjOK%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;662&quot; height=&quot;397&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/figure&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;쉽게 말해, 파일 시스템은 컴퓨터의 &quot;디지털 서랍장&quot; 이라고 생각하면 된다.&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #c0d1e7;&quot;&gt;파일 시스템이 필요한 이유는?&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 체계적으로 조직화 함.. 파일과 디렉토리를 사용하여 데이터를 쉽게 찾을 수 있고 관리할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CRUD 기능을 편하게 쓸 수 있다&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #c0d1e7;&quot;&gt;파일 시스템 종류&lt;/span&gt;&lt;/h2&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;&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;b&gt;FAT32(File Allocation Table)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- FAT16을 보강한 것으로, 최대 2TB까지 지원함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 암호화 및 압축이 불가능하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 파일명 최대 길이는 영문 256자이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클러스트당 4KB를 사용하여 내부 단편화를 줄였다&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;NTFS(New Technology file System)&lt;/b&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;- 가변 클러스터 크기(512 ~ 64KB)이며, 기본 값은 4KB이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 트랜잭션 로깅을 통한 복구/오류 수정이 가능하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Window NT 이상에서 지원한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;EXT3(Second Extended File System) &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- EXT2에 저널링 기능 추가 및 온라인 파일 시스템이 증대됐다.&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;- 디스크 조각화를 최소화한다.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;EXT4(Second Extended File System) &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 16TB까지 파일 시스템을 지원하며, 볼륨은 1엑사바이트(Exabyte)까지 지원한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Block Mapping 방식 및 Extends 방식을 지원한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 저널 Checksum 기능이 추가되어 안정성이 강화되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 하위 호환성 지원 : exy3, ext2와 호환 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Delayed allocation : 디스크에 쓰이기 전까지 블록 할당을 미루는 기술로 조각화 방지에 효과적&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 온라인 조각 모음 : 조각화 방지를 위한 커널 레벨의 기술&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Persistentt pre-allocation : 파일 전체만큼의 공간은 사전 할당, 스트리밍, 데이터 베이스 등에 유용&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;UFS(Unix File System)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- VTOC 디스크 레이블 : 각 파티션의 기본 정보&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;- 백업 슈퍼블록 : 각 실린더마다 슈퍼블록에 대한 복사본을 가짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 실린더 그룹 : 슈퍼블록, 실린더 그룹 블록, i-node 테이블, 데이터 블록을 포함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 슈퍼블록 :&amp;nbsp; 파일 시스템 크기, i-node 테이블의 크기, free 블록 리스트 등 파일 시스템 관리 정보&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 실린더 그룹 블록 : 실린더 그룹 내의 유효 블록들의 비트맵 정보나 통계 정보&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- i-node 테이블 : 파일에 대한 중요한 정보, 파일크기, 위치, 유형, 사용 허가권, 날짜 정보&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;HFS+/APFS (Hierarchical File System Plus/Apple File System):&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- macOS에서 사용되는 파일 시스템입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- HFS+는 macOS의 기본 파일 시스템이었으며, APFS는 이를 대체하는 파일 시스템으로, 성능과 보안, 효율성을 크게 개선했습니다.&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;exFAT (Extended File Allocation Table):&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- FAT32의 확장판으로, 파일 크기와 디스크 크기 제한이 완화되어 대용량 파일과 디스크에 적합합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Windows와 macOS 모두에서 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/운영체제</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/208</guid>
      <comments>https://cholink.tistory.com/208#entry208comment</comments>
      <pubDate>Fri, 9 Aug 2024 14:23:26 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 Destination Host Unreachable 원인과 해결방법</title>
      <link>https://cholink.tistory.com/207</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;221&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vDGKC/btsIYcPHAJg/0RJhNvKk4gmH0OmyAtJ5qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vDGKC/btsIYcPHAJg/0RJhNvKk4gmH0OmyAtJ5qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vDGKC/btsIYcPHAJg/0RJhNvKk4gmH0OmyAtJ5qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvDGKC%2FbtsIYcPHAJg%2F0RJhNvKk4gmH0OmyAtJ5qk%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;648&quot; height=&quot;221&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;221&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;VM 끼리 혹은 호스트 PC와 VM 끼리 통신할 때 막막한 오류를 발견 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서로에게 핑을 보냈는데 Destination Host Unreachable 라는 문구가 뜨면서 핑이 도달하지 못하는 에러였다.&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;h3 data-ke-size=&quot;size23&quot;&gt;1. &lt;span style=&quot;color: #ef5369;&quot;&gt;방화벽&lt;/span&gt; 문제&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;409&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDgnpm/btsIXcc6A5o/wAZuGxaT633rpm5u0Rkz3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDgnpm/btsIXcc6A5o/wAZuGxaT633rpm5u0Rkz3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDgnpm/btsIXcc6A5o/wAZuGxaT633rpm5u0Rkz3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDgnpm%2FbtsIXcc6A5o%2FwAZuGxaT633rpm5u0Rkz3k%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;688&quot; height=&quot;409&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;409&quot;/&gt;&lt;/span&gt;&lt;/figure&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;아무래도 다른 외부망과의 통신 문제에 있어서는 방화벽의 중요성이 있으니까..&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;h3 data-ke-size=&quot;size23&quot;&gt;2. &lt;span style=&quot;color: #ef5369;&quot;&gt;Visual Studio C++&lt;/span&gt; 파일 부재&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/llPwf/btsIYzrtjqf/WEvWlpYgkvLKwT1vBlRSKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/llPwf/btsIYzrtjqf/WEvWlpYgkvLKwT1vBlRSKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/llPwf/btsIYzrtjqf/WEvWlpYgkvLKwT1vBlRSKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FllPwf%2FbtsIYzrtjqf%2FWEvWlpYgkvLKwT1vBlRSKK%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;805&quot; height=&quot;355&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;355&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시나 빠져 있는 C++ 파일이 있는지 제어판에서 확인해본다.&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;h3 data-ke-size=&quot;size23&quot;&gt;3. &lt;span style=&quot;color: #ef5369;&quot;&gt;네트워크&lt;/span&gt; 설정&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;428&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYdau6/btsIZaLwx8U/sjAouP7wmBecJ2oRRB4kKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYdau6/btsIZaLwx8U/sjAouP7wmBecJ2oRRB4kKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYdau6/btsIZaLwx8U/sjAouP7wmBecJ2oRRB4kKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYdau6%2FbtsIZaLwx8U%2FsjAouP7wmBecJ2oRRB4kKK%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;1107&quot; height=&quot;428&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;428&quot;/&gt;&lt;/span&gt;&lt;/figure&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;보통 디폴트 값으로 되어있는데 이 문제는 아니다&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;h3 data-ke-size=&quot;size23&quot;&gt;4. &lt;span style=&quot;color: #0593d3;&quot;&gt;VM&lt;/span&gt; 내부 방화벽&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;649&quot; data-origin-height=&quot;243&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4CNKv/btsIXdbXsM0/8s2OfWaDfxJf4eX1p49kW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4CNKv/btsIXdbXsM0/8s2OfWaDfxJf4eX1p49kW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4CNKv/btsIXdbXsM0/8s2OfWaDfxJf4eX1p49kW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4CNKv%2FbtsIXdbXsM0%2F8s2OfWaDfxJf4eX1p49kW1%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;649&quot; height=&quot;243&quot; data-origin-width=&quot;649&quot; data-origin-height=&quot;243&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;방화벽 상태 확인 : systemctl status firewalld.service&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방화벽 시작 : systemctl start firewalld.service&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방화벽 중지 : systemctl stop firewalld.service&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. &lt;span style=&quot;color: #000000;&quot;&gt;2개의 &lt;span style=&quot;color: #0593d3;&quot;&gt;VM&lt;/span&gt;을 동시에 켜두기&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1795&quot; data-origin-height=&quot;757&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d7XYGp/btsIX7WqrRj/C5UEhOmeGAsSzNubGGjQY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d7XYGp/btsIX7WqrRj/C5UEhOmeGAsSzNubGGjQY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d7XYGp/btsIX7WqrRj/C5UEhOmeGAsSzNubGGjQY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd7XYGp%2FbtsIX7WqrRj%2FC5UEhOmeGAsSzNubGGjQY1%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;1795&quot; height=&quot;757&quot; data-origin-width=&quot;1795&quot; data-origin-height=&quot;757&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;내 노트북이 RAM이 16GB라서 VM1과 VM2에 4GB씩 할당을 해줬는데 아무래도 과도하게 줘버려서 그런거 같았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무래도 6년이 넘은 오래된 노트북이라 수명 문제였음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2개의 VM을 동시에 못켰기 때문에 1개만 켜둔 상태에서 Ping을 보내고 하니까 통신이 안된거였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVofl6/btsIXnFAVMS/b1MJ1kweMPn43ag1Og5If0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVofl6/btsIXnFAVMS/b1MJ1kweMPn43ag1Og5If0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVofl6/btsIXnFAVMS/b1MJ1kweMPn43ag1Og5If0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVofl6%2FbtsIXnFAVMS%2Fb1MJ1kweMPn43ag1Og5If0%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;606&quot; height=&quot;264&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2개의 VM들을 4GB -&amp;gt; 2GB로 정정했고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국에 2개의 VM을 동시에 켜두기가 가능해졌다..&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;</description>
      <category>IT/운영체제</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/207</guid>
      <comments>https://cholink.tistory.com/207#entry207comment</comments>
      <pubDate>Thu, 8 Aug 2024 15:36:01 +0900</pubDate>
    </item>
    <item>
      <title>Vmware 네트워크 방식 Host-only, Bridge, NAT 구성</title>
      <link>https://cholink.tistory.com/206</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ruvg9/btsIV7iq9BL/n7WfgkADLDNc9XfnFKbWBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ruvg9/btsIV7iq9BL/n7WfgkADLDNc9XfnFKbWBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ruvg9/btsIV7iq9BL/n7WfgkADLDNc9XfnFKbWBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fruvg9%2FbtsIV7iq9BL%2Fn7WfgkADLDNc9XfnFKbWBK%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;761&quot; height=&quot;560&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가상머신 네트워크 방식에는 Host-only(Vmnet1), NAT(Vmnet8), Bridge(Vmnet0) 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;blockquote data-ke-style=&quot;style2&quot;&gt;Host-only(Vmnet1) 연결 방식&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;297&quot; data-origin-height=&quot;205&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/929j3/btsIWudcgvZ/in99FsEvkvAFk7vcWcMxj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/929j3/btsIWudcgvZ/in99FsEvkvAFk7vcWcMxj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/929j3/btsIWudcgvZ/in99FsEvkvAFk7vcWcMxj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F929j3%2FbtsIWudcgvZ%2Fin99FsEvkvAFk7vcWcMxj1%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;297&quot; height=&quot;205&quot; data-origin-width=&quot;297&quot; data-origin-height=&quot;205&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;호스트 방식은 외부 네트워크와 연결 없이 Host-only 방식을 사용하는 VMware끼리만 통신이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 인트라넷마냥 VM끼리 네트워크 대역이 따로 구축이 되어있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 외부 네트워크, 호스트PC와는 통신이 안되고 Host-only 방식으로 생성된 VM만 서로 통신이 가능하다.&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;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt; 본인이 만든 VM의 IP 주소를 확인하는 방법은 여러가지가 있다. &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.&lt;/span&gt; ip addr / ip addr show&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cblTZg/btsIYe1T9eV/4bvcV6IuBKpOb92kA6L181/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cblTZg/btsIYe1T9eV/4bvcV6IuBKpOb92kA6L181/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cblTZg/btsIYe1T9eV/4bvcV6IuBKpOb92kA6L181/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcblTZg%2FbtsIYe1T9eV%2F4bvcV6IuBKpOb92kA6L181%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;802&quot; height=&quot;324&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.&lt;/span&gt; hostname -I (대분자 i)&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;46&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sKQ94/btsIYEMW2jy/wIKZ91kICUJKqJv6RRsi60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sKQ94/btsIYEMW2jy/wIKZ91kICUJKqJv6RRsi60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sKQ94/btsIYEMW2jy/wIKZ91kICUJKqJv6RRsi60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsKQ94%2FbtsIYEMW2jy%2FwIKZ91kICUJKqJv6RRsi60%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;655&quot; height=&quot;46&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;46&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;37&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0xdOK/btsIYB3MlIp/XA0jB6dGQPwTTX0VmDzwdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0xdOK/btsIYB3MlIp/XA0jB6dGQPwTTX0VmDzwdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0xdOK/btsIYB3MlIp/XA0jB6dGQPwTTX0VmDzwdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0xdOK%2FbtsIYB3MlIp%2FXA0jB6dGQPwTTX0VmDzwdk%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;407&quot; height=&quot;37&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;37&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;i&gt;Host IP : 192.168.101.188&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;i&gt;VM1 : 192.168.244.128 ( &lt;b&gt;&lt;i&gt;host-only&lt;span&gt; &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;방식으로 설정)&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;i&gt;VM2 : 192.168.244.129 (host-only 방식으로 설정)&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;호스트PC&lt;/span&gt;와 &lt;span style=&quot;color: #0593d3;&quot;&gt;VM&lt;/span&gt;끼리 통신이 되나?&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;442&quot; data-origin-height=&quot;34&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjKs0y/btsIX7B6SRM/8UuWNLGX4tTkmrDypnTis1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjKs0y/btsIX7B6SRM/8UuWNLGX4tTkmrDypnTis1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjKs0y/btsIX7B6SRM/8UuWNLGX4tTkmrDypnTis1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjKs0y%2FbtsIX7B6SRM%2F8UuWNLGX4tTkmrDypnTis1%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;442&quot; height=&quot;34&quot; data-origin-width=&quot;442&quot; data-origin-height=&quot;34&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당연히 host-only 방식은 호스트PC와 VM(게스트OS)와는 &lt;u&gt;&lt;b&gt;통신이 안된다.&lt;/b&gt;&lt;/u&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;오로지 같은 게스트 OS 끼리만 통신이 가능하다&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;VM&lt;/span&gt; 끼리는 서로 통신이 되나?&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;167&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyBFOH/btsIX8OBA6R/7b4sBbLfPwfTrMVvLI9IVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyBFOH/btsIX8OBA6R/7b4sBbLfPwfTrMVvLI9IVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyBFOH/btsIX8OBA6R/7b4sBbLfPwfTrMVvLI9IVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyBFOH%2FbtsIX8OBA6R%2F7b4sBbLfPwfTrMVvLI9IVk%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;510&quot; height=&quot;167&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;167&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선은 Unbuntu OS를 설치하고 네트워크 방식은 Host-only로 설정했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 &lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;VM1&lt;/span&gt;과 &lt;span style=&quot;color: #0593d3;&quot;&gt;VM2&lt;/span&gt;끼리 통신을 하는 네트워크 대역을 만들어야&lt;/b&gt;&lt;/u&gt;하기 때문이다 .&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;VM1의 IP는 &lt;b&gt;&lt;i&gt;192.168.244.128&lt;/i&gt;&lt;/b&gt; &lt;/b&gt;로 설정이 되어있고 사전에 만들었던 &lt;b&gt;VM2(&lt;b&gt;&lt;i&gt;192.168.244.129&lt;/i&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;&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;blockquote data-ke-style=&quot;style2&quot;&gt;NAT(Vmnet8) 연결 방식&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;519&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ykKOu/btsIXoQQPL2/TI4UZPADURsqFroOkBt770/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ykKOu/btsIXoQQPL2/TI4UZPADURsqFroOkBt770/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ykKOu/btsIXoQQPL2/TI4UZPADURsqFroOkBt770/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FykKOu%2FbtsIXoQQPL2%2FTI4UZPADURsqFroOkBt770%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;476&quot; height=&quot;519&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;519&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NAT 방식은 Vmware를 사용할 때, 가장 많이 쓰는 네트워크 방식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NAT 방식을 사용하는 VM은 IP를 호스트 PC에게서 할당을 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 호스트는 공유기에서 IP를 할당 받는다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 VM1의 네트워크 방식을 host-only 에서 NAT 방식으로 바꿔보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;i&gt;Host IP : 192.168.101.188&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;i&gt;VM1 : 192.168.17.129 (이번에는 &lt;b&gt;&lt;i&gt;NAT&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt; 방식으로 설정)&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;i&gt;VM2 : 192.168.17.128 (이번에는 NAT 방식으로 설정)&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;호스트PC&lt;/span&gt;와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;VM&lt;/span&gt;끼리 통신이 되나?&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;534&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjZcEY/btsIYxNLeo1/uPHazkkgdBpKJt9R1K8dE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjZcEY/btsIYxNLeo1/uPHazkkgdBpKJt9R1K8dE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjZcEY/btsIYxNLeo1/uPHazkkgdBpKJt9R1K8dE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjZcEY%2FbtsIYxNLeo1%2FuPHazkkgdBpKJt9R1K8dE0%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;534&quot; height=&quot;175&quot; data-origin-width=&quot;534&quot; data-origin-height=&quot;175&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호스트 PC와 통신이 잘 되는 것을 볼 수 있다.&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;VM&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;끼리는 서로 통신이 되나?&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEWQ96/btsIZnjh0Fw/QDySpLaqTblDdl1sEls8kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEWQ96/btsIZnjh0Fw/QDySpLaqTblDdl1sEls8kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEWQ96/btsIZnjh0Fw/QDySpLaqTblDdl1sEls8kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEWQ96%2FbtsIZnjh0Fw%2FQDySpLaqTblDdl1sEls8kk%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;732&quot; height=&quot;217&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;217&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;VM1&lt;/span&gt; 와 &lt;span style=&quot;color: #0593d3;&quot;&gt;VM2&lt;/span&gt;도 서로 통신이 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜? 둘 다 호스트PC에서 같은 네트워크 IP 대역을 할당 받았기 때문이다.&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;blockquote data-ke-style=&quot;style2&quot;&gt;Bridge(Vmnet0) 연결 방식&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;222&quot; data-origin-height=&quot;506&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IRaqm/btsIZbjinGW/1gh0zu3bxmDdWlpe2CjtpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IRaqm/btsIZbjinGW/1gh0zu3bxmDdWlpe2CjtpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IRaqm/btsIZbjinGW/1gh0zu3bxmDdWlpe2CjtpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIRaqm%2FbtsIZbjinGW%2F1gh0zu3bxmDdWlpe2CjtpK%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;222&quot; height=&quot;506&quot; data-origin-width=&quot;222&quot; data-origin-height=&quot;506&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NAT과 Bridge 방식은 VM이 IP 할당을 어디서 받는냐의 차이로 나누어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NAT 방식은 IP를 호스트 PC에서 받았다면, Bridge 방식은 IP를 공유기에서 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 공유기가 호스트 PC와 가상머신에 같은 네트워크 대역의 IP를 할당하기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호스트 PC와 가상머신은 &lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;동일한 수준의 물리적 PC로 인식&lt;/b&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;size18&quot;&gt;&lt;b&gt;&lt;i&gt;Host IP : 192.168.101.188&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;i&gt;VM1 : 192.168.101.143 (이번에는 Bridge 방식으로 설정) &lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;i&gt;VM2 : 192.168.101.234 (이번에는 &lt;b&gt;&lt;i&gt;Bridge &lt;/i&gt;&lt;/b&gt;방식으로 설정)&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;호스트PC, 게이트웨이&lt;/span&gt;와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;VM&lt;/span&gt;끼리 통신이 되나?&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zEsow/btsIXk25ulQ/pvDQkKuBHHy2RC7KDhytI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zEsow/btsIXk25ulQ/pvDQkKuBHHy2RC7KDhytI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zEsow/btsIXk25ulQ/pvDQkKuBHHy2RC7KDhytI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzEsow%2FbtsIXk25ulQ%2FpvDQkKuBHHy2RC7KDhytI0%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;511&quot; height=&quot;302&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;302&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호스트 PC와 게이트웨이에 핑을 보내보니 잘 통신이 된다&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;VM&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;끼리는 서로 통신이 되나?&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;89&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dI1N6t/btsIYyeWDzb/x7DddibikVFjqAPEbYmN50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dI1N6t/btsIYyeWDzb/x7DddibikVFjqAPEbYmN50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dI1N6t/btsIYyeWDzb/x7DddibikVFjqAPEbYmN50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdI1N6t%2FbtsIYyeWDzb%2Fx7DddibikVFjqAPEbYmN50%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;503&quot; height=&quot;89&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;89&quot;/&gt;&lt;/span&gt;&lt;/figure&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;&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;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&amp;lt;&amp;lt;&lt;span style=&quot;color: #ef5369;&quot;&gt; VM 끼리 통신이 안되었던 오류를 해결 했던 방법&lt;/span&gt; &amp;gt;&amp;gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;Destination Host Unreachable 오류 해결 방법&quot; href=&quot;https://cholink.tistory.com/207&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://cholink.tistory.com/207&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1723099240262&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;리눅스 Destination Host Unreachable 원인과 해결방법&quot; data-og-description=&quot;VM 끼리 혹은 호스트 PC와 VM 끼리 통신할 때 막막한 오류를 발견 했다.서로에게 핑을 보냈는데 Destination Host Unreachable 라는 문구가 뜨면서 핑이 도달하지 못하는 에러였다.&amp;nbsp;이 문제를 해결하기 위&quot; data-og-host=&quot;cholink.tistory.com&quot; data-og-source-url=&quot;https://cholink.tistory.com/207&quot; data-og-url=&quot;https://cholink.tistory.com/207&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dgqxnY/hyWKuKdXww/x02GvzmlYrA77MoUsJ8L00/img.png?width=648&amp;amp;height=221&amp;amp;face=0_0_648_221,https://scrap.kakaocdn.net/dn/BEcYV/hyWKIn875n/BziWkxnVqbXIgkHYQtsKP1/img.png?width=648&amp;amp;height=221&amp;amp;face=0_0_648_221,https://scrap.kakaocdn.net/dn/EWwMC/hyWKJ8qehE/DqtjbPcqsdstbiGmr0YR5k/img.png?width=1795&amp;amp;height=757&amp;amp;face=0_0_1795_757&quot;&gt;&lt;a href=&quot;https://cholink.tistory.com/207&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://cholink.tistory.com/207&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dgqxnY/hyWKuKdXww/x02GvzmlYrA77MoUsJ8L00/img.png?width=648&amp;amp;height=221&amp;amp;face=0_0_648_221,https://scrap.kakaocdn.net/dn/BEcYV/hyWKIn875n/BziWkxnVqbXIgkHYQtsKP1/img.png?width=648&amp;amp;height=221&amp;amp;face=0_0_648_221,https://scrap.kakaocdn.net/dn/EWwMC/hyWKJ8qehE/DqtjbPcqsdstbiGmr0YR5k/img.png?width=1795&amp;amp;height=757&amp;amp;face=0_0_1795_757');&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;리눅스 Destination Host Unreachable 원인과 해결방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;VM 끼리 혹은 호스트 PC와 VM 끼리 통신할 때 막막한 오류를 발견 했다.서로에게 핑을 보냈는데 Destination Host Unreachable 라는 문구가 뜨면서 핑이 도달하지 못하는 에러였다.&amp;nbsp;이 문제를 해결하기 위&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;cholink.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/운영체제</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/206</guid>
      <comments>https://cholink.tistory.com/206#entry206comment</comments>
      <pubDate>Thu, 8 Aug 2024 15:17:46 +0900</pubDate>
    </item>
    <item>
      <title>리눅스(Linux) 파일 시스템 swap &amp;amp; boot란?</title>
      <link>https://cholink.tistory.com/205</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;swap&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 스왑은 4096MB 주 파티션&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- RAM 부족시 사용하드 여분의 하드 디스크&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 메모리의 1.5~2배 권장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- SSD 에서는 설정하지 말 것&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;boot&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 200~300MB 사이. 용량이 작으면 빨리 읽어 부팅이 빠르다.&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;LVM(Logical Volume Manager)&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;</description>
      <category>IT/운영체제</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/205</guid>
      <comments>https://cholink.tistory.com/205#entry205comment</comments>
      <pubDate>Wed, 7 Aug 2024 10:15:02 +0900</pubDate>
    </item>
    <item>
      <title>운영체제(OS)란?</title>
      <link>https://cholink.tistory.com/204</link>
      <description>&lt;p style=&quot;color: #333333; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;우리가 흔히 알고 있는 OS라 하면 Window가 있다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 윈도우가 OS이기만 알고 있고 세부적인것에 대해 모를 수 있다 .&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbFTRR/btsIUgzjsJd/UvJlotYYDDVz3Ptawz1sW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbFTRR/btsIUgzjsJd/UvJlotYYDDVz3Ptawz1sW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbFTRR/btsIUgzjsJd/UvJlotYYDDVz3Ptawz1sW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbFTRR%2FbtsIUgzjsJd%2FUvJlotYYDDVz3Ptawz1sW0%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;563&quot; height=&quot;412&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;412&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS는 하드웨어와 컴퓨터 사용자/시스템/응용 프로그램 사이에서 중재자 역할을 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 컴퓨터(하드웨어)를 키고 안에 들어 있는 각 종 프로그램들을 사용하기 위해서는 OS에 걸쳐가야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면, 카카오톡이나 구글 크롬 같은 프로그램들을 사용하려면 하드웨어의 명령을 받아 OS가 역할을 수행해줘야 실행시킬 수 있다.&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;또 다른 예시를 들어보자면, 우리가 MS Excel 이라는 프로그램을 사용하면 우리가 데이터를 입력하고 수정하고 저장하는 과정에서는 우리 컴퓨터의 DB에 저장이되고 메모리들이 저장되고 수정하는 과정들이 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 과정들을 실행시켜주게 하고 제어해주는 역할을 OS가 해준다.&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;h3 data-ke-size=&quot;size23&quot;&gt;컴퓨터 시스템 구성요소&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 하드웨어 : 기본적인 계산 자원을 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- CPU, memory, I/O devices&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 운영체제 : 사용자의 응용프로그램, 하드웨어 간의 사용을 제어하고 조정하는 역할&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;- 웹 브라우저(네이버, 크롬), 메시지 플랫폼(카톡, 라인), 워드 프로세서 등...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;운영체제의 종류&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Windows, Linux, Ubuntu, Mac OS, Android&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NSnnT/btsITm705lT/bcbTRpnO8kkGxbG3BkKV6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NSnnT/btsITm705lT/bcbTRpnO8kkGxbG3BkKV6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NSnnT/btsITm705lT/bcbTRpnO8kkGxbG3BkKV6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNSnnT%2FbtsITm705lT%2FbcbTRpnO8kkGxbG3BkKV6K%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;600&quot; height=&quot;375&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;커널(Kernel)&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 운영체제의 핵심 기능 부로 컴퓨터 자원들을 관리하는 역할을 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;컴퓨터 자원(System Resource) : CPU, 메모리, 파일, 네트워크, 입출력 장치 등&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;셸(Shell)&lt;/h3&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;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #5c5c5c; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;셸 : 사용자가 글자를 입력하여 컴퓨터에 명령할 수 있도록 하는 프로그램&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;터미널/콘솔 : 셸을 실행하기 위해 글자 입력을 받아 컴퓨터에 전달하거나 컴퓨터의 출력을 글자 화면에 쓰는 프로그램&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커널은 이와 같은 내용을 받아 하드웨어에 직접적으로 명령을 내려준다&lt;/p&gt;</description>
      <category>IT/운영체제</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/204</guid>
      <comments>https://cholink.tistory.com/204#entry204comment</comments>
      <pubDate>Mon, 5 Aug 2024 17:49:31 +0900</pubDate>
    </item>
    <item>
      <title>[Cos Pro 2급 파이썬] 배열의 순서 뒤집기</title>
      <link>https://cholink.tistory.com/203</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;*정답코드&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1722080449840&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# -*- coding: utf-8 -*-
# UTF-8 encoding when using korean

def solution(arr):
	left, right = 0, len(arr)-1
	while left&amp;lt;right:
		arr[left], arr[right] = arr[right], arr[left]
		left += 1
		right -= 1
	return arr
    
arr = [1, 4, 2, 3]
ret = solution(arr)

print(&quot;solution 함수의 반환 값은&quot;, ret, &quot;입니다.&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;배열의 순서가 전부 바귈때까지 반복해야하는 문제이다.&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;left와 right 둘 중에 한쪽이 작거나 크게 되면 반복문을 멈추는 식으로 만들면 된다 .&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>IT/Cos Pro 2급 파이썬</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/203</guid>
      <comments>https://cholink.tistory.com/203#entry203comment</comments>
      <pubDate>Sat, 27 Jul 2024 20:45:23 +0900</pubDate>
    </item>
    <item>
      <title>[Cos Pro 2급 파이썬] 등장하는 가장 많은 수와 적은수 구하기</title>
      <link>https://cholink.tistory.com/202</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;*문제 코드&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1722079847177&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# -*- coding: utf-8 -*-
# UTF-8 encoding when using korean
def func_a(arr):
	counter = [0 for _ in range(1001)]
	for x in arr:
		counter[x] += 1
	return counter

def func_b(arr):
	ret = 0
	for x in arr:
		if ret &amp;lt; x:
			ret = x
	return ret

def func_c(arr):
	INF = 1001
	ret = INF
	for x in arr:
		if x != 0 and ret &amp;gt; x:
			ret = x
	return ret

def solution(arr):
	counter = func_()
	max_cnt = func_()
	min_cnt = func_()
	return max_cnt // min_cnt

arr = [1, 2, 3, 3, 1, 3, 3, 2, 3, 2]
ret = solution(arr)

print(&quot;solution 함수의 반환 값은&quot;, ret, &quot;입니다.&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;*정답 코드&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1722079914872&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(arr):
	counter = func_a(arr)
	max_cnt = func_b(counter)
	min_cnt = func_c(counter)
	return max_cnt // min_cnt&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;</description>
      <category>IT/Cos Pro 2급 파이썬</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/202</guid>
      <comments>https://cholink.tistory.com/202#entry202comment</comments>
      <pubDate>Sat, 27 Jul 2024 20:32:39 +0900</pubDate>
    </item>
    <item>
      <title>[Cos Pro 2급 파이썬] 시작 날짜와 끝 날짜의 사이 날짜구하기</title>
      <link>https://cholink.tistory.com/201</link>
      <description>&lt;pre id=&quot;code_1722079187899&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# -*- coding: utf-8 -*-
# UTF-8 encoding when using korean

def func_a(month, day):
	month_list = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
	total = 0;
	for i in range(month-1):
		total += month_list[i]
	total += day
	return total - 1
    
def solution(start_month, start_day, end_month, end_day):
	start_total = func_a(start_month, start_day)
	end_total = func_a(end_month, end_day)
	return end_total - start_total

start_month = 1
start_day = 2
end_month = 2
end_day = 2
ret = solution(start_month, start_day, end_month, end_day)

print(&quot;solution 함수의 반환 값은&quot;, ret, &quot;입니다.&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;생각해보면 어렵지 않은 문제였는데 괜히 빈칸으로 나와서 생각이 꼬였었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/Cos Pro 2급 파이썬</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/201</guid>
      <comments>https://cholink.tistory.com/201#entry201comment</comments>
      <pubDate>Sat, 27 Jul 2024 20:21:04 +0900</pubDate>
    </item>
    <item>
      <title>[Cos Pro 2급 파이썬] 쇼핑몰 등급별 할인 금액구하기</title>
      <link>https://cholink.tistory.com/200</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;*정답 코드&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1722076498060&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(price, grade):
	answer = price
	if grade == &quot;S&quot;:
		answer = int(price - price * 0.05)
	elif grade == &quot;G&quot;:
		answer = int(price - price * 0.1)
	elif grade == &quot;V&quot;:
		answer = int(price - price * 0.15)
	return answer&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;반올림을 Round 함수로 할 수도 있었지만 int로 해결 해보았다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1722076593430&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(price, grade):
	answer = price
	if grade == &quot;S&quot;:
		answer = price - round(price * 0.05)
	elif grade == &quot;G&quot;:
		answer = price - round(price * 0.1)
	elif grade == &quot;V&quot;:
		answer = price - round(price * 0.15)
	return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 풀이&lt;/p&gt;</description>
      <category>IT/Cos Pro 2급 파이썬</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/200</guid>
      <comments>https://cholink.tistory.com/200#entry200comment</comments>
      <pubDate>Sat, 27 Jul 2024 19:36:41 +0900</pubDate>
    </item>
    <item>
      <title>[Cos Pro 2급 파이썬] 단체 티셔츠를 주문하기</title>
      <link>https://cholink.tistory.com/199</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;정답 코드&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1722072625760&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# -*- coding: utf-8 -*-
# UTF-8 encoding when using korean
def solution(shirt_size):
	answer = [0]*6
	shirtsize = [&quot;XS&quot;, &quot;S&quot;, &quot;M&quot;, &quot;L&quot;, &quot;XL&quot;, &quot;XXL&quot;]
	
	for i in range(len(shirt_size)):
		for j in range(len(shirtsize)):
			if (shirt_size[i] == shirtsize[j]):
				answer[j]+=1
				break
	return answer&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;받아온 매개변수가 특정한 데이터가 담아져있는 배열 shirt_size가 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열을 for each문으로 한개 한개씩 받아내서 일치하는 문자열이 있으면 배열 answer의 인덱스 값을 올리는 문제다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바에서는 answer[j]++ 이런식이 가능한대 파이썬은 불가능하다는걸 알아냈다..&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;키-값 Map을 이용해서 푸는 방법도 있지만 시험에서는 결과만 제대로 나오면 되기 때문에 굳이 길게 어렵게 풀어서 쓸 이유가 없다&lt;/p&gt;</description>
      <category>IT/Cos Pro 2급 파이썬</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/199</guid>
      <comments>https://cholink.tistory.com/199#entry199comment</comments>
      <pubDate>Sat, 27 Jul 2024 18:35:14 +0900</pubDate>
    </item>
    <item>
      <title>코틀린(Kotlin) 데이터 타입</title>
      <link>https://cholink.tistory.com/195</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;코틀린에서 변수의 선언은 val과 var를 사용합니다.&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;val : 변수를 선언할 때 지정한 값에서 더이상 변경하지 않아야 하는 경우 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;var : 변수의 값을 바꿀 수 있어야 하는 경우 사용&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;val variableName : String = &quot;변수 선언 방법&quot;&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;변수는 아래와 같이 출력할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;println(&quot;print value : &lt;span style=&quot;color: #006dd7;&quot;&gt;$value&lt;/span&gt;&quot;)&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;코틀린은 Reference Data Type을 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Reference Data Type은 객체(메모리)를 생성하고 데이터를 할당하는 방식을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만, 참조형으로 생성된 객체는 컴파일 과정에서 기본형으로 대체되어 문제 없이 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 타입의 최상위 클래스로는 Any가 있습니다.&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;정수형 데이터 타입&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Long(64 bits), Int(32), Short(16), Byte(8)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 Int로 추론되며, 숫자 뒤에 L을 붙여주면 Long 타입으로 추론합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작은 숫자 또한 Int로 추론되기 때문에 Short, Byte를 사용하기 위해서는 명시적으로 적어줘야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;실수형 데이터 타입&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Double(64 bits), Float(32)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실수형은 기본적을 Double 타입으로 추론됩니다.&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;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;논리형 데이터 타입&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Boolean : true, false&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;문자, 문자열 데이터 타입&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자 데이터 타입&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Char(16 bits)&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;문자열 데이터 타입&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String&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;h2 data-ke-size=&quot;size26&quot;&gt;예시1&lt;/h2&gt;
&lt;pre id=&quot;code_1720424885559&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class VariableSample {
    companion object {
        @JvmStatic
        fun main(args: Array&amp;lt;String&amp;gt;) {
            val name : String = &quot;Flature&quot;
            val org = &quot;Around studio&quot;
            var age = 12
           // org = &quot;dasdads&quot;
            age = 15

            println(&quot;my name is $name&quot;)
            println(&quot;my organization is $org&quot;)
            println(&quot;my age is $age&quot;)
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 설명했듯이 val은 불변의 법칙이라 생각하면 됩니다.&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;반대로 var은 항상 변할 수 있는 상황입니다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;lt;실행 결과&amp;gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;my&amp;nbsp;name&amp;nbsp;is&amp;nbsp;Flature &lt;br /&gt;my&amp;nbsp;organization&amp;nbsp;is&amp;nbsp;Around&amp;nbsp;studio &lt;br /&gt;my&amp;nbsp;age&amp;nbsp;is&amp;nbsp;15&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>Kotlin</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/195</guid>
      <comments>https://cholink.tistory.com/195#entry195comment</comments>
      <pubDate>Mon, 8 Jul 2024 17:01:20 +0900</pubDate>
    </item>
    <item>
      <title>Daemon compilation failed: Could not connect to Kotlin compile daemon 오류 해결방법</title>
      <link>https://cholink.tistory.com/194</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;인텔리제이에서 코틀린 프로젝트를 생성하고 Run을 하는 과정에서 다음과 같은 오류가 발생하며 실행이 안되고 있음. Daemon compilation failed: Could not connect to Kotlin compile daemon&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결 방법&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;터미널 창을 열고 ./gradlew --stop 를 치고 데몬을 중단한다&lt;/li&gt;
&lt;li&gt;그리고 다시 ./gradlew build 를 치고 재실행 시켜준다&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;590&quot; data-origin-height=&quot;237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Tq7LH/btsIrLejtEj/nKhNt2hk0DF5ZczYIccEYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Tq7LH/btsIrLejtEj/nKhNt2hk0DF5ZczYIccEYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Tq7LH/btsIrLejtEj/nKhNt2hk0DF5ZczYIccEYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTq7LH%2FbtsIrLejtEj%2FnKhNt2hk0DF5ZczYIccEYk%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;590&quot; height=&quot;237&quot; data-origin-width=&quot;590&quot; data-origin-height=&quot;237&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;283&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkcRQW/btsIrglz5ZZ/lp7xsRLVcXRbK1Y57954mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkcRQW/btsIrglz5ZZ/lp7xsRLVcXRbK1Y57954mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkcRQW/btsIrglz5ZZ/lp7xsRLVcXRbK1Y57954mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkcRQW%2FbtsIrglz5ZZ%2Flp7xsRLVcXRbK1Y57954mk%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;614&quot; height=&quot;283&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;283&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;304&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6yfaF/btsIsfGggX9/z7NUHkkStzI7urQ4LpgWV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6yfaF/btsIsfGggX9/z7NUHkkStzI7urQ4LpgWV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6yfaF/btsIsfGggX9/z7NUHkkStzI7urQ4LpgWV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6yfaF%2FbtsIsfGggX9%2Fz7NUHkkStzI7urQ4LpgWV1%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;586&quot; height=&quot;304&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;304&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 이렇게 해결이 되는 모습을 볼 수 있다.&lt;/p&gt;</description>
      <category>Kotlin</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/194</guid>
      <comments>https://cholink.tistory.com/194#entry194comment</comments>
      <pubDate>Mon, 8 Jul 2024 13:16:53 +0900</pubDate>
    </item>
    <item>
      <title>코틀린이란?</title>
      <link>https://cholink.tistory.com/193</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;코틀린(Kotlin) 이란?&lt;/span&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;JetBrains 사에서 2011년에 공개한 오픈 소스 프로그래밍 언너&lt;/li&gt;
&lt;li&gt;Java와 유사한 특징이 있지만 비교적 더 간결하고 다양한 기능이 추가됨&lt;/li&gt;
&lt;li&gt;자바와 상호 운용이 가능함&lt;/li&gt;
&lt;li&gt;가장 최신 버전은 1.8버전이며, 2017년에 구글이 안드로이드 공긱 언어로 코틀린을 추가함&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #6164c6; text-align: start;&quot;&gt; 코틀린(Kotlin)&amp;nbsp;특징&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Null 안정성을 제공. 기본적으로 Null을 허용하지 않으며, 명시적으로 Null을 처리해야 사용할 수 있음&lt;/li&gt;
&lt;li&gt;모든 함수가 리턴값을 가짐&lt;/li&gt;
&lt;li&gt;예외처리를 강제하지 않음&lt;/li&gt;
&lt;li&gt;자바8에 호환&lt;/li&gt;
&lt;li&gt;멀티 플랫폼을 지원(아직은 beta로 명시되어 있음)&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>Kotlin</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/193</guid>
      <comments>https://cholink.tistory.com/193#entry193comment</comments>
      <pubDate>Mon, 8 Jul 2024 13:11:57 +0900</pubDate>
    </item>
    <item>
      <title>기업은 어떤 지원자를 뽑을까?</title>
      <link>https://cholink.tistory.com/186</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;여러 사회인들의 의견을 수렴한 결과. . 대기업들은 애초에 1000명이 되는 지원자를 전부 검토하지는 않을거고 기준에 부적합한 지원자는 자체 프로그램을 통해 1차적으로 필터링을 하는거 같고, 중소나 중견 스타트업 같은 경우는 1000명이 지원한다하면 먼저 지원한 사람들 순으로 뽑는거 같다.&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;여기서 운이라는건 빨리 지원할수록 운의 확률이 올라가는 거 같다.&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;대졸4년제+기사 자격증 1개의 개발자를 연봉 2000대에 얼마든지 구할 수 있음.&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;참으로 난감하다.. 소프트웨어 학과 졸업을 했는데 과도한 국비, 부트캠프 개발자 과공급 현상에 의해 전공자들까지 취업이 어려워진 상황임..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 지금은 비전공자들은 살아남기 힘들다. 몇일전에 들어갔던 회사도 비전공자는 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;취업시기가 더이상 늦어지면 안된다. . 심리적으로도 불안해지고 우울증에 빠져들기 때문이다.&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 최대한 다른 지원자들보다 빠르게 지원할 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 회사에 들어가고 싶은 열정과 의욕을 이력서에 녹일것&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;4. 안정적인 멘탈&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/면접</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/186</guid>
      <comments>https://cholink.tistory.com/186#entry186comment</comments>
      <pubDate>Sat, 11 May 2024 17:49:20 +0900</pubDate>
    </item>
    <item>
      <title>윈도우에서 Oracle 19c 설치 하는 방법</title>
      <link>https://cholink.tistory.com/185</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;다운로드 파일은 아래 링크에서 받으면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.oracle.com/kr/database/technologies/oracle-database-software-downloads.html#19c&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.oracle.com/kr/database/technologies/oracle-database-software-downloads.html#19c&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715142573478&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;Database Software Downloads | Oracle 대한민국&quot; data-og-description=&quot;Oracle Database Software Downloads Whether you are a developer, a data scientist, a DBA, an educator, or just interested in databases, Oracle Database 23ai is the ideal way to get started. It provides native support for all modern data types, analytics, an&quot; data-og-host=&quot;www.oracle.com&quot; data-og-source-url=&quot;https://www.oracle.com/kr/database/technologies/oracle-database-software-downloads.html#19c&quot; data-og-url=&quot;https://www.oracle.com/kr/database/technologies/oracle-database-software-downloads.html#19c&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.oracle.com/kr/database/technologies/oracle-database-software-downloads.html#19c&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.oracle.com/kr/database/technologies/oracle-database-software-downloads.html#19c&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;Database Software Downloads | Oracle 대한민국&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Oracle Database Software Downloads Whether you are a developer, a data scientist, a DBA, an educator, or just interested in databases, Oracle Database 23ai is the ideal way to get started. It provides native support for all modern data types, analytics, an&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.oracle.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;771&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bC0w0w/btsHieIiTI8/JxQLRjkGrbgDvPKMchLOo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bC0w0w/btsHieIiTI8/JxQLRjkGrbgDvPKMchLOo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bC0w0w/btsHieIiTI8/JxQLRjkGrbgDvPKMchLOo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbC0w0w%2FbtsHieIiTI8%2FJxQLRjkGrbgDvPKMchLOo1%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;771&quot; height=&quot;241&quot; data-origin-width=&quot;771&quot; data-origin-height=&quot;241&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;setup 빨간색 아이콘의 파일을 클릭해서 연다&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgGXtY/btsHhteLaQD/kRBacdg93TmNDKwR68QGiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgGXtY/btsHhteLaQD/kRBacdg93TmNDKwR68QGiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgGXtY/btsHhteLaQD/kRBacdg93TmNDKwR68QGiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgGXtY%2FbtsHhteLaQD%2FkRBacdg93TmNDKwR68QGiK%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;775&quot; height=&quot;578&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;578&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;587&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caQgzw/btsHidWWsqf/wInajyyUC4pwpAmVKj6cE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caQgzw/btsHidWWsqf/wInajyyUC4pwpAmVKj6cE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caQgzw/btsHidWWsqf/wInajyyUC4pwpAmVKj6cE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaQgzw%2FbtsHidWWsqf%2FwInajyyUC4pwpAmVKj6cE0%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;782&quot; height=&quot;587&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;587&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;776&quot; data-origin-height=&quot;583&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rRRD6/btsHhQ8MaMm/IRiHvVsdhXzKpgLIVJFqK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rRRD6/btsHhQ8MaMm/IRiHvVsdhXzKpgLIVJFqK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rRRD6/btsHhQ8MaMm/IRiHvVsdhXzKpgLIVJFqK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrRRD6%2FbtsHhQ8MaMm%2FIRiHvVsdhXzKpgLIVJFqK0%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;776&quot; height=&quot;583&quot; data-origin-width=&quot;776&quot; data-origin-height=&quot;583&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6KtUw/btsHgpYfLDo/jWfJzWHLOcmUZkaWNOR73K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6KtUw/btsHgpYfLDo/jWfJzWHLOcmUZkaWNOR73K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6KtUw/btsHgpYfLDo/jWfJzWHLOcmUZkaWNOR73K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6KtUw%2FbtsHgpYfLDo%2FjWfJzWHLOcmUZkaWNOR73K%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;780&quot; height=&quot;586&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;586&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cG6fJj/btsHhQ13GaR/nPsBrUhi7tGWHbIPbgmFl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cG6fJj/btsHhQ13GaR/nPsBrUhi7tGWHbIPbgmFl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cG6fJj/btsHhQ13GaR/nPsBrUhi7tGWHbIPbgmFl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcG6fJj%2FbtsHhQ13GaR%2FnPsBrUhi7tGWHbIPbgmFl0%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;773&quot; height=&quot;585&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;585&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVX0Mx/btsHe4f70Li/PU8qUZVbnNjrlg21Y8Ahq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVX0Mx/btsHe4f70Li/PU8qUZVbnNjrlg21Y8Ahq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVX0Mx/btsHe4f70Li/PU8qUZVbnNjrlg21Y8Ahq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVX0Mx%2FbtsHe4f70Li%2FPU8qUZVbnNjrlg21Y8Ahq1%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;779&quot; height=&quot;588&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;588&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;583&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIwQef/btsHdumcGGf/HVWTY2me69naOiWT57SOOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIwQef/btsHdumcGGf/HVWTY2me69naOiWT57SOOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIwQef/btsHdumcGGf/HVWTY2me69naOiWT57SOOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIwQef%2FbtsHdumcGGf%2FHVWTY2me69naOiWT57SOOK%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;772&quot; height=&quot;583&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;583&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오라클 19c는 설치하기까지 상당히 오랜 시간이 걸린다. 인내심을 갖고 기다리자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;592&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYJkYo/btsHeYtEmB1/aFnCdNLa4XZv8aQG0oddTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYJkYo/btsHeYtEmB1/aFnCdNLa4XZv8aQG0oddTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYJkYo/btsHeYtEmB1/aFnCdNLa4XZv8aQG0oddTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYJkYo%2FbtsHeYtEmB1%2FaFnCdNLa4XZv8aQG0oddTk%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;774&quot; height=&quot;592&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;592&quot;/&gt;&lt;/span&gt;&lt;/figure&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;&amp;nbsp;&lt;/p&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-origin-width=&quot;961&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rviXW/btsHgWBG0t6/oz0X5mKDCpkVMijUUMOgo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rviXW/btsHgWBG0t6/oz0X5mKDCpkVMijUUMOgo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rviXW/btsHgWBG0t6/oz0X5mKDCpkVMijUUMOgo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrviXW%2FbtsHgWBG0t6%2Foz0X5mKDCpkVMijUUMOgo0%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;961&quot; height=&quot;502&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Oracle 19 설치가 끝나면 설치가 잘 되어 있는지 확인하는 법은 cmd 창을 열고 sqlplus system/비밀번호 &amp;lt;&amp;lt; 입력하면 된다,&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;system/12345 or 1234&lt;/p&gt;</description>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/185</guid>
      <comments>https://cholink.tistory.com/185#entry185comment</comments>
      <pubDate>Wed, 8 May 2024 14:00:20 +0900</pubDate>
    </item>
    <item>
      <title>[Java] 프로그래머스 Lv.1 같은 숫자는 싫어</title>
      <link>https://cholink.tistory.com/172</link>
      <description>&lt;pre id=&quot;code_1713245695321&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        List&amp;lt;Integer&amp;gt; result = new ArrayList&amp;lt;&amp;gt;();
        int temp = -1;
      
        for(int i=0; i&amp;lt;arr.length; i++){
            if(temp != arr[i]){
              temp = arr[i];
                result.add(arr[i]);
            } 
        }
        
         int[] answer = new int[result.size()];
        for(int i=0; i&amp;lt;result.size(); i++){
            answer[i] = result.get(i);
        }

        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트/자바 코딩테스트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/172</guid>
      <comments>https://cholink.tistory.com/172#entry172comment</comments>
      <pubDate>Tue, 16 Apr 2024 14:37:07 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 프로그래머스 Lv.1 부족한 금액 계산하기</title>
      <link>https://cholink.tistory.com/170</link>
      <description>&lt;pre id=&quot;code_1713159763829&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public long solution(int price, int money, int count) {
        long answer;
        long sum = 0;
        for(int i=1; i&amp;lt;=count; i++){
            sum += price*i;     
        }
        
        if(money &amp;lt; sum){
             answer = sum - money;
        } else {
            answer = 0;
        }
        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>코딩테스트/자바 코딩테스트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/170</guid>
      <comments>https://cholink.tistory.com/170#entry170comment</comments>
      <pubDate>Mon, 15 Apr 2024 14:42:47 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 프로그래머스 PCCP 기출문제 1번 / 붕대 감기</title>
      <link>https://cholink.tistory.com/169</link>
      <description>&lt;pre id=&quot;code_1713108090980&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
class Solution {
    public int solution(int[] bandage, int health, int[][] attacks) {
        Map&amp;lt;Integer, Integer&amp;gt; attackInfo = new HashMap&amp;lt;&amp;gt;();
        int now_hp = health;
        int successcount = 0;
        
        for(int[] attack : attacks) {
            attackInfo.put(attack[0], attack[1]);
        }
        
        for(int i=1; i&amp;lt;=attacks[attacks.length-1][0]; i++){
            if(attackInfo.containsKey(i)){
                now_hp -= attackInfo.get(i);
                successcount = 0;
            }
            else {
                now_hp+=bandage[1];
                successcount++;
                if(successcount == bandage[0]){
                    now_hp += bandage[2];
                    successcount = 0;
                }
                if(now_hp &amp;gt; health) {
                    now_hp = health;
                }
                
            }
            if(now_hp &amp;lt;= 0){
                    return -1;
                }
        }
        
        return now_hp;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>코딩테스트/자바 코딩테스트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/169</guid>
      <comments>https://cholink.tistory.com/169#entry169comment</comments>
      <pubDate>Mon, 15 Apr 2024 00:22:15 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 프로그래머스 PEEC 기출문제 10번 / 데이터 분석</title>
      <link>https://cholink.tistory.com/166</link>
      <description>&lt;pre id=&quot;code_1712881459010&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
class Solution {
    public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
        
        List&amp;lt;int []&amp;gt; result = new ArrayList&amp;lt;&amp;gt;();
        for(int[] da : data){
            if(ext.equals(&quot;code&quot;)){
                if(da[0] &amp;lt; val_ext){
                    result.add(da);
                }
            }
            if(ext.equals(&quot;date&quot;)){
                if(da[1] &amp;lt; val_ext){
                    result.add(da);
                }
            }
            if(ext.equals(&quot;maximum&quot;)){
                if(da[2] &amp;lt; val_ext){
                    result.add(da);
                }
            }
            if(ext.equals(&quot;remain&quot;)){
                if(da[3] &amp;lt; val_ext){
                    result.add(da);
                }
            }
        }
        
        if(sort_by.equals(&quot;code&quot;)){
            result.sort((d1, d2) -&amp;gt; d1[0] - d2[0]);
        }
         if(sort_by.equals(&quot;date&quot;)){
            result.sort((d1, d2) -&amp;gt; d1[1] - d2[1]);
        }
         if(sort_by.equals(&quot;maximum&quot;)){
            result.sort((d1, d2) -&amp;gt; d1[2] - d2[2]);
        }
         if(sort_by.equals(&quot;remain&quot;)){
            result.sort((d1, d2) -&amp;gt; d1[3] - d2[3]);
        }
        
        int[][] answer = new int[result.size()][data[0].length];
        for(int i=0; i&amp;lt;answer.length; i++){
            answer[i] = result.get(i);
        }
        
        return answer;
    }
}&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;여기서 result.sort((d1,d2) -&amp;gt; d1[0] - d2[0]) 이 코드는 람다 표현식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 람다 표현식은 두 개의 배열을 입력으로 받아서 첫 번째 배열의 첫 번째 요소(d1[0])에서 두 번째 배열의 첫 번째 요소(d2[0])를 뺀 값을 반환한다.&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;pre id=&quot;code_1712881816817&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[[3, 10], [1, 20], [5, 5]]&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;d1[0] - d2[0]를 계산해보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3 - 1 = 2 양수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 [1,20]은 [3,10] 보다 앞에 위치 해야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: left;&quot;&gt;리스트는 &lt;/span&gt;[[1, 20], [3, 10], [5, 5]]&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: left;&quot;&gt;로 정렬됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;그러므로 양수인 경우에는 &lt;/span&gt;o1&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;이 &lt;/span&gt;o2&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;보다 크다고 판단되어 &lt;/span&gt;o1&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;이 &lt;/span&gt;o2&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&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;d1[0] - d2[0]를 계산해서 음수가 나오면 바뀌지 않고 그대로다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;277&quot; data-origin-height=&quot;298&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgzeN7/btsGw2wXNiQ/SQUsZFHnBfR2za0GvwburK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgzeN7/btsGw2wXNiQ/SQUsZFHnBfR2za0GvwburK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgzeN7/btsGw2wXNiQ/SQUsZFHnBfR2za0GvwburK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgzeN7%2FbtsGw2wXNiQ%2FSQUsZFHnBfR2za0GvwburK%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;277&quot; height=&quot;298&quot; data-origin-width=&quot;277&quot; data-origin-height=&quot;298&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>코딩테스트/자바 코딩테스트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/166</guid>
      <comments>https://cholink.tistory.com/166#entry166comment</comments>
      <pubDate>Fri, 12 Apr 2024 09:33:59 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 프로그래머스 Lv.1 최소직사각형</title>
      <link>https://cholink.tistory.com/163</link>
      <description>&lt;pre id=&quot;code_1712734225666&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
class Solution {
    public int solution(int[][] sizes) {
        int answer = 0;
        int max_0 = 0;
        int max_1 = 0;
        
        for(int i=0; i&amp;lt;sizes.length; i++){
            Arrays.sort(sizes[i]);
            if(max_0 &amp;lt; sizes[i][0]){
                max_0 = sizes[i][0];
            } 
            if(max_1 &amp;lt; sizes[i][1]){
                max_1 = sizes[i][1];
            }
        }
        answer = max_0 * max_1;
        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;253&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1bujy/btsGu2ciKYa/fNrSW2LPokbNnmrfT0hxjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1bujy/btsGu2ciKYa/fNrSW2LPokbNnmrfT0hxjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1bujy/btsGu2ciKYa/fNrSW2LPokbNnmrfT0hxjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1bujy%2FbtsGu2ciKYa%2FfNrSW2LPokbNnmrfT0hxjk%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;471&quot; height=&quot;253&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;253&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>코딩테스트/자바 코딩테스트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/163</guid>
      <comments>https://cholink.tistory.com/163#entry163comment</comments>
      <pubDate>Wed, 10 Apr 2024 16:31:30 +0900</pubDate>
    </item>
    <item>
      <title>ㅇㅇㅌㅋㅂㅈㅅ 기술면접 대비</title>
      <link>https://cholink.tistory.com/162</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;[데이터베이스 개론]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;데이터베이스 개론&quot; href=&quot;https://velog.io/@xcv3549/Database-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B0%9C%EB%A1%A0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@xcv3549/Database-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B0%9C%EB%A1%A0&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1711976973720&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;[Database] 데이터베이스 개론&quot; data-og-description=&quot;데이터베이스 개론 책을 읽고 정리했다.&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@xcv3549/Database-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B0%9C%EB%A1%A0&quot; data-og-url=&quot;https://velog.io/@xcv3549/Database-데이터베이스-개론&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/StRMP/hyVJ4dpqQD/gv3D4qLZpBkFebvu2gwOhK/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500&quot;&gt;&lt;a href=&quot;https://velog.io/@xcv3549/Database-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B0%9C%EB%A1%A0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@xcv3549/Database-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B0%9C%EB%A1%A0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/StRMP/hyVJ4dpqQD/gv3D4qLZpBkFebvu2gwOhK/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500');&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;[Database] 데이터베이스 개론&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;데이터베이스 개론 책을 읽고 정리했다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&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;
&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;&lt;a title=&quot;디자인패턴&quot; href=&quot;https://velog.io/@seowj0710/Design-Pattern-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4%EC%9D%98-%EC%A0%95%EC%9D%98%EC%99%80-%EC%A2%85%EB%A5%98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@seowj0710/Design-Pattern-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4%EC%9D%98-%EC%A0%95%EC%9D%98%EC%99%80-%EC%A2%85%EB%A5%98&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&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;&lt;a title=&quot;자료구조&quot; href=&quot;https://bnzn2426.tistory.com/115&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://bnzn2426.tistory.com/115&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;List, Set, Map 차이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@esun1903/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-List-Map-Set%EC%9D%98-%ED%8A%B9%EC%A7%95%EA%B3%BC-%EC%B0%A8%EC%9D%B4%EC%A0%90&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://velog.io/@esun1903/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-List-Map-Set%EC%9D%98-%ED%8A%B9%EC%A7%95%EA%B3%BC-%EC%B0%A8%EC%9D%B4%EC%A0%90&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;ERP 란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;ERP란 전사적자원관리(Enterprise Resource Planning)의 약자로&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;기업의 모든 업무를 통합 관리할 수 있는 시스템을 의미합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;ERP 시스템에는 재고, 회계, 인사, 급여 등 기업이 필요로 하는 여러 기능이 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;ERP 시스템에 입력한 정보는 다양한 형태의 보고서로 만들어지고&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;기업 경영자는 이를 토대로 합리적인 의사결정을 할 수 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;최근에는 인터넷으로 접속해 사용하는 클라우드 ERP 시스템의 수요가 증가하는 추세입니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;클라우드 ERP 시스템은 서버, 설치 라이선스 등이 필요없어 초기 비용이 저렴하고&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;별도의 구축 기간 없이 빠르게 도입할 수 있는 장점이 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;클라우드 ERP 시스템의 등장으로 ERP 도입에 대한 문턱이 낮아지고&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;중소기업을 포함한 보다 많은 기업에서 ERP를 사용할 수 있게 됐습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;MES 란?&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;MES&lt;/span&gt;&lt;span&gt;는 주문에서 제품 생산에 이르기까지&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;관련 정보를 제공해&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;가장 효과적으로 활용할 수 있도록 하며&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;현장의 정확한 데이터를 사용함으로써&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;데이터들이 발생할 때마다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;현장의 활동을 관리&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;착수&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;응답&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;보고하는&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffa700;&quot;&gt;생산실행관리시스템&lt;/span&gt;입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;회사에 대한 질문&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. ERP/MES 신규 및 커스터마이징을 담당한다고 써져있었는데 기존에 만들어진 가스안전공사 또는 코레일테크에서 만드는건지 새로운 ERP/MES를 개발하는건지 궁금합니다.&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;2. 제가 농산물을 좋아하함. 스마트팜 관련해서 질문이 있습니다. 작물의 생육분석, 병해충 시스템 등 웹화면을 개발하고 제어를 하는데 어떤 기술스택이 요구되는지 궁금합니다.&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;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;채용해주신다면, 주말 공휴일을 쓰면서까지 배워서 저도 발전하고 회사도 발전시키는 인재가 되고싶습니다. 감사합니다&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/면접</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/162</guid>
      <comments>https://cholink.tistory.com/162#entry162comment</comments>
      <pubDate>Tue, 2 Apr 2024 00:06:44 +0900</pubDate>
    </item>
    <item>
      <title>기술 포트폴리오 면접 대비</title>
      <link>https://cholink.tistory.com/161</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오목 보드판은 어떻게 구현했는가?&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;- &lt;b&gt;싱글톤 패턴&lt;/b&gt;을 사용하여 단 하나의 보드 객체만 생성함.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;이유 1. 오목게임에서는 하나의 보드 객체만 필요 -&amp;gt; 동일한 인스턴스에 접근해야함 -&amp;gt; 인스턴스 공유함으로써 메모리 자원 절약 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;이유 2. 어플리케이션 내에서 동일한 상태를 가진 단일 객체 유지&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 style=&quot;color: #666666;&quot;&gt;- 여러&amp;nbsp;요청에&amp;nbsp;걸쳐&amp;nbsp;게임&amp;nbsp;상태를&amp;nbsp;서버에&amp;nbsp;저장하고&amp;nbsp;검색하기&amp;nbsp;위해&amp;nbsp;HttpSession을&amp;nbsp;사용&amp;nbsp;(상태유지&amp;nbsp;행위).&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&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;&lt;span style=&quot;color: #666666;&quot;&gt;- View에서 보낸 win 혹은 lose 객체를 LohVO에 전송&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 style=&quot;color: #666666;&quot;&gt;웹 소켓으로 오목 플레이 구현은 어떻게 했는가?&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;웹 소켓 연결 설정&lt;/b&gt;: 코드 내에서는 서버의 IP 주소, 포트 번호, 및 애플리케이션의 컨텍스트 경로를 이용하여 웹 소켓 서버에 연결함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;콜백 함수 설정&lt;/b&gt;: callBack() 함수를 호출하여 웹 소켓 통신에 필요한 콜백 함수를 등록함. 이 콜백 함수는 오목 착수 정보 및 시스템 메시지를 처리를 한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&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 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;특정 위치에서 가로,세로,대각선 방향으로 돌이 연속이 되는지.. 그리고 19x19 보드판 크기 안에 들어가는지.. 중첩이 되는지안되는지를 조건문을 통해 검사하는 방식으로 구현했습니다&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; 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: #666666;&quot;&gt;- 육목 :&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;알고리즘 설명&lt;/b&gt;: 주어진 좌표에서 가로, 세로, 대각선 방향으로 돌의 연속을 세어서 6개가 되는지 확인&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;코드 설명&lt;/b&gt;: 가로, 세로, 대각선 방향으로 반복문을 통해 돌의 연속을 세어나가며, 카운터가 6이 되는 경우에 육목으로 판단함&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;- 오목 :&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;알고리즘 설명&lt;/b&gt;: 주어진 좌표에서 가로, 세로, 대각선 방향으로 돌의 연속을 세어서 5개가 되는지 확인&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;코드 설명&lt;/b&gt;:&amp;nbsp; 가로, 세로, 대각선 방향으로 반복문을 통해 돌의 연속을 세어나가며, 카운터가 5이 되는 경우에 오목으로 판단함&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;- 쌍삼&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;알고리즘 설명&lt;/b&gt;: &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;플레이어가 돌을 놓아서 수직, 수평, 또는 대각선 방향으로 돌이 3개가 연속된 상태에서 양쪽 끝이 열린 경우&lt;/span&gt; &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;코드 설명&lt;/b&gt;:&amp;nbsp;&lt;b&gt; checkDoubleThree&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;&lt;b&gt; 메서드&lt;/b&gt;에서는 모든 방향에 대해 &lt;/span&gt;checkThree&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;를 호출하여 삼이 두 개 이상 형성되는 경우를 세고, 이를 쌍삼으로 간주합니다. &lt;b&gt;checkThree&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;&lt;b&gt; 메서드&lt;/b&gt;에서는 주어진 위치에서 한 방향으로 삼이 형성되는지 확인합니다. 그리고 그 삼의 양 끝이 열린 공간인지 판단합니다.&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Web Socket 이란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;- 클라이언트와 서버를 연결하고 실시간으로 양방향 통신이 가능하게 해주는 기술&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;- 채팅 어플리케이션이나 오목같은 예시를 들 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&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;-------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;/p&gt;
&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;&lt;span style=&quot;color: #666666;&quot;&gt;- xml안에 sql 쿼리문을 만듬. like concat('%',#{keyword},'%') 를 사용해 해당 문자열에 맞게 검색을 해줌&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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;&lt;span style=&quot;color: #666666;&quot;&gt;- 서브쿼리로 게시물 목록을 가져와서 ORDER BY로 최신 글 순으로 정렬 -&amp;gt; &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;지정된 &lt;/span&gt;skip&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt; 값부터 &lt;/span&gt;amount&lt;span style=&quot;background-color: #ffffff; text-align: left;&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;-------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;SNS 로그인 동작 원리&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;1. 로그인 요청이 들어오면 스프링 부트의 로그인 페이지를 리디렉셜할 필터(OAuth2 Request Redirect Filter)가 받음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;2. 네이버면 네이버 인증 서버(외부 소셜 로그인 지원서비스)에 네이버 로그인할 수 있는 창을 띄어달라고 리디렉션&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;3. 로그인이 성공적으로 완료됏으면 인증 서버에서 우리의 서버 스프링 시큐리티 인증필터쪽으로 코드와 특정정보를 발급해줌&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;4. 발급받은 코드를 가지고 우리의 시큐리티 인증 필터가 다시 네이버 인증 서버에 엑세스 토큰을 발급받기 위해 리소스 서버로 전송함.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;5. 리소스 서버에서 시큐리티 키 같은걸 검증을 맞친후에 다시 시큐리티 인증 필터에서 엑세스 토큰을 발급받음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;5. 발급받은 엑세스 토큰을 가지고 &lt;span style=&quot;text-align: start;&quot;&gt;사용자의 유저 데이터를 발급 받기 위해서&amp;nbsp;&lt;/span&gt; 네이버의 내부 리소스 서버에다가 토큰과 특정한 이름을 보내줌.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;6. 검증이 마치면 해당 로그인 데이터를 발급을 진행해줌&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;7. 유저 데이터를 OAuth2 유저 디테일 서비스에서 세션을 만들어서 DB에 저장&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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;&lt;span style=&quot;color: #666666;&quot;&gt;- 아니다. OAuth2 클라이언트 의존성을 스프링부트에 추가해주면 내부에 이런 필터들이 자동 활성화됨. 특정한 변수만 지정해주면 OAuth2 클라이언트가 자동으로 처리해줌. 따라서 OAtuth2UserDetailsService와 OAtuth2UserDetails만 구현하면 됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;OAuth2 란 무엇인가?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666; text-align: left;&quot;&gt;인증을 위한 개방형 표준 프로토콜이다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;구글, 페이스북, 카카오, 네이버 등에서 제공하는 &lt;/span&gt;&lt;span style=&quot;background-color: #fff8b2; text-align: left;&quot;&gt;간편 로그인 기능을 OAuth2 프로토콜 기반의 사용자 인증 기능을 제공&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;개방형 표준 인가 프로토콜이다. 사용자가 비밀번호를 제공할 필요없이 서비스 제공업체(카카오 혹은 네이버)의 인증서버에서 엑세스 권한 부여를 할 수 있는 방법이다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; 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;&lt;span style=&quot;background-color: #ffffff; color: #666666; text-align: left;&quot;&gt;인증 : 접근 자격이 있는지 검증하는 단계를 말합니다.&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666; text-align: left;&quot;&gt;인가 : 자원에 접근할 권한을 부여하는 것입니다. 인가가 완료되면 리소스 접근 권한이 담긴 Access Token이 클라이언트에게 부여됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;특정한 변수란 무엇을 말하나?&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;application.properties에서 아래와 같은것을 말한다. naver라 치면 naver OAtuth2 등록을 위한 특정한 변수 세팅&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;#registration
spring.security.oauth2.client.registration.naver.client-name=naver
spring.security.oauth2.client.registration.naver.client-id=GNFGsMExi7ALJj5KgQlx
spring.security.oauth2.client.registration.naver.client-secret=7i8XMcYgnH
spring.security.oauth2.client.registration.naver.redirect-uri=http://localhost:8080/login/oauth2/code/naver
spring.security.oauth2.client.registration.naver.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.naver.scope=name,email

#provider
spring.security.oauth2.client.provider.naver.authorization-uri=https://nid.naver.com/oauth2.0/authorize
spring.security.oauth2.client.provider.naver.token-uri=https://nid.naver.com/oauth2.0/token
spring.security.oauth2.client.provider.naver.user-info-uri=https://openapi.naver.com/v1/nid/me
spring.security.oauth2.client.provider.naver.user-name-attribute=response
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&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: #666666;&quot;&gt; OAtuth2가 이러한 과정을 수행하기 위해서는 SecurityConfig에 설정을 해줘야 함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;구글, 네이버 측에 우리가 어플리케이션을 사용할거라고 네이버 개발자 센터나 구글 클라우드 플랫폼에 등록해줘야함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;네이버,구글 유저 정보는 UserEntity를 생성해서 UserRepository에 넣고 application.properties에서 업데이트&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;/p&gt;
&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;1. 클라이언트가 로그인 요청을 하면 서블릿 톰캣 컨테이너를 지나서 스프링 부트에 보내진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 서블릿 톰캣 컨테이너는 여러개의 필터를 가지고 있고, 요청은 여러 필터를 통해 스프링부트에 들어오게 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 그런데 요청이 들어오면 필터에서 시큐리티 config가 검증을 하게 됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ㄴ 1) 해당 경로의 접근은 누구에게 열려있는 지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;2) 로그인이 완료된 사용자인지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;3) 해당되는 role을 가지고 있는지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 시큐리티 콘피그에 특정한 메소드(시큐리티필터체인)를 만들고 그 안에 빈을 등록.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 시큐리티 콘피그에&amp;nbsp; 어드민, 일반 유저에 대한 접근을 허용시키는 코드 작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 시큐리티 콘피그에 Bycrpt 암호화 메서드 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 회원가입 : joinform -&amp;gt; Join controller -&amp;gt; joinservice -&amp;gt; userentity -&amp;gt; userRepository -&amp;gt; DB에 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;람다식이란? &lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;익명함수라고 불리기도 하고 코드의 간결성을 위해 메소드에 대한 정의없이도 간결하게 사용할 수 있게 해줌&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;스트림 api란? &lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;컬렉션, 배열 안에 있는 요소들을 하나씩 참조하여 반복적인 처리를 할 수 있고 코드 간결성 유지해줌&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;자바 언어의 특성은? &lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;자바는 객체지향 언어입니다. 클래스와 객체 개념으로 코드의 재사용성을 높이고 유지보수를 용이하게해줌.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;JSON 이란? &lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;서버단에서 데이터를 저장하거나 전송할때 쓴다&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;Spring Security 란?&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;인증, 권한 관리 그리고 데이터 보호 기능을 포함&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff9900; text-align: start;&quot;&gt;웹 개발 과정에서 필수적인 사용자 관리 기능을 구현하는데 도움을 주는&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Spring의 강력한 프레임워크&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;DI 란? 스프링에서 등록한 Bean 클래스 혹은 함수같은 외부의 객체를 @Autowired 같은 어노테이션을 통해 가져오는 것&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;IoC란? 개발자는 직접 빈을 등록하는 등 수행을 해왔다. 하지만 스프링에서 이러한 권한을 뺏어서 스프링이 알아서 해주ㅝ서 제어의 역전이라 함.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;AOP란? 트랜잭션이나 로깅 같이 중복이 되는 코드들을 방지해주는 역할&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마이바티스란? &lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;SQL 실행결과를 Map 객체에 매핑해서 관리하는것&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;JPA란? &lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;마이바티스와 다르게 간단한 CRUD 정도의 SQL 작성이 불필요하고 자동으로 SQL문을 만들어주고 실행해줍니다&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;List, Array, Map 차이점&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- List는 순서가 있고 중복된 데이터를 가질수 있음&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Map은 키-값 쌍으로 이루어져있고 중복 키는 허용이 안됨&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Array는 고정된 크기의 동일한 데이터 요소들의 집합니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;도커 : 컨테이너 이미지를 생성하고 실행하는 도구&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;쿠버네티스 : 이러한 컨테이너들을 대규모로 배포하고 관리하는 도구&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오라클 DB 기술면접 대비 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://sas-study.tistory.com/56&quot;&gt;https://sas-study.tistory.com/56&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1721119155332&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/VGkka/hyWCA3sIZK/4G5f6KPXnXN5rFbpS9I21K/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bvXwlG/hyWCFp89TA/AW72ubJ2L60H0Dkgqi30mK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/gmYDu/hyWzzLT6Ui/4IYcAPE7jFCAIPWz5R0W1K/img.jpg?width=910&amp;amp;height=512&amp;amp;face=0_0_910_512&quot; data-og-url=&quot;https://sas-study.tistory.com/56&quot; data-og-source-url=&quot;https://sas-study.tistory.com/56&quot; data-og-host=&quot;sas-study.tistory.com&quot; data-og-description=&quot;데이터베이스 용어정리1. 데이터베이스- 어느 한 조직에서 업무처리를 위해 다수의 응용시스템 혹은 다수의 사용자들이 공용으로 사용하기 위해 저장된 운영 데이터의 집합. 2. 데이터베이스 언&quot; data-og-title=&quot;신입개발자 기술면접 #3 - Oracle DB&quot; data-og-type=&quot;article&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://sas-study.tistory.com/56&quot; data-source-url=&quot;https://sas-study.tistory.com/56&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;신입개발자 기술면접 #3 - Oracle DB&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;데이터베이스 용어정리1. 데이터베이스- 어느 한 조직에서 업무처리를 위해 다수의 응용시스템 혹은 다수의 사용자들이 공용으로 사용하기 위해 저장된 운영 데이터의 집합. 2. 데이터베이스 언&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;sas-study.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;리액트 기술면접 대비 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.freecodecamp.org/korean/news/2022nyeone-alaya-hal-10gaji-riaegteu-inteobyu-jilmun/&quot;&gt;https://www.freecodecamp.org/korean/news/2022nyeone-alaya-hal-10gaji-riaegteu-inteobyu-jilmun/&lt;/a&gt;&lt;/p&gt;</description>
      <category>IT/면접</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/161</guid>
      <comments>https://cholink.tistory.com/161#entry161comment</comments>
      <pubDate>Mon, 1 Apr 2024 21:55:21 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 Lv.0 배열 만들기2 Java</title>
      <link>https://cholink.tistory.com/159</link>
      <description>&lt;pre id=&quot;code_1707297666032&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

class Solution {
    public int[] solution(int l, int r) {
        ArrayList&amp;lt;Integer&amp;gt; arraylist = new ArrayList&amp;lt;&amp;gt;();
        for(int i=l; i&amp;lt;=r; i++) {
            if(String.valueOf(i).matches(&quot;[05]+&quot;)){
                arraylist.add(i);
            }
            
        }
        
        if(arraylist.isEmpty()) {
            return new int[]{-1};
        }
        
        int[] a = new int[arraylist.size()];
        for(int j=0; j&amp;lt;arraylist.size(); j++) {
            a[j] = arraylist.get(j);
        }
        
        return 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;1. ArrayList 형태의 인스턴스를 생성해주고 String.valueOf() 메서드를 활용해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;matches 함수로 '0' 또는 '5'에 속해있는지 조건식을 만들어준다.&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;2. true면 인스턴스에 i 값을 넣어준다.&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;3. 만약 비어있으면 -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;4. 그리고 int 타입의 배열 인스턴스를 생성해서 ArrayList 에 담아져있는 값들을 하나하나 get() 메서드를 써서 담아줌.&lt;/p&gt;</description>
      <category>코딩테스트/자바 코딩테스트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/159</guid>
      <comments>https://cholink.tistory.com/159#entry159comment</comments>
      <pubDate>Wed, 7 Feb 2024 18:24:10 +0900</pubDate>
    </item>
    <item>
      <title>건강 프로젝트</title>
      <link>https://cholink.tistory.com/151</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;UX&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1177&quot; data-origin-height=&quot;862&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beovqW/btsAheBLG00/X07vl2rVennUyEviIFkHx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beovqW/btsAheBLG00/X07vl2rVennUyEviIFkHx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beovqW/btsAheBLG00/X07vl2rVennUyEviIFkHx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeovqW%2FbtsAheBLG00%2FX07vl2rVennUyEviIFkHx1%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;400&quot; height=&quot;862&quot; data-origin-width=&quot;1177&quot; data-origin-height=&quot;862&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인을 하면 첫 신규회원 일시, 개인 정보를 입력하라는 폼이 등장한다. 맞춤형 건강 관리를 위해 사용자의 정보가 필요한것이다. &lt;span style=&quot;color: #0f0f0f; text-align: left;&quot;&gt;나이, 성별, 건강 상태, 생활 습관 등 기본적인 건강 관련 정보를 입력한다.&amp;nbsp;&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 style=&quot;color: #0f0f0f; text-align: left;&quot;&gt;정보를 입력 후, 사용자는 개인을 위한 맞충형 건강 관리 계획을 최초로 받게 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0f0f0f; text-align: left;&quot;&gt;건강 관리 계획에는 추천 식단, 영양 가이드, 운동 가이드 등 포함됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0f0f0f; text-align: left;&quot;&gt;(단, 지속적인 계획을 받을지 말지는 설정창에서 ON OFF 가능)&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 style=&quot;color: #0f0f0f; text-align: left;&quot;&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;&lt;span style=&quot;color: #0f0f0f;&quot;&gt;사용자는 사람과 소통하면서 정보를 얻고 싶어한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0f0f0f;&quot;&gt;1. 홈페이지 내의 회원전용 자유게시판에 건강 관련 커뮤니케이션을 할 수 있다 .&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 style=&quot;color: #0f0f0f;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0f0f0f;&quot;&gt;건강 관련 뉴스를 보고 싶다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0f0f0f;&quot;&gt;2. 건강 관련 기사를 모아둔 메뉴가 있다. 상품과 뉴스를 연관지어서 소비자의 관심을 끌어올림&amp;nbsp;&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 style=&quot;color: #0f0f0f;&quot;&gt;처음에 입력했던 내 건강 정보로 연관 있는 내용을 찾고 싶다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0f0f0f;&quot;&gt;3. 자신의 건강 정보나 관심사에 맞춰 내용을 검색할 수 있음&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 style=&quot;color: #0f0f0f;&quot;&gt;뭔가를 먹고 싶어졋다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0f0f0f;&quot;&gt;4. 건강 식품을 소개해줌. 맞춤형 식단이나 추천 식단 등을 판매함&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 style=&quot;color: #0f0f0f;&quot;&gt;안좋은 당류 음식이나 짠 걸 많이 먹으면 어떻게 되는지 알고 싶다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0f0f0f;&quot;&gt;5. 건강을 소홀히 하면 몸이 얼마나 많이 망가지는지 너무 자극적인 자료는 아니고 적당히 자극줄만한 자료를 보여줌&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 style=&quot;color: #0f0f0f;&quot;&gt;6. 정기적인 진행 상황, 건강 팁 등 제공&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 style=&quot;color: #0f0f0f;&quot;&gt;7. 각종 음식이나 재료의 영양 정보를 분석할 수 있다 (표준)&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 style=&quot;color: #0f0f0f;&quot;&gt;8. 결제 기능 있음&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 style=&quot;color: #0f0f0f;&quot;&gt;운동을 하고 싶다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0f0f0f;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0f0f0f;&quot;&gt;9. 운동하기 좋은 플레이스 추천&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0f0f0f;&quot;&gt;10. 주변에 다이어트를 위한 건강 식당이 있는지 지도있음&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;&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;</description>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/151</guid>
      <comments>https://cholink.tistory.com/151#entry151comment</comments>
      <pubDate>Mon, 13 Nov 2023 11:48:16 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 파이썬 sort(), sorted() 차이점</title>
      <link>https://cholink.tistory.com/142</link>
      <description>&lt;p id=&quot;SE-c61752b8-af1c-4b33-8228-8aaa85e70393&quot; style=&quot;color: #5f5e42; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;sort 함수는 &lt;/span&gt;&lt;span style=&quot;color: #0078cb;&quot;&gt;&lt;b&gt;리스트명.sort( ) 형식으로 &quot;리스트형의 메소드&quot;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #0078cb;&quot;&gt;&lt;b&gt;​&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #0078cb;&quot;&gt;&lt;b&gt;​&lt;/b&gt;&lt;/span&gt;&lt;span&gt;이며 리스트 원본값을 직접 수정합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-9765e122-02d3-425a-8750-4e931b4bac6e&quot; style=&quot;color: #5f5e42; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;sorted 함수는 &lt;/span&gt;&lt;span style=&quot;color: #0078cb;&quot;&gt;&lt;b&gt;sorted( 리스트명 ) 형식으로 &quot;내장 함수&quot;&lt;/b&gt;&lt;/span&gt;&lt;span&gt;이며 리스트 원본 값은 그대로이고 정렬 값을 반환합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #5f5e42; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #5f5e42; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;sort() 함수&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1696742510586&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a1 = [8, 4, 9]
print('a1:', a1)
a2 = a1.sort() # 원본을 정렬하고 수정
print('-----정렬 후-----')
print('a1:', a1)
print('a2:', a2)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;a1:&amp;nbsp;[8,&amp;nbsp;4,&amp;nbsp;9] &lt;br /&gt;-----정렬&amp;nbsp;후----- &lt;br /&gt;a1:&amp;nbsp;[4,&amp;nbsp;8,&amp;nbsp;9] &lt;br /&gt;a2:&amp;nbsp;None &lt;/p&gt;
&lt;p id=&quot;SE-a4c6a36a-3722-48cd-9efb-8e32cac1df63&quot; style=&quot;color: #5f5e42; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특히 sort( ) 함수의 리턴값이 None 이므로 주의합니다. 정렬된 값은 리턴되지 않습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-01830090-4609-4358-a997-782b4eed01de&quot; style=&quot;color: #5f5e42; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;원본 리스트 값이 정렬된 값으로 수정되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #5f5e42; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #5f5e42; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #5f5e42; text-align: left;&quot; 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;span style=&quot;color: #ef5369;&quot;&gt;sorted() 함수&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1696742704733&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;b1 = [8, 4, 9]
print('b1:', b1)
b2 = sorted(b1) # 원본은 유지하고 정렬한 새 리스트를 만듭니다
print('-----정렬 후-----')
print('b1:', b1)
print('b2:', b2)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;b1:&amp;nbsp;[8,&amp;nbsp;4,&amp;nbsp;9] &lt;br /&gt;-----정렬&amp;nbsp;후----- &lt;br /&gt;b1:&amp;nbsp;[8,&amp;nbsp;4,&amp;nbsp;9] &lt;br /&gt;b2:&amp;nbsp;[4,&amp;nbsp;8,&amp;nbsp;9]&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: #5f5e42; text-align: left;&quot;&gt;원본 리스트 b1 값은 유지되고 정렬된 새 리스트는 b2에 저장되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트/파이썬 코딩테스트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/142</guid>
      <comments>https://cholink.tistory.com/142#entry142comment</comments>
      <pubDate>Sun, 8 Oct 2023 14:26:11 +0900</pubDate>
    </item>
    <item>
      <title>단어 정렬 (백준 1181번 , 파이썬)</title>
      <link>https://cholink.tistory.com/141</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;color: #555555;&quot;&gt;길이가 짧은 것부터&lt;/li&gt;
&lt;li style=&quot;color: #555555;&quot;&gt;길이가 같으면 사전 순으로&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;단, 중복된 단어는 하나만 남기고 제거해야 한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 단어의 개수 N이 주어진다. (1 &amp;le; N &amp;le; 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;조건에 따라 정렬하여 단어들을 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 입력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;yaml&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot;&gt;&lt;code&gt;13
but
i
wont
hesitate
no
more
no
more
it
cannot
wait
im
yours
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 출력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;applescript&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot;&gt;&lt;code&gt;i
im
it
no
but
more
wait
wont
yours
cannot
hesitate&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;문제 풀이&lt;/span&gt;&lt;/h2&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1696742137664&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

N = int(sys.stdin.readline())
word = []
for _ in range(N):
    word.append(sys.stdin.readline().strip())

word = list(set(word)) ## word의 중복된 요소를 제거하고 리스트로 다시 만듬
word.sort() ## 사전 순서대로 정렬함
word.sort(key=len) ## key=len을 주어서 짧은 길이 순으로 다시 정렬

for i in word:
    print(i)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;input()을 쓰면 너무 느리기 때문에 readline()으로 입력해주는 것이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;word에 리스트를 생성해주고 word에 입력값들을 리스트 안에 넣어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그다음에는 중복된 요소를 제거해야 하니 set 함수를 써서 다시 list로 중복제거된 리스트로 만들어준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;word.sort()를 하면 문자열 즉, 사전 순서대로 정렬이 되고&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 짧은 길이 순서대로 정렬해야하니 word.sort(key=len)을 써서 정렬해주었다.&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;a href=&quot;https://cholink.tistory.com/142&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://cholink.tistory.com/142&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1696742817341&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;[Python] 파이썬 sort(), sorted() 차이점&quot; data-og-description=&quot;sort 함수는 리스트명.sort( ) 형식으로 &amp;quot;리스트형의 메소드&amp;quot;​​이며 리스트 원본값을 직접 수정합니다. sorted 함수는 sorted( 리스트명 ) 형식으로 &amp;quot;내장 함수&amp;quot;이며 리스트 원본 값은 그대로이고 정&quot; data-og-host=&quot;cholink.tistory.com&quot; data-og-source-url=&quot;https://cholink.tistory.com/142&quot; data-og-url=&quot;https://cholink.tistory.com/142&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bLvT7L/hyT5Ued0xC/wyXXs4apzr0XOc1VQBpHY1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/6fn19/hyT9x9uN55/a0Aa7fhZGHXva1HGbktoi0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://cholink.tistory.com/142&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://cholink.tistory.com/142&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bLvT7L/hyT5Ued0xC/wyXXs4apzr0XOc1VQBpHY1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/6fn19/hyT9x9uN55/a0Aa7fhZGHXva1HGbktoi0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&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;[Python] 파이썬 sort(), sorted() 차이점&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;sort 함수는 리스트명.sort( ) 형식으로 &quot;리스트형의 메소드&quot;​​이며 리스트 원본값을 직접 수정합니다. sorted 함수는 sorted( 리스트명 ) 형식으로 &quot;내장 함수&quot;이며 리스트 원본 값은 그대로이고 정&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;cholink.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>코딩테스트/파이썬 코딩테스트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/141</guid>
      <comments>https://cholink.tistory.com/141#entry141comment</comments>
      <pubDate>Sun, 8 Oct 2023 14:19:38 +0900</pubDate>
    </item>
    <item>
      <title>소수 찾기 (백준 1978번 , 파이썬)</title>
      <link>https://cholink.tistory.com/140</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;주어진 수 N개&amp;nbsp;중에서&amp;nbsp;소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;주어진 수들 중 소수의 개수를 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 입력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;basic&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot;&gt;&lt;code&gt;4
1 3 5 7
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 출력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot;&gt;&lt;code&gt;3&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;문제 풀이&lt;/span&gt;&lt;/h2&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1696688540936&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

N = int(sys.stdin.readline())
prime = list(map(int, sys.stdin.readline().split()))
count = 0

for i in prime:
    error = 0
    if i &amp;gt; 1:
         for j in range(2, i):
             if i % j == 0:
                 error += 1
         if error == 0:
             count += 1

print(count)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트/파이썬 코딩테스트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/140</guid>
      <comments>https://cholink.tistory.com/140#entry140comment</comments>
      <pubDate>Sat, 7 Oct 2023 23:22:54 +0900</pubDate>
    </item>
    <item>
      <title>수 정렬하기 3 (백준 10989번 , 파이썬)</title>
      <link>https://cholink.tistory.com/139</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 수의 개수 N(1 &amp;le; N &amp;le; 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 입력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot;&gt;&lt;code&gt;10
5
2
3
1
4
2
3
5
1
7
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 출력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot;&gt;&lt;code&gt;1
1
2
2
3
3
4
5
5
7&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;문제 풀이&lt;/span&gt;&lt;/h2&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1696679503436&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
#계수정렬 활용
N = int(sys.stdin.readline())
arr = [0] * (10000+1) # 입력값이 10000개까지 주어지니 10000 + 1개의 리스트 선언
#각 입력값에 해당하는 인덱스의 값 증가
for _ in range(N):
    arr[int(sys.stdin.readline())] += 1
#arr에 기록된 정보 확인
for i in range(len(arr)):
    if arr[i] != 0: #0이 아닌 데이터, 즉 입력받은 데이터들을 출력
        for _ in range(arr[i]):
            print(i)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 계수 정렬을 이용해서 푸는 문제다. sort를 이용하면 메모리 초과때문에 쓸 수가 없다.&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;(1)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3c4144;&quot; data-darkreader-inline-color=&quot;&quot;&gt;리스트를 [0] * (데이터의 길이 + 1)만큼 선언한다.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1696679621553&quot; class=&quot;angelscript&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;arr = [0] * (10000 + 1)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #3c4144;&quot; data-darkreader-inline-color=&quot;&quot;&gt;arr [0 ,0, 0, 0,......] 10001개의 인덱스 생성&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #3c4144;&quot; data-darkreader-inline-color=&quot;&quot;&gt;(2) 입력값을 받을 때마다 그 입력값과 같은 인덱스에 +1 추가&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1696679621554&quot; class=&quot;pgsql&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;for _ in range(n):
    arr[int(input())] += 1&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1 1 1 3 2 1을 입력 받았다면 1이 4개, 2가 1개, 3이 1개 이므로&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;arr[0,4,1,1]이 될 것이다&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #3c4144;&quot; data-darkreader-inline-color=&quot;&quot;&gt;(3) 입력이 끝나면 0이 아닌 인덱스를 찾아 그 수만큼 인덱스를 출력해주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1696679621555&quot; class=&quot;go&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;for i in range(len(arr)):
    if arr[i] != 0:
        for _ in range(arr[i]):
            print(i)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트/파이썬 코딩테스트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/139</guid>
      <comments>https://cholink.tistory.com/139#entry139comment</comments>
      <pubDate>Sat, 7 Oct 2023 20:54:38 +0900</pubDate>
    </item>
    <item>
      <title>알파벳 찾기 (백준 10809번 , 파이썬)</title>
      <link>https://cholink.tistory.com/136</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 입력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;armasm&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot;&gt;&lt;code&gt;baekjoon
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 출력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot;&gt;&lt;code&gt;1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;문제풀이&lt;/span&gt;&lt;/h2&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1696139635909&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
S = sys.stdin.readline().strip()
alpha = [chr(i) for i in range(97, 123)]
for x in alpha:
   print(S.find(x), end=' ')&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;새롭게 알게 된 것&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 아스키코드 변환 함수&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;위 문제에서 사용한 chr함수와 find 함수에 대해 추가적으로 설명하면, chr( ) 함수는 숫자(아스키코드) -&amp;gt; 문자로 변환하는 함수이고 반대로 문자 -&amp;gt; 숫자(아스키코드)로 변환할 때는 ord( ) 함수를 사용한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. find 함수와 index 함수의 비교&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;find 함수는 &lt;b&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;문자열에서만 사용 가능한 함수&lt;/span&gt;&lt;/b&gt;이다. 이와 유사한 기능을 하는 함수로 index 함수가 있다. index 함수는 문자열뿐만 아니라 리스트, 튜플과 같은 반복 가능한 iterable 자료형에서도 찾는 문자의 인덱스를 반환하는 함수로 쓰인다. find 함수와 다른 점은 find 함수는 찾는 문자가 문자열 안에 포함되지 않은 경우 -1을 출력하지만 index함수는 &amp;gt;AttributeError가 발생한다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;나는 리스트 내포를 써서 알파벳 리스트를 만들고&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;for x in alpha를 써서 하나한 씩 알파벳 문자를 넣어서 find함수로 비교해서 찾아냄.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트/파이썬 코딩테스트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/136</guid>
      <comments>https://cholink.tistory.com/136#entry136comment</comments>
      <pubDate>Sun, 1 Oct 2023 14:56:40 +0900</pubDate>
    </item>
    <item>
      <title>ACM 호텔 (백준 10250번 , 파이썬)</title>
      <link>https://cholink.tistory.com/135</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HhqIV/btsv8ylioY6/DPK8UJFWjoM4k8ddTNEWbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HhqIV/btsv8ylioY6/DPK8UJFWjoM4k8ddTNEWbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HhqIV/btsv8ylioY6/DPK8UJFWjoM4k8ddTNEWbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHhqIV%2Fbtsv8ylioY6%2FDPK8UJFWjoM4k8ddTNEWbk%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;294&quot; height=&quot;202&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;202&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와 줄 프로그램을 작성하고자 한다. 즉 설문조사 결과 대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자. 각 층에 W 개의 방이 있는 H 층 건물이라고 가정하자 (1 &amp;le; H, W &amp;le; 99). 그리고 엘리베이터는 가장 왼쪽에 있다고 가정하자(그림 1 참고). 이런 형태의 호텔을 H &amp;times; W 형태 호텔이라고 부른다. 호텔 정문은 일층 엘리베이터 바로 앞에 있는데, 정문에서 엘리베이터까지의 거리는 무시한다. 또 모든 인접한 두 방 사이의 거리는 같은 거리(거리 1)라고 가정하고&amp;nbsp;호텔의 정면 쪽에만 방이 있다고 가정한다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;521&quot; data-origin-height=&quot;312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oDKMO/btswbcIG5bc/dsgcQQhYbuen9fJADmkEXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oDKMO/btswbcIG5bc/dsgcQQhYbuen9fJADmkEXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oDKMO/btswbcIG5bc/dsgcQQhYbuen9fJADmkEXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoDKMO%2FbtswbcIG5bc%2FdsgcQQhYbuen9fJADmkEXk%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;521&quot; height=&quot;312&quot; data-origin-width=&quot;521&quot; data-origin-height=&quot;312&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;color: #555555; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그림 1. H = 6 이고 W = 12 인 H &amp;times; W 호텔을 간략하게 나타낸 그림&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;방 번호는 YXX 나 YYXX 형태인데 여기서 Y 나 YY 는 층 수를 나타내고 XX 는 엘리베이터에서부터 세었을 때의 번호를 나타낸다. 즉, 그림 1 에서 빗금으로 표시한 방은 305 호가 된다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;손님은 엘리베이터를 타고 이동하는 거리는 신경 쓰지 않는다. 다만 걷는 거리가 같을 때에는 아래층의 방을 더 선호한다. 예를 들면 102 호 방보다는 301 호 방을 더 선호하는데, 102 호는 거리 2 만큼 걸어야 하지만 301 호는 거리 1 만큼만 걸으면 되기 때문이다. 같은 이유로 102 호보다 2101 호를 더 선호한다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;여러분이 작성할 프로그램은 초기에 모든 방이 비어있다고 가정하에 이 정책에 따라 N 번째로 도착한 손님에게 배정될 방 번호를 계산하는 프로그램이다. 첫 번째 손님은 101 호, 두 번째 손님은 201 호 등과 같이 배정한다. 그림 1 의 경우를 예로 들면, H = 6이므로 10 번째 손님은 402 호에 배정해야 한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수를 포함하고 있으며 각각 호텔의 층 수, 각 층의 방 수, 몇 번째 손님인지를 나타낸다(1 &amp;le; H, W &amp;le; 99, 1 &amp;le; N &amp;le; H &amp;times; W).&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;프로그램은 표준 출력에 출력한다. 각 테스트 데이터마다 정확히 한 행을 출력하는데, 내용은 N 번째 손님에게 배정되어야 하는 방 번호를 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 입력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;basic&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot;&gt;&lt;code&gt;2
6 12 10
30 50 72
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 출력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot;&gt;&lt;code&gt;402
1203&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;문제풀이&lt;/span&gt;&lt;/h2&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1696074377930&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

T = int(sys.stdin.readline())

for i in range(T):
    H, W, N = map(int, sys.stdin.readline().split())

    floor = N % H
    room_num = (N // H) + 1
    if N % H == 0:
        floor = H
        room_num = N // H
    print(100*floor + room_num)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;테스트 케이스 T를 입력 받는다. T의 값만큼 for문을 돌린다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;층수는&amp;nbsp; N % H 식을 써서 나머지인 값으로 구했다.&amp;nbsp; 방 번호는 XX0번의 방은 없고 XX1 번의 방부터 시작을 하니&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;N // H 식을 쓰고 + 1 을 해줌. // 연산자는 소수점 제외하고 정수의 몫을 추출해 냄.&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 style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot;&gt; 코드를 위에 for문만 작성하면 입력받는 n이 호텔 층수인 h의 배수인 경우에는 잘못된 값을 출력하게 된다. 그래서 for문 안에서 if조건식을 사용해서 n이 h의 배수인 때, 즉 N % H 해서 나머지가 0인 때의 조건식을 별도로 작성하였다. &lt;/span&gt;&lt;/p&gt;</description>
      <category>코딩테스트/파이썬 코딩테스트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/135</guid>
      <comments>https://cholink.tistory.com/135#entry135comment</comments>
      <pubDate>Sat, 30 Sep 2023 22:13:29 +0900</pubDate>
    </item>
    <item>
      <title>OX퀴즈 (백준 8958번 , 파이썬)</title>
      <link>https://cholink.tistory.com/134</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;OOXXOXXOOO&quot;와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;OOXXOXXOOO&quot;의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;각 테스트 케이스마다 점수를 출력한다.&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 입력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot;&gt;&lt;code&gt;5
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 출력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot;&gt;&lt;code&gt;10
9
7
55
30&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;문제 풀이&lt;/span&gt;&lt;/h2&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1695715602179&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

T = int(sys.stdin.readline())

for i in range(T):
    arr = list(sys.stdin.readline().strip())
    count = 0
    sum = 0
    for i in arr:
        if i == 'O':
            count += 1
            sum += count
        else:
            count = 0
    print(sum)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>코딩테스트/파이썬 코딩테스트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/134</guid>
      <comments>https://cholink.tistory.com/134#entry134comment</comments>
      <pubDate>Tue, 26 Sep 2023 17:06:55 +0900</pubDate>
    </item>
    <item>
      <title>나머지 (백준 3052번 , 파이썬)</title>
      <link>https://cholink.tistory.com/133</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1186&quot; data-origin-height=&quot;780&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/El2MJ/btsvMKSKZkL/piVMvkyJgnJr4gW6KITqk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/El2MJ/btsvMKSKZkL/piVMvkyJgnJr4gW6KITqk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/El2MJ/btsvMKSKZkL/piVMvkyJgnJr4gW6KITqk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEl2MJ%2FbtsvMKSKZkL%2FpiVMvkyJgnJr4gW6KITqk0%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;1186&quot; height=&quot;780&quot; data-origin-width=&quot;1186&quot; data-origin-height=&quot;780&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;문제 풀이&lt;/span&gt;&lt;/h2&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1695618309809&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
count = 0
arr = []

for i in range(10):
    A = int(sys.stdin.readline().strip())
    remain = A % 42
    arr.append(remain) ## arr 배열에 remain 값을 넣음
print(len(set(arr)))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트/파이썬 코딩테스트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/133</guid>
      <comments>https://cholink.tistory.com/133#entry133comment</comments>
      <pubDate>Mon, 25 Sep 2023 14:05:20 +0900</pubDate>
    </item>
    <item>
      <title>음계 (백준 2920번 , 파이썬)</title>
      <link>https://cholink.tistory.com/132</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;1부터 8까지 차례대로 연주한다면 ascending, 8부터 1까지 차례대로 연주한다면 descending, 둘 다 아니라면 mixed 이다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 8개 숫자가 주어진다. 이 숫자는 문제 설명에서 설명한 음이며, 1부터 8까지 숫자가 한 번씩 등장한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 ascending, descending, mixed 중 하나를 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1191&quot; data-origin-height=&quot;433&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCP9ln/btsvoXeqwvW/xxSBNhwIKekcuQKk6Ksyi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCP9ln/btsvoXeqwvW/xxSBNhwIKekcuQKk6Ksyi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCP9ln/btsvoXeqwvW/xxSBNhwIKekcuQKk6Ksyi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCP9ln%2FbtsvoXeqwvW%2FxxSBNhwIKekcuQKk6Ksyi0%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;1191&quot; height=&quot;433&quot; data-origin-width=&quot;1191&quot; data-origin-height=&quot;433&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;문제 풀이&lt;/span&gt;&lt;/h2&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1695610878766&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

A = list(map(int, sys.stdin.readline().split()))

if A == sorted(A):
    print(&quot;ascending&quot;)

elif A == sorted(A, reverse=True):
    print(&quot;descending&quot;)

else:
    print(&quot;mixed&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;새롭게 알게 된 것&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sorted 함수를 이용해서 정렬을 하는 것을 알게 됨. 기본적으로 sorted만 썻을때는 오름차순 정렬이 되는거고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내림차순으로 정렬하고 싶다면 reverse=True 를 선언해준다.&lt;/p&gt;</description>
      <category>코딩테스트/파이썬 코딩테스트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/132</guid>
      <comments>https://cholink.tistory.com/132#entry132comment</comments>
      <pubDate>Mon, 25 Sep 2023 12:17:56 +0900</pubDate>
    </item>
    <item>
      <title>알람 시계 (백준 2884번 , 파이썬)</title>
      <link>https://cholink.tistory.com/131</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;이런 상근이를 불쌍하게 보던 창영이는 자신이 사용하는 방법을 추천해 주었다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;바로 &quot;45분 일찍 알람 설정하기&quot;이다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 알람 소리를 들으면, 알람을 끄고 조금 더 잘 것이기 때문이다. 이 방법을 사용하면, 매일 아침 더 잤다는 기분을 느낄 수 있고, 학교도 지각하지 않게 된다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면, 이를 언제로 고쳐야 하는지 구하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 두 정수 H와 M이 주어진다. (0 &amp;le; H &amp;le; 23, 0 &amp;le; M &amp;le; 59) 그리고 이것은 현재 상근이가 설정한 알람 시간 H시 M분을 의미한다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;입력 시간은 24시간 표현을 사용한다. 24시간 표현에서 하루의 시작은 0:0(자정)이고, 끝은 23:59(다음날 자정 1분 전)이다. 시간을 나타낼 때, 불필요한 0은 사용하지 않는다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 상근이가 창영이의 방법을 사용할 때, 설정해야 하는 알람 시간을 출력한다. (입력과 같은 형태로 출력하면 된다.)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&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-origin-width=&quot;1227&quot; data-origin-height=&quot;428&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfvfje/btsvm963M0K/GkwE4KkQHa8YJh4hTUQ4DK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfvfje/btsvm963M0K/GkwE4KkQHa8YJh4hTUQ4DK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfvfje/btsvm963M0K/GkwE4KkQHa8YJh4hTUQ4DK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfvfje%2Fbtsvm963M0K%2FGkwE4KkQHa8YJh4hTUQ4DK%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;1227&quot; height=&quot;428&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;428&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;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;문제 풀이&lt;/span&gt;&lt;/h2&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1695608304831&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

H, M = map(int, sys.stdin.readline().split())

if M &amp;lt; 45:                 # 분단위가 45분보다 작을 때
    if H ==0:              # 0 시이면
       H = 23
       M = 60 + M
    else:  # 0시가 아니면 (0시보다 크면)
       M = 60 + M
       H = H - 1

print(H, M-45)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>코딩테스트/파이썬 코딩테스트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/131</guid>
      <comments>https://cholink.tistory.com/131#entry131comment</comments>
      <pubDate>Mon, 25 Sep 2023 11:18:46 +0900</pubDate>
    </item>
    <item>
      <title>숫자의 개수 (백준 2577번 , 파이썬)</title>
      <link>https://cholink.tistory.com/130</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;세 개의 자연수 A, B, C가 주어질 때 A &amp;times; B &amp;times; C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 A = 150, B = 266, C = 427 이라면&amp;nbsp;A &amp;times; B &amp;times; C = 150 &amp;times; 266 &amp;times; 427 = 17037300 이 되고,&amp;nbsp;계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나&amp;nbsp;같고, 1,000보다 작은 자연수이다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에는 A &amp;times; B &amp;times; C의 결과에 0 이 몇 번 쓰였는지 출력한다. 마찬가지로 둘째 줄부터 열 번째 줄까지 A &amp;times; B &amp;times; C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 입력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot;&gt;&lt;code&gt;150
266
427
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 출력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot;&gt;&lt;code&gt;3
1
0
2
0
0
0
2
0
0&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;문제 풀이&lt;/span&gt;&lt;/h2&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1695369204281&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

input = sys.stdin.readline

a = int(input())
b = int(input())
c = int(input())

result = a*b*c
mao = list(str(result))   ## result의 값을 str 형태 변환 시켜서 리스트에 담는다.
for i in range(10):
    print(mao.count(str(i)))  ## 리스트 mao에 있는 count(str(i))를 써서 0~9까지 각 숫자가 몇번 쓰였는지 개수를 세줌.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&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>코딩테스트/파이썬 코딩테스트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/130</guid>
      <comments>https://cholink.tistory.com/130#entry130comment</comments>
      <pubDate>Fri, 22 Sep 2023 16:57:38 +0900</pubDate>
    </item>
    <item>
      <title>단어 공부 (백준 1157번, 파이썬)</title>
      <link>https://cholink.tistory.com/129</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1176&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyw9oq/btsvbET9JZa/MKQUvTh8kofJnkE1L0TRyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyw9oq/btsvbET9JZa/MKQUvTh8kofJnkE1L0TRyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyw9oq/btsvbET9JZa/MKQUvTh8kofJnkE1L0TRyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdyw9oq%2FbtsvbET9JZa%2FMKQUvTh8kofJnkE1L0TRyK%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;1176&quot; height=&quot;577&quot; data-origin-width=&quot;1176&quot; data-origin-height=&quot;577&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;문제 풀이&lt;/span&gt;&lt;/h2&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1695364080003&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

input = sys.stdin.readline().upper().strip()  ## 대문자로 변환 시켜서 입력한다. 뒤에 있는 개행문자 제거를 strip로 함
input_set = list(set(input))   ## set은 중복을 제거하기 위한 함수이고, 입력값 중에서 중복을 제거하고 list에 넣는다
cnt = []  ## cnt 라는 배열을 생성
for i in input_set:
    cnt.append(input.count(i)) ## cnt라는 배열에 append 함수를 써서 input_set에 삽입되어있는 중복된 횟수를 넣어준다.

Max_num = max(cnt)

if cnt.count(max(cnt)) &amp;gt; 1:
    print(&quot;?&quot;)

else:
    print(input_set[cnt.index(Max_num)]) ## input_set 리스트에서 cnt.index(Max_num) cnt배열에서
                                                      ## 최고로 높은 값의 인덱스의 값을 추출해서 대문자로 변환함
                                                      ## set는 순서가 없지만 출력에는 문제없을듯&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;새롭게 알게 된 것&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;set 함수에 대해서 알아보았다. set 은 중복을 제거해주고 순서를 상관 안한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;index 함수를 이용하여 배열의 가장 높은 횟수를 찾아낼 수 있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상당히 좋은 문제였음&lt;/p&gt;</description>
      <category>코딩테스트/파이썬 코딩테스트</category>
      <author>Samsun</author>
      <guid isPermaLink="true">https://cholink.tistory.com/129</guid>
      <comments>https://cholink.tistory.com/129#entry129comment</comments>
      <pubDate>Fri, 22 Sep 2023 15:40:13 +0900</pubDate>
    </item>
  </channel>
</rss>