<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>일상</title>
    <link>https://rsorry.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 9 Jun 2026 09:20:46 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>사라만</managingEditor>
    <item>
      <title>컴퓨터 구조에 대한 이론 공부 요약</title>
      <link>https://rsorry.tistory.com/298</link>
      <description>&lt;p data-end=&quot;178&quot; data-start=&quot;159&quot; data-ke-size=&quot;size14&quot;&gt;내가 보려고 만든 컴퓨터 구조에 대한 요약&lt;/p&gt;
&lt;h3 data-end=&quot;178&quot; data-start=&quot;159&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;178&quot; data-start=&quot;159&quot; data-ke-size=&quot;size23&quot;&gt;1. CPU 구성요소와 역할&lt;/h3&gt;
&lt;p data-end=&quot;212&quot; data-start=&quot;179&quot; data-ke-size=&quot;size16&quot;&gt;CPU는 &lt;b&gt;레지스터 / ALU / 제어장치&lt;/b&gt;로 구성된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;678&quot; data-start=&quot;214&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;482&quot; data-start=&quot;214&quot;&gt;&lt;b&gt;레지스터(Register)&lt;/b&gt;: CPU 내부의 매우 빠른 저장공간으로, 주소만 저장하는 게 아니라 &lt;b&gt;당장 실행/연산에 필요한 값&lt;/b&gt;들을 저장한다.&lt;br /&gt;예)
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;482&quot; data-start=&quot;314&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;359&quot; data-start=&quot;314&quot;&gt;&lt;b&gt;PC(Program Counter)&lt;/b&gt;: 다음 실행할 명령어의 주소&lt;/li&gt;
&lt;li data-end=&quot;411&quot; data-start=&quot;362&quot;&gt;&lt;b&gt;IR(Instruction Register)&lt;/b&gt;: 현재 가져온 명령어 자체&lt;/li&gt;
&lt;li data-end=&quot;443&quot; data-start=&quot;414&quot;&gt;&lt;b&gt;범용 레지스터&lt;/b&gt;: 연산 데이터/중간 결과&lt;/li&gt;
&lt;li data-end=&quot;482&quot; data-start=&quot;446&quot;&gt;&lt;b&gt;SP(Stack Pointer), FLAGS/PSW&lt;/b&gt; 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;543&quot; data-start=&quot;483&quot;&gt;&lt;b&gt;ALU(Arithmetic Logic Unit)&lt;/b&gt;: 산술/논리 연산을 수행한다. (실제 계산 담당)&lt;/li&gt;
&lt;li data-end=&quot;678&quot; data-start=&quot;544&quot;&gt;&lt;b&gt;제어장치(Control Unit)&lt;/b&gt;: IR의 명령어를 **해석(디코드)**하고, 레지스터/ALU/메모리/버스에 &lt;b&gt;제어 신호를 생성&lt;/b&gt;해 실행 흐름을 만든다.&lt;br /&gt;즉 &amp;ldquo;CPU 내부에서 무엇을 언제 어떻게 동작시킬지&amp;rdquo;를 조정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;713&quot; data-start=&quot;685&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;713&quot; data-start=&quot;685&quot; data-ke-size=&quot;size23&quot;&gt;2. 캐시-메모리-디스크 계층이 나뉘는 이유&lt;/h3&gt;
&lt;p data-end=&quot;814&quot; data-start=&quot;714&quot; data-ke-size=&quot;size16&quot;&gt;계층이 나뉘는 이유는 &lt;b&gt;속도/비용/용량&lt;/b&gt;의 트레이드오프를 해결하기 위함이며, 이를 &lt;b&gt;지역성(Locality)&lt;/b&gt;(시간/공간 지역성)으로 &amp;ldquo;현실적으로 이길 수 있기 때문&amp;rdquo;이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1173&quot; data-start=&quot;816&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;849&quot; data-start=&quot;816&quot;&gt;CPU에 가까울수록 &lt;b&gt;빠르지만 비싸고 용량이 작다.&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;926&quot; data-start=&quot;850&quot;&gt;&lt;b&gt;캐시&lt;/b&gt;는 보통 &lt;b&gt;SRAM&lt;/b&gt; 기반이라 빠르지만 비싸고 용량이 작다. (캐시 라인 단위로 가져와 hit/miss가 성능을 좌우)&lt;/li&gt;
&lt;li data-end=&quot;1030&quot; data-start=&quot;927&quot;&gt;**메모리(RAM)**는 보통 &lt;b&gt;DRAM&lt;/b&gt; 기반으로 캐시보다 느리지만 싸고 용량이 크다. 또한 &lt;b&gt;휘발성&lt;/b&gt;이라 전원이 꺼지면 데이터가 사라지고, DRAM은 리프레시가 필요하다.&lt;/li&gt;
&lt;li data-end=&quot;1173&quot; data-start=&quot;1031&quot;&gt;**디스크(SSD/HDD)**는 &lt;b&gt;비휘발성&lt;/b&gt;이라 전원이 꺼져도 데이터가 유지되고 용량이 크며 상대적으로 저렴하지만 RAM보다 느리다.&lt;br /&gt;그래서 프로그램/데이터의 영구 저장은 디스크가 담당하고, 실행 중인 코드는 RAM/캐시로 올라와 사용된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1211&quot; data-start=&quot;1180&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;1211&quot; data-start=&quot;1180&quot; data-ke-size=&quot;size23&quot;&gt;3. 명령어 실행 흐름과 파이프라인이 왜 필요한가&lt;/h3&gt;
&lt;p data-end=&quot;1334&quot; data-start=&quot;1212&quot; data-ke-size=&quot;size16&quot;&gt;컴퓨터는 디스크의 프로그램을 RAM으로 올리고, CPU는 이를 캐시에 올려 실행한다. CPU는 &lt;b&gt;Fetch &amp;rarr; Decode &amp;rarr; Execute(&amp;rarr; Memory &amp;rarr; Writeback)&lt;/b&gt; 같은 흐름으로 명령어를 처리한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1663&quot; data-start=&quot;1336&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1502&quot; data-start=&quot;1336&quot;&gt;&lt;b&gt;파이프라인이 필요한 이유&lt;/b&gt;는 &amp;ldquo;클럭에 맞추기 위해서&amp;rdquo;가 아니라, &lt;b&gt;명령어 처리 단계를 겹쳐 수행해 처리량(throughput)을 높이기 위해서&lt;/b&gt;다.&lt;br /&gt;즉 한 명령어가 끝나길 기다리는 게 아니라, 각 단계를 &lt;b&gt;동시에 다른 명령어로&lt;/b&gt; 굴려 매 클럭마다 결과가 나오게 하는 구조다.&lt;/li&gt;
&lt;li data-end=&quot;1663&quot; data-start=&quot;1503&quot;&gt;다만 파이프라인은 &lt;b&gt;hazard(데이터/구조/제어)&lt;/b&gt;, 분기 예측 실패, 그리고 &lt;b&gt;인터럽트/예외 처리 시 flush/정확한 상태 보장(precise interrupt)&lt;/b&gt; 같은 복잡도/비용을 만든다.&lt;br /&gt;즉 파이프라인은 성능을 올리지만, 인터럽트 처리를 더 까다롭게 만든다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1689&quot; data-start=&quot;1670&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;1689&quot; data-start=&quot;1670&quot; data-ke-size=&quot;size23&quot;&gt;4. 인터럽트가 왜 필요한가&lt;/h3&gt;
&lt;p data-end=&quot;1767&quot; data-start=&quot;1690&quot; data-ke-size=&quot;size16&quot;&gt;인터럽트는 &lt;b&gt;CPU가 계속 확인(polling)해야 하는 낭비를 줄이고&lt;/b&gt;, 우선 처리가 필요한 이벤트를 빠르게 처리하기 위해 필요하다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2099&quot; data-start=&quot;1769&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1831&quot; data-start=&quot;1769&quot;&gt;인터럽트가 없으면 CPU가 주기적으로 I/O 장치 요청 여부를 확인해야 하고 이는 CPU 리소스를 낭비한다.&lt;/li&gt;
&lt;li data-end=&quot;1883&quot; data-start=&quot;1832&quot;&gt;인터럽트가 있으면 CPU는 다른 작업을 수행하다가 &lt;b&gt;요청이 들어왔을 때만&lt;/b&gt; 처리한다.&lt;/li&gt;
&lt;li data-end=&quot;2024&quot; data-start=&quot;1884&quot;&gt;인터럽트가 발생하면 CPU는 보통
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;2024&quot; data-start=&quot;1909&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1938&quot; data-start=&quot;1909&quot;&gt;현재 실행 상태(PC/FLAGS 등)를 저장&lt;/li&gt;
&lt;li data-end=&quot;1955&quot; data-start=&quot;1941&quot;&gt;커널 모드로 전환&lt;/li&gt;
&lt;li data-end=&quot;1994&quot; data-start=&quot;1958&quot;&gt;인터럽트 벡터(IVT/IDT)로 핸들러 주소를 찾아 실행&lt;/li&gt;
&lt;li data-end=&quot;2024&quot; data-start=&quot;1997&quot;&gt;처리 후 복귀&lt;br /&gt;의 흐름으로 동작한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2099&quot; data-start=&quot;2025&quot;&gt;&lt;b&gt;NMI&lt;/b&gt;는 일반 인터럽트보다 더 특수하게, &lt;b&gt;마스크(차단)가 불가능&lt;/b&gt;한 성격이라 치명적 이벤트에서 최우선급으로 처리된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;2137&quot; data-start=&quot;2106&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;2137&quot; data-start=&quot;2106&quot; data-ke-size=&quot;size23&quot;&gt;5. 시스템콜(유저 &amp;rarr; 커널 전환)이 필요한 이유&lt;/h3&gt;
&lt;p data-end=&quot;2210&quot; data-start=&quot;2138&quot; data-ke-size=&quot;size16&quot;&gt;시스템콜은 사용자 프로그램이 파일/네트워크/프로세스/메모리 같은 &lt;b&gt;특권 자원&lt;/b&gt;을 안전하게 사용하기 위한 &amp;ldquo;커널 진입 통로&amp;rdquo;다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2494&quot; data-start=&quot;2212&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2261&quot; data-start=&quot;2212&quot;&gt;사용자 모드가 직접 하드웨어/커널 자원을 다루면 시스템 안정성/보안이 깨질 수 있다.&lt;/li&gt;
&lt;li data-end=&quot;2326&quot; data-start=&quot;2262&quot;&gt;그래서 커널만 가능한 작업(특권 명령, 장치 접근, 페이지 테이블 조작 등)은 &lt;b&gt;커널 모드에서만&lt;/b&gt; 수행한다.&lt;/li&gt;
&lt;li data-end=&quot;2494&quot; data-start=&quot;2327&quot;&gt;시스템콜 비용이 드는 이유는
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2494&quot; data-start=&quot;2349&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2374&quot; data-start=&quot;2349&quot;&gt;유저&amp;rarr;커널 &lt;b&gt;모드 전환 오버헤드&lt;/b&gt;,&lt;/li&gt;
&lt;li data-end=&quot;2409&quot; data-start=&quot;2377&quot;&gt;커널 스택/레지스터 저장 등 &lt;b&gt;컨텍스트 처리&lt;/b&gt;,&lt;/li&gt;
&lt;li data-end=&quot;2425&quot; data-start=&quot;2412&quot;&gt;인자/권한 검증,&lt;/li&gt;
&lt;li data-end=&quot;2451&quot; data-start=&quot;2428&quot;&gt;유저 버퍼&amp;harr;커널 버퍼 &lt;b&gt;복사&lt;/b&gt;,&lt;/li&gt;
&lt;li data-end=&quot;2494&quot; data-start=&quot;2454&quot;&gt;I/O라면 블로킹/스케줄링까지&lt;br /&gt;같은 요소가 포함되기 때문이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;2554&quot; data-start=&quot;2501&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;2554&quot; data-start=&quot;2501&quot; data-ke-size=&quot;size23&quot;&gt;6. I/O 3종이 각각 언제 유리한지 (Polling / Interrupt / DMA)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3095&quot; data-start=&quot;2555&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2783&quot; data-start=&quot;2555&quot;&gt;&lt;b&gt;Polling(프로그램 I/O, 바쁜 대기)&lt;/b&gt;: CPU가 주기적으로 장치 상태를 읽어 요청 여부를 확인한다.&lt;br /&gt;&amp;rarr; 일반적으로 CPU 낭비가 크지만,
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2783&quot; data-start=&quot;2650&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2702&quot; data-start=&quot;2650&quot;&gt;이벤트가 &lt;b&gt;매우 자주 발생&lt;/b&gt;해 인터럽트가 오히려 과부하(인터럽트 폭주)가 되는 경우&lt;/li&gt;
&lt;li data-end=&quot;2749&quot; data-start=&quot;2705&quot;&gt;아주 짧은 시간만 기다리면 거의 끝나는 경우(지연을 예측 가능하게 관리)&lt;/li&gt;
&lt;li data-end=&quot;2783&quot; data-start=&quot;2752&quot;&gt;부팅 초기/단순 환경&lt;br /&gt;에서는 유리할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2900&quot; data-start=&quot;2784&quot;&gt;&lt;b&gt;Interrupt I/O&lt;/b&gt;: 장치가 준비되면 CPU에 인터럽트를 걸어, CPU는 &lt;b&gt;필요할 때만&lt;/b&gt; 처리한다.&lt;br /&gt;&amp;rarr; polling 낭비 감소. 단, 너무 잦은 인터럽트는 오버헤드가 될 수 있다.&lt;/li&gt;
&lt;li data-end=&quot;3095&quot; data-start=&quot;2901&quot;&gt;&lt;b&gt;DMA I/O&lt;/b&gt;: CPU는 전송 작업을 직접 하지 않고 &lt;b&gt;DMA(또는 장치)가 메모리와 장치 사이 데이터를 직접 전송&lt;/b&gt;한다.&lt;br /&gt;&amp;rarr; CPU는 전송 설정(주소/길이/방향)만 하고, 완료 후 보통 인터럽트로 통지받는다.&lt;br /&gt;&amp;rarr; 대용량 전송에서 CPU 부담을 크게 줄인다. 다만 메모리/버스는 공유 자원이어서 경쟁이 발생할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;3132&quot; data-start=&quot;3102&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-end=&quot;3132&quot; data-start=&quot;3102&quot; data-ke-size=&quot;size26&quot;&gt;※ 운영에 연결되는 질문 3개 (보완/개선 버전)&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;3169&quot; data-start=&quot;3134&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;3169&quot; data-start=&quot;3134&quot;&gt;&lt;b&gt;API 지연이 튈 때 CPU vs I/O 병목 구분&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3337&quot; data-start=&quot;3170&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3235&quot; data-start=&quot;3170&quot;&gt;CPU 병목: user/sys CPU&amp;uarr;, run queue&amp;uarr;, context switch&amp;uarr;, iowait 낮음&lt;/li&gt;
&lt;li data-end=&quot;3298&quot; data-start=&quot;3236&quot;&gt;I/O 병목: iowait&amp;uarr;, 디스크 util/큐&amp;uarr;, fsync/flush 대기, DB commit 지연&lt;/li&gt;
&lt;li data-end=&quot;3337&quot; data-start=&quot;3299&quot;&gt;p95/p99는 &amp;ldquo;증상&amp;rdquo;이고, 위 지표로 &lt;b&gt;원인을 분리&lt;/b&gt;한다.&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;3366&quot; data-start=&quot;3339&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;3366&quot; data-start=&quot;3339&quot;&gt;&lt;b&gt;스레드가 많아지면 왜 느려질 수 있나&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3537&quot; data-start=&quot;3367&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3483&quot; data-start=&quot;3367&quot;&gt;단순히 &amp;ldquo;스레드가 캐시를 점유해서&amp;rdquo;라기보다&lt;br /&gt;&lt;b&gt;컨텍스트 스위칭 비용&lt;/b&gt;, &lt;b&gt;락 경합&lt;/b&gt;, &lt;b&gt;캐시 미스 증가(working set 증가)&lt;/b&gt;, &lt;b&gt;스케줄러 큐 증가&lt;/b&gt; 때문에 느려질 수 있다.&lt;/li&gt;
&lt;li data-end=&quot;3537&quot; data-start=&quot;3484&quot;&gt;즉 스레드 수가 증가하면 &amp;ldquo;일을 더 하는&amp;rdquo; 게 아니라 &amp;ldquo;관리 비용과 경합&amp;rdquo;이 커질 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;3579&quot; data-start=&quot;3539&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;3579&quot; data-start=&quot;3539&quot;&gt;&lt;b&gt;디스크 쓰기가 느릴 때 fsync/flush는 어디에 걸리나&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3839&quot; data-start=&quot;3580&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3633&quot; data-start=&quot;3580&quot;&gt;write()는 보통 커널의 &lt;b&gt;페이지 캐시&lt;/b&gt;에 먼저 쓰여 빠르게 반환될 수 있다.&lt;/li&gt;
&lt;li data-end=&quot;3680&quot; data-start=&quot;3634&quot;&gt;flush/writeback은 커널이 나중에 디스크로 내려쓰는 과정이다.&lt;/li&gt;
&lt;li data-end=&quot;3787&quot; data-start=&quot;3681&quot;&gt;fsync()는 &amp;ldquo;지금까지의 변경이 &lt;b&gt;실제 디스크에 안전하게 기록될 때까지&lt;/b&gt; 기다려라&amp;rdquo;이므로&lt;br /&gt;&lt;b&gt;디스크/스토리지 지연을 정면으로 맞아&lt;/b&gt; 여기서 블로킹이 크게 발생한다.&lt;/li&gt;
&lt;li data-end=&quot;3839&quot; data-start=&quot;3788&quot;&gt;DB의 commit 지연(특히 WAL/redo)은 이 fsync와 연결되는 경우가 많다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;3875&quot; data-start=&quot;3846&quot; data-ke-size=&quot;size26&quot;&gt;※ 소리 내서 2개만 말하기 (보완/개선 버전)&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;4162&quot; data-start=&quot;3877&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;3980&quot; data-start=&quot;3877&quot;&gt;&lt;b&gt;인터럽트가 없으면&lt;/b&gt;&lt;br /&gt;CPU가 I/O 완료 여부를 계속 확인(polling)해야 해서 낭비가 커지고, 중요한 이벤트 처리도 비효율적이어서 전체 성능과 반응성이 떨어질 수 있다.&lt;/li&gt;
&lt;li data-end=&quot;4162&quot; data-start=&quot;3982&quot;&gt;&lt;b&gt;DMA가 CPU를 살리는 방법&lt;/b&gt;&lt;br /&gt;PIO/인터럽트 기반 전송에서는 CPU가 데이터 복사 전송에 더 많이 관여할 수 있는데, DMA를 쓰면 CPU는 전송 설정만 하고 실제 데이터 이동은 DMA/장치가 수행한다. 그래서 CPU는 계산/스케줄링 등 다른 작업을 수행할 수 있고, 대용량 I/O에서 성능이 크게 좋아진다.&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>이론 공부/컴퓨터 구조</category>
      <author>사라만</author>
      <guid isPermaLink="true">https://rsorry.tistory.com/298</guid>
      <comments>https://rsorry.tistory.com/298#entry298comment</comments>
      <pubDate>Tue, 27 Jan 2026 14:25:42 +0900</pubDate>
    </item>
    <item>
      <title>Selenium (셀레니움) 설치 및 실행</title>
      <link>https://rsorry.tistory.com/297</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Selenium ?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 셀레니움은 다양한 브라우저 및 플랫폼 에서 웹 응용프로그램을 위한 테스트 도구 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로그래밍을 통해 마치 사람이 인터넷을 사용하는 것(특정 영역 클릭) 처럼 웹 페이지를 요청하고 응답을 받아올 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 웹 크롤링을 할 때 사용 합니다.&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;※ 크롤링 ?&lt;br /&gt;&amp;middot; 데이터를 수집하고, 분류하는 것을 뜻 합니다.&lt;br /&gt;&amp;middot; 주로 인터넷 상의 웹 페이지를 수집해서 분류하고 저장하는 것을 말합니다.&lt;br /&gt;&amp;middot; 즉. 어떤 데이터가 어디에 있는지 등 위치에 대한 분류 작업 입니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 결국, 브라우저와 직접 통신하여, 브라우저를 제어하는 데에 사용 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &quot;요청 실행하는 버튼 누르기&quot; 라고 생각 하시면 될 것 같습니다.&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;Spring Selenium 환경 만들기&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. Spring 프레임워크를 기반으로 사용할 것이기 때문에 먼저, Maven 에 라이브러리를 추가&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;Maven Repository&quot; 에서 &quot;Selenium&quot; 을 검색해 &quot;Selenium-java&quot; 를 찾아 들어가 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pom.xml 에 사람들이 많이 사용하는 거 그냥 복사해서 붙여 넣어주면 됩니다. ( 3.141.59 )&lt;/p&gt;
&lt;pre id=&quot;code_1633661560652&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --&amp;gt;
&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.seleniumhq.selenium&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;selenium-java&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;3.141.59&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. Web Driver 설치&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;span style=&quot;color: #555555;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;http://docs.seleniumhq.org/download/&quot;&gt;http://docs.seleniumhq.org/download/&lt;/a&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;※ 셀레니움은 크롬 or 파이어폭스 가 최적화가 되어 있다고 해요 ~ 익스플로러에서 사용해 봤는데, 크롬에 비해 엄청 느리더라구요 설정 해주는 것도 좀 더 까다롭고...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1190&quot; data-origin-height=&quot;652&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blBFOf/btriCvBs9pK/OuKR4M17yIb6GCzbkkf0n0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blBFOf/btriCvBs9pK/OuKR4M17yIb6GCzbkkf0n0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blBFOf/btriCvBs9pK/OuKR4M17yIb6GCzbkkf0n0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblBFOf%2FbtriCvBs9pK%2FOuKR4M17yIb6GCzbkkf0n0%2Fimg.png&quot; data-origin-width=&quot;1190&quot; data-origin-height=&quot;652&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1144&quot; data-origin-height=&quot;392&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3jJ0d/btriBCA8IAx/MMa425vKqydrqcrrHhdou1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3jJ0d/btriBCA8IAx/MMa425vKqydrqcrrHhdou1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3jJ0d/btriBCA8IAx/MMa425vKqydrqcrrHhdou1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3jJ0d%2FbtriBCA8IAx%2FMMa425vKqydrqcrrHhdou1%2Fimg.png&quot; data-origin-width=&quot;1144&quot; data-origin-height=&quot;392&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;※ 다운로드를 하기 전에 ! 크롬 버전을 확인해 줍니다.&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;441&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6cCxJ/btriB623RwL/EM73KhPGt91jxvkkKPLO4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6cCxJ/btriB623RwL/EM73KhPGt91jxvkkKPLO4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6cCxJ/btriB623RwL/EM73KhPGt91jxvkkKPLO4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6cCxJ%2FbtriB623RwL%2FEM73KhPGt91jxvkkKPLO4k%2Fimg.png&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;441&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;281&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lVNDl/btriz7ITlXQ/pgOakwk4ivbrUqommoZFG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lVNDl/btriz7ITlXQ/pgOakwk4ivbrUqommoZFG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lVNDl/btriz7ITlXQ/pgOakwk4ivbrUqommoZFG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlVNDl%2Fbtriz7ITlXQ%2FpgOakwk4ivbrUqommoZFG0%2Fimg.png&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;281&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버전을 확인 했다면, 버전에 맞는 드라이버를 다운로드 해주어야 됩니다 ~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제일 앞에 보이는 95 버전 을 맞춰서 다운로드 해주면 되겠네요&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;326&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LFQzU/btriDxlAsqy/LOsxyxKvzugodnP9cOfUyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LFQzU/btriDxlAsqy/LOsxyxKvzugodnP9cOfUyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LFQzU/btriDxlAsqy/LOsxyxKvzugodnP9cOfUyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLFQzU%2FbtriDxlAsqy%2FLOsxyxKvzugodnP9cOfUyK%2Fimg.png&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;326&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘 중에 마음에 드시는 걸로 ~&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;263&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/O2aRP/btriFuB3Hkc/DL5H3DIVf29s4z9WGtEJi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/O2aRP/btriFuB3Hkc/DL5H3DIVf29s4z9WGtEJi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O2aRP/btriFuB3Hkc/DL5H3DIVf29s4z9WGtEJi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FO2aRP%2FbtriFuB3Hkc%2FDL5H3DIVf29s4z9WGtEJi0%2Fimg.png&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;263&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 운영체제 맞춰서 다운로드를 해주시면 되는데, windows 64bit 사용하시는 분은 win32 다운로드 해주면 됩니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운로드를 한 후, 압축까지 풀어서 사용하고 싶은 경로에 가져다 줍시다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;20&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c22dEc/btriAHbTwei/To1vnj8AgWN1jKZ8kAitIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c22dEc/btriAHbTwei/To1vnj8AgWN1jKZ8kAitIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c22dEc/btriAHbTwei/To1vnj8AgWN1jKZ8kAitIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc22dEc%2FbtriAHbTwei%2FTo1vnj8AgWN1jKZ8kAitIK%2Fimg.png&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;20&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 까지 완료가 되었다면, 간단하게 실행 및 테스트를 해보도록 합시다&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Spring Selenium 실행&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 Eclipse 에서 Spring 구조를 만들고 실행을 해볼게요 ~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring MVC 구조로 프로젝트를 만들고, 간단하게 셋팅을 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네이버에 로그인 까지 하는 걸 시도했는데......&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 버튼 클릭, 아이디 입력, 비밀번호 입력 에는 성공 했으나, 캡챠 인증이 나왔습니다.. ㅎㅎㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 아래와 같은 방식으로 구현된다는 점 ...&lt;/p&gt;
&lt;pre id=&quot;code_1636289173192&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@GetMapping(&quot;/openChrome&quot;)
	public String openChrome() {
		
		String chromeDriver = &quot;webdriver.chrome.driver&quot;; // 크롬드라이버 명시
		String chromePath = &quot;D:\\chromedriver.exe&quot;; // 셀레니움 크롬 .exe 경로
		
		System.setProperty(chromeDriver, chromePath); // 위의 드라이버 셋팅
		
		//Driver SetUp ( 셀레니움을 막는 것을 방지 )
        ChromeOptions options = new ChromeOptions();
        options.setCapability(&quot;ignoreProtectedModeSettings&quot;, true);
		
		WebDriver driver = new ChromeDriver();
		WebDriverWait wait = new WebDriverWait(driver, 30); // Thread.sleep 대신 사용하는 것으로, 대기를 위해 사용
		
		driver.get(&quot;https://www.naver.com/&quot;); // get을 통해 해당 url을 open
		
        // 셀레니움을 통한 자동화 일 경우, 에러가 날 수 있으니 try구문에 넣는 것이 좋음
		try {
			
            // 명시적 대기 ( 해당 요소가 나타날 때까지 대기 )
			wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(&quot;#account &amp;gt; a&quot;)));
			driver.findElement(By.cssSelector(&quot;#account &amp;gt; a&quot;)).click(); // #account &amp;gt; a 요소를 찾아서 클릭
			
			wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(&quot;id&quot;)));
			driver.findElement(By.id(&quot;id&quot;)).sendKeys(&quot;아이디&quot;); // 해당 요소를 찾아서, 입력
			
			wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(&quot;pw&quot;)));
			driver.findElement(By.id(&quot;pw&quot;)).sendKeys(&quot;비밀번호&quot;);
			
			wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(&quot;log.login&quot;)));
			driver.findElement(By.id(&quot;log.login&quot;)).click();
			
		} catch (Exception e) {
			
			e.printStackTrace();
		}
		
		return &quot;/seleniumTest&quot;;
		
	}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;

            &lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
                &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
            &lt;/figure&gt;
        
&lt;h2 data-ke-size=&quot;size26&quot;&gt;References&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://gdtbgl93.tistory.com/154&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://gdtbgl93.tistory.com/154&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Selenium</category>
      <category>java</category>
      <category>java selenium</category>
      <category>셀레니움</category>
      <category>셀레니움 설치</category>
      <author>사라만</author>
      <guid isPermaLink="true">https://rsorry.tistory.com/297</guid>
      <comments>https://rsorry.tistory.com/297#entry297comment</comments>
      <pubDate>Sun, 7 Nov 2021 21:56:13 +0900</pubDate>
    </item>
    <item>
      <title>ORM(Object Relational Mapping) ?</title>
      <link>https://rsorry.tistory.com/296</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;ORM ( Object Relational Mapping )&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ORM 은 객체-관계 매핑을 의미 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이는 객체를 구현한 클래스와 관계를 구현한 RDB(관계형 데이터베이스)에서 쓰이는 테이블을 자동으로 연결하는 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 기존의 JDBC는 직접 SQL을 짜서, RDB에 연결을 해주어야 했다면, ORM을 통해서, SQL문을 짜지 않고, 객체 간의 관계를 바탕으로 SQL을 자동으로 생성해서, 사용할 수 있도록 해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 따라서, SQL문을 사용할 필요 없이, 클래스를 이용해 간접적으로 데이터베이스를 제어할 수 있게 됩니다.&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;SQL Query가 아닌, 직관적인 코드(메서드)로 데이터를 조작할 수 있어, 개발자가 프로그래밍하는데 집중할 수 있도록 도와줌&lt;/li&gt;
&lt;li&gt;&amp;nbsp;선언문, 할당, 종료 같은 부수적인 코드가 없거나 급격히 줄어듬&lt;/li&gt;
&lt;li&gt;&amp;nbsp;각종 객체에 별도로 코드를 작성하기 때문에, 코드의 가독성을 올려줌&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;SQL의 절차적이고 순차적인 접근이 아닌, 객체 지향적인 접근으로 인해 생산성 증대&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;ORM은 독립적으로 작성되어 있으며, 해당 객체들을 재사용 할 수 있음&lt;/li&gt;
&lt;li&gt;모델에서 가공된 데이터를 컨트롤러에 의해 뷰와 합쳐지는 형태로 디자인 패턴을 견고하게 다지는데 유리&lt;/li&gt;
&lt;li&gt;매핑정보가 명확하여, ERD를 보는 것에 대한 의존도를 낮춤&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;- DBMS에 대한 종속성 감소&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;객체 간의 관계를 바탕으로 SQL문을 자동으로 생성&lt;/li&gt;
&lt;li&gt;때문에, RDMS의 데이터 구조와 객체지향 모델 사이의 간격을 좁힐 수 있음&lt;/li&gt;
&lt;li&gt;대부분의 ORM 솔루션은 DB에 종속적이지 않음&lt;/li&gt;
&lt;li&gt;이는, 구현방법 뿐만 아니라 많은 솔루션에서 자료형 타입까지 유효&lt;/li&gt;
&lt;li&gt;개발자는 객체에 집중할 수 있기 때문에 DBMS를 교체하는 거대한 작업에도 비교적 적은 리스크와 적은 시간 소요&lt;/li&gt;
&lt;li&gt;자바에서 가공할 경우, equals, hashCode의 오버라이드 같은 자바의 기능을 이용할 수 있고, 간결하고 빠른 가공이 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;단점&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ORM이 모든 걸 해결할 수 없음&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용하기는 편하나, 설계는 매우 신중하게 해야함&lt;/li&gt;
&lt;li&gt;프로젝트의 복잡성이 커질경우 난이도가 올라감&lt;/li&gt;
&lt;li&gt;부족한 설계로 잘못 구현되었을 경우 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있음&lt;/li&gt;
&lt;li&gt;일부 자주 사용되는 대형 SQL문은 속도를 위해 별도의 튜닝이 필요할 수 있음 ( 직접 SQL문 작성 )&lt;/li&gt;
&lt;li&gt;DMBS의 고유기능을 이용하기 어려움 ( 특정 DBMS의 고유기능을 이용하면 이식성이 저하됌 ) 이는 장단점이 있음&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;- 프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어려움&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;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;객체-관계 간의 불일치&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1997&quot; data-origin-height=&quot;1120&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCk4km/btrhyK78GFO/Ul0iKqFdNd5AZQk7YRuop1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCk4km/btrhyK78GFO/Ul0iKqFdNd5AZQk7YRuop1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCk4km/btrhyK78GFO/Ul0iKqFdNd5AZQk7YRuop1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCk4km%2FbtrhyK78GFO%2FUl0iKqFdNd5AZQk7YRuop1%2Fimg.png&quot; data-origin-width=&quot;1997&quot; data-origin-height=&quot;1120&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Granularity(세분성)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 경우에 따라서, 데이터베이스에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있음&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;예를 들어 &quot;사용자 세부 사항&quot;에 대해 데이터를 저장한다고 생각해보자&lt;/li&gt;
&lt;li&gt;객체지향 프로그래밍에서는 코드 재사용과 유지보수를 위해 &quot;Person&quot;, &quot;Address&quot; 라는 두 개의 클래스로 나눠서 관리할 수 있다.&lt;/li&gt;
&lt;li&gt;그러나, 데이터베이스 에서는 &quot;Person&quot; 하나의 테이블에 &quot;사용자 세부 사항&quot;을 저장할 수 있다.&lt;/li&gt;
&lt;li&gt;이렇게 객체는 2개, 테이블은 1개가 되어 객체-관계 의 개수가 달라질 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Inheritance(상속)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- RDBMS는 객체지향 프로그래밍 언어의 자연적 패러다임인 상속과 유사한 것을 정의하지 않음 즉 상속의 개념이 없다&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Identity(일치)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- REDMS는 'sameness' 라는 하나의 개념을 정확히 정의 하는데, 바로 '기본키' 를 이용해서 동일성을 정의한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;그러나 자바는 객체 식별(a == b)과 객체 동일성( a.equals(b) )을 모두 정의한다.&lt;/li&gt;
&lt;li&gt;RDBMS에서는 PK가 같으면 서로 동일한 record로 정의하지만, Java에서는 주소값이 같거나 내용이 같은 경우를 구분하여 정의한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Associations(연관성)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 객체지향 언어는 객체 참조(reference)를 사용하는 연고나성을 나타내는 반면, RDBMS는 연관성을 '외래키'로 나타낸다&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;/ul&gt;
&lt;pre id=&quot;code_1634091039570&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Employee {
	private int id; 
	private String first_name;
	&amp;hellip; 

	private Department department;// Employee -&amp;gt; Department
	&amp;hellip;
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Java에서 양방향 관계가 필요한 경우 연관을 두 번 정의해야 한다.&lt;/li&gt;
&lt;li&gt;즉, 서로 Reference를 가지고 있어야 한다.&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;RDBMS의 외래키&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2193&quot; data-origin-height=&quot;539&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bALwGT/btrhzRFKa2P/yMKJy14haLQ9jjLV279oGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bALwGT/btrhzRFKa2P/yMKJy14haLQ9jjLV279oGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bALwGT/btrhzRFKa2P/yMKJy14haLQ9jjLV279oGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbALwGT%2FbtrhzRFKa2P%2FyMKJy14haLQ9jjLV279oGk%2Fimg.png&quot; data-origin-width=&quot;2193&quot; data-origin-height=&quot;539&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1634091480330&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;INSERT INTO 
  EMPLOYEE(id, first_name, &amp;hellip; ,department_id) // FK
  VALUES &amp;hellip;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;FK와 테이블 Join은 관계형 데이터베이스 연결을 자연스럽게 만든다.&lt;/li&gt;
&lt;li&gt;그렇기 때문에, 방향성이 없는 연결이 이루어진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Navigation(탐색)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 자바와 RDBMS에서 객체를 접근하는 방법이 근본적으로 다르다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;자바는 그래프형태로 하나의 연결에서 다른 연결로 이동하며 탐색한다.&lt;/li&gt;
&lt;li&gt;예를 들어 aUser.getBillingDetails().getAccountNumber() 이는 RDBMS에서 데이터를 검색하는 효율적인 방법이 아니다&lt;/li&gt;
&lt;li&gt;RDBMS에서는 일반적으로 SQL문을 최소화하고, JOIN을 통해 여러 엔티티를 로드하고 원하는 대상 엔티티를 선택하는 방식으로 탐색한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ORM Freameworks&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;JPA/Hibernate&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- JPA(Java Persistence API)는 자바의 ORM 기술 표준으로 인터페이스의 모음이다. 이러한 JPA 표준 명세를 구현한 구현체가 Hibernate 이다&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Sequelize&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Sequelize는 Postgres, MySQL, MariaDB, SQLite 등을 지원하는 Promise에 기반한 비동기로 동작하는 Node.js ORM&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Django ORM&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Python 기반 프레임워크인 Django에서 자체적으로 지원하는 ORM&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;References&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://geonlee.tistory.com/207&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://geonlee.tistory.com/207&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://eun-jeong.tistory.com/31&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://eun-jeong.tistory.com/31&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://gmlwjd9405.github.io/2019/02/01/orm.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://gmlwjd9405.github.io/2019/02/01/orm.html&lt;/a&gt;&lt;/p&gt;</description>
      <category>JAVA 공부</category>
      <category>ORM</category>
      <author>사라만</author>
      <guid isPermaLink="true">https://rsorry.tistory.com/296</guid>
      <comments>https://rsorry.tistory.com/296#entry296comment</comments>
      <pubDate>Wed, 13 Oct 2021 11:29:12 +0900</pubDate>
    </item>
    <item>
      <title>Static(스태틱)</title>
      <link>https://rsorry.tistory.com/295</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 Static 에 대해서 알아 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 학원에서 공부할 때 알아 보았었는데, 그 때는 이론적인 부분보다 어떻게 사용하는지 에 대해서 알아 봤었기 때문에, 이번에는 이론적인 측면에서 알아 봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Static 이란 무엇인가 ?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Static 은 다른 말로 정적 변수 라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Static 은 클래스 내부 변수나 메서드에 키워드로 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Static 을 사용한 변수나 메서드는 클래스가 메모리에 올라갈 때 자동으로 생성이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Static 변수는 메모리에 올라갔을 때, 딱 1번만 할당 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Static 변수는 모든 곳에서 참조해서 사용할 수 있기 때문에, 공통으로 사용하는 자원 이라고 생각할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Static 변수는 Static Memory area 에 할당 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ Static Memory area&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;middot; Static 키워드를 사용한 변수, 메서드 들이 저장되는 곳이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;middot; 프로그램의 시작부터 종료가 될 때까지 메모리가 남아 있다. 그렇기 때문에 Static을 남발한다고 좋은 것이 아니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Static 의 사용 이유 ?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 공통적으로 관리되는 자원 이기 때문에, 어디에서나 접근할 수 있는 장점을 가지고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클래스 내에 사용한 Static 변수, 메서드 는 해당 클래스를 동적할당 하지 않고, 클래스:(static변수 or static메서드) 로 바로 사용할 수 있기 때문에 빠르고 편하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 예를 들어 변하지 않는 고정 값 ( PI = 3.141592 ... ) 을 변수로 만든다고 생각해보자. 그리고 이를 클래스 내에 멤버변수로 만든다고 생각 해보자. 그런데, 만든 곳 뿐 아니라 다른 클래스에서도 PI 를 사용해야 한다. 그러면 PI 를 사용하려고 하는 클래스마다 전부 멤버변수로 만들어 줘야 된다. 그러면 이는 메모리의 낭비가 되는 것이다. 이럴 경우 static 을 사용해서 PI 를 만들었다면, 단 1개를 만들고, 이를 사용하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- static 을 사용한 클래스를 여러 번 동적할당 한다고 해도, static 변수, 메서드 이미 생성되어 있고, 더 이상 생성되지 않는다. ( &quot;이미 생성되어 있다&quot; 라는 말은 프로그램 실행 순서 상, static 은 미리 생성 되기 때문이다 )&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;Static 사용 시 주의점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 위에서 언급했다 싶이 Static 키워드를 사용한 메서드는 미리 생성 되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 즉 Static 메서드 내에서 해당 클래스의 멤버변수를 사용할 수 없다. 뿐만 아니라 프로그램의 실행 순서상 Static Memory area 에 Static 변수, 메서드 들이 먼저 생성되기 때문에, 이 때 실행 순서상 생성되어 있지 않은 heap , stack 영역에 있는 변수 를 사용할 수 없다 ( = 인스턴스 변수 사용 x )&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;Static 사용이 유용한 경우&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 공통적으로 값을 유지해야하는 데이터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 일반 변수( 인스턴스 변수 ) 를 사용하지 않는 메서드(함수)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 사실 우리가 사용하는 라이브러리 함수들은 Static 메서드인 것들이 꽤 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) Arrays.toString(), Math.random() 등등 ....&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA 공부</category>
      <category>static</category>
      <category>스태틱</category>
      <author>사라만</author>
      <guid isPermaLink="true">https://rsorry.tistory.com/295</guid>
      <comments>https://rsorry.tistory.com/295#entry295comment</comments>
      <pubDate>Fri, 1 Oct 2021 16:21:56 +0900</pubDate>
    </item>
    <item>
      <title>Java 1.8 변경사항</title>
      <link>https://rsorry.tistory.com/294</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;먼저, Java 1.8 의 변경사항을 공부하는 이유는 무엇일까?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 보통 Java 를 사용할 때에 Java 1.8 을 사용한다. 나도 그렇다. 딱히 이유는 생각해 본적이 없다. 그냥 처음 배울 때부터 최신 버전은 SE15인가? 까지 나와 있었지만 학원에서 배울 때 Java 1.8 을 가지고 배웠다. 그리고 회사에 들어가도 Java 1.8 을 사용한다. 이 외에도 Java 설정 등 프로젝트 생성할 때 다른 사람들의 글을 보면 Java 1.8 을 가지고 작성한 것을 발견할 수 있다.&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. 첫 번 째로, Java 1.8 버전으로 업그레이드 되면서 중요한 기능이 생겼기 때문이다.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 호환성 문제&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java 1.8 버전 이후에도 계속적으로 Java 는 업그레이드 되어져 왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데, Java 최신 버전인 SE15 설치된 환경에서 Java 1.8 이 작동을 하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 반대로 Java 1.8 이 설치된 환경에서는 Java 최신 버전인 SE15 가 작동한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국. 버전을 업그레이드 한다는 것은, JDK 또한 업그레이드를 시킨 다는 것이기 때문에, 위의 문제가 발생하는 것이다.&lt;/p&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가지를 종합해서 Java 1.8 을 가장 많이 사용하기 때문에 이를 공부하는 것이다.&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;Java 1.8 의 변경사항&lt;/h3&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Lambda 표현식 적용 ( 함수적 프로그래밍 가능 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. StreamAPI ( 데이터를 추상화하여 다룰 수 있게 됌 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. java.time 패키지 ( 날짜 및 시간에 대해 조금 더 개선된 API 제공 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 나즈혼 ( 자바 스크립트의 새로운 엔진 제공 )&lt;/p&gt;
&lt;/div&gt;
&lt;/div&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. Lambda 표현식 적용&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이는 함수형 프로그래밍 패러다임에 의거한 적용 이라고 할 수 있다. 프로그래밍에 관심이 있다면, Java 는 객체지향 언어 라는 말을 들어 보았을 것이다.&amp;nbsp; 프로그래밍의 흐름을 조금 말해 보자면, 절차지향 -&amp;gt; 객체지향 -&amp;gt; 함수지향 이라고 말할 수 있을 것 같다.&lt;/p&gt;
&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;※ 예를 들어서, 로봇이 있는데, 이 로봇 1대 에는 부품(머리, 몸통, 팔, 다리)이 있다. 절차지향은 부품을 나누지 않고 전체적인 로봇 1대를 만드는 것이고, 객체지향은 로봇의 부품을 따로따로 만들어서 합치는 것이다. 그렇기 때문에, 객체지향 프로그래밍은 부품들을 다른 로봇에도 사용할 수 있다는 장점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 함수형 프로그래밍은 함수 자체를 리턴 하는 방식 이라고 생각할 수 있을 것 같다. 좀 더 자세히 파고 들어 보자면, 기존의 프로그래밍은 변수에 값을 대입해 왔고, 이 변수를 리턴해서 사용을 하는 방식이 주를 이루었다. 하지만, 함수형 프로그래밍은 변수에 값을 대입하지 않고, 그대로 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 이제 Lambda 에 대해서 알아보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Lambda 에 대해 설명하려면 익명 객체(클래스) 에 대해 알고 있어야 한다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 익명 객체(클래스) : 이름이 없는 클래스로써 인터페이스를 implements 해서 사용하는 것이 아닌 인터페이스 자체를 구현화 해서 사용하는 것&lt;/p&gt;
&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;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;230&quot; data-origin-height=&quot;97&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QavBU/btrgumAWWNR/geJ8RWsy3zkxfFNSiJBHlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QavBU/btrgumAWWNR/geJ8RWsy3zkxfFNSiJBHlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QavBU/btrgumAWWNR/geJ8RWsy3zkxfFNSiJBHlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQavBU%2FbtrgumAWWNR%2FgeJ8RWsy3zkxfFNSiJBHlK%2Fimg.png&quot; data-origin-width=&quot;230&quot; data-origin-height=&quot;97&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;363&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EOHuo/btrgxBKb7LO/4aHxIbZbLQbvCY7FyVYv7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EOHuo/btrgxBKb7LO/4aHxIbZbLQbvCY7FyVYv7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EOHuo/btrgxBKb7LO/4aHxIbZbLQbvCY7FyVYv7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEOHuo%2FbtrgxBKb7LO%2F4aHxIbZbLQbvCY7FyVYv7k%2Fimg.png&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;363&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;위의 예시 처럼, 인터페이스를 바로 구현화해서 사용하는 것을 익명 객체(클래스) 라고 한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Lambda 는 이러한 익명클래스를 좀 더 줄여서 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스를 바로 구현화 하는 코드를 단 몇줄로 표현할 수 있게 됩니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. StreamAPI&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 여기서 나오는 Stream 은 파일입출력 스트림과는 전혀 다른 스트림 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Stream 은 함수적 인터페이스를 기반으로 사용하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 기존의 Collection(List, Map, Set) 등을 사용하려면, 각각의 접근 방법이 필요했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 예를 들면, Iterator, EntrySet 등 을 만들어서 사용했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이렇게 Collection 별로 나누어지던 접근 방법을 하나로 통일하기 위해서 Stream 이 나왔습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Collection 에 속해 있는 List, Set, Map 등은 모두 Stream 으로 변환이 가능하게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Stream 을 만듦 으로써 인해 Collection 에 대한 접근 방법이 1개로 통일되게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- StreamAPI 는 이러한 Stream 을 좀 더 편하게 사용할 수 있도록 만들어진 것들 입니다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ StreamAPI 종류&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 시작연산 - Stream 객체가 아닌 다른 객체(Collection)로부터 Stream 을 얻는 연산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 중간연산 - Stream 객체를 가공하는 연산 (fillter) / 람다식을 사용해서 원하는 데이터만 추출 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 최종연산 - Stream 연산을 끝내고 최종 결과를 다른 타입으로 반환하는 연산&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 예시&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;128&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdf6IE/btrgqFHTzM4/qtFcQTbKriFOrr00N52KKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdf6IE/btrgqFHTzM4/qtFcQTbKriFOrr00N52KKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdf6IE/btrgqFHTzM4/qtFcQTbKriFOrr00N52KKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbdf6IE%2FbtrgqFHTzM4%2FqtFcQTbKriFOrr00N52KKK%2Fimg.png&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;128&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위처럼 만들어진 리스트를 StreamAPI 를 사용해서 아래처럼 사용할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;185&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q0Ho0/btrguMsGx3a/oaYahgJKXT2juKFd7PY0y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q0Ho0/btrguMsGx3a/oaYahgJKXT2juKFd7PY0y0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q0Ho0/btrguMsGx3a/oaYahgJKXT2juKFd7PY0y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq0Ho0%2FbtrguMsGx3a%2FoaYahgJKXT2juKFd7PY0y0%2Fimg.png&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;185&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;3. java.time 패키지&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- java 에서 날짜를 표현하기 위해서는 Date 클래스를 이용했었다. 하지만 현재 대부분의 메서드는 Date 클래스 사용을 권장하지 않고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- JDK 1.1 버전에서는 &lt;span style=&quot;color: #575757;&quot;&gt;Calendar 클래스 를 도입시켰지만, 몇가지 문제들이 있어서, &lt;span style=&quot;color: #575757;&quot;&gt;Joda-Time이라는 라이브러리를 함께 사용해 왔다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #575757;&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- Java 1.8 버전에서는 이러한 Joda-Time 라이브러리를 발전시킨 새로운 날짜와 시간 API인 java.time 패키지 를 지원한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #575757;&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;4. 나즈혼&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #575757;&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 지금까지 Java 는 Java Script 의 기본 엔진으로 모질라의 라이노 ( Rhino ) 가 사용되어 왔다. 하지만 세월이 흐르면서 자바의 최신 개선 사항 등을 제대로 활용하지 못하는 등의 문제가 생기게 되었다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #575757;&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 그래서, Java 1.8 에서는 Java Script 의 새로운 엔진으로 오라클의 나즈혼 ( Nashorn ) 을 도입하게 되었고, 기존에 사용되어 온 라이노 에 비해 성능과 메모리 관리 측면에서 크게 개선 되었다고 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>JAVA 공부</category>
      <category>Java 1.8 버전 사용 이유</category>
      <category>Java 1.8 변경사항</category>
      <author>사라만</author>
      <guid isPermaLink="true">https://rsorry.tistory.com/294</guid>
      <comments>https://rsorry.tistory.com/294#entry294comment</comments>
      <pubDate>Fri, 1 Oct 2021 13:27:50 +0900</pubDate>
    </item>
    <item>
      <title>그림으로 공부하는 IT인프라 구조 - 5</title>
      <link>https://rsorry.tistory.com/293</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번에도 책 &quot;그림으로 공부하는 IT인프라 구조&quot; 를 이어서 정리 해보도록 하겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;네트워크&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서로 다른 장비가 데이터를 교환할 때 기본적으로는 네트워크를 경유해서 데이터를 송수신할 필요가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 시스템이 한 대만으로 구성되는 경우는 드물기 때문에 '반드시' 라고 할 수 있을 만큼 데이터는 네트워크를 경유해서 전달됌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;계층 구조&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 계층 구조는 역할 분담을 위해 필요하며, 데이터나 기능 호출 흐름에 따라 계층 간 역할이 나누어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 각 계층은 상호 간에 어떤 기능을 가지고 있는지만 알고 있다 ( 구체적으로 어떤 방식으로 처리하는지는 알 수 없다 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 계층 구조로 나눔으로써 계층 간에 서로 영향을 주지 않고 독립적으로 동작한다.&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;OSI (Open System Interconnection) 7계층 모델&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 계층 모델의 대표적인 예 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- OSI 참조 모델로써, 이를 참조해 모든 통신장치를 만들게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이는 서로 다른 서버가 통신하기 위해 서로 알아 들을 수 있도록 만든 규칙이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- OSI 는 시스템 간의 상호연결성을 부여하는 표준이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 물리 계층&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 물리매체를 통해 bit 흐름 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 물리적 장치와 인터페이스가 전송을 위해 필요한 기능과 처리절차 규정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 데이터 링크 계층&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 노드와 노드 사이의 데이터 전달&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- LLC, MAC 두 개의 서브레이어로 구성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 흐름제어 및 오류제어 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 네트워크 계층&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 송신 측에서 최종목적지까지 패킷을 전달&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 논리주소 지정 및 패킷의 경로를 지정하는 라우팅 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터 링크의 물리주소는 패킷이 시스템으로 이동할 때마다 변경되지만, 네트워크 주소는 목적지까지 변하지 않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 전송 계층&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;5. 세션 계층&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;6. 프레젠테이션 계층&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;7. 애플리케이션 계층&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사용자에게 서비스를 제공하는 역할&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로토콜&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 컴퓨터가 서로 소통하기 위해 정한 규약&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;ex) 마우스를 PC에 연결할 때 사용하는 USB 가 있다. 이것도 USB 프로토콜이 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 현재 네트워크를 지탱하는 것은 TCP/IP 및 관련 프로토콜이다. 이들 프로토콜 집합을 모아서 TCP/IP 프로토콜 슈트 라고 한다.&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;TCP/IP 계층 구조&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- TCP 와 IP의 두 가지 프로토콜을 주축으로 한 프로토콜 집합이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- IP 는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- TCP 는 IP 위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ IP : 패킷 통신 방식의 인터넷 프로토콜&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ TCP : 전송 조절 프로토콜&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP , FTP , SMTP 등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP 위에서 동작하기 때문에, 묶어서 TCP/IP 라고 부르기도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 출처 : 위키백과 -&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;HTTP&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 애플리케이션 계층의 프로토콜 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- URL을 입력하면, HTTP 를 통해 데이터를 요청하게 되고, 요청 내용이 해석되어 응답하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- HTTP는 화면 하나를 표시하기 위해 몇 번이고 왕복한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클라이언트와 웹 서버는 HTTP를 통해서 몇 번이고 요청과 응답을 주고 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 요청 : 서버에 던지는 명령 ( 서버에 대한 요구 명령, 대상 데이터 지정 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 응답 : 요청에 대한 결과 와 그에 대한 상태 정보&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TCP&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 애플리케이션이 보낸 데이터를 그 형태 그대로 상대방에게 확실하게 전달하는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 단, 가능한 한 주변에는 민폐를 끼치지 않는다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 전송한 데이터를 그 형태 그대로 전달 하기 위해서는 IP 기능만으로 어렵기 때문에 TCP 를 같이 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 중요 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;middot; 포트 번호를 이용해서 데이터 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;middot; 연결 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;middot; 데이터 보증과 재전송 제어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;middot; 흐름 제어와 폭주 제어&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;TCP/IP 3-way handshaking&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 통신을 시작하고 싶은 프로세스(사용자)는 커널에게 통신 개시를 의뢰한 후 , 이 커널은 통신 상대인 서버 측 OS에게 가상 경로를 열도록 의뢰한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 서버 측에서는 리슨하고 있는 포트 번호로 통신 요구가 오며, 문제가 없으면 열어도 된다는 응답을 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 사용자 측도 확인했다는 메시지를 보내며, 이 때 처음으로 통신용 가상 경로가 열린다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 위의 1~3 을 TCP/IP 의 3-way handshaking 이라고 한다.&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;IP&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 지정한 대상 서버까지 전달받은 데이터를 전해주는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 단, 반드시 전달된다는 것을 보장하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 중요한 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;middot; IP 주소를 이용해서 최종 목적지에 데이터 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;middot; 라우팅&lt;/p&gt;
&lt;/div&gt;
&lt;/div&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;- IP 패킷의 헤더에서 목적지를 확인해서 어디로 보내야 할지 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 외부와 접속하는 네트워크는 보통 &quot;기본 게이트웨이&quot; 라는 라우터가 설치되어 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;VLAN&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 물리 구성에 의존하지 않고 가상적인 네트워크를 나누는 구조 ( VLAN ID 로 불리는 숫자로 관리 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- VLAN ID 에 '태그' 를 붙여서 하나의 물리 링크 내에서도 복수의 네트워크 이더넷 프레임을 처리할 수 있는 구조&lt;/p&gt;</description>
      <category>이론 공부</category>
      <category>IT인프라 구조</category>
      <author>사라만</author>
      <guid isPermaLink="true">https://rsorry.tistory.com/293</guid>
      <comments>https://rsorry.tistory.com/293#entry293comment</comments>
      <pubDate>Fri, 1 Oct 2021 08:37:38 +0900</pubDate>
    </item>
    <item>
      <title>2021 AWSome Day 온라인 컨퍼런스 참여 후기 및 정리</title>
      <link>https://rsorry.tistory.com/292</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/events/awsome-day/awsome-day-online/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://aws.amazon.com/ko/events/awsome-day/awsome-day-online/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1632959834870&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;AWSome Day 온라인 컨퍼런스&quot; data-og-description=&quot;비용 절감, 속도, 민첩성, 확장성 등 강력한 클라우드 컴퓨팅의 장점을 이해할 수 있습니다. 또한 컴퓨팅, 스토리지, 데이터베이스, 네트워킹, 보안에 대해 학습하고, IoT, 기계 학습 등을 통해 혁&quot; data-og-host=&quot;aws.amazon.com&quot; data-og-source-url=&quot;https://aws.amazon.com/ko/events/awsome-day/awsome-day-online/&quot; data-og-url=&quot;https://aws.amazon.com/ko/events/awsome-day/awsome-day-online/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/9Zg7I/hyLNjrHFMv/OljDOKakoa0pqrNAPoQKQ1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/6ObsG/hyLNgPh1J5/jbEVL5L1QuBGkcm4K4dRf1/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/events/awsome-day/awsome-day-online/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://aws.amazon.com/ko/events/awsome-day/awsome-day-online/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/9Zg7I/hyLNjrHFMv/OljDOKakoa0pqrNAPoQKQ1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/6ObsG/hyLNgPh1J5/jbEVL5L1QuBGkcm4K4dRf1/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109');&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;AWSome Day 온라인 컨퍼런스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;비용 절감, 속도, 민첩성, 확장성 등 강력한 클라우드 컴퓨팅의 장점을 이해할 수 있습니다. 또한 컴퓨팅, 스토리지, 데이터베이스, 네트워킹, 보안에 대해 학습하고, IoT, 기계 학습 등을 통해 혁&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;회사에서 공부하는 시간을 가지고 있기 때문에, 마침 진행되는 AWSome Day 무료 온라인 컨퍼런스에 참여해 보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아는 만큼 보인다고 ... 네트워킹과 보안 쪽은 잘 모르겠더라구요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;거기다가 회사 내에서 참여한 만큼, 중간 중간에 간단한 업무를 본다던가, 회의를 한다던가 하는 것 때문에 처음부터 끝까지 참여하지는 못했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히나, 5강 AWS와 함께 혁신하기 에서 회의를 하게 되었는데, 너무 아쉬웠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최신 기술에 대한 문제점이나 개념들이 나오는 것 같던데 ...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에 이런 기회가 있다면 참여할 수 있을지 잘 모르겠네요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 참여하면서 나름 정리를 해 보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 차례&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. AWS 클라우드 소개&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. AWS 클라우드 핵심 서비스 소개 : 컴퓨팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. AWS 클라우드 핵심 서비스 소개 : 스토리지, 데이터베이스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. AWS 클라우드 핵심 서비스 소개 : 네트워킹, 보안&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. AWS와 함께 혁신하기&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. AWS 클라우드 소개&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;클라우드란?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 구름, 즉 인터넷을 통해서 원격지에 있는 IT 리소스, 스토리지, 데이터베이스, 애플리케이션 등을 접속해서 이용하는 서비스 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인프라를 하드웨어가 아닌 소프트웨어로 간주하고 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 기존의 방법보다 훨씬 빠르게 사용할 수 있다는 장점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사용량에 따라 비용을 지불한다. ( 본격적인 약정 없이 테스트 가능 , 언제든지 필요에 따라 중지 할 수도 있다 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;AWS 클라우드 사용 이점&amp;nbsp;&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;&amp;nbsp; &amp;nbsp; &amp;nbsp;- 구축하고자 하는 서비스에 대해 필요한 리소스 만큼만 사용할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 규모의 경제로 얻게되는 이점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &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;4) 속도 및 대응력 향상&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;- 기존의 만들어서 사용해야 했던 것들을, 미리 만들어져 있는 인프라 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) 데이터 센터 운영 및 유지 관리에 비용 투자 불필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6) 몇 분 만에 전 세계에 배포&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &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;- API 호출을 통해서 액세스&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;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;- 회사 소유의 센터에 데이터를 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 하이브리드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 기존의 온프레미스 데이터 센터와 클라우드를 같이 사용하는 모델&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 클라우드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클라우드 상에서 모든 애플리케이션을 배포하고 사용 하는 모델&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;AWS 글로벌 인프라&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;- 서비스를 제공할 위치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 가용 영역&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 1개의 리전은 2개 이상의 가용 영역을 가지고 있다 ( 데이터 센터 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ aws는 서버, 데이터 센터 , 네트워크 를 임대해서 사용할 수 있다.&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;AWS 엣지 인프라&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클라우드를 엔드포인트에서 엔드 유저에 더 가까이 사용할 수 있도록 하는 서비스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- AWS Outposts ( 온프레미스 데이터 센터를 가까이 가져오는 서비스 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- AWS Local Zones ( 자체 데이터 센터 인프라를 보유 및 운영할 필요 없이 컴퓨팅 및 스토리지 리소스를 최종 사용자, 엔드 유저에게 더 가까이 가져오는 서비스 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- AWS Wavelength ( 스토리지 및 컴퓨팅 서비스를 5G 에 접속해서 5G 최종 사용자용 애플리케이션을 손쉽게 제작할 수 있도록 하는 서비스 )&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;AWS와 상호 작용하는 3가지 방법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) AWS Management Console&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) AWS 명령줄 인터페이스(AWS CLI)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 소프트웨어 개발 키트(SDK)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;2. AWS 클라우드 핵심 서비스 소개 : 컴퓨팅&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Amazon Elastic Compute Cloud(EC2)&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;- CPU , 메모리 등 컴퓨터 스펙을 제공 ( 원하는 컴퓨팅 유형, 사이즈 선택 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 운영 도중에도 변경가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 컴퓨팅 리소스 완전 제어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 새로운 서버 인스턴스 확보 및 부팅 시간 단축&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 실제 사용한 만큼한 요금 지불&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;- 온프레미스 서버로 해결하기 어려운 몇몇 문제 해결&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;- 자유로운 실수 ( 온프레미스 서버를 사용할 경우 잉여 자원이 될 수 있는 부분을 , AWS 환경에서는 삭제 , 추가 등 자유로움 )&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;EC2&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- AMI ( Amaznon Machine Image ) 사용 &amp;lt;- 플랫폼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 선택한 AMI 를 기반으로 인스턴스를 사용할 수 있음&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;3) 유연성&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 통합( ELB, S3, RDS 등 다양한 서비스와 같이 사용할 수 있음 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) 안정성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6) 보안&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7) 저렴한 비용 ( 자유로운 제어를 통해 효율적으로 컴퓨팅 자원 사용, 오토스케일링 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8) 용이성 ( 사용하기가 쉽다 )&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;EC2 인스턴스 패밀리 및 이름&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인스턴스 패밀리 타입&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 균형잡힌 인스턴스의 성능을 가진 범용 패밀리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 고성능 CPU를 제공하는 컴퓨터 최적화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 대규모 메모리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 스토리지 최적화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) GPU 액셀러레이티드 컴퓨팅 패밀리 - 기계 학습이 필요한 경우 등&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;EC2 요금&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 온디맨드 인스턴스 - 초당 비용 ( ubuntu, Linux 만 가능 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 예약 인스턴스 - 온디맨드 인스턴스에 비해 정해진 시간에만 사용하기 때문에 저렴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) Savings Plans - 예약 인스턴스보다는 덜 저렴 , 리전, 인스턴스 패밀리, 사이즈 등을 변경할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 스팟 인스턴스 - 온디맨드 인스턴스보다 최대 90% 할인 가격으로 예비 EC2 , 비용 예측이 가능하고, 언제든지 종료될 수 있기 때문에 , 재처리 될 수 있는 것에 대해 최적화&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 관리형 - AWS 에서 알아서 해줌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Amazon Elastic Container Srvice(ECS)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 컨테이너가 소수일 때는 충분히 관리 할 수 있지만, 많아지면 관리가 어려워져서 중간 관리자가 필요함. 쿠버네티스 등을 사용하게 됌. 이를 줄이기 위해 ECS 라는 서비스를 제공&lt;/p&gt;
&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;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;&amp;nbsp; 1) 프로비저닝하거나 관리할 서버가 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 2) 사용량에 따라 조정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 3) 유휴 상태에 대한 지불 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 4) 가용성 및 내결함성 내장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 5) 오버헤드를 줄일 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 대표적으로 AWS Lambda 가 있다&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;AWS Lambda&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Node.js , Java 등 으로 코드만 제공하면 됌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 완전 관리형 컴퓨팅 서비스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 상태 비저장 코드 실행 ( Lambda 함수가 실행될 때만 사용 됌 , 비용도 마찬가지 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이벤트에 대한 응답으로 Lambda 함수 사용 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;3. AWS 클라우드 핵심 서비스 소개 : 스토리지, 데이터베이스&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;스토리지&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- Amazon S3 - 클라우드상의 확장 가능하고 내구성이 뛰어난 객체 스토리지&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- Amazon S3 Glacier - 클라우드 상의 저렴하고 내구성이 뛰어난 아카이브 스토리지&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- Amazon EFS&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- AWS Strorage Gateway&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- Amazon EBS&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;1) Amazon S3&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 객체 수준 스토리지&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 높은 내구성 ( 연간 객체에 대해 99.99999999999% 내구성을 제공하도록 설계 )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 높은 수평 확장성. 즉 유연성 ( 원하는 형식의 데이터를 원하는 만큼 저장 가능 )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 이벤트 알림 기능 ( 다른 프로세스 Lambda 같은 것에 트리거를 연결할 수 있음 )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 고유한 HTTP URL 연결 ( 정적 웹 콘텐츠 또는 미디어 저장 배포 가능 )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 사용 사례 ) 데이터 레이크 , 빅 데이터 분석&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;Aamazon S3가 객체를 저장하는 방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 데이터를 저장 및 검색하도록 구축 ( 어떤 문자열 모두 사용 가능 )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 속도, 내구성, 가용성이 뛰어난 객체 액세스&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 버킷에 저장할 수 있는 객체 수에 제한이 없음 ( 최상의 수평확장성을 가지고 있음 )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 웹 어디서나 언제든 데이터 저장 및 검색&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 생성한 버킷, 객체에 직접 제어할 수 있음 ( 사용자에 대한 정책 등 )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 키 : 벨류 값의 객체 스토리지&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;※ 버킷 : 객체 스토리지 ( 폴더를 대신하는 여러 개의 객체를 저장할 수 있는 큰 공간 )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;2) Amazon S3 Glacier&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 장기 데이터 스토리지&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 아카이브 및 백업&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 비용이 매우 저렴한 아카이브용 스토리지&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 사용사례 ) 미디어 자산 워크폴로, 의료 정보 아카이빙 ,규제 및 규정 준수를 위한 아카이빙, 과학적 데이터 스토리지, 디지털 보존, 마그네틱 테이프 대체&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;3) Amazon Elastic Block Stroe(Amaznon EBS)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 인스턴스용 영구 블록 스티리지&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 복제를 통해 보호&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 상이한 드라이브 유형&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 몇 분 만에 확장 또는 축소&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 프로비저닝한 만큼만 요금 지불&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 스냅샷 기능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 암호화 사용 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 가용 역역 자체에 지진 또는 재해 발생시 미러링된 데이터가 소실 될 수 있으니, 주기적으로 스냅샷 을 생성하기를 권장&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 다른 리전으로 스냅샷을 복사 또는 공유 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 추가비용 없이 암호화 가능 ( EC2 에서 보안 비용이 발생 )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;데이터베이스&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 15개 이상의 목적별로 DB 엔진 중에서 선택 가능 ( 다양한 데이터 모델 지원 )&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;MySQL , PostGreSQL 과 호환되는 완전 관리형 DB -&amp;gt; Amazon Auroa&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서버 프로비저닝, 패치, 구성 또는 백업 같은 DB 관리 태스크는 걱정할 필요가 없음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DIY 와 AWS 데이터베이스 서비스 비교&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- DIY 는 OS 수준에 액세스 등이 필요한 세밀한 조정이 필요할 때 EC2의 데이터베이스 사용&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- AWS 데이터베이스 서비스는 손쉬운 설정, 관리, 유지, 즉각적인 고가용성 구현, 성능에 초점, 관리형 인프라 라는 장점이 있다. ( DB 이중화를 손쉽게 할 수 있다 )&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;Amazon RDS&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클릭 몇 번으로 클라우드에서 관계형 데이터베이스를 설정, 운영, 조정 할 수 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Amazon Aurora , MsSQL , MariaDB , Oracle , PostgreSQL , MySQL&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- DB 를 구축하기 위해서 다운로드 , 설치 , 패치 등이 불 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- DB 를 중단하지 않고 확장 가능&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;Amazon Aurora&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클라우드를 위해 구축된 MySQL 및 PostgreSQL 을 위해 만든 데이터베이스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 완전 관리형 서비스 ( 서버 프로비저닝 , 장애 탐지 등 자동화 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 읽기 전용 복제본 최대 15개 까지 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 64TB 까지 자동 확장 가능&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;Amazon DynamoDB&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 비관계형 데이터베이스 서비스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 완전 관리형 클라우드 DB ( 문서 모델, 키 값 스토어 모두 제공 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모든 테이블에 대해 복구 , 백업 등 지원&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 평균 처리 시간 10밀리초 미만 ( 짧은 지연 시간 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 자동 파티셔닝 SSD&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 각각의 사용자에게 각각의 보안 자격을 주고 , 세부적으로 권한 제어 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 유연성 ( 문서의 저장, 쿼리 및 업데이트 지원 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;4. AWS 클라우드 핵심 서비스 소개 : 네트워킹, 보안&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;네트워킹&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;Amazon Virtual Private Cloud ( Amazon VPC )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- IP 주소의 범위 선택, 서브넷 생성, 라우팅 테이블 및 가상 네트워킹 환경 완벽 제어&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- aws 클라우드의 &lt;span style=&quot;background-color: #fafafa;&quot;&gt;논리적으로 격리되어 있는 프라이빗 가상&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;네트워크 공간&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 워크로드의 논리적 격리 제공&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 리소스에 대한 사용자 지정 액세스 제어 및 보안 설정 허용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;VPC의 계층화된 네트워크 방어&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. VPC 라우팅 테이블을 사용해 트래픽에 대한 위치를 상세하게 제어해서 방어&lt;/p&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. 네트워크 ACL : 1개 이상의 서브넷 내부와 외부의 트래픽을 제어하기 위한 방화벽 활동을 하는 VPC 규칙을 통해 SSH 접속과 같은 유형 등등 허용/거부 가능&lt;/p&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;4. 서드파티 솔루션 : 직접 설치하는 보안 솔루션 또는 서비스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ELB&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 들어오는 애플리케이션 트래픽을 EC2 인스턴스 ,컨테이너, IP주소, 람다 함수 가상 어플라이언스 같은 곳에 분산&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;Route 53&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 가용성과 확장성이 뛰어난 DNS 서비스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인터넷을 통해 웹 서버 같은 리소스로 자동화된 요청을 보냄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 접근 및 사용이 가능하고 정상 작동 중인지 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 지연시간 기반 라우팅, 지역 기반 라우팅, 가중치 기반 라우팅 등 다양한 옵션 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지역 기반 라우팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 싱가포르 접속자는 싱가포르 리전으로 ...... 트래픽을 라우팅을 할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 여기서 중간 업무 -&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;5. AWS와 함께 혁신하기&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;사물 인터넷(Iot)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 사물을 인터넷으로 연결한 것&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;- 자동차, 기계, 가정용 어플라이언스 등 센서 및 API 를 사용해서 인터넷에서 데이터를 연결하고 교환하는 물리적 개체 네트워크 입니다.&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;IoT 가 직면한 과제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 플랫폼 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- Iot 표준과 플랫폼 부족으로 인해 Iot 하드웨어, 네트워크, 애플리케이션 통합 부족으로 완전한 IoT 개발이 어려움&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 디바이스가 원격에 있어 물리적으로 액세스 할 수 없는 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 데이터 분석의 문제나 긴 대기시간&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 많은 데이터가 발생되고 있으나, 모두 테이터 분석이 되고 있는 것은 아님&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 대기시간이 길어서 실시간 분석 등에 한계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 새로운 비즈니스 모델&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. IoT가 제공할 수 있는 효율성 ( 비즈니스 및 제조 프로세스를 자동화 하고 원격으로 모니터링 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 직원 생산성의 증가 ( 다양한 직군에서 직무 만족도 및 인력 생산성을 높이고 있음 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 고객 경험 개선 ( 실제 제품 성능 및 사용과 통합하는 것부터, 고도로 개인화 상품까지 .... )&lt;/p&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 IoT 서비스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &quot;어떻게 IoT 데이터를 이해하고 활용할 수 있을까&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &quot;연결성 및 제어 서비스 - 어떻게 대규모 IoT 장치들을 제어하고 관리하고 보안을 신경 쓸 것인가&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. &quot;고객과 더 가까운 곳에서 운영하는 장치를 빌드할 때 &quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 회의 -&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>aws</category>
      <category>aws 온라인 컨퍼런스</category>
      <category>정리</category>
      <category>후기</category>
      <author>사라만</author>
      <guid isPermaLink="true">https://rsorry.tistory.com/292</guid>
      <comments>https://rsorry.tistory.com/292#entry292comment</comments>
      <pubDate>Thu, 30 Sep 2021 17:55:28 +0900</pubDate>
    </item>
    <item>
      <title>그림으로 공부하는 IT인프라 구조 - 4</title>
      <link>https://rsorry.tistory.com/291</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번에도 책 &quot;그림으로 공부하는 IT인프라 구조&quot; 를 이어서 정리 해보도록 하겠습니다.&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;캐시 ( cache )&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 캐시는 임시 저장소를 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 일부 데이터를 데이터 출력 위치와 가까운 지점에 일시적으로 저장한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터 재사용을 전제로 한다&lt;/p&gt;
&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;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;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;- 설계 시 어떤 데이터를 캐시하는 것이 효과적인지를 검토해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 시스템 가동 직후 등에는 캐시에 데이터가 없기 떄문에, 원하는 성능이 나오지 않을 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 캐시 계층이 늘어나기 때문에, 시스템 성능 문제나 데이터 불일치 문제가 발생한 경우는 문제 발생을 야기한 용의자가 늘어난다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 캐시의 데이터가 손실되는 경우를 대비해서 복구 순서를 설계 시에 확립해야 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 갱신 데이터(쓰기 데이터)를 캐시할 때 캐시가 여러 개 있으면 갱신된 최신 데이터를 서로 뺏으려는 상태가 발생하지 않도록 주의해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;끼어들기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 어떤 원인으로 인해 지금 하고 있는 일을 중단하고 급히 다른 일을 하는 것을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 급한 일을 먼저 하도록 CPU에 알리는 중요한 역할&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 끼어들기는 급한 일이 생겨서 지금 진행 중인 일을 중단하고 급한 일을 끝낸 후에 다시 원래 일을 진행하는 것이다. 일하는 동안에 전화가 와서 일을 중단하고 전화를 받은 후 다시 하던 일을 진행하는 것과 같다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 구체적으로는 키보드 입력 등의 특정 이벤트가 발생했을 때 CPU에 이것을 알려서 해당 이벤트에 대응하는 처리를 끝낸 후 원래 하던 처리를 계속하는 것이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;폴링&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 폴링은 정기적으로 질의하는 것을 가리킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 질의 방향이 단방향 이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 질의는 일정 간격을 따라 정기적으로 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 반복(루프)만 하면 되기에 프로그래밍이 쉽다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 상대가 응답하는지 확인할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모아서 일괄적으로 처리할 수 있다&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;h3 data-ke-size=&quot;size23&quot;&gt;부적합한 처리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 상태가 아닌 입력 내용에 따라 실행 내용을 변경하는 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 키보드는 키를 누른 '상태' 가 아닌 입력한 '내용' 에 따라 처리해야 하기 때문에 끼어들기가 더 적합하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 처리 우선순위를 정해야 하는 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 일정 간격으로 처리가 실행되기 때문에 우선순위를 정할 수 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;핑퐁&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 몇 번이고 왕복해야 하는 상황을 '핑퐁' 이라고 부른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 물건(데이터)를 운반할 때는 상자에 넣으면 효울적으로 관리할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 운반하는 양에 따라 상자 크기를 선택하면 효율적으로 운반할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 운반하고자 하는 데이터의 크기(양) 에 따라 적합한 상자를 선택하여야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) OS 블록 크기와 데이터베이스 블록 크기가 다를 경우, 최소 공배수를 통해서 빈 공간이 없도록 데이터를 운반하는 것이 효율적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;저널링&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 트랜잭션이나 매일 갱신되는 데이터의 변경 이력을 '저널' 이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이러한 '저널' 을 남겨 두는 것을 '저널링' 이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 언제, 어디서, 무엇을 했는지 기록하는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터 자체가 아닌 처리(트랜잭션) 내용을 기록한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터 일관성이나 일치성이 확보되면 필요 없어진다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터 복구 시 롤백(rollback), 롤포워드(rollforward) 에 이용된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 시스템 장애 시 복구가 빠르다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터 복제보다도 적은 리소스를 소비해서 데이터를 보호할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 롤백은 저널을 읽어서 실제 데이터 정보를 과거로 되돌리는 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 롤포워드는 저널을 읽어서 실제 데이터 정보를 앞으로 진행시키는 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 롤백과 롤포워드는 트랜잭션 단위로 실행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;복제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 복사본을 만드는 것을 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징&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;br /&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;- 데이터 손실을 허용하지 않고 장애 시 복구 속도가 빨라야 하는 시스템&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;- 데이터 갱신이 많은 시스템&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;- 시스템 유지관리나 장애 시에는 복제 데이터도 고려해야 하기 때문에 설계나 운용 난이도가 높아질 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 복제 데이터와 실제 데이터의 차이가 커지면 그 차이를 채우기 위한 시간이나 성능도 고려해야 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마스터-슬레이브&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 주종 관계를 카리킨다. 명령하는 쪽과 명령을 받는 쪽의 관계라고 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이와 반대되는 개념은 &quot;피어 투 피어&quot; 이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;- 관리자가 한 명이기 때문에 구현이 쉽다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 슬레이브 간 처리를 동기화할 필요가 없기 때문에 통신량이 줄어든다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;단점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 마스터가 없어지면 관리를 할 수 없다 ( 작업 인계 구조가 필요 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 마스터의 부하가 높아진다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;압축&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 쓸데없는 공간을 줄이는 것. ( 이미 'zip 파일' 로 익숙하게 사용중 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 이불을 장농에 넣을 때 이불에 있는 공기를 없애는 것.&lt;/p&gt;
&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;- 압축한 데이터를 원래대로 복원할 수 있는 &quot;가역 압축&quot;과 이미지나 음성 데이터 등에 있는 사람이 인식할 수 없는 부분을 생략하는 &quot;비가역 압축&quot;이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터 크기를 줄이는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 네트워크 경유의 데이터 전송 등 I/O 속도가 느린 환경에서 미리 압축해서 전송할 경우 전체적인 처리 시간을 줄일 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단점&lt;br /&gt;- 처리 시간이 걸린다는 것&lt;/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;p data-ke-size=&quot;size16&quot;&gt;- '자신에게 필요없는 정보' or '이미 알고 있는 정보' 를 의미 없는 정보라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) Central Processing Unit 이 정식 명칭이지만, 이를 줄여서 CPU 라고 부른다. 이러한 것도 정보의 압축이라고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;오류 체크 / 오류 수정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- '오류 체크' 는 디지털 데이터의 오류를 스스로 확인하고, 파손되었을 때 이를 감지하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- '오류 수정' 은 자동으로 복구하는 것을 가리킴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 상위 계층에서의 오류 관리 없이 데이터 일치성을 일정 수준 보장할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 체크 기능에 의한 리소스 부하 상승, 알고리즘 복잡화 등&lt;/p&gt;</description>
      <category>이론 공부</category>
      <category>IT인프라 구조</category>
      <category>이론</category>
      <author>사라만</author>
      <guid isPermaLink="true">https://rsorry.tistory.com/291</guid>
      <comments>https://rsorry.tistory.com/291#entry291comment</comments>
      <pubDate>Wed, 29 Sep 2021 10:25:05 +0900</pubDate>
    </item>
    <item>
      <title>그림으로 공부하는 IT인프라 구조 - 3</title>
      <link>https://rsorry.tistory.com/290</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이어서 이번에도 &quot;그림으로 공부하는 IT 인프라 구조&quot; 라는 책을 읽으면서, 해당 책에서 소개되는 여러 구조 들을 정리해보겠습니다.&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;span&gt;직렬 병렬 구조&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;도로를 예로 들어서&lt;span&gt; 1&lt;/span&gt;차선 도로를 직렬&lt;span&gt; , 2&lt;/span&gt;차선 도로 이상을 병렬 이라고 한다&lt;span&gt;. &lt;/span&gt;이를&lt;span&gt; CPU&lt;/span&gt;에 적용하면 클럭 수는 직렬&lt;span&gt; , &lt;/span&gt;코어 수는 병렬 이라고 볼 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;하나의&lt;span&gt; CPU &lt;/span&gt;로 처리를 하는 데에는 한계가 있기 때문에&lt;span&gt;, &lt;/span&gt;다수의&lt;span&gt; CPU &lt;/span&gt;를 배치해서 처리한다&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;병렬화해서 데이터를 처리한 후 집약할 때 오버헤드가 걸리는데&lt;span&gt;, &lt;/span&gt;이 오버헤드를 감안하더라도 효과가 있을 때 병렬화 처리를 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;웹 서버는 복수의 프로세스&lt;span&gt; , AP &lt;/span&gt;서버는 &lt;span&gt;1&lt;/span&gt;개의 프로세스 내에서 복수의 스레드를 사용한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;동기&lt;span&gt; / &lt;/span&gt;비동기&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;특정 요청을 했을 때&lt;span&gt;, &lt;/span&gt;해당 요청이 끝날 때까지 기다리는 것을 동기&lt;span&gt; , &lt;/span&gt;기다리지 않고 다른 처리를 수행하는 것이 비동기 이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;동기의 장점 &lt;span&gt;: &lt;/span&gt;구현난이도가 낮고&lt;span&gt; , &lt;/span&gt;요청한 일이 끝났는지 즉각 확인 할 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;동기의 단점&lt;span&gt; : &lt;/span&gt;요청한 일이 끝날때까지 다른 것을 할 수 없다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;비동기의 장점&lt;span&gt; : &lt;/span&gt;요청한 일이 처리되고 있는 동안&lt;span&gt; , &lt;/span&gt;다른 업무를 수행할 수 있다&lt;span&gt;. ( &lt;/span&gt;시간을 효율적으로 사용해서 병렬화 할 수 있다&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;비동기의 단점&lt;span&gt; : &lt;/span&gt;구현난이도가 상대적으로 높다&lt;span&gt;. &lt;/span&gt;요청한 일이 끝났는지 확인하지 않으면&lt;span&gt; , &lt;/span&gt;해당 요청이 끝났는지 알 수 없기 때문에&lt;span&gt;, &lt;/span&gt;불필요한 확인 작업이 필요하다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;큐&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;우리말로 &lt;span&gt;&amp;lsquo;&lt;/span&gt;대기 행렬&lt;span&gt;&amp;rsquo; &lt;/span&gt;이라고 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이는 하드웨어&lt;span&gt;, OS, &lt;/span&gt;데이터베이스&lt;span&gt;, &lt;/span&gt;애플리케이션 등 거의 모든 곳에서 사용되는 구조 로써&lt;span&gt;, &lt;/span&gt;먼저 들어온 데이터&lt;span&gt;(&lt;/span&gt;요청&lt;span&gt;) &lt;/span&gt;이 먼저 처리 되는 것이 특징이며 이를 &lt;span&gt;FIFO(First In First Out) &lt;/span&gt;선입선출 방식이라고 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- CPU &lt;/span&gt;&lt;span&gt;처리를 기다리고 있는 프로세스나 스레드 행렬&lt;span&gt; / &lt;/span&gt;하드 디스크 등의 저장소 읽기 처리를 기다리고 있는&lt;span&gt; I/O &lt;/span&gt;요구 행렬&lt;span&gt; / &lt;/span&gt;네트워크 접속 성립을 기다리고 있는 접속 요구 행렬 등에 사용 된다&lt;span&gt;. ( &lt;/span&gt;여러 처리가 동시에 진행되는 경우에 자주 사용된다&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;배타적 제어&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;여러 사람이 공유하는 물건일 경우&lt;span&gt;, &lt;/span&gt;누군가가 그 물건을 사용하고 있으면 다른 사람은 그것을 사용할 수 없도록 하는 것이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;동시에 사용하게 되면 고장이 날 수도 있기 때문에&lt;span&gt;, &lt;/span&gt;배타적 제어가 필요하다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;공유 자원을 사용할 때에 데이터의 불일치를 유발하지 않기 위해서 배타적 제어를 사용한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;상태 저장&lt;span&gt; / &lt;/span&gt;상태 비저장&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;어떤 작업을 하고 있을 때 현재 어디까지 작업이 진행됐는지를 &lt;span&gt;&amp;lsquo;&lt;/span&gt;상태&lt;span&gt;&amp;rsquo; &lt;/span&gt;라고 한다&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이러한 &lt;span&gt;&amp;lsquo;&lt;/span&gt;상태&lt;span&gt;&amp;rsquo; &lt;/span&gt;를 저장해서 사용하는 것을 &lt;span&gt;&amp;lsquo;&lt;/span&gt;상태 저장&lt;span&gt;&amp;rsquo; , &amp;lsquo;&lt;/span&gt;상태&lt;span&gt;&amp;rsquo; &lt;/span&gt;를 저장하지 않는 것을 &lt;span&gt;&amp;lsquo;&lt;/span&gt;상태 비저장&lt;span&gt;&amp;rsquo; &lt;/span&gt;이라고 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;상태 저장은 복잡한 처리가 가능하지만&lt;span&gt;, &lt;/span&gt;시스템 복잡성이 커지며 상태 비저장은 성능이나 안정성 측면에서 우수하다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;거의 모든 곳에서 상태 저장이 사용되고 있는데&lt;span&gt;, &lt;/span&gt;네트워크 통신&lt;span&gt;(&lt;/span&gt;웹&lt;span&gt;) &lt;/span&gt;에서는 보통 세션이라는 개념을 사용해서 구현하고 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;가변 길이&lt;span&gt; / &lt;/span&gt;고정 길이&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;가변 길이는 데이터 크기를 매번 변경하는 것으로&lt;span&gt;, &lt;/span&gt;데이터 전체 양이 준다는 장점이 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;고정 길이는 모두 같은 크기를 이용해서 처리하는 것으로&lt;span&gt;, &lt;/span&gt;크기가 균일해서 관리가 수월하다는 장점이 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;효율성을 추구한다면 가변 길이를&lt;span&gt;, &lt;/span&gt;간단한 것을 추구한다면 고정 길이를 사용하는 등 적절하게 선별해서 사용하여야 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/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;span&gt;데이터 구조&lt;span&gt; ( &lt;/span&gt;배열과 연결 리스트&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;배열과 연결리스트 모두 순차적으로 데이터를 처리하는 구조&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;배열은 &lt;span&gt;&amp;lsquo;&lt;/span&gt;같은 크기&lt;span&gt;&amp;rsquo;&lt;/span&gt;의 상자를 &lt;span&gt;&amp;lsquo;&lt;/span&gt;빈틈 없이 순서대로&lt;span&gt;&amp;rsquo; &lt;/span&gt;나열하는 것으로&lt;span&gt;, &lt;/span&gt;몇번 째 상자인지만 알면 해당 상자에 한 번에 액세스할 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;연결 리스트는 상자를 선으로 연결한 형태의 데이터 구조&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;연결 리스트는 다음 상자의 위치 정보를 가지고 있는 것으로 특정 상자를 찾으려면 끝에서부터 순서대로 하나씩 상자 내부를 확인해야 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;배열은 탐색이 빠르지만&lt;span&gt;, &lt;/span&gt;배열 도중에 상자를 추가 및 삭제가 느린 데이터 구조&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;연결 리스트는 상자를 추가 및 삭제가 빠르며 탐색이 느린 데이터 구조&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;탐색 알고리즘&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 이 책에서 설명하는 탐색 알고리즘은 코드가 아닌 탐색 알고리즘의 본질에 대해서 설명하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 데이터 관리는 어떤 식으로 해야 하는지 , 특정 데이터를 찾기 위해서 어떻게 접근해야 하는지 가 주다&lt;/p&gt;
&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;- 데이터를 찾을 때의 데이터 구조와 데이터 저장 방식(메모리, HDD, SSD 등 ) 특성에 따라 적합한 데이터 정리 방법이 달라진다&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;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;- 인덱스가 있다면 최소한의 필요 블록만 읽으면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사전을 찾을 때 색인을 이용하는 것과 마찬가지다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인덱스가 있는 경우 검색이 빨라지는 대신에 데이터 추가, 갱신, 삭제 시 테이블 뿐 아니라 인덱스 데이터도 갱신되어야 되기 때문에, 불필요한 오버헤드가 발생할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인덱스는 읽을 블록 수를 줄이기 위한 수단이지만, 인덱스를 사용하면 오히려 읽을 블록 수가 늘어날 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 테이블 데이터를 모두 취득해야 하는 경우 등&lt;/p&gt;
&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;※ DBMS 에서 인덱스를 만들면 검색은 빨라지지만 갱신 시에 오버헤드가 걸린다는 단점도 있기 때문에 함께 고려해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>이론 공부</category>
      <category>IT 인프라 구조</category>
      <category>동기비동기</category>
      <category>배타적 제어</category>
      <category>직렬병렬</category>
      <author>사라만</author>
      <guid isPermaLink="true">https://rsorry.tistory.com/290</guid>
      <comments>https://rsorry.tistory.com/290#entry290comment</comments>
      <pubDate>Tue, 28 Sep 2021 17:39:53 +0900</pubDate>
    </item>
    <item>
      <title>그림으로 공부하는 IT인프라 구조 - 2</title>
      <link>https://rsorry.tistory.com/289</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번에도 책 &quot;그림으로 공부하는 IT 인프라 구조&quot; 를 이어서 정리 해보겠습니다.&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;CPU ( Central Processing Unit )&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서버 중심에 위치해서 연산 처리를 진행 한다. ( 연산은 1초에 10억회 이상 수행 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 명령을 받아서 연산을 실행하고 결과를 반환 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 명령과 데이터는 기억장치나 입출력 장치를 통해서 전달 된다.&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;- CPU 옆에 위치하며, CPU에 전달하는 내용이나 데이터를 저장하거나 처리결과를 받는 기억 영역&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 메모리에 저장되는 데이터는 영구성이 없다. ( 서버 재시작시 사라진다. )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 액세스 속도가 캐시에 비해 느리지만, HDD 에 비해 빠르다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 메모리는 다단계 구조를 가지고 각각의 액세스 속도에 맞게 사용되기 때문에, CPU의 처리 속도를 줄일 수 있다.&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;I/O (Input Output) 장치&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;하드 디스크 드라이브(HDD)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서버에서 메모리에 비해 CPU에서 떨어진 곳에 배치된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 메모리에 비해 비교적 액세스 속도가 느리지만, 전기가 끊겨도 데이터가 사라지지 않는다. ( 서버 재시작시 안사라짐 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- HDD가 직접 데이터를 교환하는 것이 아니라, 캐시를 통해서 데이터를 교환 한다.&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;&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;/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;- 원래는 주파수 대역을 의미하지만, 'IT 인프라' 에서는 데이터 전송 능력을 의미 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 한번에 보낼 수 있는 데이터의 폭(전송폭), 1초에 전송할 수 있는 횟수(전송 횟수) 로 결정 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;프로세스와 스레드&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로그램을 설치해서 실행하면 창이 열리고, 또 실행시키면 새로운 창이 열린다. ( 같은 프로그램 2개 실행 ) 이 것을 프로세스 또는 스레드 라고 부른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로그램 실행 파일 그 자체가 아닌, OS 상에서 실행돼서 어느 정도 독립성을 가지고 동작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로세스 및 스레드가 활동하려면 메모리 공간이 필요하다. 이것은 커널에 의해 메모리 상에 확보 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 각 프로세스는 전용 메모리 공간을 이용해서 동작한다. ( 프로세스 간에 메모리 공간을 공유하지 않는다 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 스레드는 다른 스레드와 메모리 공간을 공유하고 있는 운명 공동체다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로세스는 개별 처리 독립성이 높다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 스레드는 생성 시 부하가 낮다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로세스는 생성 시 CPU 부하가 높다&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;ex) 오라클DB는 여러 프로세스가 '공유 메모리 공간'을 상호 이용할 수 있도록 되어 있다.&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;OS 커널&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- OS에서 커널은 심장이자 뇌이며 척수이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 커널 자체가 OS의 인프라 라고 생각해도 무방하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 커널이 존재하기 때문에, 개발자는 하드웨어나 다른 애플리케이션에 미치는 영향을 의식하지 않고 애플리케이션을 개발할 수 있다.&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;1. 시스템 콜 인터페이스&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로세스/스레드 에서 커널로 연결되는 인터페이스 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 애플리케이션이 OS를 통해서 어떤 처리를 하고 싶을 때 &quot;시스템 콜&quot; 이라는 명령을 이용해서 커널에 명령을 내린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 프로세스 관리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 언제, 어떤 프로세스가 어느 정도의 CPU 코어를 사용할 수 있는지, 처리 우선순위를 결정한다.&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. 메모리 관리&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;h4 data-ke-size=&quot;size20&quot;&gt;4. 네트워크 스택&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;h4 data-ke-size=&quot;size20&quot;&gt;5. 파일시스템 관리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- OS 기능의 하나로써 물리 디스크에 제공된 데이터를 관리하는 기능이다.&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;6. 장치 드라이버&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 디스크나 NIC 등의 물리 장치용 인터페이스를 제공 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 각 장치 제조사가 OS에 대응하는 장치 드라이버를 제공해서 해당 OS의 표준 장치로서 커널을 경유해 이용할 수 있게 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;웹 데이터의 흐름&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;PC -&amp;gt; 웹 서버 -&amp;gt; AP 서버 -&amp;gt; DB 서버 -&amp;gt; AP 서버 -&amp;gt; 웹 서버 -&amp;gt; PC&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;h4 data-ke-size=&quot;size20&quot;&gt;PC -&amp;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;3. 웹 서버가 요청을 접수한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 웹 서버가 정적 콘텐츠인지 동적 콘텐츠인지 판단 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 필요한 경로로 데이터에 액세스 한다.&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;- 웹 브라우저는 요청한 서버가 어디에 있는지 모르기 때문에 요청한 URL 을 기반으로 DNS 서버에 해당 서버를 요청하게 된다.&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;ex) 회사 로고 이미지 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 동적 콘텐츠 : 높은 빈도로 변경되는 데이터를 가리킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 은행 잔고, 최신 날씨 정보 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 서버는 동적 콘텐츠에 대한 요청을 AP 서버에게 던지고 결과를 기다린다.&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;gt; AP 서버&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- AP서버는 '동적 콘텐츠'에 대한 요청을 처리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 웹 서버로부터 요청이 도착한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 스레드가 요청을 받으면 자신이 계산할 수 있는지, 아니면 DB 접속이 필요한지를 판단한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. DB 접속이 필요하면 연결 풀에 액세스한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. DB 서버에 요청을 던진다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 데이터가 필요하면 DB 서버에 접속하는게 일반적 이지만, 이것이 항상 효율적이지는 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;ex) 갱신 빈도가 낮고 규모가 작은 데이터의 경우 매번 접속할 필요 없이 캐시에 저장해두고 사용하는게 좋다. 이 경우 데이터가 갱신 되었을 시만 DB 서버에 접속해서 데이터를 업데이트 하면 된다. &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;AP 서버 -&amp;gt; DB 서버 -&amp;gt; AP 서버&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- DB 서버로의 요청은 SQL 이라는 언어 형태로 이루어 진다. 이 SQL 을 해석해서 데이터 액세스 방식을 결정하고, 디스크나 메모리에서 필요한 데이터만 수집해 오는 것이 데이터베이스의 주요 역할 이다.&lt;/p&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. AP 서버로부터 요청이 도착한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 프로세스가 요청을 접수하고 캐시가 존재하는지 확인한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 캐시에 없으면 디스크에 액세스 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 디스크가 데이터를 반환한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 데이터를 캐시 형태로 저장한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 결과를 AP 서버에 반환한다&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;AP 서버 -&amp;gt; 웹 서버&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- DB 서버에서 데이터가 돌아왔기 때문에 AP 서버의 요청 스레드로 경과가 반환된다.&lt;/p&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. DB 서버로부터 데이터가 도착한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 스레드가 데이터를 가지고 계산 등을 한 후에 파일 데이터를 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 결과를 웹 서버로 반환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;웹 서버 -&amp;gt; PC&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- AP 서버에서 돌아온 데이터를 받아서 웹 서버의 httpd 프로세스가 PC의 웹 브라우저로 반환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. AP 서버로부터 데이터가 도착한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 프로세스는 받ㄴ은 데이터를 그대로 반환한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 결과가 웹 브라우저로 반환되고 화면에 표시된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;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;- 도착한 요청에 대해 응답한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 웹 데이터 흐름의 본질은 '요청 기반으로 어떠한 처리를 하고 필요에 따라 해당 요청을 삼자에게 할당하는 것'&lt;/p&gt;</description>
      <category>이론 공부</category>
      <category>IT인프라 구조</category>
      <category>웹 데이터 흐름</category>
      <category>이론 공부</category>
      <author>사라만</author>
      <guid isPermaLink="true">https://rsorry.tistory.com/289</guid>
      <comments>https://rsorry.tistory.com/289#entry289comment</comments>
      <pubDate>Tue, 28 Sep 2021 15:58:58 +0900</pubDate>
    </item>
  </channel>
</rss>