<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Mon L'&amp;eacute;trange voyage</title>
    <link>https://mojjisoft.tistory.com/</link>
    <description>초심으로 돌아가 기초부터 차근차근 시작하는 프로그래머</description>
    <language>ko</language>
    <pubDate>Wed, 15 Apr 2026 16:26:07 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>셜록호움즈</managingEditor>
    <image>
      <title>Mon L'&amp;eacute;trange voyage</title>
      <url>https://tistory1.daumcdn.net/tistory/4634473/attach/cf80edaadda3407896f1500f6d8a335f</url>
      <link>https://mojjisoft.tistory.com</link>
    </image>
    <item>
      <title>Mac OS 에서 LaunchAgents 사용해보기</title>
      <link>https://mojjisoft.tistory.com/73</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;맥북에서 crontab을 통해 주기적으로 실행을 시켜보고싶은게 생겨서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab을 등록하여 테스트를 해보았더니 잘 작동이 되지않아서 찾아보니&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;macOS에서는 crontab 보다는 LaunchAgents를 통해 crontab의 역할을 한다고 한다.&lt;/p&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;하고싶었던 작업은 매일 오전10시에 어떤 작업을 수행할 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* crontab 이라면 아마 이렇게 crontab -e 로 등록해서 사용했을 것 같다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1694341082672&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;0 7 * * * cd 실행할위치 &amp;amp;&amp;amp; 실행하고싶은 명령어&lt;/code&gt;&lt;/pre&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;앞서 말했든 macOS에서는 crontab 보다는 LaunchAgents를 권장하고 있고 해당 방법은 간단하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1694341292357&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1. .plist 파일 작성:
 ~/Library/LaunchAgents/${너가수행할이름}.plist라는 파일을 생성

2. plist 샘플
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&amp;gt;
&amp;lt;plist version=&quot;1.0&quot;&amp;gt;
&amp;lt;dict&amp;gt;
    &amp;lt;key&amp;gt;Label&amp;lt;/key&amp;gt;
    &amp;lt;string&amp;gt;본인의프로젝트명&amp;lt;/string&amp;gt;
    &amp;lt;key&amp;gt;ProgramArguments&amp;lt;/key&amp;gt;
    &amp;lt;array&amp;gt;
        &amp;lt;string&amp;gt;/bin/sh&amp;lt;/string&amp;gt;
        &amp;lt;string&amp;gt;-c&amp;lt;/string&amp;gt;
        &amp;lt;string&amp;gt;cd 실행할위치 &amp;amp;&amp;amp; 실행할명령어&amp;lt;/string&amp;gt;
    &amp;lt;/array&amp;gt;
    
    &amp;lt;key&amp;gt;StartInterval&amp;lt;/key&amp;gt;  //실행간격
    &amp;lt;integer&amp;gt;120&amp;lt;/integer&amp;gt;    //120초 (2분)
&amp;lt;/dict&amp;gt;
&amp;lt;/plist&amp;gt;

3. 내가 만든 plist가 잘 작성되었는지 확인
plutil -lint ${너가수행할이름}.plist
정상적으로 잘 만들어졌으면 =&amp;gt; ${너가수행할이름}.plist: OK

4. plist load 
launchctl load ~/Library/LaunchAgents/${너가수행할이름}.plist

5. 등록이 잘되었는지 확인
launchctl list | grep ${너가수행할이름}


6. 만약 등록을 취소하고싶다면
launchctl unload ~/Library/LaunchAgents/${너가수행할이름}.plist&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트를 위해 2분마다 실행되도록 plist를 만들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;여기서 내가 했던 실수들&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &amp;lt;string&amp;gt;cd 실행할위치 &amp;amp;&amp;amp; 실행할명령어&amp;lt;/string&amp;gt; 여기서 &amp;amp;&amp;amp; 를 xml 문법에 맞게 &amp;amp;amp;로 바꿔줬어야 했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 처음에는 yarn start라고 실행할 명령어를 썻는데 fail이 떨어졌다 그래서 Full Path 로 변경 :&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #000000; color: #ffffff; text-align: left;&quot;&gt;/opt/homebrew/bin/yarn start&lt;/span&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;그래서 처음 계획했던 매일 오전 10시에 돌아갈 수 있도록&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 부분을 변경해주었다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1694341694475&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    &amp;lt;key&amp;gt;StartCalendarInterval&amp;lt;/key&amp;gt;
    &amp;lt;dict&amp;gt;
        &amp;lt;key&amp;gt;Hour&amp;lt;/key&amp;gt;
        &amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;
        &amp;lt;key&amp;gt;Minute&amp;lt;/key&amp;gt;
        &amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;
    &amp;lt;/dict&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT Diary/# Dev Diary</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/73</guid>
      <comments>https://mojjisoft.tistory.com/73#entry73comment</comments>
      <pubDate>Sun, 10 Sep 2023 19:29:04 +0900</pubDate>
    </item>
    <item>
      <title>[Knowledge] Thread 병렬로 처리하는 방법</title>
      <link>https://mojjisoft.tistory.com/72</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. thread 를 병렬로 처리하는 방법&lt;/b&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;동기화
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;병렬로 실행되는 스레드가 공유 리소스에 동시에 접근하려고 할 때, 무결성을 보장하기 위해 동기화 기법을 사용합니다. 동기화는 뮤텍스, 세마포어, 모니터 등의 다양한 기법이 존재&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;뮤텍스
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;상호배제를 뜻하며, 한 번의 하나의 스레드만 공유 리소스에 접근할 수 있도록 제한합니다. 뮤텍스를 사용하여 공유 리소스에 접근하는 코드 영역을 임계 영역으로 지정하면, 동시에 여러 스레드가 해당 영역을 실행하지 못하게 됩니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;세마포어
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;공유 리소스에 동시에 접근할 수 있는 스레드의 수를 제한하는 동기화 기법. 세마포어는 카운터를 사용하여 특정 시점에 동시에 실행할 수 있는 스레드 수를 제한합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;데드락
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;여러 스레드가 동시에 실행될 떄, 데드락이 발생. 데드락은 스레드들이 서로가 가진 리소스를 기다리며 진행이 멈추는 상황. 데드락을 처리하러며 아래와 같은 방법을 사용해야함
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;리스소 순서화 : 리소스를 사용하는 순서를 정하고 스레드들이 이 순서대로 리소스를 요청할수 있도록 한다.&lt;/li&gt;
&lt;li&gt;타임아웃 설정 : 스레드가 특정 시간동안 리소스를 얻지 못하면 요청을 취소하고 다시 시도하도록 한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;작업 분할 및 분산
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;병렬로 들어온 스레드를 효율적으로 처리하기 위해, 작업을 적절한 크기의 단위로 나누고, 스레드에 할당&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;최적화된 스레드풀 사용
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;과도한 스레드 생성 및 소멸로 인한 오버헤드를 줄이기 위해 스레드 풀을 사용할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&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;b&gt;2. thread 동시성 문제&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;락(lock) 사용
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;공유 리소스에 동시접근을 막기위해 락을 사용하고, 락을 사용하면 한 번에 하나의 스레드만 해당 리소스에 접근이 가능, java 에서는 synchronized 키워드를 사용하거나 reentrantLock을 사용&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;원자적(Atomic) 연산
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;원자적 연산은 여러 스레드에서 동시에 실행되더라도 중간 결과를 공유하지 않으므로 동시성 문제가 발생하지 않습니다. 자바에서는 AtomicInteger 와 같은 원자적 클래스를 사용할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;뮤텍스
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;공유리소스에 접근하는 코드영역을 임계 영역으로 지정하여 동시에 여러 스레드가 해당 영역을 실행하지 못하도록 합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;세마포어
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;동시에 접근할 수 있는 스레드 수를 제한하여 동시성 문제를 해결하는 기법&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;모니터
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;객체 내부에서 뮤텍스와 조건 변수를 사용하여 동시성 문제를 해결하는 기법&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;import java.util.LinkedList;
import java.util.Queue;

public class ProducerConsumerMonitor {
    private final Queue&amp;lt;Integer&amp;gt; buffer;
    private final int maxSize;

    public ProducerConsumerMonitor(int maxSize) {
        this.maxSize = maxSize;
        this.buffer = new LinkedList&amp;lt;&amp;gt;();
    }

    public synchronized void produce(int item) throws InterruptedException {
        while (buffer.size() == maxSize) {
            wait();
        }

        buffer.add(item);
        System.out.println(&quot;Produced: &quot; + item);
        notifyAll();
    }

    public synchronized int consume() throws InterruptedException {
        while (buffer.isEmpty()) {
            wait();
        }

        int item = buffer.remove();
        System.out.println(&quot;Consumed: &quot; + item);
        notifyAll();
        return item;
    }

    public static void main(String[] args) {
        ProducerConsumerMonitor monitor = new ProducerConsumerMonitor(5);

        Thread producer = new Thread(() -&amp;gt; {
            for (int i = 0; i &amp;lt; 10; i++) {
                try {
                    monitor.produce(i);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        Thread consumer = new Thread(() -&amp;gt; {
            for (int i = 0; i &amp;lt; 10; i++) {
                try {
                    monitor.consume();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        producer.start();
        consumer.start();
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;읽기-쓰기락 사용
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;읽기-쓰기 락은 여러 스레드가 동시에 읽기 작업을 수행하면서, 쓰기 작업은 독점적으로 수행하도록 제한하는 동기화 기법&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>IT Diary/# Knowledge</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/72</guid>
      <comments>https://mojjisoft.tistory.com/72#entry72comment</comments>
      <pubDate>Sat, 8 Apr 2023 10:45:34 +0900</pubDate>
    </item>
    <item>
      <title>성능측정 ( jmeter )</title>
      <link>https://mojjisoft.tistory.com/71</link>
      <description>&lt;p&gt;&lt;iframe src=&quot;https://drive.google.com/file/d/1Q6ynJJtuI874ovUMdUuj5QcDeffT904S/preview&quot; width=&quot;900&quot; height=&quot;700&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://drive.google.com/file/d/1Q6ynJJtuI874ovUMdUuj5QcDeffT904S&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;새 창에서 열기&lt;/a&gt;&lt;/p&gt;</description>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/71</guid>
      <comments>https://mojjisoft.tistory.com/71#entry71comment</comments>
      <pubDate>Wed, 1 Feb 2023 22:28:33 +0900</pubDate>
    </item>
    <item>
      <title>[ SQL ] 004. INDEX가 동작을 제대로 안하는 경우 #2</title>
      <link>https://mojjisoft.tistory.com/70</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;기초부터차근차근.png&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1myHb/btrVZevVBYO/3B7fMAK73YH1JREnNi4aB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1myHb/btrVZevVBYO/3B7fMAK73YH1JREnNi4aB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1myHb/btrVZevVBYO/3B7fMAK73YH1JREnNi4aB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1myHb%2FbtrVZevVBYO%2F3B7fMAK73YH1JREnNi4aB0%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;596&quot; height=&quot;111&quot; data-filename=&quot;기초부터차근차근.png&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;170&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;position: absolute;&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;b&gt;3. 결합인덱스 사용 시, 인덱스 구성의 첫인덱스가 where절의 첫 조건에 적용하지 않았을 경우&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;결합인덱스 컬럼 선택의 기준점은&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;where 절에서 and 조건으로 자주 사용되며, 각각 사용할때보다 두 개 이상의 컬럼이 결합될 때 분포도가 좋아지는 컬럼&lt;br /&gt;※ 분포도(&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;Cardinality)&lt;/span&gt; : 해당 컬럼의 중복도가 적을 경우 분포도가 높고, 중복도가 높을경우 분포도가 낮다&lt;br /&gt;흔히, 우리가 Table의 ID 는 중복되는 값이 없으므로 분포도가 높다고 할 수 있고, Name 같은 컬럼은 ID에 비해 중복되는 값이 많으므로 분포도가 높다고 할 수 있다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;테이블 조인을 위한 연결고리로 사용되는게 빈번한 컬럼&lt;/li&gt;
&lt;li&gt;자주 정렬되는 컬럼인지 고려&lt;/li&gt;
&lt;li&gt;쿼리 작성시 '=' 으로 지정할 수 있는 컬럼이 선행되어야 한다.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1673443883691&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;index를 구성할 때, A,B,C 로 구성한다고 했을 때

#첫번째 케이스
select *
  from test
 where A=99
   and B=99
   and C=99;
   
#두번째 케이스
select *
  from test
 where A=99
   and B between 10 and 99
   and C=99;
   
#세번째 케이스
select *
  from test
 where A between 10 and 99
   and B between 10 and 99
   and C=99;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;첫번째, 두번째 케이스는 인덱스를 타지만, 세번째 케이스는 인덱스를 타지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 두번째 케이스도 완벽하게 인덱스를 타는건 아니다. 실행계획을 떠보면 알겠지만 범위 조건은 해당 컬럼은 인덱스를 타지만, 그 뒤 인덱스 컬럼들은 인덱스를 타지 않고 filter access를 하게 된다. (&lt;a href=&quot;https://khdscor.tistory.com/51&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://khdscor.tistory.com/51&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span&gt;쿼리 툴에서는&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;force index&lt;span style=&quot;color: #555555;&quot;&gt;를 통해 강제로&lt;span&gt; 힌트를 줄 수 있지만&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&amp;nbsp;,&lt;/span&gt;&lt;b&gt;JPA/Hibernate에서는 Query Hint 조정이 불가능&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #555555;&quot;&gt;실제로 JPA/Hibernate에서의 힌트는 Hibernate의 작동 방식에 대한 Hint이지&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;Query Hint가 아니다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>IT Diary/# SQL</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/70</guid>
      <comments>https://mojjisoft.tistory.com/70#entry70comment</comments>
      <pubDate>Wed, 11 Jan 2023 22:45:21 +0900</pubDate>
    </item>
    <item>
      <title>[ SQL ] 003. INDEX가 동작을 제대로 안하는 경우 #1</title>
      <link>https://mojjisoft.tistory.com/69</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;기초부터차근차근.png&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EmHYi/btrVjRuRUHa/V5ghFaZ1nlbAjrUGyUmd20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EmHYi/btrVjRuRUHa/V5ghFaZ1nlbAjrUGyUmd20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EmHYi/btrVjRuRUHa/V5ghFaZ1nlbAjrUGyUmd20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEmHYi%2FbtrVjRuRUHa%2FV5ghFaZ1nlbAjrUGyUmd20%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;596&quot; height=&quot;111&quot; data-filename=&quot;기초부터차근차근.png&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;170&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;position: absolute;&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;실무를 하다보면 요즘에는 NoSQL, QueryDSL 등의 좋은 기술들로 인해 직접 복잡한 쿼리를 짤 경우는 많지는 않지만&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;&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;1. 조건문에서 인덱스의 컬럼을 변형시킨 경우&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;만약 내가 생년월일(birth_date) 라는 char형 컬럼을 인덱스로 만들었다고 가정했을 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 쿼리문을 짜면 조건문의 값이 int형이기 때문에 Stirng으로 만든 인덱스가 타지 않는다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1672839526329&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select *
  from test_table
 where birth_date = 20000101&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;Why? 예외적인 케이스가 항상 존재하기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예외적인 케이스는 Oracle,Mysql 에서는 묵시적인 형변환이 이뤄진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 또, 이런 묵시적인 형변환( char -&amp;gt; int, int -&amp;gt; char 등등의 변환)은 항상 작동하는건 아니다!&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;pre id=&quot;code_1672839941303&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;TO_NUMBER(문자열)
TO_CHAR(숫자 혹은 날짜, [FORMAT])
TO_DATE(문자열, FORMAT)&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;그래서 이번에는 나이(age) 라는 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;막상 실행계획을 보면 인덱스가 의도한대로 잘 탄다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이유는 앞서 말한이유로 char가 int 보다 우선순위가 낮기때문에 묵시적 형변환이 이루어지면서 인덱스를 탄 케이스이다.&lt;/p&gt;
&lt;pre id=&quot;code_1672840421218&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select *
  from test_table
 where age='99';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 인덱스 컬럼 자체를 변형한 경우&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 케이스와는 조금 비슷하면서 다른 케이스이다. 이 케이스는 조건문에서 사용된 컬럼 자체를 변형시킬 경우 인덱스가 작동하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이유는 인덱스 컬럼을 가공하게 되면 가공되는 값에 맞는 새로운 인덱스를 생성해서 사용하기 때문이다.&amp;nbsp;&lt;br /&gt;인덱스가 생성되는 원리를 알면 이해가 더 쉽다. ( &lt;a href=&quot;https://jeong-pro.tistory.com/242&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://jeong-pro.tistory.com/242&lt;/a&gt; 참고 )&lt;/p&gt;
&lt;pre id=&quot;code_1672840886867&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 케이스1
select *
  from test_table
 where substr(birth_date,1,4) = '2000';

# 케이스2
select *
  from test_table
 where age+99 = 100;

# 케이스3  
select *
  from test_table
 where LOWER('name') = 'petric';&lt;/code&gt;&lt;/pre&gt;</description>
      <category>IT Diary/# SQL</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/69</guid>
      <comments>https://mojjisoft.tistory.com/69#entry69comment</comments>
      <pubDate>Wed, 4 Jan 2023 23:13:07 +0900</pubDate>
    </item>
    <item>
      <title>Kafka 조금은 친해져보기</title>
      <link>https://mojjisoft.tistory.com/68</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;기초부터차근차근.png&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bd6yea/btrVporkDYW/xkEWGtXn4dtK17IqhAwpk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bd6yea/btrVporkDYW/xkEWGtXn4dtK17IqhAwpk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bd6yea/btrVporkDYW/xkEWGtXn4dtK17IqhAwpk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbd6yea%2FbtrVporkDYW%2FxkEWGtXn4dtK17IqhAwpk0%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;170&quot; data-filename=&quot;기초부터차근차근.png&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;170&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;Kafka 공부하면서 끄적여보기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- Kafka는 Producer, Broker, Consumer를 따로따로 공부해야한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Christmas light bulb1.jpg&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnraYv/btrVkf95DCQ/Nh8XrHHdzMA79pmhdp4eUk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnraYv/btrVkf95DCQ/Nh8XrHHdzMA79pmhdp4eUk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnraYv/btrVkf95DCQ/Nh8XrHHdzMA79pmhdp4eUk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdnraYv%2FbtrVkf95DCQ%2FNh8XrHHdzMA79pmhdp4eUk%2Fimg.jpg&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;612&quot; height=&quot;800&quot; data-filename=&quot;Christmas light bulb1.jpg&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>IT Diary/# 끄적이며 공부하기</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/68</guid>
      <comments>https://mojjisoft.tistory.com/68#entry68comment</comments>
      <pubDate>Wed, 4 Jan 2023 22:20:20 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] @PostConstruct 와 @PreDestroy</title>
      <link>https://mojjisoft.tistory.com/67</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;호출순서&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;생성자 호출 -&amp;gt; 의존성 주입 완료(@Autowired , @RequiredArgsConstructor ) -&amp;gt; @PostConstruct&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529;&quot;&gt;생성자가 호출되었을 때, bean은 초기화 전이다.(DI가 이루어 지기 전)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;bean lifeCycle에서 오직 한 번만 수행된다. (여러 번 초기화 방지)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;@PostConstruct&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 객체의 초기화 부분&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- 객체가 생성된 후 별도의 초기화 작업을 위해 실행하는 메소드를 선언한다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- @PostConstruct 어노테이션을 설정해놓은 init 메소드는 WAS가 띄워질 때 실행된다.&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;b&gt;&lt;span&gt;@PreDest&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;oy&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 마지막 소멸 단계&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- 스프링 컨테이너에서 객체(빈)를 제거하기 전에 해야할 작업이 있다면 메소드위에 사용하는 어노테이션.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- close() 하기 직전에 실행 -&amp;gt; ((AbstractApplicationContext) context).close()&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;304&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lU2no/btrMTDKHm00/JtnrpCPH6DY2eo0YNJep10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lU2no/btrMTDKHm00/JtnrpCPH6DY2eo0YNJep10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lU2no/btrMTDKHm00/JtnrpCPH6DY2eo0YNJep10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlU2no%2FbtrMTDKHm00%2FJtnrpCPH6DY2eo0YNJep10%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;816&quot; height=&quot;304&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;304&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>IT Diary/# JAVA</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/67</guid>
      <comments>https://mojjisoft.tistory.com/67#entry67comment</comments>
      <pubDate>Fri, 23 Sep 2022 20:54:08 +0900</pubDate>
    </item>
    <item>
      <title>Message Queue 와 ApacheKafka</title>
      <link>https://mojjisoft.tistory.com/66</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&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;Message Queue 의 정의&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메시지 큐(Message Queue)는 프로세스 또는 프로그램 간에 데이터를 교환할 때 사용하는 통신 방법 중에 하나로, 메시지 지향 미들웨어(Message Oriented Middleware:MOM)를 구현한 시스템을 의미한다. 메시지 지향 미들웨어란 비동기 메시지를 사용하는 응용 프로그램들 사이에서 데이터를 송수신하는 것을 의미한다. 여기서 메시지란 요청, 응답, 오류 메시지 혹은 단순한 정보 등의 작은 데이터가 될 수 있다.&lt;/p&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;&quot;&gt;큐는 여러 컴포넌트들이 데이터를 생성하고 또 저장하고 사용하는 과정에서 일종의 버퍼 역할을 수행함.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;큐가 있음으로 producer과 consumer간의 속도가 다를 때, 둘 중 어느 한 컴포넌트가 네트워크에 연결되지 못한 상황 등에 대응이 가능&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;321&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lvqvA/btrJDgYE0u9/AArkQGgUAKF3BNkNkIMTn1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lvqvA/btrJDgYE0u9/AArkQGgUAKF3BNkNkIMTn1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lvqvA/btrJDgYE0u9/AArkQGgUAKF3BNkNkIMTn1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlvqvA%2FbtrJDgYE0u9%2FAArkQGgUAKF3BNkNkIMTn1%2Fimg.jpg&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;763&quot; height=&quot;321&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;321&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;Message Queue 의 장/단점&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장점&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;비동기(Asynchronous)&lt;/b&gt;: Queue에 넣어두기 때문에 나중에 처리할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;분리 또는 비동조(Decoupling)&lt;/b&gt;: 애플리케이션과 분리할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;탄력성(Resilience)&lt;/b&gt;: 일부가 실패 시 전체에 영향을 받지 않는다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;과잉(Redundancy)&lt;/b&gt;: 실패 할 경우 재실행이 가능하다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;보증(Guarantees)&lt;/b&gt;: 작업이 처리된 걸 확인할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;확장성(Scalable)&lt;/b&gt;: 다수의 프로세스들이 큐에 메시지를 보낼 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단점&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span&gt;아키텍처에 외부 구성 요소인 메시지 전송 에이전트를 필요로 한다는 점. 일반적으로 새로운 요소를 추가하면 시스템 성능이 저하되고, 신뢰성도 떨어진다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;시스템 전체로 볼 때 관리가 어렵고 비용도 더 들어가게 된다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;즉각적인 서비스가 불가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Message Queue 를 사용하는 케이스&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다양한 어플리케이션에서 비동기 통신이 가능&lt;/li&gt;
&lt;li&gt;이메일 발송 및 문서 업도르가 가능&lt;/li&gt;
&lt;li&gt;많은 양의 프로세스들을 처리할 수 있음&lt;/li&gt;
&lt;li&gt;다른 곳의 API로 부터 데이터 송수신이 가능&lt;/li&gt;
&lt;/ul&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;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Message Queue 중에서도 가장 많이 쓰이는게 요 Apache Kafka 가 아닐까 한다...&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Kafka의 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Apache Kafka&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;는 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 위해 오픈 소스&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199; color: #555555;&quot;&gt;&lt;b&gt;분산 이벤트 스트리밍 플랫폼(distributed event streaming platform)&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;676&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brE8eF/btrJDiWuHfU/qr6E4NCFydoMsI3BqA7vu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brE8eF/btrJDiWuHfU/qr6E4NCFydoMsI3BqA7vu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brE8eF/btrJDiWuHfU/qr6E4NCFydoMsI3BqA7vu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrE8eF%2FbtrJDiWuHfU%2Fqr6E4NCFydoMsI3BqA7vu1%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;758&quot; height=&quot;400&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;676&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: #000000;&quot;&gt;대용량 실시간 로그 처리에 특화되어 설계된 메시징 시스템으로 시스템 대비 TPS가 우수합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Publisher / Subscriber &lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;모델&lt;/b&gt;&lt;b&gt;확장성&lt;/b&gt;&lt;span&gt;&lt;b&gt;분산&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;&lt;span&gt;&lt;b&gt;처리&lt;/b&gt;&lt;/span&gt;&lt;b&gt; (Partitioning)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;디스크 순차 저장 및 처리&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;고가용성 / &lt;/b&gt;&lt;b&gt;확장성&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Kafka 는 Cluster 로 작동하기 때문에&amp;nbsp; 고가용성이 제공됨&lt;/li&gt;
&lt;li&gt;Cluster : 각기 다른 서버들을 하나로 묶어서 하나의 시스템같이 작동하게 함&lt;/li&gt;
&lt;li&gt;고가용성 : &lt;span style=&quot;background-color: #ffffff; color: #202122;&quot;&gt;오랜 기간 동안 지속적으로 정상 운영이 가능한 성질&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #202122;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #202122;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;기존의&amp;nbsp;메시징&amp;nbsp;시스템은&amp;nbsp;Broker가&amp;nbsp;Consumer에게&amp;nbsp;메시지를&amp;nbsp;Push&amp;nbsp;해주는&amp;nbsp;방식인&amp;nbsp;반면,&amp;nbsp;&lt;br /&gt;Kafka는&amp;nbsp;Consumer가&amp;nbsp;Broker로부터&amp;nbsp;직접&amp;nbsp;메시지를&amp;nbsp;가지고&amp;nbsp;가는&amp;nbsp;Pull&amp;nbsp;방식으로&amp;nbsp;동작&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;즉, 기존 메시지 큐의 다양한 기능을 포기하고 대용량 메시지를 처리하기 위한 기능을 제공하는 메시지 큐 &amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;출처&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://goyunji.tistory.com/125&quot;&gt;https://goyunji.tistory.com/125&lt;/a&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;br /&gt;&lt;a href=&quot;https://12bme.tistory.com/176&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://12bme.tistory.com/176&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT Diary/# 끄적이며 공부하기</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/66</guid>
      <comments>https://mojjisoft.tistory.com/66#entry66comment</comments>
      <pubDate>Sat, 13 Aug 2022 13:14:02 +0900</pubDate>
    </item>
    <item>
      <title>@Transactional 어노테이션</title>
      <link>https://mojjisoft.tistory.com/65</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;b&gt;트랜잭션의 정의&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;예시)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;A라는 사람이 B라는 사람에게 사과 1개를 주고&amp;nbsp; B가 그 사과를 받은 경우, 이 거래 기록은 더 이상 작게 쪼갤 수가 없는 하나의 트랜잭션을 구성한다. 만약 A는 사과를 건네 주었으나 B는 사과를 받지 못했다면 그 거래는 성립되지 않는다. 이처럼 A가 사과를 주는 행위와 B가 사과를 받는 행위는 별개로 분리될 수 없으며 하나의 거래내역으로 처리되어야 하는 단일 거래이다. 이런 거래의 최소 단위를 트랜잭션이라고 한다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;트랜잭션의 4가지 특성&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deOwtJ/btrIoCaUJK7/pWV02LSAQte3FkB7KsVcok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deOwtJ/btrIoCaUJK7/pWV02LSAQte3FkB7KsVcok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deOwtJ/btrIoCaUJK7/pWV02LSAQte3FkB7KsVcok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeOwtJ%2FbtrIoCaUJK7%2FpWV02LSAQte3FkB7KsVcok%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;512&quot; height=&quot;341&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Atomicity (원자성)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;트랜잭션의 연산은 반드시 모두 반영되도록 완료되거나, 아니면 전혀 반영되지 않도록 복구되어야한다.&lt;/li&gt;
&lt;li&gt;(ALL OR NOTHING)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Consistency (일관성)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;트랜잭션이 그 실행을 성공적으로 완료하면 언제나&amp;nbsp;일관성 있는 데이터베이스 상태로 변환한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. Isolation (독립성, 격리성)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;둘 이상의 트랜잭션이 동시에&amp;nbsp;병행 실행되는 경우&amp;nbsp;어느 하나의 트랜잭션 실행중에&amp;nbsp;다른 트랜잭션의 연산이 끼어들 수 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. Durablility (영속성, 지속성)&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;성공적으로 완료된 트랜잭션의 결과는 시스템이&amp;nbsp;고장나더라도 영구적으로 반영되어야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;@Transactional 어노테이션&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클래스나 메서드에서 사용할 경우, 해당 범위 내 매서드가 트랜잭션이 되도록 보장해준다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;code style=&quot;letter-spacing: 0px;&quot;&gt;@Transactional&lt;/code&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;으로 생성된 프록시 객체는 &lt;/span&gt;&lt;code style=&quot;letter-spacing: 0px;&quot;&gt;@Transactional&lt;/code&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;이 적용된 메소드가 호출될 경우,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;code style=&quot;letter-spacing: 0px;&quot;&gt;PlatformTransactionManager&lt;/code&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;를 사용하여 트랜잭션을 시작하고, 정상 여부에 따라 Commit/Rollback 동작을 수행한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;600&quot; data-origin-height=&quot;176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmZoZd/btrImPPDfDl/gRbLCF8LZCSft5O6jmw9Wk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmZoZd/btrImPPDfDl/gRbLCF8LZCSft5O6jmw9Wk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmZoZd/btrImPPDfDl/gRbLCF8LZCSft5O6jmw9Wk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmZoZd%2FbtrImPPDfDl%2FgRbLCF8LZCSft5O6jmw9Wk%2Fimg.jpg&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;176&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;176&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;&lt;b&gt;참고&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://data-make.tistory.com/738&quot;&gt;https://data-make.tistory.com/738&lt;/a&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;[Data Makes Our Future:티스토리]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%98-acid-%EC%84%B1%EC%A7%88/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%98-acid-%EC%84%B1%EC%A7%88/&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1658926647056&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;[데이터베이스] 트랜잭션의 ACID 성질 - 하나몬&quot; data-og-description=&quot;트랜잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛을 말한다. 데이터베이스 트랜잭션은 ACID라는 특성을 가지고 있다. ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안&quot; data-og-host=&quot;hanamon.kr&quot; data-og-source-url=&quot;https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%98-acid-%EC%84%B1%EC%A7%88/&quot; data-og-url=&quot;https://hanamon.kr/데이터베이스-트랜잭션의-acid-성질/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/RpY25/hyPc4MVNzw/1GU1LLnb7qCfd4A0Hs9AT1/img.png?width=930&amp;amp;height=620&amp;amp;face=0_0_930_620,https://scrap.kakaocdn.net/dn/lEgHW/hyPeFLtep2/oXDaYmHryLRdILcV05jMW0/img.png?width=930&amp;amp;height=620&amp;amp;face=0_0_930_620,https://scrap.kakaocdn.net/dn/biuWZ0/hyPc7v4VBK/AKHEEloyPoMsbbs70weFV0/img.png?width=660&amp;amp;height=440&amp;amp;face=0_0_660_440&quot;&gt;&lt;a href=&quot;https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%98-acid-%EC%84%B1%EC%A7%88/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%98-acid-%EC%84%B1%EC%A7%88/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/RpY25/hyPc4MVNzw/1GU1LLnb7qCfd4A0Hs9AT1/img.png?width=930&amp;amp;height=620&amp;amp;face=0_0_930_620,https://scrap.kakaocdn.net/dn/lEgHW/hyPeFLtep2/oXDaYmHryLRdILcV05jMW0/img.png?width=930&amp;amp;height=620&amp;amp;face=0_0_930_620,https://scrap.kakaocdn.net/dn/biuWZ0/hyPc7v4VBK/AKHEEloyPoMsbbs70weFV0/img.png?width=660&amp;amp;height=440&amp;amp;face=0_0_660_440');&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;[데이터베이스] 트랜잭션의 ACID 성질 - 하나몬&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;트랜잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛을 말한다. 데이터베이스 트랜잭션은 ACID라는 특성을 가지고 있다. ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hanamon.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://wiki.hash.kr/index.php/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://wiki.hash.kr/index.php/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1658926602001&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;트랜잭션 - 해시넷&quot; data-og-description=&quot;트랜잭션(transaction)이란 &amp;quot;쪼갤 수 없는 업무 처리의 최소 단위&amp;quot;를 말한다. 거래내역이라고도 한다. '트렌젝션'이 아니라 '트랜잭션'이 올바른 표기법이다. 영어로 간략히 Tx라고 표기하기도 한다. &quot; data-og-host=&quot;wiki.hash.kr&quot; data-og-source-url=&quot;http://wiki.hash.kr/index.php/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98&quot; data-og-url=&quot;http://wiki.hash.kr/index.php/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/LvJJp/hyPdheoqHJ/hBcqPavjx9rNbbuxMKwKOk/img.png?width=800&amp;amp;height=410&amp;amp;face=0_0_800_410,https://scrap.kakaocdn.net/dn/erB5wx/hyPc8uWaXA/0ZcrzezIpTYU5ZMECvpeS0/img.png?width=500&amp;amp;height=260&amp;amp;face=0_0_500_260&quot;&gt;&lt;a href=&quot;http://wiki.hash.kr/index.php/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://wiki.hash.kr/index.php/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/LvJJp/hyPdheoqHJ/hBcqPavjx9rNbbuxMKwKOk/img.png?width=800&amp;amp;height=410&amp;amp;face=0_0_800_410,https://scrap.kakaocdn.net/dn/erB5wx/hyPc8uWaXA/0ZcrzezIpTYU5ZMECvpeS0/img.png?width=500&amp;amp;height=260&amp;amp;face=0_0_500_260');&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;트랜잭션 - 해시넷&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;트랜잭션(transaction)이란 &quot;쪼갤 수 없는 업무 처리의 최소 단위&quot;를 말한다. 거래내역이라고도 한다. '트렌젝션'이 아니라 '트랜잭션'이 올바른 표기법이다. 영어로 간략히 Tx라고 표기하기도 한다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;wiki.hash.kr&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>IT Diary/# JPA</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/65</guid>
      <comments>https://mojjisoft.tistory.com/65#entry65comment</comments>
      <pubDate>Wed, 27 Jul 2022 22:07:24 +0900</pubDate>
    </item>
    <item>
      <title>WEB, WAS 그리고 Servlet</title>
      <link>https://mojjisoft.tistory.com/64</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;237&quot; data-origin-height=&quot;196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxPbRU/btrC7eASOQa/ZHfKbuEDEOebM30w6vl671/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxPbRU/btrC7eASOQa/ZHfKbuEDEOebM30w6vl671/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxPbRU/btrC7eASOQa/ZHfKbuEDEOebM30w6vl671/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxPbRU%2FbtrC7eASOQa%2FZHfKbuEDEOebM30w6vl671%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;237&quot; height=&quot;196&quot; data-origin-width=&quot;237&quot; data-origin-height=&quot;196&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;웹서버(Web Server)의 정의&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;web&lt;/b&gt; 과 &lt;b&gt;was&lt;/b&gt; 를 설명하기에 앞서 알아두면 좋을 것은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동적 웹페이지(Dynamic Pages) 와 정적 웹페이지(Static Pages) 의 개념을 먼저 알아두면 도움이 된다.&lt;/p&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: #dddddd;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;&amp;nbsp;&lt;/span&gt;정적 웹페이지(Static Pages)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;데이터베이스에서 정보를 가져오거나 별도의 서버 처리가 없어도 사용자들에게 보여줄 수 있는 페이지&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;모든 사용자에게 항상 동일한 페이지를 보여줌&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;(정적인 데이터 : html, css , image 등등.. )&lt;/span&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;정적페이지.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1039&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biA8wn/btrC9k7L551/Te6oFBo3Gim8eoGhrwWVg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biA8wn/btrC9k7L551/Te6oFBo3Gim8eoGhrwWVg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biA8wn/btrC9k7L551/Te6oFBo3Gim8eoGhrwWVg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiA8wn%2FbtrC9k7L551%2FTe6oFBo3Gim8eoGhrwWVg0%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;446&quot; height=&quot;362&quot; data-filename=&quot;정적페이지.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1039&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: #dddddd;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;동적 웹페이지(Dynamic Pages)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;동적페이지란 요청에 대해서&amp;nbsp;각기 다른 내용을 보여준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사용자(클라이언트)가 URL 을 통해 서버에 웹 페이지를 요청했을 때, 서버는 사용자에 맞는 HTML 문서를 생성하여 사용자에게 응답&lt;/span&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;동적페이지.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;857&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Buh8w/btrDapnd690/9XtjMvgKkbjOQ46LJWfHn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Buh8w/btrDapnd690/9XtjMvgKkbjOQ46LJWfHn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Buh8w/btrDapnd690/9XtjMvgKkbjOQ46LJWfHn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBuh8w%2FbtrDapnd690%2F9XtjMvgKkbjOQ46LJWfHn1%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;475&quot; height=&quot;318&quot; data-filename=&quot;동적페이지.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;857&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;클라이언트에 요청에 따라 web 서버에서 응답을 줄지, was 서버에서 응답을 줄지 결정을 하고 해당처리결과를 클라이언트에게 전달하게 된다.&lt;/span&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;was.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;382&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chEpZk/btrC7yTOske/LRscyxeI6uD8Mzr3FH7W7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chEpZk/btrC7yTOske/LRscyxeI6uD8Mzr3FH7W7k/img.png&quot; data-alt=&quot;was&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chEpZk/btrC7yTOske/LRscyxeI6uD8Mzr3FH7W7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchEpZk%2FbtrC7yTOske%2FLRscyxeI6uD8Mzr3FH7W7k%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;1280&quot; height=&quot;382&quot; data-filename=&quot;was.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;382&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;was&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;span style=&quot;background-color: #1b711d;&quot;&gt;&amp;nbsp;&lt;/span&gt;WEB 과 WAS 를 분리해서 사용하는 이유&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;1. 기능을 분리하여 서버 부하를 방지&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f325e9c4-e441-40c6-bddd-6af934e3a683&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;WAS 혼자서 모든 요청을 처리하는 것이 가능은 하나 그만큼 &lt;/span&gt;&lt;span&gt;&lt;u&gt;WAS 가 감당하는 부담&lt;/u&gt;&lt;/span&gt;&lt;span&gt;이 커지게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a917651e-1e2f-4002-a9ec-0d011ca44ecb&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그래서 &lt;/span&gt;&lt;span&gt;&lt;u&gt;기능을 분리&lt;/u&gt;&lt;/span&gt;&lt;span&gt;해서 각 서버가 감당하는 &lt;/span&gt;&lt;span&gt;&lt;u&gt;부하를 줄일 수 있도록&lt;/u&gt;&lt;/span&gt;&lt;span&gt; WEB서버와 WAS를 &lt;/span&gt;&lt;span&gt;&lt;u&gt;분리&lt;/u&gt;&lt;/span&gt;&lt;span&gt;한다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-2945e3e7-05b7-4e39-bcd5-b0e54fba9019&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-89ad3b7c-dc7e-4c50-8e97-60414676ed34&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;2. 물리적으로 분리하여 보안을 강화&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-6fd340c8-4fb0-4c59-b3e4-e962fe1548b8&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;WAS에는 &lt;/span&gt;&lt;span&gt;&lt;u&gt;실제 Web Application&lt;/u&gt;&lt;/span&gt;&lt;span&gt;이 올라가 있기 때문에 외부와 직접 연결이 되어 있다면 중요한&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-252e332e-0a3d-4f05-9d40-03551a6c4b32&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;설정 파일이나 리소스들이 &lt;/span&gt;&lt;span&gt;&lt;u&gt;외부로 노출&lt;/u&gt;&lt;/span&gt;&lt;span&gt;될 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-fcd4a91f-e263-45ca-9b4a-3dd7911db3bf&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이를 막기 위해 WEB서버를 &lt;/span&gt;&lt;span&gt;&lt;u&gt;WAS 앞단에 배치&lt;/u&gt;&lt;/span&gt;&lt;span&gt;하여 리소스를 안전하게 보호할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-eeb19b92-d97f-4976-8a90-7fc492d031b4&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e2295b2b-a621-4c59-a686-e700732d9aaf&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;3. WEB서버에 여러 대의 WAS를 연결&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-19bf3de3-988e-49b3-b8ed-e34458616832&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;규모가 큰 서비스에서는 하나의 WEB서버에 하나의 WAS가 연결된 구조만으로는 많은 요청을&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-147f3926-9295-4503-baf3-8d53e9c2b912&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;처리하는데에 어려움이 생긴다. 때문에 수 많은 요청을 한 군데가 아닌 여러 군데에서 처리할 수 있도록&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e8fd97dd-649d-42af-bd84-35f88dd02d1c&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;동일한 &lt;/span&gt;&lt;span&gt;&lt;u&gt;Web Application 여러 개를 띄운다&lt;/u&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-b9c2dbf1-9681-4731-81f0-5884975d6e35&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이때 여러 대의 WAS에 각각 요청이 들어오도록 하지 않고 앞에 WEB서버를 두고 &lt;/span&gt;&lt;span&gt;&lt;u&gt;각 WAS들을&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-bf873380-20ec-4ce1-9e4a-1462008a2f2f&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;u&gt;WEB서버에 연결&lt;/u&gt;&lt;/span&gt;&lt;span&gt;해서 WEB 서버로 들어오는 수많은 요청을 &lt;/span&gt;&lt;span&gt;&lt;u&gt;각 WAS에 적절하게 분배&lt;/u&gt;&lt;/span&gt;&lt;span&gt;해주도록 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-bbbfccd6-0db0-4225-8e72-5ebad0e0050d&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-9051bbf1-7ec7-48a3-b653-d982d3972c69&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이렇게 배치하여 &lt;/span&gt;&lt;span&gt;&lt;u&gt;로드밸런싱&lt;/u&gt;&lt;/span&gt;&lt;span&gt;을 해줌으로써 하나의 WAS가 처리하는 요청의 양이 줄어들어 &lt;/span&gt;&lt;span&gt;&lt;u&gt;안정적인&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-9f196689-b127-448f-be41-2a7ef07cff50&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;u&gt;서비스 운영&lt;/u&gt;&lt;/span&gt;&lt;span&gt;이 가능하다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-8d9a1ec2-f270-45ee-b28c-75dae7a5318e&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f6dbb94a-3472-41f1-9fb9-75a1b78a573f&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;4. 여러 Web Application 의 서비스&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-5f72ce5d-27f5-460c-9b33-e664f982ac40&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Java 서버, PHP 서버와 같이 &lt;/span&gt;&lt;span&gt;&lt;u&gt;서로 다른 서버를 하나의 WEB서버에 연결&lt;/u&gt;&lt;/span&gt;&lt;span&gt;하여 서비스 할 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&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;출처&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html&quot;&gt;https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1653484802445&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;[Web] Web Server와 WAS의 차이와 웹 서비스 구조 - Heee's Development Blog&quot; data-og-description=&quot;Step by step goes a long way.&quot; data-og-host=&quot;gmlwjd9405.github.io&quot; data-og-source-url=&quot;https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html&quot; data-og-url=&quot;http://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cm1cEG/hyOxs7wLNL/4h64M3T4yTMDpqNKIk0Nyk/img.png?width=3233&amp;amp;height=1262&amp;amp;face=0_0_3233_1262,https://scrap.kakaocdn.net/dn/Qv5ix/hyOxsfnvDn/69cv3yqXWjKfasG08WZ0n1/img.png?width=3402&amp;amp;height=1166&amp;amp;face=0_0_3402_1166,https://scrap.kakaocdn.net/dn/yr1jb/hyOxkBFz4H/JCc8cz2kTX0muvcu7uEIUK/img.png?width=2843&amp;amp;height=850&amp;amp;face=0_0_2843_850&quot;&gt;&lt;a href=&quot;https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cm1cEG/hyOxs7wLNL/4h64M3T4yTMDpqNKIk0Nyk/img.png?width=3233&amp;amp;height=1262&amp;amp;face=0_0_3233_1262,https://scrap.kakaocdn.net/dn/Qv5ix/hyOxsfnvDn/69cv3yqXWjKfasG08WZ0n1/img.png?width=3402&amp;amp;height=1166&amp;amp;face=0_0_3402_1166,https://scrap.kakaocdn.net/dn/yr1jb/hyOxkBFz4H/JCc8cz2kTX0muvcu7uEIUK/img.png?width=2843&amp;amp;height=850&amp;amp;face=0_0_2843_850');&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;[Web] Web Server와 WAS의 차이와 웹 서비스 구조 - Heee's Development Blog&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Step by step goes a long way.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;gmlwjd9405.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.naver.com/itwillbusan01/222739701267&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://blog.naver.com/itwillbusan01/222739701267&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1653485017365&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;[이해] 알아두면 좋은 WEB서버와 WAS의 차이&quot; data-og-description=&quot;개발자가 되기 전에 알아주라주~ 가르치는 입장에서 가끔 이건 알아두면 좋겠다던지 과 언급할 수 있는 시...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://blog.naver.com/itwillbusan01/222739701267&quot; data-og-url=&quot;https://blog.naver.com/itwillbusan01/222739701267&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bjpWPg/hyOxqhyAQk/zkblEXJtcRYdigFIxONwSK/img.jpg?width=600&amp;amp;height=540&amp;amp;face=0_0_600_540&quot;&gt;&lt;a href=&quot;https://blog.naver.com/itwillbusan01/222739701267&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.naver.com/itwillbusan01/222739701267&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bjpWPg/hyOxqhyAQk/zkblEXJtcRYdigFIxONwSK/img.jpg?width=600&amp;amp;height=540&amp;amp;face=0_0_600_540');&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;[이해] 알아두면 좋은 WEB서버와 WAS의 차이&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;blog.naver.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>IT Diary/# JAVA</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/64</guid>
      <comments>https://mojjisoft.tistory.com/64#entry64comment</comments>
      <pubDate>Wed, 25 May 2022 22:25:58 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] Garbage Colletion 의 동작원리</title>
      <link>https://mojjisoft.tistory.com/63</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;128A4FC4-872A-4E6A-83D1-B79E57B46278.jpeg&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;401&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFFDoY/btrASvZjz9c/DnHrKAny3UWB4wme66ZtVk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFFDoY/btrASvZjz9c/DnHrKAny3UWB4wme66ZtVk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFFDoY/btrASvZjz9c/DnHrKAny3UWB4wme66ZtVk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFFDoY%2FbtrASvZjz9c%2FDnHrKAny3UWB4wme66ZtVk%2Fimg.jpg&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;300&quot; height=&quot;180&quot; data-filename=&quot;128A4FC4-872A-4E6A-83D1-B79E57B46278.jpeg&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;401&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://torpid-flyingfish-958.notion.site/Garbage-Collection-1e901841fa0a4aa3bf278085af7102db&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://torpid-flyingfish-958.notion.site/Garbage-Collection-1e901841fa0a4aa3bf278085af7102db&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651377453948&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;Garbage Collection&quot; data-og-description=&quot;Garbage Collection 의 정의&quot; data-og-host=&quot;torpid-flyingfish-958.notion.site&quot; data-og-source-url=&quot;https://torpid-flyingfish-958.notion.site/Garbage-Collection-1e901841fa0a4aa3bf278085af7102db&quot; data-og-url=&quot;https://torpid-flyingfish-958.notion.site/1e901841fa0a4aa3bf278085af7102db&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/1XoUi/hyOdGltieQ/WgCFibedEuNEKuJSA2M9xk/img.png?width=717&amp;amp;height=352&amp;amp;face=0_0_717_352,https://scrap.kakaocdn.net/dn/c5sLV9/hyOfffrzSj/9ikTQ1WXkGpnkgnHSjoLLK/img.png?width=717&amp;amp;height=352&amp;amp;face=0_0_717_352&quot;&gt;&lt;a href=&quot;https://torpid-flyingfish-958.notion.site/Garbage-Collection-1e901841fa0a4aa3bf278085af7102db&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://torpid-flyingfish-958.notion.site/Garbage-Collection-1e901841fa0a4aa3bf278085af7102db&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/1XoUi/hyOdGltieQ/WgCFibedEuNEKuJSA2M9xk/img.png?width=717&amp;amp;height=352&amp;amp;face=0_0_717_352,https://scrap.kakaocdn.net/dn/c5sLV9/hyOfffrzSj/9ikTQ1WXkGpnkgnHSjoLLK/img.png?width=717&amp;amp;height=352&amp;amp;face=0_0_717_352');&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;Garbage Collection&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Garbage Collection 의 정의&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;torpid-flyingfish-958.notion.site&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>IT Diary/# JAVA</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/63</guid>
      <comments>https://mojjisoft.tistory.com/63#entry63comment</comments>
      <pubDate>Sun, 1 May 2022 12:57:36 +0900</pubDate>
    </item>
    <item>
      <title>[ JAVA ] JVM 의 정의</title>
      <link>https://mojjisoft.tistory.com/62</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3824B960-3189-46D6-9D0C-E86DA89A3519.jpeg&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;401&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2Xx8e/btrAQPXH0NQ/9VoSM9Hz8Qdf5pyHCgd0YK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2Xx8e/btrAQPXH0NQ/9VoSM9Hz8Qdf5pyHCgd0YK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2Xx8e/btrAQPXH0NQ/9VoSM9Hz8Qdf5pyHCgd0YK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2Xx8e%2FbtrAQPXH0NQ%2F9VoSM9Hz8Qdf5pyHCgd0YK%2Fimg.jpg&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;300&quot; height=&quot;180&quot; data-filename=&quot;3824B960-3189-46D6-9D0C-E86DA89A3519.jpeg&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;401&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://torpid-flyingfish-958.notion.site/JVM-51133bd1e71d495c8a1ea042b346fab1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://torpid-flyingfish-958.notion.site/JVM-51133bd1e71d495c8a1ea042b346fab1&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651377291511&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;JVM 정리&quot; data-og-description=&quot;JVM ( Java Virtual Machine )&quot; data-og-host=&quot;torpid-flyingfish-958.notion.site&quot; data-og-source-url=&quot;https://torpid-flyingfish-958.notion.site/JVM-51133bd1e71d495c8a1ea042b346fab1&quot; data-og-url=&quot;https://torpid-flyingfish-958.notion.site/51133bd1e71d495c8a1ea042b346fab1&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/MUqTG/hyOfgk7DXU/jUxDMGsbjbmj1kBNL7hBAk/img.png?width=820&amp;amp;height=313&amp;amp;face=0_0_820_313,https://scrap.kakaocdn.net/dn/F3PKK/hyOfaSJFbG/h3F0Ng6kHt40kQF7PPE2Rk/img.png?width=820&amp;amp;height=313&amp;amp;face=0_0_820_313&quot;&gt;&lt;a href=&quot;https://torpid-flyingfish-958.notion.site/JVM-51133bd1e71d495c8a1ea042b346fab1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://torpid-flyingfish-958.notion.site/JVM-51133bd1e71d495c8a1ea042b346fab1&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/MUqTG/hyOfgk7DXU/jUxDMGsbjbmj1kBNL7hBAk/img.png?width=820&amp;amp;height=313&amp;amp;face=0_0_820_313,https://scrap.kakaocdn.net/dn/F3PKK/hyOfaSJFbG/h3F0Ng6kHt40kQF7PPE2Rk/img.png?width=820&amp;amp;height=313&amp;amp;face=0_0_820_313');&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;JVM 정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;JVM ( Java Virtual Machine )&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;torpid-flyingfish-958.notion.site&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 Diary/# JAVA</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/62</guid>
      <comments>https://mojjisoft.tistory.com/62#entry62comment</comments>
      <pubDate>Sun, 1 May 2022 12:54:59 +0900</pubDate>
    </item>
    <item>
      <title>[ SQL ] 003. 실행계획 보는법</title>
      <link>https://mojjisoft.tistory.com/61</link>
      <description>&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;170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HyLBo/btrzKbHlquy/dNeRByhwmvbgNxEdseWMZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HyLBo/btrzKbHlquy/dNeRByhwmvbgNxEdseWMZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HyLBo/btrzKbHlquy/dNeRByhwmvbgNxEdseWMZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHyLBo%2FbtrzKbHlquy%2FdNeRByhwmvbgNxEdseWMZK%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;489&quot; height=&quot;91&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;170&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccIU2I/btrzMIw60sk/K9EaoRQbeiC6Z3NkkN7yUk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccIU2I/btrzMIw60sk/K9EaoRQbeiC6Z3NkkN7yUk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccIU2I/btrzMIw60sk/K9EaoRQbeiC6Z3NkkN7yUk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccIU2I%2FbtrzMIw60sk%2FK9EaoRQbeiC6Z3NkkN7yUk%2Fimg.jpg&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;302&quot; height=&quot;181&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 실행계획이란?&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SQL이 실행되어 데이터를 처리하고 할 때, 옵티마이저에서 수립되는 SQL 실행방법론&amp;nbsp;&lt;/li&gt;
&lt;li&gt;가장 안에서부터, 가장 위에서 부터 차례차례 읽으면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;171&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmNvWI/btrzIoNqnQo/LBTfCVaac8TCZ5qJFpj4nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmNvWI/btrzIoNqnQo/LBTfCVaac8TCZ5qJFpj4nk/img.png&quot; data-alt=&quot;실행계획 순서 3 - 2- 5- 4- 1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmNvWI/btrzIoNqnQo/LBTfCVaac8TCZ5qJFpj4nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmNvWI%2FbtrzIoNqnQo%2FLBTfCVaac8TCZ5qJFpj4nk%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;171&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;171&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;실행계획 순서 3 - 2- 5- 4- 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;항목&lt;/td&gt;
&lt;td&gt;의미&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Id&lt;/td&gt;
&lt;td&gt;Operation의 Id. Predicate Information에 정보가 있다면 Id와 연결된다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operation&lt;/td&gt;
&lt;td&gt;수행되는 일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Name&lt;/td&gt;
&lt;td&gt;Operation이 수행되는 테이블 혹은 인덱스 --&amp;gt; 오브젝트명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rows&lt;/td&gt;
&lt;td&gt;각 Operation이 끝났을 때 반환되는 예상치 건수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bytes&lt;/td&gt;
&lt;td&gt;Access 하는 byte 수 예상치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost(%CPU)&lt;/td&gt;
&lt;td&gt;Operation의 비용 --&amp;gt; 누적치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time&lt;/td&gt;
&lt;td&gt;예상 수행 시간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;access Predicate&lt;/td&gt;
&lt;td&gt;block을 읽기 전에 어떤 방법으로 block을 읽을 것인지 결정. --&amp;gt; index ? full table scan ? 등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;filter Predicate&lt;/td&gt;
&lt;td&gt;block을 읽은 후 데이터를 필터링되어 사용되는 조건&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 옵티마이저(Optimizer) 란?&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진&lt;/li&gt;
&lt;li&gt;옵티마이저의 종류
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;규칙 기반 옵티마이저 ( RBO )&amp;nbsp; : 오라클8 이하의 버전에 기본으로 설정되어있음&lt;/li&gt;
&lt;li&gt;비용 기반 옵티마이저 : 오라클 10 이후 버전에 주로 사용됨 &lt;br /&gt;SQL문을 처리하는데 필요한 비용이 가장 적은 실행계획을 선택하는 방식, 여기서 비용은 SQL문을 처리하기 위해 예상되는&lt;br /&gt;소요시간, 자원사용량을 의미 &amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddHjXh/btrzLxW9wiz/pJlGGALWDVRd9xXNzY2FOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddHjXh/btrzLxW9wiz/pJlGGALWDVRd9xXNzY2FOK/img.png&quot; data-origin-width=&quot;456&quot; data-origin-height=&quot;343&quot; data-is-animation=&quot;false&quot; width=&quot;382&quot; height=&quot;287&quot; style=&quot;width: 43.3835%; margin-right: 10px;&quot; data-widthpercent=&quot;43.89&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddHjXh/btrzLxW9wiz/pJlGGALWDVRd9xXNzY2FOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddHjXh%2FbtrzLxW9wiz%2FpJlGGALWDVRd9xXNzY2FOK%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;456&quot; height=&quot;343&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cg6ZSF/btrzKLuj4h9/W1XRzLopWy1mong2O8KmEK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cg6ZSF/btrzKLuj4h9/W1XRzLopWy1mong2O8KmEK/img.jpg&quot; width=&quot;377&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;296&quot; data-is-animation=&quot;undefined&quot; style=&quot;width: 55.4537%;&quot; data-widthpercent=&quot;56.11&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cg6ZSF/btrzKLuj4h9/W1XRzLopWy1mong2O8KmEK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcg6ZSF%2FbtrzKLuj4h9%2FW1XRzLopWy1mong2O8KmEK%2Fimg.jpg&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;296&quot;/&gt;&lt;/span&gt;&lt;/div&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;출처 : &lt;a href=&quot;https://myjamong.tistory.com/236&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://myjamong.tistory.com/236&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1650291995401&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;[Oracle] 실행계획 확인 방법 XPLAN, AutoTrace, SQL Trace&quot; data-og-description=&quot;실행계획 알고리즘 문제 풀때를 떠올려봅시다. 문제를 읽고 어떤 방식으로 풀어야 정확도와 효율성을 잡을 수 있을지 고민합니다. 완전탐색을 해야하는지, 이분탐으로 시간복잡도를 줄일 수 있&quot; data-og-host=&quot;myjamong.tistory.com&quot; data-og-source-url=&quot;https://myjamong.tistory.com/236&quot; data-og-url=&quot;https://myjamong.tistory.com/236&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/doYnBi/hyN5FlQ8sC/JxKJlWEkklzULnlBDKTQLk/img.png?width=800&amp;amp;height=474&amp;amp;face=0_0_800_474,https://scrap.kakaocdn.net/dn/b2WAdQ/hyN5v4CU6h/kzg6M1VxdnOaPnMcF4C6d1/img.png?width=800&amp;amp;height=474&amp;amp;face=0_0_800_474,https://scrap.kakaocdn.net/dn/wjOti/hyN5wbokXE/huxSQZX38gzVFIXCpmrcQK/img.png?width=808&amp;amp;height=727&amp;amp;face=0_0_808_727&quot;&gt;&lt;a href=&quot;https://myjamong.tistory.com/236&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://myjamong.tistory.com/236&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/doYnBi/hyN5FlQ8sC/JxKJlWEkklzULnlBDKTQLk/img.png?width=800&amp;amp;height=474&amp;amp;face=0_0_800_474,https://scrap.kakaocdn.net/dn/b2WAdQ/hyN5v4CU6h/kzg6M1VxdnOaPnMcF4C6d1/img.png?width=800&amp;amp;height=474&amp;amp;face=0_0_800_474,https://scrap.kakaocdn.net/dn/wjOti/hyN5wbokXE/huxSQZX38gzVFIXCpmrcQK/img.png?width=808&amp;amp;height=727&amp;amp;face=0_0_808_727');&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;[Oracle] 실행계획 확인 방법 XPLAN, AutoTrace, SQL Trace&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;myjamong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처 : &lt;a href=&quot;https://coding-factory.tistory.com/743&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://coding-factory.tistory.com/743&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1650292008100&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;[DB] 데이터베이스 옵티마이저(Optimizer)에 대하여&quot; data-og-description=&quot;옵티마이저(Optimizer)란? 옵티마이저는 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진입니다. 컴퓨터의 두뇌가 CPU인 것처럼 DBMS의 두뇌는 옵티마이저라고 &quot; data-og-host=&quot;coding-factory.tistory.com&quot; data-og-source-url=&quot;https://coding-factory.tistory.com/743&quot; data-og-url=&quot;https://coding-factory.tistory.com/743&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cEtaQW/hyN5vDykqo/7sq26tfxyK7n31HdRJqcQ0/img.png?width=456&amp;amp;height=343&amp;amp;face=0_0_456_343,https://scrap.kakaocdn.net/dn/cboRp6/hyN5xahHFq/9yKBOF263B00rprZEqsCLk/img.png?width=456&amp;amp;height=343&amp;amp;face=0_0_456_343,https://scrap.kakaocdn.net/dn/csefXJ/hyN5IJFOex/9PEJxF6eKv2Fw3VVf8zVS1/img.jpg?width=428&amp;amp;height=428&amp;amp;face=0_0_428_428&quot;&gt;&lt;a href=&quot;https://coding-factory.tistory.com/743&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://coding-factory.tistory.com/743&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cEtaQW/hyN5vDykqo/7sq26tfxyK7n31HdRJqcQ0/img.png?width=456&amp;amp;height=343&amp;amp;face=0_0_456_343,https://scrap.kakaocdn.net/dn/cboRp6/hyN5xahHFq/9yKBOF263B00rprZEqsCLk/img.png?width=456&amp;amp;height=343&amp;amp;face=0_0_456_343,https://scrap.kakaocdn.net/dn/csefXJ/hyN5IJFOex/9PEJxF6eKv2Fw3VVf8zVS1/img.jpg?width=428&amp;amp;height=428&amp;amp;face=0_0_428_428');&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;[DB] 데이터베이스 옵티마이저(Optimizer)에 대하여&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;옵티마이저(Optimizer)란? 옵티마이저는 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진입니다. 컴퓨터의 두뇌가 CPU인 것처럼 DBMS의 두뇌는 옵티마이저라고&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;coding-factory.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>IT Diary/# SQL</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/61</guid>
      <comments>https://mojjisoft.tistory.com/61#entry61comment</comments>
      <pubDate>Mon, 18 Apr 2022 23:29:14 +0900</pubDate>
    </item>
    <item>
      <title>[ Knowledge ] Redis(REmote DIctionary Server) 란?</title>
      <link>https://mojjisoft.tistory.com/60</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;171&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IoE3H/btrzI2qf82x/8gvjqwBwJR9TujnNIv27o1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IoE3H/btrzI2qf82x/8gvjqwBwJR9TujnNIv27o1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IoE3H/btrzI2qf82x/8gvjqwBwJR9TujnNIv27o1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIoE3H%2FbtrzI2qf82x%2F8gvjqwBwJR9TujnNIv27o1%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;512&quot; height=&quot;171&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;171&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;b&gt;1.&amp;nbsp; redis 의 정의&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;In-Memory 데이터베이스이며, 다른 제품들과 다르게 다양한 자료구조를 지원한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;String, Set, Sorted Set , Hash ,List&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;key-value 구조 데이터 관리 시스템&lt;/li&gt;
&lt;li&gt;쓰기 성능 증대를 위한 클라이언트 측 샤딩(Sharding ) 지원&lt;/li&gt;
&lt;li&gt;영속성을 지원한다. (명령어로 명시적으로 삭제, expires를 설정하지 않으면 데이터가 삭제되지 않는다)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;AOF(Append Only File) 과 RDB(snapshot) 방식을 지원한다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Redis Server는 1개의 Single Thread로 수행된다. ( 딱 하나의 명령어만 실행할 수 있다는 뜻.. )
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;장점 : Atomic 보장, race condition 회피
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Atomicity(원자성) :&amp;nbsp; Transaction 과&amp;nbsp; 관련된 일은 모두 실행되던지 모두 실행되지 않도록 하던지를 보장하는 특성&lt;/li&gt;
&lt;li&gt;race condition : 두 개 이상의 프로세스가 공통자원을 병행적으로 읽거나 쓰는 동작을 할 때, 공용데이터에 대한접근이&lt;br /&gt;어떤 순서에 따라 이루어졋는지에 따라 그 실행결과가 같지 않고 달라지는 상황을 말함 &lt;br /&gt;( Mutal exclusion , deadlock ,Starvation)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;단점 : 명령어 실행이 길어지면 다른 명령에 영향을 준다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;743&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QQvZg/btrzHN8gNaw/Y74K5h3JaORVM1LrlNUuI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QQvZg/btrzHN8gNaw/Y74K5h3JaORVM1LrlNUuI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QQvZg/btrzHN8gNaw/Y74K5h3JaORVM1LrlNUuI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQQvZg%2FbtrzHN8gNaw%2FY74K5h3JaORVM1LrlNUuI1%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;1280&quot; height=&quot;743&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;743&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. redis 를 쓰는 이유는 ?&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;web - was - db 의 전형적인 구조에서는 사용자가 늘어남에 따라 DB에 과부하가 생기게 되고 데이터베이스의 물리적인 한계로 인해 매 transaction 마다 디스크를 접근해야해서 느려질 수 밖에 없다.&lt;/li&gt;
&lt;li&gt;이러한 속도에 대한 문제를 해결하기 위해 Cache 를 찾게 됨 , cache 는 한자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소를 말한다. 그래서 같은 요청이 여러번 들어와도 캐시서버에서 바로 결과값을 주기 때문에 DB부하를 줄이고 서비스 개선도 이루어질 수 있음&lt;/li&gt;
&lt;li&gt;cache 서버에 데이터가 있으면 바로 클라이언트로 데이터를 반환 ( cache Hit ) ,&lt;br /&gt;cache 서버에 데이터가 없으면 DB에 해당 데이터를 요청 함( cache Miss )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&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;a href=&quot;https://brunch.co.kr/@jehovah/20&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://brunch.co.kr/@jehovah/20&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1650290267085&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;Redis 기본 정리&quot; data-og-description=&quot;캐시를 알아야 하는 순간! | 캐시를 접하게 되는 순간 서비스를 처음 운영할 때는 WEB-WAS-DB의 전형적인 3티어 구조를 취하는 편이 보통입니다. 사용자가 몇 명 되지 않는 서비스의 경우에는 3티어 &quot; data-og-host=&quot;brunch.co.kr&quot; data-og-source-url=&quot;https://brunch.co.kr/@jehovah/20&quot; data-og-url=&quot;https://brunch.co.kr/@jehovah/20&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bU1J14/hyN5xnODlm/kp4ITlqXMggWgsQN5LWt5k/img.jpg?width=1280&amp;amp;height=581&amp;amp;face=0_0_1280_581,https://scrap.kakaocdn.net/dn/cgpRv8/hyN5Iizvke/vyC6ABQQN4DNbq32wPKVkK/img.jpg?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500,https://scrap.kakaocdn.net/dn/F8XCN/hyN5uYVjU1/pCecXp0UWkrv84n2gOqoi0/img.jpg?width=1280&amp;amp;height=729&amp;amp;face=0_0_1280_729&quot;&gt;&lt;a href=&quot;https://brunch.co.kr/@jehovah/20&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://brunch.co.kr/@jehovah/20&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bU1J14/hyN5xnODlm/kp4ITlqXMggWgsQN5LWt5k/img.jpg?width=1280&amp;amp;height=581&amp;amp;face=0_0_1280_581,https://scrap.kakaocdn.net/dn/cgpRv8/hyN5Iizvke/vyC6ABQQN4DNbq32wPKVkK/img.jpg?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500,https://scrap.kakaocdn.net/dn/F8XCN/hyN5uYVjU1/pCecXp0UWkrv84n2gOqoi0/img.jpg?width=1280&amp;amp;height=729&amp;amp;face=0_0_1280_729');&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;Redis 기본 정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;캐시를 알아야 하는 순간! | 캐시를 접하게 되는 순간 서비스를 처음 운영할 때는 WEB-WAS-DB의 전형적인 3티어 구조를 취하는 편이 보통입니다. 사용자가 몇 명 되지 않는 서비스의 경우에는 3티어&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;brunch.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처 : &lt;a href=&quot;https://sjh836.tistory.com/178&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://sjh836.tistory.com/178&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1650290273535&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;Redis 기본 개념 (기초, Collection 타입, Expire, Persistence)&quot; data-og-description=&quot;참조문서 https://redis.io/documentation https://github.com/antirez/redis https://redislabs.com/redis-enterprise/data-structures/ 명령어 목록 :&amp;nbsp;https://redis.io/commands 1. redis란? redis는 REmote..&quot; data-og-host=&quot;sjh836.tistory.com&quot; data-og-source-url=&quot;https://sjh836.tistory.com/178&quot; data-og-url=&quot;https://sjh836.tistory.com/178&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rhTyX/hyN5Bjq65p/ANpUTk7NhI5AP1RfdoRj41/img.png?width=244&amp;amp;height=206&amp;amp;face=0_0_244_206,https://scrap.kakaocdn.net/dn/meOI0/hyN5AdKtpm/vPzfgtZRkxOdxoOLQKW44K/img.png?width=244&amp;amp;height=206&amp;amp;face=0_0_244_206,https://scrap.kakaocdn.net/dn/OWZGC/hyN5xH7C94/HlCVAQX0lobIHwCWLZ4za1/img.png?width=1550&amp;amp;height=900&amp;amp;face=0_0_1550_900&quot;&gt;&lt;a href=&quot;https://sjh836.tistory.com/178&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://sjh836.tistory.com/178&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rhTyX/hyN5Bjq65p/ANpUTk7NhI5AP1RfdoRj41/img.png?width=244&amp;amp;height=206&amp;amp;face=0_0_244_206,https://scrap.kakaocdn.net/dn/meOI0/hyN5AdKtpm/vPzfgtZRkxOdxoOLQKW44K/img.png?width=244&amp;amp;height=206&amp;amp;face=0_0_244_206,https://scrap.kakaocdn.net/dn/OWZGC/hyN5xH7C94/HlCVAQX0lobIHwCWLZ4za1/img.png?width=1550&amp;amp;height=900&amp;amp;face=0_0_1550_900');&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;Redis 기본 개념 (기초, Collection 타입, Expire, Persistence)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;참조문서 https://redis.io/documentation https://github.com/antirez/redis https://redislabs.com/redis-enterprise/data-structures/ 명령어 목록 :&amp;nbsp;https://redis.io/commands 1. redis란? redis는 REmote..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;sjh836.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>IT Diary/# Knowledge</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/60</guid>
      <comments>https://mojjisoft.tistory.com/60#entry60comment</comments>
      <pubDate>Mon, 18 Apr 2022 23:06:49 +0900</pubDate>
    </item>
    <item>
      <title>Stream 뿌셔보기</title>
      <link>https://mojjisoft.tistory.com/59</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Stream.jpg&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;841&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pOT0R/btrqt0B73v7/R8u7Pb1DvL7X4B7iQKR2QK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pOT0R/btrqt0B73v7/R8u7Pb1DvL7X4B7iQKR2QK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pOT0R/btrqt0B73v7/R8u7Pb1DvL7X4B7iQKR2QK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpOT0R%2Fbtrqt0B73v7%2FR8u7Pb1DvL7X4B7iQKR2QK%2Fimg.jpg&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;804&quot; height=&quot;1138&quot; data-filename=&quot;Stream.jpg&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;841&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Stream.jpg&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;841&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mbvh2/btrquOVZpvc/xN68OaBHMkTtqJsnSZhPo1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mbvh2/btrquOVZpvc/xN68OaBHMkTtqJsnSZhPo1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mbvh2/btrquOVZpvc/xN68OaBHMkTtqJsnSZhPo1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmbvh2%2FbtrquOVZpvc%2FxN68OaBHMkTtqJsnSZhPo1%2Fimg.jpg&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;793&quot; height=&quot;1123&quot; data-filename=&quot;Stream.jpg&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;841&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;716&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bioAAr/btrqBfqwv3z/YjpruCpDjkb3qXXUHOXls1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bioAAr/btrqBfqwv3z/YjpruCpDjkb3qXXUHOXls1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bioAAr/btrqBfqwv3z/YjpruCpDjkb3qXXUHOXls1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbioAAr%2FbtrqBfqwv3z%2FYjpruCpDjkb3qXXUHOXls1%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;684&quot; height=&quot;312&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;716&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>IT Diary/# JAVA</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/59</guid>
      <comments>https://mojjisoft.tistory.com/59#entry59comment</comments>
      <pubDate>Wed, 12 Jan 2022 23:07:41 +0900</pubDate>
    </item>
    <item>
      <title>JPA ( Java Persistence API ) 의 정의</title>
      <link>https://mojjisoft.tistory.com/58</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;JPA.jpeg&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;609&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPMxih/btrp6wtvGrz/r1jIO7jvKfPOA3VOkyNcD0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPMxih/btrp6wtvGrz/r1jIO7jvKfPOA3VOkyNcD0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPMxih/btrp6wtvGrz/r1jIO7jvKfPOA3VOkyNcD0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPMxih%2Fbtrp6wtvGrz%2Fr1jIO7jvKfPOA3VOkyNcD0%2Fimg.jpg&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;202&quot; height=&quot;269&quot; data-filename=&quot;JPA.jpeg&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;609&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;b&gt;1. JPA의 정의&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;JPA(Java Persistence API)는 ORM(Object-Relation Mapping) 전문가가 참여한 EJB 3.0(Enterprise Java Beans) 스펙 작업에서&amp;nbsp;&lt;u&gt;기존 EJB ORM 표준으로 사용되던 엔티티빈(Entity Bean) 을 대체하여 나온 ORM 표준&lt;/u&gt;이다. 기존 엔티티빈이 EJB 컨테이너에 의존하던것에 비해 POJO 방식 프레임워크로 개발되었으며, 이로인해 Java EE 뿐 아니라 JAVA SE 에서도 사용 가능하며 활용도가 높다.&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;b&gt;2. JPA 동작원리&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-01-07 오후 11.58.26.png&quot; data-origin-width=&quot;1596&quot; data-origin-height=&quot;584&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2Sotj/btrp09zlrXC/PJoSlFDLKX4Ts5NyEPdnjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2Sotj/btrp09zlrXC/PJoSlFDLKX4Ts5NyEPdnjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2Sotj/btrp09zlrXC/PJoSlFDLKX4Ts5NyEPdnjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2Sotj%2Fbtrp09zlrXC%2FPJoSlFDLKX4Ts5NyEPdnjk%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;1596&quot; height=&quot;584&quot; data-filename=&quot;스크린샷 2022-01-07 오후 11.58.26.png&quot; data-origin-width=&quot;1596&quot; data-origin-height=&quot;584&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-01-08 오전 12.12.39.png&quot; data-origin-width=&quot;1534&quot; data-origin-height=&quot;780&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOa3qj/btrp6v9dwVz/jqmwDi5Yd1SrNasSBjywr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOa3qj/btrp6v9dwVz/jqmwDi5Yd1SrNasSBjywr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOa3qj/btrp6v9dwVz/jqmwDi5Yd1SrNasSBjywr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOa3qj%2Fbtrp6v9dwVz%2FjqmwDi5Yd1SrNasSBjywr1%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;1534&quot; height=&quot;780&quot; data-filename=&quot;스크린샷 2022-01-08 오전 12.12.39.png&quot; data-origin-width=&quot;1534&quot; data-origin-height=&quot;780&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;자바 ORM 기술에 대한 표준명세&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;ORM ( Objecet Relational Mapping )&amp;nbsp; 객체-관계 맵핑의 줄임말&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;OOP(Object Oriented Programming) 에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(Relation Database) 에서 쓰이는 데이터인 테이블을 자동으로 매핑하는것을 의미&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DB와 객체는 엄연히 다른 존재이므로 DB를 객체화 시켜서 사용할 수 있게 하는게 JPA의 장점이라고 생각한다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DB&amp;nbsp; &amp;lt;-&amp;nbsp; mapping -&amp;gt; Object 필드&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;&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://geonlee.tistory.com/207&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://geonlee.tistory.com/207&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1641568531623&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;ORM(Object Relational Mapping)이 뭘까?  &quot; data-og-description=&quot;ORM이란? ORM은 Object Relational Mapping 즉, 객체-관계 매핑의 줄임말이다. 객체-관계 매핑을 풀어서 설명하자면 우리가 OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(R..&quot; data-og-host=&quot;geonlee.tistory.com&quot; data-og-source-url=&quot;https://geonlee.tistory.com/207&quot; data-og-url=&quot;https://geonlee.tistory.com/207&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/irWMy/hyM0EaWbWo/k3LkDv2w1PuEF9e84qTI30/img.jpg?width=800&amp;amp;height=420&amp;amp;face=0_0_800_420,https://scrap.kakaocdn.net/dn/q33A0/hyM0GNmirq/80P2iMxSjBqsdZIs47ZQ1K/img.jpg?width=800&amp;amp;height=420&amp;amp;face=0_0_800_420,https://scrap.kakaocdn.net/dn/wg5Z6/hyM0vdZ6HQ/ZkVRvLPxXnrBhef0bP1rkk/img.jpg?width=880&amp;amp;height=462&amp;amp;face=0_0_880_462&quot;&gt;&lt;a href=&quot;https://geonlee.tistory.com/207&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://geonlee.tistory.com/207&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/irWMy/hyM0EaWbWo/k3LkDv2w1PuEF9e84qTI30/img.jpg?width=800&amp;amp;height=420&amp;amp;face=0_0_800_420,https://scrap.kakaocdn.net/dn/q33A0/hyM0GNmirq/80P2iMxSjBqsdZIs47ZQ1K/img.jpg?width=800&amp;amp;height=420&amp;amp;face=0_0_800_420,https://scrap.kakaocdn.net/dn/wg5Z6/hyM0vdZ6HQ/ZkVRvLPxXnrBhef0bP1rkk/img.jpg?width=880&amp;amp;height=462&amp;amp;face=0_0_880_462');&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;ORM(Object Relational Mapping)이 뭘까?  &lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;ORM이란? ORM은 Object Relational Mapping 즉, 객체-관계 매핑의 줄임말이다. 객체-관계 매핑을 풀어서 설명하자면 우리가 OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(R..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;geonlee.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참조: &lt;a href=&quot;https://velog.io/@adam2/JPA%EB%8A%94-%EB%8F%84%EB%8D%B0%EC%B2%B4-%EB%AD%98%EA%B9%8C-orm-%EC%98%81%EC%86%8D%EC%84%B1-hibernate-spring-data-jpa&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@adam2/JPA%EB%8A%94-%EB%8F%84%EB%8D%B0%EC%B2%B4-%EB%AD%98%EA%B9%8C-orm-%EC%98%81%EC%86%8D%EC%84%B1-hibernate-spring-data-jpa&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1641568538773&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;JPA는 도대체 뭘까? (orm, 영속성, hibernate, spring-data-jpa)&quot; data-og-description=&quot;JPA는 도대체 무엇일까요? orm, jdbc, 영속성, hibernate, ... 관련 지식까지 모두 파해쳐봅니다.&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@adam2/JPA%EB%8A%94-%EB%8F%84%EB%8D%B0%EC%B2%B4-%EB%AD%98%EA%B9%8C-orm-%EC%98%81%EC%86%8D%EC%84%B1-hibernate-spring-data-jpa&quot; data-og-url=&quot;https://velog.io/@adam2/JPA는-도데체-뭘까-orm-영속성-hibernate-spring-data-jpa&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/baZcJz/hyM0Eos95t/xobYB430Hvolhk0VThlWc1/img.png?width=768&amp;amp;height=355&amp;amp;face=0_0_768_355,https://scrap.kakaocdn.net/dn/gej0n/hyM0z8xgjz/Vx0eHf2qz3oKBP04kDTLJ1/img.png?width=1106&amp;amp;height=511&amp;amp;face=0_0_1106_511&quot;&gt;&lt;a href=&quot;https://velog.io/@adam2/JPA%EB%8A%94-%EB%8F%84%EB%8D%B0%EC%B2%B4-%EB%AD%98%EA%B9%8C-orm-%EC%98%81%EC%86%8D%EC%84%B1-hibernate-spring-data-jpa&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@adam2/JPA%EB%8A%94-%EB%8F%84%EB%8D%B0%EC%B2%B4-%EB%AD%98%EA%B9%8C-orm-%EC%98%81%EC%86%8D%EC%84%B1-hibernate-spring-data-jpa&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/baZcJz/hyM0Eos95t/xobYB430Hvolhk0VThlWc1/img.png?width=768&amp;amp;height=355&amp;amp;face=0_0_768_355,https://scrap.kakaocdn.net/dn/gej0n/hyM0z8xgjz/Vx0eHf2qz3oKBP04kDTLJ1/img.png?width=1106&amp;amp;height=511&amp;amp;face=0_0_1106_511');&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;JPA는 도대체 뭘까? (orm, 영속성, hibernate, spring-data-jpa)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;JPA는 도대체 무엇일까요? orm, jdbc, 영속성, hibernate, ... 관련 지식까지 모두 파해쳐봅니다.&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;</description>
      <category>IT Diary/# JPA</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/58</guid>
      <comments>https://mojjisoft.tistory.com/58#entry58comment</comments>
      <pubDate>Sat, 8 Jan 2022 00:33:55 +0900</pubDate>
    </item>
    <item>
      <title>010. SOAP (Simple Object Access Protocol)</title>
      <link>https://mojjisoft.tistory.com/57</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SOAP(Simple Object Access Protocol)는 그 자체로 프로토콜이며, 보안이나 메시지 전송 등에 있어서 REST보다 더 많은 표준들이 정해져있기 때문에 조금 더 복잡합니다.&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이러한 표준들로 인해서 오버헤드가 많기는 하지만, 보안, 트랜잭션, ACID(원자성, 일관성, 고립성, 지속성)을 준수해야 하는 보다 종합적인 기능이 필요한 조직에게는 적합한 방식이 될 수 있습니다. 굳이 비교를 하자면, SOAP는 웹 서비스 시나리오에 적용하기에는 그다지 좋지 않기 때문에, 기업용 애플리케이션 등을 작업하는데 더 이상적이라고 말할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SOAP는 보안 수준이 엄격합니다. SOAP에서는 SSL도 지원하고 WS-Security라는 자체 표준의 보안 기능도 가지고 있지요. 따라서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;은행용 모바일 앱처럼 보안 수준이 높아야 하거나, 신뢰할 수 있는 메시징 앱, 또는 ACID를 준수해야 하는 경우라면 SOAP 방식이 더욱 선호됩니다.&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;REST에서는 표준화된 메시징 시스템이 갖춰져 있지 않으며, 통신 장애가 있을 경우 재시도를 통해서만 조치할 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;반면 SOAP 표준에는 성공/반복 실행 로직이 규정되어 있기 때문에, SOAP API를 통해서 통신을 할 때 처음부터 끝까지 신뢰성을 제공합니다.&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;SOAP 표준에는 ACID 준수에 관한 사항이 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;ACID를 준수하기 때문에 데이터의 변형을 줄여주고, 데이터베이스와의 상호작용에 대해서 사전에 정확하게 정하기 때문에 데이터의 무결성을 지켜주지요.&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ACID는 데이터 일관성을 위한 다른 방식들보다도 더 보수적이기 때문에, 금융 정보 등의 민감한 데이터를 주고받을 때 일반적으로 많이 사용됩니다.&lt;/p&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-origin-width=&quot;874&quot; data-origin-height=&quot;725&quot; width=&quot;697&quot; height=&quot;578&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8jl4V/btrfdXt7ia6/ViEtskt5MWXa3SRKQsKh7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8jl4V/btrfdXt7ia6/ViEtskt5MWXa3SRKQsKh7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8jl4V/btrfdXt7ia6/ViEtskt5MWXa3SRKQsKh7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8jl4V%2FbtrfdXt7ia6%2FViEtskt5MWXa3SRKQsKh7K%2Fimg.png&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;725&quot; width=&quot;697&quot; height=&quot;578&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;a href=&quot;http://blog.wishket.com/soap-api-vs-rest-api-%EB%91%90-%EB%B0%A9%EC%8B%9D%EC%9D%98-%EA%B0%80%EC%9E%A5-%ED%81%B0-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://blog.wishket.com/soap-api-vs-rest-api-%EB%91%90-%EB%B0%A9%EC%8B%9D%EC%9D%98-%EA%B0%80%EC%9E%A5-%ED%81%B0-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1631716769147&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;SOAP REST 차이, 두 방식의 가장 큰 차이점은? - Wishket&quot; data-og-description=&quot;API는 방식에 따라 'SOAP REST 차이'가 있다는데, 이 둘의 차이점은 과연 무엇일까요? 각각 어떤 장점들이 있는지, 어떤 상황에 무엇이 더 잘 맞는지 알려드리겠습니다:)&quot; data-og-host=&quot;blog.wishket.com&quot; data-og-source-url=&quot;http://blog.wishket.com/soap-api-vs-rest-api-%EB%91%90-%EB%B0%A9%EC%8B%9D%EC%9D%98-%EA%B0%80%EC%9E%A5-%ED%81%B0-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80/&quot; data-og-url=&quot;http://blog.wishket.com/soap-api-vs-rest-api-%eb%91%90-%eb%b0%a9%ec%8b%9d%ec%9d%98-%ea%b0%80%ec%9e%a5-%ed%81%b0-%ec%b0%a8%ec%9d%b4%ec%a0%90%ec%9d%80/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/g94YL/hyLCvFvACJ/6LyaoHNvpfA3HNgFvdtSPK/img.png?width=524&amp;amp;height=360&amp;amp;face=0_0_524_360,https://scrap.kakaocdn.net/dn/bwKqwV/hyLCJX2JuP/1N237JLsYoxQAqvaftaniK/img.png?width=487&amp;amp;height=487&amp;amp;face=0_0_487_487&quot;&gt;&lt;a href=&quot;http://blog.wishket.com/soap-api-vs-rest-api-%EB%91%90-%EB%B0%A9%EC%8B%9D%EC%9D%98-%EA%B0%80%EC%9E%A5-%ED%81%B0-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://blog.wishket.com/soap-api-vs-rest-api-%EB%91%90-%EB%B0%A9%EC%8B%9D%EC%9D%98-%EA%B0%80%EC%9E%A5-%ED%81%B0-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/g94YL/hyLCvFvACJ/6LyaoHNvpfA3HNgFvdtSPK/img.png?width=524&amp;amp;height=360&amp;amp;face=0_0_524_360,https://scrap.kakaocdn.net/dn/bwKqwV/hyLCJX2JuP/1N237JLsYoxQAqvaftaniK/img.png?width=487&amp;amp;height=487&amp;amp;face=0_0_487_487');&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;SOAP REST 차이, 두 방식의 가장 큰 차이점은? - Wishket&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;API는 방식에 따라 'SOAP REST 차이'가 있다는데, 이 둘의 차이점은 과연 무엇일까요? 각각 어떤 장점들이 있는지, 어떤 상황에 무엇이 더 잘 맞는지 알려드리겠습니다:)&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.wishket.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>IT Interview</category>
      <category>REST</category>
      <category>soap</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/57</guid>
      <comments>https://mojjisoft.tistory.com/57#entry57comment</comments>
      <pubDate>Wed, 15 Sep 2021 23:39:53 +0900</pubDate>
    </item>
    <item>
      <title>009. DB JOIN의 종류</title>
      <link>https://mojjisoft.tistory.com/56</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;Nested Loop Join&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;2개 이상의 테이블에서 하나의 집합을 기준으로 순차적으로 상대방 Row를 결합하여 원하는 결과를 조합하는 방식&lt;/li&gt;
&lt;li&gt;먼저 선행 테이블의 처리 범위를 하나씩 액세스하면서 추출된 값으로 연결할 테이블을 조인한다&lt;/li&gt;
&lt;li&gt;순차적으로 처리된다.&lt;/li&gt;
&lt;li&gt;바깥 테이블과 일치하는 값을 안쪽 테이블에서 찾아야 하므로 안쪽 테이블의 해당 열에 인덱스가 필요하다.&lt;/li&gt;
&lt;li&gt;메모리 사용량은 가장 적다.&lt;/li&gt;
&lt;li&gt;바깥 테이블과 안쪽 테이블의 크기는 성능과 관련이 없다.&lt;/li&gt;
&lt;li&gt;첫 테이블 필터링 -&amp;gt; 두테이블간의 연결 -&amp;gt; 최종운반 단위 산출가지 반복적, 순차적으로 진행됩니다.&lt;/li&gt;
&lt;li&gt;선행 테이블의 처리 범위가 전체 일의 양을 결정합니다.&lt;/li&gt;
&lt;li&gt;후행 테이블의 필터링 조건은 선행 테이블에서 나온 결과를 한번 더 걸러주는 체크 조건 역할을 할 뿐 전체 처리량을 좌우하지 않습니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;391&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/em6gHT/btrfdWWe7Qz/HB3jiIlYAfcFrAtTZiHa5K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/em6gHT/btrfdWWe7Qz/HB3jiIlYAfcFrAtTZiHa5K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/em6gHT/btrfdWWe7Qz/HB3jiIlYAfcFrAtTZiHa5K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fem6gHT%2FbtrfdWWe7Qz%2FHB3jiIlYAfcFrAtTZiHa5K%2Fimg.jpg&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;391&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #131313; color: #444444;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&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;span&gt;2. &lt;b&gt;&lt;span&gt;Sort Merge Join&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #444444;&quot;&gt;양쪽 테이블의 처리 범위를 각자 액세스하여 정렬한 결과를 차례로 스캔하며, 연결고리 조건으로 Merge하는 방식을 말합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #444444;&quot;&gt;이 방식은 경우에따라 Loop Join 보다 훨씬 빨라지는 경우도 많이 있으며, 랜덤 액세스가 줄어들어 시스템 부하를 감소 시킵니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #444444;&quot;&gt;하지만 일반적으로 Loop Join보다는 사용빈도가 적습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;-&quot; data-ke-size=&quot;size16&quot;&gt;장점&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;처리량이 많을때 성능상 이점이 있다.&lt;/li&gt;
&lt;li&gt;중첩반복(Nested Loops)은 연결고리의 상태가 굉장히 중요하다. 한쪽 연결고리에 이상이 발생하면 중첩반복은 심히 고려해야한다. 이때 연결고리에 영향을 받지않는 Sort Merge를 쓰면 좋다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;-&quot; data-ke-size=&quot;size16&quot;&gt;단점&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정렬에 따른 부담 (메모리 사용 증가)정렬은 tempdb를 사용한다. 정렬양이 극도로 많아 tempdb의 임계치를 넘었을때 순간 전체 데이터베이스에 페이지잠금이 발생하는등 DB성능에 심각한 영향을 줄 수 있다.물론 가공없이 Clustered Index를 그대로 사용하게 되면 정렬은 안해도 되니 이때만큼은 정렬의 부담에서 해방된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;175&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQ0Mhy/btre9EXjtie/zkHxtkrlkTaMBe4iWGvw20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQ0Mhy/btre9EXjtie/zkHxtkrlkTaMBe4iWGvw20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQ0Mhy/btre9EXjtie/zkHxtkrlkTaMBe4iWGvw20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQ0Mhy%2Fbtre9EXjtie%2FzkHxtkrlkTaMBe4iWGvw20%2Fimg.png&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;175&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;584&quot; data-origin-height=&quot;665&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOYqAf/btre7Ilpbcz/JKSFlp7yoUvMGadQUd3Zgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOYqAf/btre7Ilpbcz/JKSFlp7yoUvMGadQUd3Zgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOYqAf/btre7Ilpbcz/JKSFlp7yoUvMGadQUd3Zgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOYqAf%2Fbtre7Ilpbcz%2FJKSFlp7yoUvMGadQUd3Zgk%2Fimg.png&quot; data-origin-width=&quot;584&quot; data-origin-height=&quot;665&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;3. Hash Join&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Hash Join은 Hash Table을 생성하여 Hash Function에 의한 탐색을 하여 조인합니다. 주로 대용량의 데이터를 사용할 때 사용되며 일반적으로 Nested Loop Join이나 Sorted Merge Join보다 빠르다고합니다.&lt;/b&gt;&lt;span style=&quot;color: #323232;&quot;&gt;&amp;nbsp;알고리즘에서 시간 복잡도의 개념으로 봤을 때도 Hash Function을 사용하게 되면 O(1)의 시간 복잡도를 갖게되니까 빠를수 밖에 없는 것 같습니다. 하지만, 해시 충돌을 방지나 해시 체인의 크기가 커지는 것을 막기 위해&amp;nbsp;&lt;/span&gt;&lt;b&gt;중복되는 데이터가 적은 경우에 사용되어하고 Hash Table을 생성하는데 Hash Area에 충분히 담길 정도로 데이터 양이 작아야합니다.&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;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;HASH JOIN의 사용처&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;1.&lt;/b&gt;&lt;/span&gt;&amp;nbsp;JOIN 컬럼에 적당한 인덱스가 없어 NL JOIN이 비효율적일 때&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;2.&lt;/b&gt;&lt;/span&gt;&amp;nbsp;JOIN Access량이 많아 Random Access 부하가 심하여 NL JOIN이 비효율적일 때&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;3.&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Sort Merge Join을 하기에는 두 테이블이 너무 커 Sort 부하가 심할 때&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;4.&lt;/b&gt;&amp;nbsp;&lt;/span&gt;수행빈도가 낮고 쿼리 수행 시간이 오래 걸리는 대용량 테이블을 JOIN 할 때&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;331&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5p945/btrfcXujY0n/JXqtUl35MQRM6iC8kKnmC0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5p945/btrfcXujY0n/JXqtUl35MQRM6iC8kKnmC0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5p945/btrfcXujY0n/JXqtUl35MQRM6iC8kKnmC0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5p945%2FbtrfcXujY0n%2FJXqtUl35MQRM6iC8kKnmC0%2Fimg.jpg&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;331&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;1.&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;둘 중 작은 집합(Build Input)을 읽어 Hash Area에 해시 테이블을 생성한다. (해시 함수에서 리턴 받은 버킷 주소로 찾아가 해시 체인에 엔트리를 연결)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;2.&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;반대쪽 큰 집합(Probe Input)을 읽어 해시 테이블을 탐색하면서 JOIN 한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;3.&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;해시 함수에서 리턴 받은 버킷 주소로 찾아가 해시 체인을 스캔하면서 데이터를 찾는다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;312&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lv0lO/btre6EpYFJG/kwBQV2t10gHplZZHVWmryK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lv0lO/btre6EpYFJG/kwBQV2t10gHplZZHVWmryK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lv0lO/btre6EpYFJG/kwBQV2t10gHplZZHVWmryK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flv0lO%2Fbtre6EpYFJG%2FkwBQV2t10gHplZZHVWmryK%2Fimg.jpg&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;312&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;b&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;&lt;a href=&quot;https://coding-factory.tistory.com/758&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;출처: https://coding-factory.tistory.com/758&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222;&quot;&gt;출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://needjarvis.tistory.com/162&quot;&gt;https://needjarvis.tistory.com/162&lt;/a&gt;&lt;span style=&quot;color: #222222;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;[자비스가 필요해]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222;&quot;&gt;출처:&lt;span&gt; &lt;a href=&quot;https://blog.sonim1.com/108&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://blog.sonim1.com/108&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1631712756205&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;[MSSQL] JOIN의 방식 - Nested loop Join / Merge Join / Hash Join&quot; data-og-description=&quot;Join의 방식에 관하여 Join의 종류는 5가지가 있습니다. INNER Join OUTER Join CROSS Join FULL OUTER Join SELF Join Join의 방식은 3가지가 있습니다. Nested Loop Join - 중첩반복 Merge Join - 정렬병합 Has..&quot; data-og-host=&quot;blog.sonim1.com&quot; data-og-source-url=&quot;https://blog.sonim1.com/108&quot; data-og-url=&quot;https://blog.sonim1.com/108&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cYNHel/hyLBweVTbj/f6mpjKcreMSB5I4JNgjMck/img.png?width=466&amp;amp;height=383&amp;amp;face=0_0_466_383,https://scrap.kakaocdn.net/dn/bbKehg/hyLCzA51Rq/b6Inc8CQRhnGloCYVvKi8K/img.png?width=466&amp;amp;height=383&amp;amp;face=0_0_466_383,https://scrap.kakaocdn.net/dn/bCYURY/hyLBuuEboD/J3Kq9UZCRtfI8IctP2QIOK/img.png?width=466&amp;amp;height=383&amp;amp;face=0_0_466_383&quot;&gt;&lt;a href=&quot;https://blog.sonim1.com/108&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.sonim1.com/108&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cYNHel/hyLBweVTbj/f6mpjKcreMSB5I4JNgjMck/img.png?width=466&amp;amp;height=383&amp;amp;face=0_0_466_383,https://scrap.kakaocdn.net/dn/bbKehg/hyLCzA51Rq/b6Inc8CQRhnGloCYVvKi8K/img.png?width=466&amp;amp;height=383&amp;amp;face=0_0_466_383,https://scrap.kakaocdn.net/dn/bCYURY/hyLBuuEboD/J3Kq9UZCRtfI8IctP2QIOK/img.png?width=466&amp;amp;height=383&amp;amp;face=0_0_466_383');&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;[MSSQL] JOIN의 방식 - Nested loop Join / Merge Join / Hash Join&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Join의 방식에 관하여 Join의 종류는 5가지가 있습니다. INNER Join OUTER Join CROSS Join FULL OUTER Join SELF Join Join의 방식은 3가지가 있습니다. Nested Loop Join - 중첩반복 Merge Join - 정렬병합 Has..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.sonim1.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>IT Interview</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/56</guid>
      <comments>https://mojjisoft.tistory.com/56#entry56comment</comments>
      <pubDate>Wed, 15 Sep 2021 23:14:49 +0900</pubDate>
    </item>
    <item>
      <title>008. PUT, PATCH 의 차이</title>
      <link>https://mojjisoft.tistory.com/55</link>
      <description>&lt;h2 id=&quot;-restful-api란&quot; data-ke-size=&quot;size26&quot;&gt;RESTful API란?&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자원을 URI로 표현하고, 자원에 대한 행위를 HTTP Method(GET, POST, PUT, DELETE)로 표현한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PUT : 리소스의 모든 것을 업데이트 한다.&lt;br /&gt;PATCH : 리소스의 일부를 업데이트 한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가령 한 사용자에 대해 여러 정보를 객체로 수집하여 서버로 보내는 경우,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;PUT은 보내지지 않은 정보에 대해서는 null값으로 업데이트하지만, PATCH는 기존 데이터를 유지하는 방식으로 대응한다.&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;&lt;span&gt;HTTP Method는 크게 GET, POST, PUT, DELETE가 대표적이며,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;보통 CRUD에서 조회는 GET, 등록은 POST, 수정은 PUT, 삭제는 DELETE를 이용한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;GET과 DELETE는 비교적 그 행위가 명확하지만, POST와 PUT을 구분하기 위해서는 멱등성의 개념을 알아야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;put&quot; data-ke-size=&quot;size23&quot;&gt;PUT&lt;span style=&quot;color: #00bdf3;&quot; data-clipboard-text=&quot;http://1ambda.github.io/javascripts/rest-api-put-vs-post/#put&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PUT /dogs/&lt;span style=&quot;color: #cc6666;&quot;&gt;3&lt;/span&gt; HTTP/&lt;span style=&quot;color: #cc6666;&quot;&gt;1.1&lt;/span&gt; { &lt;span&gt;&quot;name&quot;&lt;/span&gt;: &lt;span style=&quot;color: #b5bd68;&quot;&gt;&quot;blue&quot;&lt;/span&gt;, &lt;span&gt;&quot;age&quot;&lt;/span&gt;: &lt;span style=&quot;color: #cc6666;&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;/dogs&lt;span&gt;&amp;nbsp;&lt;/span&gt;의 프로퍼티가&lt;span&gt;&amp;nbsp;&lt;/span&gt;name&lt;span&gt;&amp;nbsp;&lt;/span&gt;과&lt;span&gt;&amp;nbsp;&lt;/span&gt;age&lt;span&gt;&amp;nbsp;&lt;/span&gt;뿐이라면, 이건 몇 번을 수행하더라도, 같은 결과를 보장한다. 다시 말해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;idempotent&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 위에 예에서 알 수 있듯이&lt;span&gt;&amp;nbsp;&lt;/span&gt;PUT&lt;span&gt;&amp;nbsp;&lt;/span&gt;은&lt;span&gt;&amp;nbsp;&lt;/span&gt;리소스의 위치가 지정되었을때&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;생성&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;업데이트&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;를 위해 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;put&quot; data-ke-size=&quot;size23&quot;&gt;PATCH&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PUT&lt;span&gt;&amp;nbsp;&lt;/span&gt;이 리소스의 모든 프로퍼티를 업데이트 하기 위해 사용된다면,&lt;span&gt;&amp;nbsp;&lt;/span&gt;PATCH&lt;span&gt;&amp;nbsp;&lt;/span&gt;는 부분만을 업데이트하기 위해 사용한다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;PUT&lt;span&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;(1)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;POST&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to a URL&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;creates a child resouce&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;at a server defiend URL&lt;br /&gt;(2)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;PUT&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to a URL&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;create/replaces the resource&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;in is entirely at the client defined URL&lt;br /&gt;(3)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;PATCH&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to a URL&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;updates part of the resource&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;at that client defined URL&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;멱등성(Idempotence)이란?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;멱등성이란 여러번 수행해도 결과가 같음을 의미한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;HTTP 메소드를 예를 들자면, GET, PUT, DELETE는 같은 경로로 여러 번 호출해도 결과가 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그러나 POST는 매 호출마다 새로운 데이터가 추가된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서, POST 연산은 결과가 Idempotent하지 않지만,&amp;nbsp;PUT은 반복 수행해도 그 결과가 Idempotent 하다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #555555;&quot;&gt;출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://devuna.tistory.com/77&quot;&gt;https://devuna.tistory.com/77&lt;/a&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;[튜나 개발일기]&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1631626378808&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;[REST API] REST API 규칙/PUT과 POST 차이/PUT과 PATCH 차이&quot; data-og-description=&quot;먼저, REST란? Representational State Transfer의 약자이며, 다음과 같이 구성되어 있다. 자원(Resource): URI 행위(Verb): HTTP Method 표현(Representations) 즉&amp;nbsp;REST는&amp;nbsp;URI를 통해 자원을 표시하고, HTTP M..&quot; data-og-host=&quot;devuna.tistory.com&quot; data-og-source-url=&quot;https://devuna.tistory.com/77&quot; data-og-url=&quot;https://devuna.tistory.com/77&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/w2XBy/hyLBEDa8Xo/4khgM2gmWcvOPnik1lLP80/img.png?width=480&amp;amp;height=232&amp;amp;face=0_0_480_232,https://scrap.kakaocdn.net/dn/brnJ87/hyLBCk3AsS/k6ehGJzqUacBskkZnluUuK/img.png?width=480&amp;amp;height=232&amp;amp;face=0_0_480_232,https://scrap.kakaocdn.net/dn/cjllNg/hyLBtPbdUU/5qGrbqXGjASF9xR8IwbYb0/img.png?width=480&amp;amp;height=232&amp;amp;face=0_0_480_232&quot;&gt;&lt;a href=&quot;https://devuna.tistory.com/77&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://devuna.tistory.com/77&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/w2XBy/hyLBEDa8Xo/4khgM2gmWcvOPnik1lLP80/img.png?width=480&amp;amp;height=232&amp;amp;face=0_0_480_232,https://scrap.kakaocdn.net/dn/brnJ87/hyLBCk3AsS/k6ehGJzqUacBskkZnluUuK/img.png?width=480&amp;amp;height=232&amp;amp;face=0_0_480_232,https://scrap.kakaocdn.net/dn/cjllNg/hyLBtPbdUU/5qGrbqXGjASF9xR8IwbYb0/img.png?width=480&amp;amp;height=232&amp;amp;face=0_0_480_232');&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;[REST API] REST API 규칙/PUT과 POST 차이/PUT과 PATCH 차이&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;먼저, REST란? Representational State Transfer의 약자이며, 다음과 같이 구성되어 있다. 자원(Resource): URI 행위(Verb): HTTP Method 표현(Representations) 즉&amp;nbsp;REST는&amp;nbsp;URI를 통해 자원을 표시하고, HTTP M..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;devuna.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>IT Interview</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/55</guid>
      <comments>https://mojjisoft.tistory.com/55#entry55comment</comments>
      <pubDate>Tue, 14 Sep 2021 22:47:53 +0900</pubDate>
    </item>
    <item>
      <title>007. MVC , MSA</title>
      <link>https://mojjisoft.tistory.com/54</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. MVC &lt;span style=&quot;color: #292929;&quot;&gt;(Model-View-Controller)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/h2&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-origin-width=&quot;1704&quot; data-origin-height=&quot;724&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y2vou/btreWKCP2dk/9su9gmpeLaGOqDmJsQIj40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y2vou/btreWKCP2dk/9su9gmpeLaGOqDmJsQIj40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y2vou/btreWKCP2dk/9su9gmpeLaGOqDmJsQIj40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY2vou%2FbtreWKCP2dk%2F9su9gmpeLaGOqDmJsQIj40%2Fimg.png&quot; data-origin-width=&quot;1704&quot; data-origin-height=&quot;724&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1564&quot; data-origin-height=&quot;648&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t7dNh/btreQ8dePU9/0ZXOX08LgGKKXdgf94t7j1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t7dNh/btreQ8dePU9/0ZXOX08LgGKKXdgf94t7j1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t7dNh/btreQ8dePU9/0ZXOX08LgGKKXdgf94t7j1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft7dNh%2FbtreQ8dePU9%2F0ZXOX08LgGKKXdgf94t7j1%2Fimg.png&quot; data-origin-width=&quot;1564&quot; data-origin-height=&quot;648&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;# 구성요소&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델-뷰-컨트롤러는 응용 프로그램을 세 가지의 구성요소로 나눈다. 각각의 구성요소들 사이에는 다음과 같은 관계가 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개발 할 때, 3가지 형태로 역할을 나누어 개발하는 방법론입니다.&lt;b&gt;Model&lt;/b&gt;은 어플리케이션이 &amp;ldquo;&lt;b&gt;무엇&lt;/b&gt;&amp;rdquo;을 할 것인지를 정의 합니다. 내부 비지니스 로직을 처리하기 위한 역할을 할 것입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;66ae&quot; data-selectable-paragraph=&quot;&quot;&gt;처리되는 알고리즘, DB 와 상호작용(&lt;b&gt;CRUD&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Create Read Update Delete), 데이터 등등..&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Contr&lt;span&gt;o&lt;/span&gt;ller&lt;/b&gt;는 모델이 &amp;ldquo;&lt;b&gt;어떻게&lt;/b&gt;&amp;rdquo; 처리할 지를 알려주는 역할을 할 것이고, 모바일에서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;화면의 로직처리&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;부분입니다. 화면에서 사용자의 요청을 받아서 처리되는 부분을 구현되게 되며, 요청 내용을 분석해서 Model과 View에 업데이트 요청을 하게 됩니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;faa1&quot; data-selectable-paragraph=&quot;&quot;&gt;&lt;b&gt;사용자&lt;/b&gt;로 부터의 입력 을 받고 Model 또는 View중개인 역할&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;View&lt;/b&gt;는 화면에 &amp;ldquo;&lt;b&gt;무엇&amp;rdquo;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;인가를 &amp;ldquo;&lt;b&gt;보여주기 위한 역할&amp;rdquo;&lt;/b&gt;을 합니다. 컨트롤러 하위에 종속되어, 모델이나 컨트롤러가 보여주려고 하는 모든 필요한 것들을 보여줄 것입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;3fa0&quot; data-selectable-paragraph=&quot;&quot;&gt;&lt;b&gt;최종 사용자&lt;/b&gt;에게 &amp;ldquo;무엇&amp;rdquo;을 화면(UI)으로 보여줌&lt;/li&gt;
&lt;/ul&gt;
그리고 Controller는 Model과 View가 각각 무엇을 해야 할 지를 알고 있고, 통제합니다. 비지니스 로직을 처리하는 Model과 완전히 UI에 의존적인 View가 서로 직접 이야기 할 수 없게 합니다.&lt;/li&gt;
&lt;li id=&quot;5be4&quot; data-selectable-paragraph=&quot;&quot;&gt;비지니스 처리 로직과 사용자 인터페이스 요소들을 분리시켜 서로 영향없이 개발 하기 수월하다는 장점이 있습니다.&lt;/li&gt;
&lt;/ul&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;출처 : &lt;a href=&quot;https://medium.com/@jang.wangsu/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-mvc-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80-1d74fac6e256&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://medium.com/@jang.wangsu/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-mvc-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80-1d74fac6e256&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1631539728000&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;[아키텍처 패턴] MVC 패턴이란?&quot; data-og-description=&quot;MVC (Model-View-Controller) Pattern 은 기본적?(one of the most frequently used design patterns)으로 사용하는 패턴인 데.. 설명이 잘 되시나요?&quot; data-og-host=&quot;medium.com&quot; data-og-source-url=&quot;https://medium.com/@jang.wangsu/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-mvc-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80-1d74fac6e256&quot; data-og-url=&quot;https://medium.com/@jang.wangsu/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-mvc-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80-1d74fac6e256&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ckdfjl/hyLBD4r1U9/dFwQ1NIJJM3cS6rNWm77Fk/img.png?width=1200&amp;amp;height=694&amp;amp;face=0_0_1200_694,https://scrap.kakaocdn.net/dn/cAKeQI/hyLBzudKtR/AOb1KIBUBZIUXJLQqumwU1/img.png?width=60&amp;amp;height=34&amp;amp;face=0_0_60_34,https://scrap.kakaocdn.net/dn/qsWGM/hyLByhM0E4/mLHIFkr5CMH4oRK7x4W4TK/img.png?width=60&amp;amp;height=34&amp;amp;face=0_0_60_34&quot;&gt;&lt;a href=&quot;https://medium.com/@jang.wangsu/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-mvc-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80-1d74fac6e256&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://medium.com/@jang.wangsu/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-mvc-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80-1d74fac6e256&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ckdfjl/hyLBD4r1U9/dFwQ1NIJJM3cS6rNWm77Fk/img.png?width=1200&amp;amp;height=694&amp;amp;face=0_0_1200_694,https://scrap.kakaocdn.net/dn/cAKeQI/hyLBzudKtR/AOb1KIBUBZIUXJLQqumwU1/img.png?width=60&amp;amp;height=34&amp;amp;face=0_0_60_34,https://scrap.kakaocdn.net/dn/qsWGM/hyLByhM0E4/mLHIFkr5CMH4oRK7x4W4TK/img.png?width=60&amp;amp;height=34&amp;amp;face=0_0_60_34');&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;[아키텍처 패턴] MVC 패턴이란?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;MVC (Model-View-Controller) Pattern 은 기본적?(one of the most frequently used design patterns)으로 사용하는 패턴인 데.. 설명이 잘 되시나요?&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;medium.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>IT Interview</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/54</guid>
      <comments>https://mojjisoft.tistory.com/54#entry54comment</comments>
      <pubDate>Mon, 13 Sep 2021 22:47:51 +0900</pubDate>
    </item>
    <item>
      <title>006. CI/CD</title>
      <link>https://mojjisoft.tistory.com/53</link>
      <description>&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-origin-width=&quot;1280&quot; data-origin-height=&quot;640&quot; width=&quot;638&quot; height=&quot;319&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Rztr9/btreZ1XXrQ3/CsrekJYJJkz4Nd2CUPXZW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Rztr9/btreZ1XXrQ3/CsrekJYJJkz4Nd2CUPXZW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Rztr9/btreZ1XXrQ3/CsrekJYJJkz4Nd2CUPXZW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRztr9%2FbtreZ1XXrQ3%2FCsrekJYJJkz4Nd2CUPXZW0%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;640&quot; width=&quot;638&quot; height=&quot;319&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;1. CI/CD 개념&lt;/h1&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; - 코드통합, 테스트, 릴리즈, 배포(Deployment) 등의 애플리케이션 라이프사이클 전체 과정을 자동화하고 이 과정을 모니터링 가능토록 하는 것. (연속된 과정을 &quot;CI/CD 파이프라인&quot; 이라고도 한다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 개발자가 아닌 사람도 쉽게 빌드, 배포를 가능하도록 하는 것 -&amp;gt; 개발자는 개발에만 집중&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;2. 대상 시점&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CI와 CD는 세부적으로 아래와 같이 나눠지며, 개발/배포 단계에 적용되는 전략이 달라진다.&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; width=&quot;638&quot; height=&quot;90&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;90&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v5lSn/btreOM2ycar/XQHcSe5u45MGYPAvnGIFA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v5lSn/btreOM2ycar/XQHcSe5u45MGYPAvnGIFA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v5lSn/btreOM2ycar/XQHcSe5u45MGYPAvnGIFA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv5lSn%2FbtreOM2ycar%2FXQHcSe5u45MGYPAvnGIFA0%2Fimg.png&quot; width=&quot;638&quot; height=&quot;90&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;90&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;h1&gt;3. CI (Continuous Integration)&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;b940&quot; data-selectable-paragraph=&quot;&quot;&gt;Build &amp;amp; Packaging&lt;/li&gt;
&lt;li id=&quot;513c&quot; data-selectable-paragraph=&quot;&quot;&gt;새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 병합되는 것이다.&lt;/li&gt;
&lt;li id=&quot;920b&quot; data-selectable-paragraph=&quot;&quot;&gt;Build, Test를 실시하는 프로세스를 말하며 이러한 통합 프로세스를 상시로 실시하는 것이다.&lt;/li&gt;
&lt;li id=&quot;5797&quot; data-selectable-paragraph=&quot;&quot;&gt;다수의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우, 서로 충돌할 수 있는 문제를 해결하기 위함이다.&lt;/li&gt;
&lt;li id=&quot;8733&quot; data-selectable-paragraph=&quot;&quot;&gt;언제든 최신 Build를 고객에게 바로 제공 가능하게 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;4.&lt;span&gt; CD (Continuous Delivery) &amp;amp; (Continuous Deployment)&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;70fb&quot; data-selectable-paragraph=&quot;&quot;&gt;Deployment&lt;/li&gt;
&lt;li id=&quot;7ef6&quot; data-selectable-paragraph=&quot;&quot;&gt;개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 리포지토리에 자동으로 업로드되는 것이다.&lt;/li&gt;
&lt;li id=&quot;5d01&quot; data-selectable-paragraph=&quot;&quot;&gt;개발자의 변경 사항을 리포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리스하는 것이다.&lt;/li&gt;
&lt;li id=&quot;38b9&quot; data-selectable-paragraph=&quot;&quot;&gt;이 리포지토리에서 애플리케이션을 실시간 프로덕션 환경으로 배포된다.&lt;/li&gt;
&lt;li id=&quot;debd&quot; data-selectable-paragraph=&quot;&quot;&gt;개발팀과 운영팀의 커뮤니테이션 부족 문제를 해결한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;5.&lt;span&gt;&amp;nbsp;&lt;/span&gt;CI / CD 의 필요성&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;3202&quot; data-selectable-paragraph=&quot;&quot;&gt;모든 분기의 소스 코드를 병합하는 경우, 결과적으로 반복적인 수작업에 많은 시간이 소요된다.&lt;/li&gt;
&lt;li id=&quot;ef2d&quot; data-selectable-paragraph=&quot;&quot;&gt;병합하는 수작업을 하지 않는다면, 개발자가 애플리케이션에 변경 사항을 적용할 때 다른 개발자가 동시에 적용하는 변경 사항과 충돌할 수 있다.&lt;/li&gt;
&lt;li id=&quot;37eb&quot; data-selectable-paragraph=&quot;&quot;&gt;자동화된 테스트에서 기존 코드와 신규 코드 간의 충돌이 발견되면 CI를 통해 이러한 버그를 더욱 빠르게 자주 수정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;f644&quot; data-selectable-paragraph=&quot;&quot;&gt;여러 사람이 작성한 코드가 병합되었을 때 생기는 문제를 미리 감지한다.&lt;/li&gt;
&lt;li id=&quot;5141&quot; data-selectable-paragraph=&quot;&quot;&gt;System과 Application을 최대한 최신 상태로 유지할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;6.&lt;span&gt;&amp;nbsp;&lt;/span&gt;CI / CD 의 종류&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;DevOps 엔지니어가 사용하는 대표적인 CI/CD 툴로는, Jenkins / Travis CI / Bamboo 등이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;522&quot; width=&quot;758&quot; height=&quot;311&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqKSUt/btreYa2qO43/MFg2Xe9ZSffD1oHbnT1DN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqKSUt/btreYa2qO43/MFg2Xe9ZSffD1oHbnT1DN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqKSUt/btreYa2qO43/MFg2Xe9ZSffD1oHbnT1DN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqKSUt%2FbtreYa2qO43%2FMFg2Xe9ZSffD1oHbnT1DN1%2Fimg.png&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;522&quot; width=&quot;758&quot; height=&quot;311&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #555555;&quot;&gt;출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://artist-developer.tistory.com/24&quot;&gt;https://artist-developer.tistory.com/24&lt;/a&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;[개발자 김모씨의 성장 일기]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;출처:&lt;a href=&quot;https://hoi5088.medium.com/ci-cd-%EA%B0%9C%EB%85%90-4e6a45dbcfe2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://hoi5088.medium.com/ci-cd-%EA%B0%9C%EB%85%90-4e6a45dbcfe2&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1631538478229&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;CI/CD 개념&quot; data-og-description=&quot;1. CI/CD 배경&quot; data-og-host=&quot;hoi5088.medium.com&quot; data-og-source-url=&quot;https://hoi5088.medium.com/ci-cd-%EA%B0%9C%EB%85%90-4e6a45dbcfe2&quot; data-og-url=&quot;https://hoi5088.medium.com/ci-cd-%EA%B0%9C%EB%85%90-4e6a45dbcfe2&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://hoi5088.medium.com/ci-cd-%EA%B0%9C%EB%85%90-4e6a45dbcfe2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hoi5088.medium.com/ci-cd-%EA%B0%9C%EB%85%90-4e6a45dbcfe2&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;CI/CD 개념&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. CI/CD 배경&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hoi5088.medium.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>IT Interview</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/53</guid>
      <comments>https://mojjisoft.tistory.com/53#entry53comment</comments>
      <pubDate>Mon, 13 Sep 2021 22:18:07 +0900</pubDate>
    </item>
    <item>
      <title>005. 싱글톤 패턴</title>
      <link>https://mojjisoft.tistory.com/52</link>
      <description>&lt;h2 id=&quot;그렇다면-싱글톤-패턴을-사용하는-이유는&quot; data-ke-size=&quot;size26&quot;&gt;싱글톤 패턴&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 객체를 만들어 사용하는 디자인 패턴&quot;&lt;/b&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;을 의미한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #555555;&quot;&gt;즉 생성자의 호출이 반복적으로 이뤄져도 실제로 생성되는 객체는 최초 생성된 객체를 반환 해주는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;그렇다면-싱글톤-패턴을-사용하는-이유는&quot; data-ke-size=&quot;size26&quot;&gt;그렇다면 싱글톤 패턴을 사용하는 이유는?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서도 언급된 바와 같이 한번의 객체 생성으로 재 사용이 가능하기 때문에 메모리 낭비를 방지할 수 있다.&lt;br /&gt;또한 싱글톤으로 생성된 객체는 무조건 한번 생성으로 전역성을 띄기에 다른 객체와 공유가 용이하다.&lt;br /&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 id=&quot;싱글톤의-문제점&quot; data-ke-size=&quot;size26&quot;&gt;싱글톤의 문제점&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;싱글톤도 위에서 언급된 것 처럼 전역성을 띄면서 다른 객체와 공통으로 사용하는 경우와 같은 몇 가지 케이스에서만 사용할 때 효율적이며 그 외에는 문제점이 생길 수 있다.&lt;br /&gt;일단 싱글톤으로 만든 객체의 역할이 간단한 것이 아닌 역할이 복잡한 경우라면 해당 싱글톤 객체를 사용하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;다른 객체간의 결함도&lt;/b&gt;가 높아져서 객체 지향 설계 원칙에 어긋나게 된다. (개방-폐쇄)&lt;br /&gt;또한 해당 싱글톤 객체를 수정할 경우 싱글톤 객체를 사용하는 곳에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;사이드 이팩트&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;발생 확률이 생기게 되며,&lt;span&gt;&amp;nbsp;&lt;/span&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;3. Initialization on demand holder idiom (holder에 의한 초기화)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스안에 클래스(Holder)를 두어 JVM의 Class loader 매커니즘과 Class가 로드되는 시점을 이용한 방법&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span&gt;2&lt;/span&gt;&lt;br /&gt;&lt;span&gt;3&lt;/span&gt;&lt;br /&gt;&lt;span&gt;4&lt;/span&gt;&lt;br /&gt;&lt;span&gt;5&lt;/span&gt;&lt;br /&gt;&lt;span&gt;6&lt;/span&gt;&lt;br /&gt;&lt;span&gt;7&lt;/span&gt;&lt;br /&gt;&lt;span&gt;8&lt;/span&gt;&lt;br /&gt;&lt;span&gt;9&lt;/span&gt;&lt;br /&gt;&lt;span&gt;10&lt;/span&gt;&lt;br /&gt;&lt;span&gt;11&lt;/span&gt;&lt;br /&gt;&lt;span&gt;12&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;class&lt;/span&gt;&amp;nbsp;Something&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;private&lt;/span&gt;&amp;nbsp;Something()&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;class&lt;/span&gt;&amp;nbsp;LazyHolder&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;final&lt;/span&gt;&amp;nbsp;Something&amp;nbsp;INSTANCE&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;new&lt;/span&gt;&amp;nbsp;Something();&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;static&lt;/span&gt;&amp;nbsp;Something&amp;nbsp;getInstance()&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;return&lt;/span&gt;&amp;nbsp;LazyHolder.INSTANCE;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot;&gt;&lt;span&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자가 직접 동기화 문제에 대해 코드를 작성하고 문제를 회피하려 한다면 프로그램 구조가 그 만큼 복잡해지고 비용 문제가 생길 수 있고 특히 정확하지 못한 경우가 많다.(100%가 아닐수 있음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 이 방법은 JVM의 클래스 초기화 과정에서 보장되는 &lt;b&gt;원자적 특성&lt;/b&gt;을 이용하여 싱글턴의 초기화 문제에 대한 책임을 JVM에 떠넘긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;holder안에 선언된 instance가 static이기 때문에 클래스 로딩시점에 한번만 호출될 것이며 final을 사용해 다시 값이 할당되지 않도록 만든 방법.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&lt;b&gt;* 가장 많이 사용하고 일반적인 Singleton 클래스 사용 방법이다.&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;자바와 Spring에서의 싱글톤 차이점이라면, 싱글톤 객체의 생명주기가 다르다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #555555;&quot;&gt;또한 자바에서 공유 범위는 Class loader 기준이지만, Spring에서는 ApplicationContext가 기준이 된다&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://jeong-pro.tistory.com/86&quot;&gt;https://jeong-pro.tistory.com/86&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;[기본기를 쌓는 정아마추어 코딩블로그]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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://elfinlas.github.io/2019/09/23/java-singleton/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://elfinlas.github.io/2019/09/23/java-singleton/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1631375515742&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;Java에서 싱글톤(Singleton) 패턴을 사용하는 이유와 주의할 점&quot; data-og-description=&quot;Java에서 Singleton 패턴이란?Singleton(이하 싱글톤) 패턴은 자바에서 많이 사용한다.먼저 싱글톤이란 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 객체를 만들어 사용하는 디자&quot; data-og-host=&quot;elfinlas.github.io&quot; data-og-source-url=&quot;https://elfinlas.github.io/2019/09/23/java-singleton/&quot; data-og-url=&quot;https://elfinlas.github.io/2019/09/23/java-singleton/index.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://elfinlas.github.io/2019/09/23/java-singleton/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://elfinlas.github.io/2019/09/23/java-singleton/&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;Java에서 싱글톤(Singleton) 패턴을 사용하는 이유와 주의할 점&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Java에서 Singleton 패턴이란?Singleton(이하 싱글톤) 패턴은 자바에서 많이 사용한다.먼저 싱글톤이란 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 객체를 만들어 사용하는 디자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;elfinlas.github.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;</description>
      <category>IT Interview</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/52</guid>
      <comments>https://mojjisoft.tistory.com/52#entry52comment</comments>
      <pubDate>Sun, 12 Sep 2021 01:07:58 +0900</pubDate>
    </item>
    <item>
      <title>004. 디자인패턴</title>
      <link>https://mojjisoft.tistory.com/51</link>
      <description>&lt;h1 id=&quot;배경&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;배경&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;논문 &quot;Using Pattern Languages for Object-Oriented Programs&quot; (1987)을 통해 제안되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이후 큰 유명세를 타게 된 것은 23개의 패턴을 수록한 'GoF'(Gang of Fours). Design Patterns: Elements of Reusable Object-Oriented Software. (1995)이다.&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;font-family: 'Noto Sans Light';&quot;&gt;이미&amp;nbsp;만들어져서&amp;nbsp;잘&amp;nbsp;되는&amp;nbsp;것을&amp;nbsp;처음부터&amp;nbsp;다시&amp;nbsp;만들&amp;nbsp;필요가&amp;nbsp;없다는&amp;nbsp;의미이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;패턴이란&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;각기&amp;nbsp;다른&amp;nbsp;소프트웨어&amp;nbsp;모듈이나&amp;nbsp;기능을&amp;nbsp;가진&amp;nbsp;다양한&amp;nbsp;응용&amp;nbsp;소프트웨어&amp;nbsp;시스템들을&amp;nbsp;개발할&amp;nbsp;때도&amp;nbsp;서로&amp;nbsp;간에&amp;nbsp;공통되는&amp;nbsp;설계&amp;nbsp;문제가&amp;nbsp;존재하며&amp;nbsp;이를&amp;nbsp;처리하는&amp;nbsp;해결책&amp;nbsp;사이에도&amp;nbsp;공통점이&amp;nbsp;있다.&amp;nbsp;이러한&amp;nbsp;유사점을&amp;nbsp;패턴이라&amp;nbsp;한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;패턴은&amp;nbsp;공통의&amp;nbsp;언어를&amp;nbsp;만들어주며&amp;nbsp;팀원&amp;nbsp;사이의&amp;nbsp;의사&amp;nbsp;소통을&amp;nbsp;원활하게&amp;nbsp;해주는&amp;nbsp;아주&amp;nbsp;중요한&amp;nbsp;역할을&amp;nbsp;한다.&lt;/span&gt;&lt;br /&gt;&lt;br /&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 alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;449&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wgRe1/btreKISZeZG/Dn0L5zLlbzRNaddm3iFgrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wgRe1/btreKISZeZG/Dn0L5zLlbzRNaddm3iFgrK/img.png&quot; data-alt=&quot;디자인 패넌의 종류&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wgRe1/btreKISZeZG/Dn0L5zLlbzRNaddm3iFgrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwgRe1%2FbtreKISZeZG%2FDn0L5zLlbzRNaddm3iFgrK%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;449&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;디자인 패넌의 종류&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;생성(Creational)&amp;nbsp;패턴&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;객체&amp;nbsp;생성에&amp;nbsp;관련된&amp;nbsp;패턴&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;객체의&amp;nbsp;생성과&amp;nbsp;조합을&amp;nbsp;캡슐화해&amp;nbsp;특정&amp;nbsp;객체가&amp;nbsp;생성되거나&amp;nbsp;변경되어도&amp;nbsp;프로그램&amp;nbsp;구조에&amp;nbsp;영향을&amp;nbsp;크게&amp;nbsp;받지&amp;nbsp;않도록&amp;nbsp;유연성을&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;font-family: 'Noto Sans Light';&quot;&gt;1. 추상팩토리 : &lt;a href=&quot;https://victorydntmd.tistory.com/300&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://victorydntmd.tistory.com/300&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1631373910209&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;[디자인패턴] 추상 팩토리 패턴 ( Abstract Factory Pattern )&quot; data-og-description=&quot;추상 팩토리 패턴 ( Abstract Factory Pattern ) 추상 팩토리 패턴이라는&amp;nbsp;이름만 봐서는 팩토리 메서드 패턴과 비슷해보이지만, 명확한 차이점이 있습니다. 팩토리 메서드 패턴 조건에 따른 객체 생성&quot; data-og-host=&quot;victorydntmd.tistory.com&quot; data-og-source-url=&quot;https://victorydntmd.tistory.com/300&quot; data-og-url=&quot;https://victorydntmd.tistory.com/300&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/czVHtk/hyLzYt3A7Q/IzgpDubjiL9A6ZUcwo2kbK/img.png?width=722&amp;amp;height=455&amp;amp;face=0_0_722_455,https://scrap.kakaocdn.net/dn/bjuldr/hyLzSN9oPl/8i5lgZ80c2vcp4lSp7DYAk/img.png?width=722&amp;amp;height=455&amp;amp;face=0_0_722_455,https://scrap.kakaocdn.net/dn/b6dTO2/hyLz39YQQ4/sfk2O4kTjq1eYhE8kuKkEK/img.png?width=900&amp;amp;height=471&amp;amp;face=0_0_900_471&quot;&gt;&lt;a href=&quot;https://victorydntmd.tistory.com/300&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://victorydntmd.tistory.com/300&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/czVHtk/hyLzYt3A7Q/IzgpDubjiL9A6ZUcwo2kbK/img.png?width=722&amp;amp;height=455&amp;amp;face=0_0_722_455,https://scrap.kakaocdn.net/dn/bjuldr/hyLzSN9oPl/8i5lgZ80c2vcp4lSp7DYAk/img.png?width=722&amp;amp;height=455&amp;amp;face=0_0_722_455,https://scrap.kakaocdn.net/dn/b6dTO2/hyLz39YQQ4/sfk2O4kTjq1eYhE8kuKkEK/img.png?width=900&amp;amp;height=471&amp;amp;face=0_0_900_471');&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;[디자인패턴] 추상 팩토리 패턴 ( Abstract Factory Pattern )&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;추상 팩토리 패턴 ( Abstract Factory Pattern ) 추상 팩토리 패턴이라는&amp;nbsp;이름만 봐서는 팩토리 메서드 패턴과 비슷해보이지만, 명확한 차이점이 있습니다. 팩토리 메서드 패턴 조건에 따른 객체 생성&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;victorydntmd.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;2. 싱글턴 : &lt;a href=&quot;https://victorydntmd.tistory.com/293?category=719467&quot;&gt;https://victorydntmd.tistory.com/293?category=719467&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1631374286018&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;[디자인패턴] 싱글톤 패턴 ( Singleton Pattern )&quot; data-og-description=&quot;싱글톤 패턴 ( Singleton Pattern ) 싱글톤 패턴이란, 인스턴스가 프로그램 내에서 오직 하나만 생성되는 것을 보장하고, 프로그램 어디에서든 이 인스턴스에 접근할 수 있도록 하는 패턴입니다. 즉, &quot; data-og-host=&quot;victorydntmd.tistory.com&quot; data-og-source-url=&quot;https://victorydntmd.tistory.com/293?category=719467&quot; data-og-url=&quot;https://victorydntmd.tistory.com/293&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/XwwFI/hyLzSgjUgc/odZ7NEBjMSsgxIgtAP6QJK/img.png?width=499&amp;amp;height=174&amp;amp;face=0_0_499_174,https://scrap.kakaocdn.net/dn/hl0SX/hyLz57Ngmt/5RKwAkyqKRIYnei2yV0BBK/img.png?width=499&amp;amp;height=174&amp;amp;face=0_0_499_174&quot;&gt;&lt;a href=&quot;https://victorydntmd.tistory.com/293?category=719467&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://victorydntmd.tistory.com/293?category=719467&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/XwwFI/hyLzSgjUgc/odZ7NEBjMSsgxIgtAP6QJK/img.png?width=499&amp;amp;height=174&amp;amp;face=0_0_499_174,https://scrap.kakaocdn.net/dn/hl0SX/hyLz57Ngmt/5RKwAkyqKRIYnei2yV0BBK/img.png?width=499&amp;amp;height=174&amp;amp;face=0_0_499_174');&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;[디자인패턴] 싱글톤 패턴 ( Singleton Pattern )&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;싱글톤 패턴 ( Singleton Pattern ) 싱글톤 패턴이란, 인스턴스가 프로그램 내에서 오직 하나만 생성되는 것을 보장하고, 프로그램 어디에서든 이 인스턴스에 접근할 수 있도록 하는 패턴입니다. 즉,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;victorydntmd.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;구조(Structural)&amp;nbsp;패턴&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;클래스나&amp;nbsp;객체를&amp;nbsp;조합해&amp;nbsp;더&amp;nbsp;큰&amp;nbsp;구조를&amp;nbsp;만드는&amp;nbsp;패턴&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;예를&amp;nbsp;들어&amp;nbsp;서로&amp;nbsp;다른&amp;nbsp;인터페이스를&amp;nbsp;지닌&amp;nbsp;2개의&amp;nbsp;객체를&amp;nbsp;묶어&amp;nbsp;단일&amp;nbsp;인터페이스를&amp;nbsp;제공하거나&amp;nbsp;객체들을&amp;nbsp;서로&amp;nbsp;묶어&amp;nbsp;새로운&amp;nbsp;기능을&amp;nbsp;제공하는&amp;nbsp;패턴이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;행위(Behavioral) 패턴&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;객체나&amp;nbsp;클래스&amp;nbsp;사이의&amp;nbsp;알고리즘이나&amp;nbsp;책임&amp;nbsp;분배에&amp;nbsp;관련된&amp;nbsp;패턴&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;한&amp;nbsp;객체가&amp;nbsp;혼자&amp;nbsp;수행할&amp;nbsp;수&amp;nbsp;없는&amp;nbsp;작업을&amp;nbsp;여러&amp;nbsp;개의&amp;nbsp;객체로&amp;nbsp;어떻게&amp;nbsp;분배하는지,&amp;nbsp;또&amp;nbsp;그렇게&amp;nbsp;하면서도&amp;nbsp;객체&amp;nbsp;사이의&amp;nbsp;결합도를&amp;nbsp;최소화하는&amp;nbsp;것에&amp;nbsp;중점을&amp;nbsp;둔다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&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;font-family: 'Noto Sans Light';&quot;&gt;참조: &lt;a href=&quot;https://velog.io/@namezin/GoF-design-pattern&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@namezin/GoF-design-pattern&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1631372915743&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;GoF 디자인 패턴&quot; data-og-description=&quot;Gang of Four Design Pattern&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@namezin/GoF-design-pattern&quot; data-og-url=&quot;https://velog.io/@namezin/GoF-design-pattern&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bCuvFz/hyLzZsXG2l/ZcNJKVPfXL34AW5diROmNK/img.png?width=768&amp;amp;height=270&amp;amp;face=0_0_768_270,https://scrap.kakaocdn.net/dn/xAuWE/hyLyXcvmMM/edZRUOvq8Wotz3K1BGwC21/img.png?width=1775&amp;amp;height=624&amp;amp;face=0_0_1775_624&quot;&gt;&lt;a href=&quot;https://velog.io/@namezin/GoF-design-pattern&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@namezin/GoF-design-pattern&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bCuvFz/hyLzZsXG2l/ZcNJKVPfXL34AW5diROmNK/img.png?width=768&amp;amp;height=270&amp;amp;face=0_0_768_270,https://scrap.kakaocdn.net/dn/xAuWE/hyLyXcvmMM/edZRUOvq8Wotz3K1BGwC21/img.png?width=1775&amp;amp;height=624&amp;amp;face=0_0_1775_624');&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;GoF 디자인 패턴&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Gang of Four Design Pattern&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;h1 id=&quot;배경&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;아키텍쳐, 프레임워크, 디자인패턴&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;941&quot; data-origin-height=&quot;205&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kXEma/btreK60dzsC/uv6jAVeGIOurtSy0h0AFdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kXEma/btreK60dzsC/uv6jAVeGIOurtSy0h0AFdk/img.png&quot; data-alt=&quot;디자인 패턴 vs 아키텍처 vs 프레임워크의 차이&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kXEma/btreK60dzsC/uv6jAVeGIOurtSy0h0AFdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkXEma%2FbtreK60dzsC%2Fuv6jAVeGIOurtSy0h0AFdk%2Fimg.png&quot; data-origin-width=&quot;941&quot; data-origin-height=&quot;205&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;디자인 패턴 vs 아키텍처 vs 프레임워크의 차이&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;참조: &lt;a href=&quot;https://gmlwjd9405.github.io/2018/07/06/design-pattern.html&quot;&gt;https://gmlwjd9405.github.io/2018/07/06/design-pattern.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1631372987497&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;[Design Pattern] 디자인 패턴 종류 - Heee's Development Blog&quot; data-og-description=&quot;Step by step goes a long way.&quot; data-og-host=&quot;gmlwjd9405.github.io&quot; data-og-source-url=&quot;https://gmlwjd9405.github.io/2018/07/06/design-pattern.html&quot; data-og-url=&quot;http://gmlwjd9405.github.io/2018/07/06/design-pattern.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://gmlwjd9405.github.io/2018/07/06/design-pattern.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://gmlwjd9405.github.io/2018/07/06/design-pattern.html&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;[Design Pattern] 디자인 패턴 종류 - Heee's Development Blog&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Step by step goes a long way.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;gmlwjd9405.github.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;</description>
      <category>IT Interview</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/51</guid>
      <comments>https://mojjisoft.tistory.com/51#entry51comment</comments>
      <pubDate>Sun, 12 Sep 2021 00:31:49 +0900</pubDate>
    </item>
    <item>
      <title>002. IoC, AOP , DI, POJO 의 개념</title>
      <link>https://mojjisoft.tistory.com/49</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;532&quot; data-origin-height=&quot;201&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lymI4/btreLgag4ZI/5hRNloyclnoqWTz2gCQ4Tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lymI4/btreLgag4ZI/5hRNloyclnoqWTz2gCQ4Tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lymI4/btreLgag4ZI/5hRNloyclnoqWTz2gCQ4Tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlymI4%2FbtreLgag4ZI%2F5hRNloyclnoqWTz2gCQ4Tk%2Fimg.png&quot; data-origin-width=&quot;532&quot; data-origin-height=&quot;201&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;1. IoC (Inversion of Control)&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IoC 란 코드의 흐름을 제어하는 주체가 바뀌는 것이다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;코드의 흐름을 제어한다는 것은 여러 행위를 포함한다. 오브젝트를 생성하는 것, 오브젝트의 생명주기를 관리하는 것, 메소드를 수행하는 것 등. 그리고 일반적인 프로그램은 이러한 행위를 하나부터 열까지 모두 스스로 수행한다. (우리가 처음 만들었던 프로그램을 잘 생각해보자.) IoC 를 적용한다는 것은 이러한 흐름 제어를 또다른 제 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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;1) IoC에서는 Object가 자신이 사용할 Object를 생성하거나 선택하지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;2) Object는 자신이 어떻게 생성되고 사용되는지 알 수 없다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;3) 모든 Object는 제어 권한을 위임받은 특별한 Object에 의해 만들어지고 사용된다.&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: #333333; font-family: 'Nanum Gothic';&quot;&gt;객체의 생명주기를 스프링 컨테이너가 관리하는 IoC 개념이 있기 때문에, DL(Dependency Lookup) 과 DI(Dependency Injection)이 가능해진다.&lt;/span&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 alignCenter&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;498&quot; width=&quot;670&quot; height=&quot;407&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b492Gu/btreMDJAd06/ceWNKEyQCWSNroRXKhGRlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b492Gu/btreMDJAd06/ceWNKEyQCWSNroRXKhGRlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b492Gu/btreMDJAd06/ceWNKEyQCWSNroRXKhGRlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb492Gu%2FbtreMDJAd06%2FceWNKEyQCWSNroRXKhGRlk%2Fimg.png&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;498&quot; width=&quot;670&quot; height=&quot;407&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. DI (Dependency Injection)&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DI is about how one object acquires a dependency&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DI 는 필요로 하는 오브젝트를 스스로 생성하는 것이 아닌 외부로 부터 주입받는 기법을 의미한다. 마틴 파울러의 글에 따르면 3가지 타입으로 정의할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;constructor-injection&quot; data-ke-size=&quot;size26&quot;&gt;Constructor Injection&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성자를 통해 주입하는 방식이다. 인스턴스가 생성되었을 때 의존성이 존재하는 것이 보장되기 때문에 의존성의 존재여부가 보장되고 의존성을 immutable 하게 정의할 수 있다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-setter-injection&quot;&gt;스프링&lt;/a&gt;에서도 해당 방식을 권장하는 것으로 알고 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;341&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C8R3m/btreLKoEMgT/KKsx3lzqSH9o1M5yfWdrn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C8R3m/btreLKoEMgT/KKsx3lzqSH9o1M5yfWdrn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C8R3m/btreLKoEMgT/KKsx3lzqSH9o1M5yfWdrn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC8R3m%2FbtreLKoEMgT%2FKKsx3lzqSH9o1M5yfWdrn0%2Fimg.png&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;341&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&quot;setter-injection&quot; data-ke-size=&quot;size26&quot;&gt;Setter Injection&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Setter 메소드를 이용하여 주입하는 방식이다. 해당 방식은 Construcor Injection 보다 좀 더 주의를 요한다. 주입 받는 의존성의 기본값을 정의할 수 있지 않다면 null 값이 존재할 수 있는 이슈가 있기 때문이다. 의존성이 다시 주입되어야할 경우 유용하게 사용된다고 하나 나는 아직 그러한 상황을 겪지 못했고 모두 Construcor Injection 으로 해결할 수 있었다.&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-origin-width=&quot;425&quot; data-origin-height=&quot;223&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbxML4/btreLJQPSoc/xk8dkp6WKI00ckCipxkyB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbxML4/btreLJQPSoc/xk8dkp6WKI00ckCipxkyB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbxML4/btreLJQPSoc/xk8dkp6WKI00ckCipxkyB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbxML4%2FbtreLJQPSoc%2Fxk8dkp6WKI00ckCipxkyB1%2Fimg.png&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;223&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;124&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nDkdb/btreJEpqBfv/xR6Ql8YpSgsfvkKkuD2khK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nDkdb/btreJEpqBfv/xR6Ql8YpSgsfvkKkuD2khK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nDkdb/btreJEpqBfv/xR6Ql8YpSgsfvkKkuD2khK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnDkdb%2FbtreJEpqBfv%2FxR6Ql8YpSgsfvkKkuD2khK%2Fimg.png&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;124&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;224&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdpREl/btreHC0stfz/eeLFiv3EzDmzXdwv92xSyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdpREl/btreHC0stfz/eeLFiv3EzDmzXdwv92xSyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdpREl/btreHC0stfz/eeLFiv3EzDmzXdwv92xSyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdpREl%2FbtreHC0stfz%2FeeLFiv3EzDmzXdwv92xSyk%2Fimg.png&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;224&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;278&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzfDpF/btreIVZN731/BBsrKKkq8Ln6jrgwEFFkZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzfDpF/btreIVZN731/BBsrKKkq8Ln6jrgwEFFkZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzfDpF/btreIVZN731/BBsrKKkq8Ln6jrgwEFFkZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzfDpF%2FbtreIVZN731%2FBBsrKKkq8Ln6jrgwEFFkZk%2Fimg.png&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;278&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&quot;interface-injection&quot; data-ke-size=&quot;size26&quot;&gt;Interface Injection&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Interface 로 주입받는 메소드를 정의한다. 이 방식은 이번에 조사하면서 처음 알게 되었고 실제로 사용해본 적이 없어 자세히 적기는 조심스럽다. 예시를 봐도 이점이 명확하게 보이지 않아 좀 더 공부를 하고 내용을 채워보려 한다.&lt;/p&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;3. AOP (Dependency Injection)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AOP&lt;/b&gt;는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Aspect Oriented Programming&lt;/b&gt;의 약자로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;관점 지향 프로그래밍&lt;/b&gt;이라고 불린다. 관점 지향은 쉽게 말해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #8cfccb; color: #000000;&quot;&gt;&lt;b&gt;어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각&amp;nbsp;모듈화하겠다는 것이다&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;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;AOP&lt;/b&gt;에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. 이때, 소스 코드상에서&amp;nbsp;다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는 데 이것을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;흩어진 관심사 (Crosscutting Concerns)&lt;/b&gt;라 부른다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;500&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C9yb2/btreKk5ll8I/q52KPS9fZX5kDBAYk3mSKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C9yb2/btreKk5ll8I/q52KPS9fZX5kDBAYk3mSKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C9yb2/btreKk5ll8I/q52KPS9fZX5kDBAYk3mSKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC9yb2%2FbtreKk5ll8I%2Fq52KPS9fZX5kDBAYk3mSKK%2Fimg.png&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;500&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #1fda11;&quot;&gt;|&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;AOP 주요 개념&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;Aspect : 위에서 설명한 흩어진 관심사를 모듈화 한 것. 주로 부가기능을 모듈화함.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Target : Aspect를 적용하는 곳 (클래스, 메서드 .. )&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Advice : 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;JointPoint : Advice가 적용될 위치, 끼어들 수 있는 지점. 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;PointCut : JointPoint의 상세한 스펙을 정의한 것. 'A란 메서드의 진입 시점에 호출할 것'과 같이 더욱 구체적으로 Advice가 실행될 지점을 정할 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #1fda11;&quot;&gt;|&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;스프링 AOP 특징&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;프록시 패턴 기반의 AOP 구현체, 프록시 객체를 쓰는 이유는 접근 제어 및 부가기능을 추가하기 위해서임&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;스프링 빈에만 AOP를 적용 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;모든 AOP 기능을 제공하는 것이 아닌 스프링 IoC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제(중복코드, 프록시 클래스 작성의 번거로움, 객체들 간 관계 복잡도 증가 ...)에 대한 해결책을 지원하는 것이 목적&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. POJO (Plain Old Java Object)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링 프레임워크는 IoC(Inversion of Control, 제어의 역전)&amp;nbsp;컨테이너 안에서 POJO를 구성 및 관리하는 것이 가장 핵심으로 POJO를 매우 잘 다루는 프레임워크가 스프링 프레임워크이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java EE 등을 사용할 때에 비해서 특정 인터페이스를 구현하거나 상속 할 필요 없고 라이브러리를 지원하기에 용이하며 객체 또한 가벼운 것이 특징이다.&lt;span style=&quot;color: #666666;&quot;&gt;POJO를 이해하려면 POJO라는 단어가 만들어진 역사적 배경을 살펴볼 필요가 있다. POJO는 마틴 파울러가 2000년 가을에 열렸던 어느 컨퍼런스의 발표를 준비하면서 처음 만들어낸 말이다. 마틴 파울러는&lt;/span&gt;&lt;u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;EJB(Enterprise JavaBean)보다는 단순한 자바 오브젝트에 도메인 로직을 넣어 사용하는 것이 여러가지 장점이 있는데 왜 사람들이 EJB가 아닌 '평범한 자바 오브젝트'를 사용하기를 꺼려하는지에 대해 의문을 가졌다.&lt;/u&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;그리고 그는 단순한 오브젝트에는 EJB와 같은 그럴듯한 이름이 없어서 그 사용을 주저하는 것이라고 결론을 내렸고, POJO라는 용어를 만들었다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://limmmee.tistory.com/8&quot;&gt;https://limmmee.tistory.com/8&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;[심플하게 개발]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222;&quot;&gt;출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://needjarvis.tistory.com/585&quot;&gt;https://needjarvis.tistory.com/585&lt;/a&gt;&lt;span style=&quot;color: #222222;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;[자비스가 필요해]&lt;/span&gt;&lt;br /&gt;출처:&amp;nbsp;&lt;a href=&quot;https://weicomes.tistory.com/451&quot;&gt;https://weicomes.tistory.com/451&lt;/a&gt;&amp;nbsp;[25%]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처:&amp;nbsp;&lt;a href=&quot;https://engkimbs.tistory.com/746&quot;&gt;https://engkimbs.tistory.com/746&lt;/a&gt;&amp;nbsp;[새로비]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT Interview</category>
      <category>AOP</category>
      <category>Di</category>
      <category>IOC</category>
      <category>POJO</category>
      <category>Spring</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/49</guid>
      <comments>https://mojjisoft.tistory.com/49#entry49comment</comments>
      <pubDate>Sat, 11 Sep 2021 00:36:25 +0900</pubDate>
    </item>
    <item>
      <title>001. Spring Framework</title>
      <link>https://mojjisoft.tistory.com/48</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;279&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDbfON/btreLKoB8mN/79E0VetKpbqIaOhcN9xKlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDbfON/btreLKoB8mN/79E0VetKpbqIaOhcN9xKlK/img.png&quot; data-alt=&quot;spring&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDbfON/btreLKoB8mN/79E0VetKpbqIaOhcN9xKlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDbfON%2FbtreLKoB8mN%2F79E0VetKpbqIaOhcN9xKlK%2Fimg.png&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;279&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;spring&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ko.wikipedia.org/w/index.php?title=%EB%A1%9C%EB%93%9C_%EC%A1%B4%EC%8A%A8&amp;amp;action=edit&amp;amp;redlink=1&quot;&gt;로드 존슨&lt;/a&gt;이 2002년에 출판한 자신의 저서인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://web.archive.org/web/20120507191345/http://www.wrox.com/WileyCDA/WroxTitle/productCd-0764543857.html&quot;&gt;Expert One-on-One J2EE Design and Development&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에 선보인 코드를 기반으로 시작하여 점점 발전하게 되었다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;이 프레임워크는 2003년 6월에 최초로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%95%84%ED%8C%8C%EC%B9%98_%EB%9D%BC%EC%9D%B4%EC%84%A0%EC%8A%A4&quot;&gt;아파치 2.0 라이선스&lt;/a&gt;로 공개되었으며 주요 버전 이력은 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1.0&amp;nbsp;: 2004년 3월&lt;/li&gt;
&lt;li&gt;2.0&amp;nbsp;: 2006년 10월&lt;/li&gt;
&lt;li&gt;2.5&amp;nbsp;: 2007년 11월&lt;/li&gt;
&lt;li&gt;3.0&amp;nbsp;: 2009년 12월&lt;/li&gt;
&lt;li&gt;3.1&amp;nbsp;: 2011년 12월&lt;/li&gt;
&lt;li&gt;4.0&amp;nbsp;: 2013년 12월&lt;/li&gt;
&lt;li&gt;5.0&amp;nbsp;: 2017년 9월&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2006년에 1.2.6 버전으로 Jolt Productive Award와 Jax Innovation Award를 수상하였다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;역사&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ko.wikipedia.org/w/index.php?title=%EB%A1%9C%EB%93%9C_%EC%A1%B4%EC%8A%A8&amp;amp;action=edit&amp;amp;redlink=1&quot;&gt;로드 존슨&lt;/a&gt;이 2002년에 출판한 자신의 저서인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://web.archive.org/web/20120507191345/http://www.wrox.com/WileyCDA/WroxTitle/productCd-0764543857.html&quot;&gt;Expert One-on-One J2EE Design and Development&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에 선보인 코드를 기반으로 시작하여 점점 발전하게 되었다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이 프레임워크는 2003년 6월에 최초로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%95%84%ED%8C%8C%EC%B9%98_%EB%9D%BC%EC%9D%B4%EC%84%A0%EC%8A%A4&quot;&gt;아파치 2.0 라이선스&lt;/a&gt;로 공개되었으며 주요 버전 이력은 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1.0&amp;nbsp;: 2004년 3월&lt;/li&gt;
&lt;li&gt;2.0&amp;nbsp;: 2006년 10월&lt;/li&gt;
&lt;li&gt;2.5&amp;nbsp;: 2007년 11월&lt;/li&gt;
&lt;li&gt;3.0&amp;nbsp;: 2009년 12월&lt;/li&gt;
&lt;li&gt;3.1&amp;nbsp;: 2011년 12월&lt;/li&gt;
&lt;li&gt;4.0&amp;nbsp;: 2013년 12월&lt;/li&gt;
&lt;li&gt;5.0&amp;nbsp;: 2017년 9월&lt;/li&gt;
&lt;/ul&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&gt;특징&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링은 다른 프레임워크에 비해 다음과 같은 특징을 가진다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;경량 컨테이너로서 자바 객체를 직접 관리한다. 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.&lt;/li&gt;
&lt;li&gt;스프링은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/Plain_Old_Java_Object&quot;&gt;Plain Old Java Object&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;방식의 프레임워크이다. 일반적인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/J2EE&quot;&gt;J2EE&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;프레임워크에 비해 구현을 위해 특정한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4&quot;&gt;인터페이스&lt;/a&gt;를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC&quot;&gt;라이브러리&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등을 지원하기에 용이하고 객체가 가볍다.&lt;/li&gt;
&lt;li&gt;스프링은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%A0%9C%EC%96%B4_%EB%B0%98%EC%A0%84&quot;&gt;제어 반전&lt;/a&gt;(IoC&amp;nbsp;: Inversion of Control)을 지원한다. 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.&lt;/li&gt;
&lt;li&gt;스프링은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%9D%98%EC%A1%B4%EC%84%B1_%EC%A3%BC%EC%9E%85&quot;&gt;의존성 주입&lt;/a&gt;(DI&amp;nbsp;: Dependency Injection)을 지원한다. 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.&lt;/li&gt;
&lt;li&gt;스프링은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EA%B4%80%EC%A0%90_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D&quot;&gt;관점 지향 프로그래밍&lt;/a&gt;(AOP&amp;nbsp;: Aspect-Oriented Programming)을 지원한다. 따라서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98&quot;&gt;트랜잭션&lt;/a&gt;이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.&lt;/li&gt;
&lt;li&gt;스프링은 영속성과 관련된 다양한 서비스를 지원한다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/IBATIS&quot;&gt;iBATIS&lt;/a&gt;나&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%ED%95%98%EC%9D%B4%EB%B2%84%EB%84%A4%EC%9D%B4%ED%8A%B8&quot;&gt;하이버네이트&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공한다.&lt;/li&gt;
&lt;li&gt;스프링은 확장성이 높다. 스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리가 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;주요 모듈&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링에서 사용되는 주요 모듈은 다음과 같다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;제어 반전 컨테이너&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%A0%9C%EC%96%B4_%EB%B0%98%EC%A0%84&quot;&gt;제어 반전&lt;/a&gt;(IoC: Inversion of Control) 컨테이너는 스프링의 가장 중요하고 핵심적인 기능으로서 자바의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EB%B0%98%EC%98%81_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)&quot;&gt;반영&lt;/a&gt;(reflection)을 이용해서 객체의 생명주기를 관리하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%9D%98%EC%A1%B4%EC%84%B1_%EC%A3%BC%EC%9E%85&quot;&gt;의존성 주입&lt;/a&gt;(Dependency Injection)을 통해 각 계층이나 서비스들간의 의존성을 맞춰준다. 이러한 기능들은 주로 환경설정을 담당하는 XML 파일에 의해 설정되고 수행된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;관점 지향 프로그래밍 프레임워크&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링은 로깅이나 보안, 트랜잭션 등 핵심적인 비즈니스 로직과 관련이 없으나 여러 곳에서 공통적으로 쓰이는 기능들을 분리하여 개발하고 실행 시에 서로 조합할 수 있는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EA%B4%80%EC%A0%90_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D&quot;&gt;관점 지향 프로그래밍&lt;/a&gt;(AOP)을 지원한다. 기존에 널리 사용되고 있는 강력한 관점 지향 프로그래밍 프레임워크인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/AspectJ&quot;&gt;AspectJ&lt;/a&gt;도 내부적으로 사용할 수 있으며, 스프링 자체적으로 지원하는 실행시(Runtime)에 조합하는 방식도 지원한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;데이터 액세스 프레임워크&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4&quot;&gt;데이터베이스&lt;/a&gt;에 접속하고 자료를 저장 및 읽어오기 위한 여러 가지 유명한 라이브러리, 즉&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/JDBC&quot;&gt;JDBC&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/IBATIS&quot;&gt;iBATIS&lt;/a&gt;(&lt;a href=&quot;https://ko.wikipedia.org/wiki/MyBatis&quot;&gt;MyBatis&lt;/a&gt;),&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%ED%95%98%EC%9D%B4%EB%B2%84%EB%84%A4%EC%9D%B4%ED%8A%B8&quot;&gt;하이버네이트&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등에 대한 지원 기능을 제공하여 데이터베이스 프로그래밍을 쉽게 사용할 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;트랜잭션 관리 프레임워크&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링은 추상화된&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98&quot;&gt;트랜잭션&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;관리를 지원하며 XML 설정파일 등을 이용한 선언적인 방식 및 프로그래밍을 통한 방식을 모두 지원한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;모델-뷰-컨트롤러 패턴&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링은 웹 프로그램밍 개발 시 거의 표준적인 방식인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Spring MVC&lt;/b&gt;라 불리는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC&quot;&gt;모델-뷰-컨트롤러&lt;/a&gt;(MVC) 패턴을 사용한다. DispatcherServlet이 Controller 역할을 담당하여 각종 요청을 적절한 서비스에 분산시켜주며 이를 각 서비스들이 처리를 하여 결과를 생성하고 그 결과는 다양한 형식의 View 서비스들로 화면에 표시될 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;배치 프레임워크&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링은 특정 시간대에 실행하거나 대용량의 자료를 처리하는데 쓰이는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%9D%BC%EA%B4%84_%EC%B2%98%EB%A6%AC&quot;&gt;일괄 처리&lt;/a&gt;(Batch Processing)을 지원하는 배치 프레임워크를 제공한다. 기본적으로 스프링 배치는 Quartz 기반으로 동작한다.&lt;/p&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-origin-width=&quot;695&quot; data-origin-height=&quot;494&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SdwMH/btreMCw6UG8/KDefkHl6mfa00nd5VKgZR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SdwMH/btreMCw6UG8/KDefkHl6mfa00nd5VKgZR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SdwMH/btreMCw6UG8/KDefkHl6mfa00nd5VKgZR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSdwMH%2FbtreMCw6UG8%2FKDefkHl6mfa00nd5VKgZR0%2Fimg.png&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;494&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;a href=&quot;https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%94%84%EB%A7%81_%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%94%84%EB%A7%81_%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1631281120486&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;스프링 프레임워크 - 위키백과, 우리 모두의 백과사전&quot; data-og-description=&quot;&quot; data-og-host=&quot;ko.wikipedia.org&quot; data-og-source-url=&quot;https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%94%84%EB%A7%81_%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC&quot; data-og-url=&quot;https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%94%84%EB%A7%81_%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%94%84%EB%A7%81_%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%94%84%EB%A7%81_%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC&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;스프링 프레임워크 - 위키백과, 우리 모두의 백과사전&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ko.wikipedia.org&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>IT Interview</category>
      <category>POJO</category>
      <category>Spring</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/48</guid>
      <comments>https://mojjisoft.tistory.com/48#entry48comment</comments>
      <pubDate>Fri, 10 Sep 2021 22:51:03 +0900</pubDate>
    </item>
    <item>
      <title>DNS</title>
      <link>https://mojjisoft.tistory.com/47</link>
      <description>&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1932&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/CfrLe/btrexmJZBOZ/J8FkSfUHPBokB2sDuA2ArK/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CfrLe/btrexmJZBOZ/J8FkSfUHPBokB2sDuA2ArK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CfrLe/btrexmJZBOZ/J8FkSfUHPBokB2sDuA2ArK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CfrLe/btrexmJZBOZ/J8FkSfUHPBokB2sDuA2ArK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCfrLe%2FbtrexmJZBOZ%2FJ8FkSfUHPBokB2sDuA2ArK%2Fimg.png&quot; data-origin-width=&quot;1932&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/CfrLe/btrexmJZBOZ/J8FkSfUHPBokB2sDuA2ArK/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;</description>
      <category>IT Diary/# 끄적이며 공부하기</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/47</guid>
      <comments>https://mojjisoft.tistory.com/47#entry47comment</comments>
      <pubDate>Fri, 10 Sep 2021 00:35:40 +0900</pubDate>
    </item>
    <item>
      <title>[ Knowledge ]  Thread Safe란?</title>
      <link>https://mojjisoft.tistory.com/44</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;Thead Safe&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;스레드 안전(thread 安全, 영어: thread safety)은 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻한다. 보다 엄밀하게는 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바로 나오는 것으로 정의한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;hashmap는-thread-safe한가&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;HashMap는 thread-safe한가?&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;결론 부터 말하자면&amp;nbsp;&lt;b&gt;HashMap은 thread-safe하지 않다.&lt;/b&gt;&amp;nbsp;이유는 여러 스레드가 동일한 HashMap 객체에 액세스하고 HashMap(put(), remove() 메서드) 구조를 수정하려고 하면 HashMap의 상태가 일치하지 않을 수 있기 때문입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;HashMap을 멀티 스레드 환경에서 사용하려면 동기화된 블록 내에 동기화(Synchronize)된 블록 내에 관련 코드를 작성하거나 외부 잠금 구현을 사용해야합니다. 그러나 이 경우 적절한 주의를 기울이지 않으면 오류 및 교착 상태 상황이 발생할 가능성이 높습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;따라서, HashMap은 멀티 스레드 환경에서는 사용하지 않는 것이 좋습니다. 대신 HashMap과 비슷한 thread-safe한 컬렉션은 다음과 같이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;HashTable&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Collections.SynchronizedMap&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;ConcurrentHashMap&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;3개 모두 thread-safe 합니다. 그 중&amp;nbsp;&lt;b&gt;ConcurrentHashMap&lt;/b&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;hashtable&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;HashTable&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;HashTable의 thread-safe는 JDK 1.1부터 사용 가능한 레거시 클래스입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;한 번에 하나의 스레드만 읽거나 쓸 수 있습니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;즉, 스레드는 전체 HashTable 인스턴스에서 잠금(Lock)이 수반됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;좀 더 설명을 하자면 메서드 호출 전에 쓰레드간 동기화 락(Lock)을 걸기 때문에 멀티 쓰레드(Multi-Thread) 환경에서도 데이터의 무결성을 보장합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이는&amp;nbsp;&lt;b&gt;성능 저하의 원인&lt;/b&gt;&amp;nbsp;으로 멀티 스레드 아키텍쳐의 장점을 활용할 수 없습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;collectionssynchronizedmap&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Collections.SynchronizedMap&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;HashMap을 사용하고도 동기화 문제를 해결할 수 있는 방법입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;어떤 Map 인터페이스(동기화를 지원하지 않는 Map이더라도)를 사용하더라도 SynchronizedMap으로 랩핑(Wrapping)하여 주면 해당 Map객체는 동기화 맵(Synchronized Map)이 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;SynchronizedMap은 util 클래스의 static inner class 입니다. (java.util.Collections)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;HashTable 인터페이스를 사용하는 것보다&amp;nbsp;&lt;b&gt;더 빠른 처리 속도를 가집니다.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;concurrenthashmap&quot; data-ke-size=&quot;size26&quot;&gt;ConcurrentHashMap&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JAVA 1.5 부터는 ConcurrentUtil 이라는 인터페이스를 기본으로 제공합니다.&lt;/li&gt;
&lt;li&gt;ConcurrentHashMap의 검색 작업(get 포함)은 Lock이 이루어지지 않으며 갱신 작업(put 및 remove 포함)과 동시에 수행 될 수 있습니다.&lt;/li&gt;
&lt;li&gt;ConcurrentHashMap는 SynchronizedMap 으로 감싸진 HashMap 이나 HashTable 보다 더 빠른 속도를 보입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그 이유는 ConcurrentHashMap은 동기화 시, Map 전체에 동기화 락을 걸지 않고, Map을 여러 조각으로 쪼개어 부분부분 락을 거는 형태로 구현되어 있기 때문입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;(멀티 쓰레드 환경에서) 쓰레드 간의 경쟁이 심한 경우, 훨씬 더 효율적입니다.&lt;/li&gt;
&lt;li&gt;ConcurrentHashMap의 검색은 검색 method가 실행되는 시점에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;가장 최근에 완료된 갱신 작업의 결과를 반영한다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;335&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7w0Kx/btreDTfdls9/AqR2qMxxkGVB6hj5rj0sQk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7w0Kx/btreDTfdls9/AqR2qMxxkGVB6hj5rj0sQk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7w0Kx/btreDTfdls9/AqR2qMxxkGVB6hj5rj0sQk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7w0Kx%2FbtreDTfdls9%2FAqR2qMxxkGVB6hj5rj0sQk%2Fimg.jpg&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;335&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;b&gt;출처 : &lt;a href=&quot;https://doorisopen.github.io/developers-library/Java/2020-07-08-java-hashmap-and-thread-safe&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://doorisopen.github.io/developers-library/Java/2020-07-08-java-hashmap-and-thread-safe&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>IT Diary/# Knowledge</category>
      <category>HashMap</category>
      <category>Thread</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/44</guid>
      <comments>https://mojjisoft.tistory.com/44#entry44comment</comments>
      <pubDate>Thu, 9 Sep 2021 23:34:43 +0900</pubDate>
    </item>
    <item>
      <title>빅오 표기법</title>
      <link>https://mojjisoft.tistory.com/43</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;빅 오 표기법에 대해서 알아보자 &lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1905&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/HVxPf/btrdqLDQvyE/UyMjHUhNHahKcmPM6dHNr1/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HVxPf/btrdqLDQvyE/UyMjHUhNHahKcmPM6dHNr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HVxPf/btrdqLDQvyE/UyMjHUhNHahKcmPM6dHNr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HVxPf/btrdqLDQvyE/UyMjHUhNHahKcmPM6dHNr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHVxPf%2FbtrdqLDQvyE%2FUyMjHUhNHahKcmPM6dHNr1%2Fimg.png&quot; data-origin-width=&quot;1905&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/HVxPf/btrdqLDQvyE/UyMjHUhNHahKcmPM6dHNr1/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1905&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/qwxMG/btrdwSV2JIK/UeljVhmV5rKaLp7RvWMr7k/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qwxMG/btrdwSV2JIK/UeljVhmV5rKaLp7RvWMr7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qwxMG/btrdwSV2JIK/UeljVhmV5rKaLp7RvWMr7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qwxMG/btrdwSV2JIK/UeljVhmV5rKaLp7RvWMr7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqwxMG%2FbtrdwSV2JIK%2FUeljVhmV5rKaLp7RvWMr7k%2Fimg.png&quot; data-origin-width=&quot;1905&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/qwxMG/btrdwSV2JIK/UeljVhmV5rKaLp7RvWMr7k/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1905&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/dr1DVK/btrdtK5hJcm/QvK4etD4RXkhMMFFGkPP1k/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dr1DVK/btrdtK5hJcm/QvK4etD4RXkhMMFFGkPP1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dr1DVK/btrdtK5hJcm/QvK4etD4RXkhMMFFGkPP1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dr1DVK/btrdtK5hJcm/QvK4etD4RXkhMMFFGkPP1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdr1DVK%2FbtrdtK5hJcm%2FQvK4etD4RXkhMMFFGkPP1k%2Fimg.png&quot; data-origin-width=&quot;1905&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/dr1DVK/btrdtK5hJcm/QvK4etD4RXkhMMFFGkPP1k/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;</description>
      <category>IT Diary/# Knowledge</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/43</guid>
      <comments>https://mojjisoft.tistory.com/43#entry43comment</comments>
      <pubDate>Sun, 29 Aug 2021 23:17:40 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 Printer</title>
      <link>https://mojjisoft.tistory.com/42</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;결국엔 다른분께서 푸신 해답을 보고 이해…ㅠㅠ&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1932&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/lEEyr/btrdr4Plis4/s03ntKbvFxXKh3t0SjsNHk/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lEEyr/btrdr4Plis4/s03ntKbvFxXKh3t0SjsNHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lEEyr/btrdr4Plis4/s03ntKbvFxXKh3t0SjsNHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lEEyr/btrdr4Plis4/s03ntKbvFxXKh3t0SjsNHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlEEyr%2Fbtrdr4Plis4%2Fs03ntKbvFxXKh3t0SjsNHk%2Fimg.png&quot; data-origin-width=&quot;1932&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/lEEyr/btrdr4Plis4/s03ntKbvFxXKh3t0SjsNHk/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;</description>
      <category>IT Diary/# CodingTest</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/42</guid>
      <comments>https://mojjisoft.tistory.com/42#entry42comment</comments>
      <pubDate>Sat, 28 Aug 2021 02:01:01 +0900</pubDate>
    </item>
    <item>
      <title>스택과 큐</title>
      <link>https://mojjisoft.tistory.com/41</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;스택과 큐에 대한 정리&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1932&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/bsI8VZ/btrdesybylF/tKgSVOkLDnO4FzZFydy880/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsI8VZ/btrdesybylF/tKgSVOkLDnO4FzZFydy880/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsI8VZ/btrdesybylF/tKgSVOkLDnO4FzZFydy880/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsI8VZ/btrdesybylF/tKgSVOkLDnO4FzZFydy880/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsI8VZ%2FbtrdesybylF%2FtKgSVOkLDnO4FzZFydy880%2Fimg.png&quot; data-origin-width=&quot;1932&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/bsI8VZ/btrdesybylF/tKgSVOkLDnO4FzZFydy880/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;</description>
      <category>IT Diary/# JAVA</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/41</guid>
      <comments>https://mojjisoft.tistory.com/41#entry41comment</comments>
      <pubDate>Fri, 27 Aug 2021 00:35:29 +0900</pubDate>
    </item>
    <item>
      <title>Java는 뭘까?</title>
      <link>https://mojjisoft.tistory.com/40</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;java의 특징 &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1875&quot; data-origin-height=&quot;2500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NGNMH/btrcONPdD49/kvFNOOs7WwNZidQkgSikjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NGNMH/btrcONPdD49/kvFNOOs7WwNZidQkgSikjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NGNMH/btrcONPdD49/kvFNOOs7WwNZidQkgSikjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNGNMH%2FbtrcONPdD49%2FkvFNOOs7WwNZidQkgSikjk%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;1875&quot; height=&quot;2500&quot; data-origin-width=&quot;1875&quot; data-origin-height=&quot;2500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>IT Diary/# 끄적이며 공부하기</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/40</guid>
      <comments>https://mojjisoft.tistory.com/40#entry40comment</comments>
      <pubDate>Sun, 22 Aug 2021 23:24:34 +0900</pubDate>
    </item>
    <item>
      <title>추상클래스 , 추상매소드</title>
      <link>https://mojjisoft.tistory.com/39</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;추상 클래스와 추상 매소드의 정리&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1768&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/cocfTE/btrcojfR2v2/6Q6OVp6DOdmp45cH3yTWt0/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cocfTE/btrcojfR2v2/6Q6OVp6DOdmp45cH3yTWt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cocfTE/btrcojfR2v2/6Q6OVp6DOdmp45cH3yTWt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cocfTE/btrcojfR2v2/6Q6OVp6DOdmp45cH3yTWt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcocfTE%2FbtrcojfR2v2%2F6Q6OVp6DOdmp45cH3yTWt0%2Fimg.png&quot; data-origin-width=&quot;1768&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/cocfTE/btrcojfR2v2/6Q6OVp6DOdmp45cH3yTWt0/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1768&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/bfPTCh/btrcgOOxrU0/8GRsvGMM7tQjBuiWtf7JVk/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfPTCh/btrcgOOxrU0/8GRsvGMM7tQjBuiWtf7JVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfPTCh/btrcgOOxrU0/8GRsvGMM7tQjBuiWtf7JVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfPTCh/btrcgOOxrU0/8GRsvGMM7tQjBuiWtf7JVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfPTCh%2FbtrcgOOxrU0%2F8GRsvGMM7tQjBuiWtf7JVk%2Fimg.png&quot; data-origin-width=&quot;1768&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/bfPTCh/btrcgOOxrU0/8GRsvGMM7tQjBuiWtf7JVk/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;</description>
      <category>IT Diary/# JAVA</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/39</guid>
      <comments>https://mojjisoft.tistory.com/39#entry39comment</comments>
      <pubDate>Tue, 17 Aug 2021 00:14:46 +0900</pubDate>
    </item>
    <item>
      <title>HashMap</title>
      <link>https://mojjisoft.tistory.com/38</link>
      <description>&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1768&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/c3xTnz/btrb6UocD0V/OsIkXScT9K7No0R6EAkC90/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3xTnz/btrb6UocD0V/OsIkXScT9K7No0R6EAkC90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3xTnz/btrb6UocD0V/OsIkXScT9K7No0R6EAkC90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3xTnz/btrb6UocD0V/OsIkXScT9K7No0R6EAkC90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3xTnz%2Fbtrb6UocD0V%2FOsIkXScT9K7No0R6EAkC90%2Fimg.png&quot; data-origin-width=&quot;1768&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/c3xTnz/btrb6UocD0V/OsIkXScT9K7No0R6EAkC90/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;</description>
      <category>IT Diary/# JAVA</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/38</guid>
      <comments>https://mojjisoft.tistory.com/38#entry38comment</comments>
      <pubDate>Sat, 14 Aug 2021 00:18:15 +0900</pubDate>
    </item>
    <item>
      <title>this ,  this() 의 차이와 사용</title>
      <link>https://mojjisoft.tistory.com/37</link>
      <description>&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1768&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/zMc8L/btrbW1tbAd0/J0lUPPDQldcenLQi1vFvz0/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zMc8L/btrbW1tbAd0/J0lUPPDQldcenLQi1vFvz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zMc8L/btrbW1tbAd0/J0lUPPDQldcenLQi1vFvz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zMc8L/btrbW1tbAd0/J0lUPPDQldcenLQi1vFvz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzMc8L%2FbtrbW1tbAd0%2FJ0lUPPDQldcenLQi1vFvz0%2Fimg.png&quot; data-origin-width=&quot;1768&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/zMc8L/btrbW1tbAd0/J0lUPPDQldcenLQi1vFvz0/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;</description>
      <category>IT Diary/# JAVA</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/37</guid>
      <comments>https://mojjisoft.tistory.com/37#entry37comment</comments>
      <pubDate>Thu, 12 Aug 2021 00:23:11 +0900</pubDate>
    </item>
    <item>
      <title>생성자 ( Constructor)</title>
      <link>https://mojjisoft.tistory.com/36</link>
      <description>&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1768&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/8naAJ/btrbR45jI9B/aS8KVGp905IrSVqdxV6U6K/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8naAJ/btrbR45jI9B/aS8KVGp905IrSVqdxV6U6K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8naAJ/btrbR45jI9B/aS8KVGp905IrSVqdxV6U6K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8naAJ/btrbR45jI9B/aS8KVGp905IrSVqdxV6U6K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8naAJ%2FbtrbR45jI9B%2FaS8KVGp905IrSVqdxV6U6K%2Fimg.jpg&quot; data-origin-width=&quot;1768&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/8naAJ/btrbR45jI9B/aS8KVGp905IrSVqdxV6U6K/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;</description>
      <category>IT Diary/# JAVA</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/36</guid>
      <comments>https://mojjisoft.tistory.com/36#entry36comment</comments>
      <pubDate>Wed, 11 Aug 2021 19:14:06 +0900</pubDate>
    </item>
    <item>
      <title>java stream</title>
      <link>https://mojjisoft.tistory.com/35</link>
      <description>&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1768&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/rV2yV/btrbIcXBYHY/kyqFo9ByaqCHwVfAC1EKoK/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rV2yV/btrbIcXBYHY/kyqFo9ByaqCHwVfAC1EKoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rV2yV/btrbIcXBYHY/kyqFo9ByaqCHwVfAC1EKoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rV2yV/btrbIcXBYHY/kyqFo9ByaqCHwVfAC1EKoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrV2yV%2FbtrbIcXBYHY%2FkyqFo9ByaqCHwVfAC1EKoK%2Fimg.png&quot; data-origin-width=&quot;1768&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/rV2yV/btrbIcXBYHY/kyqFo9ByaqCHwVfAC1EKoK/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;</description>
      <category>IT Diary/# JAVA</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/35</guid>
      <comments>https://mojjisoft.tistory.com/35#entry35comment</comments>
      <pubDate>Wed, 11 Aug 2021 00:28:13 +0900</pubDate>
    </item>
    <item>
      <title>Ioc 와 di</title>
      <link>https://mojjisoft.tistory.com/34</link>
      <description>&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1768&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/kLtyc/btrbCtLvehW/JdfBR8tmkNkwdRttskHLmk/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kLtyc/btrbCtLvehW/JdfBR8tmkNkwdRttskHLmk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kLtyc/btrbCtLvehW/JdfBR8tmkNkwdRttskHLmk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kLtyc/btrbCtLvehW/JdfBR8tmkNkwdRttskHLmk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkLtyc%2FbtrbCtLvehW%2FJdfBR8tmkNkwdRttskHLmk%2Fimg.jpg&quot; data-origin-width=&quot;1768&quot; data-origin-height=&quot;2500&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/kLtyc/btrbCtLvehW/JdfBR8tmkNkwdRttskHLmk/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;</description>
      <category>IT Diary/# JAVA</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/34</guid>
      <comments>https://mojjisoft.tistory.com/34#entry34comment</comments>
      <pubDate>Tue, 10 Aug 2021 00:22:30 +0900</pubDate>
    </item>
    <item>
      <title>[ JAVA ] 다형성과 추상화</title>
      <link>https://mojjisoft.tistory.com/33</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&quot; data-filename=&quot;img.png&quot; width=&quot;458&quot; height=&quot;229&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1Afor/btra6HW7w2W/C2uLIhVPPD8ysDEaa3Olqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1Afor/btra6HW7w2W/C2uLIhVPPD8ysDEaa3Olqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1Afor/btra6HW7w2W/C2uLIhVPPD8ysDEaa3Olqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1Afor%2Fbtra6HW7w2W%2FC2uLIhVPPD8ysDEaa3Olqk%2Fimg.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&quot; data-filename=&quot;img.png&quot; width=&quot;458&quot; height=&quot;229&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;&amp;nbsp;&lt;/span&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;객체지향에서의 추상화는 어떤 하위클래스들에 존재하는 공통적인 메소드를 인터페이스로 정의하는것을 예로 들 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자료의 추상화 = 객체지향 관점에서 클래스를 정의하는 것&lt;/li&gt;
&lt;li&gt;추상클래스 = 여러 클래스간 비슷한 필드와 메서드를 공통적으로 추출해 만들어진 클래스&lt;/li&gt;
&lt;li&gt;인터페이스 = 동일한 목적 하에 동일한 기능을 수행하게끔 강제하는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;316&quot; data-filename=&quot;스크린샷 2021-08-03 오전 12.43.35.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nnMQf/btra8yZT69K/pUgReG9mcchXnOqsPofK9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nnMQf/btra8yZT69K/pUgReG9mcchXnOqsPofK9k/img.png&quot; data-alt=&quot;인터페이스 vs 추상화클래스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nnMQf/btra8yZT69K/pUgReG9mcchXnOqsPofK9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnnMQf%2Fbtra8yZT69K%2FpUgReG9mcchXnOqsPofK9k%2Fimg.png&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;316&quot; data-filename=&quot;스크린샷 2021-08-03 오전 12.43.35.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;인터페이스 vs 추상화클래스&lt;/figcaption&gt;
&lt;/figure&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;background-color: #dddddd;&quot;&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;&amp;nbsp;&lt;/span&gt;다형성&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다형성은, 같은 모양의 함수가 상황에 따라 다르게 동작 하는것을 의미한다. &lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오버라이딩(Overriding): 부모클래스의 메서드와 같은 이름, 매개변수를 재정의 하는 것&lt;/li&gt;
&lt;li&gt;오버로딩(Overloading): 같은 이름의 함수를 여러개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개 변수에 따라 다르게 호출할 수 있게 하는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&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;&amp;nbsp; 군대에서 나는 K2 소총을 잡았고 동기는 K1 소총을 잡았다. 사격 훈련이 있을 때 중대장이 '준비된 사수부터 발사!'라고 외치면&lt;/p&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; 즉, 다형성이 없다면 K1 소총을 든 병사 발사, K2 소총을 든 병사 발사 라며 명령을 하나하나 내려야 할 것이다&lt;/p&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;br /&gt;출처 :&lt;a href=&quot;https://dis.dankook.ac.kr/lectures/java18-2/2018/09/18/abstract-class-vs-interface/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dis.dankook.ac.kr/lectures/java18-2/2018/09/18/abstract-class-vs-interface/&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #555555;&quot;&gt;출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://88240.tistory.com/228&quot;&gt;https://88240.tistory.com/228&lt;/a&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #555555;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;[shaking blog]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://simsimjae.tistory.com/293&quot;&gt;https://simsimjae.tistory.com/293&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;[104%]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;출처: &lt;a href=&quot;https://sdesigner.tistory.com/90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://sdesigner.tistory.com/90&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1627919207735&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;[Java] 추상화, 상속, 추상클래스와 인터페이스 비교, 다형성&quot; data-og-description=&quot;본 포스팅은 jisikTank 스터디에 참여하며 정리한 문서입니다. jisikTank Skill 지식 Git Repository 객체지향과 추상화(상속, 추상클래스, 인터페이스, 다형성) 추상화(Abstraction) 객체 지향 프로그래밍 키워&quot; data-og-host=&quot;sdesigner.tistory.com&quot; data-og-source-url=&quot;https://sdesigner.tistory.com/90&quot; data-og-url=&quot;https://sdesigner.tistory.com/90&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/x4Bwc/hyK6gI80I7/DF6k3mChp01Lytyu0v5Jx0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/pGdIK/hyK6krd0wG/bJKSp6vxDY4N6txREK2wIk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/235sl/hyK6lczlt5/IH0Q3GnPNaC2so023yPhF1/img.jpg?width=3024&amp;amp;height=3024&amp;amp;face=0_0_3024_3024&quot;&gt;&lt;a href=&quot;https://sdesigner.tistory.com/90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://sdesigner.tistory.com/90&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/x4Bwc/hyK6gI80I7/DF6k3mChp01Lytyu0v5Jx0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/pGdIK/hyK6krd0wG/bJKSp6vxDY4N6txREK2wIk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/235sl/hyK6lczlt5/IH0Q3GnPNaC2so023yPhF1/img.jpg?width=3024&amp;amp;height=3024&amp;amp;face=0_0_3024_3024');&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;[Java] 추상화, 상속, 추상클래스와 인터페이스 비교, 다형성&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;본 포스팅은 jisikTank 스터디에 참여하며 정리한 문서입니다. jisikTank Skill 지식 Git Repository 객체지향과 추상화(상속, 추상클래스, 인터페이스, 다형성) 추상화(Abstraction) 객체 지향 프로그래밍 키워&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;sdesigner.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>IT Diary/# JAVA</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/33</guid>
      <comments>https://mojjisoft.tistory.com/33#entry33comment</comments>
      <pubDate>Tue, 3 Aug 2021 00:46:59 +0900</pubDate>
    </item>
    <item>
      <title>[ 스위치 ] 8월 기대작 로맨싱사가3 ( 한국어판 )</title>
      <link>https://mojjisoft.tistory.com/32</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;402&quot; data-filename=&quot;스크린샷 2021-08-02 오후 9.59.06.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cof0F6/btra34EYAJi/FtMiRM4hKMIdxghQ1oU74k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cof0F6/btra34EYAJi/FtMiRM4hKMIdxghQ1oU74k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cof0F6/btra34EYAJi/FtMiRM4hKMIdxghQ1oU74k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcof0F6%2Fbtra34EYAJi%2FFtMiRM4hKMIdxghQ1oU74k%2Fimg.png&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;402&quot; data-filename=&quot;스크린샷 2021-08-02 오후 9.59.06.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;8월의 스위치 기대작은 로맨싱사가 3 입니다.&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;b&gt;출시일 : 2021년 8월 19일&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;가격 : 49,800 원&lt;/b&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;사실 스팀이나 모바일로는 나온지가 좀 된 게임이고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 원작은 1995년에 스퀘어에서 슈퍼페미컴으로 발매한 RPG 게임입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에 나오는거는 스위치 버전으로 출시되는 HD 리마스터 한국어 버전입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 큰 장점은 오픈월드 형식을 띄고 있는 도트그래픽 JRPG라는 점입니다.&amp;nbsp;&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&gt;이번 작품에서 플레이어는 8명의 개성 넘치는 주인공 중 1명을 골라, 이야기를 스타트하여 게임을 시작하게 됩니다. 게임 속에서 자신의 선택과 행동에 따라 변화하는 &amp;lsquo;프리 시나리오&amp;rsquo;를 통해 각양각색의 스토리를 접할 수 있고,&amp;nbsp; 『사가 시리즈』 특유의 &amp;lsquo;번뜩임&amp;rsquo; 시스템을 통한 기술 습득은 물론, &amp;lsquo;진형&amp;rsquo; 시스템을 구사하여 자유롭게 파티를 편성하고, 전략적인 배틀을 즐길 수 있습니다. 그리고 HD 리마스터판에서 새롭게 추가된 신규 던전, &amp;lsquo;어둠의 미궁&amp;rsquo;과 다양한 신규 에피소드, &amp;lsquo;NEW GAME+&amp;rsquo;와 같은 신규 요소를 한층 개선된 인터페이스와 조작감으로 즐길 수 있습니다.&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;&lt;a href=&quot;https://youtu.be/zxeRY0oHAjo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://youtu.be/zxeRY0oHAjo&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=zxeRY0oHAjo&amp;amp;feature=youtu.be&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/OFqRC/hyK6o77NX3/JdSnhaTnbKPvMb3EnK3Bf0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/zxeRY0oHAjo&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;로맨싱사가 3 트레일러&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;&amp;nbsp;&lt;/span&gt;로맨싱사가의 특징&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새로운 진형을 알고 있는 동료가 있는데, 이들이 파티에 들어오면 자동으로 진형이 습득된다. 새로 즉위한 황제의 직업에 따라 진형을 개발해야 했던 전작에 비하면 여러모로 라이트한 변화다. 단, 진형의 조건을 맞추지 못하는 상황에서 파티에 들어왔다가 금방 나갈 경우 진형이 습득되지 않는 경우도 있다고 하니, 진형을 가진 동료를 맞이하면 반드시 진형 메뉴에서 새 진형을 확인해 보도록 하자. 진형의 표준은 5인이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;진형 시스템에 '커맨드 모드'가 추가되었다. 커맨드 모드란 주인공이 전투에 직접 참여하지 않고 동료들만이 전투에 참여하는 것으로, 이를 위해 한 파티의 최고 인원이 6명으로 조정되었다. 따라서 동료로만 이루어진 5명의 풀 파티가 커맨드 모드로 전투에 들어가는 것도 가능하다.&lt;br /&gt;커맨드 모드에서는 턴 당 1회의 명령만을 전체에게 내리는 것이 가능하며, 각 동료들은 이 명령에 따라서 해당 턴의 행동을 결정한다. 전투지침에는 방어만을 굳히고 있게 하는 것, 전원이 선제공격을 가하는 대신 기술이 아닌 평타만을 사용하는 것, 할 수 있는 가장 강한 공격을 사용하는 것 등이 있다. 커맨드 모드에서는 행동 지침을 명령하는 것 외에도 턴 당 1회의 아이템 사용(개별 동료가 장비한 소비 아이템은 사용되지 않고, 인벤토리에 있는 아이템 중 하나를 사령관 권한으로 사용한다.), 특정 진형 &amp;amp; 구성에서만 발동 가능한 합체기나 합성술의 사용을 명령할 수도 있다. 합체기와 합성술은 최소 2명에서 5명까지 참여하는 기술이며, 발동하기 전에 필요 인원 중 일부가 행동불능이 되거나 한다면 취소된다. 여러 명 분의 행동을 소비하는 만큼 그 위력은 초중반에 특히 절대적이나, 캐릭터들의 능력이 한계에 달하는 최후반에는 각자 공격하는 편이 더 낫다. 합체기의 경우 대부분 커맨드 모드의 전투 중 조건을 만족시키는 상황에서 전구를 띄워 개발해야 하고, 합성술의 경우 사마귀족의 본거지의 보물 상자에서 조합법을 얻을 수 있다. 커맨드 모드는 상세한 행동 지시가 불가능한 대신 매 턴 캐릭터들의 체력이 10% 가량 회복되는 보너스가 있으므로, 강적을 상대로 버티겠다면 전략적으로 나쁘지 않은 선택이 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;미니 게임인 '매스 컴뱃'이 추가되었다. 매스 컴뱃이란 말 그대로 대규모의 군사 간 전투로, 직접 전투 시스템과는 꽤 차이가 있지만 나름대로 즐길거리가 많다. 모든 주인공은 메인 시나리오상 최소한 1회의 매스 컴뱃 이벤트를 거치게 되며, 사이드 퀘스트 등을 통해 선택적으로 더 수행할 수도 있다. 주인공을 미카엘로 고를 경우 로아누를 다스리는 과정에서 다양한 매스 컴뱃 이벤트를 질리도록 체험할 수 있다. 사실상 미카엘이야말로 매스 컴뱃 이벤트를 제대로 즐길 수 있는 유일한 주인공인데, 본인의 군대를 끊임없이 입맛대로 강화하는 것이 가능하기 때문이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특별한 전설의 무기 같은 게 별로 없었던 전작에 비해 스토리 전체가 성왕의 무구, 마왕의 무구 등 아티팩트들과 여러모로 얽혀 있다. 각 무구들의 행방에 따라 웃기도 하고 울기도 하고 세계의 운명이 좌우되기도 하는 전개가 나름대로 장관. 기본적으로는 프리 시나리오를 채택하고 있는 게임이지만 메인 스토리를 진행하는 과정에서 아티팩트 한두 개와는 반드시 마주치게 된다. 어차피 성능이 너무 좋기 때문에 긁어모을 수밖에 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 주인공 캐릭터는 플레이어가 선택하는 특기, 무기, 별자리에 따라 능력치가 달라지고, 번뜩임이 잘 뜨는 기술 구성 또한 달라진다. 예를 들면 기본 설정으로 고정되어 있는 동료 버전 모니카는 분명히 이도저도 아닌 약캐지만, 주인공으로 선택 후 무인, 체술로 가면 나름대로 쓸만해진다던가 하는 식으로 플레이어 취향에 맞게 최적화시키는 것이 가능하다.&lt;/li&gt;
&lt;/ul&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://namu.wiki/w/%EB%A1%9C%EB%A7%A8%EC%8B%B1%20%EC%82%AC%EA%B0%80%203&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://namu.wiki/w/%EB%A1%9C%EB%A7%A8%EC%8B%B1%20%EC%82%AC%EA%B0%80%203&lt;/a&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;거진 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;로맨싱사가3가 나오기전에 동일하게 성검의전설 Legend of Mana 가 HD 리마스터 버전으로 출시가 되었었는데&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;이번 로맨싱사가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;&lt;a href=&quot;https://youtu.be/oVEnHRy3ilc&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://youtu.be/oVEnHRy3ilc&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=oVEnHRy3ilc&amp;amp;feature=youtu.be&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/pFRQu/hyK6g3j69Z/ysv3m7idhRkBtsdLLFcrw0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/oVEnHRy3ilc&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;성검의전설 트레일러&lt;/figcaption&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;그래도 스팀에서의 평가는 생각보다 다들 괜찮은 편이고 오랜만에 접하는 JRPG 한글화이기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구매하지 않을까 생각이 듭니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;416&quot; data-origin-height=&quot;254&quot; data-filename=&quot;스크린샷 2021-08-02 오후 10.02.28.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sOWip/btraWvQCpp3/owVUdb68cG6sHmODhTDEF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sOWip/btraWvQCpp3/owVUdb68cG6sHmODhTDEF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sOWip/btraWvQCpp3/owVUdb68cG6sHmODhTDEF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsOWip%2FbtraWvQCpp3%2FowVUdb68cG6sHmODhTDEF1%2Fimg.png&quot; data-origin-width=&quot;416&quot; data-origin-height=&quot;254&quot; data-filename=&quot;스크린샷 2021-08-02 오후 10.02.28.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;95&quot; data-filename=&quot;스크린샷 2021-08-02 오후 10.02.00.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dow4uu/btra33F4C9I/gsIXRNEqZ3qI6khCoqknX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dow4uu/btra33F4C9I/gsIXRNEqZ3qI6khCoqknX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dow4uu/btra33F4C9I/gsIXRNEqZ3qI6khCoqknX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdow4uu%2Fbtra33F4C9I%2FgsIXRNEqZ3qI6khCoqknX0%2Fimg.png&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;95&quot; data-filename=&quot;스크린샷 2021-08-02 오후 10.02.00.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;171&quot; data-filename=&quot;스크린샷 2021-08-02 오후 10.01.55.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brLLDY/btraWTR2VQn/RVR8V5QrMM3KM1VknUBbr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brLLDY/btraWTR2VQn/RVR8V5QrMM3KM1VknUBbr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brLLDY/btraWTR2VQn/RVR8V5QrMM3KM1VknUBbr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrLLDY%2FbtraWTR2VQn%2FRVR8V5QrMM3KM1VknUBbr0%2Fimg.png&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;171&quot; data-filename=&quot;스크린샷 2021-08-02 오후 10.01.55.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;</description>
      <category>Game Diary</category>
      <category>jrpg</category>
      <category>게임</category>
      <category>로맨싱사가</category>
      <category>스위치</category>
      <category>한글화</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/32</guid>
      <comments>https://mojjisoft.tistory.com/32#entry32comment</comments>
      <pubDate>Mon, 2 Aug 2021 22:12:26 +0900</pubDate>
    </item>
    <item>
      <title>포켓몬 분석 - 알로라 나인테일</title>
      <link>https://mojjisoft.tistory.com/31</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;포켓몬 유나이트는 어택형 디펜스형 밸런스형 스피드형으로 서포트형 크게 5가지 타입으로 분류된다.&lt;br&gt;&lt;br&gt;라인은 윗루트 가운데루트 아래루트로 3가지 루트가 있으며&lt;br&gt;보통은 윗루티 2명, 가운데루트 1명, 아래루트 2명으로 라인을 서는데, 롤처럼 고정적으로 정해져있지는 않습니다.&lt;br&gt;&lt;br&gt;그 중에서도 제가 제일 즐겨하는 타입은 어택형 중에서도 알로라 나인테일 입니다.&lt;br&gt;어택형은 현재는 피카츄, 에이스번, 윽우지, 개굴닌자, 알로라 나인테일 , 이상해꽃 , 가디안이 있습니다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/lf1E8/btra35wbABk/DUux2KpXSgwwK8fjbVPx20/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lf1E8/btra35wbABk/DUux2KpXSgwwK8fjbVPx20/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lf1E8/btra35wbABk/DUux2KpXSgwwK8fjbVPx20/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lf1E8/btra35wbABk/DUux2KpXSgwwK8fjbVPx20/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flf1E8%2Fbtra35wbABk%2FDUux2KpXSgwwK8fjbVPx20%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/lf1E8/btra35wbABk/DUux2KpXSgwwK8fjbVPx20/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;스킬 구성&lt;/span&gt;&lt;br&gt;&lt;br&gt;스킬 구성은 기본적으로는 &lt;br&gt;눈사태 - 눈보라 순으로 많이 가는데&lt;br&gt;저같은 경우에는 암살형이나 근접캐릭이 많은 경우, &lt;br&gt;눈사태보다는 매지컬샤인을 가서 스턴으로 한 턴 흘려보낼 수 있는 걸 선호하고 있습니다.&lt;br&gt;알로라 나인테일의 유나이트 기술은&lt;br&gt;롤의 누누가 사용하는 궁과 거의 똑같다고 생각하면 됩니다.&lt;br&gt;원형의 범위안에 모든 포켓몬에게 데미지를 줍니다. &lt;br&gt;&lt;br&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;스킬 트리&lt;/span&gt;&lt;br&gt;&lt;br&gt;기본적인 콤보는 눈사태를 써서, 벽을 만든 후 눈보라로 데미지를 주고 상대 포켓몬이 얼어서 스턴이 걸리면&lt;br&gt;우리 편이 후속딜을 넣어주는 형식으로 진행됩니다.&lt;br&gt;&lt;br&gt;눈사태 같은 경우는 적이 도주하는 경우나, 내가 도주할때 적의 이동경로를 방해할때도 유용하게 사용될 수 있습니다.&lt;br&gt;&lt;br&gt;또, 매지컬샤인의 경우 일시적인 스턴의 효과가 있기때문에 한타에서 적들의 딜을 막고, 우리팀에게 딜을 넣을 수 있는 기회를 창출할 수 있습니다.&lt;br&gt;&lt;br&gt;오로라 베일은 범위 안에 있는 아군이 받는 피해를 감소하고, 범위 안에서는 이동속도 증가, 일반 공격 모두 강화공격이 됩니다.&lt;br&gt;&lt;br&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;운영 방법&lt;/span&gt;&lt;br&gt;&lt;br&gt;기본적으 어택형은 원거리형이 많고, 원거리형은 역시 어느정도 컨트롤을 요하는 포켓몬들이 많습니다.&lt;br&gt;그래서 되도록 이면, 본인을 지켜줄 수 있는 포켓몬과 같이 라인을 서는게 중요하고&lt;br&gt;한타가 벌어질 경우, 맨 뒤에서 우리팀의 디펜스형 혹은 밸런스형이 물려서 상대 포켓몬들의 기술이 빠지거나&lt;br&gt;묶여있을 경우, 들어가서 폭딜을 넣어주는게 중요합니다.&lt;br&gt;&lt;br&gt;딜러가 먼저 죽어버리는 경우, 딜이 나오지 않아서 비슷비슷해 보여도 최종적으로는 한타를 패배하는 경우가 많습니다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/dG7sY3/btra1ZXjUz9/MrPx7lFfu5SyNcJ7cTGBy1/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dG7sY3/btra1ZXjUz9/MrPx7lFfu5SyNcJ7cTGBy1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dG7sY3/btra1ZXjUz9/MrPx7lFfu5SyNcJ7cTGBy1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dG7sY3/btra1ZXjUz9/MrPx7lFfu5SyNcJ7cTGBy1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdG7sY3%2Fbtra1ZXjUz9%2FMrPx7lFfu5SyNcJ7cTGBy1%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/dG7sY3/btra1ZXjUz9/MrPx7lFfu5SyNcJ7cTGBy1/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/cId7He/btraSZkdKFa/7UaUoREFS5ducZiIZ6g4Gk/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cId7He/btraSZkdKFa/7UaUoREFS5ducZiIZ6g4Gk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cId7He/btraSZkdKFa/7UaUoREFS5ducZiIZ6g4Gk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cId7He/btraSZkdKFa/7UaUoREFS5ducZiIZ6g4Gk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcId7He%2FbtraSZkdKFa%2F7UaUoREFS5ducZiIZ6g4Gk%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/cId7He/btraSZkdKFa/7UaUoREFS5ducZiIZ6g4Gk/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/cv6fMb/btraWTXQcUc/kRjPRKPIHbIELM60Xu7Wi0/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cv6fMb/btraWTXQcUc/kRjPRKPIHbIELM60Xu7Wi0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cv6fMb/btraWTXQcUc/kRjPRKPIHbIELM60Xu7Wi0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cv6fMb/btraWTXQcUc/kRjPRKPIHbIELM60Xu7Wi0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcv6fMb%2FbtraWTXQcUc%2FkRjPRKPIHbIELM60Xu7Wi0%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/cv6fMb/btraWTXQcUc/kRjPRKPIHbIELM60Xu7Wi0/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/bPJ1vw/btraRxhd2io/0rQsd2E6DwX6an6ucU9jYk/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPJ1vw/btraRxhd2io/0rQsd2E6DwX6an6ucU9jYk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPJ1vw/btraRxhd2io/0rQsd2E6DwX6an6ucU9jYk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPJ1vw/btraRxhd2io/0rQsd2E6DwX6an6ucU9jYk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPJ1vw%2FbtraRxhd2io%2F0rQsd2E6DwX6an6ucU9jYk%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/bPJ1vw/btraRxhd2io/0rQsd2E6DwX6an6ucU9jYk/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/IemCD/btraXXln4S5/ilWjQKjCF8e2KGP9slxPhK/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IemCD/btraXXln4S5/ilWjQKjCF8e2KGP9slxPhK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IemCD/btraXXln4S5/ilWjQKjCF8e2KGP9slxPhK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IemCD/btraXXln4S5/ilWjQKjCF8e2KGP9slxPhK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIemCD%2FbtraXXln4S5%2FilWjQKjCF8e2KGP9slxPhK%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/IemCD/btraXXln4S5/ilWjQKjCF8e2KGP9slxPhK/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;아이템&lt;/span&gt;&lt;br&gt;&lt;br&gt;아이템의 경우, 많은 유저분들이 추천해준 트리가 많으니 그걸 참고하면 좋을 것 같습니다.&lt;br&gt;기본적으로는 스킬쿨감, 공격력 등의 셋트를 많이 추천하고 있는 것 같습니다.&lt;br&gt;본인의 성향에 따라서 아이템을 맞춰서 플레이하면 더 즐겁게 포켓몬 유나이트를 즐길 수 있겠죠?ㅎㅎ&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/bJ2cTU/btraVpbRl9U/Rzo3DNA61sceJhYNOBQgA1/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJ2cTU/btraVpbRl9U/Rzo3DNA61sceJhYNOBQgA1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJ2cTU/btraVpbRl9U/Rzo3DNA61sceJhYNOBQgA1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJ2cTU/btraVpbRl9U/Rzo3DNA61sceJhYNOBQgA1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJ2cTU%2FbtraVpbRl9U%2FRzo3DNA61sceJhYNOBQgA1%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/bJ2cTU/btraVpbRl9U/Rzo3DNA61sceJhYNOBQgA1/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/cTFZlP/btra1ZbVtJ5/zkWzTLakNVgqX9ZYeKEKUk/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTFZlP/btra1ZbVtJ5/zkWzTLakNVgqX9ZYeKEKUk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTFZlP/btra1ZbVtJ5/zkWzTLakNVgqX9ZYeKEKUk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTFZlP/btra1ZbVtJ5/zkWzTLakNVgqX9ZYeKEKUk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTFZlP%2Fbtra1ZbVtJ5%2FzkWzTLakNVgqX9ZYeKEKUk%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/cTFZlP/btra1ZbVtJ5/zkWzTLakNVgqX9ZYeKEKUk/img.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;</description>
      <category>Game Diary</category>
      <category>poketmon</category>
      <category>switch</category>
      <category>배틀패스</category>
      <category>스위치</category>
      <category>포켓몬</category>
      <category>포켓몬 유나이트</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/31</guid>
      <comments>https://mojjisoft.tistory.com/31#entry31comment</comments>
      <pubDate>Sun, 1 Aug 2021 13:21:05 +0900</pubDate>
    </item>
    <item>
      <title>포켓몬 유나이트 배틀패스 Vs 배틀패스 Plus</title>
      <link>https://mojjisoft.tistory.com/30</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;배틀 패스로 「포켓몬 유나이트」를 즐기자&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;「포켓몬 유나이트」에서는 배틀 패스라는 시스템이 있습니다.&lt;/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;홀로웨어 등의 더 호화스러운 보상이 추가됩니다.&lt;/p&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;포켓몬 유나이트에서도 배틀 패스의 비슷한 개념이 있다.&lt;/p&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_1814.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUgUJN/btraSYrnhph/zGSIXL6Mo8hiIjo4qVQnfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUgUJN/btraSYrnhph/zGSIXL6Mo8hiIjo4qVQnfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUgUJN/btraSYrnhph/zGSIXL6Mo8hiIjo4qVQnfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUgUJN%2FbtraSYrnhph%2FzGSIXL6Mo8hiIjo4qVQnfk%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;1280&quot; height=&quot;720&quot; data-filename=&quot;IMG_1814.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나는 일반 배틀 패스, 또 하나는 배틀 패스 PLUS 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 가지 차이는 가격 외에는 배틀 패스 레벨을 10레벨 더 준다는 차이밖에 없으므로&lt;/p&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;b&gt;배틀패스는 4,900원 배틀패스 PLUS 는 9,900 원&lt;/b&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_1813.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6PyMq/btraVUvfl1P/LfbPXlUclZfTHUdiZUra4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6PyMq/btraVUvfl1P/LfbPXlUclZfTHUdiZUra4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6PyMq/btraVUvfl1P/LfbPXlUclZfTHUdiZUra4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6PyMq%2FbtraVUvfl1P%2FLfbPXlUclZfTHUdiZUra4k%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;1280&quot; height=&quot;720&quot; data-filename=&quot;IMG_1813.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_1812.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YIpWv/btraWS4ZYkX/BoFNn5vmr5mXG5NNvuDW30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YIpWv/btraWS4ZYkX/BoFNn5vmr5mXG5NNvuDW30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YIpWv/btraWS4ZYkX/BoFNn5vmr5mXG5NNvuDW30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYIpWv%2FbtraWS4ZYkX%2FBoFNn5vmr5mXG5NNvuDW30%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;1280&quot; height=&quot;720&quot; data-filename=&quot;IMG_1812.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&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;피카츄 모자, 피카츄 의상 그리고 마지막에 주는 에이스본의 홀로그램일 것 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_1810.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGBUjI/btraRxni6k0/0uQNONXnFze4bhYLb3nur0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGBUjI/btraRxni6k0/0uQNONXnFze4bhYLb3nur0/img.png&quot; data-alt=&quot;피카츄 모자&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGBUjI/btraRxni6k0/0uQNONXnFze4bhYLb3nur0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGBUjI%2FbtraRxni6k0%2F0uQNONXnFze4bhYLb3nur0%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;1280&quot; height=&quot;720&quot; data-filename=&quot;IMG_1810.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;피카츄 모자&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_1809.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dZORsC/btraVp3lUGw/wP1ThsSlw33q9S1K4nRGHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dZORsC/btraVp3lUGw/wP1ThsSlw33q9S1K4nRGHk/img.png&quot; data-alt=&quot;피카츄 의상&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dZORsC/btraVp3lUGw/wP1ThsSlw33q9S1K4nRGHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdZORsC%2FbtraVp3lUGw%2FwP1ThsSlw33q9S1K4nRGHk%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;1280&quot; height=&quot;720&quot; data-filename=&quot;IMG_1809.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;피카츄 의상&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_1808.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4zISw/btraVTXn02U/GXOTVcohcVHxxdwjYqTok1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4zISw/btraVTXn02U/GXOTVcohcVHxxdwjYqTok1/img.png&quot; data-alt=&quot;에이스번 홀로그램&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4zISw/btraVTXn02U/GXOTVcohcVHxxdwjYqTok1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4zISw%2FbtraVTXn02U%2FGXOTVcohcVHxxdwjYqTok1%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;1280&quot; height=&quot;720&quot; data-filename=&quot;IMG_1808.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;에이스번 홀로그램&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_1807.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2ByH8/btraNJWo1BA/HzzRucq0xkmisUKee0tpf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2ByH8/btraNJWo1BA/HzzRucq0xkmisUKee0tpf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2ByH8/btraNJWo1BA/HzzRucq0xkmisUKee0tpf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2ByH8%2FbtraNJWo1BA%2FHzzRucq0xkmisUKee0tpf1%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;1280&quot; height=&quot;720&quot; data-filename=&quot;IMG_1807.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&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;/p&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;b&gt;구입한 즉시 포켓몬 피카츄의 홀로그램을 하나줍니다!&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;br /&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;378&quot; data-origin-height=&quot;326&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFgFx8/btraSZqh0a2/PoqCyrR35VgrTYFrNBlSlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFgFx8/btraSZqh0a2/PoqCyrR35VgrTYFrNBlSlK/img.png&quot; data-alt=&quot;배틀패스 내 피카츄 스킨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFgFx8/btraSZqh0a2/PoqCyrR35VgrTYFrNBlSlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFgFx8%2FbtraSZqh0a2%2FPoqCyrR35VgrTYFrNBlSlK%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;378&quot; height=&quot;326&quot; data-origin-width=&quot;378&quot; data-origin-height=&quot;326&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;배틀패스 내 피카츄 스킨&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Game Diary</category>
      <category>배틀패스</category>
      <category>스위치</category>
      <category>포켓몬</category>
      <category>포켓몬 유나이트</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/30</guid>
      <comments>https://mojjisoft.tistory.com/30#entry30comment</comments>
      <pubDate>Fri, 30 Jul 2021 21:50:16 +0900</pubDate>
    </item>
    <item>
      <title>[ Dev Dairy ] 007-1. 포켓몬 이미지 크롤링 ( selenium )</title>
      <link>https://mojjisoft.tistory.com/29</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;174&quot; data-filename=&quot;모찌의개발일지.png&quot; width=&quot;695&quot; height=&quot;141&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lXIBx/btraGOck1B1/jvUbeSzjTnk6aOeIGWnt60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lXIBx/btraGOck1B1/jvUbeSzjTnk6aOeIGWnt60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lXIBx/btraGOck1B1/jvUbeSzjTnk6aOeIGWnt60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlXIBx%2FbtraGOck1B1%2FjvUbeSzjTnk6aOeIGWnt60%2Fimg.png&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;174&quot; data-filename=&quot;모찌의개발일지.png&quot; width=&quot;695&quot; height=&quot;141&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;396&quot; data-filename=&quot;개발이미지.png&quot; width=&quot;267&quot; height=&quot;284&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbDndy/btraKF7gW8a/raSpJMfDUgcOkEKr937E01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbDndy/btraKF7gW8a/raSpJMfDUgcOkEKr937E01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbDndy/btraKF7gW8a/raSpJMfDUgcOkEKr937E01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbDndy%2FbtraKF7gW8a%2FraSpJMfDUgcOkEKr937E01%2Fimg.png&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;396&quot; data-filename=&quot;개발이미지.png&quot; width=&quot;267&quot; height=&quot;284&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;/p&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;&lt;span style=&quot;color: #373a3c;&quot;&gt;크롤링(crawling) 혹은 스크레이핑(scraping)은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://namu.wiki/w/%EC%9B%B9%20%ED%8E%98%EC%9D%B4%EC%A7%80&quot;&gt;웹 페이지&lt;/a&gt;&lt;span style=&quot;color: #373a3c;&quot;&gt;를 그대로 가져와서 거기서 데이터를 추출해 내는 행위다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #373a3c;&quot;&gt;&lt;span&gt;소스는 python 으로 되어있고, 패키지는 &lt;span style=&quot;color: #4d5156;&quot;&gt;파이썬에서 웹 브라우저 상호작용을 자동화하는&lt;span&gt; selenium 을 사용했다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;크롬 버전 확인방법은 오른쪽상단에 세개의 점 아이콘을 클릭 후, 도움말에서 chrome정보 보기를 클릭하면 확인이 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1269&quot; data-origin-height=&quot;520&quot; data-filename=&quot;스크린샷 2021-07-30 오전 1.39.53.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zqmws/btraJzsIh43/JeXE6KE6FLnOUQeIWWwyxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zqmws/btraJzsIh43/JeXE6KE6FLnOUQeIWWwyxK/img.png&quot; data-alt=&quot;크롬버전 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zqmws/btraJzsIh43/JeXE6KE6FLnOUQeIWWwyxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzqmws%2FbtraJzsIh43%2FJeXE6KE6FLnOUQeIWWwyxK%2Fimg.png&quot; data-origin-width=&quot;1269&quot; data-origin-height=&quot;520&quot; data-filename=&quot;스크린샷 2021-07-30 오전 1.39.53.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;크롬버전 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크롬드라이버는 &lt;a href=&quot;https://chromedriver.chromium.org/downloads&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://chromedriver.chromium.org/downloads&lt;/a&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;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;from&lt;/span&gt;&amp;nbsp;selenium&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;import&lt;/span&gt;&amp;nbsp;webdriver&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;from&lt;/span&gt;&amp;nbsp;selenium.webdriver.common.keys&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;import&lt;/span&gt;&amp;nbsp;Keys&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;import&lt;/span&gt;&amp;nbsp;time&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;import&lt;/span&gt;&amp;nbsp;urllib.request&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;import&lt;/span&gt;&amp;nbsp;os&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;크롬&amp;nbsp;연결&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;driver&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;webdriver.Chrome(executable_path&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ffd500;&quot;&gt;'본인이&amp;nbsp;다운받은&amp;nbsp;/chromedriver'&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;driver.get(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;https://www.google.co.kr/imghp?hl=ko&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;find 에는 다운받을 포켓몬을 list 로 만든다.&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;가져올&amp;nbsp;포켓몬&amp;nbsp;정하기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;find&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[&lt;span style=&quot;color: #ffd500;&quot;&gt;'이상해꽃'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'리자몽'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'피카츄'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'알로라'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'나인테일'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'푸크린'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'괴력몬'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'야도란'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'팬텀'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'마임맨'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'잠만보'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'앱솔'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'한카리아스'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'루카리오'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'암팰리스'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'개굴닌자'&lt;/span&gt;,&lt;span style=&quot;color: #ffd500;&quot;&gt;'파이어로'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'에이스본'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'백솜모카'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'윽우지'&lt;/span&gt;]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;key&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;find:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;print(key)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;이미지&amp;nbsp;찾기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elem&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;driver.find_element_by_name(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;q&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;기존&amp;nbsp;입력값&amp;nbsp;초기화&amp;nbsp;함수&amp;nbsp;실행&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;clear_text(elem)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;find에&amp;nbsp;넣어논&amp;nbsp;포켓몬&amp;nbsp;리스트를&amp;nbsp;검색어로&amp;nbsp;넣는다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elem.send_keys(key)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;엔터키&amp;nbsp;입력&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elem.send_keys(Keys.RETURN)&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #4f4f4ftext-decoration:none;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0px; padding: 0px; border: none; background-color: #272727; border-radius: 4px; height: 95px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 95px;&quot;&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f; height: 95px; width: 9.03125px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0px; text-align: left; height: 95px; width: 509.109px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;def&lt;/span&gt;&amp;nbsp;clear_text(element):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;검색어&amp;nbsp;길이를&amp;nbsp;찾고,&amp;nbsp;그&amp;nbsp;길이만큼&amp;nbsp;백스페이스를&amp;nbsp;날려준다.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;length&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;len&lt;/span&gt;(element.get_attribute(&lt;span style=&quot;color: #ffd500;&quot;&gt;'value'&lt;/span&gt;))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;element.send_keys(length&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;*&lt;/span&gt;&amp;nbsp;Keys.BACKSPACE)&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0px 2px 4px 0px; height: 95px; width: 14.0469px;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;중간에 한번 for문을 돌고 나서, 기존의 검색어가 아직 남아있기 때문에&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 검색어를 지워주기 위해서 clear_text 함수를 만들었다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;이미지가&amp;nbsp;없을&amp;nbsp;때&amp;nbsp;까지&amp;nbsp;스크롤&amp;nbsp;끝까지&amp;nbsp;내려가는&amp;nbsp;법&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;스크롤&amp;nbsp;할때&amp;nbsp;잠깐&amp;nbsp;시간적&amp;nbsp;여유주기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SCROLL_PAUSE_TIME&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1.&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;Get&amp;nbsp;scroll&amp;nbsp;height&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;last_height&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;driver.execute_script(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;return&amp;nbsp;document.body.scrollHeight&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;while&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;True&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;Scroll&amp;nbsp;down&amp;nbsp;to&amp;nbsp;bottom&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;driver.execute_script(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;window.scrollTo(0,&amp;nbsp;document.body.scrollHeight);&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;Wait&amp;nbsp;to&amp;nbsp;load&amp;nbsp;page&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time.sleep(SCROLL_PAUSE_TIME)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;Calculate&amp;nbsp;new&amp;nbsp;scroll&amp;nbsp;height&amp;nbsp;and&amp;nbsp;compare&amp;nbsp;with&amp;nbsp;last&amp;nbsp;scroll&amp;nbsp;height&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new_height&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;driver.execute_script(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;return&amp;nbsp;document.body.scrollHeight&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;new_height&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;last_height:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;try&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#css&amp;nbsp;에서&amp;nbsp;다음페이지에&amp;nbsp;해당하는&amp;nbsp;id를&amp;nbsp;클릭해준다.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;driver.find_element_by_css_selector(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;.mye4qd&quot;&lt;/span&gt;).click()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;except&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;last_height&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;new_height&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;이미지가&amp;nbsp;없을&amp;nbsp;때&amp;nbsp;까지&amp;nbsp;스크롤&amp;nbsp;끝까지&amp;nbsp;내려가는&amp;nbsp;법&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;다운받는&amp;nbsp;부분&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;images&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;driver.find_elements_by_css_selector(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;.rg_i.Q4LuWd&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;image&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;images:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;가져올&amp;nbsp;갯수&amp;nbsp;정하기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;count&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;lt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;40&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;try&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;image.click()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time.sleep(&lt;span style=&quot;color: #c10aff;&quot;&gt;2&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imgURL&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;driver.find_element_by_xpath(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;/html/body/div[2]/c-wiz/div[3]/div[2]/div[3]/div/div/div[3]/div[2]/c-wiz/div/div[1]/div[1]/div[2]/div[1]/a/img&quot;&lt;/span&gt;).get_attribute(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;src&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;path&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;./images/&quot;&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;key&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;폴더가&amp;nbsp;없으면&amp;nbsp;생성하기&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;not&lt;/span&gt;&amp;nbsp;os.path.isdir(path):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;os.mkdir(path)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;생성한&amp;nbsp;폴더에&amp;nbsp;이미지&amp;nbsp;저장하기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;urllib.request.urlretrieve(imgURL,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;images/&quot;&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;key&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;key&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;str&lt;/span&gt;(count)&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;.jpg&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;count&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;except&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;pass&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;driver.&lt;span style=&quot;color: #4be6fa;&quot;&gt;close&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #4f4f4ftext-decoration:none;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;나머지 코드는 별거 없고,&lt;/p&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;그 폴더에 count 를 해서 파일이름으로 저장해준다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;383&quot; data-origin-height=&quot;626&quot; data-filename=&quot;스크린샷 2021-07-30 오전 1.47.56.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JUuGM/btraJzzprNY/cTNJYGUdn8GvWHSB27HK3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JUuGM/btraJzzprNY/cTNJYGUdn8GvWHSB27HK3k/img.png&quot; data-alt=&quot;폴더별로 저장된 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JUuGM/btraJzzprNY/cTNJYGUdn8GvWHSB27HK3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJUuGM%2FbtraJzzprNY%2FcTNJYGUdn8GvWHSB27HK3k%2Fimg.png&quot; data-origin-width=&quot;383&quot; data-origin-height=&quot;626&quot; data-filename=&quot;스크린샷 2021-07-30 오전 1.47.56.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;폴더별로 저장된 이미지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내일은 요 이미지들을 가지고 teachable machine 에 적용시켜 모델을 학습해볼거다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT Diary/# Dev Diary</category>
      <category>Crawling</category>
      <category>poketmon</category>
      <category>Python</category>
      <category>Selenium</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/29</guid>
      <comments>https://mojjisoft.tistory.com/29#entry29comment</comments>
      <pubDate>Fri, 30 Jul 2021 01:48:56 +0900</pubDate>
    </item>
    <item>
      <title>포켓몬 유나이트 지닌물건! 꿀팁!! 꼭 알고가기</title>
      <link>https://mojjisoft.tistory.com/28</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;지닌물건은 롤에 빗대어 설명하면 상점에서 사는 아이템이라고 보면 된다.&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;레벨에 따라서 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;아이템을 맞게 착용하는게 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지닌 물건은 로비에서 X 버튼을 누르고 아이템 박스에 가면 본인이 현재 가지고 있는 아이템을 볼 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;IMG_1801.PNG&quot; width=&quot;705&quot; height=&quot;397&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b11Jvk/btraJArvbs4/TkDQZ0id8MWjNmGYIm8SV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b11Jvk/btraJArvbs4/TkDQZ0id8MWjNmGYIm8SV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b11Jvk/btraJArvbs4/TkDQZ0id8MWjNmGYIm8SV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb11Jvk%2FbtraJArvbs4%2FTkDQZ0id8MWjNmGYIm8SV0%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;IMG_1801.PNG&quot; width=&quot;705&quot; height=&quot;397&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 아이템을 클릭하고 지니게 하기를 눌러서 들어가면 현재 포켓몬이 착용한 아이템과 효과를 볼 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;IMG_1800.PNG&quot; width=&quot;641&quot; height=&quot;361&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/07mV2/btraJArvdVU/m7rNbEeeuFCJL6vEWth4tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/07mV2/btraJArvdVU/m7rNbEeeuFCJL6vEWth4tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/07mV2/btraJArvdVU/m7rNbEeeuFCJL6vEWth4tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F07mV2%2FbtraJArvdVU%2Fm7rNbEeeuFCJL6vEWth4tk%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;IMG_1800.PNG&quot; width=&quot;641&quot; height=&quot;361&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;/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-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;IMG_1798.PNG&quot; width=&quot;688&quot; height=&quot;387&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TGzpE/btraGP93V2Q/BvbnnffKCyyxDiNwumgMk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TGzpE/btraGP93V2Q/BvbnnffKCyyxDiNwumgMk1/img.png&quot; data-alt=&quot;지닌물건&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TGzpE/btraGP93V2Q/BvbnnffKCyyxDiNwumgMk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTGzpE%2FbtraGP93V2Q%2FBvbnnffKCyyxDiNwumgMk1%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;IMG_1798.PNG&quot; width=&quot;688&quot; height=&quot;387&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;지닌물건&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 이 특수공격은 스킬을 말하는게 아니라&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;417&quot; data-origin-height=&quot;619&quot; data-filename=&quot;특공_공격.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7aEhD/btraQadNhug/M28PPk6t2k9vTjf4F05eEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7aEhD/btraQadNhug/M28PPk6t2k9vTjf4F05eEK/img.png&quot; data-alt=&quot;특수공격 공격 구분&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7aEhD/btraQadNhug/M28PPk6t2k9vTjf4F05eEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7aEhD%2FbtraQadNhug%2FM28PPk6t2k9vTjf4F05eEK%2Fimg.png&quot; data-origin-width=&quot;417&quot; data-origin-height=&quot;619&quot; data-filename=&quot;특공_공격.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;특수공격 공격 구분&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 본인이 주로 하는 포켓몬 위주로 아이템을 구입하고&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 alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;IMG_1796.PNG&quot; width=&quot;624&quot; height=&quot;351&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RlzIr/btraHYeDUrp/RwwErX6Vk5CoZsagguRA8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RlzIr/btraHYeDUrp/RwwErX6Vk5CoZsagguRA8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RlzIr/btraHYeDUrp/RwwErX6Vk5CoZsagguRA8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRlzIr%2FbtraHYeDUrp%2FRwwErX6Vk5CoZsagguRA8K%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;IMG_1796.PNG&quot; width=&quot;624&quot; height=&quot;351&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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 alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;IMG_1797.PNG&quot; width=&quot;609&quot; height=&quot;343&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9qqAq/btraHZq4h1D/5DLAwwKZ32uSJzgxslbZSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9qqAq/btraHZq4h1D/5DLAwwKZ32uSJzgxslbZSK/img.png&quot; data-alt=&quot;업그레이드는 필수!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9qqAq/btraHZq4h1D/5DLAwwKZ32uSJzgxslbZSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9qqAq%2FbtraHZq4h1D%2F5DLAwwKZ32uSJzgxslbZSK%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;IMG_1797.PNG&quot; width=&quot;609&quot; height=&quot;343&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;업그레이드는 필수!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지닌 물건을 업그레이드 하고 안하고는 차이가 많이 나기 때문에&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;지닌 물건에 들어가서 보면 Y 버튼을 누르면 추천세트를 볼 수 있는데&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;p data-ke-size=&quot;size16&quot;&gt;이런것들을 꼭! 챙겨가면서 게임합시다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;포켓몬_추천.jpeg&quot; width=&quot;700&quot; height=&quot;394&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SDZni/btraPuKmQS6/Qd8JvHVhCV1Lzw9KYSiTE0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SDZni/btraPuKmQS6/Qd8JvHVhCV1Lzw9KYSiTE0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SDZni/btraPuKmQS6/Qd8JvHVhCV1Lzw9KYSiTE0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSDZni%2FbtraPuKmQS6%2FQd8JvHVhCV1Lzw9KYSiTE0%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;포켓몬_추천.jpeg&quot; width=&quot;700&quot; height=&quot;394&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;그럼 오늘도 즐겁게 포켓몬 유나이트 Go!!!&lt;/p&gt;</description>
      <category>Game Diary</category>
      <category>poketmon</category>
      <category>switch</category>
      <category>스위치</category>
      <category>지닌물건</category>
      <category>포켓몬</category>
      <category>포켓몬 유나이트</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/28</guid>
      <comments>https://mojjisoft.tistory.com/28#entry28comment</comments>
      <pubDate>Thu, 29 Jul 2021 21:44:07 +0900</pubDate>
    </item>
    <item>
      <title>포켓몬 유나이트 신규 포켓몬! 가디안!</title>
      <link>https://mojjisoft.tistory.com/27</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;오늘 7월 28일 신규 포켓몬인 가디안이 추가되었다!&lt;/p&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;a href=&quot;https://www.youtube.com/watch?v=jYpEkJ7h5Ic&quot;&gt;https://www.youtube.com/watch?v=jYpEkJ7h5Ic&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=jYpEkJ7h5Ic&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bKTdCB/hyK2NgmFJB/pIoxTba7kki1wflVee8E10/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/jYpEkJ7h5Ic&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;능력치는 전투에 초점을 둔 딜캐릭터&lt;/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-origin-width=&quot;513&quot; data-origin-height=&quot;290&quot; data-filename=&quot;스크린샷 2021-07-29 오전 12.11.35.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qFufw/btraNySYrrB/aXTUNWE5swFZXR7R8GB3Fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qFufw/btraNySYrrB/aXTUNWE5swFZXR7R8GB3Fk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qFufw/btraNySYrrB/aXTUNWE5swFZXR7R8GB3Fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqFufw%2FbtraNySYrrB%2FaXTUNWE5swFZXR7R8GB3Fk%2Fimg.png&quot; data-origin-width=&quot;513&quot; data-origin-height=&quot;290&quot; data-filename=&quot;스크린샷 2021-07-29 오전 12.11.35.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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; 같이 출시되었다.&amp;nbsp; &amp;nbsp;&quot;꽃단장 스타일 가디안&quot;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;293&quot; data-filename=&quot;스크린샷 2021-07-29 오전 12.12.11.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/U8elJ/btraGGrEQET/3wxjWG3uTmlhvItcp4HNFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U8elJ/btraGGrEQET/3wxjWG3uTmlhvItcp4HNFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U8elJ/btraGGrEQET/3wxjWG3uTmlhvItcp4HNFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU8elJ%2FbtraGGrEQET%2F3wxjWG3uTmlhvItcp4HNFK%2Fimg.png&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;293&quot; data-filename=&quot;스크린샷 2021-07-29 오전 12.12.11.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;522&quot; data-origin-height=&quot;293&quot; data-filename=&quot;스크린샷 2021-07-29 오전 12.15.34.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbKeqb/btraCkbldq9/u4BGWI1UG3kZUslzJqqRDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbKeqb/btraCkbldq9/u4BGWI1UG3kZUslzJqqRDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbKeqb/btraCkbldq9/u4BGWI1UG3kZUslzJqqRDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbKeqb%2FbtraCkbldq9%2Fu4BGWI1UG3kZUslzJqqRDk%2Fimg.png&quot; data-origin-width=&quot;522&quot; data-origin-height=&quot;293&quot; data-filename=&quot;스크린샷 2021-07-29 오전 12.15.34.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;296&quot; data-filename=&quot;스크린샷 2021-07-29 오전 12.16.10.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2BVP5/btraGGeaJuu/3BOREf9eLVtKAAkKI0nM7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2BVP5/btraGGeaJuu/3BOREf9eLVtKAAkKI0nM7k/img.png&quot; data-alt=&quot;레벨 6 스킬&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2BVP5/btraGGeaJuu/3BOREf9eLVtKAAkKI0nM7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2BVP5%2FbtraGGeaJuu%2F3BOREf9eLVtKAAkKI0nM7k%2Fimg.png&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;296&quot; data-filename=&quot;스크린샷 2021-07-29 오전 12.16.10.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;레벨 6 스킬&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;292&quot; data-filename=&quot;스크린샷 2021-07-29 오전 12.16.15.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lr8gY/btraDAZi0qa/Sg69bxt7Drx5CHAzwWAOjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lr8gY/btraDAZi0qa/Sg69bxt7Drx5CHAzwWAOjk/img.png&quot; data-alt=&quot;레벨 8 스킬&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lr8gY/btraDAZi0qa/Sg69bxt7Drx5CHAzwWAOjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLr8gY%2FbtraDAZi0qa%2FSg69bxt7Drx5CHAzwWAOjk%2Fimg.png&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;292&quot; data-filename=&quot;스크린샷 2021-07-29 오전 12.16.15.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;레벨 8 스킬&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 상대해보니 생각보다 딜이 범위 공격인데다가 아프다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 딜 3대장 피카츄/에이스번/나인테일을 위협하는 수준!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 아직까지는 나는 나인테일이나 에이스번에 손이 더 가는것 같다.&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;</description>
      <category>Game Diary</category>
      <category>AOS</category>
      <category>Pokemon</category>
      <category>switch</category>
      <category>가디안</category>
      <category>포켓몬</category>
      <category>포켓몬 유나이트</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/27</guid>
      <comments>https://mojjisoft.tistory.com/27#entry27comment</comments>
      <pubDate>Thu, 29 Jul 2021 00:17:00 +0900</pubDate>
    </item>
    <item>
      <title>[ Dev Dairy ] 006. 연관어 네트웍크 분석 Networkx 사용해보기</title>
      <link>https://mojjisoft.tistory.com/26</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;174&quot; data-filename=&quot;모찌의개발일지.png&quot; width=&quot;690&quot; height=&quot;140&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z4Wa9/btraFFGdIeB/KSWYVS6kyn1kLorKJ7WdI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z4Wa9/btraFFGdIeB/KSWYVS6kyn1kLorKJ7WdI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z4Wa9/btraFFGdIeB/KSWYVS6kyn1kLorKJ7WdI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ4Wa9%2FbtraFFGdIeB%2FKSWYVS6kyn1kLorKJ7WdI1%2Fimg.png&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;174&quot; data-filename=&quot;모찌의개발일지.png&quot; width=&quot;690&quot; height=&quot;140&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;396&quot; data-filename=&quot;개발이미지.png&quot; width=&quot;307&quot; height=&quot;327&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/O8npk/btraEeIUWVL/78evtBwloEoZSN9fWKfis0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/O8npk/btraEeIUWVL/78evtBwloEoZSN9fWKfis0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O8npk/btraEeIUWVL/78evtBwloEoZSN9fWKfis0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FO8npk%2FbtraEeIUWVL%2F78evtBwloEoZSN9fWKfis0%2Fimg.png&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;396&quot; data-filename=&quot;개발이미지.png&quot; width=&quot;307&quot; height=&quot;327&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;어제 공부했던 textrank 로 했을 때, 결과값이 만족스럽지 않아서 다른걸 찾아보기로 했다.&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;예를 들면 내가 원하는거는 &quot;성과 창출&quot; 인데 실제로 textrank 를 돌려서 나온값은 &quot;성과&quot; &quot;창출&quot;&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;그래서 다른 좋은게 있는지 찾아보던중 , NetworkX 를 발견했다.&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;NetworkX는 네트워크분석을 기본으로 하고 있고&lt;/p&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: #1a1a1a;&quot;&gt;네트워크 분석은 개인과 집단들 간의 관계를 노드(Node)와 링크(Link)로써 모형화하여, 그것의 구조나, 확산 및 진화과정을 계량적으로 분석하는 방법이다. 개체 자체의 속성에 중점을 둔 기존의 통계적인 연구방법과는 달리, 개체간의 상호 관계에 초점을 맞춘 방법이다. 네트워크 분석은 화학, 생물, 물리, 정보공학, 사회학, 인문학 등 다양한 분야에서 응용되고 있는 용어만 조금씩 다를 뿐 기본 원리는 그래프 이론에서 출발 했다고 할 수 있다. 소셜 네트워크 분석(SNA, Social Network Analysis) 역시 적용하는 대상과 용어만 다를 뿐 기본적인 분석 방법은 동일하다.&lt;br /&gt;(참조 : https://kdata.or.kr/info/info_04_view.html?field=&amp;amp;keyword=&amp;amp;type=techreport&amp;amp;page=1&amp;amp;dbnum=192961&amp;amp;mode=detail&amp;amp;type=techreport)&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;a href=&quot;https://networkx.org/documentation/stable/tutorial.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://networkx.org/documentation/stable/tutorial.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1627459922010&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;Tutorial &amp;mdash; NetworkX 2.6.2 documentation&quot; data-og-description=&quot;This guide can help you start working with NetworkX. Nodes The graph G can be grown in several ways. NetworkX includes many graph generator functions and facilities to read and write graphs in many formats. To get started though we&amp;rsquo;ll look at simple mani&quot; data-og-host=&quot;networkx.org&quot; data-og-source-url=&quot;https://networkx.org/documentation/stable/tutorial.html&quot; data-og-url=&quot;https://networkx.org/documentation/stable/tutorial.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jXTFZ/hyK2xRFHip/01Fz7egLUqAX4gKkWJkbJ0/img.png?width=512&amp;amp;height=384&amp;amp;face=0_0_512_384,https://scrap.kakaocdn.net/dn/bgXJ7t/hyK2ybYJeN/6nMwHhoU4RIyD5yzYACgfK/img.png?width=512&amp;amp;height=384&amp;amp;face=0_0_512_384,https://scrap.kakaocdn.net/dn/ihIQ6/hyK2DYFjef/cU98CIWdX0BYxyYJ0JmCF1/img.png?width=512&amp;amp;height=384&amp;amp;face=0_0_512_384&quot;&gt;&lt;a href=&quot;https://networkx.org/documentation/stable/tutorial.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://networkx.org/documentation/stable/tutorial.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jXTFZ/hyK2xRFHip/01Fz7egLUqAX4gKkWJkbJ0/img.png?width=512&amp;amp;height=384&amp;amp;face=0_0_512_384,https://scrap.kakaocdn.net/dn/bgXJ7t/hyK2ybYJeN/6nMwHhoU4RIyD5yzYACgfK/img.png?width=512&amp;amp;height=384&amp;amp;face=0_0_512_384,https://scrap.kakaocdn.net/dn/ihIQ6/hyK2DYFjef/cU98CIWdX0BYxyYJ0JmCF1/img.png?width=512&amp;amp;height=384&amp;amp;face=0_0_512_384');&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;Tutorial &amp;mdash; NetworkX 2.6.2 documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;This guide can help you start working with NetworkX. Nodes The graph G can be grown in several ways. NetworkX includes many graph generator functions and facilities to read and write graphs in many formats. To get started though we&amp;rsquo;ll look at simple mani&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;networkx.org&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 data-ke-size=&quot;size16&quot;&gt;각 기사 혹은 책 제목을 읽어와서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가져온 List 에서 가장 많은 연관성이 있는 단어 묶음들을 찾고싶었다.&lt;/p&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;이거는 뭐.. 그냥 단순이 책이나 기사 제목을 크롤링해와서 test.txt 에 담았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 lines를 만들어 주고 &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;words_list 를 만들고 거기에 lines를 넣어줬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 words_list로 모델을 학습하기 전에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불용어( 실제로 그 모델에서 제외할 단어들 ) 을 stopwords.txt 에 미리 넣어놓고&lt;/p&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;혹시.. enumerate 내장함수를 모르면 아래 사이트에 잘 설명이 되어있다.&lt;/p&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://www.daleseo.com/python-enumerate/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.daleseo.com/python-enumerate/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1627460736281&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;[파이썬] enumerate 내장 함수로 for 루프 돌리기&quot; data-og-description=&quot;Engineering Blog by Dale Seo&quot; data-og-host=&quot;www.daleseo.com&quot; data-og-source-url=&quot;https://www.daleseo.com/python-enumerate/&quot; data-og-url=&quot;https://www.daleseo.com/python-enumerate/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.daleseo.com/python-enumerate/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.daleseo.com/python-enumerate/&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;[파이썬] enumerate 내장 함수로 for 루프 돌리기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Engineering Blog by Dale Seo&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.daleseo.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;이제 이중으로 Loop를 돌리면서 단어의 연관성을 찾으면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for 문을 자세히 보면 아래와 같이 돌아가는걸 알 수 있다.&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-origin-width=&quot;295&quot; data-origin-height=&quot;26&quot; data-filename=&quot;스크린샷 2021-07-28 오후 5.32.41.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NJ0Jx/btraGOJk8P7/qkLwVPkUMy6UVpJbzzHIak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NJ0Jx/btraGOJk8P7/qkLwVPkUMy6UVpJbzzHIak/img.png&quot; data-alt=&quot;샘플.txt&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NJ0Jx/btraGOJk8P7/qkLwVPkUMy6UVpJbzzHIak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNJ0Jx%2FbtraGOJk8P7%2FqkLwVPkUMy6UVpJbzzHIak%2Fimg.png&quot; data-origin-width=&quot;295&quot; data-origin-height=&quot;26&quot; data-filename=&quot;스크린샷 2021-07-28 오후 5.32.41.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;샘플.txt&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;155&quot; data-filename=&quot;스크린샷 2021-07-28 오후 5.32.55.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvl3KY/btraCiEpo7n/wiDNaUm1cLnR2vdkrFt3uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvl3KY/btraCiEpo7n/wiDNaUm1cLnR2vdkrFt3uk/img.png&quot; data-alt=&quot;for문 출력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvl3KY/btraCiEpo7n/wiDNaUm1cLnR2vdkrFt3uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbvl3KY%2FbtraCiEpo7n%2FwiDNaUm1cLnR2vdkrFt3uk%2Fimg.png&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;155&quot; data-filename=&quot;스크린샷 2021-07-28 오후 5.32.55.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;for문 출력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이제 이걸 이중 for 문 안에서 비교하면서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;count 에 넣어주게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다 만들고 나서 Dataframe 에 넣고&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;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;284&quot; data-origin-height=&quot;238&quot; data-filename=&quot;스크린샷 2021-07-28 오후 5.36.03.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LlTUV/btraBuSFDn5/yvp4MvFIIon3i2L5FYreH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LlTUV/btraBuSFDn5/yvp4MvFIIon3i2L5FYreH0/img.png&quot; data-alt=&quot;최종 결과값&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LlTUV/btraBuSFDn5/yvp4MvFIIon3i2L5FYreH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLlTUV%2FbtraBuSFDn5%2Fyvp4MvFIIon3i2L5FYreH0%2Fimg.png&quot; data-origin-width=&quot;284&quot; data-origin-height=&quot;238&quot; data-filename=&quot;스크린샷 2021-07-28 오후 5.36.03.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;최종 결과값&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;import&lt;/span&gt;&amp;nbsp;pandas&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;as&lt;/span&gt;&amp;nbsp;pd&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;f&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;open&lt;/span&gt;(&lt;span style=&quot;color: #ffd500;&quot;&gt;'test.txt'&lt;/span&gt;,&amp;nbsp;encoding&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ffd500;&quot;&gt;'UTF8'&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;lines&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;f.readlines()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;len(lines)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;print(len(lines))&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;lines&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;words_list&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;[]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;text&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;lines:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;words_list.append(text.strip())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;print&lt;/span&gt;(words_list[&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;])&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;불용어처리&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;stopwords&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;[]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;f&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;open&lt;/span&gt;(&lt;span style=&quot;color: #ffd500;&quot;&gt;'stopwords.txt'&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;lines&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;f.readlines()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;line&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;lines:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;line&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;line.strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stopwords.append(line)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;f.&lt;span style=&quot;color: #4be6fa;&quot;&gt;close&lt;/span&gt;()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;불용어&amp;nbsp;list&amp;nbsp;만들어&amp;nbsp;줌&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #ffd500;&quot;&gt;'불용어&amp;nbsp;사전&amp;nbsp;출력'&lt;/span&gt;&amp;nbsp;,stopwords)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;background-color: #272727; color: #f0f0f0;&quot;&gt;#{}이거는 dictionary 기호이다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;count&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt; {}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;line&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;words_list:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;words&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;list(set(line.split()))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;print(words)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i,a&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;enumerate(words):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;b&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;words[i&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;:]:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;b&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;not&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;stopwords:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;a&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;b:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count[b,a]&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;count.get((b,a),&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count[a,b]&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;count.get((a,&amp;nbsp;b),&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;print(count)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;count.get((&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;a&quot;&lt;/span&gt;,&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;b&quot;&lt;/span&gt;),&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;print(count)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;df&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;pd.DataFrame.from_dict(count,&amp;nbsp;orient&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ffd500;&quot;&gt;'index'&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;df.head&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;print(df.head)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;list1&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;[]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #4be6fa;&quot;&gt;len&lt;/span&gt;(df)):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list1.append([df.index[i][&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;],&amp;nbsp;df.index[i][&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;],&amp;nbsp;df[&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;][i]])&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;df2&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pd.DataFrame(list1,&amp;nbsp;columns&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;[&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;word1&quot;&lt;/span&gt;,&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;word2&quot;&lt;/span&gt;,&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;freq&quot;&lt;/span&gt;])&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;print(df2)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;df3&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;df2.sort_values(by&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;[&lt;span style=&quot;color: #ffd500;&quot;&gt;'freq'&lt;/span&gt;],ascending&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;False&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;df3.head(&lt;span style=&quot;color: #c10aff;&quot;&gt;10&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;print&lt;/span&gt;(df3.head(&lt;span style=&quot;color: #c10aff;&quot;&gt;10&lt;/span&gt;))&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #4f4f4ftext-decoration:none;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;a href=&quot;http://gahwan.com/python-%EC%97%B0%EA%B4%80%EC%96%B4-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EB%B6%84%EC%84%9D-with-networkx-package/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://gahwan.com/python-%EC%97%B0%EA%B4%80%EC%96%B4-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EB%B6%84%EC%84%9D-with-networkx-package/&lt;/a&gt;&lt;/p&gt;</description>
      <category>IT Diary/# Dev Diary</category>
      <category>Networkx</category>
      <category>pandas</category>
      <category>Python</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/26</guid>
      <comments>https://mojjisoft.tistory.com/26#entry26comment</comments>
      <pubDate>Wed, 28 Jul 2021 18:37:47 +0900</pubDate>
    </item>
    <item>
      <title>[ Dev Dairy ] 005. krwordrank 사용해보기</title>
      <link>https://mojjisoft.tistory.com/25</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;174&quot; data-filename=&quot;모찌의개발일지.png&quot; width=&quot;700&quot; height=&quot;142&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eodXZz/btraGbjYPkN/yXeOQbTzpOCJ7Jc5GXnUJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eodXZz/btraGbjYPkN/yXeOQbTzpOCJ7Jc5GXnUJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eodXZz/btraGbjYPkN/yXeOQbTzpOCJ7Jc5GXnUJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeodXZz%2FbtraGbjYPkN%2FyXeOQbTzpOCJ7Jc5GXnUJ0%2Fimg.png&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;174&quot; data-filename=&quot;모찌의개발일지.png&quot; width=&quot;700&quot; height=&quot;142&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;396&quot; data-filename=&quot;개발이미지.png&quot; width=&quot;287&quot; height=&quot;306&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czrbE2/btraJnRtfdh/7zhrumynGMkXgiO9cfchek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czrbE2/btraJnRtfdh/7zhrumynGMkXgiO9cfchek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czrbE2/btraJnRtfdh/7zhrumynGMkXgiO9cfchek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczrbE2%2FbtraJnRtfdh%2F7zhrumynGMkXgiO9cfchek%2Fimg.png&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;396&quot; data-filename=&quot;개발이미지.png&quot; width=&quot;287&quot; height=&quot;306&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;/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;p data-ke-size=&quot;size16&quot;&gt;암튼, 그 긍/부정도에 대해서는 못하게되어 다른 아이디어를 찾고있던 중 ..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;발견하게 된거는 krwordrank 이다. text에서 핵심 문장/단어를 추출하는 알고리즘이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WordRank 알고리즘은 구글의 PageRank 나 HITS 같은 Graph Ranking을 자연어처리에 적용한 알고리즘 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이거를 한국어의 어절 개념을 적용한게 KR-WordRank 라고 보면된다.&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;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;from&lt;/span&gt;&amp;nbsp;krwordrank.word&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;import&lt;/span&gt;&amp;nbsp;KRWordRank&lt;/div&gt;
&lt;div style=&quot;background-color: #303030; padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;from&lt;/span&gt;&amp;nbsp;krwordrank.hangle&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;import&lt;/span&gt;&amp;nbsp;normalize&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #303030; padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;min_count&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;단어의&amp;nbsp;최소&amp;nbsp;출현&amp;nbsp;빈도수&amp;nbsp;(그래프&amp;nbsp;생성&amp;nbsp;시)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;max_length&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;10&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;단어의&amp;nbsp;최대&amp;nbsp;길이&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: #303030; padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;verbose&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;True&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;wordrank_extractor&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;KRWordRank(min_count,&amp;nbsp;max_length&amp;nbsp;,&amp;nbsp;verbose)&lt;/div&gt;
&lt;div style=&quot;background-color: #303030; padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;beta&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0.&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;85&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;PageRank의&amp;nbsp;decaying&amp;nbsp;factor&amp;nbsp;beta&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: #303030; padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;max_iter&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;10&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #303030; padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;with&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;open&lt;/span&gt;(&lt;span style=&quot;color: #ffd500;&quot;&gt;'test.txt'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'r'&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;as&lt;/span&gt;&amp;nbsp;f:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;texts&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[]&lt;/div&gt;
&lt;div style=&quot;background-color: #303030; padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;line&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;f:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;texts.append(line)&lt;/div&gt;
&lt;div style=&quot;background-color: #303030; padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;texts&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[normalize(text,english&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;False&lt;/span&gt;&amp;nbsp;,&amp;nbsp;number&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;True&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;text&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;texts&amp;nbsp;]&lt;/div&gt;
&lt;div style=&quot;background-color: #303030; padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;keywords,&amp;nbsp;rank,&amp;nbsp;graph&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;wordrank_extractor.extract(texts,&amp;nbsp;beta,&amp;nbsp;max_iter)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #303030; padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;word,&amp;nbsp;r&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;sorted(keywords.items(),&amp;nbsp;key&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;lambda&amp;nbsp;x:x[&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;],&amp;nbsp;reverse&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;True&lt;/span&gt;)[:&lt;span style=&quot;color: #c10aff;&quot;&gt;30&lt;/span&gt;]:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #ffd500;&quot;&gt;'%8s:\t%.4f'&lt;/span&gt;&amp;nbsp;%&amp;nbsp;(word,&amp;nbsp;r))&lt;/div&gt;
&lt;div style=&quot;background-color: #303030; padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;from&lt;/span&gt;&amp;nbsp;krwordrank.word&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;import&lt;/span&gt;&amp;nbsp;summarize_with_keywords&lt;/div&gt;
&lt;div style=&quot;background-color: #303030; padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;stopwords&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;{&lt;span style=&quot;color: #ffd500;&quot;&gt;'제거'&lt;/span&gt;,&lt;span style=&quot;color: #ffd500;&quot;&gt;'할'&lt;/span&gt;,&lt;span style=&quot;color: #ffd500;&quot;&gt;'단어'&lt;/span&gt;}&lt;/div&gt;
&lt;div style=&quot;background-color: #303030; padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;keywords&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;summarize_with_keywords(texts,&amp;nbsp;min_count&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;5&lt;/span&gt;,&amp;nbsp;max_length&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;10&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;beta&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;0.&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;85&lt;/span&gt;,&amp;nbsp;max_iter&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;10&lt;/span&gt;,&amp;nbsp;stopwords&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;stopwords,&amp;nbsp;verbose&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;True&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;background-color: #303030; padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;keywords&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;summarize_with_keywords(texts)&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;with&amp;nbsp;default&amp;nbsp;arguments&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;print&lt;/span&gt;(keywords)&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #4f4f4ftext-decoration:none;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;일단 분석할 샘플이 필요하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 부분에서 한줄씩 읽어서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 texts 라는 list에 담아줬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이후에 summeraize_with_sentences 라는 핵심문장을 추출하는 기능을 가지고 있는 부분을 적용시켜주면&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;도중에 빼고싶은 단어가 있다면 stopwoards 에 넣어주면 된다.&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 alignCenter&quot; data-origin-width=&quot;239&quot; data-origin-height=&quot;219&quot; data-filename=&quot;스크린샷 2021-07-28 오전 12.31.26.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvAFNA/btrasT6e0DB/2K9g2F7B0uNr36q8PUAgy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvAFNA/btrasT6e0DB/2K9g2F7B0uNr36q8PUAgy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvAFNA/btrasT6e0DB/2K9g2F7B0uNr36q8PUAgy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvAFNA%2FbtrasT6e0DB%2F2K9g2F7B0uNr36q8PUAgy0%2Fimg.png&quot; data-origin-width=&quot;239&quot; data-origin-height=&quot;219&quot; data-filename=&quot;스크린샷 2021-07-28 오전 12.31.26.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 이걸통해서 어떤식으로 보여줘야할지가 관건인 것 같다.&lt;/p&gt;</description>
      <category>IT Diary/# Dev Diary</category>
      <category>krwordrank</category>
      <category>nlp</category>
      <category>notoken</category>
      <category>Python</category>
      <category>wordrank</category>
      <category>자연어처리</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/25</guid>
      <comments>https://mojjisoft.tistory.com/25#entry25comment</comments>
      <pubDate>Wed, 28 Jul 2021 00:32:45 +0900</pubDate>
    </item>
    <item>
      <title>포켓몬 유나이트 현재 티어 순위!</title>
      <link>https://mojjisoft.tistory.com/24</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;포켓몬을 좋아하는 사람이라면 추천!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;롤과 같은 AOS 장르는 좋아하는데 롤은 너무 어렵고, 국산 게임인 이터널 리턴과 같은 장르는 너무 복잡할때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무 생각없이 하기 좋은 쉬운 AOS 장르인거 같다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;450&quot; data-filename=&quot;pokemon.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIhaAS/btraEgro4gy/i6DtIf6NoEXq5U9PDiPy70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIhaAS/btraEgro4gy/i6DtIf6NoEXq5U9PDiPy70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIhaAS/btraEgro4gy/i6DtIf6NoEXq5U9PDiPy70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIhaAS%2FbtraEgro4gy%2Fi6DtIf6NoEXq5U9PDiPy70%2Fimg.png&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;450&quot; data-filename=&quot;pokemon.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;color: #000000;&quot;&gt;최초 출시일: 2021년 7월&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시리즈: 포켓몬스터&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;출시: 닌텐도, 포켓몬, The Pok&amp;eacute;mon Company&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;장르: 멀티플레이어 온라인 배틀 아레나, 대전 격투 게임, 실시간 전략 게임, 액션 롤플레잉 게임&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개발: TiMi Studio Group, 포켓몬&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;플랫폼: 안드로이드, 닌텐도 스위치, iOS&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 티어 순위&lt;/span&gt;&lt;/h3&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-origin-width=&quot;900&quot; data-origin-height=&quot;754&quot; data-filename=&quot;tear.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6uHAQ/btraEfMMPsT/jTPLmVVEk1k3sf3igUkemk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6uHAQ/btraEfMMPsT/jTPLmVVEk1k3sf3igUkemk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6uHAQ/btraEfMMPsT/jTPLmVVEk1k3sf3igUkemk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6uHAQ%2FbtraEfMMPsT%2FjTPLmVVEk1k3sf3igUkemk%2Fimg.jpg&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;754&quot; data-filename=&quot;tear.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 해봤을 때는 괴력몬도 S급 티어를 받아야 하지 않을까.. 원딜을 하는 입장에서 괴력몬 만나면.. 답이 없다 ㅠㅠ&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;617&quot; data-filename=&quot;스크린샷 2021-07-27 오전 1.01.40.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGiFXc/btraps8mKOe/bs2hEvbHYxxMRnAKYkveJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGiFXc/btraps8mKOe/bs2hEvbHYxxMRnAKYkveJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGiFXc/btraps8mKOe/bs2hEvbHYxxMRnAKYkveJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGiFXc%2Fbtraps8mKOe%2Fbs2hEvbHYxxMRnAKYkveJ1%2Fimg.png&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;617&quot; data-filename=&quot;스크린샷 2021-07-27 오전 1.01.40.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 판 하는시간도 10분밖에 안걸리고&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;h3 data-ke-size=&quot;size23&quot;&gt;깨알 Tips&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;게임 2~3연패시 유저 이름을 복사한 봇(A.I)하고 매칭을 시켜준다고 한다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;A.I 같은 경우, 움직임이나 스킬샷을 보고 판단이 가능하지만 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;상대팀이 봇 인지 확인 하는 방법은 아래와 같다!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;게임 시작시 한글 닉네임 9명과 매칭된다. 또는 일본 닉네임 9명과 매칭된다&lt;/li&gt;
&lt;li&gt;도구는 전부 회복약을 들고있다&lt;/li&gt;
&lt;li&gt;로딩 게이지가 즉시 차고 상대 포켓몬 아이콘을 누르면 &lt;br /&gt;트레이너 모습을 확인할수 있는데 머리 위가 조금 잘린 근접 샷에 기본 복장이다.&lt;/li&gt;
&lt;li&gt;300점 차이가 나면 5분후 서렌 ( 진짜 이게임에서는 서렌을 보기 힘들다....)&lt;/li&gt;
&lt;li&gt;마지막으로 경기 끝나고 결과창에 상대 아이디를 누르면&lt;/li&gt;
&lt;li&gt;&amp;nbsp;친추,칭찬 등 메뉴가 떠야하는데 5명 전부 아무것도 뜨질 않는다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Game Diary</category>
      <category>AOS</category>
      <category>Game</category>
      <category>Pokemon</category>
      <category>pokemon unite</category>
      <category>switch</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/24</guid>
      <comments>https://mojjisoft.tistory.com/24#entry24comment</comments>
      <pubDate>Tue, 27 Jul 2021 01:05:35 +0900</pubDate>
    </item>
    <item>
      <title>[ Vue ] 001. Vue의 정의</title>
      <link>https://mojjisoft.tistory.com/23</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;300&quot; data-filename=&quot;vue.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/56Oqs/btrastTRETq/924Ye6bG1onffoL5zzaHA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/56Oqs/btrastTRETq/924Ye6bG1onffoL5zzaHA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/56Oqs/btrastTRETq/924Ye6bG1onffoL5zzaHA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F56Oqs%2FbtrastTRETq%2F924Ye6bG1onffoL5zzaHA0%2Fimg.png&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;300&quot; data-filename=&quot;vue.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&quot;_1&quot; data-ke-size=&quot;size26&quot;&gt;소개&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Evan You가 만들었으며, 2014년 릴리즈를 시작으로 꾸준히 발전하고 있는 자바스크립트 프레임워크입니다.&lt;br /&gt;컨트롤러 대신 뷰 모델을 가지는&amp;nbsp;MVVM(Model-View-ViewModel) 패턴을 기반으로 디자인되었으며,&lt;br /&gt;재사용이 가능한 UI들을 묶어서 사용할 수 있습니다.&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-origin-width=&quot;1600&quot; data-origin-height=&quot;850&quot; data-filename=&quot;view-model.png&quot; width=&quot;629&quot; height=&quot;334&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o4lth/btrav7bHa6v/klZvzQ9D4Rt1XN2MPPJ3jK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o4lth/btrav7bHa6v/klZvzQ9D4Rt1XN2MPPJ3jK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o4lth/btrav7bHa6v/klZvzQ9D4Rt1XN2MPPJ3jK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo4lth%2Fbtrav7bHa6v%2FklZvzQ9D4Rt1XN2MPPJ3jK%2Fimg.png&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;850&quot; data-filename=&quot;view-model.png&quot; width=&quot;629&quot; height=&quot;334&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;color: #000000;&quot;&gt;Mode - View - ViewModel의 줄임말으로 로직과 UI의 분리를 위해 설계된 패턴입니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;웹페이지는 돔과 자바스크립트로 만들어지게 되는데 돔이 View 역할을 하고, 자바스크립트가 Model 역할을 합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;뷰모델이 없는 경우에는 직접 모델과 뷰를 연결해야 합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그러나 뷰모델이 중간에서 연결해 주는 것이 MVVM 모델입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;virtual-dom&quot; data-ke-size=&quot;size26&quot;&gt;가상돔(Virtual DOM)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;돔 요소가 많아지면 자바스크립트로 돔을 핸들링하는 일이 무거워집니다. 그래서 돔과 비슷한 구조로 자바스크립트를 만듭니다. 이것은 진짜 돔과는 달리 메모리에 올라가있는 것이기 때문에 비교적 매우 빠른 성능을 보입니다. Vue js가 가상돔을 수정하면 돔을 수정하는 것보다 빠릅니다. vue는 가상돔이 변경될 때마다 진짜 돔과 비교해서 차이를 찾고 차이난 부분의 돔만 수정하는 동작을 하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;component&quot; data-ke-size=&quot;size26&quot;&gt;컴포넌트(Component)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면에 비춰지는 뷰의 단위를 쪼개어 재활용이 가능한 형태로 관리하는 것이 컴포넌트입니다.&lt;br /&gt;Vue에서, 컴포넌트는 미리 정의된 옵션을 가진 Vue 인스턴스입니다.&lt;br /&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 alignCenter&quot; data-origin-width=&quot;815&quot; data-origin-height=&quot;557&quot; data-filename=&quot;vue인스턴스_라이프_사이클.jpeg&quot; width=&quot;660&quot; height=&quot;451&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oMuWu/btrav73SI61/EeFLDuItuDCUiAkIy22z71/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oMuWu/btrav73SI61/EeFLDuItuDCUiAkIy22z71/img.jpg&quot; data-alt=&quot;Vue의 생명주기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oMuWu/btrav73SI61/EeFLDuItuDCUiAkIy22z71/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoMuWu%2Fbtrav73SI61%2FEeFLDuItuDCUiAkIy22z71%2Fimg.jpg&quot; data-origin-width=&quot;815&quot; data-origin-height=&quot;557&quot; data-filename=&quot;vue인스턴스_라이프_사이클.jpeg&quot; width=&quot;660&quot; height=&quot;451&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;Vue의 생명주기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;beforeCreate&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 인스턴스가 생성되고 나서 가장 처음으로 실행되는 라이프 사이클 단계 data 또는 method 속성이 아직 인스턴스에 정의되지 않고 돔과 같은 화면 요소에도 접근할 수 없다.&lt;/li&gt;
&lt;li&gt;created&lt;span&gt;&amp;nbsp;&lt;/span&gt;: data속성과 method 속성이 정의 되었기 때믄에 이와 관련된 메소드를 실행할 수 있으나 template 속성이 정의되기 전이므로 돔 요소엔 접근할 수 없다. 가장 첫 라이프 사이클 단계이고 컴포넌트가 생성된 후 실행되는 단계이므로 서버에 데이터를 요청하여 받아오는 로직을 수행하기 좋음.&lt;/li&gt;
&lt;li&gt;beforeMount&lt;span&gt;&amp;nbsp;&lt;/span&gt;: javascript가 돔을 그리기 이전,&lt;span&gt;&amp;nbsp;&lt;/span&gt;render()&lt;span&gt;&amp;nbsp;&lt;/span&gt;함수가 호출되기 직전의 로직을 추가하기 좋다.&lt;/li&gt;
&lt;li&gt;mounted: el 속성에서 지정한 화면 요소에 인스턴스가 부착되고 나서 호출되는 단계, template에서 정의한 화면 요소에 접근할 수 있어 화면 요소를 제어하는 로직을 수행할 수 있다.&lt;/li&gt;
&lt;li&gt;beforeUpdate:&lt;span&gt;&amp;nbsp;&lt;/span&gt;$watch를 통해 관찰중인 데이터가 변경되면 가상 돔으로 화면을 다시 그리기 전에 호출되는 단계, 변경 예정인 새 데이터에 접근할 수 있어 변경 예정인 데이터의 값과 관련된 로직을 미리 넣을 수 있다.&lt;/li&gt;
&lt;li&gt;updated: 데이터가 변경되고 나서 가상돔으로 다시 화면을 그리고 실행되는 단계, 데이터 변경 후 화면요소와 제어와 관련된 로직을 추가하는 게 좋음. 데이터 값을 갱신하는 로직은&lt;span&gt;&amp;nbsp;&lt;/span&gt;beforeUpdated에 추가하고 변경 데이터의 화면 요소와 관련된 로직을&lt;span&gt;&amp;nbsp;&lt;/span&gt;updated에 추가하는 게 좋습니다.&lt;/li&gt;
&lt;li&gt;beforeDestroyed: 뷰 인스턴스의 데이터를 삭제하기 좋은 단계&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Vue.js의 특징&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;MVVM 패턴을 사용(비즈니스 로직이나 백엔드 로직으로 분리 사용)&lt;/li&gt;
&lt;li&gt;Vue.js는 컴포넌트 기반 프레임 워크이다.&lt;/li&gt;
&lt;li&gt;코드를 재사용하기 쉽고 코드를 직관적으로 파악할 수 있다.&lt;/li&gt;
&lt;li&gt;양방향 데이터 바인딩 (화면에 표시되는 값과 프레임 워크의 모델 데이터 값이 동기화 됨)&lt;/li&gt;
&lt;li&gt;데이터 전달할 때 항상 상위 컴포넌트에서 하위 컴포넌트 방향으로만 전달함.&lt;/li&gt;
&lt;/ol&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://wikidocs.net/17701&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://wikidocs.net/17701&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1627313772009&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;wikidocs&quot; data-og-title=&quot;위키독스&quot; data-og-description=&quot;온라인 책을 제작 공유하는 플랫폼 서비스&quot; data-og-host=&quot;wikidocs.net&quot; data-og-source-url=&quot;https://wikidocs.net/17701&quot; data-og-url=&quot;https://wikidocs.net&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/I8S75/hyK1oAuwr1/rwARr3hWqJk3mulkR55iy1/img.png?width=99&amp;amp;height=129&amp;amp;face=0_0_99_129&quot;&gt;&lt;a href=&quot;https://wikidocs.net/17701&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://wikidocs.net/17701&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/I8S75/hyK1oAuwr1/rwARr3hWqJk3mulkR55iy1/img.png?width=99&amp;amp;height=129&amp;amp;face=0_0_99_129');&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;위키독스&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;wikidocs.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;참고: &lt;a href=&quot;https://mber.tistory.com/12&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://mber.tistory.com/12&lt;/a&gt;&lt;/p&gt;</description>
      <category>IT Diary/# Vue</category>
      <category>node.js</category>
      <category>vue</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/23</guid>
      <comments>https://mojjisoft.tistory.com/23#entry23comment</comments>
      <pubDate>Tue, 27 Jul 2021 00:37:12 +0900</pubDate>
    </item>
    <item>
      <title>[ Dev Dairy ] 004. Flask API 만들어보기</title>
      <link>https://mojjisoft.tistory.com/22</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;174&quot; data-filename=&quot;모찌의개발일지.png&quot; width=&quot;567&quot; height=&quot;115&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kHqJ8/btq9XblC10P/sTTBwIgbnVv1FHoKV8vZSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kHqJ8/btq9XblC10P/sTTBwIgbnVv1FHoKV8vZSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kHqJ8/btq9XblC10P/sTTBwIgbnVv1FHoKV8vZSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkHqJ8%2Fbtq9XblC10P%2FsTTBwIgbnVv1FHoKV8vZSK%2Fimg.png&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;174&quot; data-filename=&quot;모찌의개발일지.png&quot; width=&quot;567&quot; height=&quot;115&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;396&quot; data-filename=&quot;개발이미지.png&quot; width=&quot;264&quot; height=&quot;281&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMkZjt/btq91NjI2TX/iIaDX8wRjtdpRsFfoYxhe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMkZjt/btq91NjI2TX/iIaDX8wRjtdpRsFfoYxhe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMkZjt/btq91NjI2TX/iIaDX8wRjtdpRsFfoYxhe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMkZjt%2Fbtq91NjI2TX%2FiIaDX8wRjtdpRsFfoYxhe1%2Fimg.png&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;396&quot; data-filename=&quot;개발이미지.png&quot; width=&quot;264&quot; height=&quot;281&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;JSP 단에서 GET 방식으로 요청을 보내고 그걸 Python Flask 로 받아서 처리한 값을 다시 JSP로 돌려주는걸 해보고싶었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 말하면 Flask 로 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;우선은 간단하게 JSP 에서 ajax 로 get 방식으로 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;JAVA&amp;nbsp; - index.jsp&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #aaffaa;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;span style=&quot;color: #aaffaa;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$.ajax({&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;method:&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;GET&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;url:&amp;nbsp;&quot;https://dapi.kakao.com/v2/search/blog&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url:&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;http://127.0.0.1:8080/plus&quot;&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;flask&amp;nbsp;서버로&amp;nbsp;던진다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;data:&amp;nbsp;{&amp;nbsp;review&amp;nbsp;:&amp;nbsp;[&quot;리뷰1&quot;,&quot;리뷰2&quot;,&quot;리뷰3&quot;]}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data:&amp;nbsp;{&amp;nbsp;x:&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;2&quot;&lt;/span&gt;&amp;nbsp;,&amp;nbsp;y&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;3&quot;&lt;/span&gt;&amp;nbsp;},&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;headers:&amp;nbsp;{Authorization:&amp;nbsp;&quot;KakaoAK&amp;nbsp;9068483aa30e9a2150dad3527a5295a4&quot;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;})&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.done(&lt;span style=&quot;color: #ff3399;&quot;&gt;function&lt;/span&gt;&amp;nbsp;(msg)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;alert&lt;/span&gt;(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;Data&amp;nbsp;Saved:&amp;nbsp;&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #aaffaa;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&amp;nbsp;msg.result&amp;nbsp;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #aaffaa;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #aaffaa;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;/&lt;/span&gt;script&lt;span style=&quot;color: #aaffaa;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #4f4f4ftext-decoration:none;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;GET 방식으로 내가 만들 Flask 서버 주소 ( 127.0.0.1:8080/plus ) 로 파라메터를 던진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 만약 성공한다면 alert 으로 값을 띄워준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python - app.py&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;python 에서는 간단하게 flask_restful 을 통해 RESTful API 구현이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;( * http 에서 GET, POST , DELETE 등의 http 함수를 써서 json ,xml 을 통해 정보를 주고받는 api로써 기능을 하는걸 Restful API )&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;from&lt;/span&gt;&amp;nbsp;flask_restful&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;import&lt;/span&gt;&amp;nbsp;Resource&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;from&lt;/span&gt;&amp;nbsp;flask_restful&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;import&lt;/span&gt;&amp;nbsp;reqparse&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;CORS(Cross&amp;nbsp;Origin&amp;nbsp;Resource&amp;nbsp;Sharing)&amp;nbsp;:&amp;nbsp;동일&amp;nbsp;출처(같은&amp;nbsp;호스트네임)가&amp;nbsp;아니더라도&amp;nbsp;정상적으로&amp;nbsp;사용&amp;nbsp;가능하도록&amp;nbsp;도와주는&amp;nbsp;방법입니다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;다른&amp;nbsp;도메인이나&amp;nbsp;로컬&amp;nbsp;환경에서&amp;nbsp;자바스크립트로&amp;nbsp;api&amp;nbsp;등을&amp;nbsp;호출하는&amp;nbsp;경우&amp;nbsp;브라우저에서&amp;nbsp;동일&amp;nbsp;출처&amp;nbsp;위반의&amp;nbsp;에러가&amp;nbsp;나타날&amp;nbsp;수&amp;nbsp;있습니다&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;from&lt;/span&gt;&amp;nbsp;flask_cors&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;import&lt;/span&gt;&amp;nbsp;CORS&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;class&lt;/span&gt;&amp;nbsp;Plus(Resource):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;def&lt;/span&gt;&amp;nbsp;get(&lt;span style=&quot;color: #4be6fa;&quot;&gt;self&lt;/span&gt;):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;try&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;요청받은거를&amp;nbsp;받아주자&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parser&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;reqparse.RequestParser()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;add_argument&amp;nbsp;를&amp;nbsp;통해&amp;nbsp;입력&amp;nbsp;파라미터를&amp;nbsp;설정할&amp;nbsp;수&amp;nbsp;있다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parser.add_argument(&lt;span style=&quot;color: #ffd500;&quot;&gt;'x'&lt;/span&gt;,&amp;nbsp;required&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;True&lt;/span&gt;,&amp;nbsp;type&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;int&lt;/span&gt;,&amp;nbsp;help&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ffd500;&quot;&gt;'x&amp;nbsp;cannot&amp;nbsp;be&amp;nbsp;blank'&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;add_argument(*args,&amp;nbsp;**kwargs)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parser.add_argument(&lt;span style=&quot;color: #ffd500;&quot;&gt;'y'&lt;/span&gt;,&amp;nbsp;required&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;True&lt;/span&gt;,&amp;nbsp;type&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;int&lt;/span&gt;,&amp;nbsp;help&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ffd500;&quot;&gt;'y&amp;nbsp;cannot&amp;nbsp;be&amp;nbsp;blank'&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;args&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;parser.parse_args()&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;Parse&amp;nbsp;all&amp;nbsp;arguments&amp;nbsp;from&amp;nbsp;the&amp;nbsp;provided&amp;nbsp;request&amp;nbsp;and&amp;nbsp;return&amp;nbsp;the&amp;nbsp;results&amp;nbsp;as&amp;nbsp;a&amp;nbsp;Namespace&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;args[&lt;span style=&quot;color: #ffd500;&quot;&gt;'x'&lt;/span&gt;]&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&amp;nbsp;args[&lt;span style=&quot;color: #ffd500;&quot;&gt;'y'&lt;/span&gt;]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;return&lt;/span&gt;&amp;nbsp;{&lt;span style=&quot;color: #ffd500;&quot;&gt;'result'&lt;/span&gt;:&amp;nbsp;result}&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;실제&amp;nbsp;돌려줄&amp;nbsp;값을&amp;nbsp;여기에&amp;nbsp;넣어준다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;except&lt;/span&gt;&amp;nbsp;Exception&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;as&lt;/span&gt;&amp;nbsp;e:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;return&lt;/span&gt;&amp;nbsp;{&lt;span style=&quot;color: #ffd500;&quot;&gt;'error'&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;str&lt;/span&gt;(e)}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;from&lt;/span&gt;&amp;nbsp;flask&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;import&lt;/span&gt;&amp;nbsp;Flask&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;from&lt;/span&gt;&amp;nbsp;flask_restful&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;import&lt;/span&gt;&amp;nbsp;Api&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;app&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;Flask(&lt;span style=&quot;color: #ffd500;&quot;&gt;'My&amp;nbsp;First&amp;nbsp;App'&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;api&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;Api(app)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;CORS(app)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;api.add_resource(Plus,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'/plus'&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;__name__&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'__main__'&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app.run(host&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ffd500;&quot;&gt;'127.0.0.1'&lt;/span&gt;,&amp;nbsp;port&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;8080&lt;/span&gt;,&amp;nbsp;debug&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;True&lt;/span&gt;)&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #4f4f4ftext-decoration:none;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나같은 경우에는 python 개발을 위해 conda( 아나콘다 ) 에 웬만한건 다 설치를 해놨지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 없다면 pip install 을 통해서 없는 module 들을 설치한 다음에 진행하면 된다.&lt;/p&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;class의 맴버 변수는 Restful api 의 함수를 의미한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, get 함수 외에도 post, put , delete 등의 함수를 필요에 따라서 정의해서 사용하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 정의된 클래스는 add_resource 함수로 경로와 함께 등록한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해석하면 127.0.0.1:8080/plus 로 GET 요청을 보내면 Result 키에&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #272727; color: #f0f0f0;&quot;&gt;args[&lt;/span&gt;&lt;span style=&quot;color: #ffd500;&quot;&gt;'x'&lt;/span&gt;&lt;span style=&quot;background-color: #272727; color: #f0f0f0;&quot;&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;background-color: #272727; color: #f0f0f0;&quot;&gt;&amp;nbsp;args[&lt;/span&gt;&lt;span style=&quot;color: #ffd500;&quot;&gt;'y'&lt;/span&gt;&lt;span style=&quot;background-color: #272727; color: #f0f0f0;&quot;&gt;]&lt;/span&gt;값을 JSON으로 반환해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 CORS가 없는 상태에서 실행을 해봤다면&amp;nbsp; JSP -&amp;gt; Flask 로 값이 잘 넘어가는 걸 확인했는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Flask -&amp;gt; JSP 로 응답이 오지 않을 수 도 있다.&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-origin-width=&quot;542&quot; data-origin-height=&quot;89&quot; data-filename=&quot;스크린샷 2021-07-20 오전 12.13.37.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qFYcq/btq9Xbsn3eL/cEug2cJWMaAJCHQi7GNbNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qFYcq/btq9Xbsn3eL/cEug2cJWMaAJCHQi7GNbNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qFYcq/btq9Xbsn3eL/cEug2cJWMaAJCHQi7GNbNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqFYcq%2Fbtq9Xbsn3eL%2FcEug2cJWMaAJCHQi7GNbNK%2Fimg.png&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;89&quot; data-filename=&quot;스크린샷 2021-07-20 오전 12.13.37.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;원인은 CORS 를 해놓지 않았기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크롬에서는 다른 도메인이나 로컬 환경에서 자바스크립트로 API 등을 호출하는 경우,&amp;nbsp; 브라우저에서 동일 출처 위반 에러가 나타날 수 있기때문에 CORS 하지 않으면 저렇게 에러가 난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*CORS(Cross Origin Resource Sharing) : 동일 출처(같은 호스트네임)가 아니더라도 정상적으로 사용 가능하도록 도와주는 방법&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;546&quot; data-origin-height=&quot;91&quot; data-filename=&quot;스크린샷 2021-07-20 오전 12.15.01.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MwLil/btq91qPPQhn/QbdDzhCNz5b5BuEN35xk90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MwLil/btq91qPPQhn/QbdDzhCNz5b5BuEN35xk90/img.png&quot; data-alt=&quot;CORS&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MwLil/btq91qPPQhn/QbdDzhCNz5b5BuEN35xk90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMwLil%2Fbtq91qPPQhn%2FQbdDzhCNz5b5BuEN35xk90%2Fimg.png&quot; data-origin-width=&quot;546&quot; data-origin-height=&quot;91&quot; data-filename=&quot;스크린샷 2021-07-20 오전 12.15.01.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;CORS&lt;/figcaption&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;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;span style=&quot;background-color: #409d00;&quot;&gt;&amp;nbsp;&lt;/span&gt;import CORS&lt;/span&gt; 를 설치하고&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;app을 선언한 이후에&amp;nbsp; &lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;span style=&quot;background-color: #409d00;&quot;&gt;&amp;nbsp;&lt;/span&gt;CORS(app)&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;439&quot; data-origin-height=&quot;110&quot; data-filename=&quot;스크린샷 2021-07-20 오전 12.18.51.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oTWLp/btq90mz8yYE/OgEJWNKBk3NX9XzkfpKy70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oTWLp/btq90mz8yYE/OgEJWNKBk3NX9XzkfpKy70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oTWLp/btq90mz8yYE/OgEJWNKBk3NX9XzkfpKy70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoTWLp%2Fbtq90mz8yYE%2FOgEJWNKBk3NX9XzkfpKy70%2Fimg.png&quot; data-origin-width=&quot;439&quot; data-origin-height=&quot;110&quot; data-filename=&quot;스크린샷 2021-07-20 오전 12.18.51.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT Diary/# Dev Diary</category>
      <category>API</category>
      <category>CORS</category>
      <category>flask</category>
      <category>jsp</category>
      <category>Python</category>
      <category>restful</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/22</guid>
      <comments>https://mojjisoft.tistory.com/22#entry22comment</comments>
      <pubDate>Tue, 20 Jul 2021 00:20:44 +0900</pubDate>
    </item>
    <item>
      <title>[ JAVA ] 캡슐화란?</title>
      <link>https://mojjisoft.tistory.com/21</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&quot; data-filename=&quot;JAVA.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bprUqP/btq9hyu22cl/ROREzS8cUgOw2kpsPkiGs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bprUqP/btq9hyu22cl/ROREzS8cUgOw2kpsPkiGs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bprUqP/btq9hyu22cl/ROREzS8cUgOw2kpsPkiGs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbprUqP%2Fbtq9hyu22cl%2FROREzS8cUgOw2kpsPkiGs1%2Fimg.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&quot; data-filename=&quot;JAVA.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;캡슐화&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 기능의 구현을 외부에 감춤 ( 정보은닉 : Information Hiding )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 캡슐화를 통해 기능을 사용하는 코드에 영향을 주지 않고 ( 또는 최소화) 내부 구현을 변경할 수 있는 유연함&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;캡슐화를 위한 규칙&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Tell, Don`t Ask&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;:&amp;nbsp; 데이터 달라 하지말고 해달라고 하기&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: #dddddd;&quot;&gt;&lt;span style=&quot;background-color: #409d00;&quot;&gt;&amp;nbsp;&lt;/span&gt;샘플)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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;if ( acc.getEmpAuth() == MANAGER ) {&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;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 변경 후&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if( acc.hasManagerAuth()){&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;}&lt;/p&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. Demeter`s Law&lt;/p&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: #409d00;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;샘플)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;acc.getExpDate().isAfter(now) -&amp;gt; acc.isExpired()&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;Date date = acc.getExpDate(); date.isAfter(now); -&amp;gt; ass.isValid(now)&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;521&quot; data-filename=&quot;스크린샷 2021-07-11 오후 10.59.28.png&quot; width=&quot;615&quot; height=&quot;354&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk35Yn/btq9fczcUvz/F5L0uKZ2qMKEXuXoauXYZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk35Yn/btq9fczcUvz/F5L0uKZ2qMKEXuXoauXYZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk35Yn/btq9fczcUvz/F5L0uKZ2qMKEXuXoauXYZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk35Yn%2Fbtq9fczcUvz%2FF5L0uKZ2qMKEXuXoauXYZK%2Fimg.png&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;521&quot; data-filename=&quot;스크린샷 2021-07-11 오후 10.59.28.png&quot; width=&quot;615&quot; height=&quot;354&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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 alignCenter&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;390&quot; data-filename=&quot;스크린샷 2021-07-11 오후 11.01.21.png&quot; width=&quot;765&quot; height=&quot;339&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGngaY/btq9kQuVLVc/f0raMKQJoHxkKIHcBCMHnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGngaY/btq9kQuVLVc/f0raMKQJoHxkKIHcBCMHnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGngaY/btq9kQuVLVc/f0raMKQJoHxkKIHcBCMHnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGngaY%2Fbtq9kQuVLVc%2Ff0raMKQJoHxkKIHcBCMHnK%2Fimg.png&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;390&quot; data-filename=&quot;스크린샷 2021-07-11 오후 11.01.21.png&quot; width=&quot;765&quot; height=&quot;339&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;접근제어자&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캡슐화를&amp;nbsp;하기&amp;nbsp;위해서는&amp;nbsp;접근제어자를&amp;nbsp;통해&amp;nbsp;설계가&amp;nbsp;잘&amp;nbsp;이루어져야&amp;nbsp;한다.&lt;br /&gt;자신&amp;nbsp;내부의&amp;nbsp;모듈은&amp;nbsp;감추고,&amp;nbsp;다른&amp;nbsp;모듈의&amp;nbsp;내부&amp;nbsp;작업도&amp;nbsp;직접적으로&amp;nbsp;개입하지&amp;nbsp;못하도록&amp;nbsp;설계해야한다.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #1b9ae6;&quot;&gt;&lt;b&gt;▷&amp;nbsp;클래스&amp;nbsp;접근&amp;nbsp;제어자&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;default&amp;nbsp;:&amp;nbsp;동일&amp;nbsp;패키지의&amp;nbsp;클래스(class)에만&amp;nbsp;인스턴스(객체)를&amp;nbsp;생성가능하다.&lt;br /&gt;public&amp;nbsp;:&amp;nbsp;다른&amp;nbsp;패키지에서&amp;nbsp;인스턴스(객체)를&amp;nbsp;생성가능하다.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #1b9ae6;&quot;&gt;&lt;b&gt;▷&amp;nbsp;메소드&amp;nbsp;접근&amp;nbsp;제어자&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;private&amp;nbsp;:&amp;nbsp;동일한&amp;nbsp;클래스&amp;nbsp;안에서만&amp;nbsp;접근이&amp;nbsp;가능하고,&amp;nbsp;this를&amp;nbsp;사용하는&amp;nbsp;것들은&amp;nbsp;외부에서&amp;nbsp;접근&amp;nbsp;불가능하고,&amp;nbsp;상속도&amp;nbsp;안된다.&lt;br /&gt;default&amp;nbsp;:&amp;nbsp;접근제어자가&amp;nbsp;없는&amp;nbsp;형태로&amp;nbsp;동일한&amp;nbsp;패키지&amp;nbsp;안에서만&amp;nbsp;접근이&amp;nbsp;가능하다.&lt;br /&gt;protected&amp;nbsp;:&amp;nbsp;동일한&amp;nbsp;패키지&amp;nbsp;안에서&amp;nbsp;사용가능하고,&amp;nbsp;다른&amp;nbsp;패키지라도&amp;nbsp;상속받은&amp;nbsp;클래스에는&amp;nbsp;접근이&amp;nbsp;가능하다.&lt;br /&gt;public&amp;nbsp;:&amp;nbsp;모든&amp;nbsp;객체에서&amp;nbsp;접근&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;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;참조 : &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;인프런 객체 지향 프로그래밍 입문&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;a href=&quot;https://radait.tistory.com/5&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://radait.tistory.com/5&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT Diary/# JAVA</category>
      <category>java</category>
      <category>객체지향</category>
      <category>정보은닉</category>
      <category>캡슐화</category>
      <author>셜록호움즈</author>
      <guid isPermaLink="true">https://mojjisoft.tistory.com/21</guid>
      <comments>https://mojjisoft.tistory.com/21#entry21comment</comments>
      <pubDate>Sun, 11 Jul 2021 23:03:03 +0900</pubDate>
    </item>
  </channel>
</rss>