<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>dev-log</title>
    <link>https://devlogar.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 23 May 2026 14:34:53 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>데브로그98</managingEditor>
    <item>
      <title>PTL 장비</title>
      <link>https://devlogar.tistory.com/17</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;PTL (Partial Tape Library) - LTO 테이프를 이용해 데이터를 장기 저장하거나 오프사이트 보관(소산) 목적으로 사용.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소산 테이프 - 백업 데이터를 &lt;b&gt;외부 안전 장소로 물리적으로 반출하는 용도&lt;/b&gt;로 사용하는 테이프&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;301&quot; data-start=&quot;283&quot; data-ke-size=&quot;size26&quot;&gt;  소산 테이프 초기화란?&lt;/h2&gt;
&lt;p data-end=&quot;374&quot; data-start=&quot;303&quot; data-ke-size=&quot;size16&quot;&gt;초기화는 말 그대로 &lt;b&gt;기존에 저장된 데이터를 지우고 &lt;u&gt;새로운 백업에 쓸 수 있도록 준비&lt;/u&gt;&lt;/b&gt;하는 작업이다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;656&quot; data-start=&quot;376&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;459&quot; data-start=&quot;376&quot;&gt;&lt;b&gt;테이프 꺼내기 (Export)&lt;/b&gt;&lt;br /&gt;&amp;rarr; 기존에 백업 끝난 테이프를 PTL에서 꺼내서 소산 보관하거나 폐기/재사용을 위한 초기화 준비.&lt;/li&gt;
&lt;li data-end=&quot;545&quot; data-start=&quot;461&quot;&gt;&lt;b&gt;새 테이프 넣기 (Import)&lt;/b&gt;&lt;br /&gt;&amp;rarr; 새로운 공 테이프를 장비에 넣음. 백업 작업에 쓰기 전에는 &lt;b&gt;포맷(초기화)&lt;/b&gt; 과정을 거침.&lt;/li&gt;
&lt;li data-end=&quot;656&quot; data-start=&quot;547&quot;&gt;&lt;b&gt;테이프 초기화 (Format / Labeling)&lt;/b&gt;&lt;br /&gt;&amp;rarr; 백업 소프트웨어나 테이프 라이브러리 관리 툴을 통해 해당 테이프를 식별하고 쓸 수 있도록 &lt;b&gt;라벨 지정 또는 포맷&lt;/b&gt;함.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;211&quot; data-start=&quot;175&quot; data-ke-size=&quot;size26&quot;&gt;1. 테이프 장비에서 테이프 &quot;꺼내기 (Export)&quot;&lt;/h2&gt;
&lt;p data-end=&quot;259&quot; data-start=&quot;213&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;지난주 백업 완료된 소산 테이프를 꺼내기 위한 절차이다.&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;296&quot; data-start=&quot;261&quot; data-ke-size=&quot;size23&quot;&gt;  일반적인 장비 버튼 조작 예시 (전면 LCD 기준)&lt;/h3&gt;
&lt;h4 data-end=&quot;313&quot; data-start=&quot;298&quot; data-ke-size=&quot;size20&quot;&gt;✅ 전면 패널 버튼&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;버튼기능
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;416&quot; data-start=&quot;314&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;416&quot; data-start=&quot;342&quot;&gt;
&lt;tr data-end=&quot;363&quot; data-start=&quot;342&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;352&quot; data-start=&quot;342&quot;&gt;Enter&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;363&quot; data-start=&quot;352&quot;&gt;선택 / 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;387&quot; data-start=&quot;364&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;378&quot; data-start=&quot;364&quot;&gt;Up / Down&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;387&quot; data-start=&quot;378&quot;&gt;메뉴 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;416&quot; data-start=&quot;388&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;408&quot; data-start=&quot;388&quot;&gt;Escape / Cancel&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;416&quot; data-start=&quot;408&quot;&gt;뒤로가기&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;430&quot; data-start=&quot;418&quot; data-ke-size=&quot;size23&quot;&gt;  절차 예시&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1026&quot; data-start=&quot;432&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;501&quot; data-start=&quot;432&quot;&gt;&lt;b&gt;전면 LCD 화면에서 대기 상태&lt;/b&gt;&lt;br /&gt;&amp;rarr; 화면에 Ready, Idle, Menu 같은 메시지 보임&lt;/li&gt;
&lt;li data-end=&quot;575&quot; data-start=&quot;503&quot;&gt;Enter 눌러서 메뉴 진입&lt;br /&gt;&amp;rarr; 메뉴 항목 중에서 Operations 또는 Import/Export 선택&lt;/li&gt;
&lt;li data-end=&quot;628&quot; data-start=&quot;577&quot;&gt;Down / Up 으로 &lt;b&gt;Export 또는 Move Media&lt;/b&gt; 선택&lt;/li&gt;
&lt;li data-end=&quot;745&quot; data-start=&quot;630&quot;&gt;&lt;b&gt;Source Type&lt;/b&gt;:&lt;br /&gt;&amp;rarr; 테이프가 있는 곳 선택 (보통 Slot이나 Magazine, Storage Slot)&lt;br /&gt;&amp;rarr; 슬롯 번호 선택 (예: Slot 3, 4, 5&amp;hellip;)&lt;/li&gt;
&lt;li data-end=&quot;843&quot; data-start=&quot;747&quot;&gt;&lt;b&gt;Destination Type&lt;/b&gt;:&lt;br /&gt;&amp;rarr; Mailslot 선택&lt;br /&gt;&amp;rarr; Mailslot은 장비 전면에 있는 물리적 슬롯 (사람이 손으로 뺄 수 있음)&lt;/li&gt;
&lt;li data-end=&quot;913&quot; data-start=&quot;845&quot;&gt;Execute 또는 Enter&lt;br /&gt;&amp;rarr; 로봇 암(arm)이 해당 슬롯에서 테이프를 mailslot으로 옮김&lt;/li&gt;
&lt;li data-end=&quot;996&quot; data-start=&quot;915&quot;&gt;&lt;b&gt;&quot;Ready to remove&quot; 또는 &quot;Mailslot Open&quot;&lt;/b&gt; 메시지 뜨면&lt;br /&gt;&amp;rarr; mailslot 뚜껑을 열고 테이프 꺼내기&lt;/li&gt;
&lt;li data-end=&quot;1026&quot; data-start=&quot;998&quot;&gt;닫으면 자동으로 Mailslot 다시 잠김&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-end=&quot;1031&quot; data-start=&quot;1028&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1070&quot; data-start=&quot;1033&quot; data-ke-size=&quot;size26&quot;&gt;  2. 테이프 &quot;넣기 (Import)&quot; &amp;mdash; 새 테이프 추가&lt;/h2&gt;
&lt;h3 data-end=&quot;1080&quot; data-start=&quot;1072&quot; data-ke-size=&quot;size23&quot;&gt;✅ 절차&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1486&quot; data-start=&quot;1082&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1141&quot; data-start=&quot;1082&quot;&gt;전면에서 Import 메뉴 진입&lt;br /&gt;&amp;rarr; 또는 Operations &amp;gt; Import 선택&lt;/li&gt;
&lt;li data-end=&quot;1234&quot; data-start=&quot;1143&quot;&gt;Destination Type:&lt;br /&gt;&amp;rarr; Slot, Magazine-slot, 또는 Available Slot 선택&lt;br /&gt;&amp;rarr; 테이프를 보관할 위치&lt;/li&gt;
&lt;li data-end=&quot;1331&quot; data-start=&quot;1236&quot;&gt;&lt;b&gt;Mailslot 열기&lt;/b&gt; (자동 또는 수동으로 가능)&lt;br /&gt;&amp;rarr; 메뉴에서 Open Mailslot 선택&lt;br /&gt;&amp;rarr; 일부 장비는 버튼 누르면 뚜껑 자동 열림&lt;/li&gt;
&lt;li data-end=&quot;1397&quot; data-start=&quot;1333&quot;&gt;&lt;b&gt;테이프 삽입&lt;/b&gt;&lt;br /&gt;&amp;rarr; mailslot에 테이프를 방향 맞춰서 넣음&lt;br /&gt;&amp;rarr; 닫으면 자동으로 인식&lt;/li&gt;
&lt;li data-end=&quot;1463&quot; data-start=&quot;1399&quot;&gt;Inventory 수행&lt;br /&gt;&amp;rarr; GUI 또는 전면 패널에서 Inventory 수행 &amp;rarr; 테이프 인식됨&lt;/li&gt;
&lt;li data-end=&quot;1486&quot; data-start=&quot;1465&quot;&gt;이제 GUI에서 Label 가능!&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;라벨링 작업&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용된 지 오래된 테이프들을 선택하여&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Label 작업을 실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디폴트 풀(일반 용도) 선택 후&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 라벨 덮어쓰는 것 해제 후&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이프를 소산 용도(외부 반출, 보관 용도)로 백업에 사용하겠다고 지정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;  테이프 삽입&lt;/td&gt;
&lt;td&gt;물리적으로 라이브러리에 테이프 넣음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;  Inventory&lt;/td&gt;
&lt;td&gt;장비가 슬롯 스캔 &amp;rarr; 테이프 인식&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; ️ Label&lt;/td&gt;
&lt;td&gt;테이프 이름 부여 + 포맷 + DB 등록&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; ️ Pool 지정&lt;/td&gt;
&lt;td&gt;이 테이프가 어떤 용도인지 구분 (소산, 일일, 주간 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;  기존 테이프 재라벨링&lt;/td&gt;
&lt;td&gt;예전 테이프 다시 쓰거나, 목적 변경 시 수행&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Backup</category>
      <category>Labeling</category>
      <category>lto</category>
      <category>PTL</category>
      <category>백업장비</category>
      <category>소산테이프</category>
      <author>데브로그98</author>
      <guid isPermaLink="true">https://devlogar.tistory.com/17</guid>
      <comments>https://devlogar.tistory.com/17#entry17comment</comments>
      <pubDate>Sat, 19 Jul 2025 09:35:47 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle] 오라클 함수 정리</title>
      <link>https://devlogar.tistory.com/15</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오라클에서 전체 합계 대비 비율 또는 백분율을 구하기 위해서는&lt;br /&gt;&lt;b&gt;RATIO_TO_REPORT 이용&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;SELECT ename
    , sal
    , RATIO_TO_REPORT(sal) OVER() AS sal_ratio
FROM emp
WHERE job = 'MANAGER'&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;NTILE OVER : 특정 컬럼의 값을 기준으로 N개의 등급 부여하기&lt;br /&gt;(오름차순, 내림차순 순서대로 분류가 필요할 때)&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;컬럼K의 값 기준으로 N개의 등급으로 분류하여 조회하려는 경우 (등급 분류 기준은 오름차순)&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-SQL&quot;&gt;select 컬럼X, 컬럼Y, ...,
 ntile(숫자N) over (order by 컬럼K) as 별칭K
from 테이블A;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;범주형 변수인 컬럼L 집단별로 컬럼K를 기준으로 N개 등급으로 분류하여 조회하려는 경우 (등급 분류 기준은 내림차순 - descending)&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;select 컬럼X, 컬럼Y, ...,
    ntile(숫자N) over (partition by 컬럼L order by 컬럼K desc) as 별칭K
from 테이블A
where 조건;&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; start=&quot;3&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;범주형 변수인 컬럼L 집단별로 컬럼K를 기준으로 N개 등급으로 분류하여 내림차순 조회한 결과에서, 등급이 M인 결과만 조회하려는 경우&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 2번과 같은 결과에서 특정한 등급 m에 속한 레코드만 조회하려고 한다면, 서브쿼리 사용.&lt;/p&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;select * from (
    select 컬럼X, 컬럼Y, ...,
        ntile(숫자N) over (partition by 컬럼L order by 컬럼K desc) as 별칭K 
    from 테이블A
    where 조건) 
where 별칭k = 숫자M;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;CASE ~ WHEN ~ THEN ~ ELSE ~ END&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;ada&quot;&gt;&lt;code&gt;CASE 컬럼명 | 표현식 WHEN 조건식1 THEN 결과1  
                   WHEN 조건식2 THEN 결과2  
                                                 .......  
                   WHEN 조건식n THEN 결과n   
                   ELSE 결과
     END&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;CASE문 중첩 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 중복해서 사용 가능하나, 가독성이 떨어짐.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;단일행 서브쿼리, 다중행 서브쿼리&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브쿼리는 메인쿼리의 컬럼을 모두 사용할 수 있지만, 메인쿼리는 서브쿼리의 컬럼을 사용할 수 없다.&lt;br /&gt;메인쿼리에서 서브쿼리의 컬럼을 사용할 수 있는 경우 -&amp;gt; 스칼라 서브쿼리, 인라인 뷰&lt;span style=&quot;font-family: 'Noto Serif KR';&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;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;스칼라 서브쿼리(Scalar Subquery) : SELECT 절에 위치, 한 레코드 당 정확히 하나의 값 반환하는 서브쿼리 (단일행, 단일컬럼 반환)&lt;/li&gt;
&lt;li&gt;인라인 뷰(Inline View) : FROM 절에 위치하는 서브쿼리, 하나의 테이블로 리턴, SQL문이 실행될 때 임시적으로 생성되는 동적인 뷰 (Dynamic View)&lt;/li&gt;
&lt;li&gt;중첩 서브쿼리(Nested Subquery) : WHERE 절에 위치, 결과집합을 한정하기 위한 서브쿼리&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;서브쿼리는 where, having 조건에서 테이블 내의 고유값을 비교하기 위해 사용한다.&lt;/li&gt;
&lt;li&gt;괄호 안에 비교하고 싶은 값을 select 형식으로 작성한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;단일행 서브쿼리&lt;/b&gt; : SELECT절에서 짧은 단문만 가능, 한 테이블에 있는 정보만 가져올 수 있다.&lt;/li&gt;
&lt;/ol&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;ol style=&quot;list-style-type: decimal;&quot; start=&quot;2&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;다중행 서브쿼리&lt;/b&gt; : 특정 쿼리에서 검색한 여러 개의 값을 다른 쿼리에서 받아 검색하기 위해 사용. 서브쿼리에서 여러 개의 값이 반환되는 경우.&lt;br /&gt;따라서 서브쿼리에서 출력할 행이 여러 개일 경우, 단일행 서브쿼리 연산자 =을 사용하면 에러가 발생한다. 다중행 서브쿼리 연산자 IN 을 사용해야 한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;LAG, LEAD 함수&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 행의 값, 다음 행의 값을 찾기 위해 LAG, LEAD 함수를 사용하면 된다.&lt;br /&gt;주로 시계열 데이터를 분석할 때 많이 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;LAG 함수&lt;/b&gt; : 이전 행의 값을 리턴&lt;br /&gt;&lt;b&gt;LEAD 함수&lt;/b&gt; : 다음 행의 값을 리턴&lt;br /&gt;&lt;b&gt;expr&lt;/b&gt; : 대상 컬럼명&lt;br /&gt;&lt;b&gt;offset&lt;/b&gt; : 값을 가져올 행의 위치 기본값은 1, &lt;b&gt;생략가능&lt;/b&gt;&lt;br /&gt;&lt;b&gt;default&lt;/b&gt; : 값이 없을 경우 기본값, &lt;b&gt;생략가능&lt;/b&gt;&lt;br /&gt;&lt;b&gt;partition_by_clause&lt;/b&gt; : 그룹 컬럼명, &lt;b&gt;생략가능&lt;/b&gt;&lt;br /&gt;&lt;b&gt;order_by_clause&lt;/b&gt; : 정렬 컬럼명, 필수&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;SELECT empno 
    , ename
    , job
    , sal
    , LAG(empno, 2) OVER(PARTITION BY job ORDER BY empno) AS empno_prev
    , LEAD(empno, 2) OVER(PARTITION BY job ORDER BY empno) AS empno_next
FROM emp
WHERE job IN ('MANAGER', 'ANALYST', 'SALESMAN')&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;- PARTITION BY : 그룹 컬럼 기준으로 이전 값 또는 다음 값 표시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;305&quot; data-origin-height=&quot;165&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RBwoc/btsHuxVL2hR/PmMFLvTafbPXIZB4SJYvV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RBwoc/btsHuxVL2hR/PmMFLvTafbPXIZB4SJYvV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RBwoc/btsHuxVL2hR/PmMFLvTafbPXIZB4SJYvV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRBwoc%2FbtsHuxVL2hR%2FPmMFLvTafbPXIZB4SJYvV1%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;305&quot; height=&quot;165&quot; data-origin-width=&quot;305&quot; data-origin-height=&quot;165&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Database/SQL</category>
      <category>Oracle</category>
      <category>SQL</category>
      <author>데브로그98</author>
      <guid isPermaLink="true">https://devlogar.tistory.com/15</guid>
      <comments>https://devlogar.tistory.com/15#entry15comment</comments>
      <pubDate>Sun, 19 May 2024 10:41:57 +0900</pubDate>
    </item>
    <item>
      <title>[Java] equals()와 hashCode() 메서드 알아보기</title>
      <link>https://devlogar.tistory.com/14</link>
      <description>&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;equals와 hashCode란 무엇인가?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바의 부모 객체 Object 클래스 위에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;equals()와 hashCode() 메서드&lt;/b&gt;가 선언되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. equals()란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;★&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;동일성(equality), 동등성(identity)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동일한 객체가 메모리 상에서 띄워져 있는 경우는 서로 다른 메모리에 있으므로 동일한 객체가 아니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 같은 값을 지니므로 equals 메서드를 사용해 동등성을 나타내주는 것이다. 값으로 객체를 비교하도록 equals 메서드를 오버라이딩하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 의미하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;동일성(equality)과 동등성(identity)&lt;/b&gt;은 다른 개념이다. 동일한 값을 갖는 문자열을 2개 생성했을 때, 동등성을 비교하는 equals 메서드를 호출하면 true가 나오지만, 동일성을 비교하면&lt;span&gt;&amp;nbsp;&lt;/span&gt;서로 다른 메모리에 할당되기 때문에 false가 출력된다. 변수를 비교할 때는 다른 값이 출력된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1715310298887&quot; class=&quot;arduino&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;String s1 = new String(&quot;Test&quot;);
String s2 = new String(&quot;Test&quot;);

System.out.println(s1 == s2);			// false
System.out.println(s1.equals(s2));		// true&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;✔️ == 연산 (동일성)&lt;/h4&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;Member 객체를 생성하여 object 클래스의 equals() 메서드를 오버라이딩 하여 객체의 동등성을 정의하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1715327233172&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Member {

    private String name;

    public Member(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Member member = (Member) o;
        return Objects.equals(name, member.name);
    }

}&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_1715327530994&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Member member1 = new Member(&quot;name&quot;);
Member member2 = new Member(&quot;name&quot;);

System.out.println(&quot;member 1 == member2 : &quot; + member1.equals(member2));
System.out.println(&quot;member1 hashcode : &quot; + member1.hashCode());
System.out.println(&quot;member2 hashcode : &quot; + member2.hashCode());&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;출력값은 equals() 메서드를 호출하여 name 필드의 값의 동등성을 비교할 때 값이 같으므로 true가 출력된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 hashCode() 메서드를 호출하면 각 객체의 해시 코드 값은 같지 않다. 따라서 hashCode() 또한 재정의 해야 함을 알 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체가 생성될 때 고유한 해시코드가 생성된다. 이 해시코드를 hashCode라는 공통 메서드를 호출해 가져올 수 있다. equals를 오버라이딩하여 해시코드를 비교한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. hashCode란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체를 식별하는 하나의 고유 정숫값을 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해시코드 메서드는 자바에서 객체의 해시 값을 반환하는 메서드이다. 해시 기반의 컬렉션에 저장하거나 사용하고, HashMap, HashSet, HashTable 등이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;equals() 메서드를 이용하여 객체의 동등성(equality)을 정의했다면, 반드시 hashCode() 메서드도 함께 재정의 해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 다음과 같이 Member 객체에 해시코드를 재정의하면, 같은 해시 값이 출력됨을 알 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1715327008778&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Override
public int hashCode() {
	return Objects.hash(name);
}&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;h3 data-ke-size=&quot;size23&quot;&gt;그럼 equals()와 hashCode()를 &lt;u&gt;같이&lt;/u&gt;&amp;nbsp;override&amp;nbsp;해야하는&amp;nbsp;이유는?&lt;/h3&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;You must override hashCode() in every class that overrides equals().&lt;/b&gt;&lt;/span&gt; &lt;br /&gt;Failure to do so will result in a violation of the general contract for Object.hashCode(), which will prevent your class from functioning properly in conjunction with all hash-based collections, including HashMap, HashSet, and Hashtable.&lt;br /&gt;&lt;br /&gt;From Effective Java, by Joshua Bloch&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;equals()를 오버라이드하는 클래스에서는 반드시 hashCode()도 오버라이드 해야 합니다.&lt;/b&gt; 그렇지 않으면 Object.hashCode()의 일반 규약을 위반하게 되는데, 이는 HashMap, HashSet, Hashtable 등 해시 기반 컬렉션과 함께 해당 클래스가 제대로 동작하지 못하게 할 수 있습니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반 규약에 따라 equals()가 true를 반환하는 두 객체는 &lt;b&gt;같은 hashCode() 값을 반환&lt;/b&gt;해야 한다. 그렇지 않으면, 동일한 두 객체가 각각 hashCode() 값을 다르게 저장하여 해시 컬렉션이 동작할 때 문제가 발생할 수 있기 때문이다. 잘못 오버라이딩 했을 때 hash 컬렉션의 성능이 저하될 수 있다.&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;hashCode 규약&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;equals 비교에 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 객체의 hashCode 메서드는 몇 번을 호출해도 항상 같은 값을 반환해야 한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;equals(Object)가 두 객체를 같다고 판단했으면, 두 객체의 hashCode는 같은 값을 반환해야 한다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;하지만 equals(Object)가 두 객체를 다르다고 판단했더라도, 두 객체의 hashCode 값은 같을 수 있다. (해시 충돌, Hash Collisions)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hashCode를 잘못 오버라이딩하면 HashMap 등 hash 컬렉션의 성능이 떨어질 수 있다. 위 두 번째 조약에서 문제가 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;참고&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://jiwondev.tistory.com/113&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://jiwondev.tistory.com/113&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715311243690&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;.equals와 .hashCode()는 항상 함께 오버라이딩해야한다.&quot; data-og-description=&quot;Object 메서드에 있는 .hashCode() 메서드는 해당 객체의 주소값을 이용하여 만든 객체만의 고유한 정수 값을 가진다. equals()를 오버라이딩 할 때에는 반드시 hashCode()도 동일한 결과를 내도록 함께 오&quot; data-og-host=&quot;jiwondev.tistory.com&quot; data-og-source-url=&quot;https://jiwondev.tistory.com/113&quot; data-og-url=&quot;https://jiwondev.tistory.com/113&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/h7pFz/hyV2uXONTV/hsZrVgtwZiqbj25OqLkZak/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/bG4kwI/hyV2pIX5At/Pvwf0GcfsjjMZozIP6lA1k/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/d5jhnB/hyV2wH6dYh/rZ61Z5MaofCTSqLmApUmzk/img.png?width=594&amp;amp;height=333&amp;amp;face=0_0_594_333&quot;&gt;&lt;a href=&quot;https://jiwondev.tistory.com/113&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jiwondev.tistory.com/113&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/h7pFz/hyV2uXONTV/hsZrVgtwZiqbj25OqLkZak/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/bG4kwI/hyV2pIX5At/Pvwf0GcfsjjMZozIP6lA1k/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/d5jhnB/hyV2wH6dYh/rZ61Z5MaofCTSqLmApUmzk/img.png?width=594&amp;amp;height=333&amp;amp;face=0_0_594_333');&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;.equals와 .hashCode()는 항상 함께 오버라이딩해야한다.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Object 메서드에 있는 .hashCode() 메서드는 해당 객체의 주소값을 이용하여 만든 객체만의 고유한 정수 값을 가진다. equals()를 오버라이딩 할 때에는 반드시 hashCode()도 동일한 결과를 내도록 함께 오&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jiwondev.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://mangkyu.tistory.com/101&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://mangkyu.tistory.com/101&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715327816620&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Java] equals와 hashCode 함수&quot; data-og-description=&quot;1. equals와 hashCode란? equals와 hashCode는 모든 Java 객체의 부모 객체인 Object 클래스에 정의되어 있다. 그렇기 때문에 Java의 모든 객체는 Object 클래스에 정의된 equals와 hashCode 함수를 상속받고 있다. [ e&quot; data-og-host=&quot;mangkyu.tistory.com&quot; data-og-source-url=&quot;https://mangkyu.tistory.com/101&quot; data-og-url=&quot;https://mangkyu.tistory.com/101&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bHG5IX/hyV2D1CePs/qxdCkxblMfxisE0hbBJBqk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cJl4yt/hyV2sMwWcT/ibDxzGuAhQQ3xKX5UJThwK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://mangkyu.tistory.com/101&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mangkyu.tistory.com/101&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bHG5IX/hyV2D1CePs/qxdCkxblMfxisE0hbBJBqk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cJl4yt/hyV2sMwWcT/ibDxzGuAhQQ3xKX5UJThwK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Java] equals와 hashCode 함수&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. equals와 hashCode란? equals와 hashCode는 모든 Java 객체의 부모 객체인 Object 클래스에 정의되어 있다. 그렇기 때문에 Java의 모든 객체는 Object 클래스에 정의된 equals와 hashCode 함수를 상속받고 있다. [ e&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mangkyu.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.baeldung.com/java-equals-hashcode-contracts&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.baeldung.com/java-equals-hashcode-contracts&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <category>equals</category>
      <category>hashcode</category>
      <category>java</category>
      <category>override</category>
      <author>데브로그98</author>
      <guid isPermaLink="true">https://devlogar.tistory.com/14</guid>
      <comments>https://devlogar.tistory.com/14#entry14comment</comments>
      <pubDate>Wed, 15 May 2024 20:52:28 +0900</pubDate>
    </item>
    <item>
      <title>AWS는 무엇인가?</title>
      <link>https://devlogar.tistory.com/13</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;AWS = &lt;span style=&quot;color: #006dd7;&quot;&gt;A&lt;/span&gt;mazon &lt;span style=&quot;color: #006dd7;&quot;&gt;W&lt;/span&gt;eb &lt;span style=&quot;color: #006dd7;&quot;&gt;S&lt;/span&gt;ervices&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미국의 아마존닷컴(amazon.com)이 온라인 비즈니스를 지원하는 시스템 구축 및 운영 노하우를 바탕으로 제공하는 &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;세계 최대 규모의 클라우드 컴퓨팅 서비스로 클라우드 = AWS로 생각하는 사람도 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글로벌 클라우드는 Amazon, Microsoft, Google이 있고, 국내 클라우드는 Naver Cloud, Kt Cloud, NHH Cloud, Kakao i cloud가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;AWS가 왜 생겨났고, 왜 필요한 것인가?&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기존에는 개인이나 기업이 서버를 운영하기 위해 '서버 구동용 컴퓨터'를 구매하거나 'IDC'에서 서버를 모아 일정한 사용료를 지불하며 서버를 운용하였다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이와 같은 방식에 문제가 발생하였다.&amp;nbsp;&lt;/p&gt;
&lt;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;size16&quot;&gt;기존 방식의 많은 단점을 보완하는 것이 &lt;b&gt;클라우드 방식&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AWS&lt;/b&gt;는 미국을 중심으로 &lt;b&gt;전 세계 주요 국가와 지역에 전용 인프라&lt;/b&gt;를 두고 있다. 인프라는 &lt;b&gt;데이터센터&lt;/b&gt;인데, 하나하나가 거대한 전용 건물로 구성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1193&quot; data-origin-height=&quot;757&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yClug/btsHjVpqcUM/9Uri0fPtNDjHsuXFVvsjsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yClug/btsHjVpqcUM/9Uri0fPtNDjHsuXFVvsjsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yClug/btsHjVpqcUM/9Uri0fPtNDjHsuXFVvsjsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyClug%2FbtsHjVpqcUM%2F9Uri0fPtNDjHsuXFVvsjsK%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;1193&quot; height=&quot;757&quot; data-origin-width=&quot;1193&quot; data-origin-height=&quot;757&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 어느 지역 데이터센터를 이용할 것인지 결정한다.&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;법인의 경우 : IT 벤더나 클라우드 벤더에 맡기는 경우가 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;AWS 클라우드 제품&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS의 클라우드 제품은 수가 방대하기에 몇 가지 지원만 살펴보면, 다음과 같다.&lt;/p&gt;
&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;IT 리소스 제품군&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;b&gt;컴퓨팅(서버) :&lt;/b&gt; Amazon EC2, Amazon ECS&lt;/li&gt;
&lt;li&gt;&lt;b&gt;스토리지 :&lt;/b&gt; Amazon S3, Amazon EBS&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터베이스 :&lt;/b&gt; Amazon RDS, Amazon DynamoDB&lt;/li&gt;
&lt;li&gt;&lt;b&gt;네트워크 :&lt;/b&gt; Amazon VPC&lt;/li&gt;
&lt;li&gt;&lt;b&gt;최종 사용자 컴퓨팅(클라이언트) :&lt;/b&gt; Amazon WorkSpaces, Amazon WorkLink&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;b&gt;분석 :&lt;/b&gt; Amazon Athena, Amazon Redshift&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개발자 도구 :&lt;/b&gt; AWS Cloud9, AWS CodeBuild&lt;/li&gt;
&lt;li&gt;&lt;b&gt;관리 도구 :&lt;/b&gt; Amazon CloudWatch, AWS Billing and Cost Management&lt;/li&gt;
&lt;li&gt;&lt;b&gt;보안 :&lt;/b&gt; AWS IAM, AWS Cognito&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;보다 자세한 내용은 AWS 공식 홈페이지에서 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&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;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/what-is-aws/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://aws.amazon.com/what-is-aws/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715246461285&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;company&quot; data-og-title=&quot;AWS란? - AWS를 이용한 클라우드 컴퓨팅 - Amazon Web Services&quot; data-og-description=&quot;&quot; data-og-host=&quot;aws.amazon.com&quot; data-og-source-url=&quot;https://aws.amazon.com/what-is-aws/&quot; data-og-url=&quot;https://aws.amazon.com/ko/what-is-aws/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cMBh40/hyVZpp3tfi/34hk8kjuXUWwLjIkl8KwNK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/X19gI/hyV2yFFJpE/XnZPkMByb0jCPmKFdYSWQk/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109,https://scrap.kakaocdn.net/dn/DNXmP/hyV2w1969i/mnBOUJM8oW3oWoDJKBTZxk/img.png?width=350&amp;amp;height=234&amp;amp;face=0_0_350_234&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/what-is-aws/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://aws.amazon.com/what-is-aws/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cMBh40/hyVZpp3tfi/34hk8kjuXUWwLjIkl8KwNK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/X19gI/hyV2yFFJpE/XnZPkMByb0jCPmKFdYSWQk/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109,https://scrap.kakaocdn.net/dn/DNXmP/hyV2w1969i/mnBOUJM8oW3oWoDJKBTZxk/img.png?width=350&amp;amp;height=234&amp;amp;face=0_0_350_234');&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;AWS란? - AWS를 이용한 클라우드 컴퓨팅 - Amazon Web Services&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;aws.amazon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://namu.wiki/w/%EC%95%84%EB%A7%88%EC%A1%B4%20%EC%9B%B9%20%EC%84%9C%EB%B9%84%EC%8A%A4&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://namu.wiki/w/%EC%95%84%EB%A7%88%EC%A1%B4%20%EC%9B%B9%20%EC%84%9C%EB%B9%84%EC%8A%A4&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715246972655&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;아마존 웹 서비스&quot; data-og-description=&quot;경험을 압축하는 알고리즘은 존재하지 않는다 AWS가 이야기하는 격언으로서, 인류를 지속적으로 진화시키는 것은 '직감&quot; data-og-host=&quot;namu.wiki&quot; data-og-source-url=&quot;https://namu.wiki/w/%EC%95%84%EB%A7%88%EC%A1%B4%20%EC%9B%B9%20%EC%84%9C%EB%B9%84%EC%8A%A4&quot; data-og-url=&quot;https://namu.wiki/w/%EC%95%84%EB%A7%88%EC%A1%B4%20%EC%9B%B9%20%EC%84%9C%EB%B9%84%EC%8A%A4&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://namu.wiki/w/%EC%95%84%EB%A7%88%EC%A1%B4%20%EC%9B%B9%20%EC%84%9C%EB%B9%84%EC%8A%A4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://namu.wiki/w/%EC%95%84%EB%A7%88%EC%A1%B4%20%EC%9B%B9%20%EC%84%9C%EB%B9%84%EC%8A%A4&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;아마존 웹 서비스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;경험을 압축하는 알고리즘은 존재하지 않는다 AWS가 이야기하는 격언으로서, 인류를 지속적으로 진화시키는 것은 '직감&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;namu.wiki&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DevOps/AWS</category>
      <category>Amazon Web Services</category>
      <category>AWS</category>
      <category>Cloud</category>
      <category>Cloud Computing</category>
      <author>데브로그98</author>
      <guid isPermaLink="true">https://devlogar.tistory.com/13</guid>
      <comments>https://devlogar.tistory.com/13#entry13comment</comments>
      <pubDate>Sat, 11 May 2024 23:42:37 +0900</pubDate>
    </item>
    <item>
      <title>[Java] Call by value, Call by reference 차이</title>
      <link>https://devlogar.tistory.com/12</link>
      <description>&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;기본 타입 변수(Primitive type) : int, double, boolean 등과 같은 기본 데이터 유형, 실제 값(value)을 저장한다.&lt;/li&gt;
&lt;li&gt;참조 타입 변수(Reference type) : 클래스, 인터페이스, 배열 등의 참조 타입을 가지는 변수, 객체가 저장된 실제 메모리 위치를 가리키는 값이 저장된다.&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Call by Value (값에 의한 호출)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Call by Reference (참조에 의한 호출)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바에서 Call by Reference는 없다. Call by Value만 존재한다.&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;Call by Reference (참조에 의한 호출)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메서드 호출 시에 파라미터로 변수를 직접 전달하는 데, 메서드 내부에서 파라미터 수정이 필요한 경우 원본에도 동일하게 적용된다. 하지만 자바에는 이와 같은 방법이 적용되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;384&quot; data-origin-height=&quot;179&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cErkI1/btsHi6RHLKl/r4mKa4Lyd4J5UXkHgkMOHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cErkI1/btsHi6RHLKl/r4mKa4Lyd4J5UXkHgkMOHk/img.png&quot; data-alt=&quot;Call by Reference (참조에 의한 호출)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cErkI1/btsHi6RHLKl/r4mKa4Lyd4J5UXkHgkMOHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcErkI1%2FbtsHi6RHLKl%2Fr4mKa4Lyd4J5UXkHgkMOHk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;384&quot; height=&quot;179&quot; data-origin-width=&quot;384&quot; data-origin-height=&quot;179&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Call by Reference (참조에 의한 호출)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;Call by Value (값에 의한 호출)&lt;/span&gt; &amp;rarr; 자바에서 파라미터를 전달하는 방식&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메서드 호출 시 파라미터로 변수의 '값'을 복사하여 전달한다. 파라미터에 대한 수정이 발생할 경우 원본에는 반영되지 않고 값만 복사한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYPkGc/btsHkneguDe/7kkvWBHi9iR16YWJiOyzkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYPkGc/btsHkneguDe/7kkvWBHi9iR16YWJiOyzkk/img.png&quot; data-alt=&quot;Call by Value (값에 의한 호출)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYPkGc/btsHkneguDe/7kkvWBHi9iR16YWJiOyzkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYPkGc%2FbtsHkneguDe%2F7kkvWBHi9iR16YWJiOyzkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;371&quot; height=&quot;174&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;174&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Call by Value (값에 의한 호출)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1715224789438&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class CallByValue {
    public static void swap(int x, int y){
        int temp = x;
        x = y;
        y = temp;
    }

    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(&quot; 호출 전 : a = &quot; + a + &quot; b = &quot; + b);
        swap(a,b);
        System.out.println(&quot; 호출 후 : a = &quot; + a + &quot; b = &quot; + b);
    }
}&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;swap 메서드는 두 개의 변수를 파라미터 인자로 받았고, main 메서드에서 swap(a, b) 호출을 했다. 이때, a와 b의 값을 변경하는 것이 아니라 a와 b의 값의 복사본을 변경한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 출력된다.&lt;/p&gt;
&lt;pre id=&quot;code_1715224982379&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;호출 전 : a = 10 b = 20
호출 후 : a = 10 b = 20&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-origin-width=&quot;600&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ck3KGy/btsHgeDDLhs/I1FFkmfyKHzvKb9UShe02k/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ck3KGy/btsHgeDDLhs/I1FFkmfyKHzvKb9UShe02k/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ck3KGy/btsHgeDDLhs/I1FFkmfyKHzvKb9UShe02k/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/ck3KGy/btsHgeDDLhs/I1FFkmfyKHzvKb9UShe02k/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;338&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&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;'The Java Programming' 책의 저자인 제임스 고슬링이 다음과 같이 말했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Some people will say incorrectly that objects are passed &quot;by referece.&quot; In programming language design, the term pass by reference properly means that when an argument is passed to a function, the invoked function gets a reference to the original value, not a copy of its value. If the function modifies its parameter, the value in the calling code will be changed because the argument and parameter use the same slot in memory.&lt;/span&gt;&lt;br /&gt;&lt;b&gt;The Java programming language does not pass objects by reference; it passes object references by value.&lt;/b&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;어떤 사람들은 객체가 참조로 전달(by reference)된다고 잘못 말한다. 프로그래밍 언어 설계에서 참조 전달(pass by reference)은 인수가 함수에 전달될 때 그 값의 복사본이 아니라 원래 값의 참조를 전달받음을 의미한다. 만약 함수가 전달받은 매개변수를 변경하면 함수를 호출한 코드도 동일한 메모리 슬롯을 사용하므로 값이 변경되어야 한다.&lt;br /&gt;&lt;b&gt;자바는 객체를 참조로 전달하지 않는다. 대신 객체에 대한 참조를 값으로 전달한다.&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;참고&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bcp0109.tistory.com/360&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bcp0109.tistory.com/360&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715220641388&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Java 의 Call by Value, Call by Reference&quot; data-og-description=&quot;Overview Java 에서 메서드를 호출 시 파라미터를 전달하는 방법에 대해 알아봅니다. 순서는 다음과 같이 진행합니다. Call by Value, Call by Reference 차이 Java 에서의 파라미터 전달 방법 JVM 메모리에 변&quot; data-og-host=&quot;bcp0109.tistory.com&quot; data-og-source-url=&quot;https://bcp0109.tistory.com/360&quot; data-og-url=&quot;https://bcp0109.tistory.com/360&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bcRw8W/hyVZty96Ve/MF0dF3ykQvuDmJC6Txhnvk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/475Ck/hyV2CBe8fq/DiSa71fgiFavKRyBI96NS0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/hLOM5/hyV2BCkAKw/0lkrpmWXGQxCQDp5Bgr3K1/img.png?width=2314&amp;amp;height=1558&amp;amp;face=0_0_2314_1558&quot;&gt;&lt;a href=&quot;https://bcp0109.tistory.com/360&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bcp0109.tistory.com/360&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bcRw8W/hyVZty96Ve/MF0dF3ykQvuDmJC6Txhnvk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/475Ck/hyV2CBe8fq/DiSa71fgiFavKRyBI96NS0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/hLOM5/hyV2BCkAKw/0lkrpmWXGQxCQDp5Bgr3K1/img.png?width=2314&amp;amp;height=1558&amp;amp;face=0_0_2314_1558');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Java 의 Call by Value, Call by Reference&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Overview Java 에서 메서드를 호출 시 파라미터를 전달하는 방법에 대해 알아봅니다. 순서는 다음과 같이 진행합니다. Call by Value, Call by Reference 차이 Java 에서의 파라미터 전달 방법 JVM 메모리에 변&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bcp0109.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://mangkyu.tistory.com/322&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://mangkyu.tistory.com/322&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715222926235&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Java] 자바는 Call By Value(Pass By Value) 방식으로만 동작한다&quot; data-og-description=&quot;1. 자바는 Call By Value(Pass By Value) 방식으로만 동작한다 [ 자바 개발자 제임스 고슬링의 얘기 ] 아래의 내용은 자바 언어의 창시자인 제임스 고슬링(James Gosling)이 집필한 &amp;ldquo;The Java Programming Language&amp;rdquo;&quot; data-og-host=&quot;mangkyu.tistory.com&quot; data-og-source-url=&quot;https://mangkyu.tistory.com/322&quot; data-og-url=&quot;https://mangkyu.tistory.com/322&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fwLmC/hyVZnTfpvO/JlAKbgRhdsZkDnMiSvZcP1/img.png?width=344&amp;amp;height=327&amp;amp;face=0_0_344_327,https://scrap.kakaocdn.net/dn/cm7uKu/hyV2tdeR2w/R36GK39qLF1k6E4NkuZz8k/img.png?width=344&amp;amp;height=327&amp;amp;face=0_0_344_327,https://scrap.kakaocdn.net/dn/eZBRC/hyVZidolxM/kkacoLkFta8p78E9Ve2HHk/img.png?width=670&amp;amp;height=1138&amp;amp;face=0_0_670_1138&quot;&gt;&lt;a href=&quot;https://mangkyu.tistory.com/322&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mangkyu.tistory.com/322&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fwLmC/hyVZnTfpvO/JlAKbgRhdsZkDnMiSvZcP1/img.png?width=344&amp;amp;height=327&amp;amp;face=0_0_344_327,https://scrap.kakaocdn.net/dn/cm7uKu/hyV2tdeR2w/R36GK39qLF1k6E4NkuZz8k/img.png?width=344&amp;amp;height=327&amp;amp;face=0_0_344_327,https://scrap.kakaocdn.net/dn/eZBRC/hyVZidolxM/kkacoLkFta8p78E9Ve2HHk/img.png?width=670&amp;amp;height=1138&amp;amp;face=0_0_670_1138');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Java] 자바는 Call By Value(Pass By Value) 방식으로만 동작한다&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. 자바는 Call By Value(Pass By Value) 방식으로만 동작한다 [ 자바 개발자 제임스 고슬링의 얘기 ] 아래의 내용은 자바 언어의 창시자인 제임스 고슬링(James Gosling)이 집필한 &amp;ldquo;The Java Programming Language&amp;rdquo;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mangkyu.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://loosie.tistory.com/486&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://loosie.tistory.com/486&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715224056001&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Java] 자바가 언제나 Call By Value인 이유 (Call By Reference X)&quot; data-og-description=&quot;Intro 시작하기 앞서 CS이론에서는 &amp;quot;Call by value&amp;quot;와 &amp;quot;Call by reference&amp;quot;를 구분하는 것은 더 이상 쓸모없다고 한다. 왜냐하면 &amp;quot;Call By Reference&amp;quot;은 이제 트렌드에 뒤쳐진 기술로 선호도 굉장히 낮아져 최신 &quot; data-og-host=&quot;loosie.tistory.com&quot; data-og-source-url=&quot;https://loosie.tistory.com/486&quot; data-og-url=&quot;https://loosie.tistory.com/486&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/btTw2n/hyV2q1TtuF/XPHVkX2CN0Rg1iYuXLNyj0/img.png?width=800&amp;amp;height=496&amp;amp;face=0_0_800_496,https://scrap.kakaocdn.net/dn/c9KVZk/hyVZmz6ES6/XLx4r1RYPkQHAICOOLBST0/img.png?width=800&amp;amp;height=496&amp;amp;face=0_0_800_496,https://scrap.kakaocdn.net/dn/cJolHz/hyVZqvF6OT/l2pW7X0Yl5AiwLa27cBVQ1/img.png?width=1842&amp;amp;height=1030&amp;amp;face=0_0_1842_1030&quot;&gt;&lt;a href=&quot;https://loosie.tistory.com/486&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://loosie.tistory.com/486&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/btTw2n/hyV2q1TtuF/XPHVkX2CN0Rg1iYuXLNyj0/img.png?width=800&amp;amp;height=496&amp;amp;face=0_0_800_496,https://scrap.kakaocdn.net/dn/c9KVZk/hyVZmz6ES6/XLx4r1RYPkQHAICOOLBST0/img.png?width=800&amp;amp;height=496&amp;amp;face=0_0_800_496,https://scrap.kakaocdn.net/dn/cJolHz/hyVZqvF6OT/l2pW7X0Yl5AiwLa27cBVQ1/img.png?width=1842&amp;amp;height=1030&amp;amp;face=0_0_1842_1030');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Java] 자바가 언제나 Call By Value인 이유 (Call By Reference X)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Intro 시작하기 앞서 CS이론에서는 &quot;Call by value&quot;와 &quot;Call by reference&quot;를 구분하는 것은 더 이상 쓸모없다고 한다. 왜냐하면 &quot;Call By Reference&quot;은 이제 트렌드에 뒤쳐진 기술로 선호도 굉장히 낮아져 최신&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;loosie.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/6029012/how-to-do-call-by-reference-in-java&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://stackoverflow.com/questions/6029012/how-to-do-call-by-reference-in-java&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715224068213&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;How to do &amp;quot;call by reference&amp;quot; in Java?&quot; data-og-description=&quot;How to do &amp;quot;call by reference&amp;quot; in Java? (Assume that we are using that term in the same way that it has been used in peer-reviewed CS literature since the 1960's; see this Wikipedia page ...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/6029012/how-to-do-call-by-reference-in-java&quot; data-og-url=&quot;https://stackoverflow.com/questions/6029012/how-to-do-call-by-reference-in-java&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/exTRWy/hyVZm7VpaG/S756LOpGcBTFg0w2hcOAZk/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/6029012/how-to-do-call-by-reference-in-java&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/6029012/how-to-do-call-by-reference-in-java&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/exTRWy/hyVZm7VpaG/S756LOpGcBTFg0w2hcOAZk/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&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;How to do &quot;call by reference&quot; in Java?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;How to do &quot;call by reference&quot; in Java? (Assume that we are using that term in the same way that it has been used in peer-reviewed CS literature since the 1960's; see this Wikipedia page ...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <author>데브로그98</author>
      <guid isPermaLink="true">https://devlogar.tistory.com/12</guid>
      <comments>https://devlogar.tistory.com/12#entry12comment</comments>
      <pubDate>Fri, 10 May 2024 15:15:50 +0900</pubDate>
    </item>
    <item>
      <title>[Java] JVM 메모리 구조 및 실행 단계</title>
      <link>https://devlogar.tistory.com/11</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Java 언어를 잘 이해하기 위해서 &lt;b&gt;JVM(Java Virtual Machine)의 구조 파악&lt;/b&gt;이 선행되어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바 파일을 실행하기 위해 JVM이 어떻게 실행되는지 간략하게 알아보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1013&quot; data-origin-height=&quot;675&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d6s0Wj/btsHgfBUvit/kD7UlBjk44wYYKYzHzqQkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d6s0Wj/btsHgfBUvit/kD7UlBjk44wYYKYzHzqQkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d6s0Wj/btsHgfBUvit/kD7UlBjk44wYYKYzHzqQkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd6s0Wj%2FbtsHgfBUvit%2FkD7UlBjk44wYYKYzHzqQkK%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;1013&quot; height=&quot;675&quot; data-origin-width=&quot;1013&quot; data-origin-height=&quot;675&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1138&quot; data-origin-height=&quot;950&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rhcmw/btsHhud88ZO/IcRvp1XN72BSgF2fGiGriK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rhcmw/btsHhud88ZO/IcRvp1XN72BSgF2fGiGriK/img.png&quot; data-alt=&quot;JVM이 실행되는 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rhcmw/btsHhud88ZO/IcRvp1XN72BSgF2fGiGriK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frhcmw%2FbtsHhud88ZO%2FIcRvp1XN72BSgF2fGiGriK%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;1138&quot; height=&quot;950&quot; data-origin-width=&quot;1138&quot; data-origin-height=&quot;950&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;JVM이 실행되는 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림을 순서대로 정리하면 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;소스코드(.java)를 작성한다.&lt;/li&gt;
&lt;li&gt;컴파일러(Compiler)가 자바 소스코드를 이용하여 클래스 파일을 생성한다. javac 명령어로 컴파일을 진행한다.&lt;/li&gt;
&lt;li&gt;컴파일된 클래스 파일(.class) 파일은 JVM이 인식할 수 있는 바이트 코드 파일이다.&lt;/li&gt;
&lt;li&gt;JVM은 클래스 파일의 바이트 코드를 해석하여 바이너리 코드로 변환한다.&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;blockquote data-ke-style=&quot;style3&quot;&gt;✔️ &lt;b&gt;바이트 코드(Byte Code)란?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;가상 컴퓨터(Virtual Machine)에서 돌아가는 실행 프로그램을 위한 이진 표현법&lt;/blockquote&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;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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;&lt;b&gt;JVM의 동작 방식&lt;/b&gt;&lt;/u&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;JVM은 &lt;b&gt;클래스 로더(Class Loader), 실행 엔진(Execution Engine), 런타임 데이터 영역(Runtime Data Area)&lt;/b&gt;로 구성되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 클래스 로더 (Class Loader)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소스 코드를 작성하면 .java 파일이 생성된다. 이러한 .java 파일은 컴파일러(javac)에 의해 자바 바이트 코드(.class)로 컴파일된다. 컴파일 된 바이트코드를 클래스 로더가 Runtime Data Area로 적재하는 역할을 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;529&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p28bA/btsHeZsVs1m/acSa9N2mh9fzQP2rEcMGIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p28bA/btsHeZsVs1m/acSa9N2mh9fzQP2rEcMGIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p28bA/btsHeZsVs1m/acSa9N2mh9fzQP2rEcMGIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp28bA%2FbtsHeZsVs1m%2FacSa9N2mh9fzQP2rEcMGIK%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;682&quot; height=&quot;529&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;529&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;클래스 로더는 바이트 코드(.class) 파일들을 엮어서 JVM 메모리 영역인 Runtime Data Areas에 배치한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서는 Loading -&amp;gt; Linking -&amp;gt; Initialization 로 로딩이 구성된다.&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;Loading(로드) : 클래스 파일을 가져와서 JVM의 메모리에 로드한다.&lt;/li&gt;
&lt;li&gt;Linking(링크) : 검증하는 과정이다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Verify(검증) : JVM에 명시된 대로 구성되어 있는지 확인한다.&lt;/li&gt;
&lt;li&gt;Prepare(준비) : 클래스가 필요로 하는 메모리를 할당한다.&lt;/li&gt;
&lt;li&gt;Resolve(분석) : 클래스의 상수 풀 내 모든 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변경한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Initialization(초기화) : 클래스 변수들을 적절한 값으로 초기화한다.&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;2. 실행 엔진 (Execution Engine)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 로더를 통해 런타임 데이터 영역(Runtime Data Area)에 배치된 바이트 코드(.class)를 명령어 단위로 읽어서 실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 엔진에서 자바 바이트 코드는 가상 머신이 이해할 수 있는 컴파일 된 코드로 JVM 내부에서 기계가 바로 수행할 수 있도록 한다. Java Interpreter와 JIT Compiler를 통해 바이트 코드를 실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dXMqzy/btsHgik8j5Y/ygEhBenZNpVVKvbixKzQq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dXMqzy/btsHgik8j5Y/ygEhBenZNpVVKvbixKzQq1/img.png&quot; data-alt=&quot;JVM 실행 엔진&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dXMqzy/btsHgik8j5Y/ygEhBenZNpVVKvbixKzQq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdXMqzy%2FbtsHgik8j5Y%2FygEhBenZNpVVKvbixKzQq1%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;1400&quot; height=&quot;432&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;432&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;JVM 실행 엔진&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 런타임 데이터 영역 (Runtime Data Area)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;599&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzmRpq/btsHkkJhVYE/8GtRWeeoNZt2hXIfhr1yu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzmRpq/btsHkkJhVYE/8GtRWeeoNZt2hXIfhr1yu0/img.png&quot; data-alt=&quot;JVM 런타임 데이터 영역&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzmRpq/btsHkkJhVYE/8GtRWeeoNZt2hXIfhr1yu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzmRpq%2FbtsHkkJhVYE%2F8GtRWeeoNZt2hXIfhr1yu0%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;1116&quot; height=&quot;599&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;599&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;JVM 런타임 데이터 영역&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바 프로그램을 실행할 때 사용되는 데이터들을 적재하는 영역이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크게 Method Area, Heap, Stack, PC Register, Native Method Stack가 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메서드 영역 (Method Area) : 모든 스레드가 공유 가능한 영역&lt;/li&gt;
&lt;li&gt;힙 영역 (Heap Area) : 메서드 안에서 사용되는 객체들을 위한 영역&lt;/li&gt;
&lt;li&gt;스택 영역 (Stack Area) : 스레드가 시작될 때 할당&lt;/li&gt;
&lt;li&gt;PC 레지스터 (Program Counter Register) : 스레드가 시작될 때 할당&lt;/li&gt;
&lt;li&gt;네이티브 메서드 스택 (Native Method Stack) : 네이티브 코드를 수행하기 위한 메모리 영역&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;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://honbabzone.com/java/java-jvm/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://honbabzone.com/java/java-jvm/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715152770849&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;JVM( Java Virtual Machine )이란&quot; data-og-description=&quot;JAVA를 공부하는 데 있어 기본이 되는 JVM이 무엇인지 학습하고, JVM의 메모리 구조와 Garbage collector, Execution Engine, Class Loader에 대한 기본적인 설명 등 JVM이 어떻게 돌아가는지에 대한 기초를 잡는 &quot; data-og-host=&quot;honbabzone.com&quot; data-og-source-url=&quot;https://honbabzone.com/java/java-jvm/&quot; data-og-url=&quot;https://honbabzone.com/java/java-jvm/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/SFZYe/hyVZjb9HuJ/u9Ru5J9bNGlQ5VED5M14n1/img.png?width=1280&amp;amp;height=889&amp;amp;face=0_0_1280_889,https://scrap.kakaocdn.net/dn/c6c9Ps/hyV2zdifso/TMk5LaYqHcVlnBKPbhwFF1/img.png?width=1262&amp;amp;height=683&amp;amp;face=0_0_1262_683,https://scrap.kakaocdn.net/dn/bLDcuc/hyV2srJbvA/kH1EBVF7uq28Ih5iLBf5O1/img.png?width=1026&amp;amp;height=695&amp;amp;face=0_0_1026_695&quot;&gt;&lt;a href=&quot;https://honbabzone.com/java/java-jvm/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://honbabzone.com/java/java-jvm/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/SFZYe/hyVZjb9HuJ/u9Ru5J9bNGlQ5VED5M14n1/img.png?width=1280&amp;amp;height=889&amp;amp;face=0_0_1280_889,https://scrap.kakaocdn.net/dn/c6c9Ps/hyV2zdifso/TMk5LaYqHcVlnBKPbhwFF1/img.png?width=1262&amp;amp;height=683&amp;amp;face=0_0_1262_683,https://scrap.kakaocdn.net/dn/bLDcuc/hyV2srJbvA/kH1EBVF7uq28Ih5iLBf5O1/img.png?width=1026&amp;amp;height=695&amp;amp;face=0_0_1026_695');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;JVM( Java Virtual Machine )이란&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;JAVA를 공부하는 데 있어 기본이 되는 JVM이 무엇인지 학습하고, JVM의 메모리 구조와 Garbage collector, Execution Engine, Class Loader에 대한 기본적인 설명 등 JVM이 어떻게 돌아가는지에 대한 기초를 잡는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;honbabzone.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://doozi0316.tistory.com/entry/1%EC%A3%BC%EC%B0%A8-JVM%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94-%EA%B2%83%EC%9D%B8%EA%B0%80&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://doozi0316.tistory.com/entry/1%EC%A3%BC%EC%B0%A8-JVM%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94-%EA%B2%83%EC%9D%B8%EA%B0%80&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715152781782&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[JAVA] JVM이란? 개념 및 구조 (JDK, JRE, JIT, 가비지 콜렉터...)&quot; data-og-description=&quot;JVM이란 무엇인가 Java Virtual Machine의 줄임말. 직역하면 '자바를 실행하기 위한 가상 기계(컴퓨터)'라고 할 수 있다. Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되&quot; data-og-host=&quot;doozi0316.tistory.com&quot; data-og-source-url=&quot;https://doozi0316.tistory.com/entry/1%EC%A3%BC%EC%B0%A8-JVM%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94-%EA%B2%83%EC%9D%B8%EA%B0%80&quot; data-og-url=&quot;https://doozi0316.tistory.com/entry/1%EC%A3%BC%EC%B0%A8-JVM%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94-%EA%B2%83%EC%9D%B8%EA%B0%80&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bePmME/hyVZrH0lGe/pcaz2UQQD3brLshoSfqlG0/img.png?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/tqrr3/hyV2wnmGjE/o6S0YkRJDqmtiQZRw1uhsK/img.png?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/2PuZB/hyV2xGzpU5/bN053Qmr1DPkUQG2nGHXi0/img.png?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot;&gt;&lt;a href=&quot;https://doozi0316.tistory.com/entry/1%EC%A3%BC%EC%B0%A8-JVM%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94-%EA%B2%83%EC%9D%B8%EA%B0%80&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://doozi0316.tistory.com/entry/1%EC%A3%BC%EC%B0%A8-JVM%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94-%EA%B2%83%EC%9D%B8%EA%B0%80&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bePmME/hyVZrH0lGe/pcaz2UQQD3brLshoSfqlG0/img.png?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/tqrr3/hyV2wnmGjE/o6S0YkRJDqmtiQZRw1uhsK/img.png?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/2PuZB/hyV2xGzpU5/bN053Qmr1DPkUQG2nGHXi0/img.png?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[JAVA] JVM이란? 개념 및 구조 (JDK, JRE, JIT, 가비지 콜렉터...)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;JVM이란 무엇인가 Java Virtual Machine의 줄임말. 직역하면 '자바를 실행하기 위한 가상 기계(컴퓨터)'라고 할 수 있다. Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;doozi0316.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://interviewnoodle.com/how-does-classloader-work-in-java-96904ab25eef&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://interviewnoodle.com/how-does-classloader-work-in-java-96904ab25eef&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715150959200&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;How does Classloader work in Java?&quot; data-og-description=&quot;What is the ClassLoader subsystem?&quot; data-og-host=&quot;interviewnoodle.com&quot; data-og-source-url=&quot;https://interviewnoodle.com/how-does-classloader-work-in-java-96904ab25eef&quot; data-og-url=&quot;https://interviewnoodle.com/how-does-classloader-work-in-java-96904ab25eef&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/d3BwOV/hyV2AwwWt5/b85iUP2PRWGBiDhuoom9Qk/img.png?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675,https://scrap.kakaocdn.net/dn/cjJR1P/hyV2D7RIno/odl2WdX75jUefsfKy9L9Q0/img.jpg?width=1358&amp;amp;height=850&amp;amp;face=0_0_1358_850,https://scrap.kakaocdn.net/dn/cVq7lT/hyV2zYFDt3/3wFIK9kyNvrALWsCWhLZ8K/img.png?width=1358&amp;amp;height=764&amp;amp;face=0_0_1358_764&quot;&gt;&lt;a href=&quot;https://interviewnoodle.com/how-does-classloader-work-in-java-96904ab25eef&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://interviewnoodle.com/how-does-classloader-work-in-java-96904ab25eef&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/d3BwOV/hyV2AwwWt5/b85iUP2PRWGBiDhuoom9Qk/img.png?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675,https://scrap.kakaocdn.net/dn/cjJR1P/hyV2D7RIno/odl2WdX75jUefsfKy9L9Q0/img.jpg?width=1358&amp;amp;height=850&amp;amp;face=0_0_1358_850,https://scrap.kakaocdn.net/dn/cVq7lT/hyV2zYFDt3/3wFIK9kyNvrALWsCWhLZ8K/img.png?width=1358&amp;amp;height=764&amp;amp;face=0_0_1358_764');&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;How does Classloader work in Java?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;What is the ClassLoader subsystem?&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;interviewnoodle.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chamalwr.medium.com/inside-the-jvm-part-05-execution-engine-15857827ac82&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://chamalwr.medium.com/inside-the-jvm-part-05-execution-engine-15857827ac82&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715151971911&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Inside the JVM &amp;mdash; Part 05 (Execution Engine)&quot; data-og-description=&quot;Execution engine is responsible for executing the program and How actually it does that?&quot; data-og-host=&quot;chamalwr.medium.com&quot; data-og-source-url=&quot;https://chamalwr.medium.com/inside-the-jvm-part-05-execution-engine-15857827ac82&quot; data-og-url=&quot;https://chamalwr.medium.com/inside-the-jvm-part-05-execution-engine-15857827ac82&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/L5xNl/hyV2w8J6PT/QyjYKrOAk0UCVc7iq4fue1/img.jpg?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800,https://scrap.kakaocdn.net/dn/cQmKuJ/hyV2qgnreL/MOBVNwWydhaQKHdETfCHU0/img.jpg?width=1358&amp;amp;height=1019&amp;amp;face=0_0_1358_1019,https://scrap.kakaocdn.net/dn/nir5o/hyVZs7Z2RG/TeOR9Hh0kkVksIZCLRXgxk/img.jpg?width=1358&amp;amp;height=905&amp;amp;face=0_0_1358_905&quot;&gt;&lt;a href=&quot;https://chamalwr.medium.com/inside-the-jvm-part-05-execution-engine-15857827ac82&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chamalwr.medium.com/inside-the-jvm-part-05-execution-engine-15857827ac82&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/L5xNl/hyV2w8J6PT/QyjYKrOAk0UCVc7iq4fue1/img.jpg?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800,https://scrap.kakaocdn.net/dn/cQmKuJ/hyV2qgnreL/MOBVNwWydhaQKHdETfCHU0/img.jpg?width=1358&amp;amp;height=1019&amp;amp;face=0_0_1358_1019,https://scrap.kakaocdn.net/dn/nir5o/hyVZs7Z2RG/TeOR9Hh0kkVksIZCLRXgxk/img.jpg?width=1358&amp;amp;height=905&amp;amp;face=0_0_1358_905');&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;Inside the JVM &amp;mdash; Part 05 (Execution Engine)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Execution engine is responsible for executing the program and How actually it does that?&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chamalwr.medium.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <category>java</category>
      <category>java virtual machine</category>
      <category>JVM</category>
      <category>vm</category>
      <author>데브로그98</author>
      <guid isPermaLink="true">https://devlogar.tistory.com/11</guid>
      <comments>https://devlogar.tistory.com/11#entry11comment</comments>
      <pubDate>Thu, 9 May 2024 15:54:06 +0900</pubDate>
    </item>
    <item>
      <title>[OS] Virtual Machine이란? (ft. 도커와 가상 머신의 차이점)</title>
      <link>https://devlogar.tistory.com/10</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;가상 머신(Virtual Machine)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt; &lt;span style=&quot;color: #333333; text-align: center;&quot;&gt;Windows를 그대로 사용하면서 여러 대의 리눅스 서버를 운영하는 효과를 내는 프로그램으로,&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: center;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: center;&quot;&gt;실제 컴퓨터처럼 작동한다.&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;컴퓨터 안에 또 다른 컴퓨터를 동작시키는 것&lt;/span&gt;&lt;/blockquote&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;920&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nISZZ/btsHgheFbT9/fOSdzoOTzIhnDA7OSxwpV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nISZZ/btsHgheFbT9/fOSdzoOTzIhnDA7OSxwpV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nISZZ/btsHgheFbT9/fOSdzoOTzIhnDA7OSxwpV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnISZZ%2FbtsHgheFbT9%2FfOSdzoOTzIhnDA7OSxwpV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;920&quot; data-origin-width=&quot;1280&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;가상 머신을 사용하는 이유&lt;/h4&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;h4 data-ke-size=&quot;size20&quot;&gt;가상 머신의 종류&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 시스템 가상 머신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 프로세스 가상 머신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;❗️도커와 가상 머신의 차이는 무엇인가&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커(Docker)는 &lt;u&gt;&lt;b&gt;컨테이너 기반의 오픈소스 가상화 플랫폼&lt;/b&gt;&lt;/u&gt;이다. 컨테이너는 플랫폼에 상관없이 Application을 실행할 수 있는 기술을 의미한다. 도커의 로고가 상징하는 각종 Application을 실어 운반하는 고래처럼&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커 허브(DockerHub)를 통하여 어떤 환경에서든 배포를 도와주는 역할을 한다.&lt;/p&gt;
&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;는 하드웨어가 아닌 운영 체제를 가상화하여 가상 머신과 다르게 작동한다. 하나의 HostOS 위에 Docker를 설치하여 그 위에 각각의 Application 환경을 설치하는 형태이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;238&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/de4i5Q/btsHdv59tOq/KAmZeppIoeBhm3THA2V0g0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/de4i5Q/btsHdv59tOq/KAmZeppIoeBhm3THA2V0g0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/de4i5Q/btsHdv59tOq/KAmZeppIoeBhm3THA2V0g0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fde4i5Q%2FbtsHdv59tOq%2FKAmZeppIoeBhm3THA2V0g0%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;238&quot; height=&quot;212&quot; data-origin-width=&quot;238&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;가상 머신(VM, Virtual Machine)은 Hypervisor를 이용해 하나의 HostOS에서 여러 개의 GuestOS를 설치하는 형태이다. 각각의 가상 머신이 하나의 독립된 커널 공간을 가진 컴퓨터 환경을 의미한다. 따라서, 여러 개의 가상 머신이 포함되기 때문에 용량이 무거워지게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;421&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpSsmI/btsHgBcUcaY/k0aVotBZ0BXeaDNVONX8r0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpSsmI/btsHgBcUcaY/k0aVotBZ0BXeaDNVONX8r0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpSsmI/btsHgBcUcaY/k0aVotBZ0BXeaDNVONX8r0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpSsmI%2FbtsHgBcUcaY%2Fk0aVotBZ0BXeaDNVONX8r0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;641&quot; height=&quot;421&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;421&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;h4 data-ke-size=&quot;size20&quot;&gt;참고&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://joyfuls.tistory.com/48&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://joyfuls.tistory.com/48&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715133758037&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Virtual Machine(가상 머신)이란?  (feat. 가상화 vs 클라우드)&quot; data-og-description=&quot;가상 머신 (VM : Virltual Machine) 이란? - 실재하는 컴퓨터 상에 소프트웨어로 논리적으로 만들어낸 컴퓨터 - 하나의 물리 자원(컴퓨터) 위에 하나의 환경(OS)만 있는 것을 효율화하고자 가상화층을 만&quot; data-og-host=&quot;joyfuls.tistory.com&quot; data-og-source-url=&quot;https://joyfuls.tistory.com/48&quot; data-og-url=&quot;https://joyfuls.tistory.com/48&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/brm0K0/hyVZq98cd0/rvlvEwvdNs31Tggr4TKpIK/img.png?width=595&amp;amp;height=464&amp;amp;face=0_0_595_464,https://scrap.kakaocdn.net/dn/b5VdTF/hyVZl13NSV/2Oomf4zxBsyk0OqO4N97a0/img.png?width=595&amp;amp;height=464&amp;amp;face=0_0_595_464,https://scrap.kakaocdn.net/dn/bLUd9O/hyV2skU92B/R2pYfSDGR23XXZTjMD8FL1/img.jpg?width=1001&amp;amp;height=949&amp;amp;face=0_0_1001_949&quot;&gt;&lt;a href=&quot;https://joyfuls.tistory.com/48&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://joyfuls.tistory.com/48&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/brm0K0/hyVZq98cd0/rvlvEwvdNs31Tggr4TKpIK/img.png?width=595&amp;amp;height=464&amp;amp;face=0_0_595_464,https://scrap.kakaocdn.net/dn/b5VdTF/hyVZl13NSV/2Oomf4zxBsyk0OqO4N97a0/img.png?width=595&amp;amp;height=464&amp;amp;face=0_0_595_464,https://scrap.kakaocdn.net/dn/bLUd9O/hyV2skU92B/R2pYfSDGR23XXZTjMD8FL1/img.jpg?width=1001&amp;amp;height=949&amp;amp;face=0_0_1001_949');&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;Virtual Machine(가상 머신)이란? (feat. 가상화 vs 클라우드)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;가상 머신 (VM : Virltual Machine) 이란? - 실재하는 컴퓨터 상에 소프트웨어로 논리적으로 만들어낸 컴퓨터 - 하나의 물리 자원(컴퓨터) 위에 하나의 환경(OS)만 있는 것을 효율화하고자 가상화층을 만&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;joyfuls.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.bitovi.com/academy/learn-docker/what-is-docker.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.bitovi.com/academy/learn-docker/what-is-docker.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715133706641&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;Bitovi Academy - What is Docker&quot; data-og-description=&quot;Explore Docker concepts and architecture.&quot; data-og-host=&quot;www.bitovi.com&quot; data-og-source-url=&quot;https://www.bitovi.com/academy/learn-docker/what-is-docker.html&quot; data-og-url=&quot;https://www.bitovi.com/academy/learn-docker/what-is-docker.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ALIsn/hyVZudBrHb/SfZY8dIBMLMIVBmJIXn7Ok/img.png?width=641&amp;amp;height=421&amp;amp;face=0_0_641_421&quot;&gt;&lt;a href=&quot;https://www.bitovi.com/academy/learn-docker/what-is-docker.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.bitovi.com/academy/learn-docker/what-is-docker.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ALIsn/hyVZudBrHb/SfZY8dIBMLMIVBmJIXn7Ok/img.png?width=641&amp;amp;height=421&amp;amp;face=0_0_641_421');&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;Bitovi Academy - What is Docker&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Explore Docker concepts and architecture.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.bitovi.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Computer Science/Operating System</category>
      <category>Container</category>
      <category>Virtual Machine</category>
      <category>vm</category>
      <category>가상 머신</category>
      <category>가상화</category>
      <category>도커</category>
      <author>데브로그98</author>
      <guid isPermaLink="true">https://devlogar.tistory.com/10</guid>
      <comments>https://devlogar.tistory.com/10#entry10comment</comments>
      <pubDate>Wed, 8 May 2024 11:10:52 +0900</pubDate>
    </item>
    <item>
      <title>Spring에서 HTTP Request을 처리하는 과정</title>
      <link>https://devlogar.tistory.com/9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;웹에 URL 주소를 입력했을 때 HTTP 요청이 시작된다. 요청을 하고 응답을 받으면 이 과정이 종료되는데, 어떤 일이 일어나는지 알아보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;836&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eiePtl/btsGHlPfh4D/db2JAD0mRhXeVB2ihiKds0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eiePtl/btsGHlPfh4D/db2JAD0mRhXeVB2ihiKds0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eiePtl/btsGHlPfh4D/db2JAD0mRhXeVB2ihiKds0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeiePtl%2FbtsGHlPfh4D%2Fdb2JAD0mRhXeVB2ihiKds0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;836&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;836&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;1. Client에서 Server로 요청을 전달한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 요청은 DispatcherServlet이 받는데, 이것은 요청을 처리하기 위한 프론트 컨트롤러이다. 진입점 역할을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1068&quot; data-origin-height=&quot;670&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcmNvA/btsGEr4AuQm/BbvWdobK4oAwR7JQidvuD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcmNvA/btsGEr4AuQm/BbvWdobK4oAwR7JQidvuD1/img.png&quot; data-alt=&quot;이렇게 서블릿 컨테이너의 앞단에서 모든 요청을 받아 처리한다. 디스패처 서블릿이 도입된 이후 공통 로직에 대한 처리가 간편해졌다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcmNvA/btsGEr4AuQm/BbvWdobK4oAwR7JQidvuD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcmNvA%2FbtsGEr4AuQm%2FBbvWdobK4oAwR7JQidvuD1%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;1068&quot; height=&quot;670&quot; data-origin-width=&quot;1068&quot; data-origin-height=&quot;670&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이렇게 서블릿 컨테이너의 앞단에서 모든 요청을 받아 처리한다. 디스패처 서블릿이 도입된 이후 공통 로직에 대한 처리가 간편해졌다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DispatchServlet이 등장하게 된 배경&lt;/b&gt;은,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 web.xml에 대한 의존을 낮추고 하나의 서블릿으로 모든 것을 관리해서 코드 중복 문제가 없어졌다. 자세한 것은 Spring MVC 패턴의 front-controller pattern을 알아보면 된다.&lt;/p&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. 해당 엔드포인트를 어떤 컨트롤러가 담당할지 HandlerMapping이 결정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(RequestMappingHandlerMapping -&amp;gt; BeanNameUrlHandlerMapping -&amp;gt; HttpRequestHandler 흐름대로 탐색을 진행한다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. HandlerAdapter를 통해 해당 컨트롤러의 메서드를 실행시킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(RequestMappingHandlerAdapter -&amp;gt; HttpRequestHandler -&amp;gt; SimpleHandlerAdapter 순서로 탐색한다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Controller가 요청 처리를 위임한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 해당 뷰 정보를 DispatcherServlet에 전달한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 어떤 View에 데이터를 전달해야할 지 모르니까, View Resolver를 통해 View 파일을 찾는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. View는 UI와 Client에게 응답한다.&lt;/p&gt;
&lt;p data-ke-size=&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;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://egovframe.go.kr/wiki/doku.php?id=egovframework:rte:ptl:dispatcherservlet&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://egovframe.go.kr/wiki/doku.php?id=egovframework:rte:ptl:dispatcherservlet&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713314320065&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;egovframework:rte:ptl:dispatcherservlet    [eGovFrame]&quot; data-og-description=&quot;Spring MVC Framework의 유일한 Front Controller인 DispatcherServlet은 Spring MVC의 핵심 요소이다. DispatcherServlet은 Controller로 향하는 모든 웹요청의 진입점이며, 웹요청을 처리하며, 결과 데이터를 Client에게 응&quot; data-og-host=&quot;egovframe.go.kr&quot; data-og-source-url=&quot;https://egovframe.go.kr/wiki/doku.php?id=egovframework:rte:ptl:dispatcherservlet&quot; data-og-url=&quot;https://egovframe.go.kr/wiki/doku.php?id=egovframework%3Arte%3Aptl%3Adispatcherservlet&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/EP1iV/hyVSXSxWIb/HhjgDELvD4pYytkeqJGkQ0/img.jpg?width=1048&amp;amp;height=621&amp;amp;face=0_0_1048_621,https://scrap.kakaocdn.net/dn/9jCvY/hyVSU9l7UB/h8Nf2kwhnDkVw46RQtlwV0/img.jpg?width=627&amp;amp;height=299&amp;amp;face=0_0_627_299&quot;&gt;&lt;a href=&quot;https://egovframe.go.kr/wiki/doku.php?id=egovframework:rte:ptl:dispatcherservlet&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://egovframe.go.kr/wiki/doku.php?id=egovframework:rte:ptl:dispatcherservlet&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/EP1iV/hyVSXSxWIb/HhjgDELvD4pYytkeqJGkQ0/img.jpg?width=1048&amp;amp;height=621&amp;amp;face=0_0_1048_621,https://scrap.kakaocdn.net/dn/9jCvY/hyVSU9l7UB/h8Nf2kwhnDkVw46RQtlwV0/img.jpg?width=627&amp;amp;height=299&amp;amp;face=0_0_627_299');&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;egovframework:rte:ptl:dispatcherservlet [eGovFrame]&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Spring MVC Framework의 유일한 Front Controller인 DispatcherServlet은 Spring MVC의 핵심 요소이다. DispatcherServlet은 Controller로 향하는 모든 웹요청의 진입점이며, 웹요청을 처리하며, 결과 데이터를 Client에게 응&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;egovframe.go.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring</category>
      <category>DispatcherServlet</category>
      <category>HTTP request</category>
      <category>servlet</category>
      <category>Spring MVC</category>
      <author>데브로그98</author>
      <guid isPermaLink="true">https://devlogar.tistory.com/9</guid>
      <comments>https://devlogar.tistory.com/9#entry9comment</comments>
      <pubDate>Wed, 17 Apr 2024 10:01:16 +0900</pubDate>
    </item>
    <item>
      <title>Windows 11 minikube 설치과정 알아보기</title>
      <link>https://devlogar.tistory.com/8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kubernetes를 실습하기 위해 학습에 알맞게 간편하게 구축하여 사용할 수 있는 &lt;b&gt;minukube를 설치&lt;/b&gt;하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관리형 쿠버네티스의 경우 비용이 청구되어 상용 수준의 테스트를 하기에는 무리가 있으므로, 로컬 환경에서 minikube나, k3s를 활용하여 쿠버네티스 클러스터를 구성할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;쿠버네티스 공식 사이트: Minikube로 경량화된 쿠버네티스 설치&lt;br /&gt;https://kubernetes.io/ko/docs/setup/learning-environment/minikube/&lt;br /&gt;&lt;br /&gt;미니큐브 공식 사이트&lt;br /&gt;https://minikube.sigs.k8s.io/docs/start&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bS3VSH/btsGEi0woOd/X1TQoomOpJKOXsK4me3gvk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bS3VSH/btsGEi0woOd/X1TQoomOpJKOXsK4me3gvk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bS3VSH/btsGEi0woOd/X1TQoomOpJKOXsK4me3gvk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbS3VSH%2FbtsGEi0woOd%2FX1TQoomOpJKOXsK4me3gvk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;640&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;minikube를 사용하기 위해 필요한 것&lt;/h3&gt;
&lt;h2 id=&quot;what-youll-need&quot; style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;What you&amp;rsquo;ll need&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2 CPUs or more&lt;/li&gt;
&lt;li&gt;2GB of free memory&lt;/li&gt;
&lt;li&gt;20GB of free disk space&lt;/li&gt;
&lt;li&gt;Internet connection&lt;/li&gt;
&lt;li&gt;Container or virtual machine manager, such as:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://minikube.sigs.k8s.io/docs/drivers/docker/&quot;&gt;Docker&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://minikube.sigs.k8s.io/docs/drivers/qemu/&quot;&gt;QEMU&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://minikube.sigs.k8s.io/docs/drivers/hyperkit/&quot;&gt;Hyperkit&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://minikube.sigs.k8s.io/docs/drivers/hyperv/&quot;&gt;Hyper-V&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://minikube.sigs.k8s.io/docs/drivers/kvm2/&quot;&gt;KVM&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://minikube.sigs.k8s.io/docs/drivers/parallels/&quot;&gt;Parallels&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://minikube.sigs.k8s.io/docs/drivers/podman/&quot;&gt;Podman&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://minikube.sigs.k8s.io/docs/drivers/virtualbox/&quot;&gt;VirtualBox&lt;/a&gt;, or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://minikube.sigs.k8s.io/docs/drivers/vmware/&quot;&gt;VMware Fusion/Workstation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Windows 설치 과정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 미니큐브 공식 홈페이지에 Installation의 Operating system에서 Windows를 선택한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;860&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dUCTIT/btsGCWDBM4F/c8A1gkkGQJNrzrPc8y0Ic0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dUCTIT/btsGCWDBM4F/c8A1gkkGQJNrzrPc8y0Ic0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dUCTIT/btsGCWDBM4F/c8A1gkkGQJNrzrPc8y0Ic0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdUCTIT%2FbtsGCWDBM4F%2Fc8A1gkkGQJNrzrPc8y0Ic0%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;1917&quot; height=&quot;860&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;860&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;2. download된 폴더로 들어가 minikube-installer.exe 파일을 실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/585Fp/btsGGQV1sEb/KfKB4Ak3HX31XPCfauym00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/585Fp/btsGGQV1sEb/KfKB4Ak3HX31XPCfauym00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/585Fp/btsGGQV1sEb/KfKB4Ak3HX31XPCfauym00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F585Fp%2FbtsGGQV1sEb%2FKfKB4Ak3HX31XPCfauym00%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;717&quot; height=&quot;443&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;441&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4bLS6/btsGEgVV0H6/JFq9WWsRSX7IixVDRTIyo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4bLS6/btsGEgVV0H6/JFq9WWsRSX7IixVDRTIyo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4bLS6/btsGEgVV0H6/JFq9WWsRSX7IixVDRTIyo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4bLS6%2FbtsGEgVV0H6%2FJFq9WWsRSX7IixVDRTIyo1%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;719&quot; height=&quot;441&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;441&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;3. 제어판의 고급 시스템 설정에 들어가 환경변수를 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기본경로를 path에 추가&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713249171593&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;C:\Program Files\Kubernetes\Minikube&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;4. cmd 창에서 minikube version 명령어를 실행한다.&lt;/p&gt;
&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;도커 CLI 컨텍스트 에러 - 현재 Docker CLI 컨텍스트 &quot;default&quot;를 가져올 수 없어 발생한 에러&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1456&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFfz8c/btsGFzmWmpq/k8zWFxWsZgkQek3b9c7Kpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFfz8c/btsGFzmWmpq/k8zWFxWsZgkQek3b9c7Kpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFfz8c/btsGFzmWmpq/k8zWFxWsZgkQek3b9c7Kpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFfz8c%2FbtsGFzmWmpq%2Fk8zWFxWsZgkQek3b9c7Kpk%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;1456&quot; height=&quot;86&quot; data-origin-width=&quot;1456&quot; data-origin-height=&quot;86&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;아래의 명령어 실행&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713249119188&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker context use default&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;설치한 minikube 버전&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713249094704&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;minikube version: v1.32.0
commit: 8220a6eb95f0a4d75f7f2d7b14cef975f050512d&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;h4 data-ke-size=&quot;size20&quot;&gt;참고&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://minikube.sigs.k8s.io/docs/start/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://minikube.sigs.k8s.io/docs/start/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713246303165&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;minikube start&quot; data-og-description=&quot;minikube is local Kubernetes&quot; data-og-host=&quot;minikube.sigs.k8s.io&quot; data-og-source-url=&quot;https://minikube.sigs.k8s.io/docs/start/&quot; data-og-url=&quot;https://minikube.sigs.k8s.io/docs/start/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://minikube.sigs.k8s.io/docs/start/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://minikube.sigs.k8s.io/docs/start/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;minikube start&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;minikube is local Kubernetes&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;minikube.sigs.k8s.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/77633616/unable-to-access-minikube-message-starting-minikube-worries-me-unable-to-reso&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://stackoverflow.com/questions/77633616/unable-to-access-minikube-message-starting-minikube-worries-me-unable-to-reso&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713249053431&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;Unable to access Minikube! message starting miniKube worries me: &amp;quot;Unable to resolve the Docker CLI context&amp;quot; &amp;quot;The system cannot f&quot; data-og-description=&quot;I'm facing error in Minikube I was trying to start with Minikube start command It gets following error Unable to resolve the current Docker CLI context &amp;quot;default&amp;quot;: context &amp;quot;default&amp;amp;q...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/77633616/unable-to-access-minikube-message-starting-minikube-worries-me-unable-to-reso&quot; data-og-url=&quot;https://stackoverflow.com/questions/77633616/unable-to-access-minikube-message-starting-minikube-worries-me-unable-to-reso&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Myo9R/hyVPR0v7Fq/IAGr233g9aS9KHHgVunEy0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/77633616/unable-to-access-minikube-message-starting-minikube-worries-me-unable-to-reso&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/77633616/unable-to-access-minikube-message-starting-minikube-worries-me-unable-to-reso&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Myo9R/hyVPR0v7Fq/IAGr233g9aS9KHHgVunEy0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&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;Unable to access Minikube! message starting miniKube worries me: &quot;Unable to resolve the Docker CLI context&quot; &quot;The system cannot f&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I'm facing error in Minikube I was trying to start with Minikube start command It gets following error Unable to resolve the current Docker CLI context &quot;default&quot;: context &quot;default&amp;amp;q...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DevOps/Kubernetes</category>
      <category>k8s</category>
      <category>kubernetes</category>
      <category>minikube</category>
      <author>데브로그98</author>
      <guid isPermaLink="true">https://devlogar.tistory.com/8</guid>
      <comments>https://devlogar.tistory.com/8#entry8comment</comments>
      <pubDate>Tue, 16 Apr 2024 15:40:04 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 비트연산 &amp;amp;</title>
      <link>https://devlogar.tistory.com/7</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;프로그래머스 &amp;gt; SELECT &amp;gt; 조건에 맞는 개발자 찾기&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;861&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u9Dp8/btsGBdEUwak/1bfHdioHIoCdkM1RdLxG31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u9Dp8/btsGBdEUwak/1bfHdioHIoCdkM1RdLxG31/img.png&quot; data-alt=&quot;출처 : https://school.programmers.co.kr/learn/courses/30/lessons/276034&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u9Dp8/btsGBdEUwak/1bfHdioHIoCdkM1RdLxG31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu9Dp8%2FbtsGBdEUwak%2F1bfHdioHIoCdkM1RdLxG31%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;1920&quot; height=&quot;861&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;861&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://school.programmers.co.kr/learn/courses/30/lessons/276034&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure style=&quot;text-align: center;&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; data-ke-style=&quot;alignCenter&quot; data-ke-type=&quot;image&quot;&gt;
&lt;figcaption style=&quot;color: #777777; text-align: center;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제 해설&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DEVELOPERS 테이블에서 특정 스킬을 보유한 개발자들의 정보를 검색하는 쿼리를 만들어야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1713014365317&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS
WHERE SKILL_CODE &amp;amp; (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python')
    OR SKILL_CODE &amp;amp; (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#')
ORDER BY ID&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;- MySQL에서 Python, C# 스킬을 가진 개발자를 찾기 위해 비트연산자인 AND 연산(&amp;amp;)을 사용하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &amp;amp; 연산자는 두 개의 이진수를 비교하고, 둘 다 1인경우에 결과를 1로 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Where 절에서 파이썬에 해당하는 비트 코드를 반환하고, 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;</description>
      <category>Database/SQL</category>
      <category>MySQL</category>
      <category>SQL</category>
      <category>비트연산</category>
      <author>데브로그98</author>
      <guid isPermaLink="true">https://devlogar.tistory.com/7</guid>
      <comments>https://devlogar.tistory.com/7#entry7comment</comments>
      <pubDate>Sat, 13 Apr 2024 22:39:26 +0900</pubDate>
    </item>
  </channel>
</rss>