<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>기록하는 습관.</title>
    <link>https://meongj-devlog.tistory.com/</link>
    <description>#it
#개발일기
#개발공부
#개발자
#백앤드
#생각정리
#시간은 실력에 비례한다
#뭐든지 꾸준히 열심히
#오늘의 내가 내일의 나를 만든다</description>
    <language>ko</language>
    <pubDate>Wed, 1 Jul 2026 09:38:13 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>meong_j</managingEditor>
    <image>
      <title>기록하는 습관.</title>
      <url>https://tistory1.daumcdn.net/tistory/4920479/attach/ce027e8592344eab96406eaab727baa7</url>
      <link>https://meongj-devlog.tistory.com</link>
    </image>
    <item>
      <title>[Study] Real MySQL 8.0 - 9장(1) 옵티마이저와 힌트</title>
      <link>https://meongj-devlog.tistory.com/216</link>
      <description>&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;9.1. 개요&lt;/h2&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;대부분의 DBMS에서는 '옵티마이저'가 이러한 기능을 담당한다.&lt;/p&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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;9.1.1 쿼리 실행 절차&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL 서버에서 쿼리가 실행되는 과정은 크게 아래 세단계로 나눠진다.&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;1. 사용자로부터 요청된 SQL 문장을 잘게 쪼개서 MySQL 서버가 이해할 수 있는 수준으로 분리(파스 트리)한다.&lt;br /&gt;2. SQL의 파싱정보(파스 트리)를 확인하면서 어떤 테이블을 읽고 어떤 인덱스를 이용해 테이블을 읽을지 선택한다.&lt;br /&gt;3. 두번째 단계에서 결정된 테이블의 읽기 순서나 선택된 인덱스를 이용해 스토리지 엔진으로 부터 데이터를 가져온다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;9.1.2 옵티마이저의 종류&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;규칙 기반 최적화 :&amp;nbsp; 대상 테이블의 레코드 건수나 선택도 등을 고려하지 않고, 우선순위에 따라 실행 계획을 수립하는방식 이미 오래전부터 많은 DBMS에서 거의 사용하지 않는다.&lt;/li&gt;
&lt;li&gt;비용 기반 최적화 : 산출된 실행 방법별로 비용이 최소로 소요되는 처리 방식을 선택해 최종적으로 쿼리를 실행한다. 대부분의 RDBMS가 채택하고 있는 방식이며, MySQL 도 마찬가지다.&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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;9.2. 기본 데이터 처리&lt;/h2&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;9.2.1 풀 테이블 스캔과 풀 인덱스 스캔&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;풀 테이블 스캔은 인덱스를 사용하지 않고, 테이블의 데이터를 처음부터 끝까지 읽어서 요청된 작업을 처리하는 작업&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테이블의 레코드 수가 너무 적을 때&amp;nbsp;&lt;/li&gt;
&lt;li&gt;인덱스를 이용할 수&amp;nbsp; 있는 적절한 조건이 없는 경우&lt;/li&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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;9.2.2 병렬 처리&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;병렬처리 ? 하나의 쿼리를 여러 스레드가 작업을 나누어 동시에 처리한다는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL 8.0 버전에서는 아무런&amp;nbsp; WHERE 조건 없이 단순히 테이블의 전체 건수를 가져오는 쿼리만 병렬 처리할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&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 style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;9.2.3 ORDER BY 처리(Using filesort)&lt;br /&gt;대부분의 SELECT 쿼리에서는 정렬은 필수적으로 사용한다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;1) 인덱스 이용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;- 장점 : 이미 인덱스가 정렬돼 있어서 매우 빠르다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;- 단점 :&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;INSERT, UPDATE, DELETE 작업 시 부가적인 인덱스 추가/삭제 작업이 필요하므로 느리다.&lt;/li&gt;
&lt;li&gt;인덱스 때문에 디스크 공간이 더 많이 필요하다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;2) Filesort 이용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;- 장점 :&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인덱스를 생성하지 않아도 됨&lt;/li&gt;
&lt;li&gt;정렬해야 할 레코드가 많지 않으면 충분히 빠르다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;- 단점 : 쿼리 실행시 정렬 작업이 실행되므로 건수가 많아질수롣 쿼리의 응답 속도가 느리다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;모든 정렬을 인덱스를 이용하도록 튜닝하기란 거의 불가능하다.&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;/li&gt;
&lt;li&gt;GROUP BY의 결과 또는 DISTINCT 같은 처리의 결과를 정렬해야하는 경우&lt;/li&gt;
&lt;li&gt;UNION의 결과와 같이 임시 테이블의 결과를 다시 정렬해야하는 경우&lt;/li&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;span style=&quot;background-color: #dddddd;&quot;&gt;9.2.3.1 소트버퍼 (Sort buffer)&lt;/span&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;MySQL은 정렬해야 할 레코드를 여러 조각으로 나눠서 처리하는데, 이 과정에서 임시 저장을 위해 디스크를 사용한다.&lt;/p&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;sort_buffer_size 시스템 변수의 설정값이 무조건 크면 메모리에서 모두 처리되니 빨라질 것으로 예상하지만 실제 결과는 그렇지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;큰 메모리 공간 할당 때문에 성능이 훨씬 떨어질 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;u&gt;참고문헌&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;Real MySQL 8.0 - 백은빈, 이성욱&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Database/MySQL</category>
      <category>mysql</category>
      <category>SQL</category>
      <category>study</category>
      <category>데이터베이스</category>
      <author>meong_j</author>
      <guid isPermaLink="true">https://meongj-devlog.tistory.com/216</guid>
      <comments>https://meongj-devlog.tistory.com/216#entry216comment</comments>
      <pubDate>Sun, 20 Aug 2023 23:49:49 +0900</pubDate>
    </item>
    <item>
      <title>객체지향 설계 원칙, 트랜잭션 격리, 해쉬테이블</title>
      <link>https://meongj-devlog.tistory.com/215</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;객체 지향 설계 원칙인 SOLID 원칙에 대해서 설명해주세요. 예시를 들어주세요.&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체지향 프로그래밍을 할때 지켜야할 5대 원칙을 말한다.&lt;/p&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;span style=&quot;background-color: #f3c000;&quot;&gt;S&lt;/span&gt;RP(Single Responsibility Principle) 단일 책임의 원칙&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;u&gt;하나의 클래스은 하나의 책임(기능)을 가져야 한다는 것&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시)&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;어떤 자동차 클래스가 있는데, 엔진, 히터 등등 복잡한 시스템이 있다&lt;br /&gt;class car {&lt;br /&gt;&amp;nbsp; &amp;nbsp;// 여기에 모두 넣어버리면 복잡해짐&lt;br /&gt;&amp;nbsp; seat : 다른 클래스 불러옴(쪼갬)&lt;br /&gt;&amp;nbsp; heater : 다른 클래스 불러옴(쪼갬)&lt;br /&gt;}&lt;br /&gt;=&amp;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;&lt;b&gt;2. &lt;span style=&quot;background-color: #f3c000;&quot;&gt;O&lt;/span&gt;CP&lt;/b&gt;&lt;b&gt;(Open Close Principle) 개방 폐쇄의 원칙&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;확장 - 요구사항이 변경될때 새로운 동작을 추가하여 애플리케이션의 기능을 확장할 수 있다&lt;/li&gt;
&lt;li&gt;수정 - &lt;u&gt;기존의 코드를 수정하지 않고 애플리케이션의 동작을 추가하거나 변경할 수 있다&lt;/u&gt;&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;추상화? 핵심적인 부분만 남기고, 불필요한 부분 제거함으로써 복잡한 것 -&amp;gt; 간단히 하는것&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시)&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;class Animal {&lt;br /&gt;&amp;nbsp;울기 () {&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;강아지 -&amp;gt; 멍멍&lt;br /&gt;&amp;nbsp; &amp;nbsp;고양이 -&amp;gt; 야용&lt;br /&gt;&amp;nbsp; &amp;nbsp;// 기능 추가&amp;nbsp; &amp;nbsp;=&amp;gt; 계속 추가하면 안됨!!!!!&lt;br /&gt;&amp;nbsp; &amp;nbsp; 소 -&amp;gt; 음메&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; ...&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;////////잘못된 방법&lt;br /&gt;Animal a = new Animal(&quot;강아지&quot;);&amp;nbsp;&lt;br /&gt;a.울기();&lt;br /&gt;&lt;br /&gt;/////////옳은 방법&lt;br /&gt;Animal 클래스를 상속받는 강아지.class, 고양이.class .... 만든다&lt;br /&gt;소라는 클래스 만들고 Animal 클래스 상속받기&lt;br /&gt;Animal&amp;nbsp; a = new 강아지();&lt;br /&gt;Animal a = new 소();&lt;br /&gt;a.울기();&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;&lt;b&gt;3. &lt;span style=&quot;background-color: #f3c000;&quot;&gt;I&lt;/span&gt;SP(Interface Segregation Principle) 인터페이스 분리 원칙&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;클라이언트의 목적과 용도에 적합한 인터페이스 만을 제공하는 것&lt;/li&gt;
&lt;li&gt;&lt;u&gt;하나의 일반적인 인터페이스 보다는 여러개의 구체적인 인터페이스를 사용하는 게 좋다&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시)&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Interface 동물 {&lt;br /&gt;&amp;nbsp; &amp;nbsp;짖기();&lt;br /&gt;&amp;nbsp; &amp;nbsp;걷기();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class 강아지 implements 동물 {&lt;br /&gt;&amp;nbsp; &amp;nbsp; 짖기();&lt;br /&gt;&amp;nbsp; &amp;nbsp; 걷기():&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class 고양이 implements 동물 {&lt;br /&gt;&amp;nbsp; &amp;nbsp; //고양이는 짖기();가 필요없지만&amp;nbsp; 인터페이스 받으면 짖기();도 같이 가져와야한다&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; 걷기();&amp;nbsp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;=&amp;gt; 그래서 짖기();용 인터페이스 따로&amp;nbsp; &amp;nbsp;|&amp;nbsp; &amp;nbsp; 걷기();용 인터페이스 따로 여러개로 구분해서 분리해서 쓰는 것이 좋다!!&amp;nbsp;&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;&lt;b&gt;4. &lt;span style=&quot;background-color: #f3c000;&quot;&gt;L&lt;/span&gt;SP(Liskov Substitution Principle) 리스코프 치환 원칙&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;&lt;u&gt;자식클래스는 언제나 부모클래스를 대체할 수 있도록 상속해야 한다&lt;/u&gt;는 원칙&lt;br /&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;/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;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;class 로보트 {&lt;br /&gt;&amp;nbsp; &amp;nbsp;size = 10*10;&lt;br /&gt;}&lt;br /&gt;를 상속받는&amp;nbsp;&lt;br /&gt;class AI로보트 extends 로보트 {&lt;br /&gt;}&lt;br /&gt;자식 클래스가 있는데&lt;br /&gt;&amp;nbsp;&lt;br /&gt;로보트 a = new Al로보트();&lt;br /&gt;a.size = 10*10; 이어야지 다른 값이면 안된다!!&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;&lt;b&gt;5. &lt;span style=&quot;background-color: #f3c000;&quot;&gt;D&lt;/span&gt;IP(Dependency Inversion Priniple) 의존 역전 원칙&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;li&gt;개방 폐쇄 원칙과 밀접한 관련 있음 -&amp;gt; 2번&lt;/li&gt;
&lt;li&gt;&lt;u&gt;의존관계에서는 좀 더 추상화된 것을 의존하는 게 좋다&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시)&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;class 토끼 {&lt;br /&gt;&amp;nbsp; &amp;nbsp; ///이런식으로 쓰지말고&lt;br /&gt;&amp;nbsp; &amp;nbsp; //먹이 = carrot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; // vegetable 데이터 타입 받아서 쓰는 것이 좋다&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; vegetable 먹이;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// 상위개념을 의존하는 게 좋다!!!&lt;br /&gt;class vegetable { // 부모클래스&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// 이런 하위 개념을 의존하지 말고&lt;br /&gt;class carrot extends vegetable {&amp;nbsp; //상속받음&lt;br /&gt;}&amp;nbsp;&lt;br /&gt;class apple extends &amp;nbsp;vegetable {&amp;nbsp; //상속받음&lt;br /&gt;}&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;결국, 핵심은 &lt;u&gt;추상화&lt;/u&gt;이다.&lt;br /&gt;구체 클래스에 의존하지 않고 추상 클래스(or 인터페이스)에 의존함으로써 유연하고 확장 가능한 애플리케이션을 만들 수 있다는 것!!!&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;출처:&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;https://www.youtube.com/watch?v=KO2xdqOZSAs&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;br /&gt;&lt;b&gt;트랜잭션 격리 수준별로 어떠한 문제가 발생할 수 있을까요?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;경쟁 상태 (Race Condition)&lt;/b&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; 커밋되지 않은 데이터 읽기&lt;/li&gt;
&lt;li&gt;커밋되지 않은 데이터 덮어쓰기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 트랜잭션 격리(Isolation)&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; &amp;nbsp;한 번에 한개 트랜잭션만 처리하므로 성능(처리량) 저하 가능&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;Read Uncommitted : 사실상 사용안함&lt;/li&gt;
&lt;li&gt;Read Committed : 커밋된 데이터만 읽음&lt;br /&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Repeatable Read : 트랜잭션 동안 데이터가 변경되더라도 같은 데이터를 읽게함
&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;/li&gt;
&lt;li&gt;Serializable : 인덱스 잠금이나 조건 기반 잠금 등 사용
&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;/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;size14&quot;&gt;출처:&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;https://www.youtube.com/watch?v=poyjLx-LOEU&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;해쉬 테이블은 무엇인가요? 해쉬값이 충돌하면 어떻게 해결할 수 있을까요?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;해쉬테이블 Hasp map (=Hash Table)&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;key-value 형태로 데이터를 저장하는 자료구조&lt;/li&gt;
&lt;li&gt;하나의 key는 하나의 value에 맵핑&lt;/li&gt;
&lt;li&gt;key는 고유함&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;/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;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;array[index%key] 로 값 구함 (모듈러 연산)&lt;/li&gt;
&lt;/ul&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;&lt;b&gt;해쉬충돌?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-24 오후 7.41.21.png&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAhFCU/btrKrr7RU42/jvQx8O4KPXZBDuxspY1Sb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAhFCU/btrKrr7RU42/jvQx8O4KPXZBDuxspY1Sb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAhFCU/btrKrr7RU42/jvQx8O4KPXZBDuxspY1Sb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAhFCU%2FbtrKrr7RU42%2FjvQx8O4KPXZBDuxspY1Sb0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;282&quot; data-filename=&quot;스크린샷 2022-08-24 오후 7.41.21.png&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;366&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-08-24 오후 7.44.27.png&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;394&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r3eFb/btrKvbQiItH/JI8W47H3o9EKfzhkh30xnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r3eFb/btrKvbQiItH/JI8W47H3o9EKfzhkh30xnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r3eFb/btrKvbQiItH/JI8W47H3o9EKfzhkh30xnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr3eFb%2FbtrKvbQiItH%2FJI8W47H3o9EKfzhkh30xnk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;360&quot; data-filename=&quot;스크린샷 2022-08-24 오후 7.44.27.png&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;394&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;-&amp;gt; 절대 hashmap은 key 사이즈 만큼 잡지 않는다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 만약 key 사이즈 만큼 잡아버리면 메모리 낭비 발생!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예) 5000만 국민 모두 서비스 사용안함 -&amp;gt; key 5000만개 만들어봤자 필요x -&amp;gt; 현실은 1000명만 쓰고 있어서 hashmap 사이즈는 1000개 로 만들어둔다&lt;/p&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-24 오후 7.51.58.png&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0IB6N/btrKsOPhy6d/4mhAl24kIpMQBdKTUYKhNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0IB6N/btrKsOPhy6d/4mhAl24kIpMQBdKTUYKhNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0IB6N/btrKsOPhy6d/4mhAl24kIpMQBdKTUYKhNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0IB6N%2FbtrKsOPhy6d%2F4mhAl24kIpMQBdKTUYKhNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;326&quot; data-filename=&quot;스크린샷 2022-08-24 오후 7.51.58.png&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;392&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;size14&quot;&gt;출처&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=tEOkPaZXGOk&quot;&gt;https://www.youtube.com/watch?v=tEOkPaZXGOk&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;https://www.youtube.com/watch?v=dKqv1mQotNU&lt;/p&gt;</description>
      <category>IT_study/스터디</category>
      <author>meong_j</author>
      <guid isPermaLink="true">https://meongj-devlog.tistory.com/215</guid>
      <comments>https://meongj-devlog.tistory.com/215#entry215comment</comments>
      <pubDate>Wed, 24 Aug 2022 20:13:49 +0900</pubDate>
    </item>
    <item>
      <title>공인ip, 사설ip, nat, 프록시서버, DHCP</title>
      <link>https://meongj-devlog.tistory.com/214</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 공인 ip 와 사설 ip의 차이는 무엇일까요? nat 는 무슨 역할을 할까요?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ip (Internet Protocol address) 이란?&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;기기가 인터넷에 접속한 곳의 네트워크 상 위치&lt;/li&gt;
&lt;li&gt;인터넷 전체에서 서로 다른 기기들을 구분하기 위한 구분자!&lt;/li&gt;
&lt;li&gt;ip 는 변동함&lt;/li&gt;
&lt;li&gt;IPv4 : &lt;span style=&quot;background-color: #ffffff; color: #202122;&quot;&gt;0.0.0.0부터 255.255.255.255까지 (일반적 사용)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #202122;&quot;&gt;IPv6 : IPv4 주소 부족으로 인한 주소길이 늘림&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-18 오후 6.39.38.png&quot; data-origin-width=&quot;971&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KgNhB/btrJ2nXKMbQ/ukYKQopNBYjOA6y8Tn8wZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KgNhB/btrJ2nXKMbQ/ukYKQopNBYjOA6y8Tn8wZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KgNhB/btrJ2nXKMbQ/ukYKQopNBYjOA6y8Tn8wZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKgNhB%2FbtrJ2nXKMbQ%2FukYKQopNBYjOA6y8Tn8wZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;263&quot; data-filename=&quot;스크린샷 2022-08-18 오후 6.39.38.png&quot; data-origin-width=&quot;971&quot; data-origin-height=&quot;426&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-08-18 오후 6.42.02.png&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;520&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3Qth7/btrJYysZPuD/YAeKjW3ZaKrdY5knYeU770/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3Qth7/btrJYysZPuD/YAeKjW3ZaKrdY5knYeU770/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3Qth7/btrJYysZPuD/YAeKjW3ZaKrdY5knYeU770/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3Qth7%2FbtrJYysZPuD%2FYAeKjW3ZaKrdY5knYeU770%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;315&quot; data-filename=&quot;스크린샷 2022-08-18 오후 6.42.02.png&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;520&quot;/&gt;&lt;/span&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;공유기 기기에서 한 공인 ip아래 기기마다 사설 ip 부여되는 식으로 인터넷 사용&lt;/li&gt;
&lt;li&gt;공인 ip : 외부로 노출되는 ip | 네이버, 구글 &amp;gt; ip 주소 확인 검색&lt;/li&gt;
&lt;li&gt;사설 ip : 내부에서 사용하는 ip | 윈도우 &amp;gt; ipconfig&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-18 오후 6.43.15.png&quot; data-origin-width=&quot;1166&quot; data-origin-height=&quot;407&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eASxnV/btrJ2n4wWAm/2J6Pn7KYQWjbvi4KetdoKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eASxnV/btrJ2n4wWAm/2J6Pn7KYQWjbvi4KetdoKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eASxnV/btrJ2n4wWAm/2J6Pn7KYQWjbvi4KetdoKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeASxnV%2FbtrJ2n4wWAm%2F2J6Pn7KYQWjbvi4KetdoKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;209&quot; data-filename=&quot;스크린샷 2022-08-18 오후 6.43.15.png&quot; data-origin-width=&quot;1166&quot; data-origin-height=&quot;407&quot;/&gt;&lt;/span&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;사설 ip 주소 범위&lt;/li&gt;
&lt;li&gt;사설ip -&amp;gt; 공인ip 로 접근가능하지만, 다른 컴퓨터에서 사설 ip를 쓰는 컴퓨터로 접근 불가능&lt;/li&gt;
&lt;li&gt;웹 서비스 운영시 공인 ip로 써야함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;!&lt;b&gt; 사설ip에서 웹사이트 운영시&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-18 오후 6.47.49.png&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;666&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1ckcs/btrJZIvmHok/hmKlBirbQU0PHCYXxwNI1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1ckcs/btrJZIvmHok/hmKlBirbQU0PHCYXxwNI1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1ckcs/btrJZIvmHok/hmKlBirbQU0PHCYXxwNI1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1ckcs%2FbtrJZIvmHok%2FhmKlBirbQU0PHCYXxwNI1k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;421&quot; data-filename=&quot;스크린샷 2022-08-18 오후 6.47.49.png&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;666&quot;/&gt;&lt;/span&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;공인ip + port 각 각 주어 포트포워딩으로 접근 가능 할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-18 오후 6.48.58.png&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tXPIS/btrJ3ws9XBc/ztkpxYFzAdb534n8J2MTxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tXPIS/btrJ3ws9XBc/ztkpxYFzAdb534n8J2MTxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tXPIS/btrJ3ws9XBc/ztkpxYFzAdb534n8J2MTxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtXPIS%2FbtrJ3ws9XBc%2FztkpxYFzAdb534n8J2MTxk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;372&quot; data-filename=&quot;스크린샷 2022-08-18 오후 6.48.58.png&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;604&quot;/&gt;&lt;/span&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;공인ip에 모든 포트를 한 군데 몰빵 해주는 DMZ 방식이 있음&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;- 공인, 사설ip 모두 고정(static), 유동(dynamic) ip 될 수 있다&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-&amp;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;일반 가정이나 보통 ip 들은 인터넷을 사용중인 곳에만 나눠주는 유동 ip 방식을 씀
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;놀고 있는 컴퓨터에까지 ip 주면, 나눠줄 ip주소 부족으로 인해 안쓰는 애들은 다시 걷어감&lt;/li&gt;
&lt;li&gt;유동 ip 는 고정 ip 보다 가격 저렴, 해킹으로 부터 안전&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;유동 ip 사용시 DDNS(Dynamic DNS) 사용해서 도메인 연결가능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DDNS : 수시로 바뀌는 유동 ip 감지해서 고정된 도메인 제공해줌&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공유기 업체마다 유료 or 무료로 제공&lt;/li&gt;
&lt;/ul&gt;
&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-filename=&quot;스크린샷 2022-08-18 오후 6.56.52.png&quot; data-origin-width=&quot;938&quot; data-origin-height=&quot;393&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cweD5p/btrJ1X6okuL/fKlzaflfwA4qw2fJ75VkSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cweD5p/btrJ1X6okuL/fKlzaflfwA4qw2fJ75VkSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cweD5p/btrJ1X6okuL/fKlzaflfwA4qw2fJ75VkSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcweD5p%2FbtrJ1X6okuL%2FfKlzaflfwA4qw2fJ75VkSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;251&quot; data-filename=&quot;스크린샷 2022-08-18 오후 6.56.52.png&quot; data-origin-width=&quot;938&quot; data-origin-height=&quot;393&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;b&gt;Nat (Network Address Translation) 네트워크 주소 변환 서비스 란?&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;여러 장비가 하나의 ip 주소를 공유하는 것&lt;/li&gt;
&lt;li&gt;다수의 사설 ip -&amp;gt; 공인 ip 주소 변환&lt;/li&gt;
&lt;li&gt;주로 기업이나 기관에서 내부망을 사용하는 pc에 사설 ip를 제공하고, 외부 인터넷 연결시 공인 ip 같이 사용하는 형태로 운영&lt;/li&gt;
&lt;li&gt;사용 이유? ip 주소 문제로 인해 사용, 현재 ip 주소 고갈중임..
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IPv4에서 사용 가능한 총 주소 개수&amp;nbsp; &amp;lt; 현존하는 총 호스트 개수의 증가율&lt;/li&gt;
&lt;li&gt;IPv6는 기존의 장비를 업그레이드 하거나 교체해야 하기 때문에 비용 절감을 위해 nat 개발&lt;/li&gt;
&lt;li&gt;호스트 개수 증가에 반해 고갈되는 ip 주소 수 절약을 위한 방안으로 등장!!!&lt;/li&gt;
&lt;/ul&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;&lt;b&gt;NAT 규칙&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;같은 IP 주소를 공유하고자 하는 기기들을 NAT 안쪽에 연결함&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-18 오후 7.05.12.png&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;367&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpRipC/btrJ2biZxyg/qQLaG4Fk2jVHJrM9ikBKPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpRipC/btrJ2biZxyg/qQLaG4Fk2jVHJrM9ikBKPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpRipC/btrJ2biZxyg/qQLaG4Fk2jVHJrM9ikBKPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpRipC%2FbtrJ2biZxyg%2FqQLaG4Fk2jVHJrM9ikBKPk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;232&quot; data-filename=&quot;스크린샷 2022-08-18 오후 7.05.12.png&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;367&quot;/&gt;&lt;/span&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;사설 IP 라 불리는 특별히 지정된 범위의 주소 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-18 오후 7.06.08.png&quot; data-origin-width=&quot;733&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br2SE1/btrJZIoHcrh/UrWJPK33hka7bZavTOBKA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br2SE1/btrJZIoHcrh/UrWJPK33hka7bZavTOBKA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br2SE1/btrJZIoHcrh/UrWJPK33hka7bZavTOBKA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbr2SE1%2FbtrJZIoHcrh%2FUrWJPK33hka7bZavTOBKA0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;164&quot; data-filename=&quot;스크린샷 2022-08-18 오후 7.06.08.png&quot; data-origin-width=&quot;733&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;3가지 대역폭 존재&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-18 오후 7.10.58.png&quot; data-origin-width=&quot;905&quot; data-origin-height=&quot;413&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckJ5m6/btrJ28zjCGi/fbvCheOq0sbQRq6kLSFUFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckJ5m6/btrJ28zjCGi/fbvCheOq0sbQRq6kLSFUFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckJ5m6/btrJ28zjCGi/fbvCheOq0sbQRq6kLSFUFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckJ5m6%2FbtrJ28zjCGi%2FfbvCheOq0sbQRq6kLSFUFk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;274&quot; data-filename=&quot;스크린샷 2022-08-18 오후 7.10.58.png&quot; data-origin-width=&quot;905&quot; data-origin-height=&quot;413&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;사설 IP 대역은 NAT에서만 사용 가능함왼쪽 ip와 오른 쪽 ip 는 서로 다른 애이지만, ip 주소는 동일함 =&amp;gt; ip 주소 재활용&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;하나의 NAT에서 사용된 주소가 다른 NAT에서 재사용 될 수 있기 때문에 사용하는 주소수를 '절약' 할 수 있다!!&lt;/li&gt;
&lt;li&gt;nat 를 사용함으로써 영역 간 구분이 생김 (사설 ip / 공동 ip)&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;출처&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;https://www.youtube.com/watch?v=GK3h936Co-k&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;https://www.youtube.com/watch?v=m5NIzibKP_c&lt;/p&gt;
&lt;p data-ke-size=&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;br /&gt;&lt;b&gt;2.&amp;nbsp;프록시&amp;nbsp;서버란?&amp;nbsp;어떻게&amp;nbsp;네트워크를&amp;nbsp;보호할까요?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;프록시 서버(Proxy) 란?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-18 오후 7.18.29.png&quot; data-origin-width=&quot;895&quot; data-origin-height=&quot;335&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qBZCC/btrJ28F5SXc/pp7A1gKYgkKupIrZSZrEa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qBZCC/btrJ28F5SXc/pp7A1gKYgkKupIrZSZrEa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qBZCC/btrJ28F5SXc/pp7A1gKYgkKupIrZSZrEa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqBZCC%2FbtrJ28F5SXc%2Fpp7A1gKYgkKupIrZSZrEa0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;225&quot; data-filename=&quot;스크린샷 2022-08-18 오후 7.18.29.png&quot; data-origin-width=&quot;895&quot; data-origin-height=&quot;335&quot;/&gt;&lt;/span&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;클라이언트로 부터 받은 데이터를 서버로 전달해줌 (대리인) =&amp;gt; 대부분 웹 프록시 말함&lt;/li&gt;
&lt;li&gt;한국에서 미국서버(프록시)를 거쳐 슈프림 사이트로 들어가 쇼핑 가능 &lt;/li&gt;
&lt;li&gt;클라이언트가 id, pw를 프록시 서버로 보내고 프록시가 id, pw를 저장 하고 서버로 보낸다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;탈취할 가능성도 있음! =&amp;gt; 프록시 서버 해킹되면 위험 =&amp;gt; MITM 공격(중간자공격)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;캐시 데이터 사용&lt;br /&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;컴퓨터 네트워크에서 다른 서버로의 자원 요청을 중계하며 분산 시스템 구조를 단순화시켜 서비스 복잡도 줄임&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;nbsp;보안적 측면 (방화벽)
&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;인터넷 이용률 통계 수집 가능&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;접속 우회&amp;nbsp;
&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;역 ip 추적 방지, 우회가능&lt;/li&gt;
&lt;/ul&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;/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;포워드 프록시(forward proxy) : 프록시 서버가 클라이언트와 원격 서버 사이 어디든 위치, 프록시 서버는 클라이언트가 알려주기 전까지 서버 주소 모름 (내부 -&amp;gt; 외부 특정 사이트 제한)&lt;/li&gt;
&lt;li&gt;리버스 프록시(reverse proxy) : 프록시 서버가 사설 네트워크 상의 서버들 바로 앞단 프론트앤드에 위치하여 서버 제어하고 보호함 (외부 -&amp;gt; 내부 제한)&lt;/li&gt;
&lt;li&gt;오픈 프록시(open proxy) : 모든 인터넷 사용자가 액세스 할 수 있는 프록시 서버로 익면 공개 프록시는 사용자가 웹 브라우징 하거나 다른 인터네 서비스 사용하는 동안 자신의 ip 주소 숨길 수 있음&lt;/li&gt;
&lt;/ul&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;Proxy 방식을 이용하는 네트워크 솔루션들
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Access VPN, L4, WEBFW 등&lt;/li&gt;
&lt;/ul&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;https://www.youtube.com/watch?v=c0_JVomjN7o&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dany-it.tistory.com/107&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dany-it.tistory.com/107&lt;/a&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;br /&gt;&lt;b&gt;3.&amp;nbsp;DHCP의&amp;nbsp;정의,&amp;nbsp;사용하는&amp;nbsp;이유,&amp;nbsp;동작원리&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;b&gt;DHCP(Dynamic Host Configuration Protocol) 동적 호스트 구성 프로토콜 이란?&lt;/b&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;IP 주소를 자동으로 할당해주는 서버 프로토콜
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자신의 네트워크 안에 있는 클라이언트 컴퓨터가 부팅될때 자동으로 IP주소, 서브넷 마스크, 게이트웨이 주소, DNS 서버 주소, 임대기간 등을 할당함
&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;서브넷 마스크 : ip 주소 내의 호스트 주소와 네트워크 주소를 분리&lt;/li&gt;
&lt;li&gt;DNS 서버 : ip 주소의 이름을 사람이 기억할 수 있는 이름으로 변환&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;일반 사용자는 ip 에 관련된 어려운 정보를 알지 못해도, 인터넷 사용하는데 문제없음!&lt;/li&gt;
&lt;li&gt;대부분 가정용 네트워크 에서는 라우터가 ip 주소를 장치에 할당하는 dhcp 서버 역할 함&lt;/li&gt;
&lt;li&gt;예시 ) 공유기 - &lt;a href=&quot;https://namu.wiki/w/%EC%9D%B8%ED%84%B0%EB%84%B7%20%EA%B3%B5%EC%9C%A0%EA%B8%B0&quot; data-v-309f894e=&quot;&quot;&gt;인터넷 공유기&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #373a3c;&quot;&gt;에도 DHCP 서버가 탑재되어 있으며, 각각의 PC에 사설 IP를 할당한다.&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;/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;신뢰성 높은 DHCP IP 주소 구성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동일한 ip주소를 이용하는 두명의 사용자 사이 충돌 방지&lt;/li&gt;
&lt;/ul&gt;
&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;사용자는 네트워크 범위 내에서 어디서든지 모바일 장치 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&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;별도의 IP 할당 서버 불필요로 네트워크 관리 효율성 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;IP 체계의 유연성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최초 사용자에게 지장 주지 않으면서 IP 주소 쉽게 변경 가능&lt;/li&gt;
&lt;/ul&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;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-18 오후 7.56.12.png&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;497&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oL3JH/btrJ3wtgSR2/XxdHeuUNKZR0STL8Ms1ZJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oL3JH/btrJ3wtgSR2/XxdHeuUNKZR0STL8Ms1ZJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oL3JH/btrJ3wtgSR2/XxdHeuUNKZR0STL8Ms1ZJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoL3JH%2FbtrJ3wtgSR2%2FXxdHeuUNKZR0STL8Ms1ZJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;367&quot; data-filename=&quot;스크린샷 2022-08-18 오후 7.56.12.png&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;497&quot;/&gt;&lt;/span&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;DHCP Discover
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴퓨터 pc 키면 dhcp 서버 찾음 (계신가요?)&lt;/li&gt;
&lt;li&gt;ip 주소 알려달라고 자동으로 dhcp 서버에 요청&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;DHCP Offer
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;(dhcp 저 여기있음요)&lt;/li&gt;
&lt;li&gt;주소 xxx 할당 가능한데여?&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;DHCP Request
&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;그럼 주소 xxx 할당 주실래요?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;DHCP Ack &amp;nbsp;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;dhcp 서버가 할당되지 않은 ip 목록 중에서 ip 주소 알려줌 (+ 게이트워이, 서브넷 마스크 주소 등등)&lt;/li&gt;
&lt;/ul&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;사용자는 할당받은 ip주소로 인터넷 사용함&lt;/li&gt;
&lt;li&gt;서버에선 할당된 ip 기록해서 더이상 할당 안되도록 함&lt;/li&gt;
&lt;li&gt;컴퓨터 pc 종료하면 사용중인 ip 주소 반납해서 할당전으로 변경&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;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DHCP는 아무런 인증 과정을 거치지 않기 때문에 사이버 공격에 취약함&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;승인받지 않은 DHCP 서버가 잘못된 정보를 클라이언트에게 전달 할 수도 있다&lt;/li&gt;
&lt;li&gt;승인 받지 않은 클라이언트가 DHCP 서버를 가로채 리소스에 대한 접근 권한 얻을 수도 있다&lt;/li&gt;
&lt;li&gt;악성 클라이언트가 DHCP 리소스를 소모시킬 수 있다&lt;/li&gt;
&lt;li&gt;더 나아가 디도스 공격, 중간자 공격 으로도 이어질 수 있다 =&amp;gt; VPN 이용 권장&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;출처&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=VKKN5H6URVk&quot;&gt;https://www.youtube.com/watch?v=VKKN5H6URVk&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://nordvpn.com/ko/blog/what-is-dhcp/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://nordvpn.com/ko/blog/what-is-dhcp/&lt;/a&gt;&lt;/p&gt;</description>
      <category>IT_study/스터디</category>
      <category>DHCP</category>
      <category>IP</category>
      <category>NAT</category>
      <category>Proxy</category>
      <author>meong_j</author>
      <guid isPermaLink="true">https://meongj-devlog.tistory.com/214</guid>
      <comments>https://meongj-devlog.tistory.com/214#entry214comment</comments>
      <pubDate>Thu, 18 Aug 2022 20:18:52 +0900</pubDate>
    </item>
    <item>
      <title>CDN, CORS, 배포 인프라</title>
      <link>https://meongj-devlog.tistory.com/213</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1.&amp;nbsp;CDN이란 ?&lt;/b&gt;&lt;br /&gt;&lt;b&gt;-&amp;nbsp;CDN&amp;nbsp;정의,&amp;nbsp;작동방식,&amp;nbsp;etc&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(Option)&amp;nbsp;Edge&amp;nbsp;서버&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;CDN(Content Delivery Network) 이란?&lt;/b&gt;&lt;/h4&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;컨텐츠 전달에 특화&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-11 오후 6.56.53.png&quot; data-origin-width=&quot;2504&quot; data-origin-height=&quot;1448&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rd3oM/btrJvQ0hhid/nOxbun9bBSahyj9KMrYC31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rd3oM/btrJvQ0hhid/nOxbun9bBSahyj9KMrYC31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rd3oM/btrJvQ0hhid/nOxbun9bBSahyj9KMrYC31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frd3oM%2FbtrJvQ0hhid%2FnOxbun9bBSahyj9KMrYC31%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;700&quot; height=&quot;405&quot; data-filename=&quot;스크린샷 2022-08-11 오후 6.56.53.png&quot; data-origin-width=&quot;2504&quot; data-origin-height=&quot;1448&quot;/&gt;&lt;/span&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;본사 미국(예. 넷플릭스, 유투브 등등)로 부터 한국, 캐나다, 호주 등등 의 다른 나라에서 서버를 받아 온다면, 굉장히 속도가 느림!!!&lt;/li&gt;
&lt;li&gt;오리진 서버로 부터 각 지역마다 캐시 서버를 두고 해당 컨텐츠 등을 실시간으로 공유하거나 타임별로 저장하고 , 컨텐츠를 본사에 요청할 경우 CDN을 통해서 해당 캐쉬 서버로 부터 응답을 준다&lt;/li&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;CDN 기술의 장점&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.04.22.png&quot; data-origin-width=&quot;2444&quot; data-origin-height=&quot;1324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOx6rN/btrJt4FeXq1/i2eQxRLzkhUTzoxB72ZpY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOx6rN/btrJt4FeXq1/i2eQxRLzkhUTzoxB72ZpY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOx6rN/btrJt4FeXq1/i2eQxRLzkhUTzoxB72ZpY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOx6rN%2FbtrJt4FeXq1%2Fi2eQxRLzkhUTzoxB72ZpY1%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;700&quot; height=&quot;379&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.04.22.png&quot; data-origin-width=&quot;2444&quot; data-origin-height=&quot;1324&quot;/&gt;&lt;/span&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;CDN 이 없다면 컨텐츠를 담고 있는 오리진 서버는&amp;nbsp; 모든 앤드유저 들에게 트래픽 을 받게 되는데 그에 따라 엄청난 부하 유발함
&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;/li&gt;
&lt;li&gt;그래서 CDN은 이런 본 서버를 대신해서&amp;nbsp; 각 각의 앤드유저들에 각 각의 가까운 위치에 응답함으로 써 오리진 서버의 트래픽 부하를 나눠주고 앤드유저의 웹 경험을 개선시켜 준다&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;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #565656;&quot;&gt;특정 국가나 지역만을 타깃으로 하는 웹 서비스를 운영한다면 CDN 서비스를 활용할 필요가 없다&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;&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-08-11 오후 7.11.58.png&quot; data-origin-width=&quot;1638&quot; data-origin-height=&quot;1340&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bx8qor/btrJrfOju3i/ZSSMg5mu01czp8kpHB5gr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bx8qor/btrJrfOju3i/ZSSMg5mu01czp8kpHB5gr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bx8qor/btrJrfOju3i/ZSSMg5mu01czp8kpHB5gr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbx8qor%2FbtrJrfOju3i%2FZSSMg5mu01czp8kpHB5gr0%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;700&quot; height=&quot;573&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.11.58.png&quot; data-origin-width=&quot;1638&quot; data-origin-height=&quot;1340&quot;/&gt;&lt;/span&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;PC 나 모바일 사용자가 어떤 주소에 접근 하려고 할때, http 통신으로 css, 자바스크립트, 이미지 등의 컨텐츠 등을 서버로 부터 요청한다&lt;/li&gt;
&lt;li&gt;DNS서버가 받아서 요청된 사이트의 ip를 조회해서 CDN으로 요청한다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;본사 전화번호가 아닌 체인점(CDN)의 전화번호를 적는다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;로컬 CDN 중에서 적합한 CDN을 찾아서 앤드 유저를 맵핑하고 해당 서버는 요청된 캐싱 저장된 버전으로 응답을 준다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;세계 각지에 있는 엣지(Edge)서버 들 중에서 클라이언트와 가장 빠르게 서비스를 제공할 수 있는 엣지를 선택&lt;br /&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;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;만약 오래된 컨텐츠거나 부적합한 컨텐츠라면, CDN이 오리진 서버로 부터 캐쉬를 보내달라고 요청을 하고 CDN에 다시 저장해둔다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정적 캐싱 : 캐싱할 것을 미리 보낸다&amp;nbsp;&lt;br /&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;/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;있으면 바로 사용자에게 보낸다(cache hit)&lt;/li&gt;
&lt;li&gt;없으면 그 때 서버에 요청해서 받아온다 (cache miss)&lt;/li&gt;
&lt;li&gt;ex) 체인점들이 물건 없으면 본사로 물건 발주하는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;CDN 활용 사례&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;온라인 동영상 스트리밍 서비스를 제공하는 넷플릭스(Netflix)는 전 세계의 사용자들에게 안정적인 서비스를 제공하기 위해 2011년에 자체 CDN을 구축했습니다. 넷플릭스의 서비스 범위가 전 세계에 걸쳐 있고, 구독자의 절반 이상이 미국 외의 지역에 분포하고 있어 콘텐츠를 안정적이고 빠르게 세계 각지로 전달하기 위해서는 CDN 기술이 필수적이기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 더불어 세계 최대 숙박 공유 서비스인 에어비앤비(Airbnb) 또한 CDN 기술을 활용해 전 세계 고객에게 언제 어디서나 숙박 시설과 각종 액티비티를 예약할 수 있는 서비스 환경을 구축했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;국내에서는 NC소프트나 카카오게임즈 같은 온라인 게임 기업이 CDN을 활용, 북미나 유럽과 같이 지리적으로 먼 지역의 사용자에게 안정적이고 빠른 게임 플레이 환경을 제공하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;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;size14&quot;&gt;출처 :&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=x0sEyNYAF_g&quot;&gt;https://www.youtube.com/watch?v=x0sEyNYAF_g&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=_kcoeK0ITkQ&quot;&gt;https://www.youtube.com/watch?v=_kcoeK0ITkQ&lt;/a&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2.&amp;nbsp;CORS&amp;nbsp;란?&lt;/b&gt;&lt;br /&gt;&lt;b&gt;-&amp;nbsp;정의,&amp;nbsp;대처방법,&amp;nbsp;etc&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;교차 출처 리소스 공유&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #1b1b1b;&quot;&gt;(Cross-Origin Resource Sharing,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://developer.mozilla.org/ko/docs/Glossary/CORS&quot;&gt;CORS&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #1b1b1b;&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-filename=&quot;스크린샷 2022-08-11 오후 7.41.04.png&quot; data-origin-width=&quot;1516&quot; data-origin-height=&quot;802&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qAcBr/btrJu5jnmiv/NXTV8fa5OLDBQO8KXVGseK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qAcBr/btrJu5jnmiv/NXTV8fa5OLDBQO8KXVGseK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qAcBr/btrJu5jnmiv/NXTV8fa5OLDBQO8KXVGseK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqAcBr%2FbtrJu5jnmiv%2FNXTV8fa5OLDBQO8KXVGseK%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;700&quot; height=&quot;370&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.41.04.png&quot; data-origin-width=&quot;1516&quot; data-origin-height=&quot;802&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;size18&quot;&gt;&lt;b&gt;SOP(Same Origin Policy)&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.43.43.png&quot; data-origin-width=&quot;1568&quot; data-origin-height=&quot;802&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/driGyP/btrJwuCKPzc/INEFAFhcnqvKyxNNwXFTMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/driGyP/btrJwuCKPzc/INEFAFhcnqvKyxNNwXFTMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/driGyP/btrJwuCKPzc/INEFAFhcnqvKyxNNwXFTMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdriGyP%2FbtrJwuCKPzc%2FINEFAFhcnqvKyxNNwXFTMK%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;700&quot; height=&quot;358&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.43.43.png&quot; data-origin-width=&quot;1568&quot; data-origin-height=&quot;802&quot;/&gt;&lt;/span&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;Protocol, host, port 세가지가 모두 같아야지 같은 출처임&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-filename=&quot;스크린샷 2022-08-11 오후 7.47.06.png&quot; data-origin-width=&quot;1412&quot; data-origin-height=&quot;814&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgP5ew/btrJrQHylrQ/QYtnxXNCm9i8e0PvGBFEQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgP5ew/btrJrQHylrQ/QYtnxXNCm9i8e0PvGBFEQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgP5ew/btrJrQHylrQ/QYtnxXNCm9i8e0PvGBFEQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgP5ew%2FbtrJrQHylrQ%2FQYtnxXNCm9i8e0PvGBFEQ1%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;700&quot; height=&quot;404&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.47.06.png&quot; data-origin-width=&quot;1412&quot; data-origin-height=&quot;814&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-08-11 오후 7.47.22.png&quot; data-origin-width=&quot;1426&quot; data-origin-height=&quot;816&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/38HuM/btrJt4L4103/a2gMkJJFLp5fOzRZNNk2uK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/38HuM/btrJt4L4103/a2gMkJJFLp5fOzRZNNk2uK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/38HuM/btrJt4L4103/a2gMkJJFLp5fOzRZNNk2uK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F38HuM%2FbtrJt4L4103%2Fa2gMkJJFLp5fOzRZNNk2uK%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;700&quot; height=&quot;401&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.47.22.png&quot; data-origin-width=&quot;1426&quot; data-origin-height=&quot;816&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-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.47.35.png&quot; data-origin-width=&quot;1470&quot; data-origin-height=&quot;798&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/05PVe/btrJwYcxnKt/UbzosqRKwRNUPzaHrphu60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/05PVe/btrJwYcxnKt/UbzosqRKwRNUPzaHrphu60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/05PVe/btrJwYcxnKt/UbzosqRKwRNUPzaHrphu60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F05PVe%2FbtrJwYcxnKt%2FUbzosqRKwRNUPzaHrphu60%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;700&quot; height=&quot;380&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.47.35.png&quot; data-origin-width=&quot;1470&quot; data-origin-height=&quot;798&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-08-11 오후 7.48.57.png&quot; data-origin-width=&quot;1380&quot; data-origin-height=&quot;782&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5EeCB/btrJvQ0lnDj/tCdpzkWNEKGmGkvnJPTQ3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5EeCB/btrJvQ0lnDj/tCdpzkWNEKGmGkvnJPTQ3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5EeCB/btrJvQ0lnDj/tCdpzkWNEKGmGkvnJPTQ3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5EeCB%2FbtrJvQ0lnDj%2FtCdpzkWNEKGmGkvnJPTQ3K%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;700&quot; height=&quot;397&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.48.57.png&quot; data-origin-width=&quot;1380&quot; data-origin-height=&quot;782&quot;/&gt;&lt;/span&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;해커는 사용자의 인증토큰(id, pw 등)을 가지고 페이스북 포스트 게시&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-filename=&quot;스크린샷 2022-08-11 오후 7.50.01.png&quot; data-origin-width=&quot;1422&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEKvKx/btrJt4L5fCU/KMawEh3wp5vsHRt06641v1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEKvKx/btrJt4L5fCU/KMawEh3wp5vsHRt06641v1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEKvKx/btrJt4L5fCU/KMawEh3wp5vsHRt06641v1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEKvKx%2FbtrJt4L5fCU%2FKMawEh3wp5vsHRt06641v1%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;700&quot; height=&quot;394&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.50.01.png&quot; data-origin-width=&quot;1422&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&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;페이스북 같은 경우에는 오리진 주소가 어디서 왔는지 먼저 확인함&lt;/li&gt;
&lt;li&gt;만약 가지고 있던 출처와 다르다면, 다른 출처로 판단 -&amp;gt; cross origin&lt;/li&gt;
&lt;li&gt;요청을 받아들일 수 없다고 return&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-filename=&quot;스크린샷 2022-08-11 오후 7.52.17.png&quot; data-origin-width=&quot;1560&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CuPA0/btrJwYp4NfO/XKuVretM2lwQasQCCS0iL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CuPA0/btrJwYp4NfO/XKuVretM2lwQasQCCS0iL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CuPA0/btrJwYp4NfO/XKuVretM2lwQasQCCS0iL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCuPA0%2FbtrJwYp4NfO%2FXKuVretM2lwQasQCCS0iL0%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;1560&quot; height=&quot;564&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.52.17.png&quot; data-origin-width=&quot;1560&quot; data-origin-height=&quot;564&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-08-11 오후 7.52.44.png&quot; data-origin-width=&quot;1462&quot; data-origin-height=&quot;632&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6HdTC/btrJvFR2odA/yxXDmZf82WgfelrnjjIgYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6HdTC/btrJvFR2odA/yxXDmZf82WgfelrnjjIgYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6HdTC/btrJvFR2odA/yxXDmZf82WgfelrnjjIgYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6HdTC%2FbtrJvFR2odA%2FyxXDmZf82WgfelrnjjIgYK%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;1462&quot; height=&quot;632&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.52.44.png&quot; data-origin-width=&quot;1462&quot; data-origin-height=&quot;632&quot;/&gt;&lt;/span&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;cors 가 다른 출처에 접근 가능 할 수 있도록 해줌&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;span&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&gt;&lt;a href=&quot;https://domain-a.com&quot;&gt;https://domain-a.com&lt;/a&gt;의 프론트엔드 JavaScript 코드가 XMLHttpRequest를 사용하여&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://domain-b.com/data.json&quot;&gt;https://domain-b.com/data.json&lt;/a&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;cors 접근 제어 시나리오&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;프리플라이트 요청(Preflight request)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.56.09.png&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;740&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vVGrB/btrJsuYg84P/SLASlAkwq1SVHVf5DvjlK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vVGrB/btrJsuYg84P/SLASlAkwq1SVHVf5DvjlK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vVGrB/btrJsuYg84P/SLASlAkwq1SVHVf5DvjlK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvVGrB%2FbtrJsuYg84P%2FSLASlAkwq1SVHVf5DvjlK1%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;1448&quot; height=&quot;740&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.56.09.png&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;740&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-08-11 오후 7.59.16.png&quot; data-origin-width=&quot;1354&quot; data-origin-height=&quot;812&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/doEaG5/btrJt4rQhfj/atvDMZE2QlAnIXMSXcE9QK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/doEaG5/btrJt4rQhfj/atvDMZE2QlAnIXMSXcE9QK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/doEaG5/btrJt4rQhfj/atvDMZE2QlAnIXMSXcE9QK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdoEaG5%2FbtrJt4rQhfj%2FatvDMZE2QlAnIXMSXcE9QK%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;1354&quot; height=&quot;812&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.59.16.png&quot; data-origin-width=&quot;1354&quot; data-origin-height=&quot;812&quot;/&gt;&lt;/span&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;사전 확인 작업 -&amp;gt; 요청 가능 or 요청 불가능 한지 서버한테 일단 물어봄&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단순 요청 (simple request)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.59.56.png&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;780&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Rj6fy/btrJt4rQm9N/g5PrmGfugV2yRlmcGkMJh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Rj6fy/btrJt4rQm9N/g5PrmGfugV2yRlmcGkMJh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Rj6fy/btrJt4rQm9N/g5PrmGfugV2yRlmcGkMJh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRj6fy%2FbtrJt4rQm9N%2Fg5PrmGfugV2yRlmcGkMJh1%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;1448&quot; height=&quot;780&quot; data-filename=&quot;스크린샷 2022-08-11 오후 7.59.56.png&quot; data-origin-width=&quot;1448&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인증 정보 포함요청(Credential request)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-11 오후 8.01.27.png&quot; data-origin-width=&quot;1244&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFDJ4C/btrJt46owOW/K0rFlVXzsO0PK2HLmKpLYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFDJ4C/btrJt46owOW/K0rFlVXzsO0PK2HLmKpLYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFDJ4C/btrJt46owOW/K0rFlVXzsO0PK2HLmKpLYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFDJ4C%2FbtrJt46owOW%2FK0rFlVXzsO0PK2HLmKpLYk%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;1244&quot; height=&quot;720&quot; data-filename=&quot;스크린샷 2022-08-11 오후 8.01.27.png&quot; data-origin-width=&quot;1244&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;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;cors 해결방법&lt;/b&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;chrome 확장 프로그램 이용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Allow CORS: Access-Control-Allow-Origin' 크롬 확장 프로그램을 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;서버에서 Access-Control-Allow-Origin 세팅하기&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1660218101058&quot; class=&quot;less&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//^ CORS 허용
res.setHeader('Access-Control-Allow-origin', '*');
res.setHeader('Access-Control-Allow-Credentials', 'true'); // 쿠키 주고받기 허용&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&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;요청해야 하는 url 앞에 프록시 서버 url 붙여서 요청&lt;/li&gt;
&lt;/ul&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;size14&quot;&gt;출처:&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;https://www.youtube.com/watch?v=bW31xiNB8Nc&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;https://www.youtube.com/watch?v=-2TgkKYmJt4&lt;/p&gt;
&lt;p data-ke-size=&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;br /&gt;&lt;b&gt;3.구성해봤던,&amp;nbsp;혹은&amp;nbsp;알고&amp;nbsp;있는&amp;nbsp;배포&amp;nbsp;인프라에&amp;nbsp;대해서&amp;nbsp;설명하기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;ex)&amp;nbsp;WAS로&amp;nbsp;장고,&amp;nbsp;웹서버로&amp;nbsp;엔진엑스&amp;nbsp;사용,&amp;nbsp;+&amp;nbsp;gunicorn&amp;nbsp;하고&amp;nbsp;배포는&amp;nbsp;AWS&amp;nbsp;EC2&amp;nbsp;사용..&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;spring boot, jar, tomcat 내장서버 사용 maven 빌드 후 배포&lt;/p&gt;
&lt;p data-ke-size=&quot;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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-11 오후 8.44.09.png&quot; data-origin-width=&quot;2154&quot; data-origin-height=&quot;804&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQKB8K/btrJwtDVQ48/efT8kgWJN8fDmYG2d9PQhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQKB8K/btrJwtDVQ48/efT8kgWJN8fDmYG2d9PQhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQKB8K/btrJwtDVQ48/efT8kgWJN8fDmYG2d9PQhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQKB8K%2FbtrJwtDVQ48%2FefT8kgWJN8fDmYG2d9PQhk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;224&quot; data-filename=&quot;스크린샷 2022-08-11 오후 8.44.09.png&quot; data-origin-width=&quot;2154&quot; data-origin-height=&quot;804&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;기존에 연결된 서비스를 해제&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;하고 새로운 버전으로 갈아끼운 뒤 다시 서비스를 하는 방식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;무중단 배포&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;여러 기술들을 이용해서 배포되는 도중에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;연결을 해제하지 않고&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;새로운 버전으로 갈아끼운 뒤&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;지속해서 서비스를 유지&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;하는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Rolling Deployment&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Blue-Green Deployment&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Canary Deployment&lt;/li&gt;
&lt;li&gt;L4 Switch&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;&lt;b&gt;1. Rolling Deployment&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-11 오후 8.46.13.png&quot; data-origin-width=&quot;2040&quot; data-origin-height=&quot;980&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wPURb/btrJuRy0Jww/hlGckTgr937lYwdWAJPKzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wPURb/btrJuRy0Jww/hlGckTgr937lYwdWAJPKzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wPURb/btrJuRy0Jww/hlGckTgr937lYwdWAJPKzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwPURb%2FbtrJuRy0Jww%2FhlGckTgr937lYwdWAJPKzk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;288&quot; data-filename=&quot;스크린샷 2022-08-11 오후 8.46.13.png&quot; data-origin-width=&quot;2040&quot; data-origin-height=&quot;980&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;배포된 서버를 한 대씩 구버전에서&lt;span&gt;&amp;nbsp;&lt;/span&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;로드밸런서는 배포된 서버에 연결을 일시적으로 끊는다.&lt;/li&gt;
&lt;li&gt;연결이 끊어진 서버에 새롭게 업데이트된 서버를 교체한다.&lt;/li&gt;
&lt;li&gt;교체가 완료되면 나머지 버전을 위와 같은 과정으로 업데이트 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&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;&amp;nbsp;&lt;/span&gt;&lt;b&gt;그대로 유지하고 무중단 배포&lt;/b&gt;가 가능하다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단점은 조금 치명적이다.&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;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. Blue-Green Deployment&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;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;Rolling Update의 단점을 보완할 수 있는 방법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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-08-11 오후 8.47.59.png&quot; data-origin-width=&quot;2090&quot; data-origin-height=&quot;1094&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MO9P1/btrJuSEGqXe/JkZns6gvQCFRZnlrCYhKIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MO9P1/btrJuSEGqXe/JkZns6gvQCFRZnlrCYhKIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MO9P1/btrJuSEGqXe/JkZns6gvQCFRZnlrCYhKIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMO9P1%2FbtrJuSEGqXe%2FJkZns6gvQCFRZnlrCYhKIK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;314&quot; data-filename=&quot;스크린샷 2022-08-11 오후 8.47.59.png&quot; data-origin-width=&quot;2090&quot; data-origin-height=&quot;1094&quot;/&gt;&lt;/span&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;서버를 그대로 본떠 하나의 새로운 서버를 만든다. (새로운 서버는 로드밸런서에 연결되어있지 않다.)&lt;/li&gt;
&lt;li&gt;새로운 서버 전체를 업데이트한다.&lt;/li&gt;
&lt;li&gt;기존 서버에 연결된 연결을 새로운 서버의 연결로 변경한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;size14&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;비용적인 측면에서 제약이 생긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;클라우드 환경&lt;/b&gt;&lt;span style=&quot;font-size: 0.87em; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;이나 Docker과 같은 가상환경이 더 어울린다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;출처 : &lt;a href=&quot;https://wonit.tistory.com/m/330&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://wonit.tistory.com/m/330&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT_study/스터디</category>
      <category>CDN</category>
      <category>CORS</category>
      <category>배포인프라</category>
      <author>meong_j</author>
      <guid isPermaLink="true">https://meongj-devlog.tistory.com/213</guid>
      <comments>https://meongj-devlog.tistory.com/213#entry213comment</comments>
      <pubDate>Thu, 11 Aug 2022 20:50:17 +0900</pubDate>
    </item>
    <item>
      <title>Rest api, 클러스터형 vs Non클러스터형, 가비지콜렉터</title>
      <link>https://meongj-devlog.tistory.com/212</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Rest api 설명&lt;/b&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-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-04 오후 3.54.22.png&quot; data-origin-width=&quot;1322&quot; data-origin-height=&quot;972&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIu1Ro/btrIWNDit0y/162QKsn9s1kmLgUqeAaa91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIu1Ro/btrIWNDit0y/162QKsn9s1kmLgUqeAaa91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIu1Ro/btrIWNDit0y/162QKsn9s1kmLgUqeAaa91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIu1Ro%2FbtrIWNDit0y%2F162QKsn9s1kmLgUqeAaa91%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;500&quot; height=&quot;368&quot; data-filename=&quot;스크린샷 2022-08-04 오후 3.54.22.png&quot; data-origin-width=&quot;1322&quot; data-origin-height=&quot;972&quot;/&gt;&lt;/span&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;다른 사람들이 이해하기 어렵다&amp;nbsp;&lt;/li&gt;
&lt;li&gt;명확한 패턴이 없다&lt;/li&gt;
&lt;li&gt;URL 에는 동사를 쓸 수없다 -&amp;gt; 명사로 구분해야함(add, create, delete...CRUD)&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;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;uniform interface 스타일&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;b&gt;자원&lt;/b&gt;에 대한 식별&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 자원은 객체 (자원 = URI)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;상태는 변화 가능 -&amp;gt; 변하지 않는 식별자 필요
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;고유한 식별자로 URI를 통해 자원을 식별해야한다&lt;/li&gt;
&lt;li&gt;식별자를 통해 특정한 데이터를 지정할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(영화에 대한 정보면 movies로 자원을 지정)&lt;/p&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.&amp;nbsp; &lt;b&gt;표현&lt;/b&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&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;/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-filename=&quot;스크린샷 2022-08-04 오후 3.37.50.png&quot; data-origin-width=&quot;1836&quot; data-origin-height=&quot;1036&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z8FfL/btrIXxNJjLu/10iQ6QDk3Of9GYFlVpRef0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z8FfL/btrIXxNJjLu/10iQ6QDk3Of9GYFlVpRef0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z8FfL/btrIXxNJjLu/10iQ6QDk3Of9GYFlVpRef0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz8FfL%2FbtrIXxNJjLu%2F10iQ6QDk3Of9GYFlVpRef0%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;700&quot; height=&quot;395&quot; data-filename=&quot;스크린샷 2022-08-04 오후 3.37.50.png&quot; data-origin-width=&quot;1836&quot; data-origin-height=&quot;1036&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-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-04 오후 3.39.07.png&quot; data-origin-width=&quot;1806&quot; data-origin-height=&quot;932&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb3RPw/btrIXP1GuUW/tmiFSvVYT9Kk2T6l8WbfP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb3RPw/btrIXP1GuUW/tmiFSvVYT9Kk2T6l8WbfP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb3RPw/btrIXP1GuUW/tmiFSvVYT9Kk2T6l8WbfP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb3RPw%2FbtrIXP1GuUW%2FtmiFSvVYT9Kk2T6l8WbfP1%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;700&quot; height=&quot;361&quot; data-filename=&quot;스크린샷 2022-08-04 오후 3.39.07.png&quot; data-origin-width=&quot;1806&quot; data-origin-height=&quot;932&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트 &amp;lt;-&amp;gt; 서버 자원의 상태 정보를 전달한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 보통 json, xml 등으로 데이터를 주고 받는 게 일반적&lt;/p&gt;
&lt;p data-ke-size=&quot;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;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-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-04 오후 3.41.29.png&quot; data-origin-width=&quot;1726&quot; data-origin-height=&quot;920&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDxD8X/btrIXPtQorh/VC605aDkFfQHWkxskLcRnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDxD8X/btrIXPtQorh/VC605aDkFfQHWkxskLcRnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDxD8X/btrIXPtQorh/VC605aDkFfQHWkxskLcRnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDxD8X%2FbtrIXPtQorh%2FVC605aDkFfQHWkxskLcRnK%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;700&quot; height=&quot;373&quot; data-filename=&quot;스크린샷 2022-08-04 오후 3.41.29.png&quot; data-origin-width=&quot;1726&quot; data-origin-height=&quot;920&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4.&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-08-04 오후 3.44.34.png&quot; data-origin-width=&quot;1746&quot; data-origin-height=&quot;986&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btEbKe/btrIXxUuYbU/HrKnv3rvPUOSIZgucLWFrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btEbKe/btrIXxUuYbU/HrKnv3rvPUOSIZgucLWFrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btEbKe/btrIXxUuYbU/HrKnv3rvPUOSIZgucLWFrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtEbKe%2FbtrIXxUuYbU%2FHrKnv3rvPUOSIZgucLWFrK%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;700&quot; height=&quot;395&quot; data-filename=&quot;스크린샷 2022-08-04 오후 3.44.34.png&quot; data-origin-width=&quot;1746&quot; data-origin-height=&quot;986&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-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-04 오후 3.47.39.png&quot; data-origin-width=&quot;1766&quot; data-origin-height=&quot;988&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DQ6RN/btrIVgsbUyz/vdMIg2k5rrQElHiQB2UGo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DQ6RN/btrIVgsbUyz/vdMIg2k5rrQElHiQB2UGo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DQ6RN/btrIVgsbUyz/vdMIg2k5rrQElHiQB2UGo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDQ6RN%2FbtrIVgsbUyz%2FvdMIg2k5rrQElHiQB2UGo1%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;700&quot; height=&quot;392&quot; data-filename=&quot;스크린샷 2022-08-04 오후 3.47.39.png&quot; data-origin-width=&quot;1766&quot; data-origin-height=&quot;988&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;size18&quot;&gt;&lt;b&gt;HTTP methods&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; GET : 읽기, 조회&lt;/li&gt;
&lt;li&gt;POST : 생성&lt;/li&gt;
&lt;li&gt;PUT : UPDATE&lt;/li&gt;
&lt;li&gt;DELETE : 삭제&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;client &amp;lt;-&amp;gt; Server&amp;nbsp; 사이 http 프로토콜로 통신 (여러 방법 중 하나)&lt;/p&gt;
&lt;p data-ke-size=&quot;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;/movies로 get요청 : 영화(명사)를 불러와라 요청&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/movies로 post요청 :&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;gt; 같은 URL로 http methods을 다르게 요청할 수 있다&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;코드 단축&amp;nbsp;&lt;/li&gt;
&lt;li&gt;사용하기 쉬움&lt;/li&gt;
&lt;li&gt;구분 쉬움, 훨씬 더 이해하기 쉽다&lt;/li&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;blockquote data-ke-style=&quot;style3&quot;&gt;HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.&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;size14&quot;&gt;출처 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Nxi8Ur89Akw&quot;&gt;https://www.youtube.com/watch?v=Nxi8Ur89Akw&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=4DxHX95Lq2U&quot;&gt;https://www.youtube.com/watch?v=4DxHX95Lq2U&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;br /&gt;&lt;b&gt;인덱스의 내부구조 클러스터형 DB vs Non클러스트형 DB&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&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;일반적으로 책의 색인이라고 생각하면 됨&lt;/li&gt;
&lt;li&gt;인덱스가 없다면 하나 하나 찾아야함 -&amp;gt; 오래걸림&lt;/li&gt;
&lt;li&gt;하지만 반드시 필요한 것은 아니다!&amp;nbsp;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인덱스가 필요한 상황에 적절히 쓴다 -&amp;gt; 꼭 사용한다고 좋은 건 아니다&lt;/li&gt;
&lt;li&gt;데이터 양이 많을 경우 유리&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;엄청 빨리 찾는다 (SELECT문 검색 속도 향상 -&amp;gt; 전체 시스템 성능 향상)&lt;/li&gt;
&lt;/ul&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;인덱스도 공간차지 해서 데이터베이스 안에 추가적인 공간 필요함&lt;/li&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;인덱스의 종류&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;1) 클러스터형 인덱스(Clustered Index)&amp;nbsp;&lt;/u&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;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;A ~Z , ㄱ~ㅎ 정렬&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;ex) member_id 를&lt;/span&gt;&lt;u style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; primary key&lt;/u&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;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;KEY_NAME = PRIMARY KEY&lt;/li&gt;
&lt;li&gt;한 테이블 당 1개만 지정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;알아서 정렬되어서 들어가짐&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #666666; color: #ffffff;&quot;&gt;PRIMARY KEY, UNIQUE NOT NULL&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;생성시 알아서 생성됨 -&amp;gt; PRIMARY KEY가 더 우선시 됨&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-04 오후 5.11.46.png&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GIn6L/btrIPWaeWmV/xsmomrW8t75LANLZBgtezk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GIn6L/btrIPWaeWmV/xsmomrW8t75LANLZBgtezk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GIn6L/btrIPWaeWmV/xsmomrW8t75LANLZBgtezk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGIn6L%2FbtrIPWaeWmV%2FxsmomrW8t75LANLZBgtezk%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;500&quot; height=&quot;207&quot; data-filename=&quot;스크린샷 2022-08-04 오후 5.11.46.png&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;368&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;u&gt;2) 보조 인덱스 , 넌클러스터드 인덱스(Secondary Index, NonClustered Index )&lt;/u&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;/li&gt;
&lt;li&gt;UNIQUE KEY(고유키) 로 지정하면 자동으로 보조 인덱스가 된다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;UNIQUE 또는 UNIQUE NULL로 지정한 열에 보조 인덱스 생성&lt;/li&gt;
&lt;/ul&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;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-04 오후 5.18.23.png&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3h17I/btrIXAjrP1w/g3v8HKo8PoebjRNRxRuCUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3h17I/btrIXAjrP1w/g3v8HKo8PoebjRNRxRuCUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3h17I/btrIXAjrP1w/g3v8HKo8PoebjRNRxRuCUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3h17I%2FbtrIXAjrP1w%2Fg3v8HKo8PoebjRNRxRuCUk%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;500&quot; height=&quot;320&quot; data-filename=&quot;스크린샷 2022-08-04 오후 5.18.23.png&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;634&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;https://www.youtube.com/watch?v=KZmW6VaY5BU&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;br /&gt;&lt;b&gt;가비지콜렉터(Gabage Collecter)&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; 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;프로그램 개발시 유효하지 않은 메모리 낭비되는 문제 발생 -&amp;gt; Gabage&amp;nbsp;&lt;/li&gt;
&lt;li&gt;C언어 사용시 개발자가 직접 메모리 해제를 해줘야 했지만, Java 나 Kotlin 의 경우 JVM(자바 가상머신)에 의해 자동 메모리 정리해준다
&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;/li&gt;
&lt;/ul&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. 프로그램 실행시 메모리 관리하는 OS에 의해 프로그램 실행에 필요한 메모리 요청&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 메모리를 어디에 저장할껀지 그 주소를 할당함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; (그 주소를 offset 주소라고 함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 사용중인 메모리 인식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 사용하지 않은 메모리 인식&lt;br /&gt;5. 가비지 메모리로 사용하고 있던 것을 다른 목적으로 사용하기 위해 메모리 해제함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;한계&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;실행 시간에 작업시 성능 하락 피할 수 없음&lt;/li&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 참고하면 좋을 만한 곳&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;https://www.youtube.com/watch?v=24f2-eJAeII&lt;/p&gt;</description>
      <category>IT_study/스터디</category>
      <category>gabagecollecter</category>
      <category>index</category>
      <category>restAPI</category>
      <author>meong_j</author>
      <guid isPermaLink="true">https://meongj-devlog.tistory.com/212</guid>
      <comments>https://meongj-devlog.tistory.com/212#entry212comment</comments>
      <pubDate>Thu, 4 Aug 2022 20:17:14 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/Level1] 모의고사 - Java</title>
      <link>https://meongj-devlog.tistory.com/211</link>
      <description>&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;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42840&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/42840&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1659418713509&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;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42840&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bk8RMY/hyPjiIYj7o/ZQgB1Xhee0iuXYKhLKx0pk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/b66atm/hyPhtyypSe/nVLetN8bKHVHA6EAYBghEk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42840&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42840&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bk8RMY/hyPjiIYj7o/ZQgB1Xhee0iuXYKhLKx0pk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/b66atm/hyPhtyypSe/nVLetN8bKHVHA6EAYBghEk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;programmers.co.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;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;  문제&lt;/b&gt;&lt;/span&gt;&lt;/h2&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;수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #263747; color: #b2c0cc; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #263747; color: #b2c0cc; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #263747; color: #b2c0cc; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659420844224&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;수포자 3명이 문제를 자기 방식대로 찍을 때 답이 주어지면 가장 많이 맞추는 사람의 번호를 출력하는 문제
(만약 가장 많이 맞춘 사람이 여러명이면, 순서가 가장 빠른 순 1,2,3,..... 부터 차례대로 출력한다.)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-02 오후 2.48.11.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;724&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PEv2k/btrIO1OylOp/p1A0lD7jRbQTfYZUqvTYd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PEv2k/btrIO1OylOp/p1A0lD7jRbQTfYZUqvTYd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PEv2k/btrIO1OylOp/p1A0lD7jRbQTfYZUqvTYd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPEv2k%2FbtrIO1OylOp%2Fp1A0lD7jRbQTfYZUqvTYd0%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;300&quot; height=&quot;339&quot; data-filename=&quot;스크린샷 2022-08-02 오후 2.48.11.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;724&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;  문제 풀이&lt;/b&gt;&lt;/span&gt;&lt;/h2&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;수포자 1 - (1,2,3,4,5) 5개씩 반복&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;수포자 2 - (2,1,2,3,2,4,2,5) 8개씩 반복&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;수포자 3 - (3,3,1,1,2,2,4,4,5,5) 10개씩 반복&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-02 오후 2.56.08.png&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;132&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vbB3n/btrIISkS48N/NxUOhSC70mWTkoQdwLXAC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vbB3n/btrIISkS48N/NxUOhSC70mWTkoQdwLXAC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vbB3n/btrIISkS48N/NxUOhSC70mWTkoQdwLXAC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvbB3n%2FbtrIISkS48N%2FNxUOhSC70mWTkoQdwLXAC0%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;500&quot; height=&quot;103&quot; data-filename=&quot;스크린샷 2022-08-02 오후 2.56.08.png&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;132&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;답 answers과 비교해서 값이 같은 개수 대로 cnt1, cnt2, cnt3 에 맞춘 개수를 저장한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-02 오후 2.56.30.png&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l2vGN/btrIO18ROlq/qemkkqolaVPYQxAfz0ll21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l2vGN/btrIO18ROlq/qemkkqolaVPYQxAfz0ll21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l2vGN/btrIO18ROlq/qemkkqolaVPYQxAfz0ll21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl2vGN%2FbtrIO18ROlq%2FqemkkqolaVPYQxAfz0ll21%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;500&quot; height=&quot;169&quot; data-filename=&quot;스크린샷 2022-08-02 오후 2.56.30.png&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;212&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;&lt;b&gt;0 % 5 = 0 -&amp;gt; arr1[0] - answer[0] 비교&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;b&gt;1 % 5 = 1 -&amp;gt; arr1[1] - answer[1] 비교&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;b&gt;2 % 5 = 2 -&amp;gt; arr1[2] - answer[2] 비교&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;b&gt;3 % 5 = 3 -&amp;gt; arr1[3] - answer[3] 비교&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;b&gt;4 % 5 = 4&amp;nbsp;-&amp;gt; arr1[4] - answer[4] 비교&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;gt; 5개씩 반복하는 구간&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;5 % 5 = 0 -&amp;gt; arr1[0] - answer[5] 비교&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;6 % 5 = 1&amp;nbsp;-&amp;gt; arr1[1] - answer[6] 비교&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;7 % 5 = 2&amp;nbsp;-&amp;gt; arr1[2] - answer[7] 비교&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;=&amp;gt; 5개씩 반복&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-02 오후 3.01.18.png&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/birLno/btrIJV3muGe/EL7uOEdg8ikf02q9ZnfFMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/birLno/btrIJV3muGe/EL7uOEdg8ikf02q9ZnfFMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/birLno/btrIJV3muGe/EL7uOEdg8ikf02q9ZnfFMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbirLno%2FbtrIJV3muGe%2FEL7uOEdg8ikf02q9ZnfFMK%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;500&quot; height=&quot;82&quot; data-filename=&quot;스크린샷 2022-08-02 오후 3.01.18.png&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;맞춘 개수 들끼리 비교해서 max 값을 구한다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-02 오후 3.02.08.png&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bufLQ0/btrIORZxaGu/1tM7IDkfT1kRR4IY5Z3XT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bufLQ0/btrIORZxaGu/1tM7IDkfT1kRR4IY5Z3XT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bufLQ0/btrIORZxaGu/1tM7IDkfT1kRR4IY5Z3XT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbufLQ0%2FbtrIORZxaGu%2F1tM7IDkfT1kRR4IY5Z3XT0%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;500&quot; height=&quot;325&quot; data-filename=&quot;스크린샷 2022-08-02 오후 3.02.08.png&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;468&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;&lt;b&gt;여기서 조건 ! &lt;/b&gt;&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: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;max 에 포함되는 녀석들만 array 배열에 수포자1번 index, 수포자 2번 index, 수포자 3번 index....순서대로 저장한다.&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;순서대로 저장하기 위해 int[] 배열이 아닌 Arraylist 배열을 사용했다.&lt;/span&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: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;처음 반복구간을 어떻게 답과 비교하는지 for문 3개를 돌렸었다.. 하지만 너무 비효율 적인 방법이었고...&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;나머지 값과 비교해서 배열을 비교하는 방법이 있었다.. -&amp;gt; 이런 생각이 왜안났는지 화가남,,&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;  코드&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1659420370531&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package PG.Level1;

import java.util.ArrayList;

public class PG42840_모의고사 {
    public int[] solution(int[] answers) {
        int cnt1=0, cnt2=0, cnt3=0;
        int max = 0;
        int[] arr1 = {1,2,3,4,5}; //5
        int[] arr2 = {2,1,2,3,2,4,2,5}; //8
        int[] arr3 = {3,3,1,1,2,2,4,4,5,5}; //10

        for (int i=0; i&amp;lt;answers.length; i++) {
            if (answers[i] == arr1[i%5]) cnt1++;
            if (answers[i] == arr2[i%8]) cnt2++;
            if (answers[i] == arr3[i%10]) cnt3++;
        }

        // max값 구하기
        max = Math.max(cnt3, Math.max(cnt1, cnt2));

        // max 여러개 인 경우 1,2,3..순서대로 출력하기
        ArrayList&amp;lt;Integer&amp;gt; tmp = new ArrayList&amp;lt;Integer&amp;gt;();
        if(cnt1 == max) tmp.add(1);
        if(cnt2 == max) tmp.add(2);
        if(cnt3 == max) tmp.add(3);

        int[] answer = new int[tmp.size()];

        for (int i=0; i&amp;lt;tmp.size(); i++) {
            answer[i] = tmp.get(i);
        }

        return answer;
    }

    public static void main(String[] args) {
        PG42840_모의고사 t = new PG42840_모의고사();
        int[] answers = {1,2,3,4,5};
        int[] answers2 = {1,3,2,4,2};
        t.solution(answers);
        t.solution(answers2);

    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT_study/Coding test</category>
      <author>meong_j</author>
      <guid isPermaLink="true">https://meongj-devlog.tistory.com/211</guid>
      <comments>https://meongj-devlog.tistory.com/211#entry211comment</comments>
      <pubDate>Tue, 2 Aug 2022 15:12:40 +0900</pubDate>
    </item>
    <item>
      <title>[log4j2, Logback] 로깅 라이브러리</title>
      <link>https://meongj-devlog.tistory.com/210</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;로깅 라이브러리 &lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;스프링 부트 라이브러리를 사용하면 스프링 부트 로깅 라이브러리&lt;/span&gt;&lt;span&gt;( &lt;/span&gt;&lt;span style=&quot;color: #242424;&quot;&gt;spring-boot-starter-logging &lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;가 함께 포함된다&lt;/span&gt;&lt;span&gt;.&lt;br /&gt;&lt;/span&gt;&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;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SLF4J - &lt;a href=&quot;http://www.slf4j.org&quot;&gt;http://www.slf4j.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Logback - &lt;a href=&quot;http://logback.qos.ch&quot;&gt;http://logback.qos.ch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;로그 라이브러리는 &lt;/span&gt;&lt;span&gt;Logback, Log4J, Log4J2 &lt;/span&gt;&lt;span&gt;등등 수 많은 라이브러리가 있는데&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;그것을 통합해서 인터페이스로 제공하는 것이 바로 &lt;/span&gt;&lt;span&gt;SLF4J &lt;/span&gt;&lt;span&gt;라이브러리다&lt;/span&gt;&lt;span&gt;.&lt;br /&gt;&lt;/span&gt;&lt;span&gt;쉽게 이야기해서 &lt;/span&gt;&lt;span&gt;SLF4J&lt;/span&gt;&lt;span&gt;는 인터페이스이고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;그 구현체로 &lt;/span&gt;&lt;span&gt;Logback &lt;/span&gt;&lt;span&gt;같은 로그 라이브러리를 선택하면 된다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;실무에서는 스프링 부트가 기본으로 제공하는 &lt;/span&gt;&lt;span&gt;Logback&lt;/span&gt;&lt;span&gt;을 대부분 사용한다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;로그 선언하는 두가지 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;private Logger log = LoggerFactory.getLogger(getClass());&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private static final Logger log = LoggerFactory.getLogger(Xxx.class)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;@Slf4j : 롬복 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1659250817141&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.springmvc.basic;

import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
public class LogTestController {
//    private final Logger log = LoggerFactory.getLogger(getClass());

    @RequestMapping(&quot;/log-test&quot;)
    public String logTest() {
        String name = &quot;spring&quot;;

        System.out.println(&quot;name=&quot; +name);
        log.trace(&quot;trace log={}&quot;, name);
        log.debug(&quot;debug log={}&quot;, name);
        log.info(&quot;info log={}&quot;, name);
        log.warn(&quot;warn log={}&quot;, name);
        log.error(&quot;error log={}&quot;, name);


        return &quot;ok&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-07-31 오후 8.55.44.png&quot; data-origin-width=&quot;1688&quot; data-origin-height=&quot;364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bB3Bui/btrICOoGq5E/ZJa9txkagE4NCSKH0SZfgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bB3Bui/btrICOoGq5E/ZJa9txkagE4NCSKH0SZfgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bB3Bui/btrICOoGq5E/ZJa9txkagE4NCSKH0SZfgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbB3Bui%2FbtrICOoGq5E%2FZJa9txkagE4NCSKH0SZfgk%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;1688&quot; height=&quot;364&quot; data-filename=&quot;스크린샷 2022-07-31 오후 8.55.44.png&quot; data-origin-width=&quot;1688&quot; data-origin-height=&quot;364&quot;/&gt;&lt;/span&gt;&lt;/figure&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;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;시간&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;로그 레벨&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;프로세스 &lt;/span&gt;&lt;span&gt;ID, &lt;/span&gt;&lt;span&gt;쓰레드 명&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;클래스명&lt;/span&gt;&lt;span&gt;, &lt;/span&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;로그 레벨 설정을 변경해서 출력 결과를 보자&lt;/span&gt;&lt;span&gt;.&lt;br /&gt;LEVEL: &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #242424;&quot;&gt;TRACE &amp;gt; DEBUG &amp;gt; INFO &amp;gt; WARN &amp;gt; ERROR &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;span&gt;debug &lt;/span&gt;&lt;span&gt;출력&lt;br /&gt;- 운영 서버는 &lt;/span&gt;&lt;span&gt;info &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;&amp;nbsp;&lt;/p&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: #242424;&quot;&gt;@Slf4j &lt;/span&gt;&lt;span&gt;로 변경&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;private final Logger log = LoggerFactory.getLogger(getClass());
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&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; @Slf4j 어노테이션을 선언하여 사용할 수 있다&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;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;로그 레벨 설정 &lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;application.properties&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659269018426&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#전체 로그 레벨 설정(기본 info) 
logging.level.root=info

#hello.springmvc 패키지와 그 하위 로그 레벨 설정 
#debug 레벨 부터 모든 로그 다 나온다
logging.level.hello.springmvc=debug&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;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;로그 사용시 장점 &lt;/span&gt;&lt;/b&gt;&lt;/h4&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;성능도 일반 System.out보다 좋다. (내부 버퍼링, 멀티 쓰레드 등등) 그래서 실무에서는 꼭 로그를 사용해야 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;SLF4J - &lt;/span&gt;&lt;span style=&quot;color: #dd4c4f;&quot;&gt;&lt;a href=&quot;http://www.slf4j.org&quot;&gt;http://www.slf4j.org&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Logback - &lt;/span&gt;&lt;span style=&quot;color: #dd4c4f;&quot;&gt;&lt;a href=&quot;http://logback.qos.ch&quot;&gt;http://logback.qos.ch&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링 부트 log -&amp;nbsp;&lt;span style=&quot;color: #dd4c4f; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;a style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot; href=&quot;https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-&quot;&gt;https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-&lt;/a&gt;&lt;span style=&quot;color: #dd4c4f; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; features.html#boot-features-logging&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;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;출처 : 스프링 MVC 1편 - 김영한 강의&lt;/span&gt;&lt;/p&gt;</description>
      <category>Backend/Spring</category>
      <category>slf4j</category>
      <author>meong_j</author>
      <guid isPermaLink="true">https://meongj-devlog.tistory.com/210</guid>
      <comments>https://meongj-devlog.tistory.com/210#entry210comment</comments>
      <pubDate>Sun, 31 Jul 2022 21:08:26 +0900</pubDate>
    </item>
    <item>
      <title>TCP vs UDP, 라우터 vs 스위치</title>
      <link>https://meongj-devlog.tistory.com/209</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;TCP와 UDP는 어떠한 차이를 갖는가?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled.png&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;415&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b40VIE/btrIsRTTm7J/C0TfSAv588r9vUK9XhUSx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b40VIE/btrIsRTTm7J/C0TfSAv588r9vUK9XhUSx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b40VIE/btrIsRTTm7J/C0TfSAv588r9vUK9XhUSx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb40VIE%2FbtrIsRTTm7J%2FC0TfSAv588r9vUK9XhUSx1%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;1044&quot; height=&quot;415&quot; data-filename=&quot;Untitled.png&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;415&quot;/&gt;&lt;/span&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;전송계층에서 사용하는, 데이터를 보내기 위해 사용하는 프로토콜&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;포트 번호 이용해 주소 지정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;데이터 오류 검사를 위한 체크섬 존재&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-filename=&quot;다운로드.png&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cf9joE/btrItviIHcS/9JAJSHOUiJ9hKN3tj0DDz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cf9joE/btrItviIHcS/9JAJSHOUiJ9hKN3tj0DDz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cf9joE/btrItviIHcS/9JAJSHOUiJ9hKN3tj0DDz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcf9joE%2FbtrItviIHcS%2F9JAJSHOUiJ9hKN3tj0DDz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;386&quot; height=&quot;288&quot; data-filename=&quot;다운로드.png&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;TCP는 연결형 서비스로 가상 회선 방식을 제공하고, 높은 신뢰성을 보장하고 흐름 제어 및 혼잡 제어 기능을 제공함 (정확성)&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: 'Nanum Gothic';&quot;&gt;데이터를 중요하게 생각하여 확실히 주고 받고 싶을때 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;통신할 컴퓨터끼리 보냈습니다(SYN), 수락합니다( SYN ACK),도착했습니다(ACK) 서로 확인 메시지 메시지보내며 데이터 주고 받음 (3-way handshaking)&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: 'Nanum Gothic';&quot;&gt;연결지향 프로토콜 - 클라이언트와 서버가 연결된 상태에서 데이터 주고 받음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;데이터 보내기 전에 반드시 연결되어 있어야함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1:1 통신만 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;상대적으로 UDP보다 전송 속도 느림&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&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-filename=&quot;다운로드 (1).png&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z2ojZ/btrIuYLv5ed/xpfjaecH0kbfsrkGZamkIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z2ojZ/btrIuYLv5ed/xpfjaecH0kbfsrkGZamkIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z2ojZ/btrIuYLv5ed/xpfjaecH0kbfsrkGZamkIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ2ojZ%2FbtrIuYLv5ed%2FxpfjaecH0kbfsrkGZamkIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;360&quot; height=&quot;288&quot; data-filename=&quot;다운로드 (1).png&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;UDP는 비연결형 서비스로 데이터그램 방식을 제공하고, 패킷에 순서 부여나 재조립 등의 기능을 처리하지 않기 때문에 중요한 서비스에 사용됨 (신속성)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&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: 'Nanum Gothic';&quot;&gt;연결과정이 없기 때문에 TCP보다 빠른 전송 가능하지만 신뢰도 하락&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&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: 'Nanum Gothic';&quot;&gt;패킷 관리 필요&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1:1, 1:N, N:N 통신 모두 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&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: 'Nanum Gothic';&quot;&gt;신뢰성 없는 데이터 전송함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;데이터 재전송과 데이터 순서 유지를 위한 작업 하지 않음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;확인, 응답과 같은 절차를 생략할 수도 있어서 신뢰도는 없지만 신속성 향상&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;TCP와 UDP는 포트번호로 어떤 서비스에게 데이터 전달하면 좋을 지 식별&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: 'Nanum Gothic';&quot;&gt;포트번호 0~65525(16비트 분)까지의 숫자로 되어 있음&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: 'Nanum Gothic';&quot;&gt;범위에 따라 용도가 정해져 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;0~1023 : 잘 알려진 포트, 웹서버, 메일 서버 등 일반적&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1024~49151 : 등록된 포트, 제조업체의 독자적인 서버 소프트웨어가 클라이언트의 서비스 요청을 대기할 때 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;49152~65535 : 동적포트, 서버가 클라이언트를 식별하기 위해 사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;라우터와 스위치의 차이는?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;라우터(Router)&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: 'Nanum Gothic';&quot;&gt;목적지로 가는 적합한 경로를 찾아주는 라우팅 기능함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;네트워크 계층 속함 &amp;rarr; IP 주소 기반 동작&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;패킷이 대상에 도달할 수 있는 가장 작은 경로 선택하는 데 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&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: 'Nanum Gothic';&quot;&gt;스위치 (switch)&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: 'Nanum Gothic';&quot;&gt;목적지로 출발한 데이터를 중간에 적합한 경로로 스위칭해줌&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;데이터 링크에 속함 &amp;rarr; MAC주소 기반으로 동작&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&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: 'Nanum Gothic';&quot;&gt;&amp;rArr; PC &amp;rarr; 스위치 &amp;rarr; 라우터 &amp;rarr; 장거리 통신망(WAN)&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';&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-filename=&quot;스크린샷 2022-07-28 오후 6.46.05.png&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGEo4r/btrIptzgdaY/HZoahbtRDXHdlaO0MoGbUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGEo4r/btrIptzgdaY/HZoahbtRDXHdlaO0MoGbUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGEo4r/btrIptzgdaY/HZoahbtRDXHdlaO0MoGbUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGEo4r%2FbtrIptzgdaY%2FHZoahbtRDXHdlaO0MoGbUk%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;760&quot; height=&quot;316&quot; data-filename=&quot;스크린샷 2022-07-28 오후 6.46.05.png&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;316&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;WS 와 WAS의 차이는? 이둘을 구분하는 이유는 무엇일까요?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;a href=&quot;https://velog.io/@away0419/WS-WAS-차이&quot;&gt;https://velog.io/@away0419/WS-WAS-차이&lt;/a&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;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;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;브라우저의 주소창에 &lt;a href=&quot;http://www.naver.com을&quot;&gt;www.naver.com을&lt;/a&gt; 입력하면 어떤 일이 일어날까요? 큰 흐름을 설명해주세요.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;a href=&quot;https://velog.io/@jaeyunn_15/Network-www.naver.com을-치면-일어나는-일&quot;&gt;https://velog.io/@jaeyunn_15/Network-www.naver.com을-치면-일어나는-일&lt;/a&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;p data-ke-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_study/스터디</category>
      <category>TCP</category>
      <category>UDP</category>
      <category>Was</category>
      <category>네트워크</category>
      <category>라우터</category>
      <category>스위치</category>
      <author>meong_j</author>
      <guid isPermaLink="true">https://meongj-devlog.tistory.com/209</guid>
      <comments>https://meongj-devlog.tistory.com/209#entry209comment</comments>
      <pubDate>Thu, 28 Jul 2022 22:37:07 +0900</pubDate>
    </item>
    <item>
      <title>가상메모리, Redis vs Memcached</title>
      <link>https://meongj-devlog.tistory.com/208</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;운영체제: 메모리관리 가상 메모리에 대해 설명해보세요.&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;rarr; 내용참고 자료&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;a href=&quot;https://core.ewha.ac.kr/publicview/C0101020140425151219100144?vmode=f&quot;&gt;https://core.ewha.ac.kr/publicview/C0101020140425151219100144?vmode=f&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1659013934949&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;반효경 [운영체제] 18. Memory Management 1&quot; data-og-description=&quot;설명이 없습니다.&quot; data-og-host=&quot;core.ewha.ac.kr&quot; data-og-source-url=&quot;https://core.ewha.ac.kr/publicview/C0101020140425151219100144?vmode=f&quot; data-og-url=&quot;http://203.255.161.242:18080//publicview/C0101020140425151219100144?vmode=f&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fUDfL/hyPeFMtCIH/iOme2MLedlAcifbbAMhkW1/img.jpg?width=272&amp;amp;height=152&amp;amp;face=0_0_272_152&quot;&gt;&lt;a href=&quot;https://core.ewha.ac.kr/publicview/C0101020140425151219100144?vmode=f&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://core.ewha.ac.kr/publicview/C0101020140425151219100144?vmode=f&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fUDfL/hyPeFMtCIH/iOme2MLedlAcifbbAMhkW1/img.jpg?width=272&amp;amp;height=152&amp;amp;face=0_0_272_152');&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;반효경 [운영체제] 18. Memory Management 1&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;core.ewha.ac.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;메모리&lt;/b&gt;&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: 'Nanum Gothic';&quot;&gt;Logical address (virtual address) 논리적주소, 가상주소&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: 'Nanum Gothic';&quot;&gt;프로세스마다 독립적으로 가지는 주소공간&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;각 프로세스마다 0번지부터 시작&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;CPU가 보는 주소는 logical address임&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Physical address 물리적주소&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: 'Nanum Gothic';&quot;&gt;메모리에 실제 올라가는 위치&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;주소에서 데이터를 읽고 /쓸때만 물리주소로 바꾼다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;  주소 바인딩 : 주소를 결정하는 것 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Symbolic Address(소스코드) &amp;rarr; Logical address(숫자주소) &amp;rarr; Physical Address(실행주소)&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;스크린샷 2022-07-21 오후 8.00.16.png&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b46xKk/btrIsRficbw/g8nM2Lg8jFeFI2M4xeZ67k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b46xKk/btrIsRficbw/g8nM2Lg8jFeFI2M4xeZ67k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b46xKk/btrIsRficbw/g8nM2Lg8jFeFI2M4xeZ67k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb46xKk%2FbtrIsRficbw%2Fg8nM2Lg8jFeFI2M4xeZ67k%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;394&quot; height=&quot;98&quot; data-filename=&quot;스크린샷 2022-07-21 오후 8.00.16.png&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;주소 변환 관리! 하는애 &amp;rarr; MMU (Memory-Management Unit)&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: 'Nanum Gothic';&quot;&gt;Logical address&amp;rarr; Physical Address 로 매핑해주는 Hardware device&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;CPU에 코드 실행시, 가상 주소 메모리 접근이 필요할때 해당 주소를 물리주소값으로 변환해주는 하드웨어 장치&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&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: 'Nanum Gothic';&quot;&gt;Relocation register 를 이용해서 주소변환함(접근할 수 있는 물리적 메모리 주소의 최솟값)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;limit register로 프로그램의 주소 범위 지정(크기 벗어났는지 체크)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&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: 'Nanum Gothic';&quot;&gt;logical address만 다룬다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;실제 phycal address를 볼수 없으며 알 필요도 없다&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;Dynamic Loading 동적로딩&lt;/b&gt;&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: 'Nanum Gothic';&quot;&gt;프로세스 전체를 메모리에 미리 다 올리는 것이 아니라!&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;해당 루틴이 불려질때마다 메모리에 load하는것!&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;메모리 효율향상&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&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: 'Nanum Gothic';&quot;&gt;*Loading : 메모리에 올리는 것&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';&quot;&gt;&lt;b&gt;Swapping&lt;/b&gt;&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: 'Nanum Gothic';&quot;&gt;프로세스를 일시적으로 메모리에서 backing store로 쫒아내는 것&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: 'Nanum Gothic';&quot;&gt;backing store(swap area) : 디스크&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: 'Nanum Gothic';&quot;&gt;많은 사용자의 프로세스 이미지를 담을 만큼 충분히 빠르고 큰 저장 공간&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Swap in / Swap out&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: 'Nanum Gothic';&quot;&gt;일반적으로 swapper에 의해 swap out 시킬 프로세스 선정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;priority 가 높은 프로세스를 메모리에 올려놓음&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;Dynamic Linking&lt;/b&gt;&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: 'Nanum Gothic';&quot;&gt;Linking을 실행 시간까지 미루는 기법&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Static linking&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: 'Nanum Gothic';&quot;&gt;라이브러리가 프로그램의 실행 파일 코드에 포함됨&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;실행 파일의 크기가 커짐&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Dynaimc linking&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: 'Nanum Gothic';&quot;&gt;라이브러리가 실행시 연결(link)됨&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;메모리는 일반적으로 &lt;b&gt;두 영역&lt;/b&gt;으로 나뉘어 사용&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: 'Nanum Gothic';&quot;&gt;OS 상주 영역&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: 'Nanum Gothic';&quot;&gt;낮은 주소 영역 사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&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: 'Nanum Gothic';&quot;&gt;높은 주소 영역 사용&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;가상메모리&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1. 나오게 된 배경&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: 'Nanum Gothic';&quot;&gt;기존에는 코드 전체를 메모리에 load해야 해서 메모리 용량보다 더 큰 프로그램 실행X 문제 발생&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;물리 메모리보다 큰 프로세스 수행할 수 없는 문제생김&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;메모리 용량 부족 이슈&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;프로세스 메모리 영역간에 침범 이슈&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2. 기능&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&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: 'Nanum Gothic';&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: 'Nanum Gothic';&quot;&gt;프로세스 실행시 실행에 필요한 일부만 메모리 로드하고 나머지는 디스크에 둔다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;물리 메모리보다 큰 프로세스 수행가능!&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;한정된 메모리에서 여러 프로세스를 실행시킬 수 있다!&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;메모리가 실제 메모리보다 많아보이게 한다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이처럼 현재 필요한 page (단위)만 메모리에 올리는 것을 Demand Paging 이라고 함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;프로세스간 공간 분리로, 프로세스 이슈가 전체 시스템에 영향주지 않음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;Redis에 대해서 간단히 설명해주세요. Redis와 Memcached의 차이에 대해서 설명해주세요.&lt;/b&gt;&lt;/span&gt;&lt;/h3&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: 'Nanum Gothic';&quot;&gt;Redis (Remote Dictionary Server)&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: 'Nanum Gothic';&quot;&gt;고성능 키-값 저장소로서 문자열, List(리스트), Hash(해시), Set(셋), 정렬된 셋 형식의 데이터를 지원하는 NoSQL이다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;캐시 시스템&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;모든 데이터를 메모리에 저장하고 조회 &amp;rarr; 인메모리 데이터베이스&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;다양한 자료구조 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;지속성을 보장하기 위해 데이터를 Disk에 저장 가능&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: 'Nanum Gothic';&quot;&gt;서버가 내려가더라도 Disk에 저장된 데이터 읽어서 메모리에 로딩&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Redis와 Memcached 차이&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: 'Nanum Gothic';&quot;&gt;유명한 인메모리 데이터 저장소&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;모두 사용하기 쉽고 고성능임&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1ms 이하의 응답 시간으로 빠르게 데이터 읽기 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;개발 문법적으로 사용하기 쉽고 양또한 적음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;데이터 여러 노드에 분산 저장 가능 &amp;rarr; 데이터 분할&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;다양한 프로그래밍 언어 지원&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;</description>
      <category>IT_study/스터디</category>
      <category>memcached</category>
      <category>redis</category>
      <category>가상메모리</category>
      <category>운영체제</category>
      <author>meong_j</author>
      <guid isPermaLink="true">https://meongj-devlog.tistory.com/208</guid>
      <comments>https://meongj-devlog.tistory.com/208#entry208comment</comments>
      <pubDate>Thu, 28 Jul 2022 22:21:36 +0900</pubDate>
    </item>
    <item>
      <title>[Algorithm] DP(Dynamic Programming) 동적계획법</title>
      <link>https://meongj-devlog.tistory.com/207</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uhsAT/btrGS47P951/W5S9KpwPZ4gkX9gwkfDS4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uhsAT/btrGS47P951/W5S9KpwPZ4gkX9gwkfDS4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uhsAT/btrGS47P951/W5S9KpwPZ4gkX9gwkfDS4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuhsAT%2FbtrGS47P951%2FW5S9KpwPZ4gkX9gwkfDS4k%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;500&quot; height=&quot;326&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;432&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;동적계획법(DP) 이란?&lt;/span&gt;&lt;/b&gt;&lt;/h4&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; 계산한 값을 저장해두는 메모리 장소 캐쉬(cache)에 저장하고, 답을 여러번 계산(중복)하는 대신 한번 만 계산해서 계산결과를 재활용함으로써 속도 향상을 꾀할 수 있는 알고리즘이다&lt;/li&gt;
&lt;/ul&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;동적계획법과 분할 정복이 차이가 발생하는 부분은 문제를 나누는 방식이다
&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;/ul&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;그럼 다른 dfs등 과 같은 재귀함수 쓰는 알고리즘과 뭐가 달라요?&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;n=10만 일경우 , n^2 로 돌경우 시간 복잡도가 어어어어엄청 나게 증가하게 된다&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;DP 는 그에 반해 답을 저장하는 캐시배열인 메모이제이션을 활용하여 중복 횟수를 줄여주어 시간 복잡도가 감소한다. (빠름)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예) dfs 로 시간 제한 걸릴 경우 사용&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;메모이제이션 (Memoization)&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;메모이제이션을 활용하여 함수 호출 횟수가 엄청나게 감소될 수 있다&lt;/li&gt;
&lt;li&gt;이와 같이 두 번이상 반복 계산되는 부분 문제들의 답을 미리 저장함으로써 속도 향상을 꾀하는 알고리즘 이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;nbsp;* 피보나치 수열 (fibonacci)&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;대표적으로 피보나치 수열을 보면 동적 계획법을 알 수 있다&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;927&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWcteg/btrGRkDxJlS/yYq0ri7qkds34NrKrkqDqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWcteg/btrGRkDxJlS/yYq0ri7qkds34NrKrkqDqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWcteg/btrGRkDxJlS/yYq0ri7qkds34NrKrkqDqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWcteg%2FbtrGRkDxJlS%2FyYq0ri7qkds34NrKrkqDqK%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;500&quot; height=&quot;362&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;927&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; dy[i] = dy[i-2]+dy[i-1]&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1657338837137&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dy[1]=1 &amp;larr;기본값 셋팅
dy[2]=2 &amp;larr;기본값 셋팅
dy[3]= dy[1]+dy[2]
dy[4]= dy[2]+dy[3]
&amp;hellip;
dy[n]=n &amp;larr;답&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 수열값은 이전 수열 과 두 단계 전 수열의 합으로 구성되어 지고, 계속 값을 저장하여 최종해를 구한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1657339051344&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function fib(n)
 if n = 0
  return 0
 else if n=1
  return 1
 else
  return fib(n-1) + fib(n-2)&lt;/code&gt;&lt;/pre&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;* 그럼 DP는 언제 사용하는 건가요?&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;같은 문제들을 구할 때 마다 정답이 같을 경우&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;&lt;b&gt;* 동적 계획법 알고리즘 구현 단계 방법?&lt;/b&gt;&lt;/p&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;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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;DP 의 종류&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LIS (최대부분증가수열)&lt;/li&gt;
&lt;li&gt;밸만-포드 알고리즘&lt;/li&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;출처&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;- 프로그래밍 대회에서 배우는 알고리즘 문제해결전략, 구종만&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;- 위키백과, DP&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT_study/알고리즘</category>
      <category>dp #알고리즘</category>
      <author>meong_j</author>
      <guid isPermaLink="true">https://meongj-devlog.tistory.com/207</guid>
      <comments>https://meongj-devlog.tistory.com/207#entry207comment</comments>
      <pubDate>Sat, 9 Jul 2022 14:07:49 +0900</pubDate>
    </item>
  </channel>
</rss>