<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Live Your IT</title>
    <link>https://liveyourit.tistory.com/</link>
    <description>정보보안/IT 공부 블로그입니다.
# 틀린 부분 지적 환영
# 질문 환영
# 댓글 환영</description>
    <language>ko</language>
    <pubDate>Wed, 20 May 2026 11:36:50 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>leeforest</managingEditor>
    <image>
      <title>Live Your IT</title>
      <url>https://tistory1.daumcdn.net/tistory/3388709/attach/00db2b42ebf244fdaa0d8a2b3e156dac</url>
      <link>https://liveyourit.tistory.com</link>
    </image>
    <item>
      <title>엑셀처리</title>
      <link>https://liveyourit.tistory.com/270</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://daewonyoon.tistory.com/383&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://daewonyoon.tistory.com/383&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1633442337504&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;파이썬 xlrd.biffh.XLRDError: Excel xlsx file; not supported&quot; data-og-description=&quot;파이썬으로 엑셀파일을 다루는 코드가 아래와 같은 에러메시지를 발생하며 돌아가지 않았다. 에러메시지로 구글링을 하여보니 xlrd 패키지 (엑셀파일 읽기에 사용되는 패키지) 가 이제는 xls 파&quot; data-og-host=&quot;daewonyoon.tistory.com&quot; data-og-source-url=&quot;https://daewonyoon.tistory.com/383&quot; data-og-url=&quot;https://daewonyoon.tistory.com/383&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/pirI3/hyLRlwGjI7/ehu76Gc4DKpAGBG62OdjaK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cdLOtE/hyLQ8RCl2E/AZ8QfC6kh96aLBUj1NFitK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://daewonyoon.tistory.com/383&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://daewonyoon.tistory.com/383&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/pirI3/hyLRlwGjI7/ehu76Gc4DKpAGBG62OdjaK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cdLOtE/hyLQ8RCl2E/AZ8QfC6kh96aLBUj1NFitK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;파이썬 xlrd.biffh.XLRDError: Excel xlsx file; not supported&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;파이썬으로 엑셀파일을 다루는 코드가 아래와 같은 에러메시지를 발생하며 돌아가지 않았다. 에러메시지로 구글링을 하여보니 xlrd 패키지 (엑셀파일 읽기에 사용되는 패키지) 가 이제는 xls 파&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;daewonyoon.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.naver.com/PostView.nhn?blogId=rising_n_falling&amp;amp;logNo=221622971970&quot;&gt;https://blog.naver.com/PostView.nhn?blogId=rising_n_falling&amp;amp;logNo=221622971970&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1633442348885&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Pandas - DataFrame에서 특정 행, 열 선택&quot; data-og-description=&quot;안녕하세요. '라이징n폴링'입니다. 이번 글에서는 Python의 데이터 구조 중 하나인 DataFrame...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://blog.naver.com/PostView.nhn?blogId=rising_n_falling&amp;amp;logNo=221622971970&quot; data-og-url=&quot;https://blog.naver.com/rising_n_falling/221622971970&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dEMiz4/hyLReEiMJx/YZgoKArzqJgJ7KF6RKYcm1/img.png?width=743&amp;amp;height=278&amp;amp;face=0_0_743_278&quot;&gt;&lt;a href=&quot;https://blog.naver.com/PostView.nhn?blogId=rising_n_falling&amp;amp;logNo=221622971970&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.naver.com/PostView.nhn?blogId=rising_n_falling&amp;amp;logNo=221622971970&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dEMiz4/hyLReEiMJx/YZgoKArzqJgJ7KF6RKYcm1/img.png?width=743&amp;amp;height=278&amp;amp;face=0_0_743_278');&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;Pandas - DataFrame에서 특정 행, 열 선택&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. '라이징n폴링'입니다. 이번 글에서는 Python의 데이터 구조 중 하나인 DataFrame...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/22089317/export-from-pandas-to-excel-without-row-names-index&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/22089317/export-from-pandas-to-excel-without-row-names-index&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1633527786886&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Export from pandas to_excel without row names (index)?&quot; data-og-description=&quot;I'm trying to print out a dataframe from pandas into Excel. Here I am using to_excel() functions. However, I found that the 1st column in Excel is the &amp;quot;index&amp;quot;, 0 6/6/2021 0:00 8/6/2021 0:00 1...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/22089317/export-from-pandas-to-excel-without-row-names-index&quot; data-og-url=&quot;https://stackoverflow.com/questions/22089317/export-from-pandas-to-excel-without-row-names-index&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bsGSPh/hyLSEWuen9/mK6oenCliwXMUosQWKWkwk/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/22089317/export-from-pandas-to-excel-without-row-names-index&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/22089317/export-from-pandas-to-excel-without-row-names-index&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bsGSPh/hyLSEWuen9/mK6oenCliwXMUosQWKWkwk/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Export from pandas to_excel without row names (index)?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I'm trying to print out a dataframe from pandas into Excel. Here I am using to_excel() functions. However, I found that the 1st column in Excel is the &quot;index&quot;, 0 6/6/2021 0:00 8/6/2021 0:00 1...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://re-thought.com/how-to-change-or-update-a-cell-value-in-python-pandas-dataframe/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://re-thought.com/how-to-change-or-update-a-cell-value-in-python-pandas-dataframe/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1633527810954&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;How to change or update a specific cell in Python Pandas Dataframe&quot; data-og-description=&quot;Accessing a single value or updating the value of single row is sometime needed in Python Pandas Dataframe when we don't want to create a new Dataframe for just updating that single cell value. The easiest way to to access a single cell values is via Panda&quot; data-og-host=&quot;re-thought.com&quot; data-og-source-url=&quot;https://re-thought.com/how-to-change-or-update-a-cell-value-in-python-pandas-dataframe/&quot; data-og-url=&quot;https://re-thought.com/how-to-change-or-update-a-cell-value-in-python-pandas-dataframe/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dSicGL/hyLRhaLwkl/VvDx6NwmhOPzmgELjdCG1K/img.jpg?width=2000&amp;amp;height=1333&amp;amp;face=0_0_2000_1333,https://scrap.kakaocdn.net/dn/GjgER/hyLSAsZStB/Rr9ZRvKHyqHHOqvLVxIOp1/img.jpg?width=2000&amp;amp;height=1333&amp;amp;face=0_0_2000_1333&quot;&gt;&lt;a href=&quot;https://re-thought.com/how-to-change-or-update-a-cell-value-in-python-pandas-dataframe/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://re-thought.com/how-to-change-or-update-a-cell-value-in-python-pandas-dataframe/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dSicGL/hyLRhaLwkl/VvDx6NwmhOPzmgELjdCG1K/img.jpg?width=2000&amp;amp;height=1333&amp;amp;face=0_0_2000_1333,https://scrap.kakaocdn.net/dn/GjgER/hyLSAsZStB/Rr9ZRvKHyqHHOqvLVxIOp1/img.jpg?width=2000&amp;amp;height=1333&amp;amp;face=0_0_2000_1333');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;How to change or update a specific cell in Python Pandas Dataframe&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Accessing a single value or updating the value of single row is sometime needed in Python Pandas Dataframe when we don't want to create a new Dataframe for just updating that single cell value. The easiest way to to access a single cell values is via Panda&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;re-thought.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;#-*-coding:utf-8-*- &lt;br /&gt;import&amp;nbsp;pandas&amp;nbsp;as&amp;nbsp;pd &lt;br /&gt;import&amp;nbsp;openpyxl &lt;br /&gt;from&amp;nbsp;openpyxl&amp;nbsp;import&amp;nbsp;load_workbook &lt;br /&gt;import&amp;nbsp;shutil &lt;br /&gt;&lt;br /&gt;origin&amp;nbsp;=&amp;nbsp;'test.xlsx' &lt;br /&gt;res&amp;nbsp;=&amp;nbsp;origin.split('.') &lt;br /&gt;new&amp;nbsp;=&amp;nbsp;res[0]+&quot;_new.&quot;+res[1] &lt;br /&gt;shutil.copy(origin,new) &lt;br /&gt;&lt;br /&gt;data&amp;nbsp;=&amp;nbsp;pd.read_excel(new,&amp;nbsp;engine='openpyxl') &lt;br /&gt;field_info&amp;nbsp;=&amp;nbsp;data.columns &lt;br /&gt;row_len&amp;nbsp;=&amp;nbsp;len(data) &lt;br /&gt;&lt;br /&gt;print(data.at[0,field_info[0]]) &lt;br /&gt;&lt;br /&gt;for&amp;nbsp;i&amp;nbsp;in&amp;nbsp;range(len(data)): &lt;br /&gt;if&amp;nbsp;pd.isnull(data.loc[i][0])&amp;nbsp;==&amp;nbsp;False&amp;nbsp;:&amp;nbsp; &lt;br /&gt;tmp&amp;nbsp;=&amp;nbsp;data.loc[i][0] &lt;br /&gt;print(tmp) &lt;br /&gt;else&amp;nbsp;: &lt;br /&gt;data.at[i,field_info[0]]&amp;nbsp;=&amp;nbsp;tmp &lt;br /&gt;print(data) &lt;br /&gt;&lt;br /&gt;print(&quot;-------------&quot;) &lt;br /&gt;&lt;br /&gt;writer&amp;nbsp;=&amp;nbsp;pd.ExcelWriter(&quot;final.xlsx&quot;,&amp;nbsp;engine='xlsxwriter') &lt;br /&gt;data.to_excel(writer,&amp;nbsp;index=False) &lt;br /&gt;writer.save()&amp;nbsp;&lt;/p&gt;</description>
      <category>일상/기타</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/270</guid>
      <comments>https://liveyourit.tistory.com/270#entry270comment</comments>
      <pubDate>Tue, 5 Oct 2021 22:59:28 +0900</pubDate>
    </item>
    <item>
      <title>1000명대 달성! (+흔한 IT 블로그의 평일 vs 주말 방문자수 차이)</title>
      <link>https://liveyourit.tistory.com/264</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;티스토리를 1월에 시작하고, 어느새 시간이 흘러 8월이다. 1일 1포스팅의 다짐은 3개월밖에 못갔지만 그래도 작심3일로 안끝나고 작심 3개월이면 어느정도 노력했다고 생각한다...ㅋㅋ &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;중간에 취직을 하고나서 블로그를 거의 못봤었는데 일일 방문자 수가 거의 항상 1000명대를 유지하고 있어서 놀랐다. 처음 목표로 했던 수치가 1000명대였는데 달성해서 감격스럽다ㅠ_ㅠ 물론 다른사람에게는 아무런 숫자가 아닐 수도 있겠지만!!!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그나저나 아무래도 IT 블로그라서 그런지 평일과 주말의 방문자 수 차이가 정말 극명한 것 같다. 평일에는 아무래도 학교를 다니고 직장을 다니고 하면서 검색을 할 일이 많아서 그런지 1000명대를 유지하고 있는데 주말은 반토막도 안된다..ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 진짜 극명하다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래 그래프를 보면, 빨간 박스를 친 부분이 주말 혹은 공휴일이다. 진짜 반토막도 안된다......&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1178&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsFuFW/btrci86Leim/6cysaaOVGZ2cPD0cyX4fjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsFuFW/btrci86Leim/6cysaaOVGZ2cPD0cyX4fjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsFuFW/btrci86Leim/6cysaaOVGZ2cPD0cyX4fjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsFuFW%2Fbtrci86Leim%2F6cysaaOVGZ2cPD0cyX4fjK%2Fimg.png&quot; data-origin-width=&quot;1178&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>일상/티스토리</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/264</guid>
      <comments>https://liveyourit.tistory.com/264#entry264comment</comments>
      <pubDate>Mon, 16 Aug 2021 17:08:28 +0900</pubDate>
    </item>
    <item>
      <title>explorer.exe 코드인젝션 한글(hwp) 악성코드 분석</title>
      <link>https://liveyourit.tistory.com/263</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;악성코드 정보&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;MD5&lt;/b&gt;&amp;nbsp; ec0c543675374a0ee9a83a4d55ca1a6c&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;특징&amp;nbsp;&lt;/b&gt; hwp/EPS/코드인젝션/드로퍼/???&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;다운로드&amp;nbsp;&lt;/b&gt; https://app.any.run/tasks/496f832b-fee2-4224-8b0e-bed22d171354/&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;악성코드 상세분석&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;먼저, SSView를 사용해 악성 hwp 구조를 살펴보면 &lt;b&gt;BinData 스토리지에 BIN0001.PS&lt;/b&gt;가 들어있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XMXNz/btrb8hjXzFh/bsOSE59BRZDjXZ8AhehOq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XMXNz/btrb8hjXzFh/bsOSE59BRZDjXZ8AhehOq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XMXNz/btrb8hjXzFh/bsOSE59BRZDjXZ8AhehOq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXMXNz%2Fbtrb8hjXzFh%2FbsOSE59BRZDjXZ8AhehOq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;768&quot; height=&quot;208&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;256&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;BIN0001.PS를 스트림 형태로 저장한 다음 zlib 압축을 풀어주면, 아래와 같이 &lt;b&gt;디코딩된 eps 코드&lt;/b&gt;를 볼 수 있다. 이전에 분석한 한글 악성코드와 형태가 매우 유사해, &lt;b&gt;get 뒤에 있는 &amp;lt;&amp;gt;가 xor 키값&lt;/b&gt;임을 알 수 있었다. 이번 키길이는 16바이트이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;279&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S8gWx/btrcgO1E0DH/149KbT5NpEldacGEbJvfA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S8gWx/btrcgO1E0DH/149KbT5NpEldacGEbJvfA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S8gWx/btrcgO1E0DH/149KbT5NpEldacGEbJvfA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS8gWx%2FbtrcgO1E0DH%2F149KbT5NpEldacGEbJvfA0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;760&quot; height=&quot;242&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;279&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;16바이트 키값을 활용해 직접 파이썬 코드를 짜도 되지만, 여기서는 eps 코드의 맨 마지막에 있는 &lt;b&gt;exec 명령어를 print로 변경&lt;/b&gt;해주는 방식을 사용하도록 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;251&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cONfQS/btrb78GKyM4/TZiAWT7qDRP5R9Xkt2s800/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cONfQS/btrb78GKyM4/TZiAWT7qDRP5R9Xkt2s800/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cONfQS/btrb78GKyM4/TZiAWT7qDRP5R9Xkt2s800/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcONfQS%2Fbtrb78GKyM4%2FTZiAWT7qDRP5R9Xkt2s800%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;756&quot; height=&quot;221&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;251&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;eps는 한글 설치 시 포함되는 gbb.exe를 사용해 돌릴 수 있다. 인자값으로 exec 명령어를 print로 변경한 eps 코드를 넘겨주면 코드가 실행되면서 마지막 xor 복호화된 cvx 변수값을 출력해준다. 결과값을 다시 eps로 저장한 후 보면, 다시 변수 Y77에 어떠한 코드가 들어있는데, 첫 바이트인 E9값을 보면 쉘코드임을 유추할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;i&gt;C:\Program&amp;nbsp;Files\Hnc\HOffice9\&lt;b&gt;Bin\ImgFilters\GS\gs8.71\bin\gbb.exe&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1121&quot; data-origin-height=&quot;776&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzRqiC/btrcb9rL8zp/PURqkHL0Rvcl28MBSM6ji1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzRqiC/btrcb9rL8zp/PURqkHL0Rvcl28MBSM6ji1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzRqiC/btrcb9rL8zp/PURqkHL0Rvcl28MBSM6ji1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzRqiC%2Fbtrcb9rL8zp%2FPURqkHL0Rvcl28MBSM6ji1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;781&quot; height=&quot;541&quot; data-origin-width=&quot;1121&quot; data-origin-height=&quot;776&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당 쉘코드를 exe로 변경한 다음, x64dbg로 쭉쭉 실행시켜 보았는데, 안티디버깅이 있는지 중간에 계속 꺼진다. 그래프뷰로 봐보면, 빨간박스를 친 0x401022 주소로 가야 retn이 안돼서 프로세스가 종료되지 않는데 [ cmp, dword ptr [ecx], 0AABBCCDDh ] 이부분에서 점프 조건 분기가 오른쪽인 0x401018 부분으로 간다. 따라서 &lt;b&gt;jz 부분을 그냥 jmp로 변경&lt;/b&gt;해 무조건 &lt;u&gt;0x4015AD0 부분이 실행될 수 있도록&lt;/u&gt; 해주었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;631&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/edShCa/btrcb8GsJ70/SKvB4yqcKJ2HrtLH4hG7Sk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/edShCa/btrcb8GsJ70/SKvB4yqcKJ2HrtLH4hG7Sk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/edShCa/btrcb8GsJ70/SKvB4yqcKJ2HrtLH4hG7Sk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FedShCa%2Fbtrcb8GsJ70%2FSKvB4yqcKJ2HrtLH4hG7Sk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;679&quot; height=&quot;435&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;631&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;안티디버깅인지 뭔지? 여하튼 우회하고 나서 실행시키다보면, ebp-10 에 explorer.exe 문자열이 쓰여진다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGFT8v/btrcc6BqYgZ/JoLoBghIeowC7lpEtr7hkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGFT8v/btrcc6BqYgZ/JoLoBghIeowC7lpEtr7hkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGFT8v/btrcc6BqYgZ/JoLoBghIeowC7lpEtr7hkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGFT8v%2Fbtrcc6BqYgZ%2FJoLoBghIeowC7lpEtr7hkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;644&quot; height=&quot;419&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;546&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그리고 아래와 같이 &lt;b&gt;함수테이블을 구성&lt;/b&gt;하게 되는데 VirtualAllocEx, WriteProcessMemory와 같은 함수를 보아선, 아까 문자열로 확인한 &lt;u&gt;explorer.exe를 열어서 dll 인젝션을 하거나 코드를 쓸것이라는 것을 예상&lt;/u&gt;해볼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/moQjZ/btrb7u4mjnI/dco8XWnkbzpsl5MkIjpphk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/moQjZ/btrb7u4mjnI/dco8XWnkbzpsl5MkIjpphk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/moQjZ/btrb7u4mjnI/dco8XWnkbzpsl5MkIjpphk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmoQjZ%2Fbtrb7u4mjnI%2Fdco8XWnkbzpsl5MkIjpphk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;710&quot; height=&quot;420&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;526&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;OpenProcess에 bp를 걸고 인자값을 보면, &lt;b&gt;PID가 0x15FC(5628)&lt;/b&gt;이고, &lt;u&gt;explorer.exe가 5628 PID로 winlogon.exe라는 프로세스의 자식프로세스로 열려있는 것&lt;/u&gt;을 확인할 수 있다. &lt;s&gt;winlogon이건 언제 생겼대;;&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;977&quot; data-origin-height=&quot;453&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EGkSt/btrcc4RcJER/8FKvNa8kJIwC4mdR7vMKnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EGkSt/btrcc4RcJER/8FKvNa8kJIwC4mdR7vMKnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EGkSt/btrcc4RcJER/8FKvNa8kJIwC4mdR7vMKnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEGkSt%2Fbtrcc4RcJER%2F8FKvNa8kJIwC4mdR7vMKnk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;683&quot; height=&quot;317&quot; data-origin-width=&quot;977&quot; data-origin-height=&quot;453&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;WriteProcessMemory에 bp를 걸어보자. 인자값을 봐보면, 0x5860000 오프셋에 0x401000 주소에 있는 값을 쓰는데, &lt;b&gt;401000은 EP부분&lt;/b&gt;이다. explorer.exe에 코드인젝션을 수행해, 0x2e80000을 확인해보면 아래와 같이 EP코드가 쓰여진 것을 볼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;518&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clPuvQ/btrb9FqCiAu/GrG4I8EXJ9kDqxPPHp5tC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clPuvQ/btrb9FqCiAu/GrG4I8EXJ9kDqxPPHp5tC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clPuvQ/btrb9FqCiAu/GrG4I8EXJ9kDqxPPHp5tC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclPuvQ%2Fbtrb9FqCiAu%2FGrG4I8EXJ9kDqxPPHp5tC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;636&quot; height=&quot;392&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;518&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;몇번을 걸쳐 계속 쓴다. 쓰는 데이터들을 보면서, 처음 쉘코드를 다시 확인해보니 아래의 URL을 확인할 수 있었는데 아무래도 https://gozdeelektronik.net 은 c2서버로 확인되고, 해당 서버에서 &lt;b&gt;movie.jpg&lt;/b&gt;라는 &lt;u&gt;추가적인 악성파일을 다운&lt;/u&gt;받는 것으로 예상할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;186&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bz5CaW/btrcgOtXSks/wV1BSHRmO8rS1CFN0IqPxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bz5CaW/btrcgOtXSks/wV1BSHRmO8rS1CFN0IqPxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bz5CaW/btrcgOtXSks/wV1BSHRmO8rS1CFN0IqPxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz5CaW%2FbtrcgOtXSks%2FwV1BSHRmO8rS1CFN0IqPxK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;609&quot; height=&quot;148&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;186&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>malware</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/263</guid>
      <comments>https://liveyourit.tistory.com/263#entry263comment</comments>
      <pubDate>Mon, 16 Aug 2021 16:53:42 +0900</pubDate>
    </item>
    <item>
      <title>난독화된 VBScript 복호화</title>
      <link>https://liveyourit.tistory.com/260</link>
      <description>&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;악성코드 정보&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;md5&amp;nbsp; f61991864cc8d9a58aa573b5e6b3e3cc&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;악성코드 상세분석&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;형태를 확인해보면, 위에 &lt;b&gt;EEU 변수에 난독화된 코드&lt;/b&gt;가 들어가 있고, 마지막에 JKL을 EXECUTE하는 형태이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;368&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjg72r/btrbJKfWqvp/tK6Hi9AVkwapsd7DvYISEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjg72r/btrbJKfWqvp/tK6Hi9AVkwapsd7DvYISEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjg72r/btrbJKfWqvp/tK6Hi9AVkwapsd7DvYISEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcjg72r%2FbtrbJKfWqvp%2FtK6Hi9AVkwapsd7DvYISEK%2Fimg.png&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;368&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 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;vbs 파일 분석은 처음이라, 이것저것 구글링해보면서 난독화 해제하는 법을 찾아봤는데 대략 아래와 같은 방법이 존재하는 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. 비쥬얼스튜디오에서 디버깅하면서 확인&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. 변수 출력 방법 (msgbox, Wscript.Echo, Alert 등)&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2번의 경우 다른 VBScript 악성코드 분석시 사용해보고 여기에 추가해보는 것으로 하고, 해당 악성코드의 경우 그리 복잡해보이지는 않으므로 여기서는 2번을 사용해보도록 한다. &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;msgbox로 확인 시, 길이의 한계가 있어서 그런지 끝까지 확인을 할 수 없었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;566&quot; width=&quot;664&quot; height=&quot;491&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccSziz/btrbLe8S4Dx/ZvRPbPacl8BRj1CAKPiE41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccSziz/btrbLe8S4Dx/ZvRPbPacl8BRj1CAKPiE41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccSziz/btrbLe8S4Dx/ZvRPbPacl8BRj1CAKPiE41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccSziz%2FbtrbLe8S4Dx%2FZvRPbPacl8BRj1CAKPiE41%2Fimg.png&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;566&quot; width=&quot;664&quot; height=&quot;491&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 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Wscript.Echo()&lt;/b&gt;를 사용하면, 복호화된 전체 코드를 확인할 수 있는데 복호화되기 전이랑 형태가 매우 유사하다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;206&quot; width=&quot;719&quot; height=&quot;199&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lvw4L/btrbOq9CNL3/8qpPjCJW4oRQNma8GBkZq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lvw4L/btrbOq9CNL3/8qpPjCJW4oRQNma8GBkZq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lvw4L/btrbOq9CNL3/8qpPjCJW4oRQNma8GBkZq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLvw4L%2FbtrbOq9CNL3%2F8qpPjCJW4oRQNma8GBkZq1%2Fimg.png&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;206&quot; width=&quot;719&quot; height=&quot;199&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;641&quot; data-origin-height=&quot;90&quot; width=&quot;719&quot; height=&quot;101&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0NP6o/btrbPbxJNB4/LmkvhWvgVdkm5p9b594ROK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0NP6o/btrbPbxJNB4/LmkvhWvgVdkm5p9b594ROK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0NP6o/btrbPbxJNB4/LmkvhWvgVdkm5p9b594ROK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0NP6o%2FbtrbPbxJNB4%2FLmkvhWvgVdkm5p9b594ROK%2Fimg.png&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;90&quot; width=&quot;719&quot; height=&quot;101&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 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;거의 똑같고, 그냥 변수이름만 바뀌었다. 이번에는 &lt;b&gt;ggh에 난독화된 코드&lt;/b&gt;가 다시 들어가있다. 마지막에 &lt;b&gt;EXECUTE(df)&lt;/b&gt;를 수행하기 때문에 해당 부분을 다시 &lt;u&gt;Wscript.Echo(df)로 변경&lt;/u&gt;해보자.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;270&quot; width=&quot;709&quot; height=&quot;246&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bs6Dwa/btrbYtKd2cF/h5KPLr9q0nmt1ppnnjA3o1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bs6Dwa/btrbYtKd2cF/h5KPLr9q0nmt1ppnnjA3o1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bs6Dwa/btrbYtKd2cF/h5KPLr9q0nmt1ppnnjA3o1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbs6Dwa%2FbtrbYtKd2cF%2Fh5KPLr9q0nmt1ppnnjA3o1%2Fimg.png&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;270&quot; width=&quot;709&quot; height=&quot;246&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 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그러면, 아래와 같이 난독화가 해제된 VBScript 코드를 얻을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;968&quot; data-origin-height=&quot;541&quot; width=&quot;762&quot; height=&quot;426&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfE0pr/btrbUWzS6jD/dxD11k7K8oOLSpr7V1ru20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfE0pr/btrbUWzS6jD/dxD11k7K8oOLSpr7V1ru20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfE0pr/btrbUWzS6jD/dxD11k7K8oOLSpr7V1ru20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfE0pr%2FbtrbUWzS6jD%2FdxD11k7K8oOLSpr7V1ru20%2Fimg.png&quot; data-origin-width=&quot;968&quot; data-origin-height=&quot;541&quot; width=&quot;762&quot; height=&quot;426&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;참고자료&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[1] koromoon 네이버 블로그, 난독화된 VBScript 악성코드 분석&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[2] malware.unam, VBScript obfuscated malicious code&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>malware</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/260</guid>
      <comments>https://liveyourit.tistory.com/260#entry260comment</comments>
      <pubDate>Thu, 12 Aug 2021 19:00:16 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] 바이트 문자열을 바이트배열(byte array)로 변경</title>
      <link>https://liveyourit.tistory.com/261</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;바이트 문자열을 그대로 바이트배열로 변경하려면?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;예를들어 &lt;b&gt;'020b16011710' 문자열&lt;/b&gt;이 있다고 해보자. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이걸 \x02\x0b\x10\x01... 이렇게 바꾸고 싶은게 아니라 (hex(16)=\x10), 그대로 \x02\x0b\x16... 로 변경해 무언가 바이트 연산을 하고싶을 때가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1628687030262&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;020b16011710 -&amp;gt; \x02\x0b\x10\x01\x11\xa (X)
020b16011710 -&amp;gt; \x02\x0b\x16\x01\x17\x10 (O)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;바이트 문자열을 bytearray로 변경한 후 연산 작업 수행하기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그러기 위해선 두글자씩 띄어준 후(이게 한바이트가 되겠지) 이걸 bytearray로 변경해주면 된다. &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;u&gt;먼저 for문과 join을 사용해 두글자씩 띄어&lt;/u&gt;준다. 그럼&lt;b&gt; '02 0b 16 01 17 10'의 형태&lt;/b&gt;가 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1628687347623&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; data = b'020b16011710'
&amp;gt;&amp;gt;&amp;gt; arr_data = ' '.join([data[x:x+2] for x in range(0,len(data),2)])
&amp;gt;&amp;gt;&amp;gt; arr_data
'02 0b 16 01 17 10'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이걸 &lt;b&gt;bytearray.fromhex() &lt;/b&gt;처리를 해주면 b'\x02\x0b\x16\x01\x17\x10' 가 나온다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1628687377933&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; b_arr = bytearray.fromhex(arr_data)
&amp;gt;&amp;gt;&amp;gt; b_arr
bytearray(b'\x02\x0b\x16\x01\x17\x10')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그리고나서 원하는 작업을 처리하면 되는데, &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;예를들어 0x64와 xor을 수행해주는 코드는 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1628688398231&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;data = b'020b16011710'
key = 0x64

arr_data = ' '.join([data[x:x+2] for x in range(0,len(data),2)])
b_arr = bytearray.fromhex(arr_data)

for x in b_arr:
    re = x^key
    print(hex(re),chr(re))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;보통 data가 상당히 클테니까, 아래는 입출력 버전이다!&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1628690514692&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;data = open(&quot;C:\\Users\\leefo\\Desktop\\en_data.txt&quot;,&quot;rt&quot;).read()
key = 0x64

arr_data = ' '.join([data[x:x+2] for x in range(0,len(data),2)])
b_arr = bytearray.fromhex(arr_data)

re = ''
for x in b_arr:
    tmp = x^key
    re += chr(tmp)

f = open(&quot;C:\\Users\\leefo\\Desktop\\de_data.txt&quot;,&quot;w&quot;)
f.write(re)
f.close()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/파이썬</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/261</guid>
      <comments>https://liveyourit.tistory.com/261#entry261comment</comments>
      <pubDate>Wed, 11 Aug 2021 23:03:42 +0900</pubDate>
    </item>
    <item>
      <title>iexplore.exe에 코드인젝션을 수행하는 한글 악성코드 분석</title>
      <link>https://liveyourit.tistory.com/258</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;악성코드 정보&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;MD5&lt;/b&gt;&amp;nbsp; f2e936ff1977d123809d167a2a51cdeb&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&amp;nbsp; EPS/코드인젝션/드로퍼&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;다운로드&amp;nbsp;&lt;/b&gt; &lt;a href=&quot;https://app.any.run/tasks/b4381901-3a3b-4055-8304-f0870a8d3c7c/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://app.any.run/tasks/b4381901-3a3b-4055-8304-f0870a8d3c7c/&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;악성코드 상세분석&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;먼저, SSView로 한글 구조를 살펴봤는데, BinData 스토리지 안에 &lt;b&gt;BIN0003.eps&lt;/b&gt;가 있다. 한글 eps코드가 어떻게 악용되어 악성코드가 동작하게 되는지는 나중에 자세하게 공부해서 포스팅해보려 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;443&quot; width=&quot;771&quot; height=&quot;331&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3sAP0/btrbGzZKPJx/6UfhnywjIVenOkXDHCkjqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3sAP0/btrbGzZKPJx/6UfhnywjIVenOkXDHCkjqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3sAP0/btrbGzZKPJx/6UfhnywjIVenOkXDHCkjqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3sAP0%2FbtrbGzZKPJx%2F6UfhnywjIVenOkXDHCkjqk%2Fimg.png&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;443&quot; width=&quot;771&quot; height=&quot;331&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;eps, zlib 압축 해제&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;한글의 eps 코드는 zlib로 압축된 상태이므로 압축을 먼저 풀어주어야 한다. 원래는 HwpScan이라는 툴을 사용하면 decompress를 해주는 기능이 있었는데 해당 툴이 유료화가 되었다...ㅠㅠ&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #006dd7; font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #ffffff;&quot;&gt;관련 포스팅&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://liveyourit.tistory.com/257&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2021.08.10 - [malware] - 한글 eps, zlib decompress 파이썬 코드&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;어쨌든, 그래서 파이썬 zlib 모듈을 사용해 아래와 같이 zlib 압축을 풀어주었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import zlib 

indata = open(&quot;BIN0003.eps.stream&quot;, &quot;rb&quot;).read() 
outdata = zlib.decompress(indata,-15) 

f = open(&quot;eps_decom&quot;,'wb') 
f.write(outdata) 
f.close()&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;eps, xor 디코딩&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;압축이 해제된 eps 코드를 확인해보면, [ /ar &amp;lt;~~~~&amp;gt; def ~~~ for(~~~) ] 대충 이런 형태이다. ar은 변수 이름이고, def는 함수 정의, for은 반복문인 것 같다(?) 한글을 처음보는 건 아니라서 대략 &lt;b&gt;ar 변수에 선언되어있는 데이터가 xor로 인코딩되어 있는 상태&lt;/b&gt;라는 것은 알고, ar을 뭐랑 xor 해야하지, get 100이면 키 100 짜리를 어디서 가져온다는거지 했는데 그냥 키가 100(0x64)이었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;456&quot; width=&quot;646&quot; height=&quot;378&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Xw8od/btrbLe79R6T/sXLknbEhErAUwUnQ79jVLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xw8od/btrbLe79R6T/sXLknbEhErAUwUnQ79jVLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xw8od/btrbLe79R6T/sXLknbEhErAUwUnQ79jVLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXw8od%2FbtrbLe79R6T%2FsXLknbEhErAUwUnQ79jVLk%2Fimg.png&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;456&quot; width=&quot;646&quot; height=&quot;378&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 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;u&gt;ar 변수에 들어가 있는 인코딩된 데이터와 키 0x64와 xor 디코딩&lt;/u&gt;을 해주는 방법은 2가지가 있다. print문을 추가시킨 다음 직접 실행시키는 방법이 있고 그냥 스크립트를 짜는 방법이다. 일단, 한번 짜놓으면 편할 것 같아서 후자를 선택했다. 첫번째 방법은 나중에 추가하겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #006dd7; font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #ffffff;&quot;&gt;관련포스팅&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://liveyourit.tistory.com/261&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2021.08.11 - [프로그래밍/파이썬] - [파이썬] 바이트 문자열을 바이트배열(byte array)로 변경&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;data = open(&quot;C:\\Users\\leefo\\Desktop\\en_data.txt&quot;,&quot;rt&quot;).read() 
key = 0x64 

arr_data = ' '.join([data[x:x+2] for x in range(0,len(data),2)]) 
b_arr = bytearray.fromhex(arr_data) 

re = '' 
for x in b_arr: 
	tmp = x^key 
	re += chr(tmp) 

f = open(&quot;C:\\Users\\leefo\\Desktop\\de_data.txt&quot;,&quot;w&quot;) 
f.write(re) 
f.close()&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;복호화를 수행해주면, 다시 아래와 같은 코드를 얻는다. label77 변수에 label77에 뭐가 또 잔-뜩 있다ㅎㅎ&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;521&quot; width=&quot;640&quot; height=&quot;402&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTRUJO/btrbJcDDnhy/hfPpyUfYvL0WueNU3PAbd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTRUJO/btrbJcDDnhy/hfPpyUfYvL0WueNU3PAbd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTRUJO/btrbJcDDnhy/hfPpyUfYvL0WueNU3PAbd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTRUJO%2FbtrbJcDDnhy%2FhfPpyUfYvL0WueNU3PAbd0%2Fimg.png&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;521&quot; width=&quot;640&quot; height=&quot;402&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 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;쉘코드 분석&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 데이터는 xor 인코딩된 데이터가 아니라 &lt;b&gt;쉘코드&lt;/b&gt;이다. &lt;u&gt;처음 시작이 nop(9090909090...)인 것으로 유추&lt;/u&gt;해볼 수 있다.(압축된 eps -&amp;gt; (압축해제) -&amp;gt; 압축해제된 eps의 ar 변수에 xor 인코딩된 데이터 -&amp;gt; (디코딩) -&amp;gt; label77에 쉘코드)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;쉘코드를 분석하는 방법에도 여러가지가 있다. 일단 이 포스팅에서는 쉘코드를 exe 형태로 변경해주는 &lt;a href=&quot;http://sandsprite.com/sc2exe/shellcode_2_exe.php&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Shellcode 2 EXE&lt;/a&gt;라는 사이트를 사용해보기로 한다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;451&quot; width=&quot;691&quot; height=&quot;403&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r6EbR/btrb3nSek7N/xcZA3tYytsnxNq2Dkzopk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r6EbR/btrb3nSek7N/xcZA3tYytsnxNq2Dkzopk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r6EbR/btrb3nSek7N/xcZA3tYytsnxNq2Dkzopk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr6EbR%2Fbtrb3nSek7N%2FxcZA3tYytsnxNq2Dkzopk1%2Fimg.png&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;451&quot; width=&quot;691&quot; height=&quot;403&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 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;쉘코드를 실행해보면, 아래와 같이 &lt;b&gt;한번 더 xor 복호화&lt;/b&gt;가 실행된다. 아래 jmp 부분에 bp를 걸고 실행시키면 아랫부분에 코드가 풀리면서 복호화된 코드를 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;303&quot; width=&quot;698&quot; height=&quot;263&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Hu6r1/btrb82sSPgZ/6ke6DdMo7yzK3EvvlE0j6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Hu6r1/btrb82sSPgZ/6ke6DdMo7yzK3EvvlE0j6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Hu6r1/btrb82sSPgZ/6ke6DdMo7yzK3EvvlE0j6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHu6r1%2Fbtrb82sSPgZ%2F6ke6DdMo7yzK3EvvlE0j6K%2Fimg.png&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;303&quot; width=&quot;698&quot; 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 style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;쭉쭉 생각없이 실행시키다 보면.. 아래와 같이 &lt;b&gt;iexplore.exe 문자열&lt;/b&gt;을 확인할 수 있는데 해당 프로세스를 실행시킬 확률이 매우 크므로 &lt;u&gt;CreateProcess API에 bp&lt;/u&gt;를 걸어준다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;1049&quot; data-origin-height=&quot;252&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bP83zI/btrcf70UbpE/ZgikUZ7alckTS9s7TbCJDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bP83zI/btrcf70UbpE/ZgikUZ7alckTS9s7TbCJDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bP83zI/btrcf70UbpE/ZgikUZ7alckTS9s7TbCJDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbP83zI%2Fbtrcf70UbpE%2FZgikUZ7alckTS9s7TbCJDk%2Fimg.png&quot; data-origin-width=&quot;1049&quot; data-origin-height=&quot;252&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 style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래와 같이 CreateProcessA API에 bp가 걸렸고 인자값으로 iexplore.exe가 넘어왔다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;799&quot; data-origin-height=&quot;380&quot; width=&quot;600&quot; height=&quot;285&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5kO8c/btrb820JVaq/iV7OZNEuUOXyaQvzgNWNkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5kO8c/btrb820JVaq/iV7OZNEuUOXyaQvzgNWNkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5kO8c/btrb820JVaq/iV7OZNEuUOXyaQvzgNWNkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5kO8c%2Fbtrb820JVaq%2FiV7OZNEuUOXyaQvzgNWNkk%2Fimg.png&quot; data-origin-width=&quot;799&quot; data-origin-height=&quot;380&quot; width=&quot;600&quot; height=&quot;285&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 style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;iexplore.exe가 자식프로세스로 생성&lt;/b&gt;되었다. 회색은 현재 프로세스의 상태가 &lt;b&gt;일시정지&lt;/b&gt;라는 뜻이다. 일시정지된 상태라는 것만으로 쉘코드가 &lt;u&gt;iexplore.exe에 코드를 쓰거나 dll을 인젝션&lt;/u&gt;할 것이라는 예상을 할 수 있지만, 쉘코드가 엄청 크지는 않기 때문에 일단 f8로 쭉이어서 실행을 해본다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;656&quot; data-origin-height=&quot;64&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EFzK8/btrcc5WEgHf/REUgkYieI3Vc2tzgNKQd7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EFzK8/btrcc5WEgHf/REUgkYieI3Vc2tzgNKQd7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EFzK8/btrcc5WEgHf/REUgkYieI3Vc2tzgNKQd7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEFzK8%2Fbtrcc5WEgHf%2FREUgkYieI3Vc2tzgNKQd7k%2Fimg.png&quot; data-origin-width=&quot;656&quot; data-origin-height=&quot;64&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 style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그러다보면 아래와 같이 코드인젝션을 수행하기 위한 &lt;b&gt;VirtualAllocEx, WriteProcessMemory&lt;/b&gt; 등 여러 전형적 함수들을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;255&quot; width=&quot;677&quot; height=&quot;204&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ck3rWL/btrcebP9azp/QTddWWqvQCGA9ItgHJ1Nd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ck3rWL/btrcebP9azp/QTddWWqvQCGA9ItgHJ1Nd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ck3rWL/btrcebP9azp/QTddWWqvQCGA9ItgHJ1Nd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fck3rWL%2FbtrcebP9azp%2FQTddWWqvQCGA9ItgHJ1Nd0%2Fimg.png&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;255&quot; width=&quot;677&quot; height=&quot;204&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;906&quot; data-origin-height=&quot;229&quot; width=&quot;673&quot; height=&quot;170&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AwpHG/btrci8ZEkYu/s1aeU8Rl6m58YmWnma7VGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AwpHG/btrci8ZEkYu/s1aeU8Rl6m58YmWnma7VGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AwpHG/btrci8ZEkYu/s1aeU8Rl6m58YmWnma7VGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAwpHG%2Fbtrci8ZEkYu%2Fs1aeU8Rl6m58YmWnma7VGk%2Fimg.png&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;229&quot; width=&quot;673&quot; height=&quot;170&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 style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;각 함수들에 bp를 건 후에 WriteProcessMemory API 인자값을 보면, &lt;u&gt;0x4014F3은 쓸 코드가 있는 주소이고 0x60000는 코드를 쓸 주소&lt;/u&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;827&quot; data-origin-height=&quot;327&quot; width=&quot;605&quot; height=&quot;239&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVITeB/btrb6sTj679/PQK9DRdqsohkKVBKAGXse0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVITeB/btrb6sTj679/PQK9DRdqsohkKVBKAGXse0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVITeB/btrb6sTj679/PQK9DRdqsohkKVBKAGXse0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVITeB%2Fbtrb6sTj679%2FPQK9DRdqsohkKVBKAGXse0%2Fimg.png&quot; data-origin-width=&quot;827&quot; data-origin-height=&quot;327&quot; width=&quot;605&quot; height=&quot;239&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;743&quot; data-origin-height=&quot;235&quot; width=&quot;607&quot; height=&quot;192&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ber3dq/btrb82fqbfq/gl7NTTWj6zmPhE0lky8dXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ber3dq/btrb82fqbfq/gl7NTTWj6zmPhE0lky8dXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ber3dq/btrb82fqbfq/gl7NTTWj6zmPhE0lky8dXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fber3dq%2Fbtrb82fqbfq%2Fgl7NTTWj6zmPhE0lky8dXk%2Fimg.png&quot; data-origin-width=&quot;743&quot; data-origin-height=&quot;235&quot; width=&quot;607&quot; height=&quot;192&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 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Process Hacker를 통해 &lt;b&gt;iexplore.exe의 0x60000 오프셋&lt;/b&gt;을 확인해보면, 현재 메모리가 할당되어 있고 API 실행 후 &lt;u&gt;4014F3에서 확인했던 E8 00 00 00 으로 시작하는 코드가 iexplore.exe의 0x60000에 써진것(코드인젝션)&lt;/u&gt;을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;296&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcNoIJ/btrb9GJCndz/2Ob0CrLF1aMAGS7YZVgas1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcNoIJ/btrb9GJCndz/2Ob0CrLF1aMAGS7YZVgas1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcNoIJ/btrb9GJCndz/2Ob0CrLF1aMAGS7YZVgas1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcNoIJ%2Fbtrb9GJCndz%2F2Ob0CrLF1aMAGS7YZVgas1%2Fimg.png&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;296&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;1178&quot; data-origin-height=&quot;239&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dF3QaS/btrb3ndJpvQ/9wkE9TSw6gudWDgrzqdRVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dF3QaS/btrb3ndJpvQ/9wkE9TSw6gudWDgrzqdRVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dF3QaS/btrb3ndJpvQ/9wkE9TSw6gudWDgrzqdRVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdF3QaS%2Fbtrb3ndJpvQ%2F9wkE9TSw6gudWDgrzqdRVK%2Fimg.png&quot; data-origin-width=&quot;1178&quot; data-origin-height=&quot;239&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 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;인젝션된 코드 분석&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당 코드를 다시 분석해보면, 동적분석 중 &lt;b&gt;C2C서버로 의심해볼만한 url&lt;/b&gt;이 발견된다. 해당 서버가 닫혀있어 더이상의 동적분석은 불가능하지만, 해당 서버로부터 &lt;u&gt;down.php를 다운받아 추가적인 악성행위를 수행&lt;/u&gt;할 것으로 예상할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;210&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MBMVo/btrb8hDWad6/KaZB0xuryYYscqjKyrY8ik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MBMVo/btrb8hDWad6/KaZB0xuryYYscqjKyrY8ik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MBMVo/btrb8hDWad6/KaZB0xuryYYscqjKyrY8ik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMBMVo%2Fbtrb8hDWad6%2FKaZB0xuryYYscqjKyrY8ik%2Fimg.png&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;210&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 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;특징 및 결론 정리&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. eps에 악성코드가 숨겨져 있고, xor로 복호화되어 있음&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. xor 복호화 키값은 0x64로 복호화된 eps 코드에서 다시 쉘코드가 존재&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3. 쉘코드는 &lt;b&gt;iexplorer.exe에 코드인젝션&lt;/b&gt;을 수행함&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4. 해당 코드는 악성 서버(itoassn.mireene.co.kr)에서 down.php를 다운받음&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;참고자료&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[1] https://m.blog.naver.com/kgg1959/222037263345 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[2] https://app.any.run/tasks/b4381901-3a3b-4055-8304-f0870a8d3c7c/ &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[3] https://www.notion.so/2-hwp-cbc93af950d745c48dc15d9b355ac6f4&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>malware</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/258</guid>
      <comments>https://liveyourit.tistory.com/258#entry258comment</comments>
      <pubDate>Tue, 10 Aug 2021 22:21:25 +0900</pubDate>
    </item>
    <item>
      <title>한글 eps, zlib decompress 파이썬 코드</title>
      <link>https://liveyourit.tistory.com/257</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;한글 문서형 악성코드는 한글의 eps 취약점을 사용하는 경우가 많다. eps는 BinData 영역에 .eps 형태로 있는데 &lt;b&gt;zlib로 압축되어 있는 상태&lt;/b&gt;이다. 한글 스토리지 뷰어? 툴중에 가장 많이 쓰이는게 아무래도 누리랩의 HwpScan인데 이게 유료화로 전환이 되었다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;541&quot; width=&quot;448&quot; height=&quot;395&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vZPAc/btrbOsx5XCH/OrtIWlhLYJPwXqKMkuNAu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vZPAc/btrbOsx5XCH/OrtIWlhLYJPwXqKMkuNAu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vZPAc/btrbOsx5XCH/OrtIWlhLYJPwXqKMkuNAu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvZPAc%2FbtrbOsx5XCH%2FOrtIWlhLYJPwXqKMkuNAu1%2Fimg.png&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;541&quot; width=&quot;448&quot; height=&quot;395&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;HwpScan을 사용하면 eps 부분에 대해 zlib 압축을 해제해주는 기능이 포함되어 있어 편한데 사용할 수 없게 되어 파이썬으로 수동 압축해제를 시도하게 됐다.&lt;b&gt; 정말정말 간단&lt;/b&gt;한데 에러 해결에 시간이 좀 걸렸기 때문에 여기에 정리해 놓는다!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;eps stream 얻기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;HwpScan 툴을 대신해, SSView 툴을 사용했다. BinData 영역 중 원하는 데이터 부분에 오른쪽 마우스를 클릭하면 &lt;b&gt;'Save Stream'&lt;/b&gt; 기능이 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;443&quot; width=&quot;806&quot; height=&quot;346&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cljWBP/btrbIciUPTX/T8MvCW6dLUkQWiy7AsnVhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cljWBP/btrbIciUPTX/T8MvCW6dLUkQWiy7AsnVhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cljWBP/btrbIciUPTX/T8MvCW6dLUkQWiy7AsnVhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcljWBP%2FbtrbIciUPTX%2FT8MvCW6dLUkQWiy7AsnVhK%2Fimg.png&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;443&quot; width=&quot;806&quot; height=&quot;346&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;한글 eps, zlib 압축해제 코드&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;코드는 정말 간단하다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;zlib를 import 해주고 zlib.decompress([bdata])를 해주면 된다. 하지만 이렇게만 하면 아래와 같은 에러가 발생한다. (zlib.error: Error -3 while decompressing data: incorrect header check)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;113&quot; width=&quot;712&quot; height=&quot;108&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBEwuj/btrbGBpLecu/UOvhLAYiUiOkUTCPRCrWQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBEwuj/btrbGBpLecu/UOvhLAYiUiOkUTCPRCrWQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBEwuj/btrbGBpLecu/UOvhLAYiUiOkUTCPRCrWQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBEwuj%2FbtrbGBpLecu%2FUOvhLAYiUiOkUTCPRCrWQ0%2Fimg.png&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;113&quot; width=&quot;712&quot; height=&quot;108&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;따라서 아래와 같이, decompress 함수 두번째 인자에 -15를 넣어주자. &lt;s&gt;나도 이게 정확히 어떤 의미인지는...;;;&lt;/s&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;아래와 같이 압축해제된 eps 코드를 확인할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1628597706117&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import zlib

indata = open(&quot;BIN0003.eps.stream&quot;, &quot;rb&quot;).read()
outdata = zlib.decompress(indata,-15)
f = open(&quot;eps_decom&quot;,'wb')
f.write(outdata)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;351&quot; width=&quot;705&quot; height=&quot;318&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEpGBU/btrbQ86JJGi/DdOTBkeeaO05UQoCKw6Qo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEpGBU/btrbQ86JJGi/DdOTBkeeaO05UQoCKw6Qo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEpGBU/btrbQ86JJGi/DdOTBkeeaO05UQoCKw6Qo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEpGBU%2FbtrbQ86JJGi%2FDdOTBkeeaO05UQoCKw6Qo1%2Fimg.png&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;351&quot; width=&quot;705&quot; height=&quot;318&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>malware</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/257</guid>
      <comments>https://liveyourit.tistory.com/257#entry257comment</comments>
      <pubDate>Tue, 10 Aug 2021 21:18:48 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] 문자열 두 글자씩 띄우기</title>
      <link>https://liveyourit.tistory.com/255</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;&quot;&gt;문자열 두 글자씩 띄우기&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;어떤 값을 얻었는데, 다 붙어있어서 &lt;b&gt;바이트 단위로 끊고 싶을 때&lt;/b&gt;가 있다. 꽤나 자주 사용하는 기능인데도 항상 새롭게 구글링을 했었기 때문에 이참에 여기 정리해 놓는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1628426254793&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;f = open(&quot;C:\\Users\\leefo\\Downloads\\test.txt&quot;,&quot;r&quot;)
txt = f.read()
f.close()

# 리스트 형태로 반환
re = [txt[i:i+2] for i in range(0, len(txt), 2)]
print(re)

# join 사용
re = ' '.join([txt[i:i+2] for i in range(0, len(txt), 2)])
print(re)

f = open(&quot;C:\\Users\\leefo\\Downloads\\test_re.txt&quot;,&quot;w&quot;)
f.write(re)
f.close()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;결과값&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래와 같은 hex 값이 있다고 치자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;206&quot; width=&quot;581&quot; height=&quot;166&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGGKzk/btrbqvjcCBU/drwsAKasE94tlGHBmI8KrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGGKzk/btrbqvjcCBU/drwsAKasE94tlGHBmI8KrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGGKzk/btrbqvjcCBU/drwsAKasE94tlGHBmI8KrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGGKzk%2FbtrbqvjcCBU%2FdrwsAKasE94tlGHBmI8KrK%2Fimg.png&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;206&quot; width=&quot;581&quot; height=&quot;166&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래와 같이 만들고, HxD에 그대로 붙여넣어서 값을 확인하면 편하다. 문자열인지 코드인지 PE파일인지 등등을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;565&quot; width=&quot;655&quot; height=&quot;408&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJRxgX/btrbyG4r94r/ikyOomtTz5XaMKlfjs0pgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJRxgX/btrbyG4r94r/ikyOomtTz5XaMKlfjs0pgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJRxgX/btrbyG4r94r/ikyOomtTz5XaMKlfjs0pgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJRxgX%2FbtrbyG4r94r%2FikyOomtTz5XaMKlfjs0pgK%2Fimg.png&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;565&quot; width=&quot;655&quot; height=&quot;408&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/파이썬</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/255</guid>
      <comments>https://liveyourit.tistory.com/255#entry255comment</comments>
      <pubDate>Sun, 8 Aug 2021 21:43:54 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 2020 NCS 기반 개정 3회 실기 시험 합격 후기</title>
      <link>https://liveyourit.tistory.com/254</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;NCS 기반 개정된 실기 준비와 시험 후기가 쓸데없이 상세하니 읽기 힘드신 분들은 포스팅 맨 하단의 요약을 확인해주시기 바랍니다..ㅎㅎ&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2020 정보처리기사, NCS 기반 개정 3회 실기 준비&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;NCS 기반 개정 필기 1,2회차를 합격하고 나서 실기 2회차를 봤어야 했는데 도저히 공부할 시간이 나지 않아서 패스하고 3회차를 준비했다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;NCS 개정 전후 차이는 아래와 같은데 딱봐도 확연한 차이를 느낄 수 있다. &lt;b&gt;총 12과목으로 세분화&lt;/b&gt;되었기 때문에 &lt;u&gt;하루에 1~2개 과목씩 보는 방식으로 하루에 3시간 정도씩 총 2주간 준비&lt;/u&gt;했다. 과목당 나름대로 정리한 요약본은 짬짬히 시간날 때마다 봤고, 시험 3일 전부터는 기출문제와 수제비 카페에 올라오는 데일리 문제를 풀었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #000000; color: #ffffff;&quot;&gt;개정전&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. 업무프로세스 실무응용&amp;nbsp; / 2. 데이터베이스 실무응용&amp;nbsp; / 3.&amp;nbsp;실무&amp;nbsp;알고리즘&amp;nbsp;응용 &lt;br /&gt;4. 신기술동향 및 IT서비스&amp;nbsp; / 5.&amp;nbsp;전산영어&amp;nbsp;실무 &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #ffffff; background-color: #000000;&quot;&gt;개정후&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1.&amp;nbsp;요구사항&amp;nbsp;확인&lt;span&gt; / &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2.&amp;nbsp;데이터입출력&amp;nbsp;구현&lt;span&gt; / &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3.&amp;nbsp;통합&amp;nbsp;구현&lt;span&gt; / &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;4.&amp;nbsp;서버프로그램&amp;nbsp;구현&lt;span&gt; / &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;5.&amp;nbsp;인터페이스&amp;nbsp;구현&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;6.&amp;nbsp;화면설계&lt;span&gt; / &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;7.&amp;nbsp;애플리케이션&amp;nbsp;테스트&amp;nbsp;관리&lt;span&gt; / &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;8.&amp;nbsp;SQL&amp;nbsp;응용&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;9.&amp;nbsp;소프트웨어&amp;nbsp;개발&amp;nbsp;보안&amp;nbsp;구축&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;10.&amp;nbsp;프로그래밍&amp;nbsp;언어&amp;nbsp;활용&lt;span&gt; / &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;11.&amp;nbsp;응용SW기초&amp;nbsp;기술&amp;nbsp;활용&lt;span&gt; / &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;12.&amp;nbsp;제품&amp;nbsp;소프트웨어&amp;nbsp;패키징&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;자격증 시험이라는게 포맷이 있는 것이고 필기 1,2회가 어느정도 바뀌긴 했지만 무난했기 때문에 실기도 뭐 비슷하려니 하고 사실 별로 크게 걱정을 안했다. 그리고 중간에 궁금해서 책에 실려있는 1회차 기출문제를 풀었는데 너무 쉬워서 더 걱정을 안하게 됐던 것도 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그러다가 시험 3일전에 실기 2회차 기출문제를 풀었는데.... What the...? 채점 결과 50점이었고 진짜 어려워서 (어렵다는게 뭔가 심화적으로 어렵다기보단 너무 &lt;b&gt;지엽적인 느낌&lt;/b&gt;) 당황하고, 카페 스텝분들이 올려주시는 문제들이랑 모의고사들을 엄청나게 풀기 시작했다. 1,2회만으로 3회가 어떻게 날 것이라고 예상하긴 힘든것도 있었는데 애초에 1회랑 2회랑 문제 형식이랑 느낌 자체가 너무 극명했고 &lt;u&gt;책만 봤다고 쳤을 때 맞출 수 있는 문제 수에 한계&lt;/u&gt;가 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;어쨌든 그렇게 2주가 흐르고.. 공부 내용의 홍수속에서 허우적거리다가 공부한 내용을 100% 확률로 맞추자는 생각으로 시험 당일 아침에 일찍 일어나 그동안 정리했던 35페이지 짜리 요약본을 다시 정독했다. 다시 보니까 토할 것 같다...&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;669&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X58pq/btqOdNTFaI0/N7qdeUy8F93aqNEMBSFMH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X58pq/btqOdNTFaI0/N7qdeUy8F93aqNEMBSFMH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X58pq/btqOdNTFaI0/N7qdeUy8F93aqNEMBSFMH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX58pq%2FbtqOdNTFaI0%2FN7qdeUy8F93aqNEMBSFMH1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;669&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.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 style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2020 정보처리기사, NCS 기반 개정 3회 실기 시험 후기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;확실히 개정 전 실기는 개껌이었다면, 후의 실기는 훨~씬 어렵다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시험지를 처음 딱 받고 첫페이지를 보고 나서 든 생각은, '아... 시험장 없어서 강릉까지 왔는데 완전 헛걸음했네 망했다 내시간 내돈' 이었다. 첫페이지만 그렇겠지 하고 뒤로 넘기는데 이건 백퍼 불합격이라는 확신이 서기까지 했다. 진짜 그 많은 범위에서 이런걸 낸다고....?ㅎㅎ...이런느낌... 그리고 진짜 거짓말 안하고 사람들이 전부 시험지 뒤적거리면서 한숨을 내뱉었다. 나만 거지같은 기분이 아니라는 묘한 동질감에 안심이 되기까지 했다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;약술형이 너무 많았고 많은 약술형 중에서도 1번문제가 리팩토링의 목적이어서 어처구니가 없었다. 그래도 이건 양호했던게 '헝가리안 표기법'도 있었다. 게다가 코딩이나 SQL 문제를 제외한 단답형이 무슨 '기술적 은어'라던가... &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그래도 2주간 준비한게 있는데 대충볼 수는 없었다. &lt;b&gt;일단 확실한 것부터 풀기 시작&lt;/b&gt;했는데 아래 작성한 문제들이 확실히 맞출 수 있는 문제였고 실제로 맞았다. 시험을 칠때는 &lt;u&gt;아래 문제들이 확실히 맞았다는 가정 하에 9문제, 45점이므로 3문제를 더 맞추어야&lt;/u&gt; 했다. ICMP 문제는 책에 따로 설명되었던 내용은 아니었지만 정보보안기사 준비했을 때 공부했던 기억이 남아있어서 맞출 수 있었다. 코드 문제는 무난했지만 그래도 개정 전에 비해선 함정?같은 것들이 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;2번&lt;/b&gt; : C언어 코드문제 (정답 : 0, 맞음)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;3번&lt;/b&gt; : 다익스트라 알고리즘을 사용하는 대규모 네트워크에 적용하는 라우팅 프로토콜 (정답 : OSPF, 맞음)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;6번&lt;/b&gt; : IP 패킷 처리 시 발생되는 문제 알려주는 프로토콜 (정답 : ICMP, 맞음)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;9번&lt;/b&gt; : 튜플 삭제 SQL문 작성 (정답 : &lt;span style=&quot;color: #000000;&quot;&gt;DELETE FROM 학생 WHERE 이름=&amp;lsquo;민수&amp;rsquo;;, 맞음)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;12번&lt;/b&gt; : &lt;span style=&quot;color: #000000;&quot;&gt;동치 분할 테스트, 경계값 테스트 등의 종류가 있는 테스트 종류 (정답 : 블랙박스 테스트, 맞음)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;14번&lt;/b&gt; : C언어 코드문제 (정답 : 234, 맞음)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;15번&lt;/b&gt; : 자바 코드문제 (정답 : 30, 맞음)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;17번&lt;/b&gt; : EAI 유형 단답형 문제 (정답 : Point-to-Point, Hub&amp;amp;Spoke, 맞음)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;18번&lt;/b&gt; : UI 직관성 약술형 문제 (정답 : 누구나 쉽게 이해하고 사용할 수 있어야 함, 맞음)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 다음은 100% 확실하진 않치만 &lt;b&gt;맞을 확률이 어느정도 높은 문제&lt;/b&gt;를 풀었다. 8번은 SQL문 공부하면서 자세히 안나오겠지하고 안넘기고 자세히 봐서 맞출 수 있었다. 천만다행이다. 그리고 10번 DB에 칼럼 추가하는 ALTER문 문제는, 옛날에 웹서버 만들어서 이것저것 할 때 DB 구조 여러번 바꿨던게 겨우 기억이 나서 적었는데 다행히 맞았다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1번&lt;/b&gt; : 리팩토링의 목적 약술형 (맞았는지 모름)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;5번&lt;/b&gt; : 형상통제 약술형 (맞았는지 모름)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;8번&lt;/b&gt; : SQL, MIN/MAX/AVG/GROUP BY/HAVING 사용문제 (정답 : &lt;span style=&quot;color: #000000;&quot;&gt;SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수 FROM 성적 GROUP BY 과목이름 HAVING AVG(점수) &amp;gt;= 90;, 맞음)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;20번&lt;/b&gt; : DB에 칼럼 추가하는 SQL문 괄호 채우기 (정답 : &lt;span style=&quot;color: #000000;&quot;&gt;ALTER TABLE ~ ADD ~, 맞음)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그리고 밑에는 버렸던 문제이고 이외에도 약술형 2문제와 자바코드 문제 1개가 더 있는데 확실치 않았다. 그러니까 정리하자면 확실한 9문제가 있고 맞을 확률이 어느정도 높은 4문제와 확실치는 않치만 풀긴 푼 3문제 중에서 3개를 맞으면 합격이었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4번&lt;b&gt; : &lt;/b&gt;톰마릴 기술적 은어 (정답 : 프로토콜)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;7번 : 분기 커버리지 경로 작성하는 문제&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;8번 : 릴레이션 관계대수 문제 (정답 : &lt;span style=&quot;color: #000000;&quot;&gt;&amp;divide;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;11번 : 헝가리안 표기법 약술형&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시험이 끝나고 나서 가채점 결과 8/20번을 맞아서 &lt;b&gt;확실히 맞은 문제가 11문제&lt;/b&gt;가 됐고 남&lt;u&gt;은 약술형 4개 중에 한개만 맞으면 합격인 상황&lt;/u&gt;이었다. 사람들 정답을 비교해본 결과 리팩토링과 형상통제 약술형은 맞을 확률이 높아보여서, 하나는 맞겠지 하는 생각으로 맘편히 결과를 기다릴 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2020 정보처리기사, NCS 기반 개정 3회 실기 시험 결과 및 느낀점&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;떨어지면 다시 공부해야 한다고 생각하니 끔찍했는데, 합격해서 다행이었다 :) 이번 &lt;b&gt;3회차 실기 합격률은 18%&lt;/b&gt;라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8GIAW/btqOcQXH15M/oFQdpdYcifkn5kkOsRk4Lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8GIAW/btqOcQXH15M/oFQdpdYcifkn5kkOsRk4Lk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8GIAW/btqOcQXH15M/oFQdpdYcifkn5kkOsRk4Lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8GIAW%2FbtqOcQXH15M%2FoFQdpdYcifkn5kkOsRk4Lk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.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&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이번 시험 문제 구성을 살펴보면&lt;b&gt; 코드문제가 4개&lt;/b&gt;, &lt;b&gt;SQL 문제가 3문제&lt;/b&gt;, &lt;b&gt;약술형이 5문제&lt;/b&gt;, &lt;u&gt;책기반으로 공부를 했다면 충분히 맞을 수 있는 문제가 (주관적으로) 4개 정도&lt;/u&gt;이다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4회차에 시험 구성이 또 어떻게 바뀔지 예상할 수는 없으나 일단 3회차로만 보면, 카페 여론도 그렇고, 안전한 합격을 위해선 &lt;b&gt;코드문제와 SQL문제, 충분히 맞을 수 있는 문제를 다 맞춰야 한다. &lt;/b&gt;그리고 약술형에서 1~2개 이상 맞는 것을 기대하거나 평소 알고있던 지식으로 정답 수를 높이는 방식이어야 합격에 근접할 수 있다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;나의 경우는 코드문제, SQL문제 7개 중 하나를 틀렸지만, 다행히도 책기반으로 풀 수 있는 문제 4개를 틀리지 않았고 여기에 평소에 그냥 알고있던 지식으로 푼 문제 (ICMP) 하나와 약술형에서 2개정도 추가로 맞아서 합격을 할 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;요약&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;헝가리안 표기법, 기술적 은어같은 문제처럼 버리는 문제가 나옴&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;너무 지엽적인 문제가 많음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;코드 문제는 무난했으나 그래도 개정 전 문제에 비해선 까다로운 문제가 많았음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그동안은 SQL 문제가 간단한 SELECT문을 작성하거나 괄호를 채우는 정도의 문제가 나왔다면 3회차에는 SQL 구문이 꽤나 어렵게 출제됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;난해한 문제가 꽤나 있어서 안전하게 합격하려면 코드 문제와 SQL 문제는 무조건 다 맞춰야 함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;확실히 기출문제 몇번 돌리면 쉽게 합격할 수 있었던 그동안의 시험과는 달라짐&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3회차 실기 합격률은 18%&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보처리기사</category>
      <category>정보처리기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/254</guid>
      <comments>https://liveyourit.tistory.com/254#entry254comment</comments>
      <pubDate>Thu, 26 Nov 2020 00:41:05 +0900</pubDate>
    </item>
    <item>
      <title>[네트워크] 프록시 서버란? 원리와 사용 목적</title>
      <link>https://liveyourit.tistory.com/251</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프록시(Proxy) 서버란?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프록시 서버란 클라이언트가 자신을 거쳐 다른 네트워크에 접속할 수 있도록 &lt;b&gt;중간에서 대리해주는 서버&lt;/b&gt;를 말한다. 서버와 클라이언트 사이에서 대리로 통신을 수행해주는 것을 프록시라고 하고 그 기능을 하는 서버를 프록시 서버라 부르게 되는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;591&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/29Iv3/btqFbBNOp69/UBW8iaC30tfkV2kpAE4PWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/29Iv3/btqFbBNOp69/UBW8iaC30tfkV2kpAE4PWK/img.png&quot; data-alt=&quot;프록시 서버 (출처: 구글 무료이미지 검색, 위키피디아)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/29Iv3/btqFbBNOp69/UBW8iaC30tfkV2kpAE4PWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F29Iv3%2FbtqFbBNOp69%2FUBW8iaC30tfkV2kpAE4PWK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;591&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프록시 서버 (출처: 구글 무료이미지 검색, 위키피디아)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;즉, 프록시 서버는 서버와 클라이언트 사이에서 요청과 응답을 처리해주게 되는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;클라이언트에서 프록시 서버로 데이터 전송&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프록시 서버에서 다시 웹 서버로 웹 요청&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;웹 서버에서 프록시 서버로 웹 응답&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프록시 서버에서 클라이언트로 데이터 전송&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;버프스위트, 파로스, 피들러와 같은&lt;b&gt; 웹 프록시 툴&lt;/b&gt;을 사용해본 사람이라면 아마 대부분 웹 요청이나 응답 값을 중간에 가로채기 위해서 사용했을 것이다. 해당 툴에서 사용하는 &lt;u&gt;웹 프록시 서버 주소와 포트 설정&lt;/u&gt;을 해주면 브라우저에서 보낸 웹 요청이 프록시 서버를 경유하게되기 때문에 중간에 패킷을 가로챌 수 있게 되는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;예를들어 버프스위트 툴의 경우 아래와 같이 프록시 서버 포트로 8080포트를 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;661&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjPXrr/btqFcu1KmSv/7p1buK7o0VaAkCfA4Y3CCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjPXrr/btqFcu1KmSv/7p1buK7o0VaAkCfA4Y3CCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjPXrr/btqFcu1KmSv/7p1buK7o0VaAkCfA4Y3CCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjPXrr%2FbtqFcu1KmSv%2F7p1buK7o0VaAkCfA4Y3CCk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;661&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그리고 브라우저(클라이언트)에서 해당 주소(localhost)와 8080 포트를 설정해주게 되면 브라우저에서 보내는 패킷은 전부 8080 포트를 경유하게 되기 때문에 원래 서버로 가야 할 패킷을 중간에 가로챌 수 있게 되는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;494&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eM82DB/btqFagj2dc5/gIFAjWjYZfY4oaXUFEzYr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eM82DB/btqFagj2dc5/gIFAjWjYZfY4oaXUFEzYr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eM82DB/btqFagj2dc5/gIFAjWjYZfY4oaXUFEzYr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeM82DB%2FbtqFagj2dc5%2FgIFAjWjYZfY4oaXUFEzYr1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;494&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프록시 서버의 사용 목적(이유)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프록시 서버를 사용하는 목적과 이유에는 여러가지가 있을 수 있는데 대표적으로 아래와 같은 것들이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;첫번째는 &lt;b&gt;캐시 데이터&lt;/b&gt;를 사용하기 위함이다. 프록시 서버 중 일부는 프록시 서버에 요청된 내용을 캐시를 사용해 저장해둔다. 그러면 캐시에 저장되어있는 내용에 대한 재요청은 서버에 따로 접속할 필요가 없이 저장된 내용을 그대로 돌려주면 되기 때무네 전송 시간을 절약할 수 있고 외부 트래픽을 줄임으로써 네트워크 병목 현상도 방지할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;두번째는&lt;b&gt; 보안 목적&lt;/b&gt;이다. 프록시 서버가 중간에 경유되게 되면 IP를 숨기는 것이 가능하기 때문이다. 또한 프록시 서버를 방화벽으로 사용하기도 한다(프록시 방화벽).&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;639&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSBELv/btqFbBUBnC5/AwgyMZCzM0CisqZtRdYDPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSBELv/btqFbBUBnC5/AwgyMZCzM0CisqZtRdYDPK/img.png&quot; data-alt=&quot;프록시 방화벽 (출처: 구글 무료이미지 검색)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSBELv/btqFbBUBnC5/AwgyMZCzM0CisqZtRdYDPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSBELv%2FbtqFbBUBnC5%2FAwgyMZCzM0CisqZtRdYDPK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;639&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프록시 방화벽 (출처: 구글 무료이미지 검색)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;세번째는&amp;nbsp;&lt;/span&gt;&lt;b&gt;접속 우회&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이다. 간혹 한국에서는 접속이 제한이 되는 사이트가 있다. IP를 검사해 한국에서의 접속임을 감지하기 때문인데 이런 경우 프록시 서버를 사용하면 접속을 다른나라로 우회할 수 있게 된다. 우회에 사용할 서버 주소와 포트를 구한 후 '인터넷옵션&amp;gt;연결&amp;gt;LAN설정&amp;gt;프록시서버'에서 서버 주소와 포트를 설정해주면 설정해준 서버에서 접속한 것처럼 속일 수 있기 때문에 접속 제한을 우회할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size18&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;참고자료&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[1] 위키백과, 프록시 서버&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[2] 안경잡이개발자, 웹 프록시 (Proxy)의 개념과 도구 (SwitchyOmega)&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>네트워크</category>
      <category>프록시</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/251</guid>
      <comments>https://liveyourit.tistory.com/251#entry251comment</comments>
      <pubDate>Sat, 27 Jun 2020 22:35:46 +0900</pubDate>
    </item>
    <item>
      <title>[웹해킹] Webhacking.kr  Challenge old 3번 문제 풀이</title>
      <link>https://liveyourit.tistory.com/250</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Webhacking.kr Challange old 3번 문제 풀이&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Nonogram이라는 게임으로 시작하는 문제이다. 아래와 같이 블록을 선택하면 검정색으로 변하는 것을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;484&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zhnSl/btqFbCk7Gmr/qzt9usLkMIzHRRF92Vi51K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zhnSl/btqFbCk7Gmr/qzt9usLkMIzHRRF92Vi51K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zhnSl/btqFbCk7Gmr/qzt9usLkMIzHRRF92Vi51K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzhnSl%2FbtqFbCk7Gmr%2Fqzt9usLkMIzHRRF92Vi51K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;484&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;solved 버튼을 누르면 get 변수로 _1, _2, ... 값들이 넘어가는 것을 볼 수 있는데 첫번째 칸이 칠해졌으면 _1=1이되고 칠해지지 않았으면 _1=0 이 되는 방식이다. 처음에는 여기서 SQL 인젝션을 해야한다고 생각해서 URL 창에 인젝션을 계속 했는데 되지 않아서 그냥 게임을 풀어주었다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;webhacking.kr/challenge/web-03/index.php?_1=1&amp;amp;_2=0&amp;amp;_3=1&amp;amp;_4=0&amp;amp;_5=0&amp;amp;_6=0&amp;amp;_7=0&amp;amp;_8=0&amp;amp;_9=0&amp;amp;_10=0&amp;amp;_11=0&amp;amp;_12=0&amp;amp;_13=0&amp;amp;_14=0&amp;amp;_15=0&amp;amp;_16=0&amp;amp;_17=0&amp;amp;_18=0&amp;amp;_19=0&amp;amp;_20=0&amp;amp;_21=0&amp;amp;_22=0&amp;amp;_23=0&amp;amp;_24=0&amp;amp;_25=0&amp;amp;_answer=1010000000000000000000000 &amp;nbsp;||&amp;nbsp;true&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;webhacking.kr/challenge/web-03/index.php?_1=1&amp;amp;_2=0&amp;amp;_3=1&amp;amp;_4=0&amp;amp;_5=0&amp;amp;_6=0&amp;amp;_7=0&amp;amp;_8=0&amp;amp;_9=0&amp;amp;_10=0&amp;amp;_11=0&amp;amp;_12=0&amp;amp;_13=0&amp;amp;_14=0&amp;amp;_15=0&amp;amp;_16=0&amp;amp;_17=0&amp;amp;_18=0&amp;amp;_19=0&amp;amp;_20=0&amp;amp;_21=0&amp;amp;_22=0&amp;amp;_23=0&amp;amp;_24=0&amp;amp;_25=0&amp;amp;_answer=1010000000000000000000000&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt; || 1=1&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;webhacking.kr/challenge/web-03/index.php?_1=1&amp;amp;_2=0&amp;amp;_3=1&amp;amp;_4=0&amp;amp;_5=0&amp;amp;_6=0&amp;amp;_7=0&amp;amp;_8=0&amp;amp;_9=0&amp;amp;_10=0&amp;amp;_11=0&amp;amp;_12=0&amp;amp;_13=0&amp;amp;_14=0&amp;amp;_15=0&amp;amp;_16=0&amp;amp;_17=0&amp;amp;_18=0&amp;amp;_19=0&amp;amp;_20=0&amp;amp;_21=0&amp;amp;_22=0&amp;amp;_23=0&amp;amp;_24=0&amp;amp;_25=0&amp;amp;_answer=1010000000000000000000000&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;|| 1%3D1&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;717&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mrScu/btqE9K6byyZ/seJd1rzJ7U3M3LRDYSL7xK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mrScu/btqE9K6byyZ/seJd1rzJ7U3M3LRDYSL7xK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mrScu/btqE9K6byyZ/seJd1rzJ7U3M3LRDYSL7xK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmrScu%2FbtqE9K6byyZ%2FseJd1rzJ7U3M3LRDYSL7xK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;717&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;정답은 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;511&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lttge/btqE9JMW8nc/jK7O95tk5EQnIUeK8KjJk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lttge/btqE9JMW8nc/jK7O95tk5EQnIUeK8KjJk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lttge/btqE9JMW8nc/jK7O95tk5EQnIUeK8KjJk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flttge%2FbtqE9JMW8nc%2FjK7O95tk5EQnIUeK8KjJk1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;511&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;노노그램을 풀고나면 아래와 같이 Clear! 라는 문구와 함께 name을 입력하라는 입력창이 보이게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;666&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cx0DPW/btqFaNVqJfA/bn9YGPLKQhZhieQoRksvHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cx0DPW/btqFaNVqJfA/bn9YGPLKQhZhieQoRksvHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cx0DPW/btqFaNVqJfA/bn9YGPLKQhZhieQoRksvHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcx0DPW%2FbtqFaNVqJfA%2Fbn9YGPLKQhZhieQoRksvHk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;666&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아무값이나 넘겨보면 아래와 같이 로깅이된다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;623&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WyO6g/btqFaDFybNY/vWD3hDeL9Za4QLdGpyUXEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WyO6g/btqFaDFybNY/vWD3hDeL9Za4QLdGpyUXEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WyO6g/btqFaDFybNY/vWD3hDeL9Za4QLdGpyUXEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWyO6g%2FbtqFaDFybNY%2FvWD3hDeL9Za4QLdGpyUXEk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;623&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여기서 name 값에 이것저것 인젝션을 계속 수행해보는데 로깅만 계속 남을 뿐 뭔가 나오는게 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;629&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbgVt5/btqFaCzROLN/axscDkbtPKzm3Dg7dte51K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbgVt5/btqFaCzROLN/axscDkbtPKzm3Dg7dte51K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbgVt5/btqFaCzROLN/axscDkbtPKzm3Dg7dte51K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbgVt5%2FbtqFaCzROLN%2FaxscDkbtPKzm3Dg7dte51K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;629&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;name 외에 다른 POST 변수가 있는지 버프 스위트를 사용해 패킷을 잡아본다. 앞에서 풀어주었던 &lt;b&gt;answer 값&lt;/b&gt;이 함께 넘어간다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;623&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G0aVM/btqFbUsjXci/LEAsVAVis9y0dl2XnYpby1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G0aVM/btqFbUsjXci/LEAsVAVis9y0dl2XnYpby1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G0aVM/btqFbUsjXci/LEAsVAVis9y0dl2XnYpby1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG0aVM%2FbtqFbUsjXci%2FLEAsVAVis9y0dl2XnYpby1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;623&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;따라서 이번엔 answer 값에 인젝션을 시도해본다. 이것저것 전부 시도해보다 보면&lt;b&gt; [ ' or 1=1-- ] 에서 query error&lt;/b&gt;가 뜨는데 쿼리 에러가 떴다는 건 어쨌든 인젝션을 해준 것이 무시되거나 필터링되지 않고 실제로 쿼리가 행해진 후 정상적이지 않아 에러가 난 것이므로 answer 부분에 인젝션을 해주는 것이 맞는 것으로 추측할 수 있다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하지만 왜 에러가 뜨는지 모르겠어서 다른 분의 풀이를 찾아보니 &lt;b&gt;-- 뒤에 공백이 필요&lt;/b&gt;하다고 한다. 정확한 이유는 모르겠고 추후에 이유를 알게되면 추가해보려 한다. &lt;s&gt;그건 그렇고 버프 스위트 공식 홈에서 커뮤니티 버전을 다운로드한 것인데 왜이렇게 저화질인지 모르겠다ㅠㅠ&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;541&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbLZu5/btqFaT2cHc9/NB38oNNMbzXV3FbTfMhsWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbLZu5/btqFaT2cHc9/NB38oNNMbzXV3FbTfMhsWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbLZu5/btqFaT2cHc9/NB38oNNMbzXV3FbTfMhsWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbLZu5%2FbtqFaT2cHc9%2FNB38oNNMbzXV3FbTfMhsWK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;541&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;쿼리 에러를 해결해주면 아래와 같이 solved 창을 볼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;695&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v1UhR/btqFafSqsMh/SdVWB8xV50EjBIcWJBCqK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v1UhR/btqFafSqsMh/SdVWB8xV50EjBIcWJBCqK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v1UhR/btqFafSqsMh/SdVWB8xV50EjBIcWJBCqK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv1UhR%2FbtqFafSqsMh%2FSdVWB8xV50EjBIcWJBCqK1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;695&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;or 1=1 로 인해 쿼리문이 참&lt;/b&gt;이 되었고 &lt;b&gt;뒤의 --로 인해 뒷부분 id=aaaa 가 무시&lt;/b&gt;가 되어버리게 되기 때문에 다른 로깅 정보도 볼 수 있게 되었다. &lt;u&gt;admin의 answer에 우리가 보던 answer 값이 아닌 새로운 값&lt;/u&gt;이 나와있다. 해당 값을 인증해주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;625&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bovLO8/btqE9J0yNZw/kvgEwJZJoBQ5WIYZiaM3TK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bovLO8/btqE9J0yNZw/kvgEwJZJoBQ5WIYZiaM3TK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bovLO8/btqE9J0yNZw/kvgEwJZJoBQ5WIYZiaM3TK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbovLO8%2FbtqE9J0yNZw%2FkvgEwJZJoBQ5WIYZiaM3TK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;625&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.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&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹해킹/webhacking.kr</category>
      <category>웹해킹</category>
      <category>인젝션</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/250</guid>
      <comments>https://liveyourit.tistory.com/250#entry250comment</comments>
      <pubDate>Fri, 26 Jun 2020 23:47:13 +0900</pubDate>
    </item>
    <item>
      <title>[웹해킹] Webhacking.kr  Challenge old 1번 문제 풀이</title>
      <link>https://liveyourit.tistory.com/249</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;옛날에 webhacking.kr 정말 열심히 풀었던 기억이 난다. 오늘은 또 어떤 포스팅을 올려야 할지 고민하던 참에 생각나서 페이지를 들어가봤는데 기존의 운영진?이 사이트를 다른 사람에게 인수한 모양이다. 로그인도 안되고 비밀번호를 찾으려고 아무리 시도해도 인증 메일이 오지 않았다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;738&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bF35u5/btqE8xdTGhV/wkEd1izy4PuJeBy5bRVxk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bF35u5/btqE8xdTGhV/wkEd1izy4PuJeBy5bRVxk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bF35u5/btqE8xdTGhV/wkEd1izy4PuJeBy5bRVxk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbF35u5%2FbtqE8xdTGhV%2FwkEd1izy4PuJeBy5bRVxk1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;738&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그렇다고 따로 컨택을 하기도 애매해서 어쩔 수 없이 새로 가입한 후 문제를 확인했다. 옛날에 사용하던 블로그에 올려놓은 풀이와 비교를 해보니 문제 순서가 변경된건지 전부 변경된건지 문제가 살짝살짝 다르다. 문제 풀이 방식은 동일한데 소스만 다른것도 있는 것 같고 정확한건 한문제씩 보면서 확인해봐야할 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;762&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chgtG9/btqE7PsDCz1/DWbNIZxZPEsZzCia5Q8C40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chgtG9/btqE7PsDCz1/DWbNIZxZPEsZzCia5Q8C40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chgtG9/btqE7PsDCz1/DWbNIZxZPEsZzCia5Q8C40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchgtG9%2FbtqE7PsDCz1%2FDWbNIZxZPEsZzCia5Q8C40%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;762&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;스멀스멀 시간나는대로 문제를 풀어가보기로 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Webhacking.kr Challenge old-01 문제 풀이&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1번 문제 페이지에서 view-source를 클릭하면 해당 페이지의 소스를 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;646&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNqXZK/btqE9vsXoXY/xOmEWKQGEQQKPgziHrjqJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNqXZK/btqE9vsXoXY/xOmEWKQGEQQKPgziHrjqJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNqXZK/btqE9vsXoXY/xOmEWKQGEQQKPgziHrjqJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNqXZK%2FbtqE9vsXoXY%2FxOmEWKQGEQQKPgziHrjqJk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;646&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;소스를 차근차근 확인해보자. 사실 윗부분의 php 소스는 중요한게 없는데, user_lv 쿠키값이 존재하지 않으면 SetCookie를 사용해 쿠키값을 설정해주고 있다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;밑의 빨간 네모박스의 소스가 문제풀이의 핵심이다. user_lv 쿠키값이 6 이상이면 쿠키값을 다시 1로 설정하게 되고 5보다 크면 solve(1)이 실행되게 된다. solve(1)이 실행되야 함을 직감적으로 알 수 있으므로 자연스럽게 &lt;b&gt;쿠키값은 5와 6 사이의 값이어야&lt;/b&gt; 함을 알 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;546&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ERCkM/btqE6Nbd7CI/WeXTURn9ouE49BPF9sm9f1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ERCkM/btqE6Nbd7CI/WeXTURn9ouE49BPF9sm9f1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ERCkM/btqE6Nbd7CI/WeXTURn9ouE49BPF9sm9f1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FERCkM%2FbtqE6Nbd7CI%2FWeXTURn9ouE49BPF9sm9f1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;546&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;쿠키값을 5.5 정도로 설정해보기 위해 크롬 확장프로그램 EditThisCookie을 사용했다. 해당 &lt;a href=&quot;https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg/related?utm_source=chrome-ntp-icon&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;를 통해 설치하면 되는데 설치하는데 1분도 안걸린다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래와 같이 값에 5.5를 설정해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;484&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRSdDw/btqE9ungVWW/ZS164kYBuDNPRsQuD44Esk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRSdDw/btqE9ungVWW/ZS164kYBuDNPRsQuD44Esk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRSdDw/btqE9ungVWW/ZS164kYBuDNPRsQuD44Esk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRSdDw%2FbtqE9ungVWW%2FZS164kYBuDNPRsQuD44Esk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;484&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;실제 php 소스가 동작하는 페이지는 문제 페이지이므로 쿠키 설정 후 문제 페이지로 돌아가보면 문제가 풀린 것을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;699&quot; height=&quot;231&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQPr6P/btqE75241Eb/bEKykW87EmK9qwqDcoKJ6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQPr6P/btqE75241Eb/bEKykW87EmK9qwqDcoKJ6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQPr6P/btqE75241Eb/bEKykW87EmK9qwqDcoKJ6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQPr6P%2FbtqE75241Eb%2FbEKykW87EmK9qwqDcoKJ6k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;699&quot; height=&quot;231&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.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&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹해킹/webhacking.kr</category>
      <category>웹해킹</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/249</guid>
      <comments>https://liveyourit.tistory.com/249#entry249comment</comments>
      <pubDate>Thu, 25 Jun 2020 23:08:07 +0900</pubDate>
    </item>
    <item>
      <title>[암호학] DES vs AES 암호화 알고리즘, 방식 및 차이</title>
      <link>https://liveyourit.tistory.com/196</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;DES(Data Encryption Standard)란?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;DES는 이전 포스팅에서 살펴본 &lt;b&gt;페이스텔 구조&lt;/b&gt;의 &lt;b&gt;블록 대칭키 암호화 방식&lt;/b&gt; 중 하나이다. 16라운드로 구성되어 있기 때문에 16번의 페이스텔 암호를 수행하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #006dd7; color: #ffffff;&quot;&gt;관련 포스팅&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://liveyourit.tistory.com/195&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[자격증,이론/보안이론] - [암호학] 페이스텔(Feistel) 암호의 암복호화 방식&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589546048460&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[암호학] 페이스텔(Feistel) 암호의 암복호화 방식&quot; data-og-description=&quot;페이스텔(Feistel) 암호란 페이스텔 암호는 대칭 블록 암호 알고리즘으로 암복호화 과정에서 '라운드 함수'가 사용된다. 대표적인 블록 암호화 방식인 DES, SEED 등이 페이스텔 구조를 갖고 있다. 페�&quot; data-og-host=&quot;liveyourit.tistory.com&quot; data-og-source-url=&quot;https://liveyourit.tistory.com/195&quot; data-og-url=&quot;https://liveyourit.tistory.com/195&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c81CoA/hyF3UEB0wu/baJpSTczI7mrFEu6h8eKYk/img.png?width=800&amp;amp;height=681&amp;amp;face=0_0_800_681,https://scrap.kakaocdn.net/dn/blRbIU/hyF3WWImL0/AdYxmDy9nsaBwtSkBS8HP0/img.png?width=800&amp;amp;height=681&amp;amp;face=0_0_800_681,https://scrap.kakaocdn.net/dn/bbHgAL/hyF3VDwPuP/R8GUK2K6CW5B74b2DjiKKK/img.png?width=800&amp;amp;height=1169&amp;amp;face=0_0_800_1169&quot;&gt;&lt;a href=&quot;https://liveyourit.tistory.com/195&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://liveyourit.tistory.com/195&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c81CoA/hyF3UEB0wu/baJpSTczI7mrFEu6h8eKYk/img.png?width=800&amp;amp;height=681&amp;amp;face=0_0_800_681,https://scrap.kakaocdn.net/dn/blRbIU/hyF3WWImL0/AdYxmDy9nsaBwtSkBS8HP0/img.png?width=800&amp;amp;height=681&amp;amp;face=0_0_800_681,https://scrap.kakaocdn.net/dn/bbHgAL/hyF3VDwPuP/R8GUK2K6CW5B74b2DjiKKK/img.png?width=800&amp;amp;height=1169&amp;amp;face=0_0_800_1169');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[암호학] 페이스텔(Feistel) 암호의 암복호화 방식&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;페이스텔(Feistel) 암호란 페이스텔 암호는 대칭 블록 암호 알고리즘으로 암복호화 과정에서 '라운드 함수'가 사용된다. 대표적인 블록 암호화 방식인 DES, SEED 등이 페이스텔 구조를 갖고 있다. 페�&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;liveyourit.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;DES는&amp;nbsp;&lt;/span&gt;&lt;u&gt;64비트 평문&lt;/u&gt;&lt;span style=&quot;color: #333333;&quot;&gt;을 64비트 암호문으로 암호화하며&amp;nbsp;&lt;/span&gt;&lt;u&gt;키의 길이는 56비트&lt;/u&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;u&gt;라운드 수는 16&lt;/u&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이다. 여기서 키의 크기는 원래 64비트인데 7비트마다 오류검출을 위한 parity 비트가 1비트씩 들어갔기 때문에 실질적인 키의 길이는 56비트가 된다. 그리고&amp;nbsp;&lt;/span&gt;&lt;u&gt;56비트의 키로부터 16개의 서브키가 생성&lt;/u&gt;&lt;span style=&quot;color: #333333;&quot;&gt;되고 각 서브키는 각 라운드에서 사용된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;블록 길이 : 64비트&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;키 길이 : 56비트&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;라운드 수 : 16&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;DES 암호화 알고리즘의 구조 및 암호화 방식&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;DES의 암호화는 아래 그림에서 볼 수 있듯이 &lt;b&gt;2개의 전치(P-박스)&lt;/b&gt;, &lt;b&gt;16개의 페이스텔 라운드 함수&lt;/b&gt;로 구성된다. P-박스 2개는 라운드 함수가 시작되기 전 암호화 시작 부분에 &lt;u&gt;초기 전치(Initial permutation)&lt;/u&gt;와 라운드 함수가 전부 끝난 후인 암호화 끝 부분 &lt;u&gt;최종 전치(Final permutation)&lt;/u&gt;이다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;56비트의 암호화 키는 &lt;b&gt;라운드키 생성기 (Round-key generator)&lt;/b&gt;에 의해 &lt;u&gt;각 라운드마다 48비트의 16개의 서브키&lt;/u&gt;가 생성된다. 그리고 이 서브키는 각 라운드에 라운드 키로 사용된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;531&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEBCNt/btqEcoa5x0z/agQmOOonU1wOcQbQ5H9oB0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEBCNt/btqEcoa5x0z/agQmOOonU1wOcQbQ5H9oB0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEBCNt/btqEcoa5x0z/agQmOOonU1wOcQbQ5H9oB0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEBCNt%2FbtqEcoa5x0z%2FagQmOOonU1wOcQbQ5H9oB0%2Fimg.jpg&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;531&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;라운드 함수 및 DES 함수(F)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;DES에서 중요한 것은 바로 라운드 함수에서 사용되는 DES 함수(F) 이다. 아래 그림에서 Input, Initial Permutation 다음이 라운드 함수인데 위에 있는 그림의 Round1, Round2,... 부분이 상세하게 대체됐다고 보면 된다. 그리고 &lt;span style=&quot;color: #333333;&quot;&gt;이고 f가 DES 함수이다. 이전 포스팅에서 살펴본 페이스텔 구조와 동일한 것을 볼 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;480&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XLoRj/btqEcTPcN8p/4xPHE2fdxaohlPGgqDYeAK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XLoRj/btqEcTPcN8p/4xPHE2fdxaohlPGgqDYeAK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XLoRj/btqEcTPcN8p/4xPHE2fdxaohlPGgqDYeAK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXLoRj%2FbtqEcTPcN8p%2F4xPHE2fdxaohlPGgqDYeAK%2Fimg.jpg&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;480&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그럼 DES함수(f)를 좀 더 자세히 봐보자. DES 함수는 &lt;b&gt;P-박스가 2번&lt;/b&gt;(확장 P-박스, 단순 P-박스), &lt;b&gt;XOR 연산 한번&lt;/b&gt;, &lt;b&gt;S-boxs&lt;/b&gt;가 쓰이는 것을 볼 수 있다. 제일 먼저, 입력값으로 들어온 &lt;u&gt;32비트를 48비트로 확장한 후 라운드 함수 키 48비트와 xor&lt;/u&gt;을 한다. 그다음 8개의 S-박스를 거치는데 S-박스로 인해 혼돈과 확산 성질이 충족된다. S-박스는 비선형 함수이기 때문에 DES 암호화 알고리즘의 안전성은 주로 비선형 함수로 구성된 8개의 S-박스에 의존하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;398&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brgrJg/btqEaZwyN3X/x71ViKBUqFFQmlcyKzReok/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brgrJg/btqEaZwyN3X/x71ViKBUqFFQmlcyKzReok/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brgrJg/btqEaZwyN3X/x71ViKBUqFFQmlcyKzReok/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrgrJg%2FbtqEaZwyN3X%2Fx71ViKBUqFFQmlcyKzReok%2Fimg.jpg&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;398&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.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&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;DES는 56비트 키길이를 가지기 때문에 전수조사에 매우 취약하다. 이 때문에 이중 DES, 삼중 DES가 등장하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;AES(Advanced Encryption Standard)란?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위에서도 설명했다시피, DES는 56비트의 키를 사용하기에 더이상 안전하지 않게 되었고 이중, 삼중 DES 또한 여러 문제가 있었기에 &lt;b&gt;NIST는 DES를 대체할 새로운 암호 알고리즘을 공모&lt;/b&gt;하기에 이른다. 최종적으로 레인달이 개발한 알고리즘이 AES 알고리즘으로 채택되었다. AES 선정 기준은 &lt;u&gt;안전성, 비용, 구현 효율성&lt;/u&gt;이라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;AES는 DES와 동일하게 블록 대칭키 암호화 방식이다. 하지만 그 외의 것은 전부 다른데, &lt;u&gt;128비트 평문을 128비트로 암호화&lt;/u&gt;하며 DES와는 다르게 &lt;u&gt;비페이스텔 알고리즘&lt;/u&gt;에 속한다. 또한 고정된 라운드 수와 키길이를 가졌던 DES와는 다르게 AES는 &lt;u&gt;10/12/14 라운드 수&lt;/u&gt;와 이에 대응해 &lt;u&gt;128/192/256비트의 키길이&lt;/u&gt;를 갖는다. 각각 AES-128/AES-192/AES-256 이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjKFdf/btqEdk0aNJl/zgXOKlquJUu1PmyReOsK10/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjKFdf/btqEdk0aNJl/zgXOKlquJUu1PmyReOsK10/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjKFdf/btqEdk0aNJl/zgXOKlquJUu1PmyReOsK10/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjKFdf%2FbtqEdk0aNJl%2FzgXOKlquJUu1PmyReOsK10%2Fimg.jpg&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.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&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;AES 암호화 알고리즘의 구조 및 암호화 방식&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;AES 암호화 방식은 나무위키를 인용하겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Rijndael 알고리즘은 크게 보아 네 단계로 이루어진다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;- KeyExpansion : key schedule(키 스케줄)이라고도 부른다. 128, 192 또는 256비트 길이인 하나의 주 암호화 키를 받아서 아래 라운드들에서 사용할 여러 개의 128비트 라운드 키를 생성한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;- 0 라운드 : 위의 단계에서 생성한 라운드 키 중 첫번째 키를 사용, AddRoundKey를 한 번 실행한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;- 1~(9, 11, 13) 라운드 : SubBytes, ShiftRows, MixColumns, AddRoundKey를 순서대로 실행한다. 이것을 AES-128, 192, 256에 따라 각각 9번, 11번, 13번 반복한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;- 마지막 (10, 12, 14)번째 라운드 : SubBytes, ShiftRows, AddRoundKey를 순서대로 실행한다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여기서 AES는 충분한 분산 효과를 주기 위해 상태의 각 열을 비트단위로 섞는 MixColumns을 사용하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u61Ee/btqEbREFfJy/a175kVwVFz2xtYXeVPzSB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u61Ee/btqEbREFfJy/a175kVwVFz2xtYXeVPzSB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u61Ee/btqEbREFfJy/a175kVwVFz2xtYXeVPzSB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu61Ee%2FbtqEbREFfJy%2Fa175kVwVFz2xtYXeVPzSB1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.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&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;AES vs DES 암호화 알고리즘의 차이&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;DES와 AES 암호화 알고리즘의 차이를 표로 정리해보면 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;DES&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;AES&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;페이스텔&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;페이스텔&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;비페이스텔&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;블록크기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;64bits&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;128bits&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;키길이&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;56bits&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;128/192/256bits&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;암호화 프리미티브&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;치환, 전치&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;치환, 쉬프트, 비트혼합(분산)&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/보안이론</category>
      <category>AES</category>
      <category>des</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/196</guid>
      <comments>https://liveyourit.tistory.com/196#entry196comment</comments>
      <pubDate>Tue, 23 Jun 2020 23:28:50 +0900</pubDate>
    </item>
    <item>
      <title>[안드로이드 스튜디오] 키스토어 생성 / 앱에 서명 / 서명된 apk 획득</title>
      <link>https://liveyourit.tistory.com/158</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;앱을 배포하기 위해선 (플레이스토어에 등록하기 위해선) apk 에 꼭 서명을 해야한다. 키스토어를 생성, 앱에 서명을 해 서명된 apk와 jks 파일을 획득하는 과정과 keytool을 사용해 서명된 앱과 키스토어 파일에서 서명값을 확인하는 방법을 알아본다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;키스토어 생성 / 앱에 서명 / 서명된 apk 획득&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;안드로이드 스튜디오의 Build&amp;gt;Generate Signed Bundle / APK... 를 클릭한다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/n1L6i/btqDsNDiy5k/CWRdDQ6gAXKvkVep2j8h40/img.png&quot; width=&quot;700.0&quot; height=&quot;449.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n1L6i/btqDsNDiy5k/CWRdDQ6gAXKvkVep2j8h40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n1L6i/btqDsNDiy5k/CWRdDQ6gAXKvkVep2j8h40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n1L6i/btqDsNDiy5k/CWRdDQ6gAXKvkVep2j8h40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn1L6i%2FbtqDsNDiy5k%2FCWRdDQ6gAXKvkVep2j8h40%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/n1L6i/btqDsNDiy5k/CWRdDQ6gAXKvkVep2j8h40/img.png&quot; width=&quot;700.0&quot; height=&quot;449.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;그리고 APK를 체크한 후 Next를 클릭한다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/6kq2i/btqDvX5Igqa/YCfZDMg4GmEoSvXEGG1e8k/img.png&quot; width=&quot;537.0&quot; height=&quot;414.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6kq2i/btqDvX5Igqa/YCfZDMg4GmEoSvXEGG1e8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6kq2i/btqDvX5Igqa/YCfZDMg4GmEoSvXEGG1e8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6kq2i/btqDvX5Igqa/YCfZDMg4GmEoSvXEGG1e8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6kq2i%2FbtqDvX5Igqa%2FYCfZDMg4GmEoSvXEGG1e8k%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/6kq2i/btqDvX5Igqa/YCfZDMg4GmEoSvXEGG1e8k/img.png&quot; width=&quot;537.0&quot; height=&quot;414.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;키스토어를 생성하기 위해 Create new를 클릭한다. 키스토어 파일은 인증서라고 생각하면 된다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/zPyX0/btqDsPgNqHm/9debz0fkrWbrikZrIDNoOk/img.png&quot; width=&quot;539.0&quot; height=&quot;419.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zPyX0/btqDsPgNqHm/9debz0fkrWbrikZrIDNoOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zPyX0/btqDsPgNqHm/9debz0fkrWbrikZrIDNoOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zPyX0/btqDsPgNqHm/9debz0fkrWbrikZrIDNoOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzPyX0%2FbtqDsPgNqHm%2F9debz0fkrWbrikZrIDNoOk%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/zPyX0/btqDsPgNqHm/9debz0fkrWbrikZrIDNoOk/img.png&quot; width=&quot;539.0&quot; height=&quot;419.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;Key store path에서 아래 네모박스의 열기버튼을 클릭한다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/4sRii/btqDvZoR1vQ/iKJZ4UBpsyHyk6XxweRTi1/img.png&quot; width=&quot;546.0&quot; height=&quot;578.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4sRii/btqDvZoR1vQ/iKJZ4UBpsyHyk6XxweRTi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4sRii/btqDvZoR1vQ/iKJZ4UBpsyHyk6XxweRTi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4sRii/btqDvZoR1vQ/iKJZ4UBpsyHyk6XxweRTi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4sRii%2FbtqDvZoR1vQ%2FiKJZ4UBpsyHyk6XxweRTi1%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/4sRii/btqDvZoR1vQ/iKJZ4UBpsyHyk6XxweRTi1/img.png&quot; width=&quot;546.0&quot; height=&quot;578.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;키스토어를 생성할 경로를 선택한 뒤 FileName에 파일명을 입력해준다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/vCman/btqDwelRWgP/Kg5g7rVfZBZMsSHuJX9420/img.png&quot; width=&quot;480.0&quot; height=&quot;623.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vCman/btqDwelRWgP/Kg5g7rVfZBZMsSHuJX9420/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vCman/btqDwelRWgP/Kg5g7rVfZBZMsSHuJX9420/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vCman/btqDwelRWgP/Kg5g7rVfZBZMsSHuJX9420/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvCman%2FbtqDwelRWgP%2FKg5g7rVfZBZMsSHuJX9420%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/vCman/btqDwelRWgP/Kg5g7rVfZBZMsSHuJX9420/img.png&quot; width=&quot;480.0&quot; height=&quot;623.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot;&gt;&lt;/script&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block; text-align: center;&quot; data-ad-layout=&quot;in-article&quot; data-ad-format=&quot;fluid&quot; data-ad-client=&quot;ca-pub-1030149637931142&quot; data-ad-slot=&quot;6713083906&quot;&gt;&lt;/ins&gt;&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;&lt;/div&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;그리고 나머지 항목들을 채워준 후 OK를 눌러준다. 특히 키스토어 파일도 마찬가지이긴 하지만 비밀번호는 절대 잊어버리면 안되므로 꼭 기억해둔다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/dMgrLb/btqDuqnntaZ/1AyIclgnw4TNCKB0KEEpyk/img.png&quot; width=&quot;535.0&quot; height=&quot;563.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dMgrLb/btqDuqnntaZ/1AyIclgnw4TNCKB0KEEpyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dMgrLb/btqDuqnntaZ/1AyIclgnw4TNCKB0KEEpyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dMgrLb/btqDuqnntaZ/1AyIclgnw4TNCKB0KEEpyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdMgrLb%2FbtqDuqnntaZ%2F1AyIclgnw4TNCKB0KEEpyk%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/dMgrLb/btqDuqnntaZ/1AyIclgnw4TNCKB0KEEpyk/img.png&quot; width=&quot;535.0&quot; height=&quot;563.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;그럼 아래와 같이 이전 화면으로 돌아오고 필요한 항목들은 자동으로 다 채워진다. Next를 클릭한다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/bQTzWQ/btqDvyE8IXe/uHJEkcKMqKLZhR4uJqwW21/img.png&quot; width=&quot;534.0&quot; height=&quot;412.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQTzWQ/btqDvyE8IXe/uHJEkcKMqKLZhR4uJqwW21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQTzWQ/btqDvyE8IXe/uHJEkcKMqKLZhR4uJqwW21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQTzWQ/btqDvyE8IXe/uHJEkcKMqKLZhR4uJqwW21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQTzWQ%2FbtqDvyE8IXe%2FuHJEkcKMqKLZhR4uJqwW21%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/bQTzWQ/btqDvyE8IXe/uHJEkcKMqKLZhR4uJqwW21/img.png&quot; width=&quot;534.0&quot; height=&quot;412.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;realse를 선택한 후 Signature Versions에서 V1과 V2를 전부 체크해 Jar와 APK에 전부 서명할 것임을 명시하고 Finish를 눌러준다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/umeha/btqDvhcv9Oo/7qt5dUM7cTkO6ZX7A1NPC1/img.png&quot; width=&quot;552.0&quot; height=&quot;430.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/umeha/btqDvhcv9Oo/7qt5dUM7cTkO6ZX7A1NPC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/umeha/btqDvhcv9Oo/7qt5dUM7cTkO6ZX7A1NPC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/umeha/btqDvhcv9Oo/7qt5dUM7cTkO6ZX7A1NPC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fumeha%2FbtqDvhcv9Oo%2F7qt5dUM7cTkO6ZX7A1NPC1%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/umeha/btqDvhcv9Oo/7qt5dUM7cTkO6ZX7A1NPC1/img.png&quot; width=&quot;552.0&quot; height=&quot;430.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;몇분정도 지나면 'Generate Signed APK' 창이 뜬다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/olUjW/btqDtADGxTV/HrkOlTb4MVJtQMEZowCoBK/img.png&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/olUjW/btqDtADGxTV/HrkOlTb4MVJtQMEZowCoBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/olUjW/btqDtADGxTV/HrkOlTb4MVJtQMEZowCoBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/olUjW/btqDtADGxTV/HrkOlTb4MVJtQMEZowCoBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FolUjW%2FbtqDtADGxTV%2FHrkOlTb4MVJtQMEZowCoBK%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/olUjW/btqDtADGxTV/HrkOlTb4MVJtQMEZowCoBK/img.png&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;그리고 아래와 같이 서명된 app-relase apk 파일을 볼 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/tlP0t/btqDtzLzyCh/KOKiga5wVHMW2ytcPaUGK1/img.png&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tlP0t/btqDtzLzyCh/KOKiga5wVHMW2ytcPaUGK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tlP0t/btqDtzLzyCh/KOKiga5wVHMW2ytcPaUGK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tlP0t/btqDtzLzyCh/KOKiga5wVHMW2ytcPaUGK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtlP0t%2FbtqDtzLzyCh%2FKOKiga5wVHMW2ytcPaUGK1%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/tlP0t/btqDtzLzyCh/KOKiga5wVHMW2ytcPaUGK1/img.png&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;앱 서명 / 키 서명 확인&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;앱에 서명하는 과정을 진행해보았는데, 반대로 서명된 앱을 구했을 때 앱의 서명을 확인하고 싶을 수도 있을 것이다. (자바 jdk가 설치되어 있고 자바 환경변수도 등록되어 있다는 가정 하에 진행하자면) %JAVA_HOME%bin 에 keytool.exe가 있다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/bpdtNP/btqDvzqy4vh/K3xGqut2zzB4ebCePirKCK/img.png&quot; width=&quot;438.0&quot; height=&quot;309.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpdtNP/btqDvzqy4vh/K3xGqut2zzB4ebCePirKCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpdtNP/btqDvzqy4vh/K3xGqut2zzB4ebCePirKCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpdtNP/btqDvzqy4vh/K3xGqut2zzB4ebCePirKCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpdtNP%2FbtqDvzqy4vh%2FK3xGqut2zzB4ebCePirKCK%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/bpdtNP/btqDvzqy4vh/K3xGqut2zzB4ebCePirKCK/img.png&quot; width=&quot;438.0&quot; height=&quot;309.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;앱의 서명값을 확인하려면 아래와 같이 keytool을 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; contenteditable=&quot;false&quot; data-ke-style=&quot;style3&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;keytool.exe -printcert -jarfile [apk]&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/bDTxn0/btqDvzxivCc/o1AsVH6g3ygs4z0d1xmbyK/img.png&quot; width=&quot;723.0&quot; height=&quot;567.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDTxn0/btqDvzxivCc/o1AsVH6g3ygs4z0d1xmbyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDTxn0/btqDvzxivCc/o1AsVH6g3ygs4z0d1xmbyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDTxn0/btqDvzxivCc/o1AsVH6g3ygs4z0d1xmbyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDTxn0%2FbtqDvzxivCc%2Fo1AsVH6g3ygs4z0d1xmbyK%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/bDTxn0/btqDvzxivCc/o1AsVH6g3ygs4z0d1xmbyK/img.png&quot; width=&quot;723.0&quot; height=&quot;567.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;키의 서명값을 확인하려면 아래와 같이 keytool을 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; contenteditable=&quot;false&quot; data-ke-style=&quot;style3&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;keytool.exe -list -v -keystore [jks]&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/btcaC6/btqDsPgRtDa/V4HWRJnRKBmCSqIaip40b1/img.png&quot; width=&quot;734.0&quot; height=&quot;695.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btcaC6/btqDsPgRtDa/V4HWRJnRKBmCSqIaip40b1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btcaC6/btqDsPgRtDa/V4HWRJnRKBmCSqIaip40b1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btcaC6/btqDsPgRtDa/V4HWRJnRKBmCSqIaip40b1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtcaC6%2FbtqDsPgRtDa%2FV4HWRJnRKBmCSqIaip40b1%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/btcaC6/btqDsPgRtDa/V4HWRJnRKBmCSqIaip40b1/img.png&quot; width=&quot;734.0&quot; height=&quot;695.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>안드로이드</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/158</guid>
      <comments>https://liveyourit.tistory.com/158#entry158comment</comments>
      <pubDate>Sun, 21 Jun 2020 23:00:59 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] zip으로 반복문에 리스트 여러개 같이 돌리기</title>
      <link>https://liveyourit.tistory.com/177</link>
      <description>&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;2개의 리스트를 반복문에 같이 돌려?야 할 때 보통 아래와 같은 방법을 사용하곤 했다. 하나의 리스트를 기준으로 반복문을 돌고 다른 하나의 리스트는 인덱스를 사용하는 방법이다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;pre data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;list1=[1,2,3,4,5]
list2=[6,7,8,9,10]

for i,v in enumerate(list1):
	print(v,list2[i])&lt;/pre&gt;&lt;pre data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;1 6
2 7
3 8
4 9
5 10&lt;/pre&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;하지만 zip을 사용하면 좀 더 깔끔하게 다수의 리스트에 대해 동시에 반복문을 돌릴 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;pre data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;list1=[1,2,3,4,5]
list2=[6,7,8,9,10]

for v1,v2 in zip(list1,list2):
	print(v1,v2)
&lt;/pre&gt;&lt;pre data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;1 6
2 7
3 8
4 9
5 10&lt;/pre&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;이러한 방식을 알았다면 아래와 같은 응용도 가능하다. [1,2,3,4,5]라는 리스트가 있을 때 1,2 / 2,3 / 3,4&amp;nbsp; 와 같이 다음 요소를 연속으로 사용하는 방법이다. 물론 인덱스 i와 i+1을 사용해도 되지만 zip을 사용하는 것이 좀더 깔끔한 것 같다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;pre data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;list=[1,2,3,4,5]
for v_first,v_next in zip(list,list[1:]):
	print(v_first,v_next)&lt;/pre&gt;&lt;pre data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;1 2
2 3
3 4
4 5&lt;/pre&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;그리고 zip도 enumerate로 감쌀 수 있기 때문에 값과 인덱스 전부 얻을 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;pre data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;list1=[1,2,3,4,5]
list2=[6,7,8,9,10]

for i,(v1,v2) in enumerate(zip(list1,list2)):
	print(i,v1,v2)&lt;/pre&gt;&lt;pre data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;0 1 6
1 2 7
2 3 8
3 4 9
4 5 10&lt;/pre&gt;</description>
      <category>프로그래밍/파이썬</category>
      <category>ZIP</category>
      <category>파이썬</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/177</guid>
      <comments>https://liveyourit.tistory.com/177#entry177comment</comments>
      <pubDate>Fri, 19 Jun 2020 22:31:21 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] collections 모듈, 리스트 요소별 개수 쉽게 구하기</title>
      <link>https://liveyourit.tistory.com/202</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;리스트 [&quot;a&quot;,&quot;b&quot;,&quot;a&quot;,&quot;c&quot;,&quot;d&quot;,&quot;e&quot;,&quot;c&quot;,&quot;c&quot;]가 있다고 해보자. 각 요소별 갯수를 구해야 할 때, 아래와 같이 딕셔너리에는 키 값이 하나만 존재한다는 특징을 사용해 구할 수 있을 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589706325120&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dict={}
test=[&quot;a&quot;,&quot;b&quot;,&quot;a&quot;,&quot;c&quot;,&quot;d&quot;,&quot;e&quot;,&quot;c&quot;,&quot;c&quot;]

for v in test:
	if dict.get(v): dict[v]+=1
	else: dict[v]=1

print(dict)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1589708256158&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{'a': 3, 'b': 2, 'c': 4, 'd': 2, 'e': 2}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위와 같은 방식으로도 구할 수는 있지만 collections 모듈의 Count를 사용하면 손쉽게 구할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589706524880&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import collections

dict={}
test=[&quot;a&quot;,&quot;b&quot;,&quot;a&quot;,&quot;c&quot;,&quot;d&quot;,&quot;e&quot;,&quot;c&quot;,&quot;c&quot;]

dict=collections.Counter(test)
print(dict)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1589708266121&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Counter({'c': 3, 'a': 2, 'b': 1, 'd': 1, 'e': 1})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;또한 Counter로 얻은 딕셔너리끼리는 뺄셈도 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589706658544&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import collections

test1=[&quot;a&quot;,&quot;b&quot;,&quot;a&quot;,&quot;c&quot;,&quot;d&quot;,&quot;e&quot;,&quot;c&quot;,&quot;c&quot;]
test2=[&quot;a&quot;,&quot;b&quot;,&quot;a&quot;,&quot;c&quot;,&quot;d&quot;,&quot;e&quot;,&quot;c&quot;]

dic1=collections.Counter(test1)
dic2=collections.Counter(test2)

print(dic1-dic2)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1589708275977&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Counter({'c': 1})&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/파이썬</category>
      <category>Collections</category>
      <category>파이썬</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/202</guid>
      <comments>https://liveyourit.tistory.com/202#entry202comment</comments>
      <pubDate>Thu, 18 Jun 2020 22:30:44 +0900</pubDate>
    </item>
    <item>
      <title>알아두면 유용한 구글 고급 검색 명령어 사용법</title>
      <link>https://liveyourit.tistory.com/248</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;구글 고급 검색 명령어&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;우리는 원하는 정보를 검색하기 위해 검색엔진을 사용한다. 하지만 단순 키워드 검색만 가지고는 원하는 결과를 얻지 못하는 경우가 많은데, 이럴 때 &lt;b&gt;구글의 고급 검색 명령어(기법)&lt;/b&gt;을 사용해보면 좋다. &lt;u&gt;명령어 사용법이 단순해서 익히기 쉬우니 한번 익혀놓으면 검색할 때 상당히 효율적&lt;/u&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;특정 단어/문장 반드시 포함시키기 ( &quot;&quot; )&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;코딩을 하다가 에러가 발생하면 보통 구글링을 하게된다. 한 예로 크롤링을 하다가 Connection ResetError 에러가 발생했다고 가정해보자. 해당 에러에 대해 검색을 하는데 &lt;b&gt;crawling이라는 단어가 꼭 포함&lt;/b&gt;됐으면 하는 경우, &lt;u&gt;crawling을 &quot;&quot;로 감싸&lt;/u&gt;주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;629&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FhfBn/btqETBObvTX/Z6vrs1EPtvlzTJmDchf641/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FhfBn/btqETBObvTX/Z6vrs1EPtvlzTJmDchf641/img.png&quot; data-alt=&quot;&amp;amp;quot;&amp;amp;quot; 없이 검색했을 경우&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FhfBn/btqETBObvTX/Z6vrs1EPtvlzTJmDchf641/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFhfBn%2FbtqETBObvTX%2FZ6vrs1EPtvlzTJmDchf641%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;629&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;&quot;&quot; 없이 검색했을 경우&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;616&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6Bi04/btqETmjpSYi/jYKIun7RCBkDeKxSKmZILK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6Bi04/btqETmjpSYi/jYKIun7RCBkDeKxSKmZILK/img.png&quot; data-alt=&quot;&amp;amp;quot;&amp;amp;quot;를 활용해 검색한 경우&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6Bi04/btqETmjpSYi/jYKIun7RCBkDeKxSKmZILK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6Bi04%2FbtqETmjpSYi%2FjYKIun7RCBkDeKxSKmZILK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;616&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;&quot;&quot;를 활용해 검색한 경우&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;제목에 특정 단어/문장 포함시키기 ( intitle: )&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위에서 살펴본 &quot;&quot;는 제목 포함 내용에 특정 단어/문장을 포함시키는 것이었다면 &lt;b&gt;intitle: 은 제목에 특정 단어/문장을 포함시키는 명령어&lt;/b&gt;이다. 예를 들어 내 블로그 이름은 &quot;Live Your IT&quot;를 검색해본다고 해보자. 구글에 그냥 검색하면 절대로 내 블로그를 찾을 수 없지만 intitle: 로 검색하면 바로 상위에 블로그가 검색되는 것을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;624&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pxxzS/btqET7yRQp0/V439zujOQ7nHnjNj6mViv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pxxzS/btqET7yRQp0/V439zujOQ7nHnjNj6mViv1/img.png&quot; data-alt=&quot;intitle: 없이 검색했을 경우&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pxxzS/btqET7yRQp0/V439zujOQ7nHnjNj6mViv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpxxzS%2FbtqET7yRQp0%2FV439zujOQ7nHnjNj6mViv1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;624&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;intitle: 없이 검색했을 경우&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;633&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dATtiH/btqETKxnqfV/fyt3K8H2xcDSsui9k0Xwe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dATtiH/btqETKxnqfV/fyt3K8H2xcDSsui9k0Xwe0/img.png&quot; data-alt=&quot;intitle: 을 활용해 검색한 경우&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dATtiH/btqETKxnqfV/fyt3K8H2xcDSsui9k0Xwe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdATtiH%2FbtqETKxnqfV%2Ffyt3K8H2xcDSsui9k0Xwe0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;633&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;intitle: 을 활용해 검색한 경우&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;검색할 사이트를 지정해주기 ( site: )&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;요즘 자주쓰는 검색 명령어 중 하나가 site: 이다. &lt;b&gt;stie: 다음에 검색할 사이트의 주소를 지정&lt;/b&gt;해준 후 뒤에 검색어를 작성하면 &lt;u&gt;해당 검색어에 대한 검색을 지정해준 사이트 내에서만 수행&lt;/u&gt;해준다. 학교 페이지의 경우 검색 알고리즘이 좀 이상하거나 해서 결과가 제대로 안나오는 경우가 종종 있는데 이럴 때 차라리 구글에 site: 명령어를 사용하면 편리하게 검색이 가능하다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래는 검색하고 싶은 에러를 stackoverflow 사이트에서만 검색하도록 한 결과이다. 아니면 문법이나 코드를 검색하는데 깃허브 페이지에서만 검색하고 싶을 수도 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;671&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRk7Hx/btqETCsOk25/c1kYkvmC9GBNKZSrTChogk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRk7Hx/btqETCsOk25/c1kYkvmC9GBNKZSrTChogk/img.png&quot; data-alt=&quot;stackoverflow 사이트에서만 검색되도록 site: 사용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRk7Hx/btqETCsOk25/c1kYkvmC9GBNKZSrTChogk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRk7Hx%2FbtqETCsOk25%2Fc1kYkvmC9GBNKZSrTChogk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;671&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;stackoverflow 사이트에서만 검색되도록 site: 사용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;특정 검색어 제외 ( - )&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;검색어 앞에 -를 붙이면 해당 검색어를 제외시킬 수 있다. 예를 들어, &quot;&lt;b&gt;노트북 추천&quot;을 검색하는데 그램을 제외&lt;/b&gt;하고 싶으면 &lt;u&gt;&quot;노트북 추천 -그램&quot;을 검색&lt;/u&gt;하면 된다. 이 -는 다른 명령어 앞에도 붙일 수 있는데 &lt;b&gt;&quot;[내블로그주소] -site:[내블로그주소]&quot;&lt;/b&gt;를 검색하면 내 블로그를 제외하고, 내 블로그 포스팅을 참조했거나 내가 댓글을 쓴 포스팅을 검색할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;677&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d4J08k/btqEShi6ASG/8MHhok9d9UfJh3oHu2LaJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d4J08k/btqEShi6ASG/8MHhok9d9UfJh3oHu2LaJK/img.png&quot; data-alt=&quot;-site 명령어 활용하기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d4J08k/btqEShi6ASG/8MHhok9d9UfJh3oHu2LaJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd4J08k%2FbtqEShi6ASG%2F8MHhok9d9UfJh3oHu2LaJK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;677&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;-site 명령어 활용하기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;특정 파일 타입만 검색하기 ( filetype: )&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;특정 파일 타입만 검색하고 싶을 때는 filetype: 명령어를 사용하면 된다. 예를 들어 데이터3법을 검색하는데 &lt;b&gt;pdf 파일로된 문서만 검색&lt;/b&gt;하고 싶을 경우 &lt;b&gt;&quot;데이터3법 filetype:pdf&quot;로 검색&lt;/b&gt;하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;682&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ecpr2p/btqESHBB9W9/GDJCG989iNNXIuH9ccXyXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ecpr2p/btqESHBB9W9/GDJCG989iNNXIuH9ccXyXK/img.png&quot; data-alt=&quot;filetype 없이 검색했을 경우&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ecpr2p/btqESHBB9W9/GDJCG989iNNXIuH9ccXyXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fecpr2p%2FbtqESHBB9W9%2FGDJCG989iNNXIuH9ccXyXK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;682&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;filetype 없이 검색했을 경우&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;627&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3QtZZ/btqESo3o429/SHX69VeL7pUuaIVKw17cGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3QtZZ/btqESo3o429/SHX69VeL7pUuaIVKw17cGk/img.png&quot; data-alt=&quot;filetype을 활용해 검색한 경우&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3QtZZ/btqESo3o429/SHX69VeL7pUuaIVKw17cGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3QtZZ%2FbtqESo3o429%2FSHX69VeL7pUuaIVKw17cGk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;627&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;filetype을 활용해 검색한 경우&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/일반</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/248</guid>
      <comments>https://liveyourit.tistory.com/248#entry248comment</comments>
      <pubDate>Tue, 16 Jun 2020 23:28:23 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] pandas, csv 특정 열 값을 리스트로 변경하기</title>
      <link>https://liveyourit.tistory.com/247</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래와 같은 데이터가 있을 때 특정 열 값을 얻은 후 타입을 리스트로 변경하는 방법을 알아보자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;636&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WpS3j/btqEPuPCTei/MGn3kS0bIjJFHMRnXkxZ9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WpS3j/btqEPuPCTei/MGn3kS0bIjJFHMRnXkxZ9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WpS3j/btqEPuPCTei/MGn3kS0bIjJFHMRnXkxZ9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWpS3j%2FbtqEPuPCTei%2FMGn3kS0bIjJFHMRnXkxZ9k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;636&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;csv 파일 읽기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;pandas 모듈을 사용할 것이기 때문에 먼저 pandas를 임포트해준 후 read_csv를 사용해 csv 파일을 읽어준다. read_csv를 사용해 읽는데 names=[]를 사용해 각 열의 이름을 지정해주고 한글 데이터의 경우 그냥 읽으면 깨지기 때문에 encoding='CP949'로 인코딩을 설정해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592140994531&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd

csv = pd.read_csv('test.csv',\
		names=['gu','dong','name','category','microReview','commonAddr','addr'], \
		encoding='CP949')&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;750&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIQI7E/btqEOO2ys9L/z34wg3hv3DFPXvUvejjBv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIQI7E/btqEOO2ys9L/z34wg3hv3DFPXvUvejjBv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIQI7E/btqEOO2ys9L/z34wg3hv3DFPXvUvejjBv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIQI7E%2FbtqEOO2ys9L%2Fz34wg3hv3DFPXvUvejjBv1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;750&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;특정&amp;nbsp;열&amp;nbsp;값을&amp;nbsp;리스트로&amp;nbsp;변경하기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그 다음, 속성 이름으로 특정 열을 선택해준다. 출력해보면, 객체 타입임을 알 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592141195643&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat = csv['category']&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;626&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dysOex/btqEOPAnzmJ/wuiwUcQfZyWhWmTiA1lV80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dysOex/btqEOPAnzmJ/wuiwUcQfZyWhWmTiA1lV80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dysOex/btqEOPAnzmJ/wuiwUcQfZyWhWmTiA1lV80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdysOex%2FbtqEOPAnzmJ%2FwuiwUcQfZyWhWmTiA1lV80%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;626&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;values를 사용해 선택해준 특정 열의 값만을 추출한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592141403025&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat_val = cat.values&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;723&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bng0OZ/btqEPUHiUQ6/TrsMVdhM923VGkaV1wkkH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bng0OZ/btqEPUHiUQ6/TrsMVdhM923VGkaV1wkkH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bng0OZ/btqEPUHiUQ6/TrsMVdhM923VGkaV1wkkH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbng0OZ%2FbtqEPUHiUQ6%2FTrsMVdhM923VGkaV1wkkH0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;723&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;마지막으로, 추출한 값의 타입을 리스트로 변경하기 위해 tolist()를 수행해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592141518603&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat_list = cat_val.tolist()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;738&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n8RW4/btqEO09ADow/6Lh9DSkr8kyO1HegbZS46K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n8RW4/btqEO09ADow/6Lh9DSkr8kyO1HegbZS46K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n8RW4/btqEO09ADow/6Lh9DSkr8kyO1HegbZS46K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn8RW4%2FbtqEO09ADow%2F6Lh9DSkr8kyO1HegbZS46K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;738&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;당연히, values와 tolist()를 합쳐서 cat.values.tolist()를 해줘도 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/RjinY/btqEPu9Yrpk/6k8IbQIh7Pt0oJOlFYINhK/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;741&quot; height=&quot;75&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RjinY/btqEPu9Yrpk/6k8IbQIh7Pt0oJOlFYINhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RjinY/btqEPu9Yrpk/6k8IbQIh7Pt0oJOlFYINhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RjinY/btqEPu9Yrpk/6k8IbQIh7Pt0oJOlFYINhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRjinY%2FbtqEPu9Yrpk%2F6k8IbQIh7Pt0oJOlFYINhK%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/RjinY/btqEPu9Yrpk/6k8IbQIh7Pt0oJOlFYINhK/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;741&quot; height=&quot;75&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.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&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;특정 열 값을 리스트로 변경하기, 전체 코드&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전체 코드는 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592141704803&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd

csv = pd.read_csv('test.csv',\
		names=['gu','dong','name','category','microReview','commonAddr','addr'], \
		encoding='CP949')

cat = csv['category']
print(cat.values.tolist())&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/파이썬</category>
      <category>pandas</category>
      <category>파이썬</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/247</guid>
      <comments>https://liveyourit.tistory.com/247#entry247comment</comments>
      <pubDate>Mon, 15 Jun 2020 00:05:42 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] pandas로 csv에서 특정 값을 가진 행 찾기</title>
      <link>https://liveyourit.tistory.com/246</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;많은 양의 데이터를 저장하고 있는 csv에서, 특정 값을 행만 선별해 찾고 싶을 때가 있다. 이럴 때, 파이썬 pandas 모듈을 사용하면 특정 값을 가진 행을 손쉽게 얻을 수 있다. 참고로, &lt;span style=&quot;color: #333333;&quot;&gt;파이썬 pasndas는 'pip install pandas'로 쉽게 할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;652&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsMeuu/btqEPmEecWC/whhYdW1uh4VDDLIm94FZxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsMeuu/btqEPmEecWC/whhYdW1uh4VDDLIm94FZxK/img.png&quot; data-alt=&quot;파이썬 pandas 모듈 설치&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsMeuu/btqEPmEecWC/whhYdW1uh4VDDLIm94FZxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdsMeuu%2FbtqEPmEecWC%2FwhhYdW1uh4VDDLIm94FZxK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;652&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;파이썬 pandas 모듈 설치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;데이터 및 찾을 행 선정&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;naver_place.csv는 &lt;/span&gt;네이버 플레이스의 서울시 음식점 정보가 저장되어 있는 csv이다. 해당 csv 파일에서 구와 동이 '동대문구 회기동'인 행을 찾아보자.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;616&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpLxSH/btqEQYa6cKB/NfUBoGyAuBiowWkSeGkEj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpLxSH/btqEQYa6cKB/NfUBoGyAuBiowWkSeGkEj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpLxSH/btqEQYa6cKB/NfUBoGyAuBiowWkSeGkEj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpLxSH%2FbtqEQYa6cKB%2FNfUBoGyAuBiowWkSeGkEj0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;616&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;cvs 파일 읽기 (read_csv)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;특정 값을 가진 행을 찾기 위해 먼저 read_csv를 사용해 csv 파일을 읽어들인다. 각 열(columns)의 이름은 names=[]로 지정해줄 수 있고, 한글 데이터인 경우 인코딩 없이 그냥 읽으면 깨질 수 있기 때문에 encoding='CP949'로 지정해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592133474063&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#-*-coding:utf-8-*-
import pandas as pd

gu = &quot;동대문구&quot;
dong = &quot;회기동&quot;

csv = pd.read_csv('naver_place.csv', \
	names = ['gu','dong','name','category','microReview','commonAddr','addr'], \
	encoding = 'CP949')
    
print(csv)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;csv 출력 결과는 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;619&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/20Tu9/btqEPmqFWf7/p7Jgi8HGWlXzKPlbO4cEZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/20Tu9/btqEPmqFWf7/p7Jgi8HGWlXzKPlbO4cEZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/20Tu9/btqEPmqFWf7/p7Jgi8HGWlXzKPlbO4cEZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F20Tu9%2FbtqEPmqFWf7%2Fp7Jgi8HGWlXzKPlbO4cEZk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;619&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.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&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;csv 에서 특정 값을 가진 행 찾기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;특정 값을 가진 행을 찾기 위한 여러 방법이 있겠지만, 아래와 같이 &lt;b&gt;loc을 사용해 행을 인덱싱&lt;/b&gt;한 후 &lt;b&gt;내부에 조건문을 써주는 방법&lt;/b&gt;이 있다. &lt;u&gt;csv['gu']가 '동대문구'이고 csv['dong']이 '회기동'인 행을 찾는 조건문을 작성&lt;/u&gt;했다. 그리고 열은 iloc를 사용해 4개까지만 출력하도록 iloc를 사용해주었다. 참고로, loc는 값을 사용해 검색하고 iloc는 인덱스를 사용해 검색하는 기능을 제공한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592135494681&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#-*-coding:utf-8-*-
import pandas as pd

gu = &quot;동대문구&quot;
dong = &quot;회기동&quot;

csv = pd.read_csv('naver_place.csv', \
	names = ['gu','dong','name','category','microReview','commonAddr','addr'], \
	encoding = 'CP949')

# 특정 값(동대문구, 회기동)을 가진 행 찾기
find_row = csv.loc[(csv['gu'] == gu) &amp;amp; (csv['dong'] == dong)]

# 열은 4개까지만 출력되도록
find_row = find_row.iloc[:,:4]
print(find_row)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;결과는 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;694&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XUZ43/btqEPe7wz1n/TZ2D1ZQq8HTmr13TIvh0T0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XUZ43/btqEPe7wz1n/TZ2D1ZQq8HTmr13TIvh0T0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XUZ43/btqEPe7wz1n/TZ2D1ZQq8HTmr13TIvh0T0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXUZ43%2FbtqEPe7wz1n%2FTZ2D1ZQq8HTmr13TIvh0T0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;694&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.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&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/파이썬</category>
      <category>pandas</category>
      <category>파이썬</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/246</guid>
      <comments>https://liveyourit.tistory.com/246#entry246comment</comments>
      <pubDate>Sun, 14 Jun 2020 21:27:51 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] 네이버 플레이스, 맛집 (JSON 데이터) 크롤링 (2)</title>
      <link>https://liveyourit.tistory.com/245</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;+) &lt;span&gt;제가 크롤링에 사용한 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;URL 서비스 자체(store.naver.com)가 중단되고 새롭게 개편된 것으로 확인&lt;/b&gt;&lt;/span&gt;됩니다. 따라서 &lt;b&gt;아래 코드에 사용된 URL로는 현재 크롤링이 불가&lt;/b&gt;하니 &lt;b&gt;JSON 응답값을 주는 사이트의 크롤링 코드 작성 방법, 방식 위주로만 확인&lt;/b&gt; 부탁드립니다!&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;저번 포스팅에서 서울시의 구/동 별로 카테고리를 나누어 크롤링하기 위해 서울시 행정구역 정보를 저장했고, 크롤링 URL을 구성하기 위한 작업을 선행했다. 그리고 해당 URL 요청을 통해 응답을 받았고 응답 코드 500이 나오는 경우에 대한 처리까지 마쳤다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이번 포스팅에서는 저번 내용에 이어서, 응답으로 받은 값을 파이썬 &lt;u&gt;j&lt;/u&gt;&lt;b&gt;son 모듈을 사용해 파싱하고 저장하는 코드를 작성&lt;/b&gt;해보자. &lt;u&gt;이전 포스팅에서 내용과 코드가 모두 이어지므로 필요한 사람은 이전 포스팅을 확인&lt;/u&gt;하거나 포스팅 하단부의 전체코드를 확인하길 바란다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;/* 추가적으로 크롤링 중간에 막히는 문제가 해결되었습니다 */&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;이전포스팅&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://liveyourit.tistory.com/244&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/06/12 - [프로그래밍/파이썬] - [파이썬] 네이버 플레이스, 맛집 (JSON 데이터) 크롤링 (1)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1592024279710&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[파이썬] 네이버 플레이스, 맛집 (JSON 데이터) 크롤링 (1)&quot; data-og-description=&quot;빅데이터 관련 수업을 들은 적이 있는데 뭔가 데이터 처리를 하기 전에 일단 데이터를 크롤링해와야 했던 과제가 있었다. 네이버 플레이스에서 맛집을 크롤링해보기로 해서 약 12만건? 정도 크��&quot; data-og-host=&quot;liveyourit.tistory.com&quot; data-og-source-url=&quot;https://liveyourit.tistory.com/244&quot; data-og-url=&quot;https://liveyourit.tistory.com/244&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bOYcSF/hyGnJYgqFt/4KlzsarXrDtP0uOS1bZge1/img.png?width=712&amp;amp;height=701&amp;amp;face=0_0_712_701,https://scrap.kakaocdn.net/dn/bEuCFI/hyGoUqiMVO/ikMwevafelIQxqo8SUwRXK/img.png?width=712&amp;amp;height=701&amp;amp;face=0_0_712_701,https://scrap.kakaocdn.net/dn/bHdbbs/hyGnYA7eqX/n1A8H8DYuAG9AbFUK5aYt0/img.png?width=963&amp;amp;height=772&amp;amp;face=0_0_963_772&quot;&gt;&lt;a href=&quot;https://liveyourit.tistory.com/244&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://liveyourit.tistory.com/244&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bOYcSF/hyGnJYgqFt/4KlzsarXrDtP0uOS1bZge1/img.png?width=712&amp;amp;height=701&amp;amp;face=0_0_712_701,https://scrap.kakaocdn.net/dn/bEuCFI/hyGoUqiMVO/ikMwevafelIQxqo8SUwRXK/img.png?width=712&amp;amp;height=701&amp;amp;face=0_0_712_701,https://scrap.kakaocdn.net/dn/bHdbbs/hyGnYA7eqX/n1A8H8DYuAG9AbFUK5aYt0/img.png?width=963&amp;amp;height=772&amp;amp;face=0_0_963_772');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[파이썬] 네이버 플레이스, 맛집 (JSON 데이터) 크롤링 (1)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;빅데이터 관련 수업을 들은 적이 있는데 뭔가 데이터 처리를 하기 전에 일단 데이터를 크롤링해와야 했던 과제가 있었다. 네이버 플레이스에서 맛집을 크롤링해보기로 해서 약 12만건? 정도 크��&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;liveyourit.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;JSON 데이터, 파이썬 객체로 변환&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;먼저, JSON 데이터를 파이썬 객체로 변환하기 위해 &lt;b&gt;json 모듈&lt;/b&gt;의 &lt;b&gt;loads()&lt;/b&gt;를 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592026235733&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# start crawling
def crawling(self):
	
    # 코드...
    
    self.data = json.loads(data.text,encoding = 'utf-8')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;파싱할 JSON 데이터 선정&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;JSON 데이터 중 &lt;b&gt;어떤 키-값 을 파싱할지 정해야&lt;/b&gt; 한다. 크롤링하고 있는 JSON 데이터를 확인해보면, &lt;u&gt;음식점 정보가 items 내에 리스트 형태로 쭉 나열&lt;/u&gt;되어있다. 그리고 각 음식점마다 id, name, businessCategory 등 여러 값들이 저장되어 있는데 이 중에서 &lt;u&gt;name, category, microReview, commonAddr, addr 데이터를 선정해서 파싱&lt;/u&gt;하도록 하겠다. 물론 당연하게도 본인이 원하는 값들을 정해서 파싱하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;770&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/38cE7/btqEPU0IwDs/Ur6skokFEvBtAcjwH2SiEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/38cE7/btqEPU0IwDs/Ur6skokFEvBtAcjwH2SiEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/38cE7/btqEPU0IwDs/Ur6skokFEvBtAcjwH2SiEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F38cE7%2FbtqEPU0IwDs%2FUr6skokFEvBtAcjwH2SiEK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;770&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;JSON 데이터 파싱&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이제 원하는 데이터를 파싱해서 저장하는 일만 남았다. 먼저, 각 음식점 정보가 items 내에 있었기 때문에 items에 먼저 접근해보겠다. items에 접근하려면 &lt;b&gt;data[&quot;items&quot;]&lt;/b&gt;를 해주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592028618230&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# start crawling
def crawling(self):
	
    # 코드...
    
    self.data = json.loads(data.text,encoding = 'utf-8')
    print(self.data[&quot;items&quot;])&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;697&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceznYX/btqEPe6EOLh/DliVZ7QAWJkJNBz2LxZLZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceznYX/btqEPe6EOLh/DliVZ7QAWJkJNBz2LxZLZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceznYX/btqEPe6EOLh/DliVZ7QAWJkJNBz2LxZLZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceznYX%2FbtqEPe6EOLh%2FDliVZ7QAWJkJNBz2LxZLZ1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;697&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;파싱하기로 선정한 데이터에 접근하려면, &lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;data[&quot;items&quot;][인덱스][키]&lt;/b&gt;를 해주면 된다. items 결과가 여러 개이기 때문에 꼭 인덱스를 지정해주어야 한다. 한 페이지 당 display를 100으로 설정해주었기 때문에 모든 값을 파싱하려면 인덱스 값을 0부터 증가시키는 과정이 필요하다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592028749159&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# start crawling
def crawling(self):
	
    # 코드...
    
    self.data = json.loads(data.text,encoding = 'utf-8')
    print(self.data[&quot;items&quot;][0][&quot;name&quot;])
    print(self.data[&quot;items&quot;][0][&quot;category&quot;])
    print(self.data[&quot;items&quot;][0][&quot;desc&quot;])
    print(self.data[&quot;items&quot;][0][&quot;microReview&quot;])
    print(self.data[&quot;items&quot;][0][&quot;commonAddr&quot;])
    print(self.data[&quot;items&quot;][0][&quot;addr&quot;])&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;728&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwrZYN/btqEODTBXAR/olHykgLOp07ncElPD37M8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwrZYN/btqEODTBXAR/olHykgLOp07ncElPD37M8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwrZYN/btqEODTBXAR/olHykgLOp07ncElPD37M8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwrZYN%2FbtqEODTBXAR%2FolHykgLOp07ncElPD37M8k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;728&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;CRAWL 클래스 내의 crawling 함수에서는 display 길이만큼 반복문을 돌며 인덱스 값을 증가시키고, &lt;u&gt;실제 값을 파싱하는 코드는 get_json_value 함수에 작성&lt;/u&gt;하려 한다. 먼저 crawling 함수 코드를 보자. 참고로, 주석에 이전 코드들은 포스팅 상단에 링크해놓은 이전 포스팅에서 확인할 수 있고, 아니면 해당 포스팅 하단에 첨부해놓은 전체 코드를 확인하길 바란다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;diaplay 값만큼 반복문을 도는데 먼저 구와 동 정보를 self.write에 저장한다. self.write 변수는 리스트인데 &lt;u&gt;구, 동, name, category, microReview, commonAddr, addr을 저장한 후 test.csv 파일에 저장해 줄&lt;/u&gt; 것이다. 구와 동 정보를 먼저 리스트에 추가한 후 self.get_json_value('키', '인덱스')를 호출하고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592057383949&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# start crawling
def crawling(self):

    print('[*] Start Crawling...')
    f = open('test.csv','w',encoding='utf-8-sig', newline='')
    f.close()
    
    # 코드...
    
	#parsing data from json 
	for i in range(display):

		self.write.append(gu)
		self.write.append(dong)
						
		self.get_json_value('name',i)
		self.get_json_value('category',i)
		self.get_json_value('microReview',i)
		self.get_json_value('commonAddr',i)
		self.get_json_value('addr',i)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;self.get_json_value는 실제 json 값 파싱 기능을 하는 함수로 따로 작성해주었다. 넘어온 i 인덱스 값이 없을 수도 있기 때문에 (IndexError: list index out of range) try, except 구문을 사용했다. self.data[&quot;items&quot;][i]에 key 가 들어있으면 &lt;b&gt;value에 &lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;self.data[&quot;items&quot;][i][key] 값을 저장&lt;/b&gt;한 후 self.write 리스트에 추가해준다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592057765290&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#parsing json data using items
def get_json_value(self,key,i):
		
	try:
		if key in self.data[&quot;items&quot;][i]:
			value = self.data[&quot;items&quot;][i][key]
			self.write.append(value)
		else:
			self.write.append(&quot;None&quot;)
	except:
		self.stop = 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;에러가 발생하면 self.stop 변수를 1로 설정해주는데, 이 변수가 1이 되면 반목문을 break하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592058297205&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# start crawling
def crawling(self):

    print('[*] Start Crawling...')
    f = open('test.csv','w',encoding='utf-8-sig', newline='')
    f.close()
    
    # 코드...
    
	#parsing data from json 
	for i in range(display):
    
            # 코드...
            
            if self.stop == 1: break&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;크롤링 데이터 (JSON) csv 파일에 저장&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이제 크롤링 및 파싱을 모두 완료했기 때문에 저장하는 일만 남았다. 앞서 crawling 함수 시작 지점에서 test.csv 파일을 생성해주었는데 csv에 한글을 저장 시, 깨지는 이슈가 있어 encoding='utf-8-sig' 옵션을 추가해주었다. 해당 파일을 열고, &lt;b&gt;파이썬 csv 모듈을 사용해 데이터(self.write)를 저장&lt;/b&gt;해준다. csv 파일을 열때는 개행이 두 번 들어가지 않도록, newline='' 옵션을 지정해준다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592058549685&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# start crawling
def crawling(self):

    print('[*] Start Crawling...')
    f = open('test.csv','w',encoding='utf-8-sig', newline='')
    f.close()
    
    # 코드...
    
	#parsing data from json 
	for i in range(display):
    
            # 코드...
            
            with open ('test.csv','a',newline='') as f:
            	writer = csv.writer(f)
                writer.writerow(self.write)
                
            self.write = []&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;저장 결과는 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;625&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pDAxA/btqEOEysRea/RMb3xkbf4zIPW7Uuqceef0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pDAxA/btqEOEysRea/RMb3xkbf4zIPW7Uuqceef0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pDAxA/btqEOEysRea/RMb3xkbf4zIPW7Uuqceef0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpDAxA%2FbtqEOEysRea%2FRMb3xkbf4zIPW7Uuqceef0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;625&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;크롤링 중간에 막히는 이슈 해결&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;크롤링을 하다 보니 어느샌가 크롤링이 막히는 이슈가 발생했다. 일정 데이터 이상 크롤링하고 나면, 존재하는 페이지인데도 내부 서버 500 에러가 발생해 더 이상 크롤링이 안 되는 것이다. 해당 이슈는 오늘 해결을 해보다가 해결이 되지 않아서 다음 포스팅 과제로 남겨놔야 할 것 같다고 했는데, 생각보다 빨리 해결이 됐다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6nUN5/btqEPfELy3C/XCy4SgrSt7995S4AOrKqNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6nUN5/btqEPfELy3C/XCy4SgrSt7995S4AOrKqNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6nUN5/btqEPfELy3C/XCy4SgrSt7995S4AOrKqNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6nUN5%2FbtqEPfELy3C%2FXCy4SgrSt7995S4AOrKqNk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.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&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;request를 하기 전에 sleep을 1이 아닌 5 정도로 주니, 중간에 막히는 문제가 완벽히 사라졌다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592126295180&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# request url
time.sleep(5)
data = requests.get(url)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;네이버 플레이스, 맛집 크롤링 전체 코드&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전체 코드는 아래와 같다. &lt;span style=&quot;color: #333333;&quot;&gt;길다고 하면 긴 과정?을 마무리했는데, 약 10만 건 정도는 거뜬히 크롤링이 가능하니 크롤링한 데이터를 사용해 이다음에 다른 포스팅에서 이것저것 깨작깨작 해볼 예정이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592058725097&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#-*-coding:utf-8-*-
import os
import sys
import csv
import json
import time
import requests

class CRAWL:
	
	def __init__(self):
		
		self.seoul_dict = {}
		self.tmp_list = []
		self.data = []
		self.write = []
	
	# seoul_code.xlsx -&amp;gt; dictionary
	def get_seoul_code(self):
		
		dong_list = []
		with open(&quot;seoul_code.txt&quot;,&quot;rt&quot;,encoding='UTF8') as f:
			for line in f:
				if line == '\n':
					self.seoul_dict[key] = dong_list
					dong_list = []
					continue

				tmp = line.split(&quot;,&quot;)
				gu = tmp[0]
				dong = tmp[1].replace(&quot;\n&quot;,&quot;&quot;)

				dong_list.append(dong)
				key = gu		


	# parsing json data using items
	def get_json_value(self,key,i):
		
		try:
			if key in self.data[&quot;items&quot;][i]:
				value = self.data[&quot;items&quot;][i][key]
				self.write.append(value)
			else:
				self.write.append(&quot;None&quot;)
		except:
			self.stop = 1

	# start crawling
	def crawling(self):
		
		print('[*] Start Crawling...')
		f = open('test.csv','w',encoding='utf-8-sig', newline='')
		f.close()

		#loop for gu/dong
		for gu,dong_list in self.seoul_dict.items():
			print('-'+gu)

			for dong in dong_list:
				print('  -'+dong)

				gu_dong = gu+'+'+dong+'+'+u'맛집'
				display = 100
				
				self.stop = 0
                
				# send query
				for start in range(1,6):
					url = 'https://store.naver.com/sogum/api/businesses?start='+str(start) \
					+'&amp;amp;display='+str(display) \
					+'&amp;amp;query='+gu_dong \
					+'&amp;amp;sortingOrder=reviewCount' \

					time.sleep(5)
					#get data and check status code
					data = requests.get(url)
					if data.status_code == 500:
						break
					
					self.data = json.loads(data.text)
					
					#parsing data from json 
					for i in range(display):

						self.write.append(gu)
						self.write.append(dong)
						
						self.get_json_value('name',i)
						self.get_json_value('category',i)
						self.get_json_value('microReview',i)
						self.get_json_value('commonAddr',i)
						self.get_json_value('addr',i)
						
						if self.stop == 1:
							break

						with open ('test.csv','a',newline='') as f:
							writer = csv.writer(f)
							writer.writerow(self.write)

						self.write = []

			print('--------------------------------------')
            
if __name__ == &quot;__main__&quot;:
	
	# gu = sys.argv[1]
	# dong = sys.argv[2]
	
	cr = CRAWL()
	cr.get_seoul_code()
	cr.crawling()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;관련포스팅&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://liveyourit.tistory.com/40&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[파이썬] 보안 뉴스 기사 크롤링하기 (제목, 본문 원하는만큼)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1592125092744&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[파이썬] 보안 뉴스 기사 크롤링하기 (제목, 본문 원하는만큼)&quot; data-og-description=&quot;뉴스 기사 크롤링 첫번째 - 보안뉴스 뉴스 기사 크롤링, 뉴스 기사 크롤러 만들기 첫번째 대상은 '보안뉴스' 이다. 왜냐면 내가 보안 종사자이기 때문이다. 어쨌든 보안뉴스 #전체기사 부분에서 �&quot; data-og-host=&quot;liveyourit.tistory.com&quot; data-og-source-url=&quot;https://liveyourit.tistory.com/40&quot; data-og-url=&quot;https://liveyourit.tistory.com/40&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/BmFzb/hyGqkWnBwq/mTHvBbIYT953ulo2RdndHK/img.png?width=800&amp;amp;height=641&amp;amp;face=0_0_800_641,https://scrap.kakaocdn.net/dn/fp9sS/hyGqhSSVsF/NUt5DANiMdkuE3ChprGmPK/img.png?width=800&amp;amp;height=641&amp;amp;face=0_0_800_641,https://scrap.kakaocdn.net/dn/c73bOx/hyGoWW5N09/jScoKDb86DgJ7kKWzOM5r1/img.png?width=948&amp;amp;height=463&amp;amp;face=0_0_948_463&quot;&gt;&lt;a href=&quot;https://liveyourit.tistory.com/40&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://liveyourit.tistory.com/40&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/BmFzb/hyGqkWnBwq/mTHvBbIYT953ulo2RdndHK/img.png?width=800&amp;amp;height=641&amp;amp;face=0_0_800_641,https://scrap.kakaocdn.net/dn/fp9sS/hyGqhSSVsF/NUt5DANiMdkuE3ChprGmPK/img.png?width=800&amp;amp;height=641&amp;amp;face=0_0_800_641,https://scrap.kakaocdn.net/dn/c73bOx/hyGoWW5N09/jScoKDb86DgJ7kKWzOM5r1/img.png?width=948&amp;amp;height=463&amp;amp;face=0_0_948_463');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[파이썬] 보안 뉴스 기사 크롤링하기 (제목, 본문 원하는만큼)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;뉴스 기사 크롤링 첫번째 - 보안뉴스 뉴스 기사 크롤링, 뉴스 기사 크롤러 만들기 첫번째 대상은 '보안뉴스' 이다. 왜냐면 내가 보안 종사자이기 때문이다. 어쨌든 보안뉴스 #전체기사 부분에서 �&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;liveyourit.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://liveyourit.tistory.com/25&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[파이썬] 동적 웹 크롤링 (4) - Selenium을 이용한 비트코인 거래소 크롤링&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1592125091810&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[파이썬] 동적 웹 크롤링 (4) - Selenium을 이용한 비트코인 거래소 크롤링&quot; data-og-description=&quot;이전 포스팅에서 알아보았던 Selenium(셀레니움) 사용법을 활용해서 비트코인 거래소 중 하나인 고팍스 메인페이지의 암호화폐 테이블 전체를 크롤링해서 엑셀에 저장해보려 한다. 참고로, webdrive&quot; data-og-host=&quot;liveyourit.tistory.com&quot; data-og-source-url=&quot;https://liveyourit.tistory.com/25&quot; data-og-url=&quot;https://liveyourit.tistory.com/25&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/h9nUv/hyGoVYdkgW/7fXCPtop4zJbYN9WEcUeik/img.png?width=800&amp;amp;height=459&amp;amp;face=0_0_800_459,https://scrap.kakaocdn.net/dn/bGvEu7/hyGoNTqYcm/x7GKCQ47JhuZDKcCJ0yzwK/img.png?width=800&amp;amp;height=459&amp;amp;face=0_0_800_459,https://scrap.kakaocdn.net/dn/DB4Hr/hyGqcjJVi5/dCbIEBTRcteUBGTEOuCjg1/img.png?width=1150&amp;amp;height=661&amp;amp;face=0_0_1150_661&quot;&gt;&lt;a href=&quot;https://liveyourit.tistory.com/25&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://liveyourit.tistory.com/25&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/h9nUv/hyGoVYdkgW/7fXCPtop4zJbYN9WEcUeik/img.png?width=800&amp;amp;height=459&amp;amp;face=0_0_800_459,https://scrap.kakaocdn.net/dn/bGvEu7/hyGoNTqYcm/x7GKCQ47JhuZDKcCJ0yzwK/img.png?width=800&amp;amp;height=459&amp;amp;face=0_0_800_459,https://scrap.kakaocdn.net/dn/DB4Hr/hyGqcjJVi5/dCbIEBTRcteUBGTEOuCjg1/img.png?width=1150&amp;amp;height=661&amp;amp;face=0_0_1150_661');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[파이썬] 동적 웹 크롤링 (4) - Selenium을 이용한 비트코인 거래소 크롤링&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;이전 포스팅에서 알아보았던 Selenium(셀레니움) 사용법을 활용해서 비트코인 거래소 중 하나인 고팍스 메인페이지의 암호화폐 테이블 전체를 크롤링해서 엑셀에 저장해보려 한다. 참고로, webdrive&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;liveyourit.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/파이썬</category>
      <category>크롤링</category>
      <category>파이썬</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/245</guid>
      <comments>https://liveyourit.tistory.com/245#entry245comment</comments>
      <pubDate>Sat, 13 Jun 2020 23:40:26 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] 네이버 플레이스, 맛집 (JSON 데이터) 크롤링 (1)</title>
      <link>https://liveyourit.tistory.com/244</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;+) &lt;span style=&quot;color: #333333;&quot;&gt;+)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;제가 크롤링에 사용한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;URL 서비스 자체(store.naver.com)가 중단되고 새롭게 개편된 것으로 확인&lt;/b&gt;&lt;/span&gt;됩니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;따라서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;아래 코드에 사용된 URL로는 현재 크롤링이 불가&lt;/b&gt;하니&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;JSON 응답값을 주는 사이트의 크롤링 코드 작성 방법, 방식 위주로만 확인&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;부탁드립니다!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;빅데이터 관련 수업을 들은 적이 있는데 뭔가 데이터 처리를 하기 전에 일단 데이터를 크롤링해와야 했던 과제가 있었다. 네이버 플레이스에서 맛집을 크롤링해보기로 해서 약 12만 건? 정도 크롤링했었다. &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이번 포스팅에서는 네이버 플레이스에서 &lt;b&gt;서울시 맛집을 구/동별로 크롤링하는 코드&lt;/b&gt;를 소개해보려 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서울시 구/동 정보, 파일에 저장해놓기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서울시의 구/동 정보를 먼저 탐색하는 이유는 두가지이다. 첫 번째는 크롤링할 때, URL 매개변수로 구/동을 전달하기 위함인데 &lt;span style=&quot;color: #333333;&quot;&gt;구/동 기준으로 크롤링하기 위함이라고 보면 된다. 두번째는 나중에 크롤링된 데이터를 활용할 때, 구/동으로 검색이 가능하도록 GUI를 구성하도록 하기 위함이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;크롤링할 때, URL 매개변수로 구/동을 전달하기 위해&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;나중에 구/동으로 검색 시, 크롤링된 데이터에서 결과를 찾아주는 시스템으로 만들기 위해 (GUI)&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;어쨌든 그러기 위해선 정확한 &lt;b&gt;서울시의 행정구역 정보&lt;/b&gt;가 필요한데 서울 공공포털에서 다운받은 공공데이터를 활용했다. 아래 링크에 나와있는 &lt;u&gt;서울 열린데이터광장의 데이터셋에서 동별을 검색&lt;/u&gt;하면 서울시 동별 관련 통계자료를 여러 개 볼 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://data.seoul.go.kr/dataList/datasetList.do#&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;서울 열린데이터광장, 공공 데이터셋(동별)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;589&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg5KHk/btqEMws83Pu/p4jduLM0HYY2tzKyGvB6VK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg5KHk/btqEMws83Pu/p4jduLM0HYY2tzKyGvB6VK/img.png&quot; data-alt=&quot;서울 열린데이터광장, 공공 데이터셋 (동별)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg5KHk/btqEMws83Pu/p4jduLM0HYY2tzKyGvB6VK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg5KHk%2FbtqEMws83Pu%2Fp4jduLM0HYY2tzKyGvB6VK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;589&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;서울 열린데이터광장, 공공 데이터셋 (동별)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그중 아무거나 다운로드하여서 아래 사진과 같이&amp;nbsp;&lt;/span&gt;&lt;u&gt;구/동 정보만 따로 txt에 저장&lt;/u&gt;해놓았다. 나중에 엑셀파일(seoul_code.txt)에서 구/동정보를 긁어서 파이썬 딕셔너리에 저장할 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;260&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvcEyE/btqEPfLqXaA/fCFZ64htDEfqsIjV4LCTO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvcEyE/btqEPfLqXaA/fCFZ64htDEfqsIjV4LCTO0/img.png&quot; data-alt=&quot;서울시 구/동 행정구역 정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvcEyE/btqEPfLqXaA/fCFZ64htDEfqsIjV4LCTO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvcEyE%2FbtqEPfLqXaA%2FfCFZ64htDEfqsIjV4LCTO0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;260&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;서울시 구/동 행정구역 정보&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;서울시 구/동 정보 얻어오기&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;seoul_code.txt 파일을 읽어 &lt;b&gt;구/동 정보를 seoul_dict 딕셔너리에 저장&lt;/b&gt;한다. 행 단위로 읽으면서 &quot;,&quot;를 기준으로 구와 동을 나누고, 동은 dong_list에 추가시키고 딕셔너리의 key는 구로 설정한다. 그리고 '\n'을 만나면 하나의 구가 끝났다는 것이므로 추가해온 dong_list를 딕셔너리에 추가해준다. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;딕셔너리에 넣든, 이중 리스트에 넣든, 어찌 됐든 구와 동을 편한 대로 자료구조에 저장하면 된다. 본격적인 크롤링 시, 각 구/동을 기준으로 루프를 돌게 된다. &lt;span style=&quot;color: #333333;&quot;&gt;참고로, 이 다음부터의 CRAWL 클래스 내부의 함수는 탭이 너무 많아져서 함수만 따로 분리해 작성한다. &lt;s&gt;탭간격 조정이 되면 좋을 텐데.. 탭 간격이 너무 크다ㅠㅠ&lt;/s&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1591908386721&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class CRAWL:
	
	def __init__(self):
		
		self.seoul_dict = {}
	
	# seoul_code.txt -&amp;gt; dictionary
	def get_seoul_code(self):
		
		dong_list = []
		with open(&quot;seoul_code.txt&quot;,&quot;rt&quot;,encoding='UTF8') as f:
			for line in f:
				if line == '\n':
					self.seoul_dict[key] = dong_list
					dong_list = []
					continue

				tmp = line.split(&quot;,&quot;)
				gu = tmp[0]
				dong = tmp[1].replace(&quot;\n&quot;,&quot;&quot;)

				dong_list.append(dong)
				key = gu	&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;크롤링 대상 페이지 선정 : 네이버 플레이스&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;맛집 정보를 어디서 크롤링할까 하다가 &lt;b&gt;네이버 플레이스&lt;/b&gt;를 활용하기로 했다. 네이버 플레이스는 그냥 검색창에 검색을 해보니 '네이버 MY플레이스', '네이버 스마트플레이스' 이것밖에 안 나오던데... 이 2개는 다른 페이지이다. 네이버 검색창에 예를 들어 '신림동 맛집'을 검색하면 아래와 같이 검색 결과가 뜨고, &lt;span style=&quot;color: #333333;&quot;&gt;검색 결과 중 하나를 클릭하면, 네이버 플레이스 페이지가 나온다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;576&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vgmu7/btqEOEqlpq3/lQAPtc6zc0I8klNvQHkp2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vgmu7/btqEOEqlpq3/lQAPtc6zc0I8klNvQHkp2k/img.png&quot; data-alt=&quot;네이버 플레이스, 맛집 검색 (1)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vgmu7/btqEOEqlpq3/lQAPtc6zc0I8klNvQHkp2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVgmu7%2FbtqEOEqlpq3%2FlQAPtc6zc0I8klNvQHkp2k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;576&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;네이버 플레이스, 맛집 검색 (1)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;530&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oTpcU/btqEOOGfZZc/jblHTCX2thixGAG9LueNV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oTpcU/btqEOOGfZZc/jblHTCX2thixGAG9LueNV0/img.png&quot; data-alt=&quot;네이버 플레이스, 맛집 검색 (2)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oTpcU/btqEOOGfZZc/jblHTCX2thixGAG9LueNV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoTpcU%2FbtqEOOGfZZc%2FjblHTCX2thixGAG9LueNV0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;530&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;네이버 플레이스, 맛집 검색 (2)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;크롤링 URL 매개변수 구성 및 요청&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;URL을 보면, &quot;store.naver.com/restaurants/detail?id=XXXXX&quot; 이런 식인데 이 URL 형식으로는 구/동별로 크롤링하기가 당연히 힘들기 때문에 아래 URL을 사용했다. 아래 URL은 네이버 플레이스 크롤링해봤던 연구실 친구가 크롤링하기 편하다고 해서 알려줬는데 진짜 편하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&quot;store.naver.com/sogum/api/businesses?&lt;span style=&quot;color: #ee2323;&quot;&gt;start=1&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #009a87;&quot;&gt;display=100&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #006dd7;&quot;&gt;query=관악구+신림동+맛집&lt;/span&gt;&amp;amp;sortingOrder=reviewCount&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;매개변수가 3개인데, &lt;u&gt;start는 페이지 수를 넘기는 부분&lt;/u&gt;이고 &lt;u&gt;display는 페이지 당 보여지는 수&lt;/u&gt;이고 query는 검색 쿼리를 입력하면 된다. display는 100으로 고정해놓을 것이고, start는 일단 코드가 전체적으로 잘 돌아가는 것을 확인하는 것이 먼저이므로 10까지 할 것인데 10까지 검색이 안 되는 경우를 따로 처리를 해주어야 한다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;query는 &quot;[구]+[동]+맛집&quot;으로 구성&lt;/b&gt;할 것이다. 여기서 구/동은 위에서 저장해놓은 seoul_dict을 이용하면 된다. sortingOrder는 reviewCount로 리뷰 수가 많은 순대로 정렬되도록 했는데 단순히 '리뷰 수가 많은 음식점은 맛집으로 생각하자'라고 전제했기 때문이다. 사실, 각 구/동 별 크롤링하는 음식점 수가 많기 때문에 상위 몇 개의 음식점을 제외하곤 맛집이라고 생각하기 곤란할 수 있다. 맛집을 구체적으로 선별하기 위해선 이다음 포스팅에서 파싱하는 데이터 중 리뷰수를 파싱해서 직접 절대적인 리뷰수를 조건으로 설정해놓던가, 아니면 다른 방식을 생각해서 적용하던가 해야 할 듯하다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;아래 코드에서 볼 수 있듯이, 딕셔너리/동리스트/start변수 해서 총 3중 for문을 돌게 되는데 이 방법 말고 현재로써는 딱히 떠오르는 게 없어서 의식의 흐름대로 작성했다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;s&gt;혹시 이것보다 좀 더 시간효율적인 방법이 있다면 댓글로 남겨주시면 감사하겠습니다.&lt;/s&gt; 또한, 혹시 몰라 request.get(url) 앞에 sleep을 주었다. 이다음 포스팅에서 언급하는데, 처음에는 seep을 1 정도로 주었었는데 중간에 크롤링이 막히는 문제가 있어 5 정도로 주니 해결이 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592050506912&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# start crawling
def crawling(self):

	print('[*] Start Crawling...')
	f = open('test.csv','w',encoding='utf-8-sig', newline='')
	f.close()
        
	# loop for gu/dong
	for gu,dong_list in self.seoul_dict.items():
		print('-'+gu)

		for dong in dong_list:
			print('  -'+dong)

			gu_dong = gu+'+'+dong+'+'+u'맛집'
			display = 100
				
			#send query(start:1,display:100-&amp;gt;start:101,display:100 ...)
			for start in range(1,11):
				url = 'https://store.naver.com/sogum/api/businesses?start='+str(start) \
				+'&amp;amp;display='+str(display) \
				+'&amp;amp;query='+gu_dong \
				+'&amp;amp;sortingOrder=reviewCount' \

				time.sleep(5)
				data = requests.get(url)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위 URL을 직접 확인해보면, 아래와 같이 json 데이터임을 확인할 수 있다. json 데이터이기 때문에 파이썬의 json 모듈을 사용해서 파싱해줄 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;566&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JhVLJ/btqEOZauFg7/RHXo0W5RisWNr84ZbkexIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JhVLJ/btqEOZauFg7/RHXo0W5RisWNr84ZbkexIK/img.png&quot; data-alt=&quot;네이버 플레이스, JSON 데이터 (query)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JhVLJ/btqEOZauFg7/RHXo0W5RisWNr84ZbkexIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJhVLJ%2FbtqEOZauFg7%2FRHXo0W5RisWNr84ZbkexIK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;566&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;네이버 플레이스, JSON 데이터 (query)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위 데이터는 query 부분이고 아래부터 각 음식점 별 정보가 저장되어 있는 items가 리스트 형태로 쭉 나열되어 있는 구조이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGwzcd/btqEOZ2XDd9/u4Hh160fz8KK0kXkTdC2kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGwzcd/btqEOZ2XDd9/u4Hh160fz8KK0kXkTdC2kK/img.png&quot; data-alt=&quot;네이버 플레이스, JSON 데이터 (items)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGwzcd/btqEOZ2XDd9/u4Hh160fz8KK0kXkTdC2kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGwzcd%2FbtqEOZ2XDd9%2Fu4Hh160fz8KK0kXkTdC2kK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;네이버 플레이스, JSON 데이터 (items)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;참고로, json 데이터는 그냥 보면 가독성이 매우 떨어지기 때문에 크롬일 경우 JSONView와 같은 확장 프로그램을 설치해놓는 것이 좋다. 관련 내용은 아래 포스팅을 확인하길 바란다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://liveyourit.tistory.com/243&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[크롬 확장프로그램] JSONView로 json 데이터 가독성있게 보기&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1591967541675&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[크롬 확장프로그램] JSONView로 json 데이터 가독성있게 보기&quot; data-og-description=&quot;크롬 확장프로그램, JSONView 크롤링을 하거나 기타 등의 작업을 하다보면 JSON 데이터를 마주하게될 때가 있는데 이 때 추천하는 크롬 확장프로그램 중 하나가 바로 JSONView이다. 프로그램 이름으로&quot; data-og-host=&quot;liveyourit.tistory.com&quot; data-og-source-url=&quot;https://liveyourit.tistory.com/243&quot; data-og-url=&quot;https://liveyourit.tistory.com/243&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ckVFpl/hyGnKWQhm3/96cpEvehdWIJZN8tLGAOL0/img.png?width=800&amp;amp;height=341&amp;amp;face=0_0_800_341,https://scrap.kakaocdn.net/dn/bzohF2/hyGnStMxMg/K9dtGPgJeHb6CwpOegHZB0/img.png?width=800&amp;amp;height=341&amp;amp;face=0_0_800_341,https://scrap.kakaocdn.net/dn/fbH0f/hyGoRGN9nj/kOKy6n4NyAGWAMsI7VsSQ1/img.png?width=1169&amp;amp;height=883&amp;amp;face=0_0_1169_883&quot;&gt;&lt;a href=&quot;https://liveyourit.tistory.com/243&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://liveyourit.tistory.com/243&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ckVFpl/hyGnKWQhm3/96cpEvehdWIJZN8tLGAOL0/img.png?width=800&amp;amp;height=341&amp;amp;face=0_0_800_341,https://scrap.kakaocdn.net/dn/bzohF2/hyGnStMxMg/K9dtGPgJeHb6CwpOegHZB0/img.png?width=800&amp;amp;height=341&amp;amp;face=0_0_800_341,https://scrap.kakaocdn.net/dn/fbH0f/hyGoRGN9nj/kOKy6n4NyAGWAMsI7VsSQ1/img.png?width=1169&amp;amp;height=883&amp;amp;face=0_0_1169_883');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[크롬 확장프로그램] JSONView로 json 데이터 가독성있게 보기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;크롬 확장프로그램, JSONView 크롤링을 하거나 기타 등의 작업을 하다보면 JSON 데이터를 마주하게될 때가 있는데 이 때 추천하는 크롬 확장프로그램 중 하나가 바로 JSONView이다. 프로그램 이름으로&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;liveyourit.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;보통 페이지가 1000까지 가는 경우는 당연히 없을 것이기 때문에 상태 코드가 어떻게 나오는지 좀 확인을 해보면, 상태코드가 500으로 찍힌다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;680&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xTbcn/btqEOPeDVyL/Jaued3YyQrdX8U6ZV02Ih0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xTbcn/btqEOPeDVyL/Jaued3YyQrdX8U6ZV02Ih0/img.png&quot; data-alt=&quot;네이버 플레이스 크롤링, 상태코드 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xTbcn/btqEOPeDVyL/Jaued3YyQrdX8U6ZV02Ih0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxTbcn%2FbtqEOPeDVyL%2FJaued3YyQrdX8U6ZV02Ih0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;680&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;네이버 플레이스 크롤링, 상태코드 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;따라서&amp;nbsp;&lt;/span&gt;&lt;u&gt;상태 코드를 체크해주어 500일 경우 반복문을 끝내는 구문을 추가&lt;/u&gt;&lt;span style=&quot;color: #333333;&quot;&gt;해야 한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592050755744&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# start crawling
def crawling(self):
    
	# 코드...
    
	# get data and check status code
	if data.status_code == 500: break&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;네이버 플레이스, 크롤링 전체 코드 (일부)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여기까지의 전체 코드는 아래와 같다. 코드를 보면 알겠지만, 결국 각 구의 각 동별로 위에서 봤던 쿼리를 날리는 방식이다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1591955882391&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#-*-coding:utf-8-*-
import os
import sys
import json
import time
import requests
import csv

class CRAWL:
	
	def __init__(self):
		
		self.seoul_dict = {}
		self.tmp_list = []
		self.data = []
		self.write = []
	
	# seoul_code.xlsx -&amp;gt; dictionary
	def get_seoul_code(self):
		
		dong_list = []
		with open(&quot;seoul_code.txt&quot;,&quot;rt&quot;,encoding='UTF8') as f:
			for line in f:
				if line == '\n':
					self.seoul_dict[key] = dong_list
					dong_list = []
					continue

				tmp = line.split(&quot;,&quot;)
				gu = tmp[0]
				dong = tmp[1].replace(&quot;\n&quot;,&quot;&quot;)

				dong_list.append(dong)
				key = gu		


	# parsing json data using items
	def get_json_value(self,key,i):
		
		try:
			if key in self.data[&quot;items&quot;][i]:
				value = self.data[&quot;items&quot;][i][key]
				#self.tmp += value
				self.write.append(value)
			else:
				#self.tmp += &quot;N&quot;
				self.write.append(&quot;None&quot;)
		except:
			self.stop = 1

	# start crawling
	def crawling(self):
		
		print('[*] Start Crawling...')
		f = open('test.csv','w',encoding='utf-8-sig', newline='')
		f.close()

		#loop for gu/dong
		for gu,dong_list in self.seoul_dict.items():
			print('-'+gu)

			for dong in dong_list:
				print('  -'+dong)

				gu_dong = gu+'+'+dong+'+'+u'맛집'
				display = 100
				
				self.stop = 0
                
				# send query
				for start in range(1,6):
					url = 'https://store.naver.com/sogum/api/businesses?start='+str(start) \
					+'&amp;amp;display='+str(display) \
					+'&amp;amp;query='+gu_dong \
					+'&amp;amp;sortingOrder=reviewCount' \

					# request url
					time.sleep(5)
					data = requests.get(url)

					#get data and check status code
					if data.status_code == 500: break
                
        # 코드...


if __name__ == &quot;__main__&quot;:
	
	# gu = sys.argv[1]
	# dong = sys.argv[2]
	
	cr = CRAWL()
	cr.get_seoul_code()&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;생각보다 포스팅이 길어져서 크롤링한&lt;span&gt; 데이터를 파이썬&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;j&lt;/u&gt;&lt;b&gt;son 모듈을 사용해 파싱하고 저장하는 내용과 코드&lt;/b&gt;는 아래 다음포스팅에서 이어서 작성하도록 하겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #006dd7; color: #ffffff;&quot;&gt;다음포스팅&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://liveyourit.tistory.com/245&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[파이썬] 네이버 플레이스, 맛집 (JSON 데이터) 크롤링 (2)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1592060153392&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[파이썬] 네이버 플레이스, 맛집 (JSON 데이터) 크롤링 (2)&quot; data-og-description=&quot;저번 포스팅에서 서울시의 구/동 별로 카테고리를 나누어 크롤링하기 위해 서울시 행정구역 정보를 저장했고, 크롤링 URL을 구성하기 위한 작업을 선행했다. 그리고 해당 URL 요청을 통해 응답을 &quot; data-og-host=&quot;liveyourit.tistory.com&quot; data-og-source-url=&quot;https://liveyourit.tistory.com/245&quot; data-og-url=&quot;https://liveyourit.tistory.com/245&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bYPpZW/hyGoL8xIuk/96KOqtzEo3vv8Beo7KDRl1/img.png?width=800&amp;amp;height=681&amp;amp;face=0_0_800_681,https://scrap.kakaocdn.net/dn/7l1Yr/hyGoWhXAOT/xEOEPeG3BgDl81bUwWWk91/img.png?width=800&amp;amp;height=681&amp;amp;face=0_0_800_681,https://scrap.kakaocdn.net/dn/kBoFE/hyGoZTftB0/6Ua7jeAdcCgCGAk5rGRZt1/img.png?width=1436&amp;amp;height=704&amp;amp;face=0_0_1436_704&quot;&gt;&lt;a href=&quot;https://liveyourit.tistory.com/245&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://liveyourit.tistory.com/245&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bYPpZW/hyGoL8xIuk/96KOqtzEo3vv8Beo7KDRl1/img.png?width=800&amp;amp;height=681&amp;amp;face=0_0_800_681,https://scrap.kakaocdn.net/dn/7l1Yr/hyGoWhXAOT/xEOEPeG3BgDl81bUwWWk91/img.png?width=800&amp;amp;height=681&amp;amp;face=0_0_800_681,https://scrap.kakaocdn.net/dn/kBoFE/hyGoZTftB0/6Ua7jeAdcCgCGAk5rGRZt1/img.png?width=1436&amp;amp;height=704&amp;amp;face=0_0_1436_704');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[파이썬] 네이버 플레이스, 맛집 (JSON 데이터) 크롤링 (2)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;저번 포스팅에서 서울시의 구/동 별로 카테고리를 나누어 크롤링하기 위해 서울시 행정구역 정보를 저장했고, 크롤링 URL을 구성하기 위한 작업을 선행했다. 그리고 해당 URL 요청을 통해 응답을&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;liveyourit.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/파이썬</category>
      <category>크롤링</category>
      <category>파이썬</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/244</guid>
      <comments>https://liveyourit.tistory.com/244#entry244comment</comments>
      <pubDate>Fri, 12 Jun 2020 22:21:45 +0900</pubDate>
    </item>
    <item>
      <title>[크롬 확장프로그램] JSONView로 json 데이터 가독성있게 보기</title>
      <link>https://liveyourit.tistory.com/243</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;크롬 확장프로그램, JSONView&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;크롤링을 하거나 기타 등의 작업을 하다보면 JSON 데이터를 마주하게될 때가 있는데 이 때 추천하는 크롬 확장프로그램 중 하나가 바로 &lt;span style=&quot;background-color: #006dd7; color: #ffffff;&quot;&gt;JSONView&lt;/span&gt;이다. 프로그램 이름으로도 기능을 쉽게 유추할 수 있는데, 바로 JSON&lt;b&gt;&amp;nbsp;데이터를 가독성있게 볼 수 있도록 해주는 확장프로그램&lt;/b&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size18&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;JSON이란? (출처: 위키백과)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;JSON(JavaScript Object Notation)은 &quot;속성-값&quot; 쌍 또는 &quot;키-값 쌍&quot;으로 이루어진 데이터 오브젝트를 전달하기 위한 개방형 표준 포맷이다. 본래는 자바스크립트 언어로부터 파생되어 자바스크립트의 구문 형식을 따르지만 언어 독립형 데이터 포맷이다.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;JSONView 설치&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;크롬 확장프로그램이기 때문에 설치는 매우 쉽다. 크롬 웹스토어의 해당 &lt;a href=&quot;https://chrome.google.com/webstore/search/jsonview?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;에서 'Chrome에 추가'를 클릭한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;647&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OJ3jr/btqEOaI5veR/Hk6ARDpwYJy3UloLrPydzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OJ3jr/btqEOaI5veR/Hk6ARDpwYJy3UloLrPydzK/img.png&quot; data-alt=&quot;크롬 확장프로그램, JSONView&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OJ3jr/btqEOaI5veR/Hk6ARDpwYJy3UloLrPydzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOJ3jr%2FbtqEOaI5veR%2FHk6ARDpwYJy3UloLrPydzK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;647&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;크롬 확장프로그램, JSONView&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;'Chrome에 추가' 클릭 후 뜨는 아래의 창에서 '확장 프로그램 추가'를 클릭해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;593&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vY9jK/btqENaiXu7C/laaTD4Iz5OjrPw79wkQ0EK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vY9jK/btqENaiXu7C/laaTD4Iz5OjrPw79wkQ0EK/img.png&quot; data-alt=&quot;크롬 확장프로그램, JSONView 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vY9jK/btqENaiXu7C/laaTD4Iz5OjrPw79wkQ0EK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvY9jK%2FbtqENaiXu7C%2FlaaTD4Iz5OjrPw79wkQ0EK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;593&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;크롬 확장프로그램, JSONView 추가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;제대로 설치가 됐으면 아래와 같이 크롬 오른쪽 윗부분에 JSONView가 추가된 것을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;418&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lBJqI/btqEN8R2EL2/zKkSqaeQKMVR9YV2VniF8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lBJqI/btqEN8R2EL2/zKkSqaeQKMVR9YV2VniF8k/img.png&quot; data-alt=&quot;크롬 확장프로그램, JSONView 추가됨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lBJqI/btqEN8R2EL2/zKkSqaeQKMVR9YV2VniF8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlBJqI%2FbtqEN8R2EL2%2FzKkSqaeQKMVR9YV2VniF8k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;418&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;크롬 확장프로그램, JSONView 추가됨&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;JSONView 설치 전후 비교&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그럼 실제로 JSONView 설치 전후가 어떻게 다른지 확인해보자. 아래는 JSONView를 설치하기 전 쌩자? 그대로 JSON 데이터를 본 경우이다. 딱봐도 한눈에 보기 굉장히 힘들다. 특히나 크롤링을 하는 경우에는 정확히 어떤 부분이 무엇을 의미하고 구조가 어떻게 되는지 확인을 해야하는데 이런식이면 빠르게 파악하기가 아무래도 힘들다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;689&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9zfCC/btqEN94t2ON/6YaYSszk3UF5CQePzIq7V1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9zfCC/btqEN94t2ON/6YaYSszk3UF5CQePzIq7V1/img.png&quot; data-alt=&quot;JSONView 설치 전의 JSON 데이터&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9zfCC/btqEN94t2ON/6YaYSszk3UF5CQePzIq7V1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9zfCC%2FbtqEN94t2ON%2F6YaYSszk3UF5CQePzIq7V1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;689&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;JSONView 설치 전의 JSON 데이터&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그렇다면, JSONView를 설치하고난 후의 JSON 데이터는 어떻게 보여질까. 아래 보는 것처럼 키:값 쌍대로 JSON 포맷을 정렬해서 보여주기 때문에 가독성이 좋아지게 된다 :)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;716&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/efoXDw/btqELQ6NwMi/iNqqqPpaRxr3VpCVUrLhK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/efoXDw/btqELQ6NwMi/iNqqqPpaRxr3VpCVUrLhK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/efoXDw/btqELQ6NwMi/iNqqqPpaRxr3VpCVUrLhK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FefoXDw%2FbtqELQ6NwMi%2FiNqqqPpaRxr3VpCVUrLhK0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;716&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.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&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/일반</category>
      <category>크롬</category>
      <category>확장프로그램</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/243</guid>
      <comments>https://liveyourit.tistory.com/243#entry243comment</comments>
      <pubDate>Thu, 11 Jun 2020 22:57:35 +0900</pubDate>
    </item>
    <item>
      <title>KISA, 침해사고 분석 절차 안내서</title>
      <link>https://liveyourit.tistory.com/192</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당 포스팅은 KISA의 &lt;a href=&quot;https://www.kisa.or.kr/jsp/common/downloadAction.jsp?bno=259&amp;amp;dno=48&amp;amp;fseq=1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&amp;lt;침해사고 분석 절차 안내서&amp;gt;&lt;/a&gt;와 &amp;lt;침해사고 대응 절차&amp;gt;에서 필요한 부분을 추출해 요약한 내용 +a 를 담고 있습니다. &lt;s&gt;혹시 문제가될 시 즉시 삭제하겠습니다.&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFsBP9/btqD4yqxsWn/4HmeesqKdG56ylLpekNzh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFsBP9/btqD4yqxsWn/4HmeesqKdG56ylLpekNzh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFsBP9/btqD4yqxsWn/4HmeesqKdG56ylLpekNzh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFsBP9%2FbtqD4yqxsWn%2F4HmeesqKdG56ylLpekNzh1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서론&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;인터넷 침해사고를 일으키는 해킹 기법이 지능화됨에 따라 침해사고에 대한 분석도 어려워지고 있다. 홈페이지 악성코드 은닉사고의 경우도 다양한 방법으로 악성코드를 숨기고 있으며, 악성 Bot도 탐지가 어려운 루트킷과 결합되어 탐지가 어려워지고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;본 안내서에서는 해킹피해 기관이나 개인이 침해사고를 당했을 때 이에 대응하기 위한 분석절차와 기술을 제시한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단계별 침해사고 분석 절차&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사고대응 방법론&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사고 탐지, 초기 대응, 대응전략 체계화, 사고 조사, 보고서 작성, 해결의 순으로 이루어진다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사고 탐지 : 정보보호 및 네트워크 장비에 의한 이상 징후 탐지. 관리자에 의한 침해 사고의 식별 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;초기 대응 : 초기 조사 수행, 사고 정황에 대한 기본적인 세부사항 기록, 사고대응팀 신고 및 소집, 침해사고 관련 부서에 통지 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;대응 전략 체계화 : 최적의 전략을 결정하고 관리자 승인을 획득, 초기 조사 결과를 참고하여 소송이 필요한 사항인지를 결정하여 사고 조사 과정에 수사기관 공조 여부를 판단&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사고 조사 : 데이터 수집 및 분석을 통하여 수행. 언제, 누가, 어떻게 사고가 일어났는&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;지, 피해 확산 및 사고 재발을 어떻게 방지할 것인지를 결정 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;보고서 작성 : 의사 결정자가 쉽게 이해할 수 있는 형태로 사고에 대한 정확한 보고서&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;를 작성 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해결 : 차기 유사 공격을 식별 및 예방하기 위한 보안 정책의 수립, 절차 변경, 사건의 &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기록,&amp;nbsp;장기&amp;nbsp;보안&amp;nbsp;정책&amp;nbsp;수립,&amp;nbsp;기술&amp;nbsp;수정&amp;nbsp;계획수립&amp;nbsp;등을&amp;nbsp;결정&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사고탐지&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사고 탐지는 시스템 및 네트워크 사용자 또는 관리자에 의해 탐지되며, 침입탐지 시스템, 방화벽과 같은 정보보호 장비들에 의해 그 세부 기록을 확인할 수 있다. 사고 징후로는 아래와 같은 것들이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IDS가 탐지한 원격 접속&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여러번의&amp;nbsp;로그인&amp;nbsp;실패 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;관리자가&amp;nbsp;생성하지&amp;nbsp;않은&amp;nbsp;계정&amp;nbsp;발견 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;유휴&amp;nbsp;상태&amp;nbsp;및&amp;nbsp;디폴트&amp;nbsp;계정의&amp;nbsp;로그인&amp;nbsp;시도 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서비스&amp;nbsp;미&amp;nbsp;제공시간&amp;nbsp;동안의&amp;nbsp;시스템&amp;nbsp;활동 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;출처&amp;nbsp;불명의&amp;nbsp;파일&amp;nbsp;또는&amp;nbsp;프로그램&amp;nbsp;발견 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;설명할&amp;nbsp;수&amp;nbsp;없는&amp;nbsp;권한&amp;nbsp;상승 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;웹서버의 경고 페이지 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;로그 파일, 내용의 삭제 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시스템 성능 저하, 시스템 충돌 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이메일 도청 증거 발견 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;음란 사진 및 동영상&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;초기대응&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;조사의&amp;nbsp;초기&amp;nbsp;단계는&amp;nbsp;적절한&amp;nbsp;대응을&amp;nbsp;위한&amp;nbsp;충분한&amp;nbsp;정보를&amp;nbsp;얻는&amp;nbsp;것이다.&amp;nbsp;초기&amp;nbsp;대응은&amp;nbsp;침해사 고&amp;nbsp;대응팀을&amp;nbsp;소집하고,&amp;nbsp;네트워크와&amp;nbsp;시스템의&amp;nbsp;정보들을&amp;nbsp;수집하며,&amp;nbsp;발생한&amp;nbsp;사건의&amp;nbsp;유형&amp;nbsp;식별 과&amp;nbsp;영향&amp;nbsp;평가를&amp;nbsp;포함한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사건의 기술적인 내용을 통찰할 수 있는 시스템 관리자와 면담 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사건 분석을 위한 정황을 제공해 줄 수 있는 인원들과의 면담 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;침입 탐지 로그와 데이터 식별을 위한 네트워크 기반 로그의 분석 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;공격 경로와 수단을 알아내기 위한 네트워크 구조와 접근 통제 리스트의 분석&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;대응전략 수립&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;공격 환경과 대응능력을 고려해 다양한 대응 전략을 수립해야 한다. 예를 들어, DDoS 공격의 경우 Flooding 효과를 최소화하기 위해 라우터를 재설정할 수 있고 ISP, 수사기관과 협력해 공격자를 밝혀 법적 조치를 강구해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사고조사&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사고조사는 누가, 무엇을, 언제, 어디서 그리고 어떤 정보가 사고와 관련된 것인지를 확인하기 위한 과정으로 데이터 수집과 자료 분석 단계로 나뉜다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터를 수집하는 동안 수집한 정보는 기본적으로 호스트 기반 정보, 네트워크 기반 정&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;보와 그밖에 일반적인 정보로 나뉠 수 있다. &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;호스트 기반 정보는 네트워크에서 얻어진 것이 아니라 시스템에서 얻어진 로그, 레코드, &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문서 그리고 또 다른 정보들을 포함한다. 예를 들면, 호스트 기반 정보는 특정기간 동안 증&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;거를 보관하고 있었던 시스템 백업일 수도 있다. &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;호스트 기반 데이터 수집은 일단 휘발성 데이터&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;를 우선 수집한 후 포렌식 이미징 작업을 통해서 정보를 모아야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음은 수집해야 할 휘발성 데이터의 종류이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시스템 날짜와 시간 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시스템에서 현재 동작 중인 어플리케이션 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;현재 연결이 성립된 네트워크 상황 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;현재 열려진 소켓(포트) &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;열려진 소켓 상에서 대기하고 있는 어플리케이션 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;네트워크 인터페이스의 상태 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;메모리 정보 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;현재 열려진 파일 &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시스템 패치 상황&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;네트워크&amp;nbsp;기반&amp;nbsp;증거는&amp;nbsp;다음의&amp;nbsp;정보를&amp;nbsp;포함하고&amp;nbsp;있다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IDS 로그&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;관련자의 허락을 득한 네트워크 모니터링의 기록&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ISP 가입자 이용 기록 장치/감시 장치의 로그&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;라우터 로그&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;방화벽 로그&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;인증 서버 로그&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터 분석은 모든 수집된 정보의 전체적인 조사를 의미한다. 이것은 로그 파일, 시스템 설정 파일, 웹 브라우저 히스토리 파일, 이메일 메시지와 첨부파일, 설치된 어플리케이션 그리고, 그림파일 등을 포함한다. 소프트웨어 분석, 시간/날짜 스탬프 분석, 키워드 검색, 그외의&amp;nbsp;필요한&amp;nbsp;조사과정을&amp;nbsp;수행한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;보고서 작성&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;복구 및 해결 과정&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;컴퓨터 보안사고 대응의 마지막 단계는 현재 발생한 사고로 인해 제 2, 제 3의 피해를 막&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;고 재발을 방지하기 위한 조치들이 이루어져야 한다. 이를 위해 다음과 같은 조치들을 취해&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;야&amp;nbsp;한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;조직의 위험 우선순위 식별&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사건의 본질을 기술 : 보안 사고의 원인과 호스트, 네트워크의 복원시 필요한 조치&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사건의 조치에 필요한 근원적이고 조직적인 원인 파악&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;침해 컴퓨터의 복구&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;네트워크, 호스트에 대해 밝혀진 취약점에 대한 조치(IDS, Access control, firewall)&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시스템을 개선할 책임자 지명&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시스템 개선이 이루어지고 있는지 추적&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;모든 복구 과정이나 대책의 유용성 검증&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;보안 정책 개선&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;침해사고 분석기술&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음의 내용들은 KISA의 공식 배포 자료들에 있는 내용이 아닌, 개인적으로 정리해놓은 내용이기에 공식적?인 절차나 내용은 아님을 밝힌다.&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;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;초기대응 - 사고 정황 확인 (휘발성 정보 수집)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;초기대응의 휘발성 정보 수집에서 아래와 같은 명령어들을 통해 사고 정황을 확인한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;의심 프로세스의 PID 확인&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$ ps -ef | grep X&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;의심 프로세스의 경로 확인 (ps 바이너리가 변조된 경우)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$ lsof&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;부모 프로세스가 존재하는지 확인&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$ pstree -H&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;root 권한으로 열려있는 pty가 있는지 확인&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$ w&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;열려있는 포트와 연결된 IP 확인&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$ netstat -anp&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;외부 PC에서 nmap으로 열려있는 포트 확인&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$nmap -sT -p -65535 [서버IP]&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;열린 포트를 어떤 프로세스가 사용하는지 확인&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$ fuser [포트/tcp]&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;루트킷 탐지&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;// Rootkit Hunter 사용&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;웹쉘 탐지&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;// WHISTL 사용&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;보안솔루션 로그 확인&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;// 웹쉘 솔루션, IPS, 백신 등 로그 확인&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;초기 대응 - 긴급 대응&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사건 유형을 식별 후 그에 맞는 긴급 대응을 수행한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;백업&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;상세 분석을 위한 프로세스 백업&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;웹서버, DB (고객정보) 백업&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;중요 설정파일 백업&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프로세스 (백도어) 삭제 및 계정 제한&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;root 권한으로 돌고있는 백도어 삭제&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;권한 상승 계정 삭제 혹은 계정 권한 제한&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;관리자 계정 패스워드 변경&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;정책 재설정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;방화벽에 해당 포트 차단 정책을 적용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사고조사 (데이터 수집 및 분석)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;로그 상세 분석을 수행한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;로그 파일의 정보를 확인&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;웹로그 (/user/local/apache/logs)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이벤트로그 (/var/log/secure)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;웹로그 확인 (최초 공격 대상이 웹인 경우)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;어떤 웹 취약점을 사용해 어떻게 공격했는지 파악&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IPS 로그 확인&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;권한 상승 발생 시점 확인으로 어떤 취약점이 악용됐는지 파악&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;방화벽 로그 확인&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;추후 방화벽 정책 업데이트를 위함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프로세스 상세 분석을 수행한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;웹쉘의 경우 웹쉘 코드 확인 및 행위를 분석&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;...GET /image/X.asp Action=CmdShell 200&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;...GET /image/X.asp Action=UpFile 200&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;악성코드의 경우 정적/동적 분석&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;레지스트리 조작, 파일 전송 등 시스템에 어떤 영향을 미쳤는지 파악&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;백도어의 경우 백도어로 수행된 행위 파악&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;마지막으로 복구 및 대응을 수행한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;웹취약점 제거&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;입력값 필터링, 업로드 디렉토리의 실행 권한 제거&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;화이트리스트 기반 확장자 검사 등&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;취약한 OS 및 소프트웨어 최신 버전 유지&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;악성코드 유포 방지를 위한 원데이 취약점 제거&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;웹쉘/악성코드 등 패턴 추가&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;고유한 특징을 나타내는 패턴 추출 후 등록&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;방화벽 등 정책 추가&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;앞선 보안솔루션들을 통과할 수 있었던 원인 분석&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;방화벽 등 정책 추가 (IP 차단 등)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/보안이론</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/192</guid>
      <comments>https://liveyourit.tistory.com/192#entry192comment</comments>
      <pubDate>Wed, 10 Jun 2020 21:39:31 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 탐욕법(Greedy) - 체육복 (파이썬)</title>
      <link>https://liveyourit.tistory.com/212</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프로그래머스 탐욕법(Greedy) - 체육복, 문제 확인&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1차원적으로 문제를 이해해서는 테스트케이스 중 여러 문제를 통과할 수 없다. 테스트케이스를 알 수 없어 대체 뭐가 문제인지 난항에 빠졌었는데 '질문하기'를 이것저것 찾아보다가 겨우 해결할 수 있었다. 실전에서는 스스로 모든 예외를 생각해봐야 할텐데 아직 그런 스킬이 많이 부족한 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제 설명은 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;일부 학생의 체육복이 도난당함&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여벌 체육복이 있는 학생이 체육복을 빌려줄 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하로 앞번호 학생이나 뒷번호 학생에게만 체육복을 빌려줄 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;최대한 많은 학생이 체육수업을 들을 수 있게 해야 함&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여벌 체육복을 가져온 학생이 체육복을 도난당했을 경우 하나만 도난당했다고 가정, 다른 학생에게 빌려줄 수 없음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;n: 전체 학생 수&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;lost : 체육복을 도난당한 학생들의 번호가 담긴 배열&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;reserve: 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;수업을 들을 수 있는 학생의 최댓값을 리턴&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프로그래머스 탐욕법(Greedy) - 체육복, 문제 풀이 (파이썬)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;처음에 문제를 풀고나서 테스트케이스를 확인해보니 3,7,10만 틀렸었다. 이 경우 &lt;u&gt;&quot;여벌 체육복을 가져온 학생이 체육복을 도난당했을 경우 하나만 도난당했다고 가정, 다른 학생에게 빌려줄 수 없음&quot;&lt;/u&gt;를 고려하지 않았기 때문이다. 제일 먼저 lost와 reserve 간의 중복을 제거해주어야 한다. 3,7,10 테스트케이스만 계속 틀리게 나오는 사람은 ( n=5, lost=[1,2], reserve=[2,3], return=4 / n=5, lost=[5,4,2], reserve=[2,4], return=4) 와 같은 테스트케이스를 추가해보길 바란다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;n=5, lost=[1,2], reserve=[2,3], return=4&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;n=5, lost=[5,4,2], reserve=[2,4], return=4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;중복을 제거하는 방법에는 여러가지가 있지만, 구글링하다가 set과 intersection을 사용하는 신박한 방법을 찾아서 이 방법을 썼다. 아래와 같이 &lt;b&gt;set(list1).intersection(list2)&lt;/b&gt; 를 사용하면 list1과 list2 간의 중복되는 요소에 대한 리스트를 얻을 수 있다. 그리고 중복 요소를 구했으니 해당 요소값을 lost와 reserve에서 제거해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589824328622&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(n, lost, reserve):
    common = set(lost).intersection(reserve) # lost,reserve 간 중복 요소 구하기
    for v in common:
        reserve.pop(reserve.index(v)) # 중복 제거
        lost.pop(lost.index(v)) # 중복 제거 
    answer = n-len(lost) # 수업을 들을 수 있는 학생은 일단 n-len(lost)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이제 lost를 기준으로 체육복을 빌릴 수 있는 상태인지 확인해주는 것이 필요하다. lost 리스트에 대해 반복문을 돌면서 앞번호(v-1)가 reserve 배열에 존재하는지 확인하고 존재한다면 해당 학생은 수업을 들을 수 있게 되는 것이므로 answer를 +1 해주고 빌려준 학생은 이제 다른 학생에게는 빌려주지 못하므로 reserve에서 pop을 해준다. 뒷번호(v+1)가 존재하는 경우도 마찬가지로 수행해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589824575004&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    for i,v in enumerate(lost):
        if v-1 in reserve: # 앞번호가 reserve 배열에 존재하는지 확인
            answer+=1
            reserve.pop(reserve.index(v-1)) 
            continue # 이미 빌렸으므로 다음으로 넘어가기
        if v+1 in reserve: # 뒷번호가 reserve 배열에 존재하는지 확인  
            answer+=1
            reserve.pop(reserve.index(v+1)) # 뒷번호가 reserve 배열에 존재하는지 확인  

    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전체 코드는 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589824641103&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(n, lost, reserve):
    common = set(lost).intersection(reserve) # lost,reserve 간 중복 요소 구하기
    for v in common:
        reserve.pop(reserve.index(v)) # 중복 제거
        lost.pop(lost.index(v)) # 중복 제거 
    answer = n-len(lost) # 수업을 들을 수 있는 학생은 일단 n-len(lost)
    
    for i,v in enumerate(lost):
        if v-1 in reserve: # 앞번호가 reserve 배열에 존재하는지 확인
            answer+=1
            reserve.pop(reserve.index(v-1)) 
            continue # 이미 빌렸으므로 다음으로 넘어가기
        if v+1 in reserve: # 뒷번호가 reserve 배열에 존재하는지 확인  
            answer+=1
            reserve.pop(reserve.index(v+1)) # 뒷번호가 reserve 배열에 존재하는지 확인  

    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래와 같이 모든 테스트케이스를 통과하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;502&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czNuca/btqEfXqGq4Z/B1E04lkYvngrYQkatIYMr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czNuca/btqEfXqGq4Z/B1E04lkYvngrYQkatIYMr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czNuca/btqEfXqGq4Z/B1E04lkYvngrYQkatIYMr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczNuca%2FbtqEfXqGq4Z%2FB1E04lkYvngrYQkatIYMr1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;502&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/프로그래머스</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/212</guid>
      <comments>https://liveyourit.tistory.com/212#entry212comment</comments>
      <pubDate>Tue, 9 Jun 2020 21:07:41 +0900</pubDate>
    </item>
    <item>
      <title>[앱리뷰] 기프티콘 판매 어플 니콘내콘 사용법 (판매/정산)</title>
      <link>https://liveyourit.tistory.com/242</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;기프티콘 판매 어플 니콘내콘&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;니콘내콘은 &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;모바일 쿠폰 중고거래 서비스&lt;/b&gt;를 제공하는 대표적인 앱 중 하나로 모바일 쿠폰에는 우리가 흔히 사용하는 카카오톡 기프티콘을 예로 들 수 있다. 남아있는 기프티콘이 있어&amp;nbsp;'니콘내콘'을 사용해보았는데, &lt;b&gt;기프티콘 판매/정산&lt;/b&gt;을 어떻게 하는지 사용법을 살펴보자. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;참고로 판매 중간중간 생각날 때 캡쳐를 하고 중간에 반려된 것이 있어서 기프티콘 종류나 판매중인 수가 뒤죽박죽인데 양해해주길 바란다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;396&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/omAuQ/btqEG9cXrVm/4yvgDTT8K2KmFm9IurORj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/omAuQ/btqEG9cXrVm/4yvgDTT8K2KmFm9IurORj1/img.png&quot; data-alt=&quot;기프티콘 판매 어플, 니콘내콘&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/omAuQ/btqEG9cXrVm/4yvgDTT8K2KmFm9IurORj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FomAuQ%2FbtqEG9cXrVm%2F4yvgDTT8K2KmFm9IurORj1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;396&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;기프티콘 판매 어플, 니콘내콘&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;니콘내콘 사용해 기프티콘 판매/정산하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;니콘내콘, 회원가입 및 로그인&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;제일 먼저 회원가입이 필요하다. 회원가입 후 로그인을 하면 &lt;b&gt;'기프티콘 판매하기'&lt;/b&gt;가 활성화되어 있다. &lt;span style=&quot;color: #333333;&quot;&gt;'기프티콘 판매하기'를 클릭해 들어간다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;515&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvsXGi/btqEGTIb2Ei/USawX9nHa7A9KQSWJ02d01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvsXGi/btqEGTIb2Ei/USawX9nHa7A9KQSWJ02d01/img.png&quot; data-alt=&quot;니콘내콘 회원가입 / 기프티콘 판매하기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvsXGi/btqEGTIb2Ei/USawX9nHa7A9KQSWJ02d01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvsXGi%2FbtqEGTIb2Ei%2FUSawX9nHa7A9KQSWJ02d01%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;515&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;니콘내콘 회원가입 / 기프티콘 판매하기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;니콘내콘, 기프티콘 등록&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;'+ 쿠폰판매하기'&lt;/b&gt;를 클릭하면 카테고리를 선택할 수 있다. 카테고리에는 카페, 편의점/마트, 빵/아이스크림, 피자/햄버거/치킨, 문화/게임/영화, 외식/분식, 백화점/주유/뷰티, 휴대폰데이터가 존재한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;587&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UCFf8/btqEGDyOyMy/A21KCvsL12S6xb75X8BQO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UCFf8/btqEGDyOyMy/A21KCvsL12S6xb75X8BQO0/img.png&quot; data-alt=&quot;니콘내콘, 쿠폰판매하기 / 카테고리 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UCFf8/btqEGDyOyMy/A21KCvsL12S6xb75X8BQO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUCFf8%2FbtqEGDyOyMy%2FA21KCvsL12S6xb75X8BQO0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;587&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;니콘내콘, 쿠폰판매하기 / 카테고리 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;예를 들어, 스타벅스 기프티콘을 판매한다고 하면 카페를 들어간 후 원하는 카페 브랜드를 선택, 매입중인 상품을 선택하면 된다. &lt;b&gt;상품검색&lt;/b&gt;에 검색해서도 찾을 수 있다. 아쉽게도 재고가 아직 많다던가 하는 등의 이유로 매입중이 아닌 상품은 판매를 할 수 없다. &lt;b&gt;판매할 상품을 클릭&lt;/b&gt;하면 &lt;b&gt;쿠폰을 추가&lt;/b&gt;할 수 있게된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;606&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bH8Jwq/btqEG8kO0YL/JfBN8UUeXdMGjdTpCtmIwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bH8Jwq/btqEG8kO0YL/JfBN8UUeXdMGjdTpCtmIwK/img.png&quot; data-alt=&quot;니콘내콘, 상품검색 / 쿠폰추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bH8Jwq/btqEG8kO0YL/JfBN8UUeXdMGjdTpCtmIwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbH8Jwq%2FbtqEG8kO0YL%2FJfBN8UUeXdMGjdTpCtmIwK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;606&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;니콘내콘, 상품검색 / 쿠폰추가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;참고로, 쿠폰을 추가할 때 기프티콘을 직접 캡쳐해서 넣으면 안된다. 이렇게되면 아래와 같이 반려가 되는 것을 볼 수 있으니 &lt;u&gt;선물함의 기프티콘 하단에 '교환권 저장'을 클릭해서 오른쪽과 같이 저장한 이미지파일을 사용&lt;/u&gt;해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;556&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xpvys/btqEGfZdKDL/KBu3W0cw76W31pC6Sfm8GK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xpvys/btqEGfZdKDL/KBu3W0cw76W31pC6Sfm8GK/img.png&quot; data-alt=&quot;니콘내콘, 기프티콘 판매 반려&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xpvys/btqEGfZdKDL/KBu3W0cw76W31pC6Sfm8GK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxpvys%2FbtqEGfZdKDL%2FKBu3W0cw76W31pC6Sfm8GK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;556&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;니콘내콘, 기프티콘 판매 반려&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;니콘내콘, 판매수락 및 판매금/정산금 확인&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;'+쿠폰 추가'&lt;/b&gt;에서 &lt;b&gt;저장된 기프티콘 이미지 파일을 추가&lt;/b&gt;하면, 하단에 &lt;b&gt;'리뷰 신청하기'&lt;/b&gt;가 있다. 리뷰를 신청해 높으면 '리뷰 중 쿠폰'에서 리뷰가 진행중인 쿠폰을 확인할 수 있고, 그 중 리뷰가 끝난 상품은 아래와 같이 &lt;b&gt;'거절/판매수락'&lt;/b&gt;을 선택할 수 있게 된다. 당연히 판매가 목적이므로 &lt;b&gt;판매수락&lt;/b&gt;을 클릭한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;585&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mHULE/btqEFX5S1yP/609rjkRKpAIMsAxwQNTPHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mHULE/btqEFX5S1yP/609rjkRKpAIMsAxwQNTPHk/img.png&quot; data-alt=&quot;니콘내콘, 리뷰신청하기 / 판매수락&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mHULE/btqEFX5S1yP/609rjkRKpAIMsAxwQNTPHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmHULE%2FbtqEFX5S1yP%2F609rjkRKpAIMsAxwQNTPHk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;585&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;니콘내콘, 리뷰신청하기 / 판매수락&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;판매가 완료되면 판매금이 들어온 것을 볼 수 있고 정산에서 정산금을 확인할 수 있다. 참고로, 판매금과 정산금은 판매수락을 했다고 바로 정산되는 것이 아니라 얼마정도의 시간이 지난 후에 정산이 된다. 그리고 이렇게 판매된 금액을 &lt;b&gt;'정산금 출금신청하기'&lt;/b&gt;를 클릭해 출금할 수 있다 :)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;640&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KB5m9/btqEFWskQQr/Icilsn0IUjHHOJ5TpcyK80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KB5m9/btqEFWskQQr/Icilsn0IUjHHOJ5TpcyK80/img.png&quot; data-alt=&quot;니콘내콘, 판매 완료 및 정산&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KB5m9/btqEFWskQQr/Icilsn0IUjHHOJ5TpcyK80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKB5m9%2FbtqEFWskQQr%2FIcilsn0IUjHHOJ5TpcyK80%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;640&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;니콘내콘, 판매 완료 및 정산&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>일상/기타</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/242</guid>
      <comments>https://liveyourit.tistory.com/242#entry242comment</comments>
      <pubDate>Sun, 7 Jun 2020 21:26:01 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 2020 NCS 기반 개정 첫 필기 시험 후기</title>
      <link>https://liveyourit.tistory.com/241</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;NCS 기반 개정된 내용을 공부하면서 느낀 내용과 이 뒤에 나오는 시험 후기가 쓸데없이 상세하니 읽기 힘드신 분들은 포스팅 맨 하단의 요약을 확인해주시기 바랍니다..ㅎㅎ&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;2020 정보처리기사, NCS 기반 개정...?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;코로나19로 인해 계속 밀리던 정보처리기사 시험을 오늘 보고왔다. 정보보안 전공이기에 정보보안기사는 2016년 7회차를 합격해 취득한 상태여서 정보처리기사는 봐야겠다는 생각을 못하다가.. 취업준비를 알뜰하게 보내고 싶기도 했고 공백기에 뭐라도 더하자 싶어서 시험을 치루기로 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;2020년부터는 정보처리기사가 &lt;b&gt;NCS 기반으로 전면 개정&lt;/b&gt;됐다. 그래도 이 직종(?)에 있었던 기간도 기간이고 기출문제 위주로 보면 쉽게 합격할 수 있을 것이라 생각했는데 하필 시험을 보려 마음먹었을 때 알아보니 전면 개정됐다고 해서 걱정이 많았던게 사실이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;개정 전에는 [1.데이터베이스 / 2.전자계산기구조 / 3.운영체제 / 4.소프트웨어공학 / 5.데이터통신] 이렇게 5과목이있는데 개정 후에는&lt;b&gt; [1.소프트웨어설계 / 2.소프트웨어개발 / 3.데이터베이스구축 / 4.프로그래밍언어활용 / 5.정보시스템구축관리]&lt;/b&gt;로 과목이 변경됐다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #333333;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;개정전&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;1.데이터베이스 /&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;2.전자계산기구조 /&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;3.운영체제&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;4.소프트웨어공학 /&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;5.데이터통신&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #333333;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;개정후&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;1.소프트웨어설계 /&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;2.소프트웨어개발 /&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;3.데이터베이스구축&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;4.프로그래밍언어활용 /&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;5.정보시스템구축관리&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;527.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baCp16/btqEE445mhF/lEn3lOK4GNg7KMMBCkVLSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baCp16/btqEE445mhF/lEn3lOK4GNg7KMMBCkVLSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baCp16/btqEE445mhF/lEn3lOK4GNg7KMMBCkVLSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaCp16%2FbtqEE445mhF%2FlEn3lOK4GNg7KMMBCkVLSk%2Fimg.png&quot; width=&quot;527.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.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 style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;어떤 변화인지 과목명만 봐서는 쉽게 체감을 하기 힘들었는데 개정후의 책을 사서 좀 비교를 해보니, 확실히 (책 상으로는) 변화가 많긴 했다. 일단 제일 눈에 띄는 것은 전자계산기구조가 없어졌고, 소프트웨어공학으로 있던 내용들이 소프트웨어설계와 개발로 흩어지면서 개인적으로는 좀... 이런게 시험에 진짜 나오는건가 싶을정도로 실무와는 너무 상관없어보이는 개념들이 많이 생긴 느낌이었다. 운영체제는 대부분 '4.프로그래밍언어활용'에 포함되어 있었다. 어쨌든 작년에 전공 필기를 준비하면서 개정전의 정보처리기사도 잠깐 공부해본 입장으로 진짜 많이 바뀌었고 외워야할 것도 훨씬 많은 느낌이었다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot;&gt;&lt;/script&gt;
&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block; text-align: center;&quot; data-ad-layout=&quot;in-article&quot; data-ad-format=&quot;fluid&quot; data-ad-client=&quot;ca-pub-1030149637931142&quot; data-ad-slot=&quot;6713083906&quot;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;'3.데이터베이스구축'이나 '4.프로그래밍언어활용', '5.정보시스템구축관리'는 별로 어려운 느낌은 없었다. 데이터베이스구축 과목은 기존의 정보처리기사와도 상당히 내용이 유사했고 프로그래밍언어활용 과목 또한 프로그래밍 언어를 어느정도 접해봤으면 쉽게 풀 수 있었고 운영체제 내용도 같이 있는데 문제 자체도 기존 정보처리기사와 유사했다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;'5.정보시스템구축관리'는 주로 네트워크와 정보보안 관련 내용인데 정보보안기사 내용이랑 상당부분 겹치고 보안관련된 내용은 그냥 봐도 자신있었기 때문에 공부하는 데에 별로 어려움은 없었다. 처음 생각대로 '1.소프트웨어설계'와 '2.소프트웨어개발'이 좀 뭐가 나올지도 잘 모르겠는데 이것저것 무작정 외우느라 조금 힘들었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;한 2주~3주? 전부터 기출빈도가 계속 높았던 대표적인 개념들&lt;/span&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;(소프트웨어 생명주기나 페이징 기법 등등) 위주로 간간히 공부했고, 시험치기 전 이틀전에 완전 집중해서 전체적인 1회독을 시전했다. 이해하면 되는 과목은 공부하는게 나름 재밌었는데 소프트웨어설계나 개발 이런 과목은 진짜 꾸역꾸역 개념들을 머리에 집어넣느라 힘들었다. 예를 들면, ~~~의 3대개념, ~~~의 핵심목표 5가지, ~~~의 절차 이런 것들 말이다ㅠㅠ... 하..&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;2020 정보처리기사, NCS 기반 개정 첫 필기 시험 후기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;어찌됐든 수험자 입장에서는 의지할만한 것이 책밖에 없기 때문에 시XX 책으로 공부하고 가끔 개정전의 기출문제도 풀면서 공부했고 6.6 토요일에 집앞 학교에서 시험을 치뤘다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; background-color: #ffffff;&quot;&gt;1과목(소프트웨어설계)&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333; background-color: #ffffff;&quot;&gt;를&lt;/span&gt; 처음 풀면서 느낌 그 당혹감은...ㅋㅋㅋㅋ 뭐라고 설명해야할지 모르겠다. 일단 내가 이걸 공부했었나 싶은 느낌의 UML 확장모델과 GoF 디자인패턴의 세부내용을 묻는 문제에 좌절했다. 그래도 책에는 없었지만 기출문제를 풀 때, 럼바우 객체지향 분석 절차나 CASE 같은 개념을 접했던 기억이 떠올라서 다행이었다. 소프트웨어 개발 모형에 기존에 없었던 애자일이 추가됐는데 그 중 XP가 시험문제에 나와서 나름 반가웠는데 틀렸다. XP의 5가지 가치를 묻는 내용이었는데 당연히 '용기'는 아닐꺼라고 생각했지만 아니었다.. &lt;/span&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;1과목은 딱, 이런것까지 나온다고? 하는 느낌의 문제가 반이고 무난히 맞출 수 있는 문제가 반이었다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; background-color: #ffffff;&quot;&gt;2과목(소프트웨어개발)&lt;/span&gt;&lt;/b&gt;은 이런것까지 외우기는 힘들것 같아서 그냥 넘어갔던 인터페이스 구현 검증도구와 같은 문제를 빼면 무난했다. 책에 없던 내용, 예를 들면 정렬 알고리즘의 시간복잡도나 전위순회(preorder)같은 것이 나왔는데 이것도 기출문제를 안풀어봤으면 틀릴뻔 했다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot;&gt;&lt;/script&gt;
&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block; text-align: center;&quot; data-ad-layout=&quot;in-article&quot; data-ad-format=&quot;fluid&quot; data-ad-client=&quot;ca-pub-1030149637931142&quot; data-ad-slot=&quot;6713083906&quot;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333;&quot;&gt;3과목(데이터베이스구축)&lt;/span&gt;&lt;/b&gt;은 상당히 쉬워서 하나만 틀렸다. 아마 시험을 본 대부분의 사람들이라면 3과목이 제일 쉽다고 분명히 느꼈을 것인데 애초에 문제 자체가 개정전 기출문제와 상당히 유사했다. 데이터 무결성 제약조건이나 DDL 분류, 관계대수와 같은 개념이 등장했다. 자꾸 이전 기출문제를 언급하게 되는데, 개정 후 책으로 공부하면서 데이터베이스 병행제어 부분에 로킹(Locking)이 빠져있길래 왜 빠졌지 안나오네보네 했는데 로킹문제가 나왔다. 기출문제 풀면서 정리해놨던 것이 기억나서 맞출 수는 있었는데 개정된 첫시험이라 그런지 책만 전적으로 믿기엔 확실히 부족한 느낌이다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;4과목(프로그래밍언어활용)&lt;/b&gt;은 운영체제나 네트워크 내용은 어렵진 않았는데 내기준 IEEE 80.211a/b/g/e 같이 정답이 확실하게 기억나지 않는 것이 좀 있었다. TCP/IP, 논리연산자, OSI7계층,스케쥴링, 페이지교체 기법 등 자주 등장하는 큰 개념?들은 전부 나온 느낌이다. 의외로 프로그래밍언어 활용이 따로 생기면서 코드문제가 엄청 주를 이룰 줄 알았고 책도 그런느낌이었는데 한개도 안나왔다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;5과목(정보시스템구축관리)&lt;/b&gt;에서 백도어탐지, 스택가드, RSA 등 보안문제는 전공분야이다 보니 어렵지 않았다. 그리고 전날에 급히 책으로 프로젝트 비용 산정기법을 봤는데 Putnam, COCOMO, LOC가 전부 나와서 기분이 좋았다ㅋㅋㅋㅋ 신기술 용어는 하둡, Wi-SUN 두개가 출제됐다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;자격증 관련 카페를 확인해보니 사람 다 비슷하다고, 1과목 과락을 걱정하는 사람이 많았다. 나도 다른건 걱정이 안됐는데 1과목이 좀 걱정됐었다. 좀 걱정하면서 큐넷에 정답이 뜨길 기다렸다가 채점을 해봤는데 가채점 결과, [60 / 85 / 95 / 70 / 85]로 다행히도 합격권이었다. 가답안은 큐넷의 &lt;b&gt;'합격자/답안발표&amp;gt;가답안/확정답안'&lt;/b&gt;에서 확인 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;687.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z9ntX/btqEEMXWQot/MDcFw50wWoKIQVZKwd0BcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z9ntX/btqEEMXWQot/MDcFw50wWoKIQVZKwd0BcK/img.png&quot; data-alt=&quot;큐넷, 정보처리기사 필기 가답안&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z9ntX/btqEEMXWQot/MDcFw50wWoKIQVZKwd0BcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz9ntX%2FbtqEEMXWQot%2FMDcFw50wWoKIQVZKwd0BcK%2Fimg.png&quot; width=&quot;687.0&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;큐넷, 정보처리기사 필기 가답안&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;요약&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;첫시험이라 그런지 1과목 빼곤 쉽게나온 느낌&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;1과목이 난해하다는 평이 많았음 (좀 뭔가 너무 지엽적인 느낌)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;2,3,4과목은 무난했고 5과목은 보안문제가 많았음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;개정 첫 시험이라 그런지 기존 정보처리기사 기출문제와 유사한 문제도 좀 있었음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;기존 정보처리기사 기출만 봤거나, 혹은 개정된 책만 봤으면 1과목에서 과락이 뜰 가능성도 있었을 것 같음&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프로그래밍언어 과목이 따로생겨서 코드문제가 많을줄 알았는데 거의안나옴&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기존 정보처리기사 문제와 형식이나 유형은 비슷한 것 같음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;실기 시험 기간이 되면 열심히 실기 준비를 하자&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #000000; color: #ffffff;&quot;&gt;관련포스팅&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://liveyourit.tistory.com/254&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[정보처리기사] 2020 NCS 기반 개정 3회 실기 시험 합격 후기&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1606630953252&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[정보처리기사] 2020 NCS 기반 개정 3회 실기 시험 합격 후기&quot; data-og-description=&quot;NCS 기반 개정된 실기 준비와 시험 후기가 쓸데없이 상세하니 읽기 힘드신 분들은 포스팅 맨 하단의 요약을 확인해주시기 바랍니다..ㅎㅎ 2020 정보처리기사, NCS 기반 개정 3회 실기 준비 NCS 기반 &quot; data-og-host=&quot;liveyourit.tistory.com&quot; data-og-source-url=&quot;https://liveyourit.tistory.com/254&quot; data-og-url=&quot;https://liveyourit.tistory.com/254&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cAdN0x/hyIoZxcdRL/Paqra0h0cIhLf75USaWJDk/img.png?width=800&amp;amp;height=227&amp;amp;face=0_0_800_227,https://scrap.kakaocdn.net/dn/bFgOVA/hyIoSriykY/6KDpArL3DLfS43sdHg5Awk/img.png?width=800&amp;amp;height=227&amp;amp;face=0_0_800_227,https://scrap.kakaocdn.net/dn/wSNRv/hyIoLr9Xth/hy3LMhdKvFotj9knMQqXxK/img.png?width=794&amp;amp;height=828&amp;amp;face=0_0_794_828&quot;&gt;&lt;a href=&quot;https://liveyourit.tistory.com/254&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://liveyourit.tistory.com/254&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cAdN0x/hyIoZxcdRL/Paqra0h0cIhLf75USaWJDk/img.png?width=800&amp;amp;height=227&amp;amp;face=0_0_800_227,https://scrap.kakaocdn.net/dn/bFgOVA/hyIoSriykY/6KDpArL3DLfS43sdHg5Awk/img.png?width=800&amp;amp;height=227&amp;amp;face=0_0_800_227,https://scrap.kakaocdn.net/dn/wSNRv/hyIoLr9Xth/hy3LMhdKvFotj9knMQqXxK/img.png?width=794&amp;amp;height=828&amp;amp;face=0_0_794_828');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[정보처리기사] 2020 NCS 기반 개정 3회 실기 시험 합격 후기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;NCS 기반 개정된 실기 준비와 시험 후기가 쓸데없이 상세하니 읽기 힘드신 분들은 포스팅 맨 하단의 요약을 확인해주시기 바랍니다..ㅎㅎ 2020 정보처리기사, NCS 기반 개정 3회 실기 준비 NCS 기반&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;liveyourit.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보처리기사</category>
      <category>정보처리기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/241</guid>
      <comments>https://liveyourit.tistory.com/241#entry241comment</comments>
      <pubDate>Sat, 6 Jun 2020 21:51:06 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 프로세스 선점/비선점 스케줄링 기법 (FCFS/SJF/HRN/RR/SRT/MLQ/MLFQ)</title>
      <link>https://liveyourit.tistory.com/236</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;프로세스 스케줄링이란&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;프로세스가 생성되어 실행될 때 필요한 시스템의 여러 자원을 해당 프로세스에 할당하는 작업을 말한다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 프로세스가 생성되어 완료될 때까지 프로세스는 여러 종류의 스케줄링 과정을 거침&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 장기, 중기, 단기 스케줄링이 존재함&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;문맥교환&lt;/b&gt; : 하나의 프로세스에서 다른 프로세스로 CPU가 할당되는 과정에서 발생하는 것으로 운영체제에서 오버헤드의 발생 요인 중 하나&lt;/blockquote&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;프로세스 스케줄링의 목적&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;스케줄링은 CPU나 자원을 효율적으로 사용하기 위한 정책으로 다음과 같은 목적을 가짐&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 공정성&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 처리율 증가&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- CPU 이용률 증가&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 우선순위 제도&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 오버헤드 최소화&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 응답시간 최소화&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 반환시간 최소화&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 대기시간 최소화&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 균형있는 자원의 사용&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 무한 연기 회피&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;프로세스 스케줄링 기법 - 비선점&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케줄링 기법이다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 프로세스 응답시간 예측이 용이, 일괄 처리 방식에 적합&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 중요하지 않은 작업 때문에 중요한 작업이 기다리는 경우가 발생할 수 있음&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- FCFS, SJF, HRM 등&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;FCFS (First Come First Service) 혹은 FIFO&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 준비상태 큐에 도착한 순서에 따라 차례로 CPU를 할당&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 공평성은 유지되지만 중요한 작업이 중요하지 않은 작업을 기다리게 되는 경우 발생&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;SJF (Shortest Job First)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 실행시간이 짧은 프로세스에 먼저 CPU 할당&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 가장 적은 평균 대기시간을 제공함&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;HRN (Higtest Response-ratio Next)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 실행시간이 긴 프로세스에 불리한 SJF 기법을 보완하기 위한 기법&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 대기시간과 실행시간을 이용함&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 우선순위 계산 결과값이 높은 것부터 우선순위를 부여, 대기시간이 긴 프로세스일 경우 계산 결과값이 높게 나옴&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;blockquote data-ke-style=&quot;style3&quot;&gt;HRN 우선순위 계산공식 = (대기시간+서비스(실행)시간)/서비스시간&lt;/blockquote&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프로세스 스케줄링 기법 - 선점&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;하나의 프로세스가 CPU를 할당받아 사용하고 있을 때 우선순위가 높은 다른 프로세스가 CPU를 강제로 빼앗아 사용할 수 있는 스케줄링 기법이다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 우선순위가 높은 프로세스를 빠르게 처리 가능&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 빠른 응답시간을 요구하는 대화식 시분할 시스템에서 사용&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 많은 오버헤드를 초래&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 선점이 가능할도록 인터럽트용 타이머 클록이 필요&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- RR, SRT, MLQ(다단계큐), MLFQ(다단계피드백큐) 등&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;RR (Round Robin)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- FCFS를 선점 형태로 변형한 기법&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 시분할 시스템을 위해 고안됨&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 준비상태 큐에 먼저 들어온 프로세스가 먼저 CPU를 할당받는 것은 FCFS와 동일&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 각 프로세스는 할당된 시간 동안만 실행한 후 실행이 완료되자 않으면 다음 프로세스에 CPU를 넘겨주고 큐의 가장 뒤로 배치됨&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 할당되는 시간이 클 경우 FCFS와 같아지고 작을 경우 문맥교환 및 오버헤드가 자주 발생되게 됨&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;SRT (Shortest Remaining Time)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- SJF 알고리즘을 선점 형태로 변형한 기법&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 현재 실행중인 프로세스의 남은 시간과 준비상태 큐에 새로 도착한 프로세스의 실해 시간을 비교&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 가장 짧은 실행 시간을 요구하는 프로세스에 CPU를 할당함&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;MLQ (Multi Level Queue, 다단계큐)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 프로세스를 특정 그룹으로 분류할 수 있을 경우 그룹에 따라 각기 다른 준비상태 큐를 사용&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;MLFQ (Multi Level Feedback Queue, 다단계 피드백큐)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 특정 그룹의 준비상태 큐에 들어간 프로세스가 다른 준비상태 큐로 이동할 수 없는 다단계큐 기법을 이동할 수 있도록 개선한 기법&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보처리기사</category>
      <category>정보처리기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/236</guid>
      <comments>https://liveyourit.tistory.com/236#entry236comment</comments>
      <pubDate>Fri, 5 Jun 2020 23:07:03 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 기억장치 계층구조 및 관리전략 (반입/배치/교체)</title>
      <link>https://liveyourit.tistory.com/225</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기억장치 계층 구조의 특징&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기억장치는 레지스터, 캐시 기억장치, 주기억장치, 보조기억장치로 계층 구조를 분류할 수 있다. &lt;b&gt;주기억장치&lt;/b&gt;는 처리용으로 용량이 작고, 속도가 빠른 RAM이라고 생각하면 되고, &lt;b&gt;보조기억장치&lt;/b&gt;는 저장용으로 용량이 크고, 속도가 느린 하드디스크라고 기억하자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 주기억장치: 처리용, 용량작음, 속도빠름 (RAM, ROM)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 보조기억장치: 저장용, 용량큼, 속도느림 (하드디스크)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;계층 구조에서 &lt;b&gt;상위의 기억장치&lt;/b&gt;일수록 &lt;u&gt;기억용량이 적지만 접근속도/시간이 빠르고 비용적으로 고가&lt;/u&gt;이다. &lt;b&gt;하위의 기억장치&lt;/b&gt;일수록 &lt;u&gt;기억용량은 크지만 접근속도/시간이 느리고 비용적으로 저가&lt;/u&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 레지스터, 캐시, 주기억장치에는 CPU가 직접 엑세스 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 보조기억장치에 있는 프로그램이나 데이터는 직접 액세스할 수 없고 데이터가 주기억장치에 적재된 후에야 가능함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;625&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYmhHc/btqEq7mVtKi/MaW96v2SggwsGf8tnRSPrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYmhHc/btqEq7mVtKi/MaW96v2SggwsGf8tnRSPrk/img.png&quot; data-alt=&quot;기억장치의 계층구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYmhHc/btqEq7mVtKi/MaW96v2SggwsGf8tnRSPrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYmhHc%2FbtqEq7mVtKi%2FMaW96v2SggwsGf8tnRSPrk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;625&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;기억장치의 계층구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기억장치 관리전략&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기억장치 관리전략은 &lt;b&gt;보조기억장치의 프로그램이나 데이터를&lt;/b&gt; &lt;b&gt;주기억장치에 적재시키는&lt;/b&gt; &lt;b&gt;시기, 위치&lt;/b&gt; &lt;b&gt;등&lt;/b&gt;을 지정해 &lt;u&gt;한정된 주기억장치의 공간을 효율적으로 사용하기 위한 전략&lt;/u&gt;을 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;반입(Fetch) 전략&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;보조기억장치에 저장중인 프로그램이나 데이터를 &lt;b&gt;언제&lt;/b&gt; 주기억장치로 적재할 것인지를 결정하는 전략이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 요구반입 : 참조를 요구할 때 적재&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 예상반입 : 참조될 것을 미리 예상하여 적재&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;배치(Placement) 전략&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;새로 반입되는 프로그램이나 데이터를 주기억장치의 &lt;b&gt;어디에&lt;/b&gt; 위치시킬 것인지를 결정하는 전략이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 최초적합 : 들어갈 수 있는 크기의 빈 영역 중에서 첫번째 영역에 배치&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 최적적합 : 들어갈 수 있는 크기의 빈 영역중에서 단편화를 가장 작게 남기는 영역에 배치&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 최악접합 : 들어갈 수 있는 크기의 빈 영역중에서 단편화를 가장 많이 남기는 영역에 배치&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;교체(Replacement) 전략&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;주기억장치의 &lt;b&gt;모든 영역이 이미 사용중인 상태&lt;/b&gt;에서 새로운 프로그램이나 데이터를 주기억장치에 배치하려 할 때, 이미 사용되고 있는 영역 중 &lt;b&gt;어느 영역을 교체&lt;/b&gt;해 사용할 것인지를 결정하는 전략이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- FIFO, LRU, LFU, NUR 등 존재&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 교체 전략에 대해선 &lt;a href=&quot;https://liveyourit.tistory.com/235&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[정보처리기사] 페이지 교체 알고리즘 (FIFO/LRU/LFU/NUR)&lt;/a&gt;에서 다룸&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보처리기사</category>
      <category>정보처리기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/225</guid>
      <comments>https://liveyourit.tistory.com/225#entry225comment</comments>
      <pubDate>Thu, 4 Jun 2020 12:00:01 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 페이지 교체 알고리즘 (FIFO/LRU/LFU/NUR)</title>
      <link>https://liveyourit.tistory.com/235</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;페이지 교체 알고리즘&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;페이지 교체 알고리즘은 &lt;b&gt;페이지 부재&lt;/b&gt;가 발생했을 때 &lt;u&gt;가상기억장치의 필요 페이지를 주기억장치에 적재&lt;/u&gt;해야 하는데 &lt;u&gt;어떤 페이지 프레임을 선택해 교체할 것인지를 결정&lt;/u&gt;하는 기법이다. &lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;참고로, '교체'는 기억장치 관리 정책의 반입/배치/교체 정책 중 교체정책을말하며 &lt;b&gt;교체 정책&lt;/b&gt;이란 어떤 프로그램이나 자료를 주기억장치로부터 제거할 것인가를 결정하는 정책으로 &lt;u&gt;주기억장치에서 제거할 페이지를 선택하는 정책&lt;/u&gt;을 말한다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span&gt;페이지 부재 : CPU가 엑세스한 페이지가 주기억장치에 없는 경우로, 페이지 부재 발생 시 해당 페이지를 주기억장치로 가져와야 함&lt;/span&gt;&lt;/blockquote&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;FIFO (First In First Out)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 가장 먼저 들어와서 가장 오래 있었던 페이지를 교체하는 기법&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 각 페이지가 주기억장치에 들어올 때마다 타임스탬프를 찍어 기억하는 방식&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; contenteditable=&quot;false&quot; data-ke-style=&quot;style3&quot;&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;ex-1) 다음의 참조 페이지를 세개의 페이지 프레임을 가진 기억장치에서 FIFO 알고리즘을 사용해 교체했을 시 페이지 부재수는 ?&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;사용할 페이지 프레임이 없을 경우 가장 먼저 들어와 오래 있었던 페이지를 제거하기 때문에 아래 표처럼 진행하면 총 페이지 부재수는 &lt;b&gt;6번&lt;/b&gt;이 된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 114px;&quot;&gt;&lt;tbody&gt;&lt;tr style=&quot;height: 19px;&quot;&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;참조페이지&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;2&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;3&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;2&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;1&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;5&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;2&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;3&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;5&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 19px;&quot;&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;br&gt;&lt;span&gt;2를 제거&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;br&gt;&lt;span&gt;3을 제거&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;br&gt;&lt;span&gt;1을 제거&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 19px;&quot;&gt;&lt;td colspan=&quot;3&quot; style=&quot;width: 10%; height: 57px;&quot;&gt;&lt;br&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;프레임&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;(2)&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;2&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;(2)&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;2&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;(5)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;5&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;5&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;(5)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 19px;&quot;&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;(3)&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;3&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;3&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;3&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;(2)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;2&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;2&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 19px;&quot;&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;(1)&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;1&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;1&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;(3)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;3&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 19px;&quot;&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;페이지부재&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;V&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;V&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;V&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;V&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;V&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;V&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;LRU (Least Recently Used)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 최근에 가장 오랫동안 사용하지 않은 페이지를 교체하는 기법&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 각 페이지마다 카운터나 스택을 두어 현 시점에서 가장 오랫동안 사용하지 않은 (가장 오래전에 사용된) 페이지를 교체함&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; contenteditable=&quot;false&quot; data-ke-style=&quot;style3&quot;&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;ex-2) 다음의 참조 페이지를 세개의 페이지 프레임을 가진 기억장치에서 LRU 알고리즘을 사용해 교체했을 시 페이지 부재수는 ?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;사용할 페이지 프레임이 없을 경우 가장 오래전에 사용된 페이지를 제거하기 때문에 아래 표처럼 진행하면 총 페이지 부재수는&lt;b&gt; 5번&lt;/b&gt;이 된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 114px;&quot;&gt;&lt;tbody&gt;&lt;tr style=&quot;height: 19px;&quot;&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;참조페이지&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;2&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;3&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;2&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;1&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;5&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;2&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;3&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;5&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 19px;&quot;&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;제거&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;제거&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 19px;&quot;&gt;&lt;td colspan=&quot;3&quot; style=&quot;width: 10%; height: 57px;&quot;&gt;&lt;br&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;프레임&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;2&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;2&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;(2)&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;2&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;2&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;(2)&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;2&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;2&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 19px;&quot;&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;3&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;3&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;3&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;&lt;b&gt;(5)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;5&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;5&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;(5)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 19px;&quot;&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;(1)&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;1&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;1&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;&lt;b&gt;(3)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span&gt;3&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height: 19px;&quot;&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;페이지부재&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;V&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;V&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;V&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;V&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;V&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;LFU (Least Frequently Used)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 사용 빈도가 가장 적은 페이지를 교체하는 기법&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 즉, 호출된 횟수가 가장 적인 페이지를 교체&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 바로 불러온 페이지가 교체될 수 있다는 단점이 존재함&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;NUR (Not Used Recently)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- LRU와 비슷한 방식으로, 최근에 사용하지 않은 페이지를 교체 &lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- LRU 교체의 단점인 시간 오버헤드를 적게하는 방법&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 최근 사용여부를 확인하기 위해 각 페이지마다 두개의 비트 (참조비트/변형비트)를 사용&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 참조비트 : 페이지가 호출되었을 때는 1, 호출되지 않았을 때는 0&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;- 변형비트 : 페이지 내용이 변경되었을 때는 1, 변경되지 않았을 때는 0&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보처리기사</category>
      <category>정보처리기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/235</guid>
      <comments>https://liveyourit.tistory.com/235#entry235comment</comments>
      <pubDate>Wed, 3 Jun 2020 23:36:12 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 가상기억장치의 구현기법 (페이징, 세그멘테이션)</title>
      <link>https://liveyourit.tistory.com/234</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;가상기억장치의 개요&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;가상기억장치는 보조기억장치(하드디스크)의 일부를 주기억장치처럼 사용하는 것을 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 주기억장치의 용량보다 큰 프로그램을 실행시키기 위해 사용됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 이러한 가상기억장치의 일반적인 구현 방법에는 페이징 기법과 세그멘테이션 기법이 존재함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;주기억장치: 처리용, 용량작음, 속도빠름 (RAM, ROM)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;보조기억장치: 저장용, 용량큼, 속도느림 (하드디스크)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;가상기억장치 구현기법&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;페이징(Paging) 기법 - 내부단편화&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;페이징 기법은 &lt;u&gt;가상기억장치에 보관되있는 프로그램과 주기억장치의 영역을 동일한 크기로 나눈&lt;/u&gt; 후, 나눠진 프로그램(페이지)을 동일하게 나눠진 주기억장치의 영역(페이지 프레임)에 적재시켜 실행하는 기법을 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 프로그램을 일정한 크기로 나눈 단위 : 페이지&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 페이지 크기대로 일정하게 나누어진 주기억장치의 단위 : 페이지 프레임&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 외부 단편화는 발생하지 않으나 &lt;b&gt;내부 단편화가 발생&lt;/b&gt;할 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 주소변환을 위해 페이지 위치 정보를 가지고 있는 페이지 맵 테이블이 필요함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 페이지 맵 테이블로 인해 비용이 증가되고 처리속도가 감소됨&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size18&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;내부 단편화 : 분할을 사용하고 남은 일부분으로, 페이지크기가 4KB이고 프로그램 크기가 17KB라면 마지막 페이지의 크기가 1KB가 되고 이것이 주기억장치에 적재되면 3KB의 내부단편화가 발생하게 된다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;세그멘테이션(Segmentation) 기법 - 외부단편화&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;세그멘테이션 기법은 가상기억장치에 보관되어있는 프로그램을 &lt;u&gt;다양한 크기의 논리적 단위로 나눈 후&lt;/u&gt; 주기억장치에 적재시켜 실행시키는 방법이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 프로그램을 논리적 크기로 나눈 단위 : 세그먼트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 각 세그먼트는 고유한 이름과 크기를 갖음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 세그멘테이션 기법을 이용하는 이유는 기억공간을 절약하기 위함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 주소변환을 위해 세그먼트가 존재하는 위치 정보를 갖고있는 세그먼트 맵 테이블이 필요함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 세그먼트가 주기억장치에 적재될 때 다른 세그먼트가 침범할 수 없고, 이를 위해 기억장치 보호키가 필요함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 내부단편화는 발생하지 않으나 &lt;b&gt;외부단편화가 발생&lt;/b&gt;함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보처리기사</category>
      <category>정보처리기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/234</guid>
      <comments>https://liveyourit.tistory.com/234#entry234comment</comments>
      <pubDate>Tue, 2 Jun 2020 18:57:14 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 운영체제 운용 기법 및 발달 과정</title>
      <link>https://liveyourit.tistory.com/224</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;뭔가 이 부분도 개정된 2020 정보처리기사 책에서는 찾아볼 수 없었는데, 이전에는 나름 출제 빈도가 높았기 때문에 혹시 몰라 일단 포스팅해둔다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;운영체제 운용 기법 및 발달 과정&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;일괄처리 시스템 (Batch Processing)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 초기의 컴퓨터 시스템에서 사용된 형태&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 일정량의 데이터를 모아 &lt;b&gt;한꺼번에 처리&lt;/b&gt;하는 방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 컴퓨터 시스템을 효율적으로 관리할 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 사용자 측면에서는 반환 시간이 늦지만 하나의 작업이 모든 자원을 독점하므로 CPU 유휴 시간이 줄어듦&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다중프로그래밍 시스템 (Multi-Programming)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;b&gt;하나의 CPU와 주기억장치&lt;/b&gt;를 이용해 &lt;u&gt;여러 개의 프로그램을 동시에 처리&lt;/u&gt;함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시분할시스템 (Time Sharing)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 라운드로빈 방식이라고도 함&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 여러명의 사용자가 사용하는 시스템에서 컴퓨터가 &lt;b&gt;사용자들의 프로그램을 번갈아 처리&lt;/b&gt;해줌으로써 각 사용자에게 독립된 컴퓨터를 사용하는 느낌을 줌&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- CPU는 같은 시점에 여러 개의 작업을 동시에 수행할 수 없기 때문에 &lt;u&gt;CPU의 전체 사용시간을 작은 작업 시간량으로 나누어&lt;/u&gt;서 그 시간량 동안만 번갈아 가면서 CPU를 할당함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다중처리 시스템 (Multi-Processing)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;b&gt;여러 개의 CPU&lt;/b&gt;와 &lt;b&gt;하나의 주기억장치&lt;/b&gt;를 이용해 동시에 처리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 하나의 CPU가 고장나도 다른 CPU를 이용할 수 있으므로 신뢰성이 높음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;실시간처리시스템 (Real Time Processing)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 데이터 발생 즉시 처리해 결과를 산출&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 시간에 제어를 두고 수행되어야 하는 작업에 사용됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다중모드처리 (Multi Mode Processing)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 일괄처리,시분할,다중처리,실시간처리 시스템을 모두 제공하는 방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;분산처리스시스템 (Distributed Processing)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 여러 개의 컴퓨터를 통신 회선으로 연결해 하나의 작업을 처리함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 각 단말장치나 컴퓨터 시스템은 고유의 운영체제, CPU, 메모리를 가지고 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보처리기사</category>
      <category>운영체제</category>
      <category>정보처리기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/224</guid>
      <comments>https://liveyourit.tistory.com/224#entry224comment</comments>
      <pubDate>Mon, 1 Jun 2020 14:39:40 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 운영체제의 개념 (정의/목적/기능/종류)</title>
      <link>https://liveyourit.tistory.com/223</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;운영체제(OS; Operation System) 정의&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 컴퓨터 시스템의 &lt;b&gt;자원들을 효율적으로 관리&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 &lt;b&gt;환경을 제공&lt;/b&gt;하는 여러 프로그램의 모임&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;*자원 : CPU, 주기억장치, 보조기억장치, 파일 및 정보들을 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;운영체제 목적&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 처리능력, 반환시간, 사용가능도, 신뢰도는 운영체제 성능 평가의 기준이 됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 처리능력(Throughput)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 70%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 일정 시간 내에 시스템이 처리하는 일의 양&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 반환시간(Turn Around Time)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 시스템에 작업을 의뢰한 시간부터 완료까지 걸린 시간&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 사용가능도(Availability)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 시스템을 사용할 필요가 있을 때 즉시 사용 가능한 정도&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 신뢰도(Reliability)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 시스템이 주어진 문제를 정확히 해결하는 정도&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;운영체제 기능&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 프로세서, 주기억장치, 보조기억장치, 입출력장치, 파일 및 정보 등의 &lt;b&gt;자원 관리&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 자원을 효율적으로 관리하기 위한&lt;b&gt; 스케줄링&lt;/b&gt; 기능 제공&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;*스케줄링 : 어떤 자원을 누가, 언제, 어떤 방식으로 사용할지 결정해주는 것&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 사용자와 시스템 간 &lt;b&gt;인터페이스&lt;/b&gt; 제공&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 시스템의 각종 하드웨어, 네트워크 관리 및 제어&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 데이터 관리, 데이터 및 자원의 공유 기능 제공&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 시스템 오류 검사 및 복구&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 자원 보호 기능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 입출력 보조 기능 제공&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 가상 계산기 기능 제공&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;운영체제 종류&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- Windows, UNIX, LINUX, MacOS, MS-DOS 등&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 운영체제&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &lt;b&gt;특징&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; Windows&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 마이크로소프트 사가 개발한 운영체제&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; UNIX&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - AT&amp;amp;T 벨 연구소, MIT, General Electric이 공동 개발한 운영체제&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - 시분할 시스템을 위해 설계된 대화식 운영체제&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - 소스가 공개된 개방형 시스템&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - 대부분 C언어로 작성되어 이식성이 높고,장치 및 프로세스 간 호환성이 높음&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - 다중 사용자, 다중 작업을 지원&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - 트리 구조의 파일시스템&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; LINUX&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - 리누스 토발즈가 UNIX를 기반으로 개발한 운영체제&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - 소스코드가 공개되어 있음&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - UNIX와 완벽히 호환되며 대부분 특징이 동일함&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; MacOS&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 애플 사가 UNIX를 기반으로 개발한 운영체제&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; MS-DOS&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 윈도우 이전에 사용되던 운영체제&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보처리기사</category>
      <category>운영체제</category>
      <category>정보처리기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/223</guid>
      <comments>https://liveyourit.tistory.com/223#entry223comment</comments>
      <pubDate>Sun, 31 May 2020 20:15:11 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 주요 정렬 알고리즘의 이해 (삽입/버블/선택정렬)</title>
      <link>https://liveyourit.tistory.com/220</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;내가 못찾는 것일 수도 있지만 시나공 기준으로 개정된 2020 정보처리기사에서 '주요 정렬 알고리즘'에 대한 부분은 제외된 것 같다(?) 그래도 기출도가 높았던 부분이었기에 해당 포스팅에 정리해본다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;삽입정렬&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;초기상태인 아래의 8,5,6,2,4를 삽입정렬을 사용해 정렬시키면 아래와 같은 과정을 거치게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;363&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DZ7FO/btqEm3xERIU/ekLlIR3TSbRrVd1N3PFSb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DZ7FO/btqEm3xERIU/ekLlIR3TSbRrVd1N3PFSb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DZ7FO/btqEm3xERIU/ekLlIR3TSbRrVd1N3PFSb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDZ7FO%2FbtqEm3xERIU%2FekLlIR3TSbRrVd1N3PFSb0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;363&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1) 1회전 : 두번째 값을 첫번째 값과 비교해 첫번째 자리에 삽입, 8을 뒤로 한칸 이동&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;357&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDe21z/btqEm3LeADX/fWU01c39AVymJRUPsabJCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDe21z/btqEm3LeADX/fWU01c39AVymJRUPsabJCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDe21z/btqEm3LeADX/fWU01c39AVymJRUPsabJCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDe21z%2FbtqEm3LeADX%2FfWU01c39AVymJRUPsabJCK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;357&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2) 2회전 : 세번째 값을 5,6과 비교해 삽입, 8을 뒤로 한칸 이동&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;361&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pIvJ4/btqEmp2vF9W/BwpSiIG7a4TRAkw2GUgUNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pIvJ4/btqEmp2vF9W/BwpSiIG7a4TRAkw2GUgUNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pIvJ4/btqEmp2vF9W/BwpSiIG7a4TRAkw2GUgUNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpIvJ4%2FbtqEmp2vF9W%2FBwpSiIG7a4TRAkw2GUgUNK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;361&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3) 3회전 : 네번째 값을 5,6,8과 비교해 삽입, 5,6,8을 뒤로 한칸 이동&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;368&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/civKC0/btqElWzuv6m/4uiQwCvSAaqMavtHLih1AK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/civKC0/btqElWzuv6m/4uiQwCvSAaqMavtHLih1AK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/civKC0/btqElWzuv6m/4uiQwCvSAaqMavtHLih1AK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcivKC0%2FbtqElWzuv6m%2F4uiQwCvSAaqMavtHLih1AK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;368&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4) 4회전 : 다섯번째 값을 2,5,6,8과 비교해 삽입, 5,6,8을 뒤로 한칸 이동&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;373&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RU900/btqEnhh8vUE/rOo0hydzEfkjtYz3c2YPAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RU900/btqEnhh8vUE/rOo0hydzEfkjtYz3c2YPAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RU900/btqEnhh8vUE/rOo0hydzEfkjtYz3c2YPAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRU900%2FbtqEnhh8vUE%2FrOo0hydzEfkjtYz3c2YPAk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;373&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;버블정렬&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;초기상태인 아래의 8,5,6,2,4를 버블정렬을 사용해 정렬시키면 아래와 같은 과정을 거치게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;363&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DZ7FO/btqEm3xERIU/ekLlIR3TSbRrVd1N3PFSb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DZ7FO/btqEm3xERIU/ekLlIR3TSbRrVd1N3PFSb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DZ7FO/btqEm3xERIU/ekLlIR3TSbRrVd1N3PFSb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDZ7FO%2FbtqEm3xERIU%2FekLlIR3TSbRrVd1N3PFSb0%2Fimg.png&quot; width=&quot;363&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1) 1회전 : 첫번째 값 8을 두번째 값인 5와 비교해 교환, 두번째 값 8을 세번째 값인 6과 비교해 교환, 세번째 값 8을 네번째 값인 2와 비교해 교환, 다섯번째 값인 4를 네번째 값인 8과 비교해 교환 (가장 큰 값이 가장 끝으로 가게 되므로 다음 회전부터는 맨 끝 값은 비교할 필요 없음)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;375&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s0Z2P/btqElEZ899d/iBZMmKoxy7K7lKC56LFikk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s0Z2P/btqElEZ899d/iBZMmKoxy7K7lKC56LFikk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s0Z2P/btqElEZ899d/iBZMmKoxy7K7lKC56LFikk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs0Z2P%2FbtqElEZ899d%2FiBZMmKoxy7K7lKC56LFikk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;375&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2) 2회전 : 첫번째 값 5를 두번째 값인 6과 비교해 교환X, 두번째 값인 6을 세번째 값 2와 비교해 교환, 세번째 값인 6을 네번째 값인 4와 비교해 교환&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;365&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/07wRS/btqEmKSFMyk/XhPuqGaIXpzFsD0PC1zkxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/07wRS/btqEmKSFMyk/XhPuqGaIXpzFsD0PC1zkxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/07wRS/btqEmKSFMyk/XhPuqGaIXpzFsD0PC1zkxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F07wRS%2FbtqEmKSFMyk%2FXhPuqGaIXpzFsD0PC1zkxK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;365&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3) 3회전 : 첫번째 값 5를 두번째 값인 2와 비교해 교환, 두번째 값인 5를 세번째 값 4와 비교해 교환&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;370&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csL7aX/btqEmoCyElL/jR2K7JWaP7EGTKCUK1QdU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csL7aX/btqEmoCyElL/jR2K7JWaP7EGTKCUK1QdU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csL7aX/btqEmoCyElL/jR2K7JWaP7EGTKCUK1QdU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsL7aX%2FbtqEmoCyElL%2FjR2K7JWaP7EGTKCUK1QdU1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;370&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4) 4회전 : 첫번째 값 2를 두번째 값인 4와 비교해 교환X&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;374&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nnRhj/btqEmp9gVv9/e9naKI80kcASDw024UptS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nnRhj/btqEmp9gVv9/e9naKI80kcASDw024UptS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nnRhj/btqEmp9gVv9/e9naKI80kcASDw024UptS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnnRhj%2FbtqEmp9gVv9%2Fe9naKI80kcASDw024UptS1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;374&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;선택정렬&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;초기상태인 아래의 8,5,6,2,4를 버블정렬을 사용해 정렬시키면 아래와 같은 과정을 거치게 된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;363&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DZ7FO/btqEm3xERIU/ekLlIR3TSbRrVd1N3PFSb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DZ7FO/btqEm3xERIU/ekLlIR3TSbRrVd1N3PFSb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DZ7FO/btqEm3xERIU/ekLlIR3TSbRrVd1N3PFSb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDZ7FO%2FbtqEm3xERIU%2FekLlIR3TSbRrVd1N3PFSb0%2Fimg.png&quot; width=&quot;363&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1) 1회전 : 첫번째 값 8을 두번째 값 5과 비교해 교환, 첫번째 값 5를 세번째 값 6과 비교해 교환X, 첫번째 값 5를 네번째 값 2와 비교해 교환, 첫번째 값 2를 다섯번째 값 4와 비교해 교환X&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;353&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/urjNG/btqElWfd4BT/46bmQA9mI34q8J3UJ5VUY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/urjNG/btqElWfd4BT/46bmQA9mI34q8J3UJ5VUY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/urjNG/btqElWfd4BT/46bmQA9mI34q8J3UJ5VUY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FurjNG%2FbtqElWfd4BT%2F46bmQA9mI34q8J3UJ5VUY0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;353&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2) 2회전 : 두번째 값 8을 세번째 값 6과 비교해 교환, 두번째 값 6을 네번째 값 5와 비교해 교환, 두번째 값 5를 다섯번째 값 4와 비교해 교환&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;347&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oRESr/btqEnH8LAhH/syyHgK1SKKTgLCn9SkLuRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oRESr/btqEnH8LAhH/syyHgK1SKKTgLCn9SkLuRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oRESr/btqEnH8LAhH/syyHgK1SKKTgLCn9SkLuRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoRESr%2FbtqEnH8LAhH%2FsyyHgK1SKKTgLCn9SkLuRk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;347&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3) 3회전 : 세번째 값 8을 네번째 값 6과 비교해 교환, 세번째 값 6을 다섯번째 값 5와 비교해 교환&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;356&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZy1NU/btqEnJlcR3s/UkSeh1izHwZgFKWjglE5LK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZy1NU/btqEnJlcR3s/UkSeh1izHwZgFKWjglE5LK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZy1NU/btqEnJlcR3s/UkSeh1izHwZgFKWjglE5LK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZy1NU%2FbtqEnJlcR3s%2FUkSeh1izHwZgFKWjglE5LK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;356&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4) 4회전 : 네번째 값 8을 다섯번째 값 6과 비교해 교환&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;368&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YIgan/btqElWlXB55/XHBVAGSz13KhlbdAsjH5DK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YIgan/btqElWlXB55/XHBVAGSz13KhlbdAsjH5DK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YIgan/btqElWlXB55/XHBVAGSz13KhlbdAsjH5DK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYIgan%2FbtqElWlXB55%2FXHBVAGSz13KhlbdAsjH5DK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;368&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보처리기사</category>
      <category>정렬</category>
      <category>정보처리기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/220</guid>
      <comments>https://liveyourit.tistory.com/220#entry220comment</comments>
      <pubDate>Sat, 30 May 2020 20:21:32 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] DML - SELECT문 형식 (SELECT/FROM/WHERE/GROUP BY/HAVING절)</title>
      <link>https://liveyourit.tistory.com/222</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;SELECT문 일반 형식&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; SELECT [PREDICATE] [테이블명.]속성명 [AS 별칭]...&lt;br /&gt;&amp;nbsp; [, 그룹함수(속성명) [AS 별칭]]&lt;br /&gt;&amp;nbsp; [, Window함수 OVER ...]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; FROM 테이블명1, 테이블2,...&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; [WHERE 조건]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; [GROUP BY 속성명1, 속성명2,...]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; [HAVING 조건]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; [ORDER BY 속성명 [ASC | DESC]];&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;SELECT절&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;PREDICATE&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- All&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- DISTINCT : 중복된 튜플이 있으면 그 중 첫번째 한개만 검색&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- DISTINCTROW&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size18&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;SELECT &lt;b&gt;DISTINCT 주소&lt;/b&gt; FROM 사원;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;속성명&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 두개 이상의 테이블을 대상으로 검색할 때는 테이블명.속성명으로 표현&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그룹함수&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- GROUP BY절에 지정된 그룹별로 속성의 값을 집계할 함수를 기술&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 그룹 함수 : COUNT, SUM, AVG, MAX, MIN, STDDEV(표준편차), VARIANCE(분산), ROLLUP, CUBE&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size18&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;SELECT 부서, &lt;b&gt;AVG(상여금)&lt;/b&gt; AS 평균&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;FROM 상여금&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;GROUP BY 부서&lt;/b&gt;;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;WINDOW 함수&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- GROUP BY 절을 사용하지 않고 속성의 값을 집계할 함수를 기술&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 윈도우 함수 : ROW_NUMBER(일련번호 반환), RANK(순위반환), DENSE_RANK(순위반환, 공동순위 무시)&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size18&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ex. 상여금 테이블에서 상여내역별로 상여금에 대한 일련 번호를 구하기 (순서는 내림차순, 속성명은 NO)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;SELECT 상여내역, 상여금,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &lt;b&gt;ROW_NUMBER() OVER (PARTITION BY 상여내역 ORDER BY 상여금 DESC) &lt;/b&gt;AS NO&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;FROM 상여금;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;FROM절&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 검색될 데이터들을 포함하는 테이블명을 기술&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;WHERE절&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 검색할 조건을 기술&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- LINK 연산자 : %(모든 문자), _(문자 하나), #(숫자 하나)&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size18&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ex. 사원 테이블에서 성이 '김'인 사람의 튜플을 검색&lt;br /&gt;SELECT *&lt;br /&gt;FROM 사원&lt;br /&gt;WHERE 이름 &lt;b&gt;LIKE &quot;김%&quot;&lt;/b&gt;;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;GROUP BY절&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 특정 속성을 기준으로 그룹화하여 검색할 때 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 일반적으로 그룹 함수와 함께 사용함&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ex. 상여금 테이블에서 부서별 튜플 수를 검색&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;SELECT 부서, &lt;b&gt;COUNT(*)&lt;/b&gt; AS 사원수&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;FROM 상여금&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;GROUP BY 부서&lt;/b&gt;;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;HAVING절&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- GROUPT BY와 함께 사용됨, 그룹에 대한 조건을 지정&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ex. 상여금 테이블에서 상여금이 100 이상인 사원이 2명 이상인 부서의 튜플수를 구하기&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;SELECT 부서, &lt;b&gt;COUNT(*)&lt;/b&gt; AS 사원수&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;FROM 상여금&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;WHERE 상여금&amp;gt;=100&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;GROUP BY 부서&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;HAVING COUNT(*) &amp;gt;= 2&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보처리기사</category>
      <category>데이터베이스</category>
      <category>정보처리기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/222</guid>
      <comments>https://liveyourit.tistory.com/222#entry222comment</comments>
      <pubDate>Fri, 29 May 2020 17:28:14 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] SQL 분류 (DDL/DML/DCL)</title>
      <link>https://liveyourit.tistory.com/221</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;SQL의 분류&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;DDL(데이터 정의어)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 스키마, 테이블, 뷰 등을 정의하거나 변경, 삭제할 때 사용하는 언어&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 데이터베이스 관리자 혹은 설계자가 사용함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 유형 : CREATE / ALTER / DROP&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 80px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp; 명령어&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp; 기능&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp; CREATE&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 스키마, 테이블, 뷰 등을 정의&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp; ALTER&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 테이블에 대한 정의를 변경&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp; DROP&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 스키마, 테이블, 뷰 등을 삭제&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;DML(데이터 조작어)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 데이터베이스 사용자가 저장된 데이터를 처리할 때 사용하는 언어&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 데이터베이스 사용자와 관리 시스템 간의 인터페이스를 제공함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 유형 : SELECT / INSERT / DELETE / UPDATE&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 명령어&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 기능&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; SELECT&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 테이블에서 조건에 맞는 튜플을 검색&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; INSERT&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 테이블에서 새로운 튜플을 삽입&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; DELETE&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 테이블에서 조건에 맞는 튜플을 삭제&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; UPDATE&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 테이블에서 조건에 맞는 튜플의 내용을 변경&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;DCL(데이터 제어어)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 데이터의 보안, 무결성 등을 정의하는데 사용되는 언어&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 데이터베이스 관리자가 데이터 관리를 목적으로 사용함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 유형 : COMMIT / ROLLBACK / GRANT / REVOKE&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 명령어&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 기능&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &lt;span style=&quot;color: #333333;&quot;&gt;COMMIT&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 명령에 의해 수행된 결과를 실제 물리적 디스크에 저장, 완료됨을 관리자에게 알림&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &lt;span style=&quot;color: #333333;&quot;&gt;ROLLBACK&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 데이터베이스 조작 작업이 비정상적으로 종료되었을 때 원래의 상태로 복구&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &lt;span style=&quot;color: #333333;&quot;&gt;GRANT&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 데이터베이스 사용자에게 사용 권한을 부여&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &lt;span style=&quot;color: #333333;&quot;&gt;REVOKE&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 데이터베이스 사용자의 사용 권한을 취소&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보처리기사</category>
      <category>정보처리기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/221</guid>
      <comments>https://liveyourit.tistory.com/221#entry221comment</comments>
      <pubDate>Thu, 28 May 2020 23:39:37 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 분산 데이터베이스 정의/목표(투명성)/장단점/설계</title>
      <link>https://liveyourit.tistory.com/219</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;분산 데이터베이스 정의&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;논리적으로는 하나의 시스템에 속하지만 물리적으로는 네트워크를 통해 연결된 여러개의 사이트에 분산되어 있느 데이터베이스를 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;분산 데이터베이스 목표&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;분산 데이터베이스의 4대 목표는 위치 투명성, 중복 투명성, 병행 투명성, 장애 투명성이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35%;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;투명성&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 65%;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;설명&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;위치 투명성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;(Location Trasparency)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터베이스의 실제 위치를 알 필요없이 단지 데이터베이스의 논리적인 명칭만으로 엑세스할 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;중복 투명성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;(Replication Transparency)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터가 여러 곳에 중복되어 있더라도 사용자는 마치 하나의 데이터만 존재하는 것처럼 사용 가능, 시스템은 자동으로 여러 자료에 대한 작업 수행&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;병행 투명성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;(Concurrency Transparency)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다수의 트랜잭션이 동시에 실현되더라도 그 결과는 영향을 받지 않음&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;장애 투명성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;(Failure Transparency)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;트랜잭션, DBMS, 네트워크, 컴퓨터 장애에도 트랜잭션을 정확히 처리함&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;분산 데이터베이스 장단점&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;분산 데이터베이스의 장단점은 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;지역 자치성이 높음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;자료의 공유성이 향상됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;분산 제어 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시스템 성능 향상&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;중앙 컴퓨터의 장아개 전체 시스템에 영향 X&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;효용성, 융통성, 신뢰성, 가용성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;용량 확장이 용이함&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;DBMS가 수행할 기능이 복잡&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;설계가 어려움&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;개발, 처리 비용 증가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;잠재적 오류 증가&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;분산 데이터베이스 설계&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;분산 데이터베이스의 설계는 어플리케이션이나 사용자가 분산되어 저장된 데이터에 접근하게 하는 것을 목적으로 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 전역 관계망을 논리적 측면에서 소규모 단위로 분할&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 분할된 결과를 복수의 노드에 할당하는 과정으로 진행&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 노드에 할당된 소규모 단위를 분할(Fragment)라 함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 분산 설계 방법에는 테이블 위치 분산, 분할, 할당(Allocation)이 존재&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;테이블 위치 분산&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 데이터베이스의 테이블을 각기 다른 서버에 분산시켜 배치하는 방법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;분할 (Fragment)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 테이블의 데이터를 분할하여 분산시키는 방법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 분할 규칙 : 완전성/재구성/상호중첩배제&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 분할 방법 : 수평분할/수직분할&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;할당 (Allocation)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 동일한 분할을 여러 서버에 생성하는 방법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 할당 방법 : 중복없는할당/중복있는할당&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보처리기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/219</guid>
      <comments>https://liveyourit.tistory.com/219#entry219comment</comments>
      <pubDate>Thu, 28 May 2020 21:39:01 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 자동 반복 요청 (ARQ), 오류 검출 방식(패리티/CRC/해밍)</title>
      <link>https://liveyourit.tistory.com/239</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;자동 반복 요청 (ARQ)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ARQ란, 오류발생 시 &lt;u&gt;수신측은 오류 발생을 송신측에 통보&lt;/u&gt;하고 &lt;u&gt;송신측은 오류 발생 블록을 재전송&lt;/u&gt;하는 절차를 의미한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 수신측 : 오류 발생 탐지, 통보&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 송신측 : 재전송&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;정지-대기 (Stop-and-Wait) ARQ&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 송신측에서 &lt;u&gt;한개의 블록을 전송&lt;/u&gt;한 후 수신측으로부터 응답을 기다리는 방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 구현 방법은 단순하지만, 전송 효율이 떨어짐&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Go-Back-N ARQ&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 연속적으로 데이터 블록을 보내는 연속 ARQ 중 하나&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;b&gt;오류가 발생한 블록 이후의 모든 블록&lt;/b&gt;을 재전송&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;선택적 재전송 (Selective Repeat) ARQ&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 연속적으로 데이터 블록을 보내는 연속 ARQ 중 하나&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;b&gt;오류가 발생한 블록만을 재전송&lt;/b&gt;하는 방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 수신측에서 원래 순서대로 조합해야 하므로 복잡해짐&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;적응적 (Adaptive) ARQ&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 데이터 블록의 길이를 채널의 상태에 따라 &lt;b&gt;동적&lt;/b&gt;으로 변경&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 전송 효율이 제일 좋음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 하지만 제어회로가 복잡하고 비용이 많이 들어 거의 사용되지 않음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오류 검출 방식&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;패리티 검사&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 전송 비트에 &lt;b&gt;1비트의 검사 비트인 패리티 비트&lt;/b&gt;를 추가해 오류검출&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 간단하지만 &lt;u&gt;2개 비트에 동시에 오류 발생 시 검출이 불가능&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 오류 검출만 가능, &lt;b&gt;수정은 불가능&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;순환 중복 검사 (CRC)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;b&gt;다항식 코드&lt;/b&gt;를 사용해 오류를 검출&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;b&gt;동기식 전송&lt;/b&gt;에서 주로 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- HDLC 프레임의 FCS를 만드는데 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;b&gt;집단오류&lt;/b&gt;를 검출할 수 있고 &lt;u&gt;검출률이 높아 가장 많이 사용함&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해밍 (Hamming) 코드&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;b&gt;수신측&lt;/b&gt;에서 오류가 발생한 비트를 검출, &lt;b&gt;직접 수정&lt;/b&gt;하는 방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;u&gt;1비트의 오류만 수정 가능&lt;/u&gt;, 정보 비트 외에 잉여비트가 필요함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 전송 비트 중 1,2,4,8,... 번째를 패리티 비트로 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 해밍 거리 : 송신 비트와 수신 비트중 서로 다른 비트의 수 (오류 비트 수)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;상승 코드&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 순차적 디코딩과 한계값 디코딩을 사용해 오류 수정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 여러 비트의 오류 수정 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보처리기사</category>
      <category>정보처리기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/239</guid>
      <comments>https://liveyourit.tistory.com/239#entry239comment</comments>
      <pubDate>Thu, 28 May 2020 00:57:05 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 데이터베이스 트랜잭션의 정의/특성/연산</title>
      <link>https://liveyourit.tistory.com/238</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;트랜잭션이란&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위, 일련의 연산을 의미한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 하나의 트랜잭션은 Commit되거나 Rollback된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;b&gt;Commit&lt;/b&gt; : 트랜잭션이 행한 연산이 완료된 것을 관리자에게 알리는 연산&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;b&gt;Rollback&lt;/b&gt; : 하나의 트랜잭션이 비정상 종료됐을 때, 일부가 정상적으로 처리됐더라도 &lt;b&gt;트랜잭션의 원자성&lt;/b&gt;을 구현하기 위해 모든 연산을 취소시키는 연산&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;트랜잭션의 특성&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;원자성 (Atomiciry)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 트랜잭션의 연산은 데이터베이스에 모두 반영되든지, 전혀 반영되지 않아야 함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 트랜잭션 내의 모든 명령은 완벽히 수행되어야 함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;u&gt;어느 하나라도 에러가 발생하면 트랜잭션의 전부가 취소&lt;/u&gt;되어야 함 (롤백)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;일관성 (Consistency)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성있는 데이터베이스 상태로 변환함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 시스템의 고정 요소가 &lt;u&gt;트랜잭션 전후에 상태가 같아야&lt;/u&gt; 함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;독립성, 격리성 (Isolation)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 &lt;u&gt;중간에 끼어들 수 없음&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 수행중인 트랜잭션은 완전히 &lt;u&gt;완료될 때까지 참조 불가능&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;영속성, 지속성 (Durability)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 성공적으로 완료된 트랜잭션의 결과는 &lt;u&gt;영구적으로 반영&lt;/u&gt;되어야 함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보처리기사</category>
      <category>정보처리기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/238</guid>
      <comments>https://liveyourit.tistory.com/238#entry238comment</comments>
      <pubDate>Thu, 28 May 2020 00:05:16 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 데이터베이스 병행제어 (문제점/목적/로킹/기법)</title>
      <link>https://liveyourit.tistory.com/237</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터베이스 병행제어(Concurrency Control)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;병행제어란 다중 프로그램의 이점을 활용해, 동시에 여러 트랜잭션을 병행 수행할 때, 동시에 실행되는 트랜잭션들이 데이터베이스의 일관성을 파괴하지 않도록 트랜잭션 간의 상호작용을 제어하는 것을 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터베이스 병행제어 문제점&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이러한 병행제어에는 아래와 같은 문제점이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;갱신분실 (Lost Update)&lt;/b&gt; &lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 갱신 결과의 일부가 없어짐&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;비완료 의존성 (Uncommitted Dependency)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하나의 트랜잭션 수행이 실패하고 회복되기 전 다른 트랜잭션이 참조하는 현상&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;모순성 (Inconsistency)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;두 트랜잭션이 병행 수행될 때, 원치 않는 자료를 이용함으로써 발생&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;연쇄복귀 (Cascading Rollback)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;병행 수행되던 트랜잭션들 중 어느 하나에 문제가 생겨 롤백하는 경우 다른 트랜잭션도 함께 롤백되는 현상&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;병행제어 목적&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 데이터베이스의 &lt;b&gt;공유&lt;/b&gt;를 최대화&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;b&gt;시스템 활용도&lt;/b&gt;를 최대화&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 데이터베이스의 &lt;b&gt;일관성&lt;/b&gt;을 유지&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 사용자에 대한 &lt;b&gt;응답시간을 최소화&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;로킹(Locking)이란&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 주요 데이터의 액세스를 상호 배타적으로 하는 것&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 트랜잭션들이 어떤 로킹 단위를 액세스하기 전에 Lock을 요청해서 Lock이 허락되어야만 그 로킹 단위를 액세스할 수 있도록 하는 기법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;로킹단위 (Locking Granularity)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 병행 제어에서한꺼번에 로킹할 수 있는 데이터 단위&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 데이터베이스, 파일, 레코드, 필드 등이 로킹 단위가 될 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;b&gt;로킹 단위가 크면&lt;/b&gt; 로크수가 작아 &lt;u&gt;관리하기가 쉽지만 병행성 수준이 낮아&lt;/u&gt;짐 (=오버헤드가 적지만 공유도 저하)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;b&gt;로킹 단위가 작으면&lt;/b&gt; 로크수가 많아 &lt;u&gt;관리하기 복잡하지만 병행성 수준이 높아짐 (&lt;/u&gt;=오버헤드가 크지만 공유도 증가)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;병행제어 기법의 종류&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2단계 잠금 규약&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 트랜잭션 스케줄의 직렬성을 보장하는 대표적인 잠금 기법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 직렬성은 보장하지만 교착상태를 예방할 수는 없음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size18&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;*교착상태 : 어떤 한 트랜잭션이 사용하기 위해 잠가놓은 자원을 사용하기 위해 기다리므로 모든 트랜잭션들이 실행을 진행하지 못하고 무한정 기다리고 있는 상태&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;타임스탬프 순서 기법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 트랜잭션이 시스템으로 들어오면 그 때의 시간 값이 트랜잭션의 타임스탬프가 됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 교착상태가 발생하지 않음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보처리기사</category>
      <category>정보처리기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/237</guid>
      <comments>https://liveyourit.tistory.com/237#entry237comment</comments>
      <pubDate>Wed, 27 May 2020 22:41:40 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 데이터베이스 뷰(View) 정의/특징/장점/단점</title>
      <link>https://liveyourit.tistory.com/218</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터베이스 뷰(View)란?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;뷰는 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 &lt;b&gt;기본 테이블로부터 유도된 가상 테이블&lt;/b&gt;을 말한다. &lt;span style=&quot;color: #333333;&quot;&gt;뷰 이름을 질의어에서 활용할 경우 질의어가 실행될 때 뷰에 정의된 기본테이블로 대체되어 기본 테이블에 대해 실행되게 된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 뷰는 임시적인 작업을 위한 용도로 활용됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 뷰는 사용상의 편의성을 최대화함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터베이스 뷰의 특징&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 기본 테이블에서 유도된 테이블이기 때문에 기본 테이블과 구조가 같음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;b&gt;가상 테이블&lt;/b&gt;로 물리적으로 구현되어 있지 않음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 데이터의 논리적 독립성을 제공함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 필요한 데이터만 뷰로 정의해 처리 가능하기 때문에 &lt;u&gt;관리가 용이&lt;/u&gt;함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 뷰에 나타나지 않은 데이터를 안전하게 보호 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 기본 테이블의 기본키를 포함한 속성 집합으로 뷰를 구성해야만 삽입, 삭제, 갱신이 가능함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 뷰가 정의된 기본테이블이 삭제되면 뷰도 자동으로 삭제됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터베이스 뷰의 장점/단점&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;뷰의 장점&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;b&gt;논리적 데이터 독립성&lt;/b&gt;을 제공&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 동일 데이터에 대해 동시에 여러 사용자의 요구를 지원해줌&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 사용자의 데이터 관리를 간단하게 해줌&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;u&gt;접근 제어를 통한 자동 보안&lt;/u&gt; 제공&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;뷰의 단점&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 독립적 인덱스를 가지지 못함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;b&gt;뷰의 정의 변경 불가능&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 삽입, 삭제, 갱신 연산에 제약이 따름&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;+) 뷰 생성/삭제 방법&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음과 같은 SQL문으로 뷰를 생성할 수 있다. &lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size18&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기존에 있던 테이블에 있는 컬럼에서 원하는 자료만 조회하는 것이기 때문에, 만들 때도 SELECT 문을 통해 생성한다.&lt;br /&gt;[ &lt;b&gt;CREATE&lt;/b&gt; VIEW 뷰이름 AS SELECT 구문; ]&lt;br /&gt;&lt;br /&gt;출처 : 위키백과, VIEW (SQL)&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음과 같은 SQL문으로 뷰를 삭제할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[ &lt;b&gt;DROP&lt;/b&gt; VIEW 뷰이름; ]&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보처리기사</category>
      <category>데이터베이스</category>
      <category>정보처리기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/218</guid>
      <comments>https://liveyourit.tistory.com/218#entry218comment</comments>
      <pubDate>Wed, 27 May 2020 10:36:40 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 시스템 카탈로그, 저장정보 및 특징</title>
      <link>https://liveyourit.tistory.com/217</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시스템 카탈로그 (System Catalog) 란?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시스템 카탈로그는 시스템 자체에 관련이 있는 다양한 객체에 관한 정보를 포함하는 시스템 데이터베이스이다.&amp;nbsp;카탈로그가 생성되면 데이터 사전 (Data Directory)에 저장되기 때문에 데이터 사전이라고도 한다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Data Directory&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 시스템 카탈로그는 사용자와 시스템 모두 접근할 수 있지만 데이터 디렉터리는 시스템만 접근 가능&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시스템 카탈로그 저장 정보&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시스템 카탈로그에 저장된 정보를 &lt;b&gt;메타데이터&lt;/b&gt;라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 데이터베이스 객체 정보 : 테이블, 인덱스, 뷰 등&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 사용자 정보 : ID, PW, 접근권한 등&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 테이블의 무결성 제약 조건 정보 : 기본키, 왜리키 등&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 함수, 프로시저, 트리거 등에 대한 정보&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시스템 카탈로그 특징&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 일반 사용자도 SQL을 사용해 내용을 검색할 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- INSERT, DELETE, UPDATE 문으로 &lt;u&gt;카탈로그를 갱신할 수 없음&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 카탈로그는 &lt;u&gt;DBMS가 스스로 생성하고 유지&lt;/u&gt;함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보처리기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/217</guid>
      <comments>https://liveyourit.tistory.com/217#entry217comment</comments>
      <pubDate>Wed, 27 May 2020 09:11:40 +0900</pubDate>
    </item>
    <item>
      <title>[네트워크] 인터넷 프로토콜(IP), 데이터그램 구조와 단편화 오프셋 계산법</title>
      <link>https://liveyourit.tistory.com/232</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;인터넷 프로토콜(IP) 개요&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IPv4는 비신뢰적이고 비연결형의 데이터그램 프로토콜이다. 비신뢰적이기 때문에 신뢰성있는 전송을 위해선 TCP와 같이 신뢰성 있는 전송 계층 프로토콜과 함께 사용되어야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 비신뢰성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 비접속형&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 주소지정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 경로설정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IPv4 데이터그램 구조&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IP가 사용하는 패킷을 데이터그램이라고 한다. 가변길이의 패킷으로 헤더와 페이로드로 이루어져 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;613&quot; width=&quot;501&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biSN42/btqEsYoFjGc/upMcfPb4njWRNBsg2qU6M1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biSN42/btqEsYoFjGc/upMcfPb4njWRNBsg2qU6M1/img.png&quot; data-alt=&quot;IP 데이터그램의 구조 (출처: 구글 무료이미지 검색)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biSN42/btqEsYoFjGc/upMcfPb4njWRNBsg2qU6M1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiSN42%2FbtqEsYoFjGc%2FupMcfPb4njWRNBsg2qU6M1%2Fimg.png&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;613&quot; width=&quot;501&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;IP 데이터그램의 구조 (출처: 구글 무료이미지 검색)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위 그림에 나와있는 각 필드에 대해 간단히 알아보자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;버전숫자&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- IP 프로토콜의 버전을 정의&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;헤더길이&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 데이터그램은 가변의 헤더를 가지게되기 떄문에 수신자가 데이터그램을 수신하면 헤더가 어디서 끝나고 패킷에 캡슐화된 데이터가 어디서 시작하는지 알아야 한다. 따라서 수신자는 전체 길이를 확인하기 위해 필드값에 4를 곱하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서비스유형&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 데이터그램을 어떻게 처리할지를 정의&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전체길이&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- IP 데이터그램의 전체 바이트 수를 정의함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;식별자 (단편화 관련)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;span style=&quot;color: #333333;&quot;&gt;데이터그램이 전송된 근원지 호스트를 구분&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;플래그 (단편화 관련)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- &lt;span style=&quot;color: #333333;&quot;&gt;세개의 비트로 단편화 관련 정보를 표시함&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 첫번째 비트 : 사용되지 않음&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 두번째 비트 : 단편화 금지 필드&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 세번째 비트 : 1이면 다른 단편이 더 있음을 의미, 0이면 마지막 단편이거나 오직 하나의 단편임을 의미&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단편화 오프셋&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;letter-spacing: 0px; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 전체 데이터그램에서 해당 단편의 상대적인 위치를 나타냄&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;생존시간&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- TTL 필드는 데이터그램이 방문할 수 있는 최대 라우터 수를 정의함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프로토콜&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 근원지 IP에서 페이로드가 캡슐화될 때, 이 필드에 상응하는 프로토콜의 번호가 추가됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;헤더 검사합(체크섬)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- IP는 헤더를 검사하기 위한 검사합 필드를 추가함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;근원지와 목적지주소&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 각각 소스IP와 목적지IP주소를 나타냄&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;옵션&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 데이터그램 헤더는 40바이트까지 옵션을 가질 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IP프로토콜의 단편화 오프셋 계산&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위에서 단편화와 관련된 필드 3개를 살펴봤다. 예를들어, 최대 MTU가 1500이고 크기가 4000바이트인 데이터그램이 3개로 단편화될 때, 단편화 오프셋 값은 어떻게 될까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4000바이트의 데이터그램, 3개의 단편화이다. 이 때, 단순히 2000바이트씩 쪼개기만 하는게 아니라 패킷도 IP 데이터그램 포맷에 맞춰야 한다. 헤더크기 20바이트를 고려하면 20바이트의 헤더와 3980의 페이로드로 이루어지게 된다. 여기서 3980이 왜 1480,1480,1020으로 나뉘는지 이해가 잘 안가는데 일단 MTU 값에서 헤더인 20을 뺀 것으로 이해하겠다... (틀렸다면 누군가 댓글좀 남겨주세요)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그리고 단편화 오프셋은 &lt;b&gt;1480/8 = 185&lt;/b&gt;가 되고 오프셋은 185씩 증가하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 입력 패킷 : 20 + 3980 (3980 : 1480 + 1480 + 1020)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 첫번째 단편 : 20 (헤더) + &lt;span style=&quot;color: #333333;&quot;&gt;1480&amp;nbsp;&lt;/span&gt;-&amp;gt; ID : x | flag : 1 |&lt;b&gt; offet : 0&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 두번째 단편 : 20 (헤더) + &lt;span style=&quot;color: #333333;&quot;&gt;1480&amp;nbsp;&lt;/span&gt;-&amp;gt; ID : x | flag : 1 | &lt;b&gt;offset : 185&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 세번째 단편 : 20 (헤더) + &lt;span style=&quot;color: #333333;&quot;&gt;1020 &lt;/span&gt;-&amp;gt; ID : x | flag : 1 | o&lt;b&gt;ffset : 370&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size18&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;참고자료&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[1] &lt;a href=&quot;https://wogh8732.tistory.com/29&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;wogh8732.tistory.com/29&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보보안기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/232</guid>
      <comments>https://liveyourit.tistory.com/232#entry232comment</comments>
      <pubDate>Wed, 27 May 2020 00:52:49 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 오버로딩(Overloading)과 오버라이딩(Overriding)</title>
      <link>https://liveyourit.tistory.com/231</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오버로딩(Overloading)이란?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오버로딩이란 같은 이름의 메소드를 여러개 정의하면서 매개변수의 유형과 개수가 다르게 하는 것을 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오버라이딩(Overriding)이란?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;상위 클래스의 메소드를 하위클래스에서 재정의해서 사용하는 것을 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오버로딩, 오버라이딩 관련 기출문제&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그냥 정의만 봐서는 이해가 잘 가지 않으니 예제문을 하나 봐보자. 9급 전산직 기출 문제 중 하나로 Java 프로그램의 출력 결과를 묻고있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여기서 오버라이딩이 될 수 있는 조건을 먼저 알아야 하는데, 오버라이딩이 되기 위해선 &lt;u&gt;시그니처(반환형, 메소드명, 인자개수/형)이 같아야&lt;/u&gt; 한다. 그런데 func2의 경우 반환형이 int/double로 불일치한다. 따라서 &lt;b&gt;오버라이딩이 되지 않았기 때문에 재정의한 메소드 대신 부모클래스의 메소드가 수행&lt;/b&gt;되게 된다. 그리고 &lt;b&gt;오버라이딩이 되는 func1, func3의 경우 하위클래스인 ClassA의 메소드가 수행&lt;/b&gt;되게 된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;따라서 결과는 1,3,2가 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;527&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brzmCN/btqEo72licA/cOG1VgGxzsGccTAWks9kCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brzmCN/btqEo72licA/cOG1VgGxzsGccTAWks9kCK/img.png&quot; data-alt=&quot;전산직 9급 기출문제 (출처 : http://q.fran.kr/)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brzmCN/btqEo72licA/cOG1VgGxzsGccTAWks9kCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrzmCN%2FbtqEo72licA%2FcOG1VgGxzsGccTAWks9kCK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;527&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;전산직 9급 기출문제 (출처 : http://q.fran.kr/)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보처리기사</category>
      <category>Java</category>
      <category>정보처리기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/231</guid>
      <comments>https://liveyourit.tistory.com/231#entry231comment</comments>
      <pubDate>Tue, 26 May 2020 23:58:30 +0900</pubDate>
    </item>
    <item>
      <title>[네트워크] 서브넷마스크 계산문제 풀이</title>
      <link>https://liveyourit.tistory.com/230</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;옛날에 네트워크 자격증 공부할 때 서브넷마스크 계산 문제를 엄청 풀었었던 기억이 있는데 다 잊어버렸다... 몇가지 문제를 풀어보자.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;ex-1&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;회사에서 211.168.83.0 (클래스C)의 네트워크를 사용하고 있다. 내부적으로 5개의 서브넷을 사용하기 위해 서브넷 마스크를 255.255.255.224로 설정하였다. 이때, 211.168.83.34가 속한 서브넷의 브로드캐스트 주소는?&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;10000000 -&amp;gt; 128&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;11000000 -&amp;gt; 192&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;11100000 -&amp;gt; 224&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;서브넷마스크가 ~.224이니까 3개 비트를 쓴 것이므로 2^3=8, 8개로 분할해야 함&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;256개를 8개로 분할한 것이기 때문에 한개당 32가 됨&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;0~31&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;32~63 -&amp;gt; 34는 여기 속하므로 브로드캐스트 주소는 211.168.83.63&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;64~95&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;ex-2&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;어느회사 A가 공인 IP 주소가 210.100.1.0인 네트워크를 받았다. A사의 건물은 8층이며 각 층마다 네트워크를 달리했으면 한다. 각 층별로 컴퓨터 30대를 놓으려면 서브넷마스크는 어떻게 되는가?&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;30개라는 것은 256을 8로 분할했을 때 32개이므로 8개로 분할하겠다는 뜻임&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;8=2^3이므로 앞 세비트가 1이면 됨&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;11100000 = 224&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;따라서 서브넷마스크 255.255.255.0에서 255.255.255.224로 서브넷팅을 하면 각 8개층이 32개씩 사용할 수 있게됨 (여기서 브로드캐스트 주소를 빼고 하나더 뭐였는지 기억이 안나는데 -2를 하면 30개)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;ex-3 &lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;IP주소 203.10.24.27의 서브넷마스크는 255.255.255.240이다. 이때 네트워크의 호스트 범위와 브로드캐스트 주소는?&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;10000000 -&amp;gt; 128&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;11000000 -&amp;gt; 192&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;11100000 -&amp;gt; 224&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;11110000 -&amp;gt; 240&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;서브넷마스크가 240이므로 11110000이고 2^4=16개로 분할하겠다는 의미임&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;256/16 = 16이기 떄문에 범위는&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;0~15&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;16~31 -&amp;gt; 27이므로 호스트 범위는 203.10.24.16 ~ 203.10.24.31이 되고 브로드캐스트 주소는 31이 됨&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;32~47&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;ex-4&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;C클래스 IP 대역을 사용중인 것을 각 사무실마다 51개의 IP를 각각 부여하려할때 사용할 수 있는 서브넷마스크의 비트수는?&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;10000000 -&amp;gt; 128 -&amp;gt; 2^1 = 2개로 분할 -&amp;gt; 256/2 = 128개&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;11000000 -&amp;gt; 192 -&amp;gt; 2^2 = 4개로 분할 -&amp;gt; 256/4 = 64개 -----&amp;gt; 51개의 IP 부여 가능&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;11100000 -&amp;gt; 224 -&amp;gt; 2^3 = 8개로 분할 -&amp;gt; 256/8 = 32개&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;11110000 -&amp;gt; 240&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;따라서 서브넷마스크는 255.255.255.192이고 비트수는 26비트(1*24 + 2)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>네트워크</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/230</guid>
      <comments>https://liveyourit.tistory.com/230#entry230comment</comments>
      <pubDate>Tue, 26 May 2020 23:19:04 +0900</pubDate>
    </item>
    <item>
      <title>[네트워크] IPv4의 개념과 IPv6의 등장 배경, 특징 및 비교</title>
      <link>https://liveyourit.tistory.com/229</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;IPv4의 클래스 기반 주소 지정&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IPv4에서 전체 주소 공간은 5개의 클래스로 구분되고 이것을 클래스 기반 주소지정이라고 한다. A,B,C 클래스만이 네트워크 주소와 호스트 주소체계의 주소를 갖고, D 클래스는 멀티캐스팅용, E 클래스는 실험용이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 95px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 12%; height: 19px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp; 클래스 A&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 88%; height: 19px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - 첫번째 비트가 &lt;b&gt;0&lt;/b&gt;인 IP주소&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - 큰 규모의 호스트를 갖는 기관에서 사용함&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 19px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp; 클래스 B&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 19px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - 처음 두 비트의 값이 &lt;b&gt;10&lt;/b&gt;인 IP 주소&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - 첫바이트의 나머지 6비트와 두번째 바이트가 네트워크 주소, 나머지 두바이트가 호스트 주소&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 19px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp; 클래스 C&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 19px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - 처음 세비트의 값이 &lt;b&gt;110&lt;/b&gt;인 주소&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp;- 세번째 바이트까지가 네트워크 주소, 마지막 한바이트가 호스트 주소&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - 네트워크마다 254개까지 호스트를 수용할 수 있기 때문에 작은 규모의 네트워크에서 사용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 19px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp; 클래스 D&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 19px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - 처음 네비트의 값이 &lt;b&gt;1110&lt;/b&gt;인 주소&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - 네트워크 주소와 호스트 주소의 구분이 없고 전체 주소가 &lt;b&gt;멀티캐스트용&lt;/b&gt;으로 사용됨&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 19px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp; 클래스 E&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 19px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - 처음 네비트의 값이 1111인 주소&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - 추후 사용을 위해 예약된 주소&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;클래스 기반의 주소가 더 이상 사용되지 않는 이유는 주소 고갈 때문이다. 기관이나 개인이 사용할 주소가 더이상 남지 않게 되는 문제에 직면하게 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IPv4의 서브네팅과 수퍼네팅&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;주소 고갈을 완화하기 위해 서브네팅, 수퍼네팅의 두 기술이 제안되었다. &lt;span style=&quot;color: #333333;&quot;&gt;서브넷마스크 관련 문제 풀이는 아래 포스팅을 참고하길 바란다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 서브네팅 : 큰 구조를 작은 것으로 나누기 위해 고안됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 수퍼네팅 : 여러 클래스 C를 하나의 큰 구조로 묶어 더 많은 주소를 사용하려는 기관들을 위해 고안됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://liveyourit.tistory.com/230&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[네트워크] 서브넷마스크 계산문제 풀이&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1590548873718&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[네트워크] 서브넷마스크 계산문제 풀이&quot; data-og-description=&quot;옛날에 네트워크 자격증 공부할 때 서브넷마스크 계산 문제를 엄청 풀었었던 기억이 있는데 다 잊어버렸다... 몇가지 문제를 풀어보자. ex-1) 회사에서 211.168.83.0 (클래스C)의 네트워크를 사용하고&quot; data-og-host=&quot;liveyourit.tistory.com&quot; data-og-source-url=&quot;https://liveyourit.tistory.com/230&quot; data-og-url=&quot;https://liveyourit.tistory.com/230&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c5Utpg/hyGbuNF0h2/cGn4BokeKpsGUvqqVv0PVK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/dr8Z1p/hyGcm8l7Cp/YPNOOeK6WtkHeJO6Q82ct1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/mR6GE/hyGcvjV9WM/wiDbDMrldKKikLnikp3hiK/img.jpg?width=675&amp;amp;height=670&amp;amp;face=0_0_675_670&quot;&gt;&lt;a href=&quot;https://liveyourit.tistory.com/230&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://liveyourit.tistory.com/230&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c5Utpg/hyGbuNF0h2/cGn4BokeKpsGUvqqVv0PVK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/dr8Z1p/hyGcm8l7Cp/YPNOOeK6WtkHeJO6Q82ct1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/mR6GE/hyGcvjV9WM/wiDbDMrldKKikLnikp3hiK/img.jpg?width=675&amp;amp;height=670&amp;amp;face=0_0_675_670');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[네트워크] 서브넷마스크 계산문제 풀이&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;옛날에 네트워크 자격증 공부할 때 서브넷마스크 계산 문제를 엄청 풀었었던 기억이 있는데 다 잊어버렸다... 몇가지 문제를 풀어보자. ex-1) 회사에서 211.168.83.0 (클래스C)의 네트워크를 사용하고&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;liveyourit.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IPv6이 등장하게 된 이유&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IP주소에 대한 수요가 증가하면서 IPv4(32비트)의 주소체계로는 처리가 어렵게 되었다. 따라서 IPv6가 등장하게 되었는데 IPv4의 32비트 주소길이를 4배 확장한 128비트 주소길이를 사용해 약 2^128개의 주소가 생성이 가능하게 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IPv6 특징&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;확장된 주소 공간&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 128비트 주소체계를 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 기존 클래스별 할당을 지양, 유니캐스트/애니케스트/멀티캐스트 주소형태 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;새로운 헤더포맷&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 확장헤더를 도입함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 헤더를 고정 길이로 변경&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 패킷 단편화 관련 필드 삭제&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 체크섬 필드 삭제 (이미 데이터링크 계층에서 체크섬의 계산이 행해지므로)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;보안기능&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IPv4는 IPSec이라는 보안 프로토콜들을 별도로 설치해주어야 하는 부가적 기능을 필요로 했는데 IPv6는 프로토콜 내에 보안관련 기능을 탑재할 수 있도록 설계되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 인증, 무결성, 발신지 확인기능을 제공&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 확장헤더를 통해 네트워크 계층에서의 종단간 암호화를 제공, 패킷 변조를 방지함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IPv4 vs IPv6 비교&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IPv4와 IPv6를 비교하면 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;구분&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IPv4&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IPv6&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;주소길이&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;32비트&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;128비트&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;표시방법&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;8비트씩 4부분 10진수 표시&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;16비트씩 8부분 16진수 표시&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;주소개수&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;약 43억개&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2^128개&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;주소할당방식&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;클래스 단위의 비순차 할당&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;순차할당&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;브로드캐스트&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;있음&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;없음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;헤더크기&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;가변&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;고정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;보안&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IPSec 별도 설치 필요&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IPSec 자체 지원&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증,이론/정보보안기사</category>
      <author>leeforest</author>
      <guid isPermaLink="true">https://liveyourit.tistory.com/229</guid>
      <comments>https://liveyourit.tistory.com/229#entry229comment</comments>
      <pubDate>Tue, 26 May 2020 22:53:34 +0900</pubDate>
    </item>
  </channel>
</rss>