<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>끄적끄적</title>
    <link>https://choiiii-dev.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 27 Jun 2026 13:32:02 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Choiji</managingEditor>
    <image>
      <title>끄적끄적</title>
      <url>https://tistory1.daumcdn.net/tistory/4648435/attach/dbe38ee4fa274fefadf35d86cd96fcc7</url>
      <link>https://choiiii-dev.tistory.com</link>
    </image>
    <item>
      <title>파이토치로 배우는 LLM &amp;amp; 생성형 AI | 머신러닝&amp;middot;딥러닝 개발자를 위한 책 소개</title>
      <link>https://choiiii-dev.tistory.com/36</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;최근 &lt;b&gt;ChatGPT, 생성형 AI, LLM(대규모 언어 모델)&lt;/b&gt;이 빠르게 발전하면서&lt;br /&gt;AI 개발을 공부하려는 개발자들도 크게 늘어나고 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;330&quot; data-start=&quot;208&quot; data-ke-size=&quot;size16&quot;&gt;머신러닝과 딥러닝을 넘어 이제는 &lt;b&gt;LLM과 생성형 AI 기술&lt;/b&gt;이 중요한 시대가 되었는데요.&lt;br /&gt;오늘은 &lt;b&gt;파이토치(PyTorch) 기반으로 LLM과 생성형 AI를 설명하는 책 소개 영상&lt;/b&gt;을 공유해 보려고 합니다.&lt;/p&gt;
&lt;p data-end=&quot;438&quot; data-start=&quot;332&quot; data-ke-size=&quot;size16&quot;&gt;이 영상에서는&lt;br /&gt;&lt;b&gt;머신러닝 &amp;rarr; 딥러닝 &amp;rarr; LLM(대규모 언어 모델)&lt;/b&gt;로 이어지는 흐름과 함께&lt;br /&gt;개발자가 어떤 방식으로 AI 공부를 시작하면 좋은지 전반적인 방향을 설명하고 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;488&quot; data-start=&quot;440&quot; data-ke-size=&quot;size16&quot;&gt;AI 개발이나 생성형 AI 기술에 관심 있는 분들이라면 참고해보셔도 좋을 것 같습니다.&lt;/p&gt;
&lt;hr data-end=&quot;493&quot; data-start=&quot;490&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;505&quot; data-start=&quot;495&quot; data-section-id=&quot;6ugh1&quot;&gt;  영상 보기&lt;/h1&gt;
&lt;p data-end=&quot;535&quot; data-start=&quot;507&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/vEwY31kDtl4&quot;&gt;https://youtu.be/vEwY31kDtl4&lt;/a&gt;&lt;/p&gt;
&lt;hr data-end=&quot;540&quot; data-start=&quot;537&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;555&quot; data-start=&quot;542&quot; data-section-id=&quot;1vlrkjy&quot;&gt;영상 내용 간단 정리&lt;/h1&gt;
&lt;p data-end=&quot;582&quot; data-start=&quot;557&quot; data-ke-size=&quot;size16&quot;&gt;이 영상에서는 다음과 같은 내용을 소개합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;700&quot; data-start=&quot;584&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;606&quot; data-start=&quot;584&quot; data-section-id=&quot;12cb4xl&quot;&gt;파이토치 기반 머신러닝 학습 방법&lt;/li&gt;
&lt;li data-end=&quot;623&quot; data-start=&quot;607&quot; data-section-id=&quot;t6a574&quot;&gt;딥러닝 모델 구조 이해&lt;/li&gt;
&lt;li data-end=&quot;652&quot; data-start=&quot;624&quot; data-section-id=&quot;hquf5&quot;&gt;&lt;b&gt;LLM(대규모 언어 모델) 개념 설명&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;675&quot; data-start=&quot;653&quot; data-section-id=&quot;1w35mll&quot;&gt;생성형 AI가 동작하는 기본 원리&lt;/li&gt;
&lt;li data-end=&quot;700&quot; data-start=&quot;676&quot; data-section-id=&quot;14unap0&quot;&gt;AI 개발자가 공부해야 할 기술 스택&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;755&quot; data-start=&quot;702&quot; data-ke-size=&quot;size16&quot;&gt;특히 &lt;b&gt;이론 중심이 아니라 실습 중심으로 AI를 이해할 수 있도록 구성된 점&lt;/b&gt;이 특징입니다.&lt;/p&gt;
&lt;hr data-end=&quot;760&quot; data-start=&quot;757&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;774&quot; data-start=&quot;762&quot; data-section-id=&quot;3qwbiu&quot;&gt;이런 분들에게 추천&lt;/h1&gt;
&lt;p data-end=&quot;892&quot; data-start=&quot;776&quot; data-ke-size=&quot;size16&quot;&gt;✔ 머신러닝 / 딥러닝 공부를 시작하려는 개발자&lt;br /&gt;✔ ChatGPT 같은 &lt;b&gt;LLM 기술이 궁금한 분&lt;/b&gt;&lt;br /&gt;✔ 파이토치 기반 AI 개발을 배우고 싶은 분&lt;br /&gt;✔ 생성형 AI 구조를 이해하고 싶은 개발자&lt;/p&gt;
&lt;hr data-end=&quot;897&quot; data-start=&quot;894&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;920&quot; data-start=&quot;899&quot; data-section-id=&quot;h4j90a&quot;&gt;AI 공부 로드맵 (개인적인 추천)&lt;/h1&gt;
&lt;p data-end=&quot;951&quot; data-start=&quot;922&quot; data-ke-size=&quot;size16&quot;&gt;AI 개발을 공부할 때 보통 다음 순서로 진행합니다.&lt;/p&gt;
&lt;p data-end=&quot;1030&quot; data-start=&quot;953&quot; data-ke-size=&quot;size16&quot;&gt;1️⃣ Python 기초&lt;br /&gt;2️⃣ 머신러닝 기초&lt;br /&gt;3️⃣ 딥러닝&lt;br /&gt;4️⃣ 자연어처리(NLP)&lt;br /&gt;5️⃣ &lt;b&gt;LLM / 생성형 AI&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;1090&quot; data-start=&quot;1032&quot; data-ke-size=&quot;size16&quot;&gt;최근에는 자연어처리 이후 바로 &lt;b&gt;LLM 개발 및 생성형 AI 활용 기술&lt;/b&gt;을 공부하는 경우도 많습니다.&lt;/p&gt;
&lt;hr data-end=&quot;1095&quot; data-start=&quot;1092&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;1102&quot; data-start=&quot;1097&quot; data-section-id=&quot;20h5rq&quot;&gt;마무리&lt;/h1&gt;
&lt;p data-end=&quot;1165&quot; data-start=&quot;1104&quot; data-ke-size=&quot;size16&quot;&gt;AI 기술은 앞으로도 계속 빠르게 발전할 분야이기 때문에&lt;br /&gt;기초 개념과 흐름을 이해해 두는 것이 중요합니다.&lt;/p&gt;
&lt;p data-end=&quot;1260&quot; data-start=&quot;1167&quot; data-ke-size=&quot;size16&quot;&gt;이번 영상은 &lt;b&gt;AI 개발을 처음 시작하려는 분들이 전체적인 흐름을 이해하는 데 도움이 되는 내용&lt;/b&gt;이라&lt;br /&gt;관심 있는 분들은 한 번 참고해 보셔도 좋을 것 같습니다.&lt;/p&gt;</description>
      <category>LLM</category>
      <category>AI개발</category>
      <category>ChatGPT</category>
      <category>llm</category>
      <category>pytorch</category>
      <category>대규모언어모델</category>
      <category>딥러닝</category>
      <category>머신러닝</category>
      <category>생성형AI</category>
      <category>자연어처리</category>
      <category>파이토치</category>
      <author>Choiji</author>
      <guid isPermaLink="true">https://choiiii-dev.tistory.com/36</guid>
      <comments>https://choiiii-dev.tistory.com/36#entry36comment</comments>
      <pubDate>Thu, 12 Mar 2026 23:36:10 +0900</pubDate>
    </item>
    <item>
      <title>[이벤트 당첨 후기] 나만의 MCP 서버 만들기 with 커서 AI</title>
      <link>https://choiiii-dev.tistory.com/35</link>
      <description>&lt;!-- 본문 시작 --&gt;
&lt;article class=&quot;post-wrap&quot; style=&quot;max-width: 860px; margin: 0 auto; line-height: 1.75; font-size: 16px; color: #1f2937;&quot;&gt;&lt;header style=&quot;margin-bottom: 28px;&quot;&gt;
&lt;h1 style=&quot;font-size: 28px; line-height: 1.3; margin: 0 0 8px 0; font-weight: 800;&quot;&gt;[이벤트 당첨 후기] 「나만의 MCP 서버 만들기 with 커서 AI」 첫인상 &amp;amp; 읽기 전 기대 포인트&lt;/h1&gt;
&lt;p style=&quot;margin: 0; color: #6b7280;&quot; data-ke-size=&quot;size16&quot;&gt;카카오톡 오픈채팅 이벤트 당첨 후기 &amp;middot; 길벗출판사 신간&lt;/p&gt;
&lt;/header&gt;
&lt;figure style=&quot;margin: 24px 0;&quot;&gt;&lt;img style=&quot;width: 100%; height: auto; border-radius: 12px;&quot; src=&quot;https://play.google.com/books/publisher/content/images/frontcover/qZt2EQAAQBAJ?w=300&amp;amp;usc=0&quot; alt=&quot;나만의 MCP 서버 만들기 with 커서 AI 책 표지&quot; /&gt;
&lt;figcaption style=&quot;font-size: 13px; color: #6b7280; margin-top: 8px;&quot;&gt;길벗출판사 신간: 나만의 MCP 서버 만들기 with 커서 AI&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;section style=&quot;margin: 28px 0;&quot;&gt;
&lt;h2 style=&quot;font-size: 22px; margin: 0 0 12px 0;&quot; data-ke-size=&quot;size26&quot;&gt;이벤트 당첨 소감&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카카오톡 오픈톡방에서 진행된 이벤트에 참여했다가 운 좋게 &lt;b&gt;「나만의 MCP 서버 만들기 with 커서 AI」&lt;/b&gt; 도서를 선물받았습니다. 이벤트를 진행해주신 오픈채팅 운영진과 출판사에 감사드립니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 AI 도구를 업무/개발관련하여 공부해야겠다 싶었는데, &lt;b&gt;Cursor AI&lt;/b&gt;와 &lt;b&gt;Claude Desktop&lt;/b&gt; 환경에서 &lt;b&gt;MCP(Multi Capability Protocol)&lt;/b&gt; 기반 서버를 직접 만들어보는 이 책의 주제가 딱 꽂혔습니다.&lt;/p&gt;
&lt;/section&gt;
&lt;section style=&quot;margin: 28px 0;&quot;&gt;
&lt;h2 style=&quot;font-size: 22px; margin: 0 0 12px 0;&quot; data-ke-size=&quot;size26&quot;&gt;  책 한눈에 보기&lt;/h2&gt;
&lt;ul style=&quot;padding-left: 18px; margin: 0;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;출판사&lt;/b&gt; : 길벗&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 키워드&lt;/b&gt; : Cursor AI, Claude Desktop, MCP 서버, 확장/커스터마이징, 실습 위주&lt;/li&gt;
&lt;li&gt;&lt;b&gt;구성&lt;/b&gt; : 환경 설정 &amp;rarr; MCP 핵심 개념 &amp;rarr; 기능 모듈 추가 &amp;rarr; 실전 예제&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin-top: 12px;&quot; data-ke-size=&quot;size16&quot;&gt;책 정보(YES24): https://www.yes24.com/product/goods/150009569&lt;/p&gt;
&lt;/section&gt;
&lt;section style=&quot;margin: 28px 0;&quot;&gt;
&lt;h2 style=&quot;font-size: 22px; margin: 0 0 12px 0;&quot; data-ke-size=&quot;size26&quot;&gt;읽기 전 기대 포인트&lt;/h2&gt;
&lt;ol style=&quot;padding-left: 18px; margin: 0;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;MCP 개념을 실습으로 체득&lt;/b&gt; &amp;mdash; 프로토콜 구조와 플로우를 손으로 익히기.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;나만의 AI 툴체인 구축&lt;/b&gt; &amp;mdash; 필요한 기능을 모듈처럼 붙여 생산성 도구로 만들기.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실무 적용 아이디어&lt;/b&gt; &amp;mdash; 사이드 프로젝트&amp;middot;업무 자동화에 곧바로 이식.&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
&lt;section style=&quot;margin: 28px 0;&quot;&gt;
&lt;h2 style=&quot;font-size: 22px; margin: 0 0 12px 0;&quot; data-ke-size=&quot;size26&quot;&gt;계획: 이렇게 실습해보기&lt;/h2&gt;
&lt;ul style=&quot;padding-left: 18px; margin: 0;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Cursor/Claude 환경 세팅 후 예제 따라가며 &lt;b&gt;기본 MCP 서버&lt;/b&gt; 구동&lt;/li&gt;
&lt;li&gt;자주 쓰는 작업(로그/배포/문서요약)을 &lt;b&gt;MCP 기능 모듈&lt;/b&gt;로 만들어 보기&lt;/li&gt;
&lt;li&gt;개인 프로젝트에 붙여 &lt;b&gt;효율 개선 지표&lt;/b&gt;(시간 단축, 반복 작업 감소) 측정&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section style=&quot;margin: 28px 0;&quot;&gt;
&lt;h2 style=&quot;font-size: 22px; margin: 0 0 12px 0;&quot; data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;곧 완독 후에 &lt;b&gt;실습 후기 + 예제 확장&lt;/b&gt; 내용을 정리해 올리겠습니다.&lt;/p&gt;
&lt;blockquote style=&quot;margin: 16px 0; padding: 14px 16px; background: #f9fafb; border-left: 4px solid #3b82f6; border-radius: 8px;&quot; data-ke-style=&quot;style1&quot;&gt;다시 한 번 좋은 기회를 주신 오픈채팅방 운영진분과 길벗출판사에 감사드립니다!&lt;/blockquote&gt;
&lt;/section&gt;
&lt;footer style=&quot;margin-top: 40px; font-size: 14px; color: #6b7280;&quot;&gt;* 이 글은 이벤트로 도서를 제공받아 작성한 후기이며, 솔직한 개인 의견을 담았습니다.&lt;/footer&gt;&lt;/article&gt;
&lt;!-- 본문 끝 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>MCP</category>
      <category>Ai</category>
      <category>Claude</category>
      <category>CURSOR</category>
      <category>mcp</category>
      <author>Choiji</author>
      <guid isPermaLink="true">https://choiiii-dev.tistory.com/35</guid>
      <comments>https://choiiii-dev.tistory.com/35#entry35comment</comments>
      <pubDate>Sun, 10 Aug 2025 21:52:53 +0900</pubDate>
    </item>
    <item>
      <title>Git 연습 #2(mac os)</title>
      <link>https://choiiii-dev.tistory.com/33</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://choiiii-dev.tistory.com/32&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2022.07.21 - [Git] - Git 연습 #1(mac os)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1660036782359&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;Git 연습 #1(mac os)&quot; data-og-description=&quot;깃 설치 brew install git ※ homebrew가 없으시면 https://brew.sh에서 설치 해주세요 Homebrew The Missing Package Manager for macOS (or Linux). brew.sh 깃까지 설치가 완료되시면 깃 연습을 할 폴더를 만듭..&quot; data-og-host=&quot;choiiii-dev.tistory.com&quot; data-og-source-url=&quot;https://choiiii-dev.tistory.com/32&quot; data-og-url=&quot;https://choiiii-dev.tistory.com/32&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/2AA44/hyPmhk0Zq2/1vP7QAvieHlgtUIeesCwlK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/cUt53Q/hyPod89eI1/ls5Y8AKAnOeowkSPiBrR90/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/dJiUbQ/hyPoqHpooj/qydBK1bEhypmZyKLTVsa0k/img.png?width=1396&amp;amp;height=584&amp;amp;face=0_0_1396_584&quot;&gt;&lt;a href=&quot;https://choiiii-dev.tistory.com/32&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://choiiii-dev.tistory.com/32&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/2AA44/hyPmhk0Zq2/1vP7QAvieHlgtUIeesCwlK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/cUt53Q/hyPod89eI1/ls5Y8AKAnOeowkSPiBrR90/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/dJiUbQ/hyPoqHpooj/qydBK1bEhypmZyKLTVsa0k/img.png?width=1396&amp;amp;height=584&amp;amp;face=0_0_1396_584');&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;Git 연습 #1(mac os)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;깃 설치 brew install git ※ homebrew가 없으시면 https://brew.sh에서 설치 해주세요 Homebrew The Missing Package Manager for macOS (or Linux). brew.sh 깃까지 설치가 완료되시면 깃 연습을 할 폴더를 만듭..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;choiiii-dev.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 글을 안보신 분들은 보고 오시기 바래요~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 글에 이어서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깃 커밋을 연습하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;명령어 : &lt;/b&gt;git commit&lt;/h4&gt;
&lt;pre id=&quot;code_1660052240972&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; ~/projects/git master &amp;plusmn;✚ &amp;gt; git commit
[master (최상위-커밋) 4c0f613] Title
 3 files changed, 4 insertions(+)
 create mode 100644 a.txt
 create mode 100644 b.txt
 create mode 100644 c.txt&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;git commit 메시지만 입력하면&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1660052323373&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Title
# 변경 사항에 대한 커밋 메시지를 입력하십시오. '#' 문자로 시작하는
# 줄은 무시되고, 메시지를 입력하지 않으면 커밋이 중지됩니다.
#
# 현재 브랜치 master
# 커밋할 변경 사항:
#       새 파일:       add
#
~&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런식으로 기본적인 템플릿이 나오게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커밋 메시지로 사용할 내용을 주석이 아닌 부분에 작성해 주시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커밋 메시지를 미리 작성하는 옵션도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git commit -m &quot;커밋 내용&quot;을 사용하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1660052665175&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo add &amp;gt;&amp;gt; c.txt
git status -s
M c.txt
?? .gitignore
git add .
git commit -m &quot;seccond commit&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 작성하시면 &lt;b&gt;-m&lt;/b&gt; 옵션을 사용하기 전 처럼 템플릿이 뜨지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 commit명령어의 옵션에 &lt;b&gt;-am&lt;/b&gt;가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 추적중인 수정된 파일을 전부 포함하는 명령어입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(working directory, staging area에 있는 모든 파일)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git commit -am &quot;커밋 메시지&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 추적중인 추적중인 모든 병경된 파일을 커밋합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;commit한 내역을 확인하시려면&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;git log&lt;/b&gt; 명령어를 사용하면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1660053230526&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; ~/projects/git   master &amp;plusmn;  vi c.txt
commit 6ebbfa3fd178850612d448837f09be574c9a5686 (HEAD -&amp;gt; master)
Author: ??
Date:   Tue Aug 9 18:05:41 2022 +0900

    third commit

commit 5bcc2e8e79330f03c70f6038cccb1c172031d8d4
Author: ??
Date:   Tue Aug 9 18:04:38 2022 +0900

    seccond commit

commit 4c0f613a21588a9f2df8202bc5ec13f35d1448d8
Author: ??
Date:   Tue Aug 9 18:01:46 2022 +0900

    Title

    Description
(END)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 &lt;b&gt;history&lt;/b&gt; 내역을 확인 하실 수 있습니다.&lt;/p&gt;</description>
      <category>Git</category>
      <category>commit</category>
      <category>git</category>
      <category>git commit</category>
      <category>깃</category>
      <category>커밋</category>
      <author>Choiji</author>
      <guid isPermaLink="true">https://choiiii-dev.tistory.com/33</guid>
      <comments>https://choiiii-dev.tistory.com/33#entry33comment</comments>
      <pubDate>Tue, 9 Aug 2022 22:56:43 +0900</pubDate>
    </item>
    <item>
      <title>Git 연습 #1(mac os)</title>
      <link>https://choiiii-dev.tistory.com/32</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;깃 설치&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1658413731207&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew install git&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ homebrew가 없으시면 &lt;a href=&quot;https://brew.sh&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://brew.sh&lt;/a&gt;에서 설치 해주세요&lt;/p&gt;
&lt;figure id=&quot;og_1658413833753&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;Homebrew&quot; data-og-description=&quot;The Missing Package Manager for macOS (or Linux).&quot; data-og-host=&quot;brew.sh&quot; data-og-source-url=&quot;https://brew.sh&quot; data-og-url=&quot;https://brew.sh/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nNT93/hyO8X73tjX/2K3j6tkoHsW8Ce4TOy8gB1/img.png?width=1200&amp;amp;height=560&amp;amp;face=0_0_1200_560,https://scrap.kakaocdn.net/dn/jealV/hyPapu6Cuf/Rdp35Hn6DONvCUV3CcAuZ1/img.png?width=1200&amp;amp;height=560&amp;amp;face=0_0_1200_560,https://scrap.kakaocdn.net/dn/wIsx2/hyPaBCjx8v/MGK7ljpmLbyJJx0z2M9chk/img.png?width=298&amp;amp;height=298&amp;amp;face=0_0_298_298&quot;&gt;&lt;a href=&quot;https://brew.sh&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://brew.sh&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nNT93/hyO8X73tjX/2K3j6tkoHsW8Ce4TOy8gB1/img.png?width=1200&amp;amp;height=560&amp;amp;face=0_0_1200_560,https://scrap.kakaocdn.net/dn/jealV/hyPapu6Cuf/Rdp35Hn6DONvCUV3CcAuZ1/img.png?width=1200&amp;amp;height=560&amp;amp;face=0_0_1200_560,https://scrap.kakaocdn.net/dn/wIsx2/hyPaBCjx8v/MGK7ljpmLbyJJx0z2M9chk/img.png?width=298&amp;amp;height=298&amp;amp;face=0_0_298_298');&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;Homebrew&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The Missing Package Manager for macOS (or Linux).&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;brew.sh&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깃까지 설치가 완료되시면 깃 연습을 할 폴더를 만듭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1658413922857&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;~ mkdir -p projects/git
~ cd projects/git
~ git init&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;※ git init : 저장소를 초기화 하기 위한 명령어 입니다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1658414074749&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; ~/projects/git master ls -al
total 0
drwxr-xr-x  3 staff   96  7 21 23:32 .
drwxr-xr-x  3 staff   96  7 21 23:27 ..
drwxr-xr-x  9 staff  288  7 21 23:32 .git&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저장소를 초기화 하고나서 확인해 보면 .git 폴더가 생성 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.git 폴더는 깃 저장소에 관련된 정보들이 들어가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저장소를 초기화 하고 나면 기본적으로 버전을 관리해주는 master 브랜치가 생성됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깃 저장소를 지우는 방법은 rm -rf .git 명령어를 사용해주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깃 연습을 위해 텍스트 파일을 생성하겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1658415718736&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo hello world! &amp;gt; a.txt
echo hello world! &amp;gt; b.txt
echo hello world! &amp;gt; c.txt
ls&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일을 생성하고나면 처음엔 초록색이던 마스터 브랜치가 노란색으로 변경됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것은 브랜치에 변경사항이 있다는 것입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbyrM6/btrHWGxQBZK/Qg1muJ4WpkH40gIW2wPk9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbyrM6/btrHWGxQBZK/Qg1muJ4WpkH40gIW2wPk9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbyrM6/btrHWGxQBZK/Qg1muJ4WpkH40gIW2wPk9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbyrM6%2FbtrHWGxQBZK%2FQg1muJ4WpkH40gIW2wPk9K%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;702&quot; height=&quot;350&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1658415930206&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; ~/projects/git  master git status
현재 브랜치 master

아직 커밋이 없습니다

추적하지 않는 파일:
  (커밋할 사항에 포함하려면 &quot;git add &amp;lt;파일&amp;gt;...&quot;을 사용하십시오)
	.DS_Store
	a.txt
	b.txt
	c.txt

커밋할 사항을 추가하지 않았지만 추적하지 않는 파일이 있습니다 (추적하려면 &quot;git add&quot;를 사용하십시오)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git status 명령어로 현재 파일들의 상태를 확인 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방금 전에 생성했던 파일들은 &lt;b&gt;Untracked&lt;/b&gt; 파일 (아직 깃이 알지 못하는 파일) 목록에 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 파일들을 staging area로 이동 시켜주려면 git add 명령어를 사용해야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;832&quot; data-origin-height=&quot;428&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uhYj2/btrHTXHzCve/FAnXifaYpXcsOUJabPHJFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uhYj2/btrHTXHzCve/FAnXifaYpXcsOUJabPHJFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uhYj2/btrHTXHzCve/FAnXifaYpXcsOUJabPHJFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuhYj2%2FbtrHTXHzCve%2FFAnXifaYpXcsOUJabPHJFK%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;832&quot; height=&quot;428&quot; data-origin-width=&quot;832&quot; data-origin-height=&quot;428&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;a.txt 파일을 git add 해주고나서 git status로 확인해보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커밋할 준비 된 new file: a.txt라고 표시가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 staging area로 커밋할 준비를 한 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git add에서 여러 파일을 한번에 하고싶으면 &lt;b&gt;git add *, git add *.txt&lt;/b&gt;라고 작성하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git add * 명령어로 모든 파일을 &lt;b&gt;staging area&lt;/b&gt;로 이동 시켜 준 후&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;a.txt에 내용을 추가해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 뒤에 다시 git status로 확인해보면 staging area에 새 파일들이 추가가 되었고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;a.txt파일이 modified 되었다고 표시 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;staging을 해줌으로써 txt 파일들을 git이 tracked 추적을 하게 된걸 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3cdij/btrHTH5NqMx/xJKLufUg3mv4DZ9A0icMiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3cdij/btrHTH5NqMx/xJKLufUg3mv4DZ9A0icMiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3cdij/btrHTH5NqMx/xJKLufUg3mv4DZ9A0icMiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3cdij%2FbtrHTH5NqMx%2FxJKLufUg3mv4DZ9A0icMiK%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;926&quot; height=&quot;630&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;추적하고 싶지 않은 파일 등록방법&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;454&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6XF2W/btrHVhFkheE/ZboeZKcENJlE2ZJzubvCJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6XF2W/btrHVhFkheE/ZboeZKcENJlE2ZJzubvCJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6XF2W/btrHVhFkheE/ZboeZKcENJlE2ZJzubvCJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6XF2W%2FbtrHVhFkheE%2FZboeZKcENJlE2ZJzubvCJ1%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;786&quot; height=&quot;454&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;454&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;log파일과&amp;nbsp;.gitignore 파일도 생성해줍니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gitignore파일에 *.log 내용도 추가해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 사진을 보면 log.log &amp;nbsp;파일이 untracked 파일에 포함되어있지 않은것을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.gitignore파일에 *.log를 작성했기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 추적하지 않을 파일을 등록할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gitignore에는 특정한 디렉토리 안에 있는 파일이나 특정한 파일도 지정할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/build&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/build/*.log&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런식으로 작성하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6EjWU/btrHTXALUPQ/kVesOLkaA1KMtfpZegniI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6EjWU/btrHTXALUPQ/kVesOLkaA1KMtfpZegniI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6EjWU/btrHTXALUPQ/kVesOLkaA1KMtfpZegniI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6EjWU%2FbtrHTXALUPQ%2FkVesOLkaA1KMtfpZegniI1%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;828&quot; height=&quot;438&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;438&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;git status 사용법을 확인해보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;584&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHflmC/btrHT2okBo6/NpxUylFpomd6V6kFIlwWDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHflmC/btrHT2okBo6/NpxUylFpomd6V6kFIlwWDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHflmC/btrHT2okBo6/NpxUylFpomd6V6kFIlwWDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHflmC%2FbtrHT2okBo6%2FNpxUylFpomd6V6kFIlwWDK%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;1396&quot; height=&quot;584&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;584&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-s라는 옵션이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 옵션을 사용하면 상태를 간략하게 표시해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1658417354554&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;~/projects/git &amp;gt; master ✚ &amp;gt; git status -s
A  a.txt
A  b.txt
A  c.txt
?? .DS_Store
?? .gitignore

~/projects/git &amp;gt; master &amp;plusmn;✚ &amp;gt; echo add &amp;gt;&amp;gt; c.txt
~/projects/git &amp;gt; master &amp;plusmn;✚ &amp;gt; git status -s
A  a.txt
A  b.txt
AM c.txt
?? .gitignore&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 간단하게 알파뱃으로 표현을 해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git status로 저장소의 상태를 확인했지만&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 파일들의 어떤 부분이 수정되었는지 알 수가 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변경 사항을 확인 하기 위해서는 git diff 명령어를 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1658417662593&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;diff --git a/c.txt b/c.txt
index a042389..f5be8ac 100644
--- a/c.txt
+++ b/c.txt
@@ -1 +1,2 @@
 hello world!
+add
(END)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git diff 명령어를 사용하면 이렇게 나오는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번 째 줄의 a/c.txt &amp;nbsp;b/c.txt에서 a, b는 a는 이전 버전 b는 변경된 버전을 표시합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;--- a/c.txt +++ b/c.txt는 이전 파일과 변경된 파일을 비교한다는것을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@@ -1은 이전 파일에서 첫번째 줄에 hello world!가 나온 상태를 표시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+1,2 @@는 현재 파일에서 첫번째 줄에서 2번째 줄 까지 확인하란 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;git diff명령어만 사용하면 working 디렉토리의 변경사항만 표시되는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;staging area의 변경사항을 확인하려면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git diff --staged, git diff --cached 명령어를 사용하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커밋은 다음 글에서...!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다음글!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://choiiii-dev.tistory.com/33&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2022.08.09 - [Git] - Git 연습 #2(mac os)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1660053624672&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;Git 연습 #2(mac os)&quot; data-og-description=&quot;2022.07.21 - [Git] - Git 연습 #1(mac os) Git 연습 #1(mac os) 깃 설치 brew install git ※ homebrew가 없으시면 https://brew.sh에서 설치 해주세요 Homebrew The Missing Package Manager for macOS (or Linu..&quot; data-og-host=&quot;choiiii-dev.tistory.com&quot; data-og-source-url=&quot;https://choiiii-dev.tistory.com/33&quot; data-og-url=&quot;https://choiiii-dev.tistory.com/33&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cH0nt1/hyPoemUVMV/q55SeFxkDYtAncEwT85pNk/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/4mbKD/hyPoopybSQ/rGLec4N98fmypfE3TWKN20/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/qgJe3/hyPohDXUMJ/TEwCycGSIJxYqFg3KO89K0/img.jpg?width=839&amp;amp;height=892&amp;amp;face=0_0_839_892&quot;&gt;&lt;a href=&quot;https://choiiii-dev.tistory.com/33&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://choiiii-dev.tistory.com/33&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cH0nt1/hyPoemUVMV/q55SeFxkDYtAncEwT85pNk/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/4mbKD/hyPoopybSQ/rGLec4N98fmypfE3TWKN20/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/qgJe3/hyPohDXUMJ/TEwCycGSIJxYqFg3KO89K0/img.jpg?width=839&amp;amp;height=892&amp;amp;face=0_0_839_892');&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;Git 연습 #2(mac os)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2022.07.21 - [Git] - Git 연습 #1(mac os) Git 연습 #1(mac os) 깃 설치 brew install git ※ homebrew가 없으시면 https://brew.sh에서 설치 해주세요 Homebrew The Missing Package Manager for macOS (or Linu..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;choiiii-dev.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Git</category>
      <category>git</category>
      <category>git ignore</category>
      <category>git init</category>
      <author>Choiji</author>
      <guid isPermaLink="true">https://choiiii-dev.tistory.com/32</guid>
      <comments>https://choiiii-dev.tistory.com/32#entry32comment</comments>
      <pubDate>Thu, 21 Jul 2022 23:42:24 +0900</pubDate>
    </item>
    <item>
      <title>싱글톤</title>
      <link>https://choiiii-dev.tistory.com/29</link>
      <description>&lt;h1&gt;싱글톤&lt;/h1&gt;
&lt;div class=&quot;textBox&quot;&gt;
&lt;pre id=&quot;code_1647928091751&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;스프링은 별도의 설정을 하지 않으면 내부에서 생성하는 빈 오브젝트를 싱글톤으로 만든다.​&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;빈을 싱글톤으로 만드는 이유&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;div class=&quot;contentBox&quot;&gt;스프링이 주로 적용되는 대상이 자바 엔터프라이즈 기술을 사용하는 서버환경 이기 때문이다.&lt;br /&gt;또 하나의 요청을 처리하기 위해 데이터 엑세스 로직, 서비스 로직, 비즈니스 로직, 프레젠테이션 로직 등&lt;br /&gt;다양한 기능을 담당하는 오브젝트 들이 참여하는 계층형 구조로 이루어진 경우가 대부분이다.&lt;br /&gt;그런데 클라이언트에서 요청이 올 때마다 각 로직을 담당하는 오브젝트를 새로 만들어서 사용한다고 생각해보면&lt;br /&gt;요청 한번에 5개의 오브젝트가 만들어지고 초당 50개의 요청이 들어오면 초당 250개의 새로운 오브젝트가 생성되는게 된다.&lt;br /&gt;1분이면 15만개가 만들어진다. 아무리 자바의 오브젝트가 생성과 가비지컬렉션의 성능이 좋다고 해도 서버에 엄청난 부하가 걸릴 것 이다.&lt;br /&gt;그래서 엔터프라이즈 분야에서는 서비스 오브젝트란 개념을 일찍부터 사용해왔다.&lt;br /&gt;서블릿은 자바 엔터프라이즈 기술의 가장 기본이되는 서비스 오브젝트라고 할 수 있다.&lt;br /&gt;서블릿은 대부분 멀티 스레드 환경에서 싱글톤으로 동작한다.&lt;br /&gt;서블릿 클래스당 하나의 오브젝트만 만들어두고, 사용자의 요청을 담당하는 여러 스레드에서 하나의 오브젝트를 공유해서 사용한다.&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;싱글톤 레지스트리&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;div class=&quot;contentBox&quot;&gt;자바의 싱글톤 패턴의 구현 방식은 여러가지 단점이 있다.&lt;br /&gt;하지만 스프링은 직접 싱글톤 형태의 오브젝트를 만들고 관리하는 기느을 제공한다.&lt;br /&gt;그것이 싱글톤 레지스트리다.&lt;br /&gt;스프링 컨테이너는 싱글톤을 생성하고, 관리하고, 공급하는 싱글톤 관리 컨테이너이기도 하다.&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;싱글톤 레지스트리의 장점&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;static메소드와 private 생성자를 사용해야하는 비 정상적인 클래스가 아니라 평범한 자바클래스를  싱글톤으로 사용하게 해준다는 점이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평범한 자바 클래스라도 Ioc 컨테이너를 사용해서 생성과 관계설정 사용등에 대한 제어권을 컨테이너에게 넘기면 손 쉽게 싱글톤 방식으로 만들어져 관리되게 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오브젝트 생성에 관한 모든 권한은 Ioc 기능을 제공하는 애플리케이션 컨텍스트에 있기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링이 빈을 싱글톤으로 만들어주는 것은 결국 오브젝트의 생성 방법을 제어하는 Ioc 컨테이너로서의 역할이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;오브젝트의 상태&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 싱글톤이 멀티스레드 환경에서 서비스 형태의 오브젝트로 사용되는 경우에는 상태정보를 갖고있지 않은 무상태 방식으로 만들어져야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring Framework</category>
      <category>빈</category>
      <category>스프링</category>
      <category>싱글톤</category>
      <author>Choiji</author>
      <guid isPermaLink="true">https://choiiii-dev.tistory.com/29</guid>
      <comments>https://choiiii-dev.tistory.com/29#entry29comment</comments>
      <pubDate>Tue, 22 Mar 2022 16:24:44 +0900</pubDate>
    </item>
    <item>
      <title>Ubuntu에 Docker 설치</title>
      <link>https://choiiii-dev.tistory.com/28</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;공식 문서에 이미 있지만 작성해봅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/engine/install/linux-postinstall/&quot;&gt;https://docs.docker.com/engine/install/linux-postinstall/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1636554431185&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;Post-installation steps for Linux&quot; data-og-description=&quot; &quot; data-og-host=&quot;docs.docker.com&quot; data-og-source-url=&quot;https://docs.docker.com/engine/install/linux-postinstall/&quot; data-og-url=&quot;https://docs.docker.com/engine/install/linux-postinstall/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/biP1ED/hyMih9mRAV/ShJDTkOlteACuoJgLzidY0/img.png?width=129&amp;amp;height=128&amp;amp;face=0_0_129_128,https://scrap.kakaocdn.net/dn/AWLD4/hyMjEBP7wr/sphWKK4dVfT5RJjSzfYajk/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500&quot;&gt;&lt;a href=&quot;https://docs.docker.com/engine/install/linux-postinstall/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.docker.com/engine/install/linux-postinstall/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/biP1ED/hyMih9mRAV/ShJDTkOlteACuoJgLzidY0/img.png?width=129&amp;amp;height=128&amp;amp;face=0_0_129_128,https://scrap.kakaocdn.net/dn/AWLD4/hyMjEBP7wr/sphWKK4dVfT5RJjSzfYajk/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500');&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;Post-installation steps for Linux&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;우선 서버를 준비해주세요&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;a href=&quot;https://choiiii-dev.tistory.com/26&quot;&gt;VirtualBox를 이용한 웹 서버 만들기(1) 환경 준비&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;a href=&quot;https://choiiii-dev.tistory.com/27&quot;&gt;VirtualBox를 이용한 웹 서버 만들기(2) 네트워크 준비&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1636551092292&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;VirtualBox를 이용한 웹 서버 만들기(1) 환경 준비&quot; data-og-description=&quot;공부용으로 사용할 서버가 필요했는데 클라우드 서비스를 이용하면 무료기간이 지난 이후에는 비용이 청구되고 오라클은 선착순이라길래 집에서 놀고 있는 데스크톱에 가상 머신으로 서버를 &quot; data-og-host=&quot;choiiii-dev.tistory.com&quot; data-og-source-url=&quot;https://choiiii-dev.tistory.com/26&quot; data-og-url=&quot;https://choiiii-dev.tistory.com/26&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bLVThe/hyMjyBCOXw/drUYP7zIrCb4pLVvJPdfBK/img.png?width=140&amp;amp;height=180&amp;amp;face=61_70_99_108,https://scrap.kakaocdn.net/dn/RaNqW/hyMjz1AfqA/MXw77FwK5gvOzsLMBcptTk/img.png?width=140&amp;amp;height=180&amp;amp;face=61_70_99_108,https://scrap.kakaocdn.net/dn/bEWQcx/hyMiaI8Qzp/tlKosRYnio2kYK4STbF8T1/img.png?width=605&amp;amp;height=622&amp;amp;face=0_0_605_622&quot;&gt;&lt;a href=&quot;https://choiiii-dev.tistory.com/26&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://choiiii-dev.tistory.com/26&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bLVThe/hyMjyBCOXw/drUYP7zIrCb4pLVvJPdfBK/img.png?width=140&amp;amp;height=180&amp;amp;face=61_70_99_108,https://scrap.kakaocdn.net/dn/RaNqW/hyMjz1AfqA/MXw77FwK5gvOzsLMBcptTk/img.png?width=140&amp;amp;height=180&amp;amp;face=61_70_99_108,https://scrap.kakaocdn.net/dn/bEWQcx/hyMiaI8Qzp/tlKosRYnio2kYK4STbF8T1/img.png?width=605&amp;amp;height=622&amp;amp;face=0_0_605_622');&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;VirtualBox를 이용한 웹 서버 만들기(1) 환경 준비&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;공부용으로 사용할 서버가 필요했는데 클라우드 서비스를 이용하면 무료기간이 지난 이후에는 비용이 청구되고 오라클은 선착순이라길래 집에서 놀고 있는 데스크톱에 가상 머신으로 서버를&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;choiiii-dev.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;도커를 설치하기전에 이전 버전을 제거 해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1636550951503&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get remove docker docker-engine docker.io containerd runc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;저장소 설정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1. HTTPS를 통해 저장소를 사용할 수 있도록 apt 패키지 인덱스 및 설치 패키지를 업데이트 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1636551404019&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; sudo apt-get update
 sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2. 도커의 공식 GPG 키 추가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;도커와 암호화된 통신을 하기 위한 작업&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1636551681783&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;현재 레파지토리에는 도커 설치 파일이 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1636552021383&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo apt list | grep docker-ce

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

$ sudo apt list | grep containerd.io

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;apt로 도커를 설치하기 위해&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;다음 명령어로 저장소를 설정하고 cat으로 레포지토리가 추가가 되었는지 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1636551877790&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ echo \
  &quot;deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
  
$ cat /etc/apt/sources.list.d/docker.list&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;패키지 목록을 업데이트 해주고 다시 저장소에 도커 설치 패키지가 존재하는지 조회 해봅니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1636552218027&quot; class=&quot;bash&quot; style=&quot;display: block; overflow: auto; padding: 20px; color: #383a42; background-color: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo apt-get update
$ sudo apt list | grep docker-ce

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

docker-ce-cli/focal 5:20.10.10~3-0~ubuntu-focal amd64
docker-ce-rootless-extras/focal 5:20.10.10~3-0~ubuntu-focal amd64
docker-ce/focal 5:20.10.10~3-0~ubuntu-focal amd64
$ sudo apt list | grep containerd.io

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

containerd.io/focal 1.4.11-1 amd64&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;docker-ce, docker-ce-cli, containerd.io를 설치해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1636552718631&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get install docker-ce docker-ce-cli containerd.io&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;※ 특정 버전이 필요하시면 아래의 명령어로 사용 가능한 버전을 조회, 설치 합니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1636552878581&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ apt-cache madison docker-ce
 docker-ce | 5:20.10.10~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:20.10.9~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:20.10.8~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:20.10.7~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:20.10.6~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:20.10.5~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:20.10.4~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:20.10.3~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:20.10.2~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:20.10.1~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:20.10.0~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:19.03.15~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:19.03.14~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:19.03.13~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:19.03.12~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:19.03.11~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:19.03.10~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:19.03.9~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 
 $ sudo apt-get install docker-ce=&amp;lt;VERSION_STRING&amp;gt; docker-ce-cli=&amp;lt;VERSION_STRING&amp;gt; containerd.io&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;VERSION_STRING = 5:20.10.10~3-0~ubuntu-focal&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;설치가 끝났으면 아래의 명령어로 설치가 올바르게 되었는지 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;명령어를 입력하면 테스트 이미지를 다운로드하고 컨테이너에서 실행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;컨테이너가 실행되면 메시지를 인쇄하고 종료합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1636553207843&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:cc15c5b292d8525effc0f89cb299f1804f3a725c8d05e158653a563f15e4f685
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the &quot;hello-world&quot; image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;메시지가 잘 나왔으면 이제는 루트가 아닌 사용자로 도커를 관리하는 설정을 해줘야합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;※ 도커 데몬은 TCP 포트 대신 유닉스 소켓에 바인딩됩니다. 기본적으로 Unix 소켓은 사용자 루트에 의해 소유되며 다른 사용자는 sudo를 통해서만 액세스할 수 있습니다. 도커 데몬은 항상 루트 사용자로 실행됩니다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker 그룹을 생성하고 사용자를 docker 그룹에 추가합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1636553589644&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo groupadd docker
sudo usermod -aG docker $USER&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그룹 추가후 로그아웃 했다가 다시 로그인하거나 가상 머신이라면 가상 머신을 재시작합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(저는 가상 머신이라서 재시작했습니다....)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어를 입력하면 그룹에 대한 변경 사항을 활성화 할 수 있다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1636553709878&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;newgrp docker&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;이제 sudo 없이 명령을 실행할 수 있는지 확인합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1636554092413&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the &quot;hello-world&quot; image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커를 부팅시에 시작하도록 설정하겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1636554220967&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; sudo systemctl enable docker.service
 sudo systemctl enable containerd.service&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 비활성화하려면 enable을 disable로 바꾸시면 됩니다.&lt;/p&gt;</description>
      <category>Server/docker</category>
      <author>Choiji</author>
      <guid isPermaLink="true">https://choiiii-dev.tistory.com/28</guid>
      <comments>https://choiiii-dev.tistory.com/28#entry28comment</comments>
      <pubDate>Wed, 10 Nov 2021 23:32:33 +0900</pubDate>
    </item>
    <item>
      <title>VirtualBox를 이용한 웹 서버 만들기(2) 네트워크 준비</title>
      <link>https://choiiii-dev.tistory.com/27</link>
      <description>&lt;h1&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;네트워크 준비&lt;/span&gt;&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;호스트 네트워크 관리자 설정&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;611&quot; height=&quot;354&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;741&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rdtUn/btrkhp1w3qc/BSMGmViDY41PVCMp8YgXt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rdtUn/btrkhp1w3qc/BSMGmViDY41PVCMp8YgXt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rdtUn/btrkhp1w3qc/BSMGmViDY41PVCMp8YgXt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrdtUn%2Fbtrkhp1w3qc%2FBSMGmViDY41PVCMp8YgXt1%2Fimg.png&quot; width=&quot;611&quot; height=&quot;354&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;741&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;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;IPv4 주소 수정&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;cmd창을 열어 ipconfig를 입력합니다.&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;575&quot; height=&quot;411&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;549&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpJzbl/btrki9XQYUV/k2lsRiLtDeG2DjzqOPzQOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpJzbl/btrki9XQYUV/k2lsRiLtDeG2DjzqOPzQOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpJzbl/btrki9XQYUV/k2lsRiLtDeG2DjzqOPzQOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpJzbl%2Fbtrki9XQYUV%2Fk2lsRiLtDeG2DjzqOPzQOK%2Fimg.png&quot; width=&quot;575&quot; height=&quot;411&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;549&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;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;호스트 네트워크 관리자 창을 엽니다&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;첫 번째 이미지의 가려진 부분의 ip를 아래 이미지의 가려진 부분에 붙여 넣기 합니다.&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;547&quot; height=&quot;421&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;646&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLhtbV/btrkemxsXdR/TntVbcffcRtzNOAwwJTk51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLhtbV/btrkemxsXdR/TntVbcffcRtzNOAwwJTk51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLhtbV/btrkemxsXdR/TntVbcffcRtzNOAwwJTk51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLhtbV%2FbtrkemxsXdR%2FTntVbcffcRtzNOAwwJTk51%2Fimg.png&quot; width=&quot;547&quot; height=&quot;421&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;646&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;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;VirtualBox의 설정 탭 &amp;gt; 네트워크&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;다음에 연결됨(A)를 어댑터에 브리지로 설정&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;619&quot; height=&quot;436&quot; data-origin-width=&quot;1243&quot; data-origin-height=&quot;874&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyb0Jy/btrkek7p2qX/m7PJExqepwkFGRkQkScQYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyb0Jy/btrkek7p2qX/m7PJExqepwkFGRkQkScQYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyb0Jy/btrkek7p2qX/m7PJExqepwkFGRkQkScQYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdyb0Jy%2Fbtrkek7p2qX%2Fm7PJExqepwkFGRkQkScQYK%2Fimg.png&quot; width=&quot;619&quot; height=&quot;436&quot; data-origin-width=&quot;1243&quot; data-origin-height=&quot;874&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;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;버추얼박스는 네트워크 어댑터로 총 7가지를 지원한다고 합니다.
보통 2가지 방식을 많이 사용 하는데
NAT 과 Bridged Adapter입니다.&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;NAT 네트워크 연결 흐름&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;외부 클라이언트 컴퓨터&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;uarr;&amp;darr;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;공유기&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;uarr;&amp;darr;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;호스트 PC&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;uarr;&amp;darr;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;버추얼박스&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;uarr;&amp;darr;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;가상 머신 내 서버&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Bridged Adapter 네트워크 연결 흐름&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;외부 클라이언트 컴퓨터(공인 아이피와 개방된 포트)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;uarr;&amp;darr;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;공유기(사설 아이피 192.168.xxx.xxx와 개방된 포트&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;uarr;&amp;darr;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;가상머신 내 서버 (공유기에 의해 할당된 사설 아이피 192.168.xxx.xxx와 개방된 포트)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;NAT : 버추얼박스가 설치되어 있는 호스트 PC가 공유기 역할을 하여 가상머신에 IP 주소를 할당 하는 방식  
Bridged Adapter : 실제 공유기로부터 가상머신에 IP 주소를 할당 받기 때문에 호스트 PC와 동일한 네트워크 대역의 IP 주소를 받습니다.&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; start=&quot;5&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;VirtualBox ssh 설정&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이제 우분투에 접속해서 터미널 창을 켜고&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;아래의 명령어를 차례대로 입력합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;sudo apt update&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;sudo apt-get install net-tools&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;sudo dpkg -l | grep ssh 명령어로 ssh가 설치되어있는지 확인합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;ssh가 없다면 아래 명령어를 입력해 설치해줍니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;sudo apt-get install openssh-server&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;설치가 되어있거나 끝났다면&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;sudo service ssh start로 ssh를 실행&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;sudo service ssh status로 상태를 확인하면 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Active : active (running)이 실행 중입니다.&lt;/span&gt;&lt;br /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dqJ6gK/btrki9DA5CC/C3TWDyVpDeuOzkArKKMrk0/img.png&quot; width=&quot;647&quot; height=&quot;161&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;193&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이제 ssh 포트를 변경해야 합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;ssh의 기본 포트인 22번 포트를 사용하면 외부에서 접속을 시도할 수 있기 때문에&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;포트 번호를 변경하여 사용하도록 하겠습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;sudo vi /etc/ssh/sshd_config&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;아래 이미지에서 주황색으로 표시된 부분을 변경해주면 됩니다.&lt;/span&gt;&lt;br /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmQyAo/btrkkXbz9OY/7oZ18sssqcWyyRLOkBwkpK/img.png&quot; width=&quot;563&quot; height=&quot;427&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;622&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;저장하고 나서 sudo systemctl restart sshd 명령어로 ssh 서비스를 재시작해줍니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;sudo systemctl status ssh로 변경된 포트가 잘적용 되었는지 확인합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;netstat -nlpt | grep 포트번호로 확인하셔도 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; start=&quot;6&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;방화벽 설정&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;우선 포트 상태를 확인합니다. sudo ufw status&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;160&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTmMg4/btrkaOBdfiK/a53BMAq1tb4Lm2zrb8tooK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTmMg4/btrkaOBdfiK/a53BMAq1tb4Lm2zrb8tooK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTmMg4/btrkaOBdfiK/a53BMAq1tb4Lm2zrb8tooK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTmMg4%2FbtrkaOBdfiK%2Fa53BMAq1tb4Lm2zrb8tooK%2Fimg.png&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;160&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;sudo ufw allow ssh로 규칙을 추가하거나 sudo ufw allow 포트번호로 하셔도 됩니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이제 ssh 접속을 시도해보면 끝입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1636387236024&quot; class=&quot;bash&quot; style=&quot;display: block; overflow: auto; padding: 20px; color: #383a42; background: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;C:\Users\사용자&amp;gt;ssh [user]@[ip] -p [포트]
The authenticity of host '[ip]:[포트] ([ip]:포트)' can't be established.

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[ip]:포트' (ECDSA) to the list of known hosts.
user@ip's password:
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.11.0-38-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

64 updates can be applied immediately.
추가 업데이트를 확인하려면 apt list --upgradable 을 실행하세요.

Your Hardware Enablement Stack (HWE) is supported until April 2025.
Last login: Mon Nov  8 01:05:17 2021 from 223.38.72.26&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;여기까지 하면 같은 공유기를 사용 중이라면 가상 머신에 접속이 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&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 Light';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 외부 ip로 외부 pc에서도 원격으로 ssh를 접속할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;끝.&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Server/VirtualBox</category>
      <category>SSH</category>
      <category>ubuntu</category>
      <category>VirtualBox</category>
      <author>Choiji</author>
      <guid isPermaLink="true">https://choiiii-dev.tistory.com/27</guid>
      <comments>https://choiiii-dev.tistory.com/27#entry27comment</comments>
      <pubDate>Tue, 9 Nov 2021 01:09:10 +0900</pubDate>
    </item>
    <item>
      <title>VirtualBox를 이용한 웹 서버 만들기(1) 환경 준비</title>
      <link>https://choiiii-dev.tistory.com/26</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;공부용으로 사용할 서버가 필요했는데 클라우드 서비스를 이용하면 무료기간이 지난 이후에는 비용이 청구되고&lt;br /&gt;오라클은 선착순이라길래 집에서 놀고 있는 데스크톱에 가상 머신으로 서버를 구축하기로 했다.&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Part 1 환경 준비&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- Oracle Vm VirtualBox 설치&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.virtualbox.org/wiki/Downloads&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.virtualbox.org/wiki/Downloads&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1636253824946&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;Downloads &amp;ndash; Oracle VM VirtualBox&quot; data-og-description=&quot;Download VirtualBox Here you will find links to VirtualBox binaries and its source code. VirtualBox binaries By downloading, you agree to the terms and conditions of the respective license. If you're looking for the latest VirtualBox 6.0 packages, see Virt&quot; data-og-host=&quot;www.virtualbox.org&quot; data-og-source-url=&quot;https://www.virtualbox.org/wiki/Downloads&quot; data-og-url=&quot;https://www.virtualbox.org/wiki/Downloads&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.virtualbox.org/wiki/Downloads&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.virtualbox.org/wiki/Downloads&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Downloads &amp;ndash; Oracle VM VirtualBox&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Download VirtualBox Here you will find links to VirtualBox binaries and its source code. VirtualBox binaries By downloading, you agree to the terms and conditions of the respective license. If you're looking for the latest VirtualBox 6.0 packages, see Virt&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.virtualbox.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1012&quot; data-origin-height=&quot;745&quot; width=&quot;584&quot; height=&quot;474&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cn9LxS/btrj3MW72uR/YEqqKFiodksC1MsjHLppY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cn9LxS/btrj3MW72uR/YEqqKFiodksC1MsjHLppY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cn9LxS/btrj3MW72uR/YEqqKFiodksC1MsjHLppY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcn9LxS%2Fbtrj3MW72uR%2FYEqqKFiodksC1MsjHLppY1%2Fimg.png&quot; data-origin-width=&quot;1012&quot; data-origin-height=&quot;745&quot; width=&quot;584&quot; height=&quot;474&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;blockquote data-ke-style=&quot;style3&quot;&gt;※&amp;nbsp;버츄얼박스&amp;nbsp;설치&amp;nbsp;파일은&amp;nbsp;관리자&amp;nbsp;권한으로&amp;nbsp;실행해야&amp;nbsp;합니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- Ubuntu 설치&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ubuntu.com/download/desktop&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ubuntu.com/download/desktop&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1636254055834&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;Download Ubuntu Desktop | Download | Ubuntu&quot; data-og-description=&quot;Ubuntu is an open source software operating system that runs from the desktop, to the cloud, to all your internet connected things.&quot; data-og-host=&quot;ubuntu.com&quot; data-og-source-url=&quot;https://ubuntu.com/download/desktop&quot; data-og-url=&quot;https://ubuntu.com/download/desktop&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://ubuntu.com/download/desktop&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ubuntu.com/download/desktop&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Download Ubuntu Desktop | Download | Ubuntu&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Ubuntu is an open source software operating system that runs from the desktop, to the cloud, to all your internet connected things.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ubuntu.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1594&quot; data-origin-height=&quot;1171&quot; width=&quot;572&quot; height=&quot;420&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dxyifG/btrj4WLOw4w/eNQFPFJsIwOKEMSiarqVIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dxyifG/btrj4WLOw4w/eNQFPFJsIwOKEMSiarqVIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxyifG/btrj4WLOw4w/eNQFPFJsIwOKEMSiarqVIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdxyifG%2Fbtrj4WLOw4w%2FeNQFPFJsIwOKEMSiarqVIk%2Fimg.png&quot; data-origin-width=&quot;1594&quot; data-origin-height=&quot;1171&quot; width=&quot;572&quot; height=&quot;420&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;429&quot; width=&quot;566&quot; height=&quot;272&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r5cBE/btrj88LqXfM/OYoWdOigCgrIk92OqYQDS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r5cBE/btrj88LqXfM/OYoWdOigCgrIk92OqYQDS0/img.png&quot; data-alt=&quot;다운로드 버튼을 클릭하면 바로 이미지가 다운되지 않으니&amp;amp;amp;nbsp; download now를 클릭 해주세요&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r5cBE/btrj88LqXfM/OYoWdOigCgrIk92OqYQDS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr5cBE%2Fbtrj88LqXfM%2FOYoWdOigCgrIk92OqYQDS0%2Fimg.png&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;429&quot; width=&quot;566&quot; height=&quot;272&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;다운로드 버튼을 클릭하면 바로 이미지가 다운되지 않으니&amp;nbsp; download now를 클릭 해주세요&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1015&quot; data-origin-height=&quot;952&quot; width=&quot;550&quot; height=&quot;516&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blueQr/btrkaPrllt3/pvKXa2InvVN1l8hBKr38kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blueQr/btrkaPrllt3/pvKXa2InvVN1l8hBKr38kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blueQr/btrkaPrllt3/pvKXa2InvVN1l8hBKr38kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblueQr%2FbtrkaPrllt3%2FpvKXa2InvVN1l8hBKr38kk%2Fimg.png&quot; data-origin-width=&quot;1015&quot; data-origin-height=&quot;952&quot; width=&quot;550&quot; height=&quot;516&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이름 및 운영 체제 : 새로 만들기 &amp;gt; 종류 : Linux, 버전 : Ubuntu (64-bit) &amp;gt; 다음&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&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;605&quot; data-origin-height=&quot;622&quot; width=&quot;529&quot; height=&quot;543&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhZ2FQ/btrj4m4ZWA0/MAFhOkEPoQtz5uho4g6xv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhZ2FQ/btrj4m4ZWA0/MAFhOkEPoQtz5uho4g6xv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhZ2FQ/btrj4m4ZWA0/MAFhOkEPoQtz5uho4g6xv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhZ2FQ%2Fbtrj4m4ZWA0%2FMAFhOkEPoQtz5uho4g6xv0%2Fimg.png&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;622&quot; width=&quot;529&quot; height=&quot;543&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;메모리 크기 : 나중에 조정이 가능하니 우선 기본값으로 진행&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;619&quot; width=&quot;508&quot; height=&quot;526&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/efwogn/btrj2d8X52b/KjtaGfaNGnB3odBNZt3Yrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/efwogn/btrj2d8X52b/KjtaGfaNGnB3odBNZt3Yrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/efwogn/btrj2d8X52b/KjtaGfaNGnB3odBNZt3Yrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fefwogn%2Fbtrj2d8X52b%2FKjtaGfaNGnB3odBNZt3Yrk%2Fimg.png&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;619&quot; width=&quot;508&quot; height=&quot;526&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 만든 가상 디스크가 있으면 &lt;b&gt;&quot;기존 가상 하드 디스크 파일 사용&quot;&lt;/b&gt;을 선택하시고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로 만들고 싶다면 &lt;b&gt;&quot;지금 새 가상 하드 디스크 만들기&quot;&lt;/b&gt;를 선택합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;662&quot; width=&quot;495&quot; height=&quot;535&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzA9gi/btrj3hpAqZg/2kFT3ADM3RUfcqykiJPy41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzA9gi/btrj3hpAqZg/2kFT3ADM3RUfcqykiJPy41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzA9gi/btrj3hpAqZg/2kFT3ADM3RUfcqykiJPy41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzA9gi%2Fbtrj3hpAqZg%2F2kFT3ADM3RUfcqykiJPy41%2Fimg.png&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;662&quot; width=&quot;495&quot; height=&quot;535&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;하드 디스크 파일 종류 : VDI 선택&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;489&quot; height=&quot;534&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;666&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LmjE4/btrj3NBN50s/023usF5KclA4SE3a9vk4T0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LmjE4/btrj3NBN50s/023usF5KclA4SE3a9vk4T0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LmjE4/btrj3NBN50s/023usF5KclA4SE3a9vk4T0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLmjE4%2Fbtrj3NBN50s%2F023usF5KclA4SE3a9vk4T0%2Fimg.png&quot; width=&quot;489&quot; height=&quot;534&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;666&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;물리적 하드 드라이브에 저장 :&amp;nbsp; OS에 어떤 내용이 들어갈지 모르면&amp;nbsp;&quot;동적 할당&quot; 선택하시면 됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;668&quot; width=&quot;492&quot; height=&quot;539&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLUoWo/btrj9ljzPrC/1uGKgn3zGU9RzKSyDc7ijK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLUoWo/btrj9ljzPrC/1uGKgn3zGU9RzKSyDc7ijK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLUoWo/btrj9ljzPrC/1uGKgn3zGU9RzKSyDc7ijK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLUoWo%2Fbtrj9ljzPrC%2F1uGKgn3zGU9RzKSyDc7ijK%2Fimg.png&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;668&quot; width=&quot;492&quot; height=&quot;539&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 위치 및 크기 : 기본적으로 C드라이브로 위치가 잡히는데 가상 하드 디스크 용량이 생각보다 크기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS가 설치되어있는 C드라이브를 선택하는 것은 좋지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS가 설치되지 않은 드라이브를 선택해주시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;우분투 OS 설치&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&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;1195&quot; data-origin-height=&quot;793&quot; width=&quot;711&quot; height=&quot;472&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t8rie/btrj88rbya8/7aIYbee0tq7YGNAfGdnIbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t8rie/btrj88rbya8/7aIYbee0tq7YGNAfGdnIbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t8rie/btrj88rbya8/7aIYbee0tq7YGNAfGdnIbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft8rie%2Fbtrj88rbya8%2F7aIYbee0tq7YGNAfGdnIbK%2Fimg.png&quot; data-origin-width=&quot;1195&quot; data-origin-height=&quot;793&quot; width=&quot;711&quot; height=&quot;472&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1447&quot; data-origin-height=&quot;598&quot; width=&quot;722&quot; height=&quot;298&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jgxv4/btrj6cgxXdK/OHkDn6PknNzrupKd37w9Xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jgxv4/btrj6cgxXdK/OHkDn6PknNzrupKd37w9Xk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jgxv4/btrj6cgxXdK/OHkDn6PknNzrupKd37w9Xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJgxv4%2Fbtrj6cgxXdK%2FOHkDn6PknNzrupKd37w9Xk%2Fimg.png&quot; data-origin-width=&quot;1447&quot; data-origin-height=&quot;598&quot; width=&quot;722&quot; height=&quot;298&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;gt; 컨트롤러 : IDE 비어있음 &amp;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;811&quot; data-origin-height=&quot;313&quot; width=&quot;643&quot; height=&quot;340&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBlhYO/btrj7QLjI7S/t8Ab9WfG9VJKADy5YINuKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBlhYO/btrj7QLjI7S/t8Ab9WfG9VJKADy5YINuKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBlhYO/btrj7QLjI7S/t8Ab9WfG9VJKADy5YINuKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBlhYO%2Fbtrj7QLjI7S%2Ft8Ab9WfG9VJKADy5YINuKK%2Fimg.png&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;313&quot; width=&quot;643&quot; height=&quot;340&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가를 이용해서 아까 다운로드한 이미지를 선택해주시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;388&quot; width=&quot;627&quot; height=&quot;300&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d20BFa/btrj7Rb8rPk/XW96A4QwMqtOKus46S6NG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d20BFa/btrj7Rb8rPk/XW96A4QwMqtOKus46S6NG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d20BFa/btrj7Rb8rPk/XW96A4QwMqtOKus46S6NG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd20BFa%2Fbtrj7Rb8rPk%2FXW96A4QwMqtOKus46S6NG1%2Fimg.png&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;388&quot; width=&quot;627&quot; height=&quot;300&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;확인을 누르고 저장소에 IDE 세컨더리가 변경되어있는지 확인합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작하기 전에 &lt;b&gt;설정 &amp;gt; 디스플레이&lt;/b&gt;에서 그래픽 컨트롤러를 VBoxVGA로 설정해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 설정을 안 해주면 화면 조절이 안돼서 우분투 화면이 다 안 보이게 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;991&quot; data-origin-height=&quot;653&quot; width=&quot;636&quot; height=&quot;419&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sSimR/btrj6dtdQhf/Dg1SCvrtfGAyE3QYzvkYC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sSimR/btrj6dtdQhf/Dg1SCvrtfGAyE3QYzvkYC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sSimR/btrj6dtdQhf/Dg1SCvrtfGAyE3QYzvkYC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsSimR%2Fbtrj6dtdQhf%2FDg1SCvrtfGAyE3QYzvkYC1%2Fimg.png&quot; data-origin-width=&quot;991&quot; data-origin-height=&quot;653&quot; width=&quot;636&quot; height=&quot;419&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;우분투 설치 순서&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작 버튼을 누르고 실행되면 아래 이미지 순서대로 진행하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작을 누르고 E_FAIL (0x80004005) 에러가 나면 여러 가지 문제가 있는데 전 아래 블로그대로 하니까 정상적으로 진행됐습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://mvp0115.tistory.com/23&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://mvp0115.tistory.com/23&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1636279585937&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;[VirtualBox]E_FAIL (0x80004005) 에러 해결 방법 - 범인은 FASOO&quot; data-og-description=&quot;https://infogathering.tistory.com/59 fasoo.com 프로그램 정체&amp;amp;삭제 완벽정리!! 안녕하세요. 정보집합소입니다. 오늘 다룰 것은 fasoo.com에서 만든 프로그램입니다. 컴퓨터를 사용하시다 보면 나도 모르게 프&quot; data-og-host=&quot;mvp0115.tistory.com&quot; data-og-source-url=&quot;https://mvp0115.tistory.com/23&quot; data-og-url=&quot;https://mvp0115.tistory.com/23&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cmGQgz/hyMe9wMBYV/lGi2gvnVznbsma182SRPf1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bEivMZ/hyMfiHcRev/oJLeJJkKlTRrOZ6jFYpzpK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://mvp0115.tistory.com/23&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mvp0115.tistory.com/23&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cmGQgz/hyMe9wMBYV/lGi2gvnVznbsma182SRPf1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bEivMZ/hyMfiHcRev/oJLeJJkKlTRrOZ6jFYpzpK/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;[VirtualBox]E_FAIL (0x80004005) 에러 해결 방법 - 범인은 FASOO&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;https://infogathering.tistory.com/59 fasoo.com 프로그램 정체&amp;amp;삭제 완벽정리!! 안녕하세요. 정보집합소입니다. 오늘 다룰 것은 fasoo.com에서 만든 프로그램입니다. 컴퓨터를 사용하시다 보면 나도 모르게 프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mvp0115.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;738&quot; data-origin-height=&quot;564&quot; width=&quot;566&quot; height=&quot;433&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvQSOJ/btrkcr4QoVR/33XTQFSroJeWpgr46ldmN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvQSOJ/btrkcr4QoVR/33XTQFSroJeWpgr46ldmN0/img.png&quot; data-alt=&quot;언어 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvQSOJ/btrkcr4QoVR/33XTQFSroJeWpgr46ldmN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvQSOJ%2Fbtrkcr4QoVR%2F33XTQFSroJeWpgr46ldmN0%2Fimg.png&quot; data-origin-width=&quot;738&quot; data-origin-height=&quot;564&quot; width=&quot;566&quot; height=&quot;433&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;언어 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;556&quot; height=&quot;436&quot; data-origin-width=&quot;709&quot; data-origin-height=&quot;556&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dt2FaW/btrkeljcu7a/9MppQFlnNrknBt3IiVJeWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dt2FaW/btrkeljcu7a/9MppQFlnNrknBt3IiVJeWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dt2FaW/btrkeljcu7a/9MppQFlnNrknBt3IiVJeWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdt2FaW%2Fbtrkeljcu7a%2F9MppQFlnNrknBt3IiVJeWk%2Fimg.png&quot; width=&quot;556&quot; height=&quot;436&quot; data-origin-width=&quot;709&quot; data-origin-height=&quot;556&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;714&quot; data-origin-height=&quot;577&quot; width=&quot;547&quot; height=&quot;442&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baX0k4/btrj3MJP6N5/DsPt7IK5GzNEQvd1lSeCuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baX0k4/btrj3MJP6N5/DsPt7IK5GzNEQvd1lSeCuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baX0k4/btrj3MJP6N5/DsPt7IK5GzNEQvd1lSeCuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaX0k4%2Fbtrj3MJP6N5%2FDsPt7IK5GzNEQvd1lSeCuK%2Fimg.png&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;577&quot; width=&quot;547&quot; height=&quot;442&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;682&quot; data-origin-height=&quot;584&quot; width=&quot;540&quot; height=&quot;463&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q5T46/btrkcrcUJ38/DSkVUSgLHc3AEyUJEq3M40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q5T46/btrkcrcUJ38/DSkVUSgLHc3AEyUJEq3M40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q5T46/btrkcrcUJ38/DSkVUSgLHc3AEyUJEq3M40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq5T46%2FbtrkcrcUJ38%2FDSkVUSgLHc3AEyUJEq3M40%2Fimg.png&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;584&quot; width=&quot;540&quot; height=&quot;463&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;684&quot; data-origin-height=&quot;581&quot; width=&quot;538&quot; height=&quot;457&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y53DU/btrj3ibcm5o/nOERqumjzMZMVArBAU31hk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y53DU/btrj3ibcm5o/nOERqumjzMZMVArBAU31hk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y53DU/btrj3ibcm5o/nOERqumjzMZMVArBAU31hk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy53DU%2Fbtrj3ibcm5o%2FnOERqumjzMZMVArBAU31hk%2Fimg.png&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;581&quot; width=&quot;538&quot; height=&quot;457&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;557&quot; width=&quot;539&quot; height=&quot;450&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmiNrr/btrkcrjG5gZ/KwruomrTV0MhNgPCsjWO81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmiNrr/btrkcrjG5gZ/KwruomrTV0MhNgPCsjWO81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmiNrr/btrkcrjG5gZ/KwruomrTV0MhNgPCsjWO81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmiNrr%2FbtrkcrjG5gZ%2FKwruomrTV0MhNgPCsjWO81%2Fimg.png&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;557&quot; width=&quot;539&quot; height=&quot;450&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 설치되는 걸 기다리기만 하면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2191&quot; data-origin-height=&quot;1332&quot; width=&quot;537&quot; height=&quot;327&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k5hpn/btrj3LYDvDb/JVmLOz8wmYJld8rl2vS050/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k5hpn/btrj3LYDvDb/JVmLOz8wmYJld8rl2vS050/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k5hpn/btrj3LYDvDb/JVmLOz8wmYJld8rl2vS050/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk5hpn%2Fbtrj3LYDvDb%2FJVmLOz8wmYJld8rl2vS050%2Fimg.png&quot; data-origin-width=&quot;2191&quot; data-origin-height=&quot;1332&quot; width=&quot;537&quot; height=&quot;327&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계정 연결하시거나 건너뛰기하시면 우분투 설치 완료.&lt;/p&gt;</description>
      <category>Server/VirtualBox</category>
      <category>VirtualBox</category>
      <category>VM</category>
      <category>버추얼박스</category>
      <category>서버</category>
      <category>우분투</category>
      <author>Choiji</author>
      <guid isPermaLink="true">https://choiiii-dev.tistory.com/26</guid>
      <comments>https://choiiii-dev.tistory.com/26#entry26comment</comments>
      <pubDate>Sun, 7 Nov 2021 20:30:53 +0900</pubDate>
    </item>
    <item>
      <title>람다식</title>
      <link>https://choiiii-dev.tistory.com/25</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;람다란&lt;/b&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;람다 표현식&lt;/b&gt;은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;람다의 특징&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;익명&lt;/b&gt;&lt;br /&gt;보통의 메서드와 달리 이름이 없으므로 익명이라 표현, 구현해야 할 코드에 대한 걱정거리가 줄어든다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;함수&lt;br /&gt;&lt;/b&gt;람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. 하지만 메서드처럼 파라미터 리스트, 바디, 반환 형식, 가능한 예외 리스트를 포함한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;전달&lt;br /&gt;&lt;/b&gt;람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;간결성&lt;br /&gt;&lt;/b&gt;익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;커스텀 Comparator -&amp;gt; 람다&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 기존 코드&lt;/p&gt;
&lt;pre id=&quot;code_1630332213283&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Comparator&amp;lt;Apple&amp;gt; byWeight = new Comparator&amp;lt;Apple&amp;gt;() {
	@Override
	public int compare(Apple a1, Apple a2) {
		return a1.getWeight().compareTo(a2.getWeight());
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 람다&lt;/p&gt;
&lt;pre id=&quot;code_1630332258993&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Comparator&amp;lt;Apple&amp;gt; byWeight = (Apple a1, Apple a2) -&amp;gt; a1.getWeight().compareTo(a2.getWeight());&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드처럼 람다 표현식을 이용하면 compare 메서드의 바디를 직접 전달하는 것처럼 코드를 전달할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;567&quot; width=&quot;403&quot; height=&quot;179&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FvBrA/btrdC498Roo/vzNV7dmvS37Q2CdmZyxMc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FvBrA/btrdC498Roo/vzNV7dmvS37Q2CdmZyxMc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FvBrA/btrdC498Roo/vzNV7dmvS37Q2CdmZyxMc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFvBrA%2FbtrdC498Roo%2FvzNV7dmvS37Q2CdmZyxMc0%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;567&quot; width=&quot;403&quot; height=&quot;179&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;람다를 어디에 사용할 수 있는가&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수형 인터페이스에서 사용이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;/b&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;함수형 인터페이스&lt;/b&gt;란 오직 하나의 추상 메서드만 가지는 인터페이스를 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스는 디폴트 메서드를 포함할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;디폴트 메서드&lt;/b&gt;는 인터페이스의 메서드를 구현하지 않은 클래스를 고려해서 기본 구현을 제공하는 바디를 포함하는 메서드입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 디폴트 메서드가 있더라도 추상 메서드가 오직 하나면 함수형 인터페이스입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;사용하는 이유&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수형 인터페이스를 사용하는 이유는 자바의 람다식은 함수형 인터페이스로만 접근이 되기 때문입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1630334161250&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static void main(String[] args) {
	//람다식
    FunctionalInterface fun = text -&amp;gt; System.out.println(text);
    fun.print(&quot;나와라~&quot;);
    
    //익명 클래스 형식
    //아래 처럼 익명 클래스를 사용하지 않고 함수형 인터페이스와 람다식을 사용하면 위의 코드 처럼 좀 더 코드가 간결해진다.
    FunctionalInterface func = new FunctionalInterface() {
      	@Override
      	public void print(String text) {
      		System.out.println(text);
      	}
    };
    func.print(&quot;나와라2~&quot;);
}   

public interface FunctionalInterface {
	//인터페이스에 선언된 상수와 추상 메서드는 public static final 과 public abstract 생략 가능
	//이유는 컴파일 시에 자동으로 생성해주기 때문
	public abstract void print(String text);
}

//실행 결과
//나와라~
//나와라2~&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드처럼 매번 람다식을 사용할 때마다 함수형 인터페이스를 정의하기에는 불편하기 때문에&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바에서 라이브러리로 제공하는 &lt;span style=&quot;background-color: #f6e199;&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;기본 함수형 인터페이스&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Runnable&lt;/li&gt;
&lt;li&gt;Supplier&lt;/li&gt;
&lt;li&gt;Consumer&lt;/li&gt;
&lt;li&gt;Function&amp;lt;T,R&amp;gt;&lt;/li&gt;
&lt;li&gt;Predicate&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세하게 확인하고 싶으시면 아래에서 확인해주세요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html&lt;/a&gt;&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>람다식</category>
      <category>자바8</category>
      <category>함수형인터페이스</category>
      <author>Choiji</author>
      <guid isPermaLink="true">https://choiiii-dev.tistory.com/25</guid>
      <comments>https://choiiii-dev.tistory.com/25#entry25comment</comments>
      <pubDate>Mon, 30 Aug 2021 23:49:17 +0900</pubDate>
    </item>
    <item>
      <title>스프링부트 CORS 설정</title>
      <link>https://choiiii-dev.tistory.com/23</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://choiiii-dev.tistory.com/22&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[HTTP] - CORS 교차 출처 리소스 공유&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1630222538587&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;CORS 교차 출처 리소스 공유&quot; data-og-description=&quot;교차 출처 리소스 공유(Cross-Origin Resource Sharing,&amp;nbsp;CORS)는 추가&amp;nbsp;HTTP&amp;nbsp;헤더를 사용하여, 한&amp;nbsp;출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브&quot; data-og-host=&quot;choiiii-dev.tistory.com&quot; data-og-source-url=&quot;https://choiiii-dev.tistory.com/22&quot; data-og-url=&quot;https://choiiii-dev.tistory.com/22&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nsIzy/hyLq41ZY4o/kU1agkHgHUHT4xDsGHGu8K/img.png?width=512&amp;amp;height=59&amp;amp;face=0_0_512_59,https://scrap.kakaocdn.net/dn/dpkmYc/hyLq0L3Vko/dxl7vp9rblWsmC9P7KHkk0/img.png?width=512&amp;amp;height=59&amp;amp;face=0_0_512_59,https://scrap.kakaocdn.net/dn/dl30wo/hyLo8ZgzyG/amJlrwBsWVWcW7NkfqhQ71/img.jpg?width=839&amp;amp;height=892&amp;amp;face=0_0_839_892&quot;&gt;&lt;a href=&quot;https://choiiii-dev.tistory.com/22&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://choiiii-dev.tistory.com/22&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nsIzy/hyLq41ZY4o/kU1agkHgHUHT4xDsGHGu8K/img.png?width=512&amp;amp;height=59&amp;amp;face=0_0_512_59,https://scrap.kakaocdn.net/dn/dpkmYc/hyLq0L3Vko/dxl7vp9rblWsmC9P7KHkk0/img.png?width=512&amp;amp;height=59&amp;amp;face=0_0_512_59,https://scrap.kakaocdn.net/dn/dl30wo/hyLo8ZgzyG/amJlrwBsWVWcW7NkfqhQ71/img.jpg?width=839&amp;amp;height=892&amp;amp;face=0_0_839_892');&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;CORS 교차 출처 리소스 공유&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;교차 출처 리소스 공유(Cross-Origin Resource Sharing,&amp;nbsp;CORS)는 추가&amp;nbsp;HTTP&amp;nbsp;헤더를 사용하여, 한&amp;nbsp;출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;choiiii-dev.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 글처럼 CORS에러가 발생했을 때&amp;nbsp; 스프링에서 해결하는 방법.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. Global 설정 추가&lt;/b&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;216&quot; data-origin-height=&quot;192&quot; data-filename=&quot;스크린샷 2021-08-29 오후 4.39.27.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3MpBK/btrdtKYhHEs/FytBYL311YUcPfUnqDWKfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3MpBK/btrdtKYhHEs/FytBYL311YUcPfUnqDWKfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3MpBK/btrdtKYhHEs/FytBYL311YUcPfUnqDWKfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3MpBK%2FbtrdtKYhHEs%2FFytBYL311YUcPfUnqDWKfK%2Fimg.png&quot; data-origin-width=&quot;216&quot; data-origin-height=&quot;192&quot; data-filename=&quot;스크린샷 2021-08-29 오후 4.39.27.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 하위 폴더에 config 패키지 생성 -&amp;gt; WebConfig.java 파일 생성 후&lt;/p&gt;
&lt;pre id=&quot;code_1630223258616&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//@Configuration은 설정파일을 만들기 위한 어노테이션입니다.
@Configuration
public class WebConfig implements WebMvcConfigurer {

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 상단에 &lt;b&gt;@Configuration&lt;/b&gt; 어노테이션을 붙여주고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; WebMvcConfigurer&lt;/b&gt; 인터페이스를 이용해서&amp;nbsp; 필요한 설정들을 커스터마이징 할 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;296&quot; data-filename=&quot;스크린샷 2021-08-29 오후 5.15.11.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdKNwy/btrdpMiJW20/ikYiJgxjdkxgzK1uGibOk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdKNwy/btrdpMiJW20/ikYiJgxjdkxgzK1uGibOk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdKNwy/btrdpMiJW20/ikYiJgxjdkxgzK1uGibOk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdKNwy%2FbtrdpMiJW20%2FikYiJgxjdkxgzK1uGibOk0%2Fimg.png&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;296&quot; data-filename=&quot;스크린샷 2021-08-29 오후 5.15.11.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;WebMvcConfigurer&lt;/b&gt; 인터페이스를 보면 내부에 많은 메서드들이 존재하는데 모두 &lt;b&gt;default&lt;/b&gt;로 선언되어있어,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;implements를 하여도 모든 메서드를 구현할 필요 없이 필요한 메서드만 커스터마이징 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;intercepter용 메서드들도 컨트롤할 수 있는데 그러기 위해서는 &lt;b&gt;@EnableWebMvc, @Configuration&lt;/b&gt;을 같이 선언해주어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이제&lt;b&gt; WebMvcConfigurer&lt;/b&gt; 인터페이스를 상속받고 나서&amp;nbsp; &lt;b&gt;addCorsMappings&lt;/b&gt;를 @Override해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1630226517496&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {

        registry.addMapping(&quot;/api/**&quot;)
            .allowedOrigins(&quot;http://domain2.com&quot;)
            .allowedMethods(&quot;PUT&quot;, &quot;DELETE&quot;)
            .allowedHeaders(&quot;header1&quot;, &quot;header2&quot;, &quot;header3&quot;)
            .exposedHeaders(&quot;header1&quot;, &quot;header2&quot;)
            .allowCredentials(true)
            .maxAge(3600);

        // Add more mappings...
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 설정은 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;All origins.&lt;/li&gt;
&lt;li&gt;All headers.&lt;/li&gt;
&lt;li&gt;GET,&lt;span&gt;&amp;nbsp;&lt;/span&gt;HEAD, and&lt;span&gt;&amp;nbsp;&lt;/span&gt;POST&lt;span&gt;&amp;nbsp;&lt;/span&gt;methods.&lt;/li&gt;
&lt;li&gt;allowedCredentials&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;maxAge&lt;span&gt;&amp;nbsp;&lt;/span&gt;is set to 30 minutes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;addMapping&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f7f7f8; color: #000000;&quot;&gt;CorsRegistry 콜백을 사용해서&amp;nbsp;&lt;/span&gt;addMapping에 CORS 설정을 적용할 URL 패턴을 정의할 수 있습니다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Ant-style을 지원해서 위 코드와 같은 방식과&amp;nbsp;&lt;/span&gt;&quot;/**&quot; 같은 와일드카드를 사용하여 작성이 가능합니다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;allowedOrigins&lt;/b&gt; &lt;br /&gt;allowedOrigin 메서드를 이용해서 자원 공유를 허락할 Origin을 지정할 수 있습니다.&lt;br /&gt;&quot;*&quot;로 모든 Origin을 허락할 수 도 있고 &lt;span style=&quot;color: #000000;&quot;&gt;allowedOrigin(&quot;http://localhost:8080&quot;, &quot;http://localhost:8081&quot;)처럼&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;한 번에 여러 Origin을 설정할 수 있습니다.&lt;br /&gt;※ origin이란 특정 페이지에 접근할 때 사용되는 URL의 Scheme(프로토콜), host(도메인), 포트를 말합니다.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;allowedCredentials&lt;/b&gt;&lt;br /&gt;쿠키 및 CSRF 토큰과 같은 민감한 정보는 노출하는 신뢰 수준을 설정하고 적절한 경우에만 사용해야 하므로&lt;br /&gt;기본적으로 활성화돼 않습니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;maxAge&lt;br /&gt;maxAge&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;메서드를 이용해서 원하는 시간만큼 pre-flight 리퀘스트를 캐싱해둘 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. Anotation 설정 @CrossOrigin&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;@CrossOrigin&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1630238070326&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@RestController
public class PostsController {

    private final PostsService postsService;

    public PostsController(PostsService postsService) {
            this.postsService = postsService;
    }
    
    @CrossOrigin
    @GetMapping(value = &quot;/posts/list&quot;, produces = &quot;application/json; charset=utf-8&quot;)
    public List&amp;lt;Posts&amp;gt; findAll() {
        return postsService.findAll();
    }
    
}&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;@CrossOrigin은 클래스 및 메서드 수준에서 모두 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@CrossOrigin(origins = &quot;http://localhost:8080&quot;, maxAge&amp;nbsp; = 3600)&lt;/p&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>HTTP</category>
      <category>@CrossOrigin</category>
      <category>Cors</category>
      <category>WebMvcConfigurer</category>
      <category>설정</category>
      <category>스프링부트</category>
      <author>Choiji</author>
      <guid isPermaLink="true">https://choiiii-dev.tistory.com/23</guid>
      <comments>https://choiiii-dev.tistory.com/23#entry23comment</comments>
      <pubDate>Sun, 29 Aug 2021 18:32:28 +0900</pubDate>
    </item>
  </channel>
</rss>