<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>his </title>
    <link>https://hisjeans.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 14 Jul 2026 01:01:40 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>hisjeans</managingEditor>
    <image>
      <title>his </title>
      <url>https://tistory1.daumcdn.net/tistory/8555390/attach/c0b068f162754b6ab438919840640861</url>
      <link>https://hisjeans.tistory.com</link>
    </image>
    <item>
      <title>[Git] Merge vs Rebase / Fetch vs Pull 차이</title>
      <link>https://hisjeans.tistory.com/entry/Git-Merge-vs-Rebase-Fetch-vs-Pull-%EC%B0%A8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git을 사용해 협업하는 중 브랜치를 합치거나 원격 저장소의 코드를 가져올 때 어떤 명령어를 사용해야 하는지 고민되는 순간  &lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. &lt;span style=&quot;color: #ee2323;&quot;&gt;Git Rebase&lt;/span&gt; vs &lt;span style=&quot;color: #ee2323;&quot;&gt;Git Merge&lt;/span&gt;: 브랜치를 합치는 두 가지 방법&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;git rebase&lt;/b&gt;와 &lt;b&gt;git merge&lt;/b&gt;의 차이점을 설명하고, 각각 어떤 상황에서 사용하는 것이 적절한지 설명해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Git에서 분기된 브랜치를 하나로 병합한다는 의미에서는 동일하지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #9feec3;&quot;&gt;어떻게 커밋 히스토리(이력)를 남기느냐&lt;/span&gt;에 따라 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;git merge&lt;/b&gt;&lt;/span&gt;와&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; git rebase&lt;/span&gt;&lt;/b&gt;로 다른 결과를 낳는다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;merge&lt;/b&gt;는 브랜치의 변경 사항과 흐름 이력을 그대로 남기지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;rebase&lt;/b&gt;는 대상 브랜치의 최신 커밋 위에 현재 브랜치의 커밋들이 순서대로 재적용되어 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;선형 히스토리&lt;/span&gt;가 형성된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;따라서 브랜치의 사용 내역을 남겨둘 필요가 있다면 &lt;b&gt;merge&lt;/b&gt;를,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;히스토리를 깔끔히 만드는 게 중요하다면 &lt;b&gt;rebase&lt;/b&gt; 사용하는 것이 적합하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;rebase&lt;/b&gt; 는 커밋을 하나씩 재적용하기 때문에 충돌이 발생할 경우, 이를 각 커밋마다 해결해야 할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(&lt;b&gt;merge&lt;/b&gt; 보다 충돌에 대한 해결 과정이 번거로울 수 있는 것)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;더 자세히 살펴보면,&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;span style=&quot;color: #ee2323;&quot;&gt;git rebase&lt;/span&gt;:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단어 뜻 그대로 브랜치의 베이스(Base)를 다시 설정한다&lt;/li&gt;
&lt;li&gt;현재 브랜치의 시작점을 대상 브랜치의 가장 최신 커밋으로 옮겨, 처음부터 한 줄로 작업한 것처럼 &lt;span style=&quot;color: #000000; background-color: #9feec3;&quot;&gt;커밋 히스토리를 일직선&lt;/span&gt;으로 깨끗하게 만든다&lt;/li&gt;
&lt;li&gt;개인 브랜치에서 뻗어나간 가지를 굳이 사용할 필요 없다면 사용한다&lt;/li&gt;
&lt;li&gt;복잡하게 얽힌 브랜치 트리를 단순화해 선형 히스토리를 유지하는 것이 가능하다&lt;/li&gt;
&lt;li&gt;혼자서 작업하는 개인 브랜치에서 유용하다 직접 작업한 여러 커밋을 마치 하나의 작업이 이어진 것처럼 보여줄 수 있다&lt;/li&gt;
&lt;li&gt;⚠️&amp;nbsp;기존 커밋을 그대로 옮기는 것이 아니라, 동일한 변경 내용을 가진 새로운 Commit을 생성하기 때문에 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;Commit Hash가 달라진다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;⚠️&amp;nbsp;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;이미 공유된 원격 저장소에 다른 개발자가 작업 중인 브랜치에서는 사용하지 않는 것이 일반적&lt;/span&gt; - Rebase는 과거의 커밋 히스토리 자체를 변경하기 때문에 공용 브랜치에서 사용하면 다른 팀원들의 로컬 저장소 히스토리와 엇갈리면서 충돌이 일어날 수 있다 ‼️&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;git merge&lt;/span&gt;:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;병합된 브랜치의 모든 변경 사항 및 히스토리를 그대로 유지하면서, &lt;span style=&quot;background-color: #9feec3;&quot;&gt;병합 이후 두 갈래를 하나로 묶어주는 새로운 병합 커밋(Merge Commit)을 생성&lt;/span&gt;한다&lt;/li&gt;
&lt;li&gt;이러한 과정은 두 경우에 사용한다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;기능 브랜치 병합(3-way merge):&lt;/b&gt; 별도의 브랜치에서 개발하던 기능이 완성되면, 이 기능을 포함하고 있는 브랜치를 &lt;b&gt;main&lt;/b&gt;이나 &lt;b&gt;master&lt;/b&gt; 브랜치와 병합해 기능을 통합한다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;777&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boWYu3/dJMcaicXGHJ/WQk28soeTGjZtfindAFgiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boWYu3/dJMcaicXGHJ/WQk28soeTGjZtfindAFgiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boWYu3/dJMcaicXGHJ/WQk28soeTGjZtfindAFgiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboWYu3%2FdJMcaicXGHJ%2FWQk28soeTGjZtfindAFgiK%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;571&quot; height=&quot;777&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;777&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;빠른 포워드 병합(fast-forward merge):&lt;/b&gt; 하나의 브랜치에만 변경 사항이 존재하고 있고 다른 브랜치는 변경되지 않은 상황에 발생한다 이러한 경우 Git은 단순히 브랜치 포인터를 앞으로 이동시킨다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;747&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IJLoI/dJMcac4M8mk/k3KBVY3tYeggzkTgCbgRS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IJLoI/dJMcac4M8mk/k3KBVY3tYeggzkTgCbgRS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IJLoI/dJMcac4M8mk/k3KBVY3tYeggzkTgCbgRS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIJLoI%2FdJMcac4M8mk%2Fk3KBVY3tYeggzkTgCbgRS0%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;628&quot; height=&quot;747&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;747&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어느 브랜치에서 어떤 변경이 일어났는지, 언제 브랜치가 합쳐졌는지 명확히 알 수 있다&lt;/li&gt;
&lt;li&gt;기존 히스토리를 손대지 않고 보존하기 때문에 협업 시 안전하다&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;여러 개발자가 함께 작업하는 공용 브랜치(예: main, develop)의 작업물을 합칠 때 사용&lt;/span&gt;한다&lt;/li&gt;
&lt;li&gt;다만 대규모 프로젝트, 다수의 개발자가 동시에 작업한다면 수많은 가지치기, 병합 커밋들이 얽혀 히스토리 그래프가 복잡해질 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Merge&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Rebase&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;히스토리 형태&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;비선형(브랜치 흔적 보존)&lt;/td&gt;
&lt;td&gt;선형으로 깔끔하게 유지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;병합 커밋 생성&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;⭕️&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;커밋 해시 변경&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;⭕️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;공용 브랜치 사용&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;안전&lt;/td&gt;
&lt;td&gt;위험할 수 있다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;충돌 처리&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;1회&lt;/td&gt;
&lt;td&gt;커밋별 처리&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. Git Fetch vs Git Pull : 원격 변경사항 가져오는 방법&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;git fetch&lt;/b&gt;와 &lt;b&gt;git pull&lt;/b&gt;의 차이점을 설명하고, 각각을 사용하는 것이 적절한 상황을 설명해주세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;git fetch&lt;/b&gt;&lt;/span&gt;와 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;git pull&lt;/span&gt;&lt;/b&gt;은 원격 저장소(Remote Repository)의 최신 변경 사항을 로컬로 가져오는 명령어&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이들은 merge 여부에서 차이 나타나는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;git fetch&lt;/span&gt;&lt;/b&gt;는 병합하지 않지만 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;git pull&lt;/span&gt;&lt;/b&gt;은 병합한다는 점에서 다르다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;fetch&lt;/b&gt;는 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;원격 저장소의 변경 사항들을 우선 로컬로만 가져오는 방법&lt;/span&gt;으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다른 개발자가 푸시한 내용을 로컬로 가져오고 싶을 때 사용한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;git pull&lt;/b&gt;은 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;원격 저장소를 가져와 합치는 방법&lt;/span&gt;이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;더 자세히 살펴보면,&lt;/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;span style=&quot;color: #ee2323;&quot;&gt;git fetch&lt;/span&gt;:&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;703&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MH2jz/dJMcaazb6oO/OOpkL4V9ictfjDgM5VmXAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MH2jz/dJMcaazb6oO/OOpkL4V9ictfjDgM5VmXAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MH2jz/dJMcaazb6oO/OOpkL4V9ictfjDgM5VmXAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMH2jz%2FdJMcaazb6oO%2FOOpkL4V9ictfjDgM5VmXAk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;703&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;703&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;원격 저장소의 새로운 커밋, 브랜치 등의 정보를 로컬로 가져오고 현재 작업 중인 로컬 브랜치에 이 변경된 데이터를 Git에 병합하거나 커밋하지 않는다&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;기존 작업 내역을 변경하지 않아 안전하게 현재의 작업 내역을 유지하면서 원격 저장소의 변경사항 확인 가능&lt;/span&gt;하다&lt;/li&gt;
&lt;li&gt;필요한 경우 &lt;b&gt;git fetch&lt;/b&gt; 이후, &lt;b&gt;git diff&lt;/b&gt; 명령어로 원격 코드와 로컬 코드 간 변경 사항을 검토한 뒤, 수동으로 병합(&lt;b&gt;git merge&lt;/b&gt;)할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;git pull&lt;/span&gt;:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;git fetch + git merge&lt;/b&gt; 가 결합된 명령어&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;원격 저장소에서 최신 변경사항을 로컬 저장소로 가져와 작업 중인 로컬 브랜치에 해당 변경사항을 병합(Merge)&lt;/span&gt;한다&lt;/li&gt;
&lt;li&gt;원격 저장소의 최신 변경 사항을 로컬 브랜치에 빠르게 동기화할 수 있다&lt;/li&gt;
&lt;li&gt;이때 로컬 파일이 즉시 변경되기 때문에 원격과 로컬 사이 충돌이 발생하지 않도록 주의가 필요하다&lt;/li&gt;
&lt;li&gt;로컬에서 작업 중인 브랜치에 커밋되지 않은 변경사항이 있을 경우, &lt;b&gt;git pull&lt;/b&gt; 실행하기 전에 반드시 작업 내역에 대한 커밋(&lt;b&gt;git commit&lt;/b&gt;) 또는 &lt;b&gt;git stash&lt;/b&gt;가 우선되어야 한다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;git pull &amp;mdash;rebase&lt;/b&gt; 옵션을 이용하면 merge 대신 rebase로 통합할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;참고자료:&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://www.freecodecamp.org/korean/news/git-fetch-vs-pull/&quot;&gt;https://www.freecodecamp.org/korean/news/git-fetch-vs-pull/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1783413457381&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 Fetch와 Git Pull 명령어의 차이점&quot; data-og-description=&quot;Git pull과 fetch는 Git 사용자가 자주 사용하는 명령어입니다. 이 기사에서는 두 명령어의 차이점을 알아봅니다. 본격적인 이야기에 앞서 '클론'이란 무엇일까요? 클론 저장소(clone repository)는 원격 &quot; data-og-host=&quot;www.freecodecamp.org&quot; data-og-source-url=&quot;https://www.freecodecamp.org/korean/news/git-fetch-vs-pull/&quot; data-og-url=&quot;https://www.freecodecamp.org/korean/news/git-fetch-vs-pull/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/iQWym/dJMb8UH0Qra/0HTk1k90lwT6stuhn4Y9o1/img.jpg?width=1280&amp;amp;height=960&amp;amp;face=0_0_1280_960,https://scrap.kakaocdn.net/dn/dbeioU/dJMb8RkdGOX/c1rrXmKKFXqO4q7LmRzEB0/img.jpg?width=1280&amp;amp;height=960&amp;amp;face=0_0_1280_960,https://scrap.kakaocdn.net/dn/SbQ4M/dJMb8SXJuku/WnqU8q1ChOcKAHI6ZpJ3YK/img.jpg?width=1280&amp;amp;height=960&amp;amp;face=0_0_1280_960&quot;&gt;&lt;a href=&quot;https://www.freecodecamp.org/korean/news/git-fetch-vs-pull/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.freecodecamp.org/korean/news/git-fetch-vs-pull/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/iQWym/dJMb8UH0Qra/0HTk1k90lwT6stuhn4Y9o1/img.jpg?width=1280&amp;amp;height=960&amp;amp;face=0_0_1280_960,https://scrap.kakaocdn.net/dn/dbeioU/dJMb8RkdGOX/c1rrXmKKFXqO4q7LmRzEB0/img.jpg?width=1280&amp;amp;height=960&amp;amp;face=0_0_1280_960,https://scrap.kakaocdn.net/dn/SbQ4M/dJMb8SXJuku/WnqU8q1ChOcKAHI6ZpJ3YK/img.jpg?width=1280&amp;amp;height=960&amp;amp;face=0_0_1280_960');&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 Fetch와 Git Pull 명령어의 차이점&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Git pull과 fetch는 Git 사용자가 자주 사용하는 명령어입니다. 이 기사에서는 두 명령어의 차이점을 알아봅니다. 본격적인 이야기에 앞서 '클론'이란 무엇일까요? 클론 저장소(clone repository)는 원격&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.freecodecamp.org&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>github</category>
      <category>Git_Fetch</category>
      <category>Git_Merge</category>
      <category>Git_Pull</category>
      <category>Git_Rebase</category>
      <category>기술면접</category>
      <category>깃허브</category>
      <category>버전관리</category>
      <category>형상관리</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/25</guid>
      <comments>https://hisjeans.tistory.com/entry/Git-Merge-vs-Rebase-Fetch-vs-Pull-%EC%B0%A8#entry25comment</comments>
      <pubDate>Tue, 7 Jul 2026 17:56:17 +0900</pubDate>
    </item>
    <item>
      <title>[Git] 이미 올라간 PR 수정하는 방법 (commit--amend, push -f)</title>
      <link>https://hisjeans.tistory.com/entry/Git-%EC%9D%B4%EB%AF%B8-%EC%98%AC%EB%9D%BC%EA%B0%84-PR-%EC%88%98%EC%A0%95%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-commit-amend-push-f</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;작업 중 PR을 올렸는데 아차 싶었던 경험  &lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  문제 상황&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;@PathVariable&lt;/span&gt; &lt;/span&gt;로 List&amp;lt;UUID&amp;gt;를 받으려고 했지만 API 경로가 동일하게 매핑되어&lt;b&gt;&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;ldquo;Ambiguous handler methods mapped&amp;rdquo;&lt;/span&gt; &lt;/b&gt;에러가 발생했다&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;즉, 단건/다건 조회 메서드의 경로가 충돌하여 이를 해결하지 못하고 PR을 미완성으로 제출하게 되었다&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;다음 미션으로 넘어가서 다른 요구사항을 먼저 해결한 뒤, 코드를 수정해보니 바이너리 파일 업로드에 성공하였다&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;따라서 기존에 올린 PR의 내용에 변경이 필요한 상황이 되었다  &lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;현재 상황은 이미 다음 미션인 sprint5가 분기된 상태이다&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;하지만 이미 PR이 올라간 sprint4 브랜치에 수정이 필요하기 때문에 아래와 같이 해결해야 한다&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;✅&amp;nbsp; 해결 방법&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;1. 이전 PR을 올린 sprint4 &lt;b&gt;브랜치&lt;/b&gt;를 &lt;b&gt;체크아웃&lt;/b&gt;한다&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;2. 다음으로 수정이 필요한 파일을 고치고, 본인은 Postman에서 새롭게 export한 파일도 InteliJ에 추가해주었다&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;3. 이제 터미널에서 아래 명령어를 입력한다&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1782260124798&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git add [수정한 파일 &quot;BinaryController.java&quot;의 경로(예: src/main/..../BinaryController.java)]

git add [포스트맨에서 새롭게 export한 json 파일명]

git commit --amend --no-edit
# 새로운 커밋을 추가하는 대신 가장 최근 커밋에 덮어쓴다&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1666&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Dgipy/dJMcahEQtCk/s3PLK9wSO5WYpDFtbftGLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Dgipy/dJMcahEQtCk/s3PLK9wSO5WYpDFtbftGLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Dgipy/dJMcahEQtCk/s3PLK9wSO5WYpDFtbftGLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDgipy%2FdJMcahEQtCk%2Fs3PLK9wSO5WYpDFtbftGLk%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;1666&quot; height=&quot;332&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1666&quot; data-origin-height=&quot;332&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이전 커밋인 &quot;@Controller 를 이용해 API 구현&quot; 에 덮어쓰는 것을 확인할 수 있다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다음으로 아래 명령어를 입력한다&lt;/p&gt;
&lt;pre id=&quot;code_1782261156843&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git push -f origin sprint4
# --amend로 커밋 히스토리가 변경되었기 때문에 강제 push가 필요하다
# ⚠️ 혼자 작업하는 브랜치에서만 사용해야 한다 
# 협업하는 브랜치에서 사용할 경우 다른 사람의 작업 또한 덮어씌워지는 문제가 발생할 수 있다‼️&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1068&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FvXh6/dJMcabdxjoo/5vwtXhty5bDkXKz0dd8CY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FvXh6/dJMcabdxjoo/5vwtXhty5bDkXKz0dd8CY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FvXh6/dJMcabdxjoo/5vwtXhty5bDkXKz0dd8CY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFvXh6%2FdJMcabdxjoo%2F5vwtXhty5bDkXKz0dd8CY0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1068&quot; height=&quot;278&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1068&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot;&gt;위 과정을 통해 이미 올라간 PR을 수정할 수 있었다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이제 다음 미션을 위한 브랜치인 sprint5로 체크아웃하여 작업을 이어나가면 된다&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Github 버전 관리</category>
      <category>Git</category>
      <category>github</category>
      <category>git_commit_amend</category>
      <category>PR수정</category>
      <category>PullRequest</category>
      <category>springboot</category>
      <category>강제푸시</category>
      <category>개발블로그</category>
      <category>백엔드</category>
      <category>에러해결</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/24</guid>
      <comments>https://hisjeans.tistory.com/entry/Git-%EC%9D%B4%EB%AF%B8-%EC%98%AC%EB%9D%BC%EA%B0%84-PR-%EC%88%98%EC%A0%95%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-commit-amend-push-f#entry24comment</comments>
      <pubDate>Wed, 24 Jun 2026 09:36:14 +0900</pubDate>
    </item>
    <item>
      <title>[Git] Atomic Commit과 좋은 커밋 메시지 작성법</title>
      <link>https://hisjeans.tistory.com/entry/Git-Atomic-Commit%EA%B3%BC-%EC%A2%8B%EC%9D%80-%EC%BB%A4%EB%B0%8B-%EB%A9%94%EC%8B%9C%EC%A7%80-%EC%9E%91%EC%84%B1%EB%B2%95</link>
      <description>&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 1.62em;&quot;&gt;Atomic Commit&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;Atomic commit은 작지만 완전한 하나의 기능을 포함하는 커밋을 의미한다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;ldquo;Atomic&amp;rdquo;이란 원자처럼 분할할 수 없는 최소의 단위라는 뜻을 가지며,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이는 커밋도 마찬가지로 최소한의 변경 사항만을 담아야 함을 뜻한다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;개념&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;Atomic commit 전략은 큰 변경사항을 작은 단위로 분리하여 커밋하는 것을 말한다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이렇게 함으로써 각 커밋이 하나의 완전한 변경사항을 나타내게 되며,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이는 코드 리뷰를 용이하게 하고 이해하기 쉬운 이력을 만든다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;또한 Atomic commit을 사용하면 특정 변경 사항이 문제를 일으킬 경우&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;해당 커밋만을 쉽게 되돌릴 수 있어 문제 해결이 용이해진다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;예를 들어, 새로운 기능을 추가하고 버그를 수정했다고 가정해보자&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이 두 가지 변경 사항을 한 번의 커밋에 포함시키는 대신,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;각각을 별도의 커밋으로 만드는 것이 좋다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 새로운 기능 추가에 관한 커밋&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;dockerfile&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;git add new_feature_file
git commit -m &quot;Add new feature&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 버그 수정에 관한 커밋:&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;armasm&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;git add bug_fix_file
git commit -m &quot;Fix bug in existing feature&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;각 커밋은 각각 하나의 완전한 변경 사항을 나타내므로,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이는 Atomic commit 원칙을 따른다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이렇게 하면, 나중에 문제가 발생했을 때 어떤 커밋이 문제를 일으켰는지 쉽게 파악할 수 있다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;정리&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;Atomic commit은 코드의 변경 사항을 작은 단위로 분리하여 커밋하는 것으로,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;코드의 이력을 이해하고 관리하게 쉽게 만든다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;또한 문제가 발생했을 때 특정 커밋을 쉽게 되돌릴 수 잇어 문제 해결이 쉬워진다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;좋은 커밋 메시지 작성하기&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&quot;please enter the commit message&quot;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;커밋 메시지는 반드시 작성해야한다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;좋은 커밋 메시지는 코드의 이해를 돕고 프로젝트의 이력을 명확하게 만드는데 크게 돕는다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;다음과 같은 원칙들을 따라 좋은 커밋 메시지 작성할 수 있다(권장사항)&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 제목과 본문 분리하기&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;제목과 본문은 빈 줄로 분리해야 한다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이는 Git의 명령 줄 도구뿐만 아니라 많은 웹 기반 도구들도 이 형식을 사용하므로 중요한 원칙&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 제목 줄은 간결하고 명확하게&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;제목 줄은 가능한 50자 이내로 작성하고, 큰 변화를 요약하는 것이 좋다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;또한, 제목의 마지막에 마침표를 찍지 않아야 한다&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 제목 줄에 명령문을 사용 - 과거시제 보다 현재시제로 작성&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;제목 줄은 명령문으로 작성하는 것이 좋다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;(&amp;rdquo;Add feature&amp;rdquo; not &amp;ldquo;Added feature&amp;rdquo; or &amp;ldquo;Adds feature&amp;rdquo;)&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이는 많은 Git 도구에서 사용하는 규약&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 본문에는 &amp;ldquo;무엇을&amp;rdquo; &amp;ldquo;왜&amp;rdquo; 바꾸었는지 설명&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;본문에는 &amp;ldquo;무엇을&amp;rdquo; 변경했는지 보다 &lt;b&gt;&amp;ldquo;왜&amp;rdquo;&lt;/b&gt; 변경했는지 설명하는 것이 좋음&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;코드는 &amp;ldquo;무엇을&amp;rdquo; 변경했는지를 설명해주지만, &lt;b&gt;&amp;ldquo;왜&amp;rdquo;&lt;/b&gt; 변경했는지는 코드만으로 이해하기 어렵기 때문&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. 본문을 72자 정도로 제한&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;Git은 자동으로 메시지를 72자로 줄이지 않으므로,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;직접 줄 바꿈을 추가하여 본문의 각 줄이 72자가 넘지 않도록 하는 것이 좋다&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;6. 이슈 트래커 ID 참조&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;관련된 이슈나 버그 트래커 ID를 참조하면, 커밋과 이슈 사이의 관계를 명확하게 할 수 있다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;좋은 커밋 메시지를 작성하는 것은 프로젝트의 관리를 쉽게 하고,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;다른 참여자들이 프로젝트를 이해하는 데 도움된다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이 원칙들은 좋은 커밋 메시지를 작성하는 기본적인 방법론을 제공하지만,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;특정 프로젝트나 팀에서는 자체적인 규칙을 가질 수 있으므로&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;해당 규칙을 따르는 것이 중요&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;직전 커밋 수정: git commit &amp;mdash;amend&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;git commit &amp;mdash;amend 명령어는 가장 최근의 커밋을 수정하는 데 사용&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이 명령어를 사용하면 커밋 메시지를 변경하거나,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;실수로 누락된 파일을 추가하거나,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;잘못된 변경사항을 수정할 수 있다&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;사용 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;아래는 git commit &amp;mdash;amend 명령어의 몇 가지 사용 예시&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 커밋 메시지 수정&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;커밋 메시지를 수정할 수 있는 텍스트 에디터가 열린다&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;git commit --amend
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;기존의 커밋 메시지가 표시되어, 이를 수정한 후 저장하고 에디터를 닫으면 커밋 메시지가 변경된다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 커밋에 파일 추가&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;만일 커밋을 생성한 후에 추가로 커밋에 포함시키려는 파일이 있다면,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;해당 파일을 스테이징한 후 git commit &amp;mdash;amend 명령어를 실행하면 된다&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;git add forgotten_file
git commit --amend
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;새로 추가된 파일이 최근의 커밋에 포함되며,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;커밋 메시지를 수정할 수 있는 텍스트 에디터가 열린다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. &amp;nbsp;변경 사항 수정&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;또한, 이미 커밋한 변경사항에 오류가 있어 수정이 필요한 경우에도 git commit &amp;mdash;amend 명령어 사용 가능&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;⚠️ 주의사항&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;git commit &amp;mdash;amend 명령어는 현재 브랜치의 커밋 이력을 변경한다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;따라서 이 명령어를 실행한 후에는 기존 커밋에 대한 참조를 잃게 된다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이는 혼자 작업하는 경우에는 문제가 되지 않지만,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;다른 사람들과 협업하는 상황에서는 주의가 필요하다&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;다른 사람들이 이미 이 커밋을 기반으로 작업을 진행하고 있었다면,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;그들의 작업과 병합하는 과정에서 문제 발생 가능하다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;실습&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 3개의 파일의 텍스트를 고쳐서 수정상태로 만들자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1058&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boodk2/dJMcacQHKDi/VtvfnI1f3LyaKUOy1NrEkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boodk2/dJMcacQHKDi/VtvfnI1f3LyaKUOy1NrEkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boodk2/dJMcacQHKDi/VtvfnI1f3LyaKUOy1NrEkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fboodk2%2FdJMcacQHKDi%2FVtvfnI1f3LyaKUOy1NrEkK%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;1058&quot; height=&quot;354&quot; data-origin-width=&quot;1058&quot; data-origin-height=&quot;354&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;이 중에 2개만 add해서 staging&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1076&quot; data-origin-height=&quot;394&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PTNST/dJMcag6Eygq/19xxsR1a9of18Az8nABqGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PTNST/dJMcag6Eygq/19xxsR1a9of18Az8nABqGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PTNST/dJMcag6Eygq/19xxsR1a9of18Az8nABqGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPTNST%2FdJMcag6Eygq%2F19xxsR1a9of18Az8nABqGk%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;1076&quot; height=&quot;394&quot; data-origin-width=&quot;1076&quot; data-origin-height=&quot;394&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;커밋을 하는데 의도적으로 커밋 메시지에 오타를 내자&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1060&quot; data-origin-height=&quot;96&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/skqyh/dJMcafUeEfV/6WAVJPFJkg4fhHwubPWbVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/skqyh/dJMcafUeEfV/6WAVJPFJkg4fhHwubPWbVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/skqyh/dJMcafUeEfV/6WAVJPFJkg4fhHwubPWbVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fskqyh%2FdJMcafUeEfV%2F6WAVJPFJkg4fhHwubPWbVk%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;1060&quot; height=&quot;96&quot; data-origin-width=&quot;1060&quot; data-origin-height=&quot;96&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;lsquo;git log &amp;mdash;oneline&amp;rsquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbbqGl/dJMcafs8lRn/uFLPMwZLe0d35UZ4eXcaFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbbqGl/dJMcafs8lRn/uFLPMwZLe0d35UZ4eXcaFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbbqGl/dJMcafs8lRn/uFLPMwZLe0d35UZ4eXcaFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbbqGl%2FdJMcafs8lRn%2FuFLPMwZLe0d35UZ4eXcaFK%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;928&quot; height=&quot;180&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;180&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. 원래는 파일 3개를 staging 해야 했지만 2개만 했고 커밋메시지도 오타가 났다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이런 경우 &lt;b&gt;amend 옵션&lt;/b&gt;을 사용해 직전 커밋을 수정할 수 있다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1094&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dk02iv/dJMcaicnplp/KJ7U9w17Iktmhub3ZnGHf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dk02iv/dJMcaicnplp/KJ7U9w17Iktmhub3ZnGHf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dk02iv/dJMcaicnplp/KJ7U9w17Iktmhub3ZnGHf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdk02iv%2FdJMcaicnplp%2FKJ7U9w17Iktmhub3ZnGHf1%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;1094&quot; height=&quot;152&quot; data-origin-width=&quot;1094&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;amend를 사용하면 커밋의 해시값이 변경되어 다른 사람의 작업을 방해할 수 있으니 주의!!!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baSnXs/dJMcacXEX7g/tKlBoMQHZgfZJzRFjKj5Gk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baSnXs/dJMcacXEX7g/tKlBoMQHZgfZJzRFjKj5Gk/img.png&quot; data-alt=&quot;e52549b ➡️ 4fe1bf9&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baSnXs/dJMcacXEX7g/tKlBoMQHZgfZJzRFjKj5Gk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaSnXs%2FdJMcacXEX7g%2FtKlBoMQHZgfZJzRFjKj5Gk%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;876&quot; height=&quot;154&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;e52549b ➡️ 4fe1bf9&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;참고자료&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://cbea.ms/git-commit/&quot;&gt;https://cbea.ms/git-commit/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1779337881417&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;How to Write a Git Commit Message&quot; data-og-description=&quot;Commit messages matter. Here's how to write them well.&quot; data-og-host=&quot;cbea.ms&quot; data-og-source-url=&quot;https://cbea.ms/git-commit/&quot; data-og-url=&quot;https://cbea.ms/git-commit/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bEFdgc/dJMb8WMvrh3/vQRkD3kQy8cQTIkCLXRq91/img.png?width=878&amp;amp;height=501&amp;amp;face=0_0_878_501,https://scrap.kakaocdn.net/dn/7z8ga/dJMb8WMvrh4/mth26qUXDBgfBcx3BWVk10/img.png?width=878&amp;amp;height=501&amp;amp;face=0_0_878_501,https://scrap.kakaocdn.net/dn/biY0g8/dJMb8T95pmW/fCqCzZ9uZf0MkivuSK48Pk/img.png?width=1522&amp;amp;height=202&amp;amp;face=0_0_1522_202&quot;&gt;&lt;a href=&quot;https://cbea.ms/git-commit/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://cbea.ms/git-commit/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bEFdgc/dJMb8WMvrh3/vQRkD3kQy8cQTIkCLXRq91/img.png?width=878&amp;amp;height=501&amp;amp;face=0_0_878_501,https://scrap.kakaocdn.net/dn/7z8ga/dJMb8WMvrh4/mth26qUXDBgfBcx3BWVk10/img.png?width=878&amp;amp;height=501&amp;amp;face=0_0_878_501,https://scrap.kakaocdn.net/dn/biY0g8/dJMb8T95pmW/fCqCzZ9uZf0MkivuSK48Pk/img.png?width=1522&amp;amp;height=202&amp;amp;face=0_0_1522_202');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;How to Write a Git Commit Message&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Commit messages matter. Here's how to write them well.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;cbea.ms&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>Atomic Commit</category>
      <category>Git</category>
      <category>git add</category>
      <category>git commit</category>
      <category>git commit amend</category>
      <category>git log</category>
      <category>git 커밋 메시지 규칙</category>
      <category>깃 커밋 원칙</category>
      <category>커밋 메시지 작성법</category>
      <category>커밋 수정하기</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/23</guid>
      <comments>https://hisjeans.tistory.com/entry/Git-Atomic-Commit%EA%B3%BC-%EC%A2%8B%EC%9D%80-%EC%BB%A4%EB%B0%8B-%EB%A9%94%EC%8B%9C%EC%A7%80-%EC%9E%91%EC%84%B1%EB%B2%95#entry23comment</comments>
      <pubDate>Fri, 5 Jun 2026 18:13:41 +0900</pubDate>
    </item>
    <item>
      <title>Java 레이어드 아키텍처 설계 - Repository, Service 패턴 실습</title>
      <link>https://hisjeans.tistory.com/entry/Java-%EB%A0%88%EC%9D%B4%EC%96%B4%EB%93%9C-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%84%A4%EA%B3%84-Repository-Service-%ED%8C%A8%ED%84%B4-%EC%8B%A4%EC%8A%B5</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;스프린트 미션 2&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디스코드 서비스를 활용해보며 각 도메인 모델에 필요한 정보를 도출하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 Java Class로 구현해보았다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-02 오후 10.34.10.png&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;1396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bISDG4/dJMcaci0obI/lZ9XsPxwVRrlbQIhK7k4vK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bISDG4/dJMcaci0obI/lZ9XsPxwVRrlbQIhK7k4vK/img.png&quot; data-alt=&quot;사용자, 메시지, 채널을 임의로 생성하였다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bISDG4/dJMcaci0obI/lZ9XsPxwVRrlbQIhK7k4vK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbISDG4%2FdJMcaci0obI%2FlZ9XsPxwVRrlbQIhK7k4vK%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;1600&quot; height=&quot;1396&quot; data-filename=&quot;스크린샷 2026-06-02 오후 10.34.10.png&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;1396&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사용자, 메시지, 채널을 임의로 생성하였다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-02 오후 10.35.00.png&quot; data-origin-width=&quot;1588&quot; data-origin-height=&quot;1436&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x2uDz/dJMcaci0obJ/OD9zU4jzaI8kuutqP84WJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x2uDz/dJMcaci0obJ/OD9zU4jzaI8kuutqP84WJk/img.png&quot; data-alt=&quot;사용자, 메시지 수정 및 조회 (의도적으로 공백을 넣어 오류 메시지가 출력되도록 하였다)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x2uDz/dJMcaci0obJ/OD9zU4jzaI8kuutqP84WJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx2uDz%2FdJMcaci0obJ%2FOD9zU4jzaI8kuutqP84WJk%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;1588&quot; height=&quot;1436&quot; data-filename=&quot;스크린샷 2026-06-02 오후 10.35.00.png&quot; data-origin-width=&quot;1588&quot; data-origin-height=&quot;1436&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사용자, 메시지 수정 및 조회 (의도적으로 공백을 넣어 오류 메시지가 출력되도록 하였다)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-02 오후 10.35.14.png&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;1390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkUmAd/dJMcadvpANG/sXkKlst9BoMITBVjvyBbq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkUmAd/dJMcadvpANG/sXkKlst9BoMITBVjvyBbq1/img.png&quot; data-alt=&quot;채널 수정 및 조회 / 사용자, 메시지, 채널 삭제&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkUmAd/dJMcadvpANG/sXkKlst9BoMITBVjvyBbq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkUmAd%2FdJMcadvpANG%2FsXkKlst9BoMITBVjvyBbq1%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;1272&quot; height=&quot;1390&quot; data-filename=&quot;스크린샷 2026-06-02 오후 10.35.14.png&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;1390&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;채널 수정 및 조회 / 사용자, 메시지, 채널 삭제&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구현하며 받은 코드 리뷰를 다음과 같이 정리했다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드 리뷰 ➡️ 개선 코드&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;  한번 선언된 후 변경되지 않는 값은 어떻게 표현하는 게 좋을까?&lt;/p&gt;
&lt;pre class=&quot;actionscript&quot;&gt;&lt;code&gt;private UUID id; // 객체 식별
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;⬇️&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;final&amp;nbsp;키워드&lt;/b&gt;를 이용해 표현하자 ‼️&lt;/p&gt;
&lt;pre class=&quot;actionscript&quot;&gt;&lt;code&gt;private final UUID id;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;  PR 올릴 때는 불필요한 로깅 삭제해야 한다&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;System.out.println(&quot;ESC...&quot;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;  가독성이 좋은가?&lt;/p&gt;
&lt;pre class=&quot;haxe&quot;&gt;&lt;code&gt;if(newType!=ChannelType.PRIVATE&amp;amp;&amp;amp;newType!=ChannelType.PUBLIC) {
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;⬇️&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;띄어쓰기로 구분해 읽기 더 좋게 작성하자&lt;/p&gt;
&lt;pre class=&quot;haxe&quot;&gt;&lt;code&gt;if(newType != ChannelType.PRIVATE &amp;amp;&amp;amp; newType != ChannelType.PUBLIC)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;  if문으로 오류 메시지를 리턴하는 게 현재 로직에서 적합한가?&lt;/p&gt;
&lt;pre class=&quot;haxe&quot;&gt;&lt;code&gt;    private String normalizeUserName(String newUserName){
        if(newUserName.isBlank()){
            return &quot;조심하세요! 공백은 불가능합니다...(현재 입력이 \\&quot;&quot;+newUserName+&quot;\\&quot; 입니다)&quot;;
        }
        return newUserName;
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;⬇️&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;throws 통해 Exception&lt;/b&gt; 던지는 게 더 적합한 로직‼️&lt;/p&gt;
&lt;pre class=&quot;haxe&quot;&gt;&lt;code&gt;    private String normalizeUserName(String newUserName){
        if(newUserName.isBlank()){
            throw new IllegalArgumentException(&quot;사용자 이름은 공백일 수 없습니다...&quot;);
        }
        return newUserName;
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다른 유효하지 않은 값이 들어왔을 때 또한&lt;b&gt;&amp;nbsp;throw&lt;/b&gt;를 통해 즉시 중단시켜 처리하자&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;    // 사용자 이메일 입력이 잘못 들어왔을 때
    private String normalizeEmail(String newEmail){
        if(!newEmail.contains(&quot;@&quot;)){
            throw new IllegalArgumentException(&quot;이메일 형식을 준수해주세요...&quot;);
        }
        return newEmail;
    }

    // 메시지
    // 메시지 내용이 공백일 때
        private String normalizeContent(String newContent){
        if(newContent.isBlank()){
            throw new IllegalArgumentException(&quot;메시지 내용은 공백일 수 없습니다...&quot;);
        }
        return newContent;
    }

	// 채널ID가 null일 때
    private UUID normalizeChannelId(UUID newChannelId){
        if(newChannelId==null) {
            throw new IllegalArgumentException(&quot;채널ID는 null일 수 없습니다...&quot;);
        }
        return newChannelId;
    }

	// 채널
    // 채널 이름이 공백일 때
        private String normalizeName(String newName){
        if(newName.isBlank()){
            throw new IllegalArgumentException(&quot;채널명은 1자에서 100자 사이여야 해요 채널 이름은 공백이 될 수 없습니다...&quot;);
        }
        return newName;
    }

	// 채널 타입이 PRIVE과 PUBLIC이 아닐 때
    private ChannelType normalizeChannelType(ChannelType newType){
        if(newType != ChannelType.PRIVATE &amp;amp;&amp;amp; newType != ChannelType.PUBLIC) {
            throw new IllegalArgumentException(&quot;채널 타입은 PRIVATE과 PUBLIC만 사용 가능합니다...&quot;);
        }
        return newType;
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt; &amp;nbsp;파일명+경로 표현&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt; private final Path channelPath =Path.of(&quot;data/channels.csv&quot;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;⬇️&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;파일명만 &lt;b&gt;static&lt;/b&gt;하게 &lt;b&gt;상수&lt;/b&gt;로 표현하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;경로를 포함한 파일명은 파일을 읽는 부분에서 처리하는 방법이 올바른 것이다&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt; private static final String channelFile = &quot;channels.csv&quot;;
 // 파일명만 static하게 상수 표현

public Channel createOne(Channel channel) throws IOException{
	Path channelPath=Path.of(&quot;data&quot;, channelFile); 
    // 경로 포함한 파일명은 파일을 읽는 부분에서 처리&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;  Repository 계층에서 read, create 키워드 선호할까?&lt;/p&gt;
&lt;pre class=&quot;java&quot;&gt;&lt;code&gt;@Override
public Message createOne(Message message) throws IOException{

@Override
public Optional&amp;lt;Message&amp;gt; readOne(UUID id) throws IOException{

@Override
public List&amp;lt;Message&amp;gt; readAll() throws IOException{
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;⬇️&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Repository 계층에서는 read, create &amp;lt;&amp;nbsp;&lt;b&gt;find, save&lt;/b&gt;&amp;nbsp;키워드를 선호한다&lt;/p&gt;
&lt;pre class=&quot;java&quot;&gt;&lt;code&gt;@Override
public Message saveOne(Message message) throws IOException{

@Override
public Optional&amp;lt;Message&amp;gt; findOne(UUID id) throws IOException{

@Override
public List&amp;lt;Message&amp;gt; findAll() throws IOException{
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;  서비스 계층에서 메서드명&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Override
public Channel editOne(UUID id, ChannelType newType, String newName, Long updatedAt)
	throws IOException{&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;⬇️&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;물론 edit도 좋은 동사로 사용될 수 있지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;보통의 서비스 계층에서는 createChannel, makeChannel 같은 메서드명을 사용하는 것이 좋다❕&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다만 현재 생성 로직에서 create 키워드를 사용하고 있고 update로 필드를 수정하는 함수가 정의되어 있기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;우선 editChannel로 변경하였다&lt;/p&gt;
&lt;pre id=&quot;code_1780622983401&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Override
public Channel editChannel(UUID id, ChannelType newType, String newName, Long updatedAt) 
	throws IOException {&lt;/code&gt;&lt;/pre&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;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;➕&lt;span&gt;&amp;nbsp; 코드 외 변경사항&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;불필요한 주석은 제거하고 PR 보내자 ‼️&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;불필요한 공백은 사용하지 않는다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;  잘 챙긴 부분&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot;&gt;&lt;code&gt;public interface ChannelRepository{

    Optional&amp;lt;Channel&amp;gt; readOne(UUID id) throws IOException;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  정리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- PR 보낼 때는 필요한 부분만 정리해 보내야 한다(불필요한 주석, 로깅 삭제)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 항상 변화는 존재한다 처음 만들었던 기능에서 변화나 수정은 항상 필요하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다만 변경과 수정이 일어났을 때 최소한의 비용으로 코드를 구성하는 것이 좋다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 변화가 있을 거라는 가정을 기반으로 코드 작성해야 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 객체지향 SOLID 잘 이해해야한다 그만큼 많은 공부가 필요하다&amp;nbsp;&lt;/p&gt;</description>
      <category>Java 아키텍처</category>
      <category>CRUD</category>
      <category>FileIO</category>
      <category>illegalargumentexception</category>
      <category>java</category>
      <category>repository패턴</category>
      <category>객체지향</category>
      <category>디자인패턴</category>
      <category>레이어드아키텍처</category>
      <category>예외처리</category>
      <category>코드리뷰</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/22</guid>
      <comments>https://hisjeans.tistory.com/entry/Java-%EB%A0%88%EC%9D%B4%EC%96%B4%EB%93%9C-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%84%A4%EA%B3%84-Repository-Service-%ED%8C%A8%ED%84%B4-%EC%8B%A4%EC%8A%B5#entry22comment</comments>
      <pubDate>Fri, 5 Jun 2026 10:42:57 +0900</pubDate>
    </item>
    <item>
      <title>Basic Git Workflow : Add, Commit</title>
      <link>https://hisjeans.tistory.com/entry/Basic-Git-Workflow-Add-Commit</link>
      <description>&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Git Status 명령어&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;git status 명령어는 Git 레포지토리의 상태를 확인하는데 사용되는 명령어&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;git status 명령어를 통해 어떤 파일이 수정되었는지,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;어떤 파일이 아직 스테이징되지 않았는지,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;현재 어떤 브랜치에 위치해 있는지 등의 정보 확인 가능&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;git에 의해 추적되지 않은 명령어&amp;hellip; 알려줌&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;사용법&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;git status 명령어를 실행하면 현재 레포지토리의 상태 출력&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;위와 같은 명령어를 실행하면 Git은 아래와 같은 종류의 정보를 출력&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;현재 체크아웃된 브랜치 이름&lt;/li&gt;
&lt;li&gt;스테이징 영역에 추가된 파일 (Changes to be committed)&lt;/li&gt;
&lt;li&gt;스테이징 영역에 추가되지 않은 수정된 파일들 (Changes not staged for commit)&lt;/li&gt;
&lt;li&gt;Git에 의해 추적되지 않는 새로운 파일들 (Untracked files)&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;git status 명령어는 &amp;ldquo;safe&amp;rdquo; 명령어로 간주&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;즉, 이 명령어는 레포지토리에 어떠한 변경도 가하지 않고 오직 정보만을 제공&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;따라서 언제든지 사용 가능한 안전한 명령어(언제든 입력해도 위험 없음)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;  &amp;nbsp;정리&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;git status 명령어는 Git 사용자에게 현재 레포지토리의 상태에 대한 중요한 정보를 제공&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이 명령어를 사용하면 현재 어떤 파일이 수정되었는지,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;어떤 파일이 스테이징 영역에 있는지,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;현재 어떤 브랜치에 있는지 등의 정보를 쉽게 파악 가능&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이는 코드의 버전 관리를 더욱 효율적으로 진행할 수 있게 도움&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Git에서 버전을 생성하는 흐름: add, commit&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2060&quot; data-origin-height=&quot;1164&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I2b5n/dJMcaak2O0N/SKLp7ZoelGY3XVyyqUHPy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I2b5n/dJMcaak2O0N/SKLp7ZoelGY3XVyyqUHPy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I2b5n/dJMcaak2O0N/SKLp7ZoelGY3XVyyqUHPy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI2b5n%2FdJMcaak2O0N%2FSKLp7ZoelGY3XVyyqUHPy0%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;2060&quot; height=&quot;1164&quot; data-origin-width=&quot;2060&quot; data-origin-height=&quot;1164&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Git에서 소스코드의 변경사항을 추적하고 새로운 버전을 생성하는 기본적인 흐름은 git add와 git commit 명령어 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. git add:&lt;/b&gt; 변경된 파일들을 스테이징 영역(또는 인덱스)에 추가하는데 사용&lt;/p&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;git add filename
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;또는, 현재 디렉터리의 모든 변경사항을 스테이징 영역에 추가하려면 아래와 같이 실행 가능&lt;/p&gt;
&lt;pre id=&quot;code_1779263156822&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git add .&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이렇게 스테이징 영역에 추가된 파일들은 다음 커밋에 포함될 준비가 된 것으로 간주&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. git commit:&lt;/b&gt; 스테이징 영역에 추가된 변경 사항들을 실제로 레포지토리에 저장(커밋)하는 데 사용&lt;/p&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;git commit -m &quot;Your commit messge&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;커밋 생성할 때는 해당 변경사항에 대한 설명을 담은 커밋 메시지를 함께 작성해야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Working Tree, Staging Area, Repository의 구조&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;기록하기 위해&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;깃은 저장소 총 3개의 영역으로 나눔&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. Working Tree (작업 트리): &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;실제로 파일을 수정하는 작업 공간&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;즉, 파일을 생성, 수정, 삭제하는 모든 작업이 이루어지는 공간&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. Staging Area (스테이징 영역 또는 인덱스): &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;git add 명령어를 사용해 변경된 파일들이 먼저 추가되는 임시 저장 공간&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이곳에 추가된 변경사항들은 다음 git commit 명령어 실행 시 레포지토리에 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. Repository (레포지토리): &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;git commit 명령어가 실행되면, 스테이징 영역에 있는 변경사항들이 레포지토리에 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;히스토리로 남김&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;레포지토리는 프로젝트의 모든 버전과 이력 정보를 저장하는 공간으로, .git 디렉토리 안에 위치&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이 세 가지 영역은 Git의 핵심적인 부분으로서, Git의 버전 관리 시스템에서 중요한 역할을 수행&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이들을 통해, 개발자는 소스코드의 변경사항을 효과적으로 관리하고 특정 시점의 버전으로 쉽게 되돌아갈 수 있음&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;실습&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 이전 챕터에서 만든 git repository에서 시작&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;cd 명령어로 이동&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. git status 명령어를 쓰면 아직 어떠한 변경사항도 없다고 나옴&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9DOvV/dJMcad26xz2/qi4wt30S2sy4ktuuvOfNi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9DOvV/dJMcad26xz2/qi4wt30S2sy4ktuuvOfNi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9DOvV/dJMcad26xz2/qi4wt30S2sy4ktuuvOfNi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9DOvV%2FdJMcad26xz2%2Fqi4wt30S2sy4ktuuvOfNi0%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;950&quot; height=&quot;188&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;188&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3. 새로운 파일 2개 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cldlcB/dJMcaiXD6nX/7ou9Kkk4kKvTtbNXGhWRt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cldlcB/dJMcaiXD6nX/7ou9Kkk4kKvTtbNXGhWRt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cldlcB/dJMcaiXD6nX/7ou9Kkk4kKvTtbNXGhWRt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcldlcB%2FdJMcaiXD6nX%2F7ou9Kkk4kKvTtbNXGhWRt0%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;992&quot; height=&quot;88&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt; touch MC-Info.txt Guest-Info.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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4. 다시 git status를 입력하면 추가된 파일 2개를 추적하고 있는 것을 확인할 수 있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;334&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WOLUU/dJMcaak2PaL/nkaITM5Zjht7pcLUW4Dud1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WOLUU/dJMcaak2PaL/nkaITM5Zjht7pcLUW4Dud1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WOLUU/dJMcaak2PaL/nkaITM5Zjht7pcLUW4Dud1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWOLUU%2FdJMcaak2PaL%2FnkaITM5Zjht7pcLUW4Dud1%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;1114&quot; height=&quot;334&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;334&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;5. 첫번째 파일을 Add해 Staging Area에 올림&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;그리고 난 뒤 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;952&quot; data-origin-height=&quot;396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kEKC4/dJMcabc91tx/scJfWxaRQZOumgPPKLYC01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kEKC4/dJMcabc91tx/scJfWxaRQZOumgPPKLYC01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kEKC4/dJMcabc91tx/scJfWxaRQZOumgPPKLYC01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkEKC4%2FdJMcabc91tx%2FscJfWxaRQZOumgPPKLYC01%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;952&quot; height=&quot;396&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;396&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;git add MC-Info.txt
git status&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;6. 두번째 파일도 add하고 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;894&quot; data-origin-height=&quot;304&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UQeJT/dJMcaaFpaoM/adVlpRsz2O9DuWp7Mnrlc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UQeJT/dJMcaaFpaoM/adVlpRsz2O9DuWp7Mnrlc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UQeJT/dJMcaaFpaoM/adVlpRsz2O9DuWp7Mnrlc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUQeJT%2FdJMcaaFpaoM%2FadVlpRsz2O9DuWp7Mnrlc0%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;894&quot; height=&quot;304&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;304&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;7. 스테이징된 2개의 파일 묶음을 하나의 버전으로 생성하기 위해 git commit 명령어를 입력&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1312&quot; data-origin-height=&quot;222&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WOugL/dJMcagFCC2e/5xXxGIDmTSI2KzhvQmxne0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WOugL/dJMcagFCC2e/5xXxGIDmTSI2KzhvQmxne0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WOugL/dJMcagFCC2e/5xXxGIDmTSI2KzhvQmxne0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWOugL%2FdJMcagFCC2e%2F5xXxGIDmTSI2KzhvQmxne0%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;1312&quot; height=&quot;222&quot; data-origin-width=&quot;1312&quot; data-origin-height=&quot;222&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;git commit -m &quot;#1. 뮤직뱅크 MC정보와 출연진 정보를 기록할 파일 추가!&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;8. git log 명령어로 생성된 버전정보 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;186&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dztvpL/dJMcaf0WCMt/vhjvP7okidK4SkQQbYahhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dztvpL/dJMcaf0WCMt/vhjvP7okidK4SkQQbYahhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dztvpL/dJMcaf0WCMt/vhjvP7okidK4SkQQbYahhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdztvpL%2FdJMcaf0WCMt%2FvhjvP7okidK4SkQQbYahhK%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;936&quot; height=&quot;186&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;186&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;git log
# 기록 확인&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;(참고) commit id 이용해 원하는 시점으로 이동 가능&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;9. MC-Info.txt 파일을 열어 내용을 작성하고 저장 후 종료한 뒤 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;1054&quot; data-origin-height=&quot;478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2vhbu/dJMcaicmYXW/UPeFFkCYkNG7EEgCf41w4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2vhbu/dJMcaicmYXW/UPeFFkCYkNG7EEgCf41w4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2vhbu/dJMcaicmYXW/UPeFFkCYkNG7EEgCf41w4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2vhbu%2FdJMcaicmYXW%2FUPeFFkCYkNG7EEgCf41w4k%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;1054&quot; height=&quot;478&quot; data-origin-width=&quot;1054&quot; data-origin-height=&quot;478&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;untracked 파일은 추적되지 않은 것&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;modified 파일이 수정됨&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;10. 2번째 파일도 수정한 후 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;1076&quot; data-origin-height=&quot;304&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGG9wX/dJMcafUed2T/aOdN2vu4PXt0fkEJftSN90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGG9wX/dJMcafUed2T/aOdN2vu4PXt0fkEJftSN90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGG9wX/dJMcafUed2T/aOdN2vu4PXt0fkEJftSN90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGG9wX%2FdJMcafUed2T%2FaOdN2vu4PXt0fkEJftSN90%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;1076&quot; height=&quot;304&quot; data-origin-width=&quot;1076&quot; data-origin-height=&quot;304&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;11. git add, git commit 명령어로 2번째 버전을 생성하고 git log로 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3VMfR/dJMcaiJ7rqT/jchdTrtzGkDMgjn4TfEMc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3VMfR/dJMcaiJ7rqT/jchdTrtzGkDMgjn4TfEMc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3VMfR/dJMcaiJ7rqT/jchdTrtzGkDMgjn4TfEMc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3VMfR%2FdJMcaiJ7rqT%2FjchdTrtzGkDMgjn4TfEMc0%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;1194&quot; height=&quot;490&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt; git commit -m &quot;#2_엠씨정보와 출연진 정보 등록&amp;rdquo;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;12. 이런 식으로 버전을 2개 더 만들어보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그리고 &amp;lsquo;git log &amp;mdash;oneline&amp;rsquo; 을 입력해 로그를 1줄로 출력해보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;868&quot; data-origin-height=&quot;42&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b00CUP/dJMcaarQZip/xy37KGHFBX865zZ3Qtp7fK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b00CUP/dJMcaarQZip/xy37KGHFBX865zZ3Qtp7fK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b00CUP/dJMcaarQZip/xy37KGHFBX865zZ3Qtp7fK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb00CUP%2FdJMcaarQZip%2Fxy37KGHFBX865zZ3Qtp7fK%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;868&quot; height=&quot;42&quot; data-origin-width=&quot;868&quot; data-origin-height=&quot;42&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SP6hK/dJMcahdqMAk/bYRQ2kyQG9ynGGYB8DXNu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SP6hK/dJMcahdqMAk/bYRQ2kyQG9ynGGYB8DXNu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SP6hK/dJMcahdqMAk/bYRQ2kyQG9ynGGYB8DXNu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSP6hK%2FdJMcahdqMAk%2FbYRQ2kyQG9ynGGYB8DXNu0%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;1092&quot; height=&quot;338&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1052&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9xdfk/dJMcaaFpaOy/K733n2OMMMyztTvJNUrZu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9xdfk/dJMcaaFpaOy/K733n2OMMMyztTvJNUrZu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9xdfk/dJMcaaFpaOy/K733n2OMMMyztTvJNUrZu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9xdfk%2FdJMcaaFpaOy%2FK733n2OMMMyztTvJNUrZu1%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;1052&quot; height=&quot;590&quot; data-origin-width=&quot;1052&quot; data-origin-height=&quot;590&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;1c&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;git log &amp;mdash;oneline //로그 한 줄로 확인 가능
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;(참고)&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;head 현재 위치 시점&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Exercise&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;1. Shopping 이름의 새 폴더를 만듦&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;46&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ezyWNo/dJMcaaSUSk8/q0czUXAHz9DKKmodCpcw40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ezyWNo/dJMcaaSUSk8/q0czUXAHz9DKKmodCpcw40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ezyWNo/dJMcaaSUSk8/q0czUXAHz9DKKmodCpcw40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FezyWNo%2FdJMcaaSUSk8%2Fq0czUXAHz9DKKmodCpcw40%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;986&quot; height=&quot;46&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;46&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. Shopping 폴더 내에서 새로운 git 저장소를 초기화 (이미 Git 저장소 안에 있는지 확인)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1344&quot; data-origin-height=&quot;192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvMO24/dJMcaja8unV/9jsZdg8Wvb1lEHBY7FUA30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvMO24/dJMcaja8unV/9jsZdg8Wvb1lEHBY7FUA30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvMO24/dJMcaja8unV/9jsZdg8Wvb1lEHBY7FUA30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdvMO24%2FdJMcaja8unV%2F9jsZdg8Wvb1lEHBY7FUA30%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;1344&quot; height=&quot;192&quot; data-origin-width=&quot;1344&quot; data-origin-height=&quot;192&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3. yard.txt 라는 새 파일을 만듦&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4. groceries.txt 라는 또 다른 새 파일을 만듦&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;454&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIf0Mn/dJMcaa6sHqs/GKw8tyQNIWRL7EKKemm390/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIf0Mn/dJMcaa6sHqs/GKw8tyQNIWRL7EKKemm390/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIf0Mn/dJMcaa6sHqs/GKw8tyQNIWRL7EKKemm390/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIf0Mn%2FdJMcaa6sHqs%2FGKw8tyQNIWRL7EKKemm390%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;1132&quot; height=&quot;454&quot; data-origin-width=&quot;1132&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;5. 두 개의 빈 파일을 포함한 커밋을 만듦&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;메시지는 &amp;ldquo;create yard and groceries lists&amp;rdquo; 로 함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1HdiO/dJMcaiDolCQ/oIt8Xcxd8hOpgNhNEBYK4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1HdiO/dJMcaiDolCQ/oIt8Xcxd8hOpgNhNEBYK4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1HdiO/dJMcaiDolCQ/oIt8Xcxd8hOpgNhNEBYK4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1HdiO%2FdJMcaiDolCQ%2FoIt8Xcxd8hOpgNhNEBYK4k%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;1236&quot; height=&quot;492&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;492&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;6. yard.txt 파일에 다음 변경 사항을 추가&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;- 2 bags of potting soil
- 1 bag of worm castings
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;286&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAhQSS/dJMcabRLdx2/K1B2kVGH9ttrGOirNCCLdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAhQSS/dJMcabRLdx2/K1B2kVGH9ttrGOirNCCLdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAhQSS/dJMcabRLdx2/K1B2kVGH9ttrGOirNCCLdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAhQSS%2FdJMcabRLdx2%2FK1B2kVGH9ttrGOirNCCLdk%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;796&quot; height=&quot;286&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;286&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;7. groceries.txt 파일에 다음 내용을 추가&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;- 4 tomatoes
- 6 shallots
- 1 fennel bulb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VqMqq/dJMcadvfrfI/7HEhaKSlKo78xvUXoBDmp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VqMqq/dJMcadvfrfI/7HEhaKSlKo78xvUXoBDmp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VqMqq/dJMcadvfrfI/7HEhaKSlKo78xvUXoBDmp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVqMqq%2FdJMcadvfrfI%2F7HEhaKSlKo78xvUXoBDmp1%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;854&quot; height=&quot;352&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;352&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;8. groceries.txt 파일의 변경 사항만을 포함하는 새로운 커밋을 만듦&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;커밋 메시지는 &amp;ldquo;add ingredients for tomato soup&amp;rdquo; 로 함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;554&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GXyjE/dJMcaicmZqV/zTkDjhgKlYrbjuKVKRVsh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GXyjE/dJMcaicmZqV/zTkDjhgKlYrbjuKVKRVsh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GXyjE/dJMcaicmZqV/zTkDjhgKlYrbjuKVKRVsh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGXyjE%2FdJMcaicmZqV%2FzTkDjhgKlYrbjuKVKRVsh0%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;1200&quot; height=&quot;554&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;554&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;9. yard.txt 파일의 변경 사항만을 포함하는 두 번째 커밋을 만듦&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;커밋 메시지는 &amp;ldquo;add items needed for garden box&amp;rdquo; 로 함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxOj8k/dJMcadWmuVt/hnYidcQ8v3jur7FkkJ1AA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxOj8k/dJMcadWmuVt/hnYidcQ8v3jur7FkkJ1AA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxOj8k/dJMcadWmuVt/hnYidcQ8v3jur7FkkJ1AA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxOj8k%2FdJMcadWmuVt%2FhnYidcQ8v3jur7FkkJ1AA0%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;1200&quot; height=&quot;432&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;432&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;10. 다음 줄을 groceries.txt 파일의 끝에 추가함&lt;/p&gt;
&lt;pre class=&quot;asciidoc&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;- couple of seed potatoes
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1PdjO/dJMcaiXD6Rw/u8jkqwzrQCM38Ikki9pisK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1PdjO/dJMcaiXD6Rw/u8jkqwzrQCM38Ikki9pisK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1PdjO/dJMcaiXD6Rw/u8jkqwzrQCM38Ikki9pisK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1PdjO%2FdJMcaiXD6Rw%2Fu8jkqwzrQCM38Ikki9pisK%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;802&quot; height=&quot;262&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;262&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;11. yard.txt 파일에서 첫 번째 줄을 &amp;ldquo;2 bags of potting soil&amp;rdquo; 대신 &amp;ldquo;3 bags of potting soil&amp;rdquo; 로 변경&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;- 3 bags of potting soil
- 1 bag of worm castings
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;236&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsyVCW/dJMcaaFpaZ8/mPKeDi4nWW5S5cjrwbU0q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsyVCW/dJMcaaFpaZ8/mPKeDi4nWW5S5cjrwbU0q0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsyVCW/dJMcaaFpaZ8/mPKeDi4nWW5S5cjrwbU0q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsyVCW%2FdJMcaaFpaZ8%2FmPKeDi4nWW5S5cjrwbU0q0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;768&quot; height=&quot;236&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;236&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;12. yard.txt 파일과 groceries.txt 파일의 변경 사항을 모두 포함하는 커밋을 만듦&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;메시지는 &amp;ldquo;add items needed to grow potatoes&amp;rdquo; 로 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Git 명령을 사용해 커밋 목록을 표시&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;총 4개의 커밋이 보여야 함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1244&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P6VtK/dJMcaja8uz4/cpEp641jwIky6RkK6BJ9Uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P6VtK/dJMcaja8uz4/cpEp641jwIky6RkK6BJ9Uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P6VtK/dJMcaja8uz4/cpEp641jwIky6RkK6BJ9Uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP6VtK%2FdJMcaja8uz4%2FcpEp641jwIky6RkK6BJ9Uk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1244&quot; height=&quot;586&quot; data-origin-width=&quot;1244&quot; data-origin-height=&quot;586&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Git</category>
      <category>Git</category>
      <category>git add</category>
      <category>git commit</category>
      <category>git status</category>
      <category>Git기초</category>
      <category>git입문</category>
      <category>repository</category>
      <category>staging area</category>
      <category>working tree</category>
      <category>개발블로그</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/20</guid>
      <comments>https://hisjeans.tistory.com/entry/Basic-Git-Workflow-Add-Commit#entry20comment</comments>
      <pubDate>Wed, 20 May 2026 17:34:08 +0900</pubDate>
    </item>
    <item>
      <title>Git Repository</title>
      <link>https://hisjeans.tistory.com/entry/Git-Repository</link>
      <description>&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Git Repository&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;Git Repository(레포지토리)는 Git에 의해 관리되는 프로젝트 디렉터리&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;레포지토리 안에는 프로젝트의 모든 파일과 각 파일의 수정 이력을 담은 정보 포함&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;레포지토리를 통해 Git은 프로젝트의 상태를 특정 시점으로 되돌릴 수 있거나, 변경 이력을 조회하거나, 다른 브랜치로 전환하는 등의 작업 수행&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;레포지토리의 주요 요소&lt;/b&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Working Directory:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;현재 작업 중인 프로젝트의 파일들이 위치하는 디렉터리&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Staging Area(Indedx):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;커밋하기 위해 선택한 파일들의 정보를 저장하는 영역, 이 영역을 통해 원하는 파일들만을 커밋에 포함 시키는 것이 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;.git Directory(Repository):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Git의 메타데이터와 객체 데이터베이스를 저장하는 디렉터리, 이 디렉터리를 복사하면 프로젝트의 모든 정보와 히스토리를 복사하는 것과 같음&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;레포지토리의 유형&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;Git 레포지토리에는 크게 두 가지 유형 존재&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;로컬 레포지토리:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;개발자의 컴퓨터에 저장된 레포지토리로 여기서 개발자가 코드를 수정하고, 커밋을 생성하며, 브랜치를 관리&lt;/li&gt;
&lt;li&gt;&lt;b&gt;원격 레포지토리:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;인터넷 상에 존재하는 레포지토리로 여기서 개발자들은 코드를 공유하고 협업을 진행, GitHub, GitLab, Bitbucket 등의 서비스가 이에 해당&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;로컬 레포지토리 생성&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;git init 명령어, Git 레포지토리를 초기화하거나 새로운 Git 레포지토리를 생성하는데 사용되는 명령어&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;기본적으로 폴더 1당 저장소 1&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&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;2064&quot; data-origin-height=&quot;1096&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SFRGo/dJMcacwqXyE/SeX1fuGkO7NAHER7A5sIDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SFRGo/dJMcacwqXyE/SeX1fuGkO7NAHER7A5sIDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SFRGo/dJMcacwqXyE/SeX1fuGkO7NAHER7A5sIDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSFRGo%2FdJMcacwqXyE%2FSeX1fuGkO7NAHER7A5sIDk%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;2064&quot; height=&quot;1096&quot; data-origin-width=&quot;2064&quot; data-origin-height=&quot;1096&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2064&quot; data-origin-height=&quot;1096&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byQDjU/dJMcahxJKSK/zTqTfTc6MPcXov0KVX1xv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byQDjU/dJMcahxJKSK/zTqTfTc6MPcXov0KVX1xv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byQDjU/dJMcahxJKSK/zTqTfTc6MPcXov0KVX1xv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyQDjU%2FdJMcahxJKSK%2FzTqTfTc6MPcXov0KVX1xv0%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;2064&quot; height=&quot;1096&quot; data-origin-width=&quot;2064&quot; data-origin-height=&quot;1096&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;(참고) &lt;b&gt;option+command+C:&lt;/b&gt; 주소 복사&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;cd	# option+command+C 폴더 이동
ls	# 폴더 안 파일 리스트 확인 현재는 아무것도 뜨지 않을 것
git status	# 에러 발생, 현재 git 저장소 아니기 때문&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1364&quot; data-origin-height=&quot;309&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkjIbu/dJMcahkesSY/8qyolKwtA8tOaczKc3crLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkjIbu/dJMcahkesSY/8qyolKwtA8tOaczKc3crLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkjIbu/dJMcahkesSY/8qyolKwtA8tOaczKc3crLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkjIbu%2FdJMcahkesSY%2F8qyolKwtA8tOaczKc3crLk%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;1364&quot; height=&quot;309&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1364&quot; data-origin-height=&quot;309&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;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;사용법&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;기본적으로 git init 명령어는 현재 작업 중인 디렉터리에 새로운 Git 레포지토리를 생성하거나 초기화&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;즉, git init 명령어를 실행하면 현재 디렉터리에 &amp;lsquo;.git&amp;rsquo; 라는 새로운 하위 디렉터리가 생성되는데,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이 디렉터리는 레포지토리의 모든 메타데이터를 담고 있음&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;git init	# 깃 저장소 생성, '.'숨김 파일
		# -&amp;gt;command+shift+. 숨겨진 폴더 확인 가능, 추적 시 처음 한 번만 입력&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;git init는 또한 명령어 뒤에 디렉터리 이름을 추가하면,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;해당 이름의 새 디렉터리를 생성하고 그 안에 새로운 Git 레포지토리를 생성 가능&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;예:&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;elixir&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;$ git init my_project
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;lsquo;my_project&amp;rsquo; 라는 이름의 새 디렉터리를 생성하고, 이 디렉터리를 Git 레포지토리로 초기화&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;git init 명령어를 실행하면, 새로운 Git 레포지토리가 생성되지만 버전 관리가 이루어지는 파일은 없음&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;버전 관리를 시작하려면, 먼저 파일을 생성하거나 수정한 후&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;git add 명령어를 사용해 변경사항을 스테이징 영역에 추가하고,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;git commit 명령어를 사용해 변경사항을 레포지토리에 저장해야 함&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;git init는 로컬에서 작업하는 레포지토리를 생성하는 데 사용되며,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;원격 레포지토리(예: GitHub)에 올리려면 추가적인 작업 필요&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;실습&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;원하는 디렉토리에서 폴더를 하나 생성하고 해당 폴더로 이동&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;dos&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;mkdir MusicBank &amp;amp;&amp;amp; cd MusicBank
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDITiS/dJMcaipRJlU/wo9S85xKzcekptWirQXPn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDITiS/dJMcaipRJlU/wo9S85xKzcekptWirQXPn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDITiS/dJMcaipRJlU/wo9S85xKzcekptWirQXPn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDITiS%2FdJMcaipRJlU%2Fwo9S85xKzcekptWirQXPn0%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;958&quot; height=&quot;150&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;150&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;span style=&quot;color: #000000; text-align: start;&quot;&gt;2. &amp;lsquo;git init&amp;rsquo; 명령어를 입력해 해당 폴더를 git repository로 만들어 버전관리 시작&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1182&quot; data-origin-height=&quot;104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zl80e/dJMcahErZ68/sTrKN2nu2n13poimcwHQk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zl80e/dJMcahErZ68/sTrKN2nu2n13poimcwHQk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zl80e/dJMcahErZ68/sTrKN2nu2n13poimcwHQk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzl80e%2FdJMcahErZ68%2FsTrKN2nu2n13poimcwHQk0%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;1182&quot; height=&quot;104&quot; data-origin-width=&quot;1182&quot; data-origin-height=&quot;104&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;lsquo;ls -a&amp;rsquo; 명령어를 입력해 숨김폴더인 &amp;lsquo;.git&amp;rsquo; 폴더가 생성되었는지 확인&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;130&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A7gQv/dJMcahqYRwB/YruJ0WrMKa8kqS7HJYM32K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A7gQv/dJMcahqYRwB/YruJ0WrMKa8kqS7HJYM32K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A7gQv/dJMcahqYRwB/YruJ0WrMKa8kqS7HJYM32K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA7gQv%2FdJMcahqYRwB%2FYruJ0WrMKa8kqS7HJYM32K%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;648&quot; height=&quot;130&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;130&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;.git 폴더&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;.git 폴더는 Git 레포지토리의 핵심 부분&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;모든 Git의 메타데이터와 데이터를 저장하는 곳&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;.git 디렉토리가 존재하는 디렉토리는 Git의 관리 아래에 있는 것으로 간주&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;git init 명령을 통해 Git 레포지토리를 초기화하면, .git 디렉토리가 생성되고&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;그 안에는 아래와 같은 여러 하위 디렉토리와 파일들이 생성&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. HEAD&lt;/b&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;현재 체크아웃된 커밋을 가리킴&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. config&lt;/b&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;레포지토리 설정을 저장하는 파일,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 파일에는 사용자 정보, 원격 레포지토리의 URL, 그 외의 레포지토리 관련 설정이 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. description&lt;/b&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;레포지토리에 대한 설명을 저장하는 파일&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Git 웹 인터페이스에서 이 파일의 내용을 레포지토리 설명으로 사용하지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;일반적으로 로컬 레포지토리에서는 이 파일이 사용되지 않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4. hooks&lt;/b&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Git 훅(hook) 스크립트를 저장하는 디렉토리&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 스크립트들은 특정 Git 이벤트가 발생할 때 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;5. info&lt;/b&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;전역 .gitignore 파일 등의 일반적인 정보를 저장하는 디렉토리&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;6. objects&lt;/b&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;모든 데이터(커밋, 트리, 블롭 등)를 저장하는 디렉토리&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7. refs&lt;/b&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;브랜치와 태그에 대한 참조(reference)를 저장하는 디렉토리&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;.git 디렉토리는 프로젝트의 모든 이력 정보를 담고 있기 때문에,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이 디렉토리를 복사하면 프로젝트의 모든 버전 정보와 히스토리를 복사하는 것과 같음&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;하지만 이 디렉토리는 직접 수정하거나 변경하는 것이 아니라 Git 명령어를 통해 관리해야 함&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;그렇지 않으면 레포지토리가 손상될 수 있음&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;⚠️ 주의사항!!&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;.git 디렉토리 직접 수정하거나 변경 금지&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. git init 명령어는 버전관리를 시작할 때 최초 1번만 입력할 것!!&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이미 버전관리가 시작된 폴더를 다시 init하는 실수를 저지르지 말 것!&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;size18&quot;&gt;&lt;b&gt;2. git init을 하면 .git 폴더가 생성되는데 이 폴더는 지우지 말자&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;.git 폴더가 삭제되면 그동안 버전 관리했던 이력이 모두 소실됨&lt;/li&gt;
&lt;li&gt;그래서 안전을 위해 숨김 처리가 되어있는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. git init을 했던 폴더의 하위 폴더에 또 다시 git init을 하지 말 것!!&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;git init을 하면 .git이 생기고 이것은 하위 폴더까지 전부 버전관리를 하겠다는 의미&lt;/li&gt;
&lt;li&gt;하위폴더에서 또다시 git init 명령어로 .git 폴더를 생성하면 중첩으로 인해 문제가 발생&lt;/li&gt;
&lt;li&gt;실수로 하위 폴더에서 git init을 실행했다면 .git 폴더를 rm -rf 명령어로 삭제하자&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4. github와 같은 원격 저장소에서 clone한 저장소에는 gitinit 실행하지 말 것&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;원격저장소에서 내려받은 폴더는 기본적으로 버전관리가 되고 있는 상태&lt;/li&gt;
&lt;li&gt;또 다시 init 할 필요가 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Git</category>
      <category>Git</category>
      <category>git init</category>
      <category>Git기초</category>
      <category>git입문</category>
      <category>repository</category>
      <category>ttl</category>
      <category>개발공부</category>
      <category>개발블로그</category>
      <category>레포지토리</category>
      <category>버전관리</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/19</guid>
      <comments>https://hisjeans.tistory.com/entry/Git-Repository#entry19comment</comments>
      <pubDate>Wed, 20 May 2026 16:17:56 +0900</pubDate>
    </item>
    <item>
      <title>기본 터미널 명령어</title>
      <link>https://hisjeans.tistory.com/entry/%EA%B8%B0%EB%B3%B8-%ED%84%B0%EB%AF%B8%EB%84%90-%EB%AA%85%EB%A0%B9%EC%96%B4</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;간단한 리눅스 명령어&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;ls :&lt;/b&gt; 하위 폴더, 파일 보기&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ls -l (ll) :&lt;/b&gt; 하위 폴더, 파일 자세히 보기&lt;/li&gt;
&lt;li&gt;&lt;b&gt;pwd :&lt;/b&gt; 현재 위치한 폴더 출력&lt;/li&gt;
&lt;li&gt;&lt;b&gt;cd :&lt;/b&gt; 원하는 경로로 이동&lt;/li&gt;
&lt;li&gt;&lt;b&gt;mkdir 폴더명 :&lt;/b&gt; 새 디렉토리 생성&lt;/li&gt;
&lt;li&gt;&lt;b&gt;rm -rf 폴더, 파일 :&lt;/b&gt; 폴더, 파일 삭제&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;pwd: 현재 위치한 디렉토리 경로 출력&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;pwd는 print working directory의 약어로 현재 내가 보고있는 폴더의 경로를 알려줌&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;( 참고 ) '~' 은 루트 디렉토리로 보통 사용자 계정 경로가 지정됨&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;ls: 현재 위치한 디렉토리 안에 있는 폴더와 파일 목록 보기&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ls는 list의 약어이며 현재 위치한 폴더 내부에 있는 하위폴더, 파일들의 정보 출력&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1130&quot; data-origin-height=&quot;458&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l1ab6/dJMcadoskCy/cpCq40CQ5DMA94AmKi2Zmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l1ab6/dJMcadoskCy/cpCq40CQ5DMA94AmKi2Zmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l1ab6/dJMcadoskCy/cpCq40CQ5DMA94AmKi2Zmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl1ab6%2FdJMcadoskCy%2FcpCq40CQ5DMA94AmKi2Zmk%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;1130&quot; height=&quot;458&quot; data-origin-width=&quot;1130&quot; data-origin-height=&quot;458&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;ls -l: &amp;nbsp;ls 명령어 뒤에 -l 옵션을 주면 권한 같은 자세한 정보 표시&lt;/b&gt;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;ls -a: &amp;nbsp;-a 옵션을 주면 숨김폴더, 파일의 정보가 추가로 출력&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;652&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqgVtr/dJMcag6CV7p/cOjPJHDPi7S1tC1hrYrUB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqgVtr/dJMcag6CV7p/cOjPJHDPi7S1tC1hrYrUB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqgVtr/dJMcag6CV7p/cOjPJHDPi7S1tC1hrYrUB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqgVtr%2FdJMcag6CV7p%2FcOjPJHDPi7S1tC1hrYrUB1%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;350&quot; height=&quot;652&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;652&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;cd: 폴더로 이동&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;cd 명령어는 change directory의 약어로 폴더를 이동할 때 사용&lt;/li&gt;
&lt;li&gt;대개 ls 명령어로 하위 폴더를 확인한 뒤 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;ls
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;510&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/160St/dJMcaiXCPdK/aG8i1uBruTImJR0Co8A6d1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/160St/dJMcaiXCPdK/aG8i1uBruTImJR0Co8A6d1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/160St/dJMcaiXCPdK/aG8i1uBruTImJR0Co8A6d1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F160St%2FdJMcaiXCPdK%2FaG8i1uBruTImJR0Co8A6d1%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;732&quot; height=&quot;510&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;510&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;pre class=&quot;jboss-cli&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;cd Desktop
ls
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;398&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyWz0T/dJMcahLfjcD/rMRlDh0q7ghgzz5D1qPeL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyWz0T/dJMcahLfjcD/rMRlDh0q7ghgzz5D1qPeL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyWz0T/dJMcahLfjcD/rMRlDh0q7ghgzz5D1qPeL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyWz0T%2FdJMcahLfjcD%2FrMRlDh0q7ghgzz5D1qPeL1%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;732&quot; height=&quot;398&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;398&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;cd .. : cd .. 으로 상위 폴더 이동&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;pwd //현재 위치한 디렉토리 경로 출력
cd .. //상위 폴더로 이동
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;cd + 탭키 : &lt;/b&gt;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;nbsp;이동 가능한 목록 출력&lt;/b&gt;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;nbsp;ls 명령어 없이 하위 폴더 목록 확인 가능해 유용&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;gml&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;cd 
Display all 127 possibilities? (y or n) y
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bupFcn/dJMcahYMixJ/lOKyJLdsJvAgkHUbKlBMEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bupFcn/dJMcahYMixJ/lOKyJLdsJvAgkHUbKlBMEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bupFcn/dJMcahYMixJ/lOKyJLdsJvAgkHUbKlBMEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbupFcn%2FdJMcahYMixJ%2FlOKyJLdsJvAgkHUbKlBMEK%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;808&quot; height=&quot;246&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;246&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;cd + 부분 입력 후 탭 : &lt;/b&gt;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;nbsp;cd 명령어 입력 후 특정 알파벳을 입력하고 탭키를 누르면 해당 알파벳으로 시작하는 목록만 출력&lt;/b&gt;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;nbsp;만일 특정 알파벳으로 시작하는 폴더가 1개라면 자동완성으로 단어 완성&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;cd D
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;28&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/efP5UA/dJMcajoGnI6/JLktUpoBE87DaKmbCKN5AK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/efP5UA/dJMcajoGnI6/JLktUpoBE87DaKmbCKN5AK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/efP5UA/dJMcajoGnI6/JLktUpoBE87DaKmbCKN5AK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FefP5UA%2FdJMcajoGnI6%2FJLktUpoBE87DaKmbCKN5AK%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;808&quot; height=&quot;28&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;28&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;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;clear: 현재 터미널 출력 내용 깨끗하게 지우기&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;화면 초기화&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;528&quot; data-origin-height=&quot;56&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWGlx7/dJMcaaejzZB/uuxmVu9KrTcBFhT26yeftk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWGlx7/dJMcaaejzZB/uuxmVu9KrTcBFhT26yeftk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWGlx7/dJMcaaejzZB/uuxmVu9KrTcBFhT26yeftk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWGlx7%2FdJMcaaejzZB%2FuuxmVu9KrTcBFhT26yeftk%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;528&quot; height=&quot;56&quot; data-origin-width=&quot;528&quot; data-origin-height=&quot;56&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;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;start . : 현재 위치한 폴더 열기 - for Windows&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;open . : 현재 위치한 폴더 열기 - for MacOS&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 위치한 폴더를 운영체제 GUI로 열림&lt;/li&gt;
&lt;li&gt;윈도우는 폴더가 열리며 Mac은 Finder가 열림&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;528&quot; data-origin-height=&quot;826&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvi587/dJMcabRK6Po/CYFBZlAV7zuPEWMCW6n8iK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvi587/dJMcabRK6Po/CYFBZlAV7zuPEWMCW6n8iK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvi587/dJMcabRK6Po/CYFBZlAV7zuPEWMCW6n8iK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbvi587%2FdJMcabRK6Po%2FCYFBZlAV7zuPEWMCW6n8iK%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;528&quot; height=&quot;826&quot; data-origin-width=&quot;528&quot; data-origin-height=&quot;826&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;mkdir : 폴더 생성&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;mkdir은 make directory의 약어, 폴더 생성하는 명령어&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;534&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJpJPY/dJMcagMnSUH/Q2YqORBvU7Xeu8IW6y5cHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJpJPY/dJMcagMnSUH/Q2YqORBvU7Xeu8IW6y5cHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJpJPY/dJMcagMnSUH/Q2YqORBvU7Xeu8IW6y5cHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJpJPY%2FdJMcagMnSUH%2FQ2YqORBvU7Xeu8IW6y5cHK%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;534&quot; height=&quot;384&quot; data-origin-width=&quot;534&quot; data-origin-height=&quot;384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;mkdir -pv : &amp;nbsp;-pv 옵션은 중첩구조로 폴더를 생성&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;maxima&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;mkdir -pv GirlGroup/NewJeans
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kziah/dJMcadhNz3H/uLUQQhzalViR2W9oEhSOa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kziah/dJMcadhNz3H/uLUQQhzalViR2W9oEhSOa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kziah/dJMcadhNz3H/uLUQQhzalViR2W9oEhSOa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fkziah%2FdJMcadhNz3H%2FuLUQQhzalViR2W9oEhSOa1%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;1108&quot; height=&quot;58&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;58&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;touch : &amp;nbsp;파일 생성&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;properties&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;touch OMG.txt
ls 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;420&quot; data-origin-height=&quot;456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xfB42/dJMcadhNz4S/jwFj9lugk9E2l19FdDE9sK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xfB42/dJMcadhNz4S/jwFj9lugk9E2l19FdDE9sK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xfB42/dJMcadhNz4S/jwFj9lugk9E2l19FdDE9sK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxfB42%2FdJMcadhNz4S%2FjwFj9lugk9E2l19FdDE9sK%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;420&quot; height=&quot;456&quot; data-origin-width=&quot;420&quot; data-origin-height=&quot;456&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;rm 파일명 : &amp;nbsp;파일 삭제&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;ls

&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;28&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kzeKp/dJMcafmow7F/Iakg1JBciYnL7DG0pGyKZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kzeKp/dJMcafmow7F/Iakg1JBciYnL7DG0pGyKZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kzeKp/dJMcafmow7F/Iakg1JBciYnL7DG0pGyKZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkzeKp%2FdJMcafmow7F%2FIakg1JBciYnL7DG0pGyKZ1%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;680&quot; height=&quot;28&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;28&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;rm Ditto.txt
ls
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;30&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LoIRg/dJMcaf7H6TA/ajok30KUVWta1n3iEgq8D1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LoIRg/dJMcaf7H6TA/ajok30KUVWta1n3iEgq8D1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LoIRg/dJMcaf7H6TA/ajok30KUVWta1n3iEgq8D1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLoIRg%2FdJMcaf7H6TA%2Fajok30KUVWta1n3iEgq8D1%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;680&quot; height=&quot;30&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;30&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBQzow/dJMcaf7H6Ua/6Y7mADoYo2HT9k9MrCK12k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBQzow/dJMcaf7H6Ua/6Y7mADoYo2HT9k9MrCK12k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBQzow/dJMcaf7H6Ua/6Y7mADoYo2HT9k9MrCK12k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBQzow%2FdJMcaf7H6Ua%2F6Y7mADoYo2HT9k9MrCK12k%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;784&quot; height=&quot;384&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;384&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;rm -rf 폴더명: &amp;nbsp;폴더 삭제(⚠️ 주의 - 폴더 안에 모든 내용까지 함께 삭제)&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;stata&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;cd ~Desktop/Artist
ls
rm -rf GrilGroup

&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;432&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L2FCL/dJMcafzU8Lx/msnme4SwxXuxYpYms3eHk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L2FCL/dJMcafzU8Lx/msnme4SwxXuxYpYms3eHk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L2FCL/dJMcafzU8Lx/msnme4SwxXuxYpYms3eHk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL2FCL%2FdJMcafzU8Lx%2Fmsnme4SwxXuxYpYms3eHk0%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;432&quot; height=&quot;462&quot; data-origin-width=&quot;432&quot; data-origin-height=&quot;462&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;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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(참고)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;방향키: 이전 명령어로 이동 가능&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;git config --list //user name, user email 확인 가능
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;q 입력 &amp;rarr; 나가기&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Git</category>
      <category>CD</category>
      <category>CLI</category>
      <category>Git</category>
      <category>LS</category>
      <category>mkdir</category>
      <category>pwd</category>
      <category>RM</category>
      <category>개발공부</category>
      <category>명령어</category>
      <category>터미널</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/18</guid>
      <comments>https://hisjeans.tistory.com/entry/%EA%B8%B0%EB%B3%B8-%ED%84%B0%EB%AF%B8%EB%84%90-%EB%AA%85%EB%A0%B9%EC%96%B4#entry18comment</comments>
      <pubDate>Wed, 20 May 2026 15:13:26 +0900</pubDate>
    </item>
    <item>
      <title>Git Intro</title>
      <link>https://hisjeans.tistory.com/entry/Git-Intro</link>
      <description>&lt;h1&gt;&lt;b&gt;#What is Git?&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Git과 버전 관리 시스템(Version Control System)&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Git이란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Git은 소프트웨어 개발에서 사용되는 분산 버전 관리 시스템(Distributed Version Control System, DVCS) 중 하나&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;리너스 토발즈(Linus Torvalds)가 개발하였으며, 소프트웨어 개발에서 소스 코드 관리에 주로 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Git의 주요 목표는 속도, 데이터 무결성, 그리고 분산 시스템의 지원을 위한 완전한 분산을 포함해 비선형 작업 흐름을 지원하는 것&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;버전 관리 시스템(Version Control System, VCS)이란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;버전 관리 시스템(VCS)은 시간에 따라 문서나 소스 코드와 같은 정보의 변화를 기록하고, 특정 시점의 버전을 다시 불러올 수 있는 시스템&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이런 시스템을 통해, 여러 개발자들이 동시에 같은 프로젝트에 작업을 할 수 있으며, 각 버전 간 차이점을 볼 수 있고, 이전 버전으로 되돌아갈 수 있으며, 원치 않는 변경을 쉽게 찾아낼 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;VCS는 크게 두 가지 유형으로 나뉨&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;중앙집중식 버전 관리 시스템(Centralized Version Control System, CVCS): CVS, Subversion, Perforce 등, 이 시스템은 단일 서버가 모든 파일의 버전을 유지하고, 여러 클라이언트가 서버로부터 파일을 받아 사용&lt;/li&gt;
&lt;li&gt;분산 버전 관리 시스템(Distributed Version Control Systems, DVCS): Git, Mercurial, Bazaar, Darcs 등,&amp;nbsp;이 시스템은 클라이언트가 서버의 파일을 &amp;lsquo;복제&amp;rsquo;, 이렇게 함으로써 네트워크에 접근할 수 없는 상황에서도 개발을 계속할 수 있고, 복잡한 브랜치 작업이 가능&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;VCS의 사용은 개발 팀의 효율성, 생산성을 크게 향상시키며, 코드의 안정성을 유지하고, 실수를 쉽게 복구할 수 있게 도움&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Git의 중요성: 왜 개발자들은 Git을 사용해야 할까&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Git은 개발 프로세스에서 중요한 도구&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;버전 관리: &lt;/b&gt;개발 과정에서 지속적인 코드 변화를 추적하고 관리하기 위해 Git을 사용, 각각의 변경사항을 &amp;ldquo;커밋(commit)&amp;rdquo; 단위로 저장해 언제든지 특정 시점의 코드 상태로 돌아갈 수 있게 함, Git의 핵심 기능 중 하나는 프로젝트의 버전을 관리하는 것&lt;/li&gt;
&lt;li&gt;&lt;b&gt;협업 도구: &lt;/b&gt;Git을 통해 여러 개발자들이 동시에 같은 프로젝트 작업 가능, &lt;b&gt;&lt;/b&gt;Git의 &amp;ldquo;브랜치(branch)&amp;rdquo; 기능은 개발자가 독립적으로 작업하는 동시에 프로젝트의 다른 부분에 영향을 주지 않도록 함, 개발이 완료된 후 이러한 변경사항들을 &amp;ldquo;병합(merge)&amp;rdquo;해 메인 코드에 반영하는 것이 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;코드의 안정성 유지: &lt;/b&gt;코드에서 심각한 오류가 발생할 경우, Git이 이전의 안정적인 상태로 쉽게 돌아갈 수 있도록 함, &lt;b&gt;&lt;/b&gt;이는 프로덕션 환경에서 큰 문제가 발생했을 때 빠르게 대응하는 것이 가능하게 하며, 프로젝트의 안정성을 유지하는데 중요한 역할&lt;/li&gt;
&lt;li&gt;&lt;b&gt;코드 리뷰 및 추적: &lt;/b&gt;Git을 사용해 어떤 개발자가 언제 어떤 변경사항을 만들었는지 추적하는 것이 가능, &lt;b&gt;&lt;/b&gt;이는 코드 리뷰 과정에서 매우 유용하고, 버그를 찾고 이해하는 데 또한 도움됨&lt;/li&gt;
&lt;li&gt;&lt;b&gt;배포 관리:&lt;/b&gt; Git으로 프로젝트의 여러 버전을 관리함으로써, 특정 버전에 대한 배포가 간편, 이는 Continuous Integration(CI) 및 Continuous Deployment(CD) 파이프라인과 함께 사용돼 효율적인 배포 관리 가능하게 함&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;즉,&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Git은 개발자가 코드의 버전을 관리하고, 효과적인 협업과 코드의 안정성을 유지하며 코드 변경 사항을 추적하고 배포를 관리하는데 필수적인 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이러한 이유로 Git은 현대의 소프트웨어 개발 팀에서 필수적으로 사용하는 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Git은 기록을 남기는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;#Git &amp;ne; Github&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZOyqm/dJMcadWdS8a/rTQJEoRT85UIeKgLkT3rC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZOyqm/dJMcadWdS8a/rTQJEoRT85UIeKgLkT3rC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZOyqm/dJMcadWdS8a/rTQJEoRT85UIeKgLkT3rC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZOyqm%2FdJMcadWdS8a%2FrTQJEoRT85UIeKgLkT3rC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;700&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;700&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Git:&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;분산 버전 관리 시스템(Distributed Version Control System, DVCS)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여러 개발자가 동시에 작업하는 것이 가능하도록 돕고, 오류가 발생했을 때 이전 버전으로 쉽게 되돌릴 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;로컬 컴퓨터 관리, Git은 로컬 시스템에서 동작, 인터넷 없이 오프라인에서 또한 동작 가능&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Github:&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;GitHub는 Git을 사용하는 프로젝트를 호스팅하는 웹 기반 서비스&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;개발자는 GitHub를 통해 소스 코드를 저장하고 공유하는 것이 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;GitHub는 협업 도구를 제공해 다른 개발자들과 함께 코드를 개발하거나 수정할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;GitHub은 Git의 기능을 활용해 버전 관리하는 것이 가능하며 추가적으로 다음 같은 기능 제공&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이슈 트래킹: 버그 리포팅, 기능 요청, 이 외 프로젝트와 관련된 문제들을 트래킹하고 관리&lt;/li&gt;
&lt;li&gt;풀 리퀘스트: 개발자 자신이 수정한 코드를 원본 저장소에 병합(merge)하는 것을 요청할 수 있음&lt;/li&gt;
&lt;li&gt;코드 리뷰 과정 용이하게 함&lt;/li&gt;
&lt;li&gt;GitHub Actions: CI/CD(Continuous Integration/Continuous Deployment)와 같은 자동화 프로세스 쉽게 구현하도록 도움&lt;/li&gt;
&lt;/ul&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;b&gt;즉,&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Git은 소스 코드의 버전 관리를 위한 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;GitHub은 Git을 사용하는 프로젝트를 온라인 상에서 공유하고 협업하는 서비스&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Git은 로컬에서 동작하지만, GitHub은 인터넷 연결 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;#Git 설치&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Git 사용하는 2가지 방법&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;CLI:&lt;/b&gt; 명령어 기반 버전 관리, 터미널 작업&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GUI:&lt;/b&gt; 그래픽 기반 버전관리 툴, 소스트리, GitHub Desktop, Git Kraken 등&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Git 설치 for MacOS&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;대개 최신 맥북에는 git 설치되어 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;터미널을 열어 git &amp;mdash;version 확인&lt;/p&gt;
&lt;pre class=&quot;ada&quot;&gt;&lt;code&gt;git --version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1130&quot; data-origin-height=&quot;30&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lIyEl/dJMcahxBA6R/HWHerQHCgg8V1MhkHmjywk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lIyEl/dJMcahxBA6R/HWHerQHCgg8V1MhkHmjywk/img.png&quot; data-alt=&quot;버전 확인 예&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lIyEl/dJMcahxBA6R/HWHerQHCgg8V1MhkHmjywk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlIyEl%2FdJMcahxBA6R%2FHWHerQHCgg8V1MhkHmjywk%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;1130&quot; height=&quot;30&quot; data-origin-width=&quot;1130&quot; data-origin-height=&quot;30&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;버전 확인 예&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위처럼 버전 정보가 나온다면 설치된 것&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;처음 git 설치 후 필요한 설정&lt;/b&gt;&lt;/h2&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;git의 버전관리 추적시스템에 의한 버전을 생성한 사람의 정보를 기록하기 위해서는&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ git config --global user.name &quot;유저닉네임&quot;	
# 닉네임은 github, gitlab에서 사용할 닉네임 추천

$ git config --global user.email &quot;유저이메일&quot;
# 이메일은 실제 github이나 gitlab 가입메일&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;if) 설치 시에 코드 에디터 설정을 vscode로 지정하지 않았거나 MacOS를 사용한다면&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;git config --global core.editor &quot;code --wait&quot; 
# vscode로 변경&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;MacOS에서 위 설정을 해도 vscode가 열리지 않는다면 직접 vscode를 실행시켜 &amp;ldquo;Command+Shift+P&amp;rdquo;를 입력하고 명령팔레트에 &amp;ldquo;shell command&amp;rdquo; 입력한 후 PATH code 명령 설치 선택&lt;/li&gt;
&lt;li&gt;Github 원격 저장소를 가입할 때 로컬 저장소에 등록한 이메일로 가입하는 것 권장&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Git</category>
      <category>Git</category>
      <category>git 기초</category>
      <category>git 입문</category>
      <category>github</category>
      <category>VCS</category>
      <category>개발공부</category>
      <category>깃</category>
      <category>깃허브</category>
      <category>버전관리시스템</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/17</guid>
      <comments>https://hisjeans.tistory.com/entry/Git-Intro#entry17comment</comments>
      <pubDate>Sat, 9 May 2026 13:58:33 +0900</pubDate>
    </item>
    <item>
      <title>browser의 동작</title>
      <link>https://hisjeans.tistory.com/entry/browser%EC%9D%98-%EB%8F%99%EC%9E%91</link>
      <description>&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️&amp;nbsp; 들어가기 전&amp;hellip;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;웹을 통해 전달되는 데이터는 어딘가에서 해석되어야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;서버에서 전송한 데이터(HTML과 같은)가 클라이언트에 도착해야 할 곳은 &amp;lsquo;Browser&amp;rsquo;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Browser에는 데이터를 해석해주는 파서와 데이터를 화면에 표현해주는 렌더링엔진이 포함되어 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이런 작업의 대부분은 브라우저 내부에서 이뤄지기 때문에 반드시 알아야 하는 것은 아님&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 브라우저의 내부를 이해하면 웹 개발을 하면서 맞닥뜨리는 난해한 문제를 해결할 수 있고, 보다 최적화된 웹개발을 할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;학습 목표&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;HTML파일이 올 때 브라우저가 어떻게 렌더링과정을 거쳐서 화면에 보이게 되는지 간단히 이해&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;핵심 개념&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;Web Browser Rendering&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;nbsp; 학습내용&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(참고) &lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;브라우저 접속하면 소스 보기 가능&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;브라우저들이 알아서 해결해주었기 때문에 브라우저 동작 방식에 대해 개발자들도 잘 알 필요가 없다고 생각해옴&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;하지만 이제 브라우저 동작에 대해 궁금함을 갖게 된 이유는 브라우저의 동작이 대개 숨겨져있고 개발한 코드를 브라우저가 다르게 해석해 보여주는 것 같다는 느낌을 받게 됨&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;그리고 소스코드가 브라우저에서 빨리 실행되게 하려면 어떻게 해야 될까에 대한 관심을 갖게 되면서 브라우저의 동작에 대해 알고 싶게 됐고 브라우저가 어떻게 동작하는지에 대한 글들이 조금씩 소개되기 시작함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;브라우저는 월드와이드웹(WWW)에서 정보를 검색, 표현하고 탐색하기 위한 소프트웨어&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;브라우저의 주요 기능&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사용자가 선택한 자원을 서버에 요청하고 브라우저에 표시하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자원은 보통 HTML 문서지만 PDF나 이미지 또는 다른 형태일 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자원의 주소는 URI(Uniform Resource Identifier)에 의해 정해짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;브라우저는 HTML과 CSS 명세에 따라 HTML 파일을 해석해 표시하는데 이 명세는 웹 표준화 기구인 W3C(World Wide Web Consortium)에서 정함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;과거에는 브라우저들이 일부만 이 명세에 따라 구현하고 독자적인 방법으로 확장함으로써 웹 제작자가 심각한 호환성 문제를 겪었지만 최근에는 대부분의 브라우저가 표준 명세 따름&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;브라우저의 사용자 인터페이스는 서로 닮아 있는데 일반적으로 다음 같은 요소들&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;URI를 입력할 수 있는 주소 표시 줄&lt;/li&gt;
&lt;li&gt;이전 버튼과 다음 버튼&lt;/li&gt;
&lt;li&gt;북마크&lt;/li&gt;
&lt;li&gt;새로 고침 버튼과 현재 문서의 로드를 중단할 수 있는 정지 버튼&lt;/li&gt;
&lt;li&gt;홈 버튼&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;브라우저의 사용자 인터페이스는 표준 명세가 없음에도 불구하고 수 년간 서로의 장점을 모방하면서 현재에 이르게 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HTML5 명세는 주소 표시줄, 상태 표시줄, 도구 모음과 같은 일반적인 요소를 제외하고 브라우저의 필수 UI를 정의하지 않았음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;물론 파이어폭스의 다운로드 관리자와 같이 브라우저에 특화된 기능도 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;브라우저의 기본 구조&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;브라우저의 주요 구성 요소는 다음과 같음&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;사용자 인터페이스 - 주소 표시줄, 이전/다음 버튼, 북마크 메뉴 등 요청한 페이지를 보여주는 창을 제외한 나머지 모든 부분&lt;/li&gt;
&lt;li&gt;브라우저 엔진 - 사용자 인터페이스와 렌더링 엔진 사이의 동작 제어, 소스코드 실행해 화면에 보여줄 수 있는 엔진, 브라우저 소프트웨어 동작시키는 핵심 엔진&lt;/li&gt;
&lt;li&gt;렌더링 엔진 - 요청한 콘텐츠를 표시 예를 들어 HTML을 요청하면 HTML과 CSS를 파싱하여 화면에 표시함, 위치를 잡고 색칠해주는 엔진&lt;/li&gt;
&lt;li&gt;통신 - HTTP 요청과 같은 네트워크 호출에 사용됨 이것은 플랫폼 독립적인 인터페이스이고 각 플랫폼 하부에서 실행됨&lt;/li&gt;
&lt;li&gt;UI 백엔드 - 콤보 박스와 창 같은 기본적인 장치를 그림 플랫폼에서 명시하지 않은 일반적인 인터페이스로서, OS 사용자 인터페이스 체계를 사용&lt;/li&gt;
&lt;li&gt;자바스크립트 해석기 - 자바스크립트 코드를 해석하고 실행&lt;/li&gt;
&lt;li&gt;자료 저장소 - 이 부분은 자료를 저장하는 계층 쿠키를 저항하는 것과 같이 모든 종류의 자원을 하드디스크에 저장할 필요가 있음 HTML5 명세에는 브라우저가 지원하는 &amp;lsquo;웹 데이터 베이스(&lt;a href=&quot;https://web.dev/?hl=ko&quot;&gt;https://web.dev/?hl=ko&lt;/a&gt;)&amp;rsquo;가 정의되어 있음&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;339&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Kmhdy/dJMcabRuiAk/oZieu06uZfXkYXwGTKW700/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Kmhdy/dJMcabRuiAk/oZieu06uZfXkYXwGTKW700/img.png&quot; data-alt=&quot;브라우저의 주요 구성 요소(출처: https://d2.naver.com/helloworld/59361)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Kmhdy/dJMcabRuiAk/oZieu06uZfXkYXwGTKW700/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKmhdy%2FdJMcabRuiAk%2FoZieu06uZfXkYXwGTKW700%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;339&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;339&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;브라우저의 주요 구성 요소(출처: https://d2.naver.com/helloworld/59361)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;크롬은 대부분의 브라우저와 달리 각 탭마다 별도의 렌더링 엔진 인스턴스를 유지하는 것이 주목할만함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;각 탭은 독립된 프로세스로 처리됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;렌더링 엔진&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;렌더링 엔진의 역할은 요청 받은 내용을 브라우저 화면에 표시하는 일&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;렌더링 엔진은 HTML 및 XML 문서와 이미지 표시할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;물론 플로그인이나 브라우저 확장 기능을 이용해 PDF와 같은 다른 유형도 표시할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;렌더링 엔진들&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;파이어폭스와 크롬, 사파리는 두 종류의 렌더링 엔진으로 제작&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;파이어폭스는 모질라에서 직접 만든 게코(Gecko)엔진을 사용하고 사파리와 크롬은 웹킷(Webkit) 엔진을 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(참고)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;크로미움은 V8+Blink을 포함한 구글 브라우저 오픈소스 애플리케이션 또한 크롬은 이 크로미움을 기반으로 만들어짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;크로미움은 여전히 렌더링 엔진으로 Blink를(webkit에서 fork된) 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Blink라는 용어보다도 보통 크롬의 크로미움을 주로 이야기하지만, Blink가 크로미움으로 바뀐 것은 아님&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;웹킷은 최초 리눅스 플랫폼에서 동작하기 위해 제작된 오픈소스 엔진인데 애플이 맥과 윈도우즈에서 사파리 브라우저를 지원하기 위해 수정을 가함(&lt;a href=&quot;https://webkit.org/&quot;&gt;https://webkit.org/&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;동작 과정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;렌더링 엔진은 통신으로부터 요청한 문서의 내용을 얻는 것으로 시작하는데 문서의 내용은 보통 8KB 단위로 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;렌더링 엔진의 기본적인 동작 과정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;66&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PAAof/dJMcagFiJ6b/xS7L9YokUREanEj4f9KPJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PAAof/dJMcagFiJ6b/xS7L9YokUREanEj4f9KPJ0/img.png&quot; data-alt=&quot;렌더링 엔진의 동작 과정(출처: https://d2.naver.com/helloworld/59361)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PAAof/dJMcagFiJ6b/xS7L9YokUREanEj4f9KPJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPAAof%2FdJMcagFiJ6b%2FxS7L9YokUREanEj4f9KPJ0%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;601&quot; height=&quot;66&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;66&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;렌더링 엔진의 동작 과정(출처: https://d2.naver.com/helloworld/59361)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;렌더링 엔진은 HTML 문서를 파싱하고 &amp;ldquo;콘텐츠 트리&amp;rdquo; 내부에서 태그를 DOM(&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://web.dev/articles/howbrowserswork?hl=ko&quot;&gt;https://web.dev/articles/howbrowserswork?hl=ko&lt;/a&gt;)노드로 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 다음 외부 CSS 파일과 함께 포함된 스타일 요소도 파싱 스타일 정보와 HTML 표시 규칙은 &amp;ldquo;렌더 트리(&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://web.dev/articles/howbrowserswork?hl=ko&quot;&gt;https://web.dev/articles/howbrowserswork?hl=ko&lt;/a&gt;)&amp;rdquo;라고 부르는 또다른 트리 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;렌더 트리는 색상 또는 면적과 같은 시각적 속성이 있는 사각형을 포함하고 있는데 정해진 순서대로 화면에 표시됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;렌더 트리 생성이 끝나면 배치가 시작되는데 이것은 각 노드가 화면의 정확한 위치에 표시되는 것을 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다음은 UI 백엔드에서 렌더 트리의 각 노드를 가로지르며 형상을 만들어 내는 그리기 과정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;일련의 과정들이 점진적으로 진행된다는 것을 아는 것이 중요&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;렌더링 엔진은 좀 더 나은 사용자 경험을 위해 가능하면 빠르게 내용을 표시하는데 모든 HTML을 파싱할 때까지 기다리지 않고 배치와 그리기 과정 시작 네트워크로부터 나머지 내용이 전송되기를 기다리는 동시에 받은 내용의 일부를 먼저 화면에 표시하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;웹킷 동작 과정 예 ⭐️&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;289&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JOavw/dJMcahqE5uf/zYKRuInA9eBPokCeXlVU0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JOavw/dJMcahqE5uf/zYKRuInA9eBPokCeXlVU0k/img.png&quot; data-alt=&quot;웹킷 동작 과정 (출처:https://d2.naver.com/helloworld/59361)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JOavw/dJMcahqE5uf/zYKRuInA9eBPokCeXlVU0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJOavw%2FdJMcahqE5uf%2FzYKRuInA9eBPokCeXlVU0k%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;625&quot; height=&quot;289&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;289&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;웹킷 동작 과정 (출처:https://d2.naver.com/helloworld/59361)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;인터넷에서 특정 정보를 이동할 수 있는 주소 입력창이 있고 서버와 HTTP로 정보를 주고 받을 수 있는 네트워크 모듈도 포함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;서버에서 받은 문서(HTML, CSS, Javascript)를 해석하고 실행해 화면에 표현하기 위한 해석기(Parser)들을 가지고 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;브라우저마다 서로 다른 엔진 포함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HTML을 해석해 DOM Tree를 만들고, CSS를 해석해 역시 CSS Tree(CSS Object Model)을 만듦&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 과정에서 Parsing 과정이 필요하며 토큰 단위로 해석되는 방식은 일반적인 소스코드의 컴파일 과정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;DOM Tree와 CSS Tree, 이 두 개는 연관되어 있으므로 Render Tree로 다시 조합&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이렇게 조합된 결과는 화면에 어떻게 배치할지 크기와 위치 정보를 담고 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이후에 이렇게 구성된 Render Tree 정보를 통해 화면에 어떤 부분에 어떻게 색칠을 할지 Painting과정 거치게 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;파싱과 DOM 트리 구축&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;파싱 일반&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;파싱은 렌더링 엔진에서 매우 중요한 과정이기 때문에 더 자세히 다룰 필요 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;문서 파싱은 브라우저가 코드를 이해하고 사용할 수 있는 구조로 변환하는 것을 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;파싱 결과는 보통 문서 구조를 나타내는 노드 트리인데 파싱 트리(parse tree) 또는 문법 트리(syntax tree)라고 부름&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예를 들면 2+3-1과 같은 표현식은 다음과 같은 트리가 됨&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;155&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYBY2X/dJMcaaZlLk8/QpD68xaNjiff9qEiDRNf91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYBY2X/dJMcaaZlLk8/QpD68xaNjiff9qEiDRNf91/img.png&quot; data-alt=&quot;수학 표현식을 파싱한 트리 노드(출처: https://d2.naver.com/helloworld/59361)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYBY2X/dJMcaaZlLk8/QpD68xaNjiff9qEiDRNf91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYBY2X%2FdJMcaaZlLk8%2FQpD68xaNjiff9qEiDRNf91%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;400&quot; height=&quot;155&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;155&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;수학 표현식을 파싱한 트리 노드(출처: https://d2.naver.com/helloworld/59361)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;HTML 파서&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HTML 파서는 HTML 마크업을 파싱 트리로 변환&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;HTML 문법&amp;nbsp; 정의&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HTML의 어휘와 문법은 W3C에 의해 명세로 정의되어 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;현재 버전은 HTML4와 초안 상태로 진행 중인 HTML5&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 data-ke-size=&quot;size18&quot;&gt;파싱 일반 소개를 통해 알게 된 것처럼 문법은 BNF와 같은 형식을 이용하여 공식적으로 정의할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;모든 전통적인 파서는 HTML에 적용할 수 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;파싱은 CSS와 자바스크립트를 파싱하는 데 사용됨 HTML은 파서가 요구하는 문맥 자유 문법에 의해 쉽게 정의할 수 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HTML 정의를 위한 공식적인 형식으로 DTD(문서 형식 정의)가 있지만 이것은 문백 자유 문법이 아님&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이는 언뜻 이상하게 보일 수도 있는데 HTML이 XML과 유사하기 때문&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사용할 수 있는 XML 파서는 많음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HTML을 XML 형태로 재구성한 XHTM도 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;차이점은 HTML이 더 &amp;ldquo;너그럽다&amp;rdquo;는 점&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HTML은 암묵적으로 태그에 대한 생략 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;가끔 시작 또는 종료 태그 등을 생략&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;전반적으로 뻣뻣하고 부담스러운 XML에 반하여 HTML은 &amp;ldquo;유연한&amp;rdquo; 문법&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이런 작은 차이가 큰 차이를 만들어 냄&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;웹 제작자의 실수를 너그럽게 용서하고 편하게 만들어주는 이것이야 말로 HTML이 인기가 있었던 이유&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다른 한편으로는 공식적인 문법으로 작성하기 어렵게 만드는 문제가 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;정리하자면 HTML은 파싱하기 어렵고 전통적인 구문 분석이 불가능하기 때문에 문맥 자유 문법이 아니라는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;XML 파서로도 파싱하기 쉽지 않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;DOM&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;ldquo;파싱 트리&amp;rdquo;는 DOM 요소와 속성 노드의 트리로서 출력 트리가 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;DOM은 문서 객체 모델(Document Object Model)의 준말&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이것은 HTML 문서의 객체 표현이고 외부를 향하는 자바스크립트와 같은 HTML 요소의 연결 지점 트리의 최상위 객체는 문서(&lt;a href=&quot;https://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html&quot;&gt;https://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;DOM은 마크업과 1:1 관계를 맺음&lt;/p&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;html&amp;gt;
	&amp;lt;body&amp;gt;
		&amp;lt;p&amp;gt;Helllo World&amp;lt;\\p&amp;gt;
		&amp;lt;div&amp;gt;&amp;lt;img src=&quot;example.png&quot; /&amp;gt;&amp;lt;/div&amp;gt;
	&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이것은 아래와 같은 DOM 트리로 변환할 수 있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;218&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mzW8w/dJMcajon7rg/mLpKd82371ZA2CW00Lc7r1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mzW8w/dJMcajon7rg/mLpKd82371ZA2CW00Lc7r1/img.png&quot; data-alt=&quot;예제 마크업의 DOM 트리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mzW8w/dJMcajon7rg/mLpKd82371ZA2CW00Lc7r1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmzW8w%2FdJMcajon7rg%2FmLpKd82371ZA2CW00Lc7r1%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;400&quot; height=&quot;218&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;218&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;예제 마크업의 DOM 트리&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HTML과 마찬가지로 DOM은 W3C에 의해 명세(&lt;a href=&quot;http://www.w3.org/DOM/DOMTR&quot;&gt;www.w3.org/DOM/DOMTR&lt;/a&gt;)가 정해져 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이것은 문서를 다루기 위한 일반적인 명세인데 부분적으로 HTML 요소를 설명하기도 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HTML 정의는 &lt;a href=&quot;http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/idl-definitions.html&quot;&gt;www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/idl-definitions.html&lt;/a&gt; 에서 찾을 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;트리가 DOM 노드를 포함한다고 말하는 것은 DOM 접점의 하나를 실행하는 요소를 구성한다는 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HTML은 일반적인 하향식 또는 상향식 파서로 파싱이 안되는데 그 이유는 다음과 같음&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;언어의 너그러운 속성&lt;/li&gt;
&lt;li&gt;잘 알려져 있는 HTML 오류에 대한 브라우저의 관용&lt;/li&gt;
&lt;li&gt;변경에 의한 재파싱 일반적으로 소스는 파싱하는 동안 변하지 않지만 HTML에서 document.write을 포함하고 있는 스크립트 태그는 토큰을 추가할 수 없기 때문에 실제로는 입력 과정에서 파싱이 수정됨&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;일반적인 파싱 기술을 사용할 수 없기 때문에 브라우저는 HTML 파싱을 위해 별도의 파서 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://html.spec.whatwg.org/multipage/parsing.html&quot;&gt;https://html.spec.whatwg.org/multipage/parsing.html&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;알고리즘은 토큰화와 트리 구축 이렇게 두 단계로 되어 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;토큰화는 어휘 분석으로서 입력 값을 토큰으로 파싱 HTML에서 토큰은 시작 태그, 종료 태그, 속성 이름과 속성 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;토큰화는 토큰을 인지해서 트리 생성자로 넘기고 다른 토큰을 확인하기 위해 다음 문자를 확인함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;308&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9ZbLZ/dJMcac3U9cS/InVZK4o2bg0mbUesIrQUz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9ZbLZ/dJMcac3U9cS/InVZK4o2bg0mbUesIrQUz1/img.png&quot; data-alt=&quot;HTML 파싱 과정(출처: https://d2.naver.com/helloworld/59361)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9ZbLZ/dJMcac3U9cS/InVZK4o2bg0mbUesIrQUz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9ZbLZ%2FdJMcac3U9cS%2FInVZK4o2bg0mbUesIrQUz1%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;308&quot; height=&quot;400&quot; data-origin-width=&quot;308&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HTML 파싱 과정(출처: https://d2.naver.com/helloworld/59361)&lt;/figcaption&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;CSS 파싱&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HTML과 다르게 CSS는 문맥 자유 문법이고 소개 글에서 설명했던 파서 유형을 이용하여 파싱이 가능&lt;span class=&quot;hljs-symbol&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;웹킷 CSS 파서&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;웹킷은 CSS 문법 파일로부터 자동으로 파서를 생성하기 위해 플렉스와 바이슨 파서 생성기를 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;파서 소개에서 언급했던 것처럼 바이슨을 상향식 이동 감소 파서를 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;파이어폭스는 직접 작성한 하향식 파서를 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;두 경우 모두 각 CSS 파일은 스타일 시트 객체로 파싱되고 각 객체는 CSS 규칙을 포함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;CSS 규칙 객체는 선택자와 선언 객체 그리고 CSS 문법과 일치하는 다른 객체를 포함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;393&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGSQ4u/dJMcahqFqic/mMLkxd0ouaGJFdIOrwuVz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGSQ4u/dJMcahqFqic/mMLkxd0ouaGJFdIOrwuVz0/img.png&quot; data-alt=&quot;CSS 파싱(출처: https://d2.naver.com/helloworld/59361)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGSQ4u/dJMcahqFqic/mMLkxd0ouaGJFdIOrwuVz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGSQ4u%2FdJMcahqFqic%2FmMLkxd0ouaGJFdIOrwuVz0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;393&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;393&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CSS 파싱(출처: https://d2.naver.com/helloworld/59361)&lt;/figcaption&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;DOM 트리와 렌더 트리의 관계&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;렌더러는 DOM 요소에 부합하지만 1:1로 대응하는 관계는 아님&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예를 들어 &amp;ldquo;head&amp;rdquo; 요소와 같은 비시각적 DOM 요소는 렌더 트리에 추가되지 않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;또한 display 속성에 &amp;ldquo;none&amp;rdquo; 값이 할당된 요소는 트리에 나타나지 않음(visibility 속성에 &amp;ldquo;hidden&amp;rdquo; 값이 할당된 요소는 트리에 나타남)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여러 개의 시각 객체와 대응하는 DOM 요소도 있는데 이것들은 보통 하나의 사각형으로는 묘사할 수 없는 복잡한 구조&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예를 들면 &amp;ldquo;select&amp;rdquo; 요소는 &amp;lsquo;표시 영역, 드롭다운 목록, 버튼&amp;rsquo; 표시를 위한 3개의 렌더러가 있다 또한 한 줄에 충분히 표시할 수 없는 문자가 여러 줄로 바뀔 때 새 줄은 별도의 렌더러로 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여러 렌더러와 대응하는 또 다른 예는 깨진 HTML&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;CSS 명세에 의하면 인라인 박스는 블록 박스만 포함하거나 인라인 박스만을 포함해야 하는데 인라인과 블록 박스가 섞인 경우 인라인 박스를 감싸기 위한 익명의 블록 렌더러가 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;어떤 렌더 객체는 DOM 노드에 대응하지만 트리의 동일한 위치에 있지 않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;float 처리된 요소 또는 position 속성 값이 absolute로 처리된 요소는 흐름에서 벗어나 트리의 다른 곳에 배치된 상태로 형상이 그려지는 대신 자리 표시자가 원래 있어야 할 곳에 배치&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;637&quot; data-origin-height=&quot;345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FMsaL/dJMcabcRUgZ/q3CKN2uFqDPPQAVmTST3ck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FMsaL/dJMcabcRUgZ/q3CKN2uFqDPPQAVmTST3ck/img.png&quot; data-alt=&quot;렌더 트리와 DOM 트리 대응(3.1). &amp;amp;ldquo;뷰포트&amp;amp;rdquo;는 최초의 블록이다 웹킷에서는 &amp;amp;ldquo;RenderView&amp;amp;rdquo; 객체가 이 역할을 한다 (출처: https://d2.naver.com/helloworld/59361)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FMsaL/dJMcabcRUgZ/q3CKN2uFqDPPQAVmTST3ck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFMsaL%2FdJMcabcRUgZ%2Fq3CKN2uFqDPPQAVmTST3ck%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;637&quot; height=&quot;345&quot; data-origin-width=&quot;637&quot; data-origin-height=&quot;345&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;렌더 트리와 DOM 트리 대응(3.1). &amp;ldquo;뷰포트&amp;rdquo;는 최초의 블록이다 웹킷에서는 &amp;ldquo;RenderView&amp;rdquo; 객체가 이 역할을 한다 (출처: https://d2.naver.com/helloworld/59361)&lt;/figcaption&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 data-ke-size=&quot;size18&quot;&gt;렌더러가 생성되어 트리에 추가될 때 크기와 위치 정보는 없는데 이런 값을 계산하는 것을 배치 또는 리플로라고 부름&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HTML은 흐름 기반의 배치 모델을 사용하는데 이것은 보통 단일 경로를 통해 크기와 위치 정보를 계산할 수 있다는 것을 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;일반적으로 &amp;ldquo;흐름 속&amp;rdquo;에서 나중에 등장하는 요소는 앞서 등장한 요소의 위치와 크기에 영향을 미치지 않기 때문에 배치는 왼쪽에서 오른쪽으로 또는 위에서 아래로 흐름&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;단, 표는 크기와 위치를 계산하기 위해 하나 이상의 경로를 필요로 하기 때문에 예외&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;좌표계는 기준점으로부터 상대적으로 위치를 결정하는데 좌단(X축)과 상단(Y축) 좌표를 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;배치는 반복되며 HTML 문서의 &amp;lt;html&amp;gt; 요소에 해당하는 최상위 렌더러에서 시작&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;배치는 프레임 계층의 일부 또는 전부를 통해 반복되고 각 렌더러에 필요한 크기와 위치 정보를 계산&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;최상위 렌더러의 위치는 0,0 이고 브라우저 창의 보이는 영역에 해당하는 뷰포트 만큼의 면적을 가짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;모든 렌더러는 &amp;ldquo;배치&amp;rdquo; 또는 &amp;ldquo;리플로&amp;rdquo; 메서드를 갖는데 각 렌더러는 배치해야 할 자식의 배치 메소드를 불러옴&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;더티 비트 체제&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;소소한 변경 때문에 전체를 다시 배치하지 않기 위해 브라우저는 &amp;ldquo;더티 비트&amp;rdquo; 체제를 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;렌더러는 다시 배치할 필요가 있는 변경 요소 또는 추가된 것과 그 자식을 &amp;ldquo;더티&amp;rdquo;라고 표시&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;ldquo;더티&amp;rdquo;와 &amp;ldquo;자식이 더티&amp;rdquo; 이렇게 두 가지 플래그가 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자식이 더티하다는 것은 본인이 괜찮지만 자식 가운데 적어도 하나를 다시 배치할 필요가 있다는 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;전역 배치와 점증 배치&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;배치는 렌더러 트리 전체에서 일어날 수 있는데 이것을 &amp;ldquo;전역&amp;rdquo; 배치라 하고 다음과 같은 경우에 발생&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;글꼴 크기 변경과 같이 모든 렌더러에 영향을 주는 전역 스타일 변경&lt;/li&gt;
&lt;li&gt;화면 크기 변경에 의한 결과&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;배치는 더티 렌더러가 배치되는 경우에만 점증되는데 추가적인 배치가 필요하기 때문에 약간의 손실이 발생할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;점증 배치는 렌더러가 더티일 때 비동기적으로 일어남&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예를 들면 네트워크로부터 추가 내용을 받아서 DOM 트리에 더해진 다음 새로운 렌더러가 렌더 트리에 붙을 때&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;326&quot; data-origin-height=&quot;341&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tpFn0/dJMcabYhttE/SdCjhaLtaaQJKPddebwAr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tpFn0/dJMcabYhttE/SdCjhaLtaaQJKPddebwAr1/img.png&quot; data-alt=&quot;점증 배치-오직 더티 렌더러와 그 자식만 배치된다(출처: https://d2.naver.com/helloworld/59361)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tpFn0/dJMcabYhttE/SdCjhaLtaaQJKPddebwAr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtpFn0%2FdJMcabYhttE%2FSdCjhaLtaaQJKPddebwAr1%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;326&quot; height=&quot;341&quot; data-origin-width=&quot;326&quot; data-origin-height=&quot;341&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;점증 배치-오직 더티 렌더러와 그 자식만 배치된다(출처: https://d2.naver.com/helloworld/59361)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;비동기 배치와 동기 배치&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;점증 배치는 비동기로 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;파이어폭스는 점증 배치를 위해 &amp;ldquo;리플로 명령&amp;rdquo;을 쌓아 놓고 스케줄러는 이 명령을 한꺼번에 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;웹킷도 점증 배치를 실행하는 타이머가 있는데 트리를 탐색하여 &amp;ldquo;더디&amp;rdquo; 렌더러를 배치&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;ldquo;offsetHeight&amp;rdquo; 같은 스타일 정보를 요청하는 스크립트는 동기적으로 점증 배치를 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;전역 배치는 보통 동기적으로 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;때때로 배치는 스크롤 위치 변화와 같은 일부 속성들 때문에 초기 배치 이후 콜백으로 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;최적화&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;배치가 &amp;ldquo;크기 변경&amp;rdquo; 또는 렌더러 위치 변화 때문에 실행되는 경우 렌더러의 크기는 다시 계산하지 않고 캐시로부터 가져옴&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;어떤 경우는 하위 트리만 수정이 되고 최상위로부터 배치가 시작되지 않는 경우도 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이런 경우는 입력 필드에 텍스트를 입력하는 경우와 같이 변화 범위가 한정적이어서 주변에 영향을 미치지 않을 때 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;만약 입력 필드 바깥쪽에 텍스트가 입력되는 경우라면 배치는 최상단으로부터 시작될 것&lt;/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 data-ke-size=&quot;size18&quot;&gt;배치는 보통 다음과 같은 형태로 진행&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;부모 렌더러가 자신의 너비를 결정&lt;/li&gt;
&lt;li&gt;부모가 자식을 검토
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;자식 렌더러를 배치(자식의 x와 y를 설정)&lt;/li&gt;
&lt;li&gt;(부모와 자식이 더티하거나 전역 배치 상태이거나 또는 다른 이유로) 필요하다면 자식 배치를 호출하여 자식의 높이를 계산&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;부모는 자식의 누적된 높이와 여백, 패딩을 사용하여 자신의 높이를 설정 이 값은 부모 렌더러의 부모가 사용하게 됨&lt;/li&gt;
&lt;li&gt;더티 비트 플래그를 제거&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;파이어폭스는 &amp;ldquo;상태&amp;rdquo; 객체(nsHTMLReflowState)를 배치(&amp;rdquo;리플로&amp;rdquo;를 의미)를 위한 매개 변수로 사용하는데 상태는 부모의 너비를 포함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;파이어폭스 배치의 결과는 &amp;ldquo;매트릭스&amp;rdquo; 객체(nsHTMLReflowMatrics)인데 높이가 계산된 렌더러를 포함&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 data-ke-size=&quot;size18&quot;&gt;렌더러의 너비는 포함하는 블록의 너비, 그리고 렌더러의 너비와 여백, 테두리를 이용하여 계산&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예를 들어 다음은 div 요소의 너비를 보자&lt;/p&gt;
&lt;pre class=&quot;applescript&quot;&gt;&lt;code&gt;&amp;lt;div style=&quot;width:30%&quot;&amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;웹킷은 다음(RenderBox 클래스의 calcWidth 메서드)과 같이 계산할 것&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컨테이너의 너비는 컨테이너 availableWidth와 0 사이의 최대값 이 경우 availableWidth는 다음과 같이 계산된 contentWidth clientWidth와 clientHeight는 객체의 테두리와 스크롤바를 제외한 내부 영역을 의미&lt;/li&gt;
&lt;li&gt;clientWidth() - paddingLeft() - paddingRight()&lt;/li&gt;
&lt;li&gt;요소의 너비는 &amp;ldquo;width&amp;rdquo; 스타일 속성의 값이다 이 컨테이너 너비의 백분률 값은 절대값으로 변환될 것&lt;/li&gt;
&lt;li&gt;좌우측 테두리와 패딩 값이 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여기가지 &amp;ldquo;미리 획득한 너비&amp;rdquo;의 계산 이제는 최소 너비와 최대 너비를 계산해야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;미리 획득한 너비가 최대 너비보다 크면 최대 너비가 사용됨 미리 획득한 너비가 최소 너비(깨지지 않는 가장 작은 단위)보다 작으면 최소 너비가 사용됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;배치할 필요가 있지만 너비가 고정된 경우 값은 캐시에 저장됨&lt;/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 data-ke-size=&quot;size18&quot;&gt;렌더러가 배치되는 동안 줄을 바꿀 필요가 있을 때 배치는 중단되고 줄 바꿀 필요가 있음을 부모에게 전달&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그리기 단계에서는 화면에 내용을 표시하기 위한 렌더 트리가 탐색되고 렌더러의 &amp;ldquo;paint&amp;rdquo; 메서드가 호출&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그리기는 UI 기반의 구성 요소를 사용&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 data-ke-size=&quot;size18&quot;&gt;그리기는 배치와 만찬가지로 전역 또는 점증 방식으로 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;점증 그리기에서 일부 렌더러는 전체 트리에 영향을 주지 않는 방식으로 변경&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;변경된 렌더러는 화면 위의 사각형을 무효화 하는데 OS는 이것을 &amp;ldquo;더티 영역&amp;rdquo;으로 보고 &amp;ldquo;paint&amp;rdquo; 이벤트를 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;OS는 몇 개의 영역을 하나로 합치는 방법으로 효과적으로 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;크롬은 렌더러가 별도의 처리 과정이기 때문에 조금 더 복잡&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;크롬은 OS의 동작을 어느 정도 모방 프레젠테이션은 이런 이벤트에 귀 기울이고 렌더 최상위로 메시지를 전달&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그러면 트리는 적절한 렌더러에 이를 때까지 탐색되고 스스로(보통 자식과 함께)다시 그려짐&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;그리기 순서&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;CSS 2는 그리기 과정의 순서를 정의(&lt;a href=&quot;https://www.w3.org/TR/CSS2/zindex.html&quot;&gt;https://www.w3.org/TR/CSS2/zindex.html&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이것은 실제로 요소가 stacking contexts에 쌓이는 순서&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;스택은 뒤에서 앞으로 그려지기 때문에 이 순서는 그리기에 영향을 미침&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;블록 렌더러가 쌓이는 순서는 다음과 같음&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;배경 색&lt;/li&gt;
&lt;li&gt;배경 이미지&lt;/li&gt;
&lt;li&gt;테두리&lt;/li&gt;
&lt;li&gt;자식&lt;/li&gt;
&lt;li&gt;아웃라인&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;CSS 박스 모델&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;CSS 박스 모델(&lt;a href=&quot;https://www.w3.org/TR/CSS2/box.html&quot;&gt;https://www.w3.org/TR/CSS2/box.html&lt;/a&gt;)은 문서 트리에 있는 요소를 위해 생성되고 시각적 서식 모델에 따라 사각형 박스를 설명&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;500&quot; data-origin-height=&quot;340&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bugyCA/dJMcai36s6g/U1xfCZNcIXiyU8c0HedOLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bugyCA/dJMcai36s6g/U1xfCZNcIXiyU8c0HedOLK/img.png&quot; data-alt=&quot;CSS2 박스 모델 (출처: https://d2.naver.com/helloworld/59361)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bugyCA/dJMcai36s6g/U1xfCZNcIXiyU8c0HedOLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbugyCA%2FdJMcai36s6g%2FU1xfCZNcIXiyU8c0HedOLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;340&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;340&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CSS2 박스 모델 (출처: https://d2.naver.com/helloworld/59361)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;각 노드는 이런 상자를 0에서 n개 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;모든 요소는 만들어질 박스의 유형을 결정하는 &amp;ldquo;display&amp;rdquo; 속성을 갖는데 이 속성의 유형은 다음과 같음&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;block - 블록 상자를 만듦&lt;/li&gt;
&lt;li&gt;inline - 하나 또는 그 이상의 인라인 상자를 만듦&lt;/li&gt;
&lt;li&gt;none - 박스를 만들지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;기본 값은 인라인이지만 브라우저의 스타일 시트는 다른 기본 값을 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예를 들면 &amp;ldquo;div&amp;rdquo; 요소의 display 속성에 대한 기본 값은 block&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;브라우저의 기본 스타일 시트 예제는 [www][45][.][45][w][45][3.][45][org][45][/][45][45][TR][45][/][45][CSS][45][2/][45][sample][45][.][45][html][45]에서 찾을 수 있음&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 data-ke-size=&quot;size18&quot;&gt;위치를 결정하는 방법은 다음과 같은 세 가지&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Normal - 객체는 문서 안의 자리에 따라 위치가 결정 이것은 렌더 트리에서 객체의 자리가 DOM 트리의 자리와 같고 박스 유형과 면적에 따라 배치됨을 의미&lt;/li&gt;
&lt;li&gt;Float - 객체는 우선 일반적인 흐름에 따라 배치된 다음 왼쪽이나 오른쪽으로 흘러 이동&lt;/li&gt;
&lt;li&gt;Absolute - 객체는 DOM 트리 자리와는 다른 렌더 트리에 놓임&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위치는 &amp;ldquo;position&amp;rdquo; 속성과 &amp;ldquo;float&amp;rdquo; 속성에 의해 결정&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;static과 relative로 설정하면 일반적인 흐름에 따라 위치가 결정&lt;/li&gt;
&lt;li&gt;absolute와 fixed로 설정하면 절대적인 위치가 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;position 속성을 정의하지 않으면 static이 기본 값이 되며 일반적인 흐름에 따라 위치가 결정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;static 아닌 다른 속성 값(relative, absolute, fixed)을 사용하면 top, bottom, left, right 속성으로 위치를 결정할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;박스가 배치되는 방법은 다음과 같은 방법으로 결정&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;박스 유형(display, inline &amp;hellip;)&lt;/li&gt;
&lt;li&gt;박스 크기(width, height &amp;hellip;)&lt;/li&gt;
&lt;li&gt;위치 결정 방법(position, float)&lt;/li&gt;
&lt;li&gt;추가적인 정보 - 이미지 크기와 화면 크기 등&lt;/li&gt;
&lt;/ul&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;b&gt;박스 유형_CSS&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&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;150&quot; data-origin-height=&quot;127&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DJ3YI/dJMcacbN3yM/uU4t2AHkFKukQ6DHYTrCn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DJ3YI/dJMcacbN3yM/uU4t2AHkFKukQ6DHYTrCn1/img.png&quot; data-alt=&quot;블록 박스 (출처: https://d2.naver.com/helloworld/59361)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DJ3YI/dJMcacbN3yM/uU4t2AHkFKukQ6DHYTrCn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDJ3YI%2FdJMcacbN3yM%2FuU4t2AHkFKukQ6DHYTrCn1%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;150&quot; height=&quot;127&quot; data-origin-width=&quot;150&quot; data-origin-height=&quot;127&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;블록 박스 (출처: https://d2.naver.com/helloworld/59361)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;300&quot; data-origin-height=&quot;233&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Sh7eB/dJMcaiQAHJS/OJk1FLhsYjPk3lUoQI4I5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Sh7eB/dJMcaiQAHJS/OJk1FLhsYjPk3lUoQI4I5K/img.png&quot; data-alt=&quot;인라인 박스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Sh7eB/dJMcaiQAHJS/OJk1FLhsYjPk3lUoQI4I5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSh7eB%2FdJMcaiQAHJS%2FOJk1FLhsYjPk3lUoQI4I5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;233&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;233&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;인라인 박스&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;블록은 다른 블록 아래 수직으로 배치되고 인라인은 수평으로 배치&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pYgQz/dJMcagyudNz/bO2pUhXWVevEtHkjrBCrS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pYgQz/dJMcagyudNz/bO2pUhXWVevEtHkjrBCrS1/img.png&quot; data-alt=&quot;블록과 인라인 배치&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pYgQz/dJMcagyudNz/bO2pUhXWVevEtHkjrBCrS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpYgQz%2FdJMcagyudNz%2FbO2pUhXWVevEtHkjrBCrS1%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;350&quot; height=&quot;324&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;블록과 인라인 배치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;인라인 박스는 라인 또는 &amp;ldquo;라인 박스&amp;rdquo; 안쪽에 놓임&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;라인은 적어도 가장 큰 박스만큼 크지만 &amp;ldquo;baseline&amp;rdquo; 정렬일 때 더 커질 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이것은 요소의 하단이 다른 상자의 하단이 아닌 곳에 배치된 경우를 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;포함하는 너비가 충분하지 않으면 인라인은 몇 줄의 라인으로 배치되는데 이것은 보통 문단 안에서 발생&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;277&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mD1QR/dJMcajhEUuV/HswGls6ZP8RT3qSSAzpcN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mD1QR/dJMcajhEUuV/HswGls6ZP8RT3qSSAzpcN0/img.png&quot; data-alt=&quot;라인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mD1QR/dJMcajhEUuV/HswGls6ZP8RT3qSSAzpcN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmD1QR%2FdJMcajhEUuV%2FHswGls6ZP8RT3qSSAzpcN0%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;400&quot; height=&quot;277&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;277&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;라인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;위치 잡기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;상대적인 위치&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;500&quot; data-origin-height=&quot;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWUhde/dJMcajhEUys/GaUqsiIdbfc6m288KTNWq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWUhde/dJMcajhEUys/GaUqsiIdbfc6m288KTNWq1/img.png&quot; data-alt=&quot;상대적인 위치 잡기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWUhde/dJMcajhEUys/GaUqsiIdbfc6m288KTNWq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWUhde%2FdJMcajhEUys%2FGaUqsiIdbfc6m288KTNWq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;262&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;262&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;상대적인 위치 잡기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;플로트&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;플로트 박스는 라인의 왼쪽 또는 오른쪽으로 이동한다 흥미로운 점은 다른 박스가 이 주변을 흐른다는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HTML을 다음과 같이 작성하면&lt;/p&gt;
&lt;pre id=&quot;code_1777011331814&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;p&amp;gt;
&amp;lt;img src=&quot;http://helloworld.naver.com/image.gif&quot; alt=&quot;image.gif&quot; width=&quot;100&quot; height=&quot;100&quot; style=&quot;float:right&quot;&amp;gt;
Lorem ipsum dolor sit amet, consectetuer...
&amp;lt;/p&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;아래와 같이 보일 것&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;203&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEVjHc/dJMcag6lNj2/hl4ySr1kSRdbw8VM2iaCs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEVjHc/dJMcag6lNj2/hl4ySr1kSRdbw8VM2iaCs0/img.png&quot; data-alt=&quot;플로트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEVjHc/dJMcag6lNj2/hl4ySr1kSRdbw8VM2iaCs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEVjHc%2FdJMcag6lNj2%2Fhl4ySr1kSRdbw8VM2iaCs0%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;444&quot; height=&quot;203&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;203&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;플로트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;절대적인(absolute)위치와 고정된(fixed)위치&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;절대와 고정 배치는 일반적인 흐름과 무관하게 결정되고, 일반적인 흐름에 관여하지 않으며, 면적은 부모에 따라 상대적&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;500&quot; data-origin-height=&quot;343&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpThLO/dJMcaaLP9bG/Py1XxtLjnR9KHzN7dgSgb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpThLO/dJMcaaLP9bG/Py1XxtLjnR9KHzN7dgSgb0/img.png&quot; data-alt=&quot;고정된 위치 잡기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpThLO/dJMcaaLP9bG/Py1XxtLjnR9KHzN7dgSgb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpThLO%2FdJMcaaLP9bG%2FPy1XxtLjnR9KHzN7dgSgb0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;343&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;343&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;고정된 위치 잡기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(참고) 고정된 박스는 문서가 스크롤되어도 따라 움직이지 않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;층 표현&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이것은 CSS의 z-index 속성에 의해 명시&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;층은 박스의 3차원 표현이고 &amp;ldquo;z축&amp;rdquo;을 따라 위치를 정함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;박스는 (stacking contexts라고 부르는)스택으로 구분&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;각 스택에서 뒤쪽 요소가 먼저 그려지고 앞쪽 요소는 사용자에게 가까운 쪽으로 나중에 그려짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;가장 앞쪽에 위치한 요소는 겹치는 이전 요소를 가림&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;스택은 z-index 속성에 따라 순서를 결정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;z-index 속성이 있는 박스는 지역 스택(local stack)을 형성&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;뷰포트는 바깥쪽의 스택(outer stack)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다음 예제를 보자&lt;/p&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;style type=&quot;text/css&quot;&amp;gt;
div {
	position: absolute;
	left: 2in;
	top: 2in;
}
&amp;lt;/style&amp;gt;
&amp;lt;p&amp;gt;
	&amp;lt;div style=&quot;z-index:3;background-color:red;width:lin;height:lin&quot;&amp;gt;&amp;lt;/div&amp;gt;
	&amp;lt;div style=&quot;z-index:1;background-color:green;width:2in;height:2in&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&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;253&quot; data-origin-height=&quot;227&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qYoQJ/dJMcahqFra2/rZOke6QXCC5YeG3wUrrDb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qYoQJ/dJMcahqFra2/rZOke6QXCC5YeG3wUrrDb0/img.png&quot; data-alt=&quot;고정 위치 잡기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qYoQJ/dJMcahqFra2/rZOke6QXCC5YeG3wUrrDb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqYoQJ%2FdJMcahqFra2%2FrZOke6QXCC5YeG3wUrrDb0%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;253&quot; height=&quot;227&quot; data-origin-width=&quot;253&quot; data-origin-height=&quot;227&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;고정 위치 잡기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;붉은색 박스가 초록색 박스보다 마크업에서 먼저 나오기 때문에 일반적인 흐름이라면 먼저 그려져야 하지만 z-index 속성이 높기 때문에 더 앞쪽에 표시&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;  생각해보자&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;우리가 흔히 브라우저 탐색을 할 때 스크롤을 하거나, 어떤 것을 클릭하면서 화면의 위치를 바꿀 때, 브라우저는 어떻게 다시 화면을 그릴까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ㄴ reflow, repaint&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위에서 표현된 그림처럼 다시 렌더링 되지 않을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ㄴ 위치가 바뀌지 않는다면 다시 렌더링할 필요 없이 부분적으로 재배치하고 다시 그리는 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;참고자료&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;a title=&quot;브라우저의 동작-1&quot; href=&quot;https://www.boostcourse.org/web316/lecture/254256/?isDesc=false&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.boostcourse.org/web316/lecture/254256/?isDesc=false&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777002896272&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;웹 프로그래밍(풀스택)&quot; data-og-description=&quot;부스트코스 무료 강의&quot; data-og-host=&quot;www.boostcourse.org&quot; data-og-source-url=&quot;https://www.boostcourse.org/web316/lecture/254256/?isDesc=false&quot; data-og-url=&quot;http://www.boostcourse.org/web316/lecture/254256/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b5gUgq/dJMb895597o/JtN2XKynBwYipkzkBKaJ50/img.png?width=760&amp;amp;height=420&amp;amp;face=0_0_760_420&quot;&gt;&lt;a href=&quot;https://www.boostcourse.org/web316/lecture/254256/?isDesc=false&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.boostcourse.org/web316/lecture/254256/?isDesc=false&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b5gUgq/dJMb895597o/JtN2XKynBwYipkzkBKaJ50/img.png?width=760&amp;amp;height=420&amp;amp;face=0_0_760_420');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;웹 프로그래밍(풀스택)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;부스트코스 무료 강의&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.boostcourse.org&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;a title=&quot;브라우저는 어떻게 동작하는가?&quot; href=&quot;https://d2.naver.com/helloworld/59361&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://d2.naver.com/helloworld/59361&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹 프로그래밍(풀스택)</category>
      <category>browser</category>
      <category>browser의 동작</category>
      <category>CSS 파싱</category>
      <category>dom tree</category>
      <category>HTML</category>
      <category>렌더 트리</category>
      <category>배치</category>
      <category>브라우저</category>
      <category>브라우저의 동작</category>
      <category>최적화</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/16</guid>
      <comments>https://hisjeans.tistory.com/entry/browser%EC%9D%98-%EB%8F%99%EC%9E%91#entry16comment</comments>
      <pubDate>Wed, 29 Apr 2026 16:33:54 +0900</pubDate>
    </item>
    <item>
      <title>ADsP 2과목 개념원리 필기</title>
      <link>https://hisjeans.tistory.com/entry/ADsP-2%EA%B3%BC%EB%AA%A9-%EA%B0%9C%EB%85%90%EC%9B%90%EB%A6%AC-%ED%95%84%EA%B8%B0</link>
      <description>&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;2과목의 접근 전략&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 210px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 67px;&quot;&gt;
&lt;td style=&quot;width: 35.9302%; height: 67px;&quot; rowspan=&quot;6&quot;&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&amp;lt;2과목&amp;gt; 데이터분석 기획&lt;/b&gt;&lt;/h4&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 33.2558%; height: 172px;&quot; rowspan=&quot;4&quot;&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;데이터분석 기획의 이해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 30.6977%; height: 67px;&quot;&gt;분석 기획 방향성 도출&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 67px;&quot;&gt;
&lt;td style=&quot;width: 30.6977%; height: 67px;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;분석 방법론&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 30.6977%; height: 19px;&quot;&gt;분석 과제 발굴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 30.6977%; height: 19px;&quot;&gt;분석 프로젝트 관리 방안&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.2558%; height: 38px;&quot; rowspan=&quot;2&quot;&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;분석 마스터 플랜&lt;/b&gt;&lt;/h4&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 30.6977%; height: 19px;&quot;&gt;마스터 플랜 수립&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 30.6977%; height: 19px;&quot;&gt;분석 거버넌스 체계 수립&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1과목 &amp;lsquo;Why?&amp;rsquo; 2과목 &amp;lsquo;How to?&amp;rsquo;+&amp;rsquo;What?&amp;rsquo;&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;어떤 방법이 가장 좋은가?&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;어떤 방법이 &lt;b&gt;분석과제(목표)&lt;/b&gt;를 찾는데 가장 좋은가?&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;분석 목표 수립 과정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;&amp;lt;4가지 분석 주제 도출 과정&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;#분석 대상과 그 방법에 따른 4가지 분석 주제 ⭐️⭐️⭐️&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;분석 대상이 무엇인지 알고 있고 그 분석 방법도 알고 있다면 최적화(Optimization)&amp;rsquo; _Best&lt;/li&gt;
&lt;li&gt;분석 대상이 무엇인지 알고 있지만, 그 분석 방법을 모른다면 &amp;lsquo;솔루션(Solution)&amp;rsquo;&lt;/li&gt;
&lt;li&gt;분석 대상이 무엇인지도 모르고 그 분석 방법도 모른다면 있다면 &amp;lsquo;발견(Discovery)&amp;rsquo;&lt;/li&gt;
&lt;li&gt;분석 대상이 무엇인지는 모르지만, 그 분석 방법은 알고 있다면 &amp;lsquo;통찰(Insight)&amp;rsquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[분석 대상과 그 방법에 따른 4가지 분석 주제]&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;397&quot; data-origin-height=&quot;281&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZVYGM/dJMcahdazBE/BZ4tK6sJgen7fCcEptQAM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZVYGM/dJMcahdazBE/BZ4tK6sJgen7fCcEptQAM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZVYGM/dJMcahdazBE/BZ4tK6sJgen7fCcEptQAM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZVYGM%2FdJMcahdazBE%2FBZ4tK6sJgen7fCcEptQAM1%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;397&quot; height=&quot;281&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;397&quot; data-origin-height=&quot;281&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;lt;분석방법론#1_KDD 분석 방법론&amp;gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[KDD 분석 방법론(분석가의 관점) 프로세스]&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;데이터셋 선택 &amp;rarr; 데이터 전처리 &amp;rarr; 데이터 변환 &amp;rarr; 데이터 마이닝 &amp;rarr; 데이터 마이닝 결과 평가&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;541&quot; data-origin-height=&quot;442&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxpfXq/dJMcaiJSa0s/lwSDcSkO3mwpwtNuLl0s40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxpfXq/dJMcaiJSa0s/lwSDcSkO3mwpwtNuLl0s40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxpfXq/dJMcaiJSa0s/lwSDcSkO3mwpwtNuLl0s40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxpfXq%2FdJMcaiJSa0s%2FlwSDcSkO3mwpwtNuLl0s40%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;541&quot; height=&quot;442&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;541&quot; data-origin-height=&quot;442&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;lt;분석방법론#2_CRISP-DM 분석 방법론&amp;gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;#CRISP-DM 분석 방법론(&lt;span style=&quot;background-color: #9feec3;&quot;&gt;기획자의 관점&lt;/span&gt; vs KDD 분석의 관점) 프로세스&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: &lt;span style=&quot;background-color: #9feec3;&quot;&gt;6단계&lt;/span&gt;!!!&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; text-align: start; background-color: #9feec3;&quot;&gt;[1단계] &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;업무 이해&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;업무 목적 파악, 상황 파악, 데이터 마이닝 목표 설정, 프로젝트 기획 수립&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[2단계] 데이터 이해&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;초기 데이터 수집, 데이터 기술 분석(EDA), 데이터 탐색, 데이터 품질 확인 _ KDD에서 데이터 선택하는 부분&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[3단계] 데이터 준비&lt;/td&gt;
&lt;td&gt;분석용 데이터셋 선택, 데이터 정제, 분석용 데이터셋 편성, 데이터 통합, 데이터 포매팅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[4단계] 모델링&lt;/td&gt;
&lt;td&gt;모델링 기법 선택, 모델 테스트 계획 설계 모델 작성, 모델 평가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[5단계] 평가&lt;/td&gt;
&lt;td&gt;분석 결과 평가, 모델링 과정 평가, 모델 적용성 평가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[6단계] 전개&lt;/td&gt;
&lt;td&gt;전개 계획 수립, 모니터링과 유지보수 계획 수립, 프로젝트 종료 보고서 작성, 프로젝트 리뷰&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cijwee/dJMcagSSpKt/Zww876VitCJrEWfKwQgXz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cijwee/dJMcagSSpKt/Zww876VitCJrEWfKwQgXz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cijwee/dJMcagSSpKt/Zww876VitCJrEWfKwQgXz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcijwee%2FdJMcagSSpKt%2FZww876VitCJrEWfKwQgXz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;644&quot; height=&quot;564&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;564&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;lt;분석방법론#3_빅데이터분석방법론&amp;gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;빅데이터 분석 방법론을 다 외워야 하나? ⭐️⭐️⭐️&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;중요한 것은 전체의 흐름을 파악하는 것이다 5가지 단계는 반드시 기억해야 한다 그리고 각 단계별로 태스크 정도까지만 외워둬도 된다 입력자료, 프로세스 및 도구, 출력자료들을 모두 외우는 것보다는 5단계와 그에 따른 태스크가 어떤 것들이 있는지는 확실히 알아두는 것이 좋다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;분석 기획&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비즈니스 이해 및 범위 설정&lt;/li&gt;
&lt;li&gt;프로젝트 정의 및 계획 수립&lt;/li&gt;
&lt;li&gt;프로젝트 위험계획 수립&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;rarr; 데이터 준비&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;필요 데이터 정의&lt;/li&gt;
&lt;li&gt;데이터 스토어 설계&lt;/li&gt;
&lt;li&gt;데이터 수집 및 정합성 검정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;rarr; 데이터 분석&lt;/b&gt; -피드백&amp;rarr; 데이터 준비&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;분석용 데이터 준비&lt;/li&gt;
&lt;li&gt;텍스트 분석&lt;/li&gt;
&lt;li&gt;탐색적 분석&lt;/li&gt;
&lt;li&gt;모델링&lt;/li&gt;
&lt;li&gt;모델 평가 및 검증&lt;/li&gt;
&lt;li&gt;모델 적용 및 운영 방안 수립&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;rarr; 시스템 구현&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설계 및 구현&lt;/li&gt;
&lt;li&gt;시스템 테스트 및 운영&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;rarr; 평가 및 전개&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델 발전계획 수립&lt;/li&gt;
&lt;li&gt;프로젝트 평가 및 보고&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;lt;분석 과제 발굴_개념도&amp;gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;[분석 &lt;b&gt;과제&lt;/b&gt; 발굴 방법론 개념도] ⭐️⭐️⭐️⭐️&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하향식 접근법은 현황 분석을 통해서 또는 인식된 문제로부터 기회나 문제를 탐색하고, 문제를 정의, 해결 방안을 탐색, 데이터 분석의 타당성을 평가하는 과정을 거쳐 분석 과제를 도출하는 과정으로 구성되어 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 468px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 36px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 36px;&quot; colspan=&quot;4&quot;&gt;&lt;span&gt;Start&lt;/span&gt;&lt;br /&gt;&lt;span&gt;분석 대상이 무엇인지 알고 있는가?&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 37px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 37px;&quot; colspan=&quot;2&quot;&gt;Yes&lt;br /&gt;⬇️&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 37px;&quot; colspan=&quot;2&quot;&gt;No&lt;br /&gt;⬇️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 19px;&quot; colspan=&quot;2&quot;&gt;하향식 접근법&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 19px;&quot; colspan=&quot;2&quot;&gt;상향식 접근법(discovery) 빅데이터 &amp;rarr; 가치발견 &amp;rarr; 과제 접근&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;393&quot; data-origin-height=&quot;282&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXWFhz/dJMcaf0HqHf/CJhVveo3Uw80SQodZ1fBxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXWFhz/dJMcaf0HqHf/CJhVveo3Uw80SQodZ1fBxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXWFhz/dJMcaf0HqHf/CJhVveo3Uw80SQodZ1fBxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXWFhz%2FdJMcaf0HqHf%2FCJhVveo3Uw80SQodZ1fBxk%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;393&quot; height=&quot;282&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;393&quot; data-origin-height=&quot;282&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 114px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 209px;&quot; rowspan=&quot;4&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;가.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;문제 탐색 단계&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 114px;&quot;&gt;&lt;span&gt;a. 비즈니스 모델 탐색 기법&lt;/span&gt;&lt;br /&gt;&lt;span&gt;사업을 기획할 때 9가지로 블럭으로 나눔&lt;br /&gt;[비즈니스 모델 캔버스 9 Block]&lt;br /&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;D2.1-Lean-Startup-and-BMC-content-24-1080x675.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;675&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dksg7G/dJMcagk0153/frKkjDQtlCYB0YZf1WbkkK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dksg7G/dJMcagk0153/frKkjDQtlCYB0YZf1WbkkK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dksg7G/dJMcagk0153/frKkjDQtlCYB0YZf1WbkkK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdksg7G%2FdJMcagk0153%2FfrKkjDQtlCYB0YZf1WbkkK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;675&quot; data-filename=&quot;D2.1-Lean-Startup-and-BMC-content-24-1080x675.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;675&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;rarr; 5개 영역으로 단순화(규제와 감사, 업무, 제품, 고객, 지원 인프라 5가지 측면에서 과제 분석)&lt;br /&gt;[9 Block 모델을 5개 영역으로 단순화]&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;309&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJaIgi/dJMcadaHQdD/3f5HCMkknoAP1Ja1duwId1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJaIgi/dJMcadaHQdD/3f5HCMkknoAP1Ja1duwId1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJaIgi/dJMcadaHQdD/3f5HCMkknoAP1Ja1duwId1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJaIgi%2FdJMcadaHQdD%2F3f5HCMkknoAP1Ja1duwId1%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;340&quot; height=&quot;309&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;309&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 171px;&quot; rowspan=&quot;2&quot;&gt;가. 지도, 비지도 학습&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 114px;&quot;&gt;&lt;span&gt;a. 지도학습(정답 주고 알려주는 것, 학습시킴)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 57px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 57px;&quot;&gt;&lt;span&gt;b. 분석기회 발굴 및 범위 확장&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;기업 내부에서만 발굴하지 않는다는 의미에서&lt;br /&gt;[분석 기회 발굴 범위의 확장]&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2026-04-29-14-55-37.jpeg&quot; data-origin-width=&quot;943&quot; data-origin-height=&quot;752&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tN7hI/dJMcadV6wZJ/W24lWQNSSrezbLdsAjBxz0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tN7hI/dJMcadV6wZJ/W24lWQNSSrezbLdsAjBxz0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tN7hI/dJMcadV6wZJ/W24lWQNSSrezbLdsAjBxz0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtN7hI%2FdJMcadV6wZJ%2FW24lWQNSSrezbLdsAjBxz0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;943&quot; height=&quot;752&quot; data-filename=&quot;KakaoTalk_Photo_2026-04-29-14-55-37.jpeg&quot; data-origin-width=&quot;943&quot; data-origin-height=&quot;752&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 57px;&quot;&gt;&lt;span&gt;b. 비지도 학습(정답 알려주지 않고 규칙 찾아가며 분류해나가도록 시키는 것)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 19px;&quot;&gt;c. 외부 참조 모델 기반 문제 탐색&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 19px;&quot;&gt;&lt;span&gt;&lt;span&gt;나. 프로토타입&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 19px;&quot;&gt;시행착오 해결법(시간, 자원 허락할 때만 가능한 방법) 이지만 POC(proof of concept): 거대한 프로젝트 진행 전 미니 프로젝트, 토이 프로젝트 진행하는 특수한 경우도 존재&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 19px;&quot;&gt;d. 분석 유스케이스&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 186px;&quot; colspan=&quot;2&quot; rowspan=&quot;4&quot;&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 38px;&quot;&gt;나. 문제 정의 단계&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 38px;&quot;&gt;식별된 비즈니스 문제를 데이터 문제로 변환하여 과제를 정의&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 74px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 74px;&quot;&gt;다. 해결 방안 탐색 단계&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 74px;&quot;&gt;&lt;span&gt;과제 정의 후&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;어떻게 해결할 것인지&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;그 방안을 탐색(분석 기법, 시스템 등)&lt;br /&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;496&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boZ6xa/dJMcabRx8DS/f52Yj1KD1sUfONEYEnqVpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boZ6xa/dJMcabRx8DS/f52Yj1KD1sUfONEYEnqVpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boZ6xa/dJMcabRx8DS/f52Yj1KD1sUfONEYEnqVpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboZ6xa%2FdJMcabRx8DS%2Ff52Yj1KD1sUfONEYEnqVpk%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;496&quot; height=&quot;327&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;496&quot; data-origin-height=&quot;327&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 55px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 55px;&quot;&gt;라. 타당성 검토 단계&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 55px;&quot;&gt;&lt;br /&gt;경제적 타당성, 기술적 타당성 등 검토&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;lt;분석 과제 발굴 case&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;항공사 고객 이탈 사례 발생&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;당신이 어느 항공사의 CEO라고 가정해보자&lt;/li&gt;
&lt;li&gt;최근 들어 항공사의 고객 이탈수가 증가했다&lt;/li&gt;
&lt;li&gt;이 문제를 해결하기 위해 하향식 접근법을 사용하자&lt;/li&gt;
&lt;/ul&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;b&gt;[9 Block 모델을 5개 영역으로 단순화]&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;비즈니스 모델 기반 문제 탐색(search의 단계)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;규제와 감사(외적 영역)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mEooG/dJMcahqIU8K/9j442jKl0lYBifacvVqwy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mEooG/dJMcahqIU8K/9j442jKl0lYBifacvVqwy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mEooG/dJMcahqIU8K/9j442jKl0lYBifacvVqwy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmEooG%2FdJMcahqIU8K%2F9j442jKl0lYBifacvVqwy0%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;684&quot; height=&quot;505&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;인프라-시스템 측면&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2단계-문제 정의 단계&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 비즈니스의 문제를 데이터의 문제로 바꿔야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 475px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 57px;&quot;&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;[1단계] 비즈니스 문제 탐색&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&amp;rarr; [2단계] 데이터의 문제 ⭐️&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;&amp;nbsp;&amp;rarr; [3단계] 해결 방안 탐색&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;&amp;nbsp;&amp;rarr; [4단계] 타당성 검토(최종적 발굴)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;업무: 고객이 항공권 발권에 너무 많은 시간을 소비하고 있다&lt;/td&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;&amp;rarr; 타 항공사 대비 항공권 발권에 소요되는 시간을 비교 분석&lt;/td&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;&amp;rarr; 분석 역량 확보, 기존 시스템 활용&lt;/td&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;&amp;rarr; 타당한 분석 과제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;제품: 타 항공사 대비 항공권 가격이 비쌀 수 있다&lt;/td&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;&amp;rarr; 타 항공사 대비 동일 노선에 대한 항공권 가격 비교 분석&lt;/td&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;&amp;rarr; 분석 역량 확보, 기존 시스템 활용&lt;/td&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;&amp;rarr; 과제 선정 탈락&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 57px;&quot;&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;고객: 고객이 원하는 서비스에 변화가 생겼을 수 있다&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;&amp;rarr; 고객의 수요가 저렴한 티켓보다 안락한 좌석, 향상된 기내 서비스 등으로 변화하였는가? / 고객 니즈 분석(후기, 인터넷 평가 등 분석)&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;&amp;rarr; 분석 역량 확보, 기존 시스템 활용 / &amp;rarr; 분석 역량 확보, 신규 시스템 도입(돈 들어감)&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;&amp;rarr; 타당한 분석 과제 / &amp;rarr; 타당한 분석 과제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 57px;&quot;&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;규제&amp;amp;감사: 보안상의 문제로 항공권 발권에 지나친 개인정보를 요구하고 있을 수 있다&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;&amp;rarr; 고객의 입장에서 발권 시 입력하기를 주저하는 항목이 있는가?&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;&amp;rarr; 분석 역량 확보, 신규 시스템 도입&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;&amp;rarr; 과제 선정 탈락&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 57px;&quot;&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;지원 인프라: 온라인 발권 시 IT 시스템 문제로 불편함이 발생할 수 있다&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;&amp;rarr; 고객 관점에서 온라인 발권 IT 시스템 점검 및 불편 사항 분석&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;분석 역량 미확보, 기존 시스템 활용&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;&amp;rarr; 타당한 분석 과제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 57px;&quot;&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;동종 업계 1: 여러 노선의 최적화로 가능한 한 많은 고객이 원하는 시간을 맞추었다&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;&amp;rarr; 동종 업계 현황 분석: 현재 우리의 노선과 일정에 대한 고객의 만족 여부를 조사한다&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;분석 역량 미확보, 신규 시스템 도입( 거의 최악의 상황, 나중의 타당성 검토 단계에서 점수를 높게 받기 어려워 탈락할 가능성 높음)&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;&amp;rarr; 과제 선정 탈락&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 57px;&quot;&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;동종 업계2: 하나의 노선에 특화된 전략으로 하나의 노선을 독점할 수 있다&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;&amp;rarr; 우리 항공기를 이용하는 고객은 주로 어느 노선을 이용하는지 조사한다&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;분석 역량 확보, 신규 시스템 도입&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;&amp;rarr; 타당한 분석 과제&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;317&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4wujO/dJMcagk03fy/uOeB1NjuApaN6HgZnFV29K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4wujO/dJMcagk03fy/uOeB1NjuApaN6HgZnFV29K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4wujO/dJMcagk03fy/uOeB1NjuApaN6HgZnFV29K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4wujO%2FdJMcagk03fy%2FuOeB1NjuApaN6HgZnFV29K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;317&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;317&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;주로 탈락하는 과제는 역량 미확보, 신규 시스템 도입&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;분석 역량 확보, 기존 시스템 활용 - 이유가 있을 것, 임의의 예&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;lt;분석 마스터 플랜 수립 FraimWork&amp;gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[분석 마스터플랜 수립 프레임워크(일종의 틀 개념)]&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;분석 마스터플랜?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ㄴ 분석의 A~Z까지 모든 일련의 과정들에 대한 계획 수립&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;우선순위 고려요소(전략적 중요도, 비즈니스 성과/ROI, 실행 용이성) -적용 우선순위 설정&amp;rarr; 적용범위/방식 고려 요소(업무 내재화 적용 수준, 분석 데이터 적용 수준, 기술 적용 수준) Analysis 구현 로드맵 수립&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[예제]&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다음 중 분석 마스터플랜에 대한 설명으로 가장 부적절한 것은 무엇인가?&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;탐색한 문제에 대하나 해결 방안들을 총체적인 관점에서 적용 우선순위를 설정하기 위함이다&lt;/li&gt;
&lt;li&gt;우선순위 결정을 위해서는 전략적 중요도, ROI 관점 등의 요소를 고려한다&lt;/li&gt;
&lt;li&gt;적용 범위 및 방식을 고려하기 위해 실행 용이성과 기술 적용 수준의 요소를 고려한다&lt;/li&gt;
&lt;li&gt;분석 마스터플랜은 분석 과제 도출, 우선순위 평가, 이행계획 수립 순서로 수행된다&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;lt;분석 거버넌스 체계 수립&amp;gt;&lt;/b&gt;&lt;/h3&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-filename=&quot;blob&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;411&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bC3lkw/dJMcacwbJ92/QJogXRoMtrbPTSBgGdz1x0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bC3lkw/dJMcacwbJ92/QJogXRoMtrbPTSBgGdz1x0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bC3lkw/dJMcacwbJ92/QJogXRoMtrbPTSBgGdz1x0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbC3lkw%2FdJMcacwbJ92%2FQJogXRoMtrbPTSBgGdz1x0%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;450&quot; height=&quot;411&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;411&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;분석조직, 분석전문인력, 분석개발/확산/평가 프로세스, 분석수준 진단, 분석 교육 5가지 영역의 체계(거버넌스 시스템)을 갖춤, 일종의 정부&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;분석 거버넌스 체계 수립하면 분석의 선순환이 잘 이루어지게 됨&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조직(Organization): 분석 기획 및 관리를 수행&lt;/li&gt;
&lt;li&gt;과제 기획 및 운영 프로세스(Process)&lt;/li&gt;
&lt;li&gt;분석 관련 시스템(System)&lt;/li&gt;
&lt;li&gt;데이터(Data)&lt;/li&gt;
&lt;li&gt;분석 관련 교육 및 마인드 육성 체계(Human Resource)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;lt;분석 준비도&amp;amp;성숙도 평가&amp;gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[분석 준비도 평가]&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 426px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;분석 업무 파악&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;분석 인력 및 조직&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;&amp;nbsp;분석 기법&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 95px;&quot;&gt;
&lt;td style=&quot;height: 95px;&quot;&gt;&amp;bull; 발생한 사실 분석 업무&lt;br /&gt;&amp;bull; 예측 분석 업무&lt;br /&gt;&amp;bull; 시뮬레이션 분석 업무&lt;br /&gt;&amp;bull; 최적화 분석 업무&lt;br /&gt;&amp;bull; 분석 업무 정기적 개선&lt;/td&gt;
&lt;td style=&quot;height: 95px;&quot;&gt;&amp;bull; 분석전문가 직무 존재&lt;br /&gt;&amp;bull; 분석전문가 교육 훈련프로그램&lt;br /&gt;&amp;bull; 관리자 기본 분석 능력&lt;br /&gt;&amp;bull; 전사총괄조직&lt;br /&gt;&amp;bull; 경영진 분석 업무 이해&lt;/td&gt;
&lt;td style=&quot;height: 95px;&quot;&gt;&amp;bull; 업무별 적합한 분석 기법 사용&lt;br /&gt;&amp;bull; 분석 업무 도입 방법론&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &amp;bull; &lt;/span&gt;분석 기법 라이브러리&lt;br /&gt;&amp;bull; 분석 기법 효과성 평가&lt;br /&gt;&amp;bull; 분석 기법 정기적 개선&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;분석 데이터&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;분석 문화&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;IT 인프라&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 95px;&quot;&gt;
&lt;td style=&quot;height: 95px;&quot;&gt;&amp;bull; 분석 업무를 위한 데이터&lt;br /&gt;&amp;bull; 충준성/신뢰성/적시성&lt;br /&gt;&amp;bull; 비구조적 데이터 관리&lt;br /&gt;&amp;bull; 외부데이터 활용 체계&lt;br /&gt;&amp;bull; 기준 데이터 관리(MDM)&lt;/td&gt;
&lt;td style=&quot;height: 95px;&quot;&gt;&amp;bull; 사실에 근거한 의사결정&lt;br /&gt;&amp;bull; 관리자의 데이터 중시&lt;br /&gt;&amp;bull; 회의 등에서 데이터 활용&lt;br /&gt;&amp;bull; 경영진 직관보다 데이터 활용&lt;br /&gt;&amp;bull; 데이터 공유 및 협업 문화&lt;/td&gt;
&lt;td style=&quot;height: 95px;&quot;&gt;&amp;bull; 운영 시스템 데이터 통합&lt;br /&gt;&amp;bull; EAI, ETL 등 데이터 유통체계&lt;br /&gt;&amp;bull; 분석 전용 서버 및 스토리지&lt;br /&gt;&amp;bull; 빅데이터/통계/비주얼 분석환경&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;b&gt;[분석 성숙도(기업의 문화 얼마나 발달했는가 느낌) 평가]&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;단계&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;내용&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;비즈니스 부문&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;조직, 역량 부문&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;IT 부문&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[1단계] 도입&lt;/td&gt;
&lt;td&gt;분석 시작, 환경과 시스템 구축&lt;/td&gt;
&lt;td&gt;&amp;bull; 실적 분석 및 통계&lt;br /&gt;&amp;bull; 정기 보고 수행&lt;br /&gt;&amp;bull; 운영 데이터 기반&lt;/td&gt;
&lt;td&gt;&amp;bull; 일부 부서에서 수행&lt;br /&gt;&amp;bull; 담당자 역량에 의존&lt;/td&gt;
&lt;td&gt;&amp;bull; 데이터 웨어하우스&lt;br /&gt;&amp;bull; 데이터 마트&lt;br /&gt;&amp;bull; ETL/EAI&lt;br /&gt;&amp;bull; OLAP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[2단계] 활용&lt;/td&gt;
&lt;td&gt;분석 결과를 업무에 적용&lt;/td&gt;
&lt;td&gt;&amp;bull; 미래결과 예측&lt;br /&gt;&amp;bull; 시뮬레이션&lt;br /&gt;&amp;bull; 운영 데이터 기반&lt;/td&gt;
&lt;td&gt;&amp;bull; 전문담당부서 수행&lt;br /&gt;&amp;bull; 분석 기법 도입&lt;br /&gt;&amp;bull; 관리자가 분석 수행&lt;/td&gt;
&lt;td&gt;&amp;bull; 실시간 대시보드&lt;br /&gt;&amp;bull; 통계분석 환경&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[3단계] 확산&lt;/td&gt;
&lt;td&gt;전사 차원에서 분석 관리, 공유&lt;/td&gt;
&lt;td&gt;&amp;bull; 전사성과 실시간 분석&lt;br /&gt;&amp;bull; 프로세스 혁신 3.0&lt;br /&gt;&amp;bull; 분석규칙 관리&lt;br /&gt;&amp;bull; 이벤트 관리&lt;/td&gt;
&lt;td&gt;&amp;bull; 전사 모든 부서 수행&lt;br /&gt;&amp;bull; 분석 COE 운영&lt;br /&gt;&amp;bull; 데이터 사이언티스트 확보&lt;/td&gt;
&lt;td&gt;&amp;bull; 빅데이터 관리 환경&lt;br /&gt;&amp;bull; 시뮬레이션, 최적화&lt;br /&gt;&amp;bull; 비주얼 분석&lt;br /&gt;&amp;bull; 분석 전용 서버&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[4단계] 최적화&lt;/td&gt;
&lt;td&gt;분석을 진화시켜 혁신 및 성과 향상에 기여&lt;/td&gt;
&lt;td&gt;&amp;bull; 외부 환경 분석 활용&lt;br /&gt;&amp;bull; 최적화 업무 적용&lt;br /&gt;&amp;bull; 실시간 분석&lt;br /&gt;&amp;bull; 비즈니스 모델 진화&lt;/td&gt;
&lt;td&gt;&amp;bull; 데이터 사이언스 그룹&lt;br /&gt;&amp;bull; 경영진 분석 활용&lt;br /&gt;&amp;bull; 전략 연계&lt;/td&gt;
&lt;td&gt;&amp;bull; 분석 협업환경&lt;br /&gt;&amp;bull; 분석 SandBox&lt;br /&gt;&amp;bull; 프로세스 내재화&lt;br /&gt;&amp;bull; 빅데이터 분석&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;분석 준비도, 분석 성수도 score &amp;rarr;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt; [분석 준비도 및 성숙도 진단 결과를 4분면으로 구분]***&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&amp;lsquo;준정확도 시계방향&amp;rsquo;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;398&quot; data-origin-height=&quot;509&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b70jU7/dJMcafTYm5q/iChXPGjVvSea8fs8RAOc70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b70jU7/dJMcafTYm5q/iChXPGjVvSea8fs8RAOc70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b70jU7/dJMcafTYm5q/iChXPGjVvSea8fs8RAOc70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb70jU7%2FdJMcafTYm5q%2FiChXPGjVvSea8fs8RAOc70%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;398&quot; height=&quot;509&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;398&quot; data-origin-height=&quot;509&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;[분석 조직의 유형]***&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;집중구조: 별도의 독립적인 데이터 분석 팀에서 데이터 분석 업무하도록 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;기능구조: 별도의 분석가 없이 일반 부서에서 데이터 분석 업무 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;분산 구조: 별도의 독립적인 데이터 분석 조직 있음(=집중구조), 각 부서에서도 데이터 분석 전문가가 있지만 이들은 각 부서 소속이 아닌 전문 분석 팀에서 파견 나온 것, 분석팀 소속(&amp;ne; 기능구조는 분석가들이 일반부서 소속, 집줓구조와 기능구조의 혼합 형태)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2026-04-29-15-08-29.jpeg&quot; data-origin-width=&quot;1889&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czMLxP/dJMcac3YDDD/MsGSJ4SvPlutz2Pe7s1bu0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czMLxP/dJMcac3YDDD/MsGSJ4SvPlutz2Pe7s1bu0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czMLxP/dJMcac3YDDD/MsGSJ4SvPlutz2Pe7s1bu0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczMLxP%2FdJMcac3YDDD%2FMsGSJ4SvPlutz2Pe7s1bu0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1889&quot; height=&quot;486&quot; data-filename=&quot;KakaoTalk_Photo_2026-04-29-15-08-29.jpeg&quot; data-origin-width=&quot;1889&quot; data-origin-height=&quot;486&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;참고 자료&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a title=&quot;왕초보 비전공자를 위한 ADsP 2과목 개념원리 특강 | 미어캣 | adsp 독학 | 벼락치기&quot; href=&quot;https://youtu.be/k2Yt1STulpk?si=82iIhkDteGo8zhVa&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://youtu.be/k2Yt1STulpk?si=82iIhkDteGo8zhVa&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=k2Yt1STulpk&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/wyRux/dJMb887bZkY/n8xhhClTJXOdkuipSqS0K0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/bERqjE/dJMb82eQa54/XnWwU8pagZ6ZR0FfokIRVK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;비빅터&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/k2Yt1STulpk&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;What is a Business Model Canvas?&quot; href=&quot;https://merlin-ict.eu/what-is-a-business-model-canvas/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://merlin-ict.eu/what-is-a-business-model-canvas/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777442980295&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;What is a Business Model Canvas? | Merlin ICT&quot; data-og-description=&quot;The Business Model Canvas (BMC) tool which helps to map existing business models, improve them and invent new ones. It has 9 building blocks, each of which is described in detail and using real life examples: The BMC itself has two stages &amp;ndash; the front sta&quot; data-og-host=&quot;merlin-ict.eu&quot; data-og-source-url=&quot;https://merlin-ict.eu/what-is-a-business-model-canvas/&quot; data-og-url=&quot;https://merlin-ict.eu/what-is-a-business-model-canvas/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/oQeMi/dJMb9hC4qLu/aZ3tYBUQoC3WTSaK5EOYUk/img.jpg?width=1080&amp;amp;height=675&amp;amp;face=0_0_1080_675&quot;&gt;&lt;a href=&quot;https://merlin-ict.eu/what-is-a-business-model-canvas/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://merlin-ict.eu/what-is-a-business-model-canvas/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/oQeMi/dJMb9hC4qLu/aZ3tYBUQoC3WTSaK5EOYUk/img.jpg?width=1080&amp;amp;height=675&amp;amp;face=0_0_1080_675');&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;What is a Business Model Canvas? | Merlin ICT&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The Business Model Canvas (BMC) tool which helps to map existing business models, improve them and invent new ones. It has 9 building blocks, each of which is described in detail and using real life examples: The BMC itself has two stages &amp;ndash; the front sta&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;merlin-ict.eu&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>ADsP 준비</category>
      <category>ADsP</category>
      <category>adsp2과목</category>
      <category>adsp필기</category>
      <category>기획</category>
      <category>데이터분석</category>
      <category>데이터분석준전문가</category>
      <category>분석</category>
      <category>필기</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/15</guid>
      <comments>https://hisjeans.tistory.com/entry/ADsP-2%EA%B3%BC%EB%AA%A9-%EA%B0%9C%EB%85%90%EC%9B%90%EB%A6%AC-%ED%95%84%EA%B8%B0#entry15comment</comments>
      <pubDate>Wed, 29 Apr 2026 15:12:13 +0900</pubDate>
    </item>
    <item>
      <title>ADsP 1과목 개념원리 필기</title>
      <link>https://hisjeans.tistory.com/entry/ADsP-1%EA%B3%BC%EB%AA%A9-%EA%B0%9C%EB%85%90%EC%9B%90%EB%A6%AC-%ED%95%84%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;# 암묵지와 형식지&lt;/b&gt;⭐️⭐️&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;암묵지(Tacit Knowledge):&lt;/b&gt; &amp;lsquo;학습과 체험을 통해 개인에게 습득되어 있지만, 겉으로 드러나지 않는 상태의 지식&amp;rsquo;을 말한다 머릿속에 존재하는 지식으로, 언어나 문자를 통해 나타나지 않는 지식이다 또한 암묵지는 대개 시행착오와 같은 경험을 통해 체득하는 경우가 많다 지식이 드러나지 않고 &amp;lsquo;숨겨져 있다&amp;rsquo;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;형식지(Explicit Knowledge):&lt;/b&gt; &amp;lsquo;암묵지가 문서나 매뉴얼처럼 외부로 표출돼 여러 사람이 공유할 수 있는 지식&amp;rsquo;을 말한다 교과서, 데이터베이스, 신문, 비디오와 같이 어떤 형태로든 형상화된 지식은 형식지라고 할 수 있다 문서나 &amp;lsquo;메뉴얼&amp;rsquo;처럼 외부로 표출돼 여러 사람이 공유할 수 있는 지식&lt;/li&gt;
&lt;li&gt;&lt;b&gt;암묵지와 형식지의 상호작용:&lt;/b&gt; 공유화되기 어려운 암묵지가 형식지로 표출되고 연결되면 그 상호작용으로 지식이 형성된다 개인에게 내면화된 암묵지가 조직의 지식으로 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;공통화&lt;/span&gt;되기 위해서는(형식지가 되기 위해서는) 표출화하고 이를 다시 개인의 지식으로 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;연결화&lt;/span&gt;하는 과정을 거치게 된다&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[암묵지와 형식지의 상호작용]⭐️⭐️&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;암묵지&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;형식지&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;공통화&lt;/td&gt;
&lt;td&gt;표출화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;내면화&lt;/td&gt;
&lt;td&gt;연결화&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;암묵지 -조직의 지식으로 공통화를 위한 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;표출화&lt;/span&gt;&amp;rarr; 형식지&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;형식지 -개인에게 연결 및 습득되는 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;내면화&lt;/span&gt;&amp;rarr; 암묵지&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;DIKW 피라미드⭐️⭐️⭐️&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;개별 각각의 데이터가 &amp;lsquo;의미&amp;rsquo;를 갖게 되는 것이 지혜를 얻는 과정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 데이터에서 지혜를 얻는 과정&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터: A는 100원 B는 200원에 연필을 판매한다 &amp;rarr;&lt;/li&gt;
&lt;li&gt;정보: 연필이 더 저렴하다 &amp;rarr;&lt;/li&gt;
&lt;li&gt;지식: 더 저렴한 A로부터 연필을 사야겠다 &amp;rarr;&lt;/li&gt;
&lt;li&gt;지혜: A의 다른 물건도 저렴할 것이다(추측, 예상)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(참고) 빅데이터&amp;rarr;통찰력(Insight가 wisdom이란 개념에서 출발)&amp;rarr;기업 이윤&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 데이터 단위&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1바이드(byte)=8비트(bit)&lt;/li&gt;
&lt;li&gt;1킬로바이트(KB)=1024바이트(byte)&lt;/li&gt;
&lt;li&gt;1메가바이트(MB)=1024킬로바이트(KB)&lt;/li&gt;
&lt;li&gt;1기가바이트(GB)=1024메가바이트(MB)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;1테라바이트(TB)=1024기가바이트(GB)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;1페타바이트(PB)=1024테라바이트(TB)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;1엑사바이트(EB)=1024페타바이드(PB)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;1제타바이트(ZB)=1024엑사바이트(EB)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;1요타바이드(YB)=1024제타바이트(ZB)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;TPEZY&lt;/span&gt;로 암기&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[데이터베이스의 일반적인 특징] (필연적으로 데이터베이스가 가지고 있는 속성, 내적개념)&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;내용&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;통합된 데이터&lt;/td&gt;
&lt;td&gt;동일한 내용의 데이터가 중복되어 있지 않다(유일성과 관계)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;저장된 데이터&lt;/td&gt;
&lt;td&gt;컴퓨터 매체가 접근할 수 있는 저장 매체에 저장되어 있다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;공용 데이터&lt;/td&gt;
&lt;td&gt;여러 사용자가 공유할 수 있다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;변화하는 데이터&lt;/td&gt;
&lt;td&gt;삽입, 수정, 삭제를 통해 항상 최신의 정확한 데이터를 유지해야 한다&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;ne;&lt;/b&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[데이터베이스의 다양한 측면에서의 특성]⭐️⭐️⭐️(관점, 외적개념)&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;정보의 축적 및 전달 측면&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&amp;bull; 기계 가독성: 대량의 정보를 일정한 형식에 따라 컴퓨터 등의 정보처리기기가 읽고 쓸 수 있다 &lt;br /&gt;&amp;bull; 검색 가능성: 다양한 방법으로 필요한 정보를 검색할 수 있다 &lt;br /&gt;&amp;bull; 원격 조작성: 정보통신망을 통해 원거리에서도 즉시 온라인으로 이용 가능하다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;정보이용 측면&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;bull; 이용자의 정보요구에 따라 다양한 정보를 신속하게 획득할 수 있고 원하는 정보를 정확하고 경제적으로 찾아낼 수 있다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;정보관리 측면&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;정보를 일정한 질서와 구조에 따라 정리 및 저장하고 검색 및 관리할 수 있게 하여 방대한 양의 정보를 체계적으로 축적하고, 새로운 내용 추가나 갱신이 용이하다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;정보기술발전 측면&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&amp;bull; 데이터베이스는 정보처리, 검색 및 관리 소프트웨어, 관련 하드웨어, 정보 전송을 위한 네트워크 기술 등의 발전을 견인할 수 있다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;경제 및 산업적&lt;/b&gt;&lt;b&gt; 측면&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;bull; 데이터베이스는 다양한 정보를 필요에 따라 신속하게 제공 및 이용할 수 있는 인프라의 특성을 가지고 있어 경제, 산업, 사회 활동의 효율성을 제고하고 국민의 편의를 증진하는 수단으로써의 의미를 가진다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;(참고) 데이터베이스 트랜잭션 특성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;트랜잭션(Transaction)이란 데이터베이스에서 명령을 수행하는 하나의 논리적인 기능의 단위, 데이터베이스에서 명령이 수행됨에 따라 변화가 생기는데, 잘못된 명령 혹은 여러 사용자에 의한 명령 등과 같은 다양한 상황에서 데이터를 보호하기 위해 트랜잭션에는 다음과 같은 4가지 특성이 있다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;원자성(Atomicity): 트랜잭션이 데이터베이스에 모두 적용되거나 또는 모두 적용되지 않아야 한다&lt;/li&gt;
&lt;li&gt;일관성(Consistency): 트랜잭션의 결과는 항상 일관성을 띠어야 한다&lt;/li&gt;
&lt;li&gt;고립성(Isolation): 하나의 트랜잭션이 다른 트랜잭션에 영향을 주지 않아야 한다&lt;/li&gt;
&lt;li&gt;지속성(Durability): 트랜잭션이 성공적으로 수행된 경우 그 결과는 영구적이어야 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[무분별 사회 기반 구조 데이터베이스]⭐️⭐️&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;물류 부문&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;bull; &amp;lsquo;실시간 차량 추적&amp;rsquo;을 위한 종합물류정보망 구축 &lt;br /&gt;&amp;bull; CVO 서비스, EDI 서비스, 물류 정보 DB 서비스, 부가서비스로 구성 &lt;br /&gt;&amp;bull; CALS(Commerce At Light Speed): 제품의 설계 및 개발, 생산에서 유통 및 폐기에 이르기까지 제품의 라이프사이클 전반에 관련된 데이터를 통합하고 공유 및 교환할 수 있게 한 경영통합정보시스템을 말한다 &lt;br /&gt;&amp;bull; PORT-MS: 항만운영정보시스템 &lt;br /&gt;&amp;bull; KROIS: 철도운영정보시스템&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;지리 부문&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&amp;bull; GIS 응용에 활용하는 4S 통합기술 &amp;bull; 지리정보유통망 가시화: 지리정보통합관리소 운영, 지리벙보 수요자에 정보 제공 &amp;bull; GIS(Geographic Information System): 지리정보시스템 &amp;bull; LBS(Location-Based Service): 위치정보서비스 &amp;bull; SIM(Spatial Information Management): 공간정보 관리시스템&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;교통 부문&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;bull; 지능형교통정보시스템(TS), 교통정보, 기초자료 및 통계 제공, 대국민 서비스 확대&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;의료 부문&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;bull; 의료정보시스템: 처방전달시스템, 임상병리, 전자의무기록, 영상처리시스템, 병원의 멀티미디어, 원격의료, 지식정보화 &lt;br /&gt;&amp;bull; HL7 국내 표준화 작업에 따라 전국적인 진료 정보 공유 체계 구축 계획 수립 &lt;br /&gt;&amp;bull; U헬스 실현에 기존 의료정보 데이터베이스 기반 활용 &lt;br /&gt;&amp;bull; PACS(Picture Archiving and Communications System) &lt;br /&gt;&amp;bull; U-Health(Ubiquitous-Health)&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;교육 부문&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&amp;bull; 첨단 정보통신기술(ICT)을 활용한 각종 교육 정보의 개발 및 보급, 정보 활용 교육 &lt;br /&gt;&amp;bull; 대학 정보화 및 교육행정 정보화 위주로 사업 추진 &lt;br /&gt;&amp;bull; 교육행정정보시스템(NEIS)은 학사뿐만 아니라 기타 교육행정 전 업무를 처리하는 시스템&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;이름&lt;/td&gt;
&lt;td&gt;성별&lt;/td&gt;
&lt;td&gt;주민등록번호&lt;/td&gt;
&lt;td&gt;전화번호&lt;/td&gt;
&lt;td&gt;작업&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(사람)1&lt;/td&gt;
&lt;td&gt;장영실&lt;/td&gt;
&lt;td&gt;남자&lt;/td&gt;
&lt;td&gt;000101-1234567&lt;/td&gt;
&lt;td&gt;010-1234-5678&lt;/td&gt;
&lt;td&gt;발명가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(사람)2&lt;/td&gt;
&lt;td&gt;홍길동&lt;/td&gt;
&lt;td&gt;남자&lt;/td&gt;
&lt;td&gt;000202-2345678&lt;/td&gt;
&lt;td&gt;010-2345-6789&lt;/td&gt;
&lt;td&gt;도적&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(사람)3&lt;/td&gt;
&lt;td&gt;임꺽정&lt;/td&gt;
&lt;td&gt;남자&lt;/td&gt;
&lt;td&gt;000303-3456789&lt;/td&gt;
&lt;td&gt;010-3456-7890&lt;/td&gt;
&lt;td&gt;백정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;span style=&quot;background-color: #9feec3;&quot;&gt;메타데이터:&lt;/span&gt;&lt;/b&gt; 사진 파일(에만 있는 것이 아니라 특정 파일에 숨겨져 있는 정보)의 속성 정보를 보면 사진 파일이 언제, 어디서 생성되었는지 알려주는 추가적인 데이터가 존재하는데, 이처럼 데이터를 설명하는 데이터를 메타데이터라 한다&lt;/li&gt;
&lt;li&gt;인덱스: 데이터베이스에서 데이터를 저장할 때 내부에서 자동적으로 데이터의 이름을 지정하게 되는데, 이때 부여되는 이름들을 인덱스라 한다 인덱스는 사용자(임의 설정)의 질의에 신속하게 응답하고 정렬하고 탐색할 수 있도록 도와주는 책의 색인과 비슷한 역할을 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;데이터의 집합인 데이터베이스는 엔터티, 속성, 인스턴스 등 여러 요소들로 구성되어 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;#데이터 마트(DM)와 데이터 웨어하우스(DW)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;데이터 마트와 데이터 웨어하우스는 일반적인 개념의 데이터베이스이지만 목적이 조금 다른 형태의 데이터베이스다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;일반적인 데이터베이스는 데이터 유형에 상관없이 정보의 집합체를 의미하지만 데이터의 형태가 USB에 담긴 CSV 파일, HDD/SSD에 저장된 엑셀 파일, DBSM에 담긴 데이터 또는 클라우드에 업로드된 형태의 여러 가지 파일이 될 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그러나 데이터 웨어하우스(DW)는 이렇게 분산된 환경에 흩어져 있는 데이터들을 개인이나 조직이 총제적인 관점에서 의사결정을 위해 공통의 형식으로 변환해 관리하는 역할을 하며, 데이터 마트는 데이터 웨어하우스로부터 추출된 작은 데이터 베이스로서 특정 목표를 달성하는데 필요한 데이터를 제공하는 역할을 한다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;622&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z7Ioe/dJMcahKXgIS/mneETknXYX82f0pXFdM3t0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z7Ioe/dJMcahKXgIS/mneETknXYX82f0pXFdM3t0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z7Ioe/dJMcahKXgIS/mneETknXYX82f0pXFdM3t0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz7Ioe%2FdJMcahKXgIS%2FmneETknXYX82f0pXFdM3t0%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;658&quot; height=&quot;622&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;622&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;rArr; DW 비용, 시간 많이 듦 &amp;rArr; 다양한 정형 데이터를 모아 여러 곳에서 분석하게 하자, Lake에 담자&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;#데이터 레이크(Data Lake) &amp;ldquo;분류하지 말고 다 담을 수 없을까?&amp;rdquo;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;빅데이터 시대에 접어들면서 나날이 증가하는 방대한 데이터와 새로운 포맷의 데이터를 수집하고 축적 및 활용해야 한다는 환경의 니즈가 증가하면서 기업들은 종전의 ETL과 DW 구축 및 관리만으로는 한계에 다다랐다 이러한 이유로 많은 기업이 정형 데이터로 구성된 전통적인 데이터 외에 수많은 비정형 데이터(소셜 텍스트, 센서 데이터, 이미지, 동영상 등)를 실시간으로 수집, 정제, 통합, 분석해 활용하기 위해 데이터 레이크라는 새로운 개념의 데이터 관리 플랫폼을 도입하고 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;#더그 래니의 3V⭐️⭐️⭐️&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가트너 그룹의 부회장인 더그 래니는 빅데이터를 데이터의 양&lt;span style=&quot;background-color: #9feec3;&quot;&gt;(Volume)&lt;/span&gt;, 데이터의 유형&lt;span style=&quot;background-color: #9feec3;&quot;&gt;(Variety)&lt;/span&gt;, 데이터의 생성 및 처리 속도의 증가&lt;span style=&quot;background-color: #9feec3;&quot;&gt;(Velocity)&lt;/span&gt;로 요약하였다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;데이터 &amp;rarr; 데이터 양의 증가 Volume, 데이터 유형 증가 Variety, 데이터 수집 및 처리 속도의 증가 Velocity &amp;rarr; 빅데이터&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;#빅데이터의 새로운 특징 4V***&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;일부 학자들은 더그 레니의 3V에 추가로 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;Value(가치)&lt;/span&gt; 혹은 Veracity(정확성)를 포함해 4V로 빅데이터의 특징을 설명하기도 한다 여기에 Visualization(시각화), Variability(가변성) 등을 추가하는 견해도 있다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Value(가치): 데이터 전체를 파악하고 패턴을 발견하기가 어렵게 되면서 가치(value)의 중요성이 강조된다&lt;/li&gt;
&lt;li&gt;Veracity(정확성): 빅데이터 기반의 예측 분석 결과에 대한 신뢰성이 중요하게 되었다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(참고) &lt;/b&gt;&lt;b&gt;빅데이터의 출현 배경이 된 기술&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;고객 데이터 축적 및 활용 증가(CRM의 확대), 인터넷 확산, 무선통신의 발전(5G), 모바일 생태계 확산, 스마트폰의 보급 확대, &lt;span style=&quot;background-color: #9feec3;&quot;&gt;저장 기술의 발전과 메모리 가격 하락&lt;/span&gt;, 클라우드 컴퓨팅 기술 발전, SNS 확대, IoT(사물인터넷) 증가, 데이터 분석 툴의 발전 등&lt;/li&gt;
&lt;li&gt;클라우드 컴퓨팅은 인터넷(&amp;rsquo;클라우드&amp;rsquo;)을 통해 서버, 스토리지, 데이터베이스, 네트워킹, 소프트웨어, 분석, 인텔리전스 등의 컴퓨팅 서비스를 제공하는 것을 말한다 클라우드 컴퓨팅을 통해 더 빠른 혁신과 유연한 리소스를 기업은 제공받을 수 있고, 경영의 이익 효과도 누릴 수 있게 됐다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;#빅데이터의 기능과 변화&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;1. 빅데이터의 기능&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;빅데이터는 &amp;ldquo;산업혁명의 석탄 및 철&amp;rdquo;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;제조업뿐만 아니라 서비스 분야의 생산성을 획기적으로 끌어올려 사회 및 경제, 문화, 생활 전반에 혁명적 변화를 가져올 것으로 기대된다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;빅데이터는 &amp;ldquo;21세기 원유&amp;rdquo;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;빅데이터도 원유처럼 각종 비즈니스, 공공기관 대국민 서비스, 그리고 경제 성장에 필요한 정보를 제공하여 산업 전반의 생산성을 향상시키고 새로운 범주의 산업을 만들어낼 것으로 기대된다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;빅데이터는 &amp;ldquo;렌즈&amp;rdquo;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;렌즈를 통해 현미경이 생물학 발전에 끼쳤던 영향만큼, 빅데이터도 렌즈처럼 산업 발전에 큰 영향을 줄 것으로 기대된다대표 사례) 구글의 Ngram Viewer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;빅데이터는 &amp;ldquo;플랫폼&amp;rdquo;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;플랫폼은 공동 활용의 목적으로 구축된 유무형의 구조물을 말한다 빅데이터는 플랫폼으로서 다양한 서드파티 비즈니스에 활용될 것으로 기대된다 대표 사례) 페이스북, 카카오톡 등&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 빅데이터가 만들어내는 변화⭐️⭐️⭐️&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&amp;lsquo;후-전-양-상&amp;rsquo;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사전처리&amp;rarr;&lt;b&gt;사&lt;span style=&quot;background-color: #9feec3;&quot;&gt;후&lt;/span&gt;처리&lt;/b&gt;: 데이터를 사전처리하지 않고, 가능한 많은 데이터를 모으고 데이터를 다양한 방식으로 조합하여 숨은 인사이트를 발굴한다&lt;/li&gt;
&lt;li&gt;표본조사&amp;rarr;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;전&lt;/span&gt;수조사&lt;/b&gt;: IoT, 클라우드 기술의 발전으로 데이터 처리 비용이 감소하게 되면서 데이터 활용 방법이 표본조사에서 전수조사로 변화했다&lt;/li&gt;
&lt;li&gt;질&amp;rarr;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;양&lt;/span&gt;&lt;/b&gt;: 수집 데이터의 양이 증가할수록 분석의 정확도가 높아져 양질의 분석 결과 산출에 긍정적인 영향을 주었다&lt;/li&gt;
&lt;li&gt;인과관계&amp;rarr;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;상&lt;/span&gt;관관계&lt;/b&gt;: 특정한 인과관계가 중요시되던 과거와 달리, 데이터의 양이 급격하게 늘어나면서 상관관계를 통해 특정 현상의 발생 가능성이 포착되고 그에 상응하는 행동을 추천하는 등 상관관계를 통한 인사이트 도출이 점점 확산되고 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;#7가지 빅데이터 활용 기본 테크닉⭐️⭐️⭐️&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 연관 규칙 학습(Association rule learning)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어떤 변인 간에 주목할 만한 상관 관계가 있는지를 찾아내는 방법이다&lt;/li&gt;
&lt;li&gt;연관 규칙 학습은 연관분석 혹은 장바구니 분석으로도 불리며 고객이 구매한 물품들을 분석하여 품목 사이에 어떠한 규칙이 있는지 찾아내는 분석 기법이다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;예) &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;A를 구매한 사람이 B를 더 많이 사는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이것을 구매한 사람들이 많이 구매한 물품은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;장바구니 분석&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;상품 추천&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 유형분석(Classification tree analysis)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새로운 사건이 속할 범주를 찾아내는 방법이다&lt;/li&gt;
&lt;li&gt;&amp;lsquo;이 사용자가 어떤 특성을 가진 집단에 속하는가?&amp;rsquo;와 같은 문제를 해결하는 방법이다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;예) &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;문서를 어떻게 분류할 것인가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;조직을 어떻게 여러 그룹으로 나눌 것인가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;온라인 수강생들의 특성을 반영하여 어떻게 분류할 것인가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(참고) &lt;/b&gt;&lt;b&gt;분류와 군집&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여기서 언급한 &amp;lsquo;유형분석&amp;rsquo;은 그 개념이 정확한 &amp;lsquo;분류&amp;rsquo;인지 &amp;lsquo;군집&amp;rsquo;인지 약간 모호하게 기술되어 있다 조금 깊게 들어가자면 분류와 군집은 서로 다른 분석방법의 유형이다 영어로 표기할 때 분류는 &amp;lsquo;Classification&amp;rsquo;, 군집은 &amp;lsquo;Clustering&amp;rsquo;이라고 표기하며, 분류는 지도학습, 군집은 비지도학습에 속한다 자세한 내용은 3장에서 다룰 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;3. 유전 알고리즘(Genetic algorithms)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최적화가 필요한 문제의 해결책을 자연선택, 돌연변이 등과 같은 메커니즘을 통해 점진적으로 진화시켜 나가는 방법이다&lt;/li&gt;
&lt;li&gt;&amp;lsquo;최대의 시청률을 얻으려면 어떤 프로그램을 어떤 시간대에 방송해야 하는가?&amp;rsquo;와 같은 문제를 해결할 때 사용한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;⭐️ 예) &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;최적화된 택배 차량 배치, 최고의 시청률을 내기위한 방송 프로그램 배치&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;응급실에서 의사를 어떻게 배치하는 것이 가장 효율적인가?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;연비가 좋은 자동차를 개발하기 위해 원자재와 엔지니어링을 어떻게 결합하는 것이 좋을까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. 기계학습=머신러닝(Machine learning)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴퓨터가 데이터로부터 규칙을 찾고 이러한 규칙을 활용해 &amp;lsquo;예측&amp;rsquo;하는 데 초점을 둔 방법이다&lt;/li&gt;
&lt;li&gt;&amp;lsquo;기존 시청 기록을 바탕으로 시청자가 보유한 영화 중 어떤 영화를 가장 보고 싶어 할까?&amp;rsquo;와 같은 문제를 해결할 때 사용한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;예)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;유튜브 및 넷플릭스의 미디어 추천 시스템&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;스팸메일 필터링&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;질병 진단 예측&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(참고) &amp;lsquo;기계학습=머신러닝&amp;rsquo;에 사용하는 알고리즘&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;기계학습은 어떤 하나의 분석 방법이라기보다는 다양한 분석 알고리즘을 이용해 예측하는 분석모델을 아우르는 넓은 개념이다 따라서 기계학습에는 다양한 분석 알고리즘이 사용될 수 있으며, 실제로도 어느 하나의 방법만 사용하지 않고 다양한 분석 알고리즘을 두루 사용한다 기계학습에 사용되는 분석 알고리즘에는 의사결정나무, k-NN, 인공신경망, SVM, 군집, 딥러닝, 유전 알고리즘 등 다양한 분석 알고리즘이 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;6. 감정분석(Sentiment analysis)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 주제에 대해 말하거나 글을 쓴 사람의 감정을 분석하는 방법이다&lt;/li&gt;
&lt;li&gt;비정형 데이터 마이닝의 대표적인 기법 중 하나로, 텍스트 파일로부터 단어를 추출하고 추출된 단어의 긍정, 부정을 선별하여 글을 쓴 사람의 감정을 분석하는 분석 방법이다&lt;/li&gt;
&lt;li&gt;&amp;lsquo;새로운 환불 정책에 대한 고객의 평가는 어떤가?&amp;rsquo;와 같은 문제를 해결할 때 사용한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;예)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;호텔에서 고객의 후기를 분석하여 고객의 니즈를 찾아낸다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;제품의 사용기에 나타난 고객의 감정은 어떠한가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[감정 분석의 프로세스]&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;6.25 전쟁의 아픔을 형제의 우애를 통해 너무 애절하게 잘 나타내었습니다 영화를 보는 내내 눈물이 멈추질 않았습니다&amp;hellip; &amp;rarr; 6.25 전쟁 아픔 형제 우애 애절 잘 영화 눈물&amp;hellip;&amp;rarr;긍정 50% 중립 50% 부정 10% &amp;rarr; 좋은 호평을 받은 영화&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예컨대 선거를 할 때 텍스트 마이닝 통해 사람들의 반응(긍정/부정&amp;hellip;등) 분석하는 것(설문조사하지 않고 여러 웹사이트, 게시판 등 추적해 데이터 뽑아냄) + 자연어처리라고도 부름&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(참고) &lt;/b&gt;&lt;b&gt;텍스트 마이닝 용어&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스태밍(stemming): &amp;lsquo;가겠다&amp;rsquo;, &amp;lsquo;갈 것이다&amp;rsquo;, &amp;lsquo;간다&amp;rsquo;, &amp;lsquo;가야 한다&amp;rsquo; 등의 단어들은 그 어원이 &amp;lsquo;가다&amp;rsquo;라는 단어이다 이처럼 감정분석과 같은 텍스트 마이닝을 수행할 때 단어의 원형을 통해 그 의미를 파악할 수 있는데, 이때 단어의 어원을 찾는 작업을 스테밍이라 한다&lt;/li&gt;
&lt;li&gt;코퍼스(Corpus): 말뭉치란 뜻을 가진 코퍼스는 텍스트 분석을 위해 모아놓은 단어 혹은 문장을 보유한 저장소이다 특정 단어가 어떤 단어들과 주로 어울리는지를 파악하는 등 코퍼스는 다양한 목적을 갖고 사용될 수 있다&lt;/li&gt;
&lt;li&gt;토큰화(Tokenization): 문장 또는 코퍼스를 여러 개의 뜻을 가진 가장 작은 단위의 단어들로 나누는 작업을 의미한다 한글에서는 -은, -는, -이, -가 와 같이 조사 때문에 띄어쓰기로 나눈다는 것이 토큰화가 될 수 없으므로 토큰화보다 상위개념인 형태소 분석을 수행해야 한다&lt;/li&gt;
&lt;li&gt;임베딩(Embedding): 토큰화가 수행된 단어 집합에 대해서 일련의 벡터로 변환하는 작업을 의미한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;7. 소셜 네트워크 분석(SNA; Social Network Analysis)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사회 관계망 분석으로도 불리며, SNS 같은 온라인 공간에서 유저 사이의 팔로워, 팔로잉 관계를 분석하여 영향력이 있는 사람을 찾아내어 기업의 효율적인 마케팅이나 범죄 수사에서 공범을 찾는 등 다양한 분야에서 활용될 수 있다&lt;/li&gt;
&lt;li&gt;오피니언 리더, 즉 영향력 있는 사람을 찾아낼 수 있으며, 고객 간 소셜 관계를 파악할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;예) &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;도시계획 및 지리학 분야에서 SNA를 활용하여 도시공간분석에 이용&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;특정인과 다른 사람이 몇 촌 정도의 관계인가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 사람이 어느 정도 영향력 있는 &amp;lsquo;인플루언서&amp;rsquo;인가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(참고) 소셜 네트워크 분석 요소&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;소셜 네트워크 분석은 비정형 데이터 분석으로 ADsP의 3과목에서 다루지 않는 영역이지만 최근 소셜 네트워크 분석과 관련된 용어가 출제됨에 따라 아래의 용어 정도는 숙지하자&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;/li&gt;
&lt;li&gt;&lt;b&gt;근접 중심성:&lt;/b&gt; 노드 사이의 거리를 기반으로 측정한 척도다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;매개 중심성:&lt;/b&gt; 네트워크 내에서 해당 노드가 어디에 위치하는지 파악함으로써 해당 노드의 영향력을 파악할 수 있다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;아이겐벡터의 중심성:&lt;/b&gt; 네트워크 내의 노드와 다른 벡터의 중심성과 가중치를 활용하여 계산하는 방식으로, 해당 노드와 연결된 다른 노드들이 네트워크 내에서 얼마나 중요한지 파악하는 지표다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;lt;빅데이터의 위기요인과 통제방안&amp;gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[빅데이터의 위기 요인과 그 예시]&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사생활 침해 &amp;rarr; 구글의 사용자 행동 패턴 예측&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;책임 원칙 훼손 &amp;rarr; 범죄 발생 이전에 체포&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;데이터 오용 &amp;rarr; 비행기 탑승 금지자 목록에 상원 의원이 포함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;[빅데이터 위기 요인과 통제(극복) 방안]⭐️&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;사생활 침해 &amp;rarr; 동의에서 책임으로(사용자 &amp;lt; 기업 책임)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;책임 원칙 훼손 &amp;rarr; 결과 기반 책임 원칙 고수&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;데이터 오용 &amp;rarr; 알고리즘 접근 허용 &amp;rarr; 알고리즘 리스트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(참고) 개인정보 비식별 기술⭐️&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;개인정보 비식별 기술이란 데이터 속에서 특정 개인을 식별할 수 있는 요인을 숨김으로써 특정 개인을 식별할 수 없도록 하는 기술이다 최근에 빅데이터로 인한 위기 요인이 발생함에 따라 개인정보의 비식별 기술이 더욱 각광받고 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;데이터 마스킹:&lt;/b&gt; 데이터의 기존 형식을 유지한 채 식별할 수 없는 임의의 값(혹은 기호)으로 대체한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;플레이 데이터 -데이터 마스킹(가림)&amp;rarr; ***데이터&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;가명 처리:&lt;/b&gt; 데이터의 값을 다른 값으로 변경한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;홍길동 -가명 처리&amp;rarr; 임꺽정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;총계 처리:&lt;/b&gt; 각각의 데이터 값이 아닌 전체 데이터에 대한 총합 또는 평균으로 데이터를 보여준다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;70점 80점 90점 -총계 처리&amp;rarr; 평균 80점&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;데이터 값 삭제:&lt;/b&gt; 데이터 값의 일부를 삭제한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;서울시 서초구 -데이터 값 삭제&amp;rarr; 서울시&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;데이터 범주화:&lt;/b&gt; 데이터의 값을 범주화하여 특정 값이 아닌 범위를 제공한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;수학 80점 -데이터 범주화&amp;rarr; 수학 70~90점&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;[데이터 사이언티스트에게 요구되는 역량]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;523&quot; data-origin-height=&quot;389&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GD7ZE/dJMcaiXkUSy/qwBHJHWsFQtEoJf94kNQe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GD7ZE/dJMcaiXkUSy/qwBHJHWsFQtEoJf94kNQe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GD7ZE/dJMcaiXkUSy/qwBHJHWsFQtEoJf94kNQe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGD7ZE%2FdJMcaiXkUSy%2FqwBHJHWsFQtEoJf94kNQe0%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;523&quot; height=&quot;389&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;523&quot; data-origin-height=&quot;389&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Hard Skill:&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Analytics, IT 전문성(Data mgmt)&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;빅데이터에 대한 이론적 지식: 관련 기법에 대한 이해와 방법론 습득&lt;/li&gt;
&lt;li&gt;분석 기술에 대한 숙련: 최적의 분석 설계 및 노하우 축적&lt;/li&gt;
&lt;li&gt;통찰력 있는 분석: 창의적 사고, 호기심, 논리적 비판&lt;/li&gt;
&lt;li&gt;설득력 있는 전달: 스토리텔링, 비주얼라이제이션&lt;/li&gt;
&lt;li&gt;다분야 간 협력: 커뮤니케이션&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Soft Skill:&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;비즈니스 분석&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 가치 패러다임의 변화⭐️&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현대는 크게 디지털화, 연결, 에이전시로 패러다임이 변화했다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[가치 패러다임의 변화]⭐️&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;과거 Digitalization &amp;rarr; 현재 Connection &amp;rarr; 미래 Agency&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;디지털화(Digitalization)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;아날로그의 세상을 어떻게 효과적으로 디지털화하는가가 이 시대의 가치를 창출해 내는 원천 예) 운영체제, 워드/파워포인트 같은 오피스 프로그램&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;rarr; 연결(Connection)&lt;/td&gt;
&lt;td&gt;디지털화된 정보와 대상들이 서로 연결되어 이 연결이 얼마나 효과적이고 효율적으로 제공되느냐가 이 시대의 성패를 가름 예) 구글의 검색 알고리즘, 네이버의 콘텐츠&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;rarr; 에이전시(Agency)&lt;/td&gt;
&lt;td&gt;사물인터넷(IoT)의 성숙과 함께 연결이 증가하고 복잡해짐 복잡한 연결을 얼마나 효과적으로 믿을 만하게 관리하는가가 이슈 데이터 사이언스의 역량에 따라 좌우&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;5. 하둡 에코시스템&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;오픈소스지만 확장성과 호환성이 높아서 최근 많은 기업이 채용하는 하둡 에코시스템(Hadoop Ecosystem)도 다른 에코시스템과 마찬가지로 특정한 기술 및 프레임워크가 아니라 하둡을 비롯한 십수 종의 다양한 기술과 프레임워크, 개발언어, 솔루션으로 이루어진 거대한 프로젝트의 집합체다 마치 여러 대의 자동차가 합체하여 하나의 거대한 로봇이 되는 애니메이션 변신 로봇처럼 하둡 에코시스템은 다양한 빅데이터 기술이 집합된 결정체라고 할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;대용량의 빅데이터를 처리하기 위한 기술이 개발되었는데 그 기술이 &amp;lsquo;Hadoop&amp;rsquo; 파일 시스템 기술 이것들을 활용하기 위해 다양한 오픈소스(보통 기업이 프로그램을 개발하면 라이센스비를 받지만 라이센스 없이 소스를 오픈함 즉, 무료 활용 가능) 개발 이들 중 엮어 하나의 거대한 플랫폼 만든 것이 하둡 에코시스템&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[하둡 에코시스템]&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-14 오전 10.09.57.png&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;1210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdh8Ra/dJMcagZxMMK/dzl4qN2RsvwhdRQ1wun2c0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdh8Ra/dJMcagZxMMK/dzl4qN2RsvwhdRQ1wun2c0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdh8Ra/dJMcagZxMMK/dzl4qN2RsvwhdRQ1wun2c0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbdh8Ra%2FdJMcagZxMMK%2Fdzl4qN2RsvwhdRQ1wun2c0%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;860&quot; height=&quot;1210&quot; data-filename=&quot;스크린샷 2026-04-14 오전 10.09.57.png&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;1210&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;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;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;&lt;a title=&quot;왕초보 비전공자를 위한 ADsP 1과목 개념원리 특강 | 미어캣 | adsp 독학 | 벼락치기&quot; href=&quot;https://youtu.be/WFbpRunPKiQ?si=G6Sw99Ph6OxXAcaK&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;초보 비전공자를 위한 ADsP 1과목 개념원리 특강 | 미어캣 | adsp 독학 | 벼락치기&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>ADsP 준비</category>
      <category>ADsP</category>
      <category>adsp 1과목</category>
      <category>adsp 필기</category>
      <category>DIKW피라미드</category>
      <category>데이터 마트</category>
      <category>데이터 웨어하우스</category>
      <category>데이터베이스</category>
      <category>메타데이터</category>
      <category>암묵지</category>
      <category>형식지</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/14</guid>
      <comments>https://hisjeans.tistory.com/entry/ADsP-1%EA%B3%BC%EB%AA%A9-%EA%B0%9C%EB%85%90%EC%9B%90%EB%A6%AC-%ED%95%84%EA%B8%B0#entry14comment</comments>
      <pubDate>Thu, 23 Apr 2026 18:52:36 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 특별한 이차원 배열 2 (Java)</title>
      <link>https://hisjeans.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%9E%90%EB%B0%94-%ED%8A%B9%EB%B3%84%ED%95%9C-%EC%9D%B4%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4-2</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문제설명&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;n &amp;times; n 크기의 이차원 배열&amp;nbsp;arr이 매개변수로 주어질 때,&amp;nbsp;arr이 다음을 만족하면 1을 아니라면 0을 return 하는 solution 함수를 작성해 주세요.&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;0 &amp;le; i, j &amp;lt; n인 정수 i, j에 대하여&amp;nbsp;arr[i][j]&amp;nbsp;=&amp;nbsp;arr[j][i]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;입출력 예&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;arr&lt;/td&gt;
&lt;td&gt;result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[[5, 192, 33], [192, 72, 95], [33, 95, 999]]&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[[19, 498, 258, 587], [63, 93, 7, 754], [258, 7, 1000, 723], [587, 754, 723, 81]]&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;작성한 코드:&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;class Solution {
    public int solution(int[][] arr) {
        boolean answer = false;
        for(int i=0;i&amp;lt;arr.length;i++){
            for(int j=0;j&amp;lt;arr.length;j++){
                if(arr[i][j]!=arr[j][i]){
                    return 0;
                    //다른 쌍을 발견했을 때 바로 0을 반환
                }
            }
            
        }
        return 1; //모든 i,j 쌍 확인 통과하면 1 반환
        
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;처음에는 arr[i][j]=arr[j][i] 와 같이 서로 같은 경우에 대해서만 생각하여 코드를 작성하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 위 같은 방식으로는 모든 쌍에 대하여 조건을 비교하기 어려웠다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;일치하는 하나의 쌍에 대해서만 처리한 뒤 종료되는 문제가 발생하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;따라서 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;arr[i][j]&amp;ne;arr[j][i]&lt;/span&gt; 으로 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;부정 조건&lt;/span&gt;을 사용해 다른 쌍을 발견했을 때 바로 0을 반환하도록 수정하였다❗️&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Stream을 이용한 다른 사람의 풀이:&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;import java.util.stream.*;

class Solution{
	public int solution(int[][] arr){
		return IntStream.range(0, arr.length) //0부터 arr의 길이만큼 반복
			.allMatch(i-&amp;gt;IntStream.range(i+1, arr.length)//모든 i에 대해
				.allMatch(j-&amp;gt;arr[i][j]==arr[j][i])? 1:0; //모든 j가 arr[i][j]==arr[j][i] 조건을 만족하면 1, 아니면 0 반환
				
	}
}
&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;allMatch(조건)&lt;/li&gt;
&lt;li&gt;람다식 (매개변수)&amp;rarr;실행코드&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;  왜 i+1부터 시작할까?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예를 들어 i가 0일 때 arr[0][1] vs arr[1][0], arr[0][2] vs arr[2][0]을 비교하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;i가 1일 때 arr[1][2] vs arr[2][1]이 같은지 비교하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;i가 2일 때는 i=0, 1일 때 확인하였기 때문에 더이상 비교할 것이 없다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;중복 비교를 하지 않기 위해&lt;/b&gt; i+1부터 시작하도록 설정한 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;nbsp; 회고&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 쌍이 조건에 일치해야 할 때 &lt;b&gt;부정조건&lt;/b&gt;을 사용해 조건에 부합하지 않는 쌍에 대해 바로 처리해보자&lt;/li&gt;
&lt;li&gt;조건 확인할 때 if 뿐만 아니라 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;allMatch()&lt;/span&gt;도 고려해보자&lt;/li&gt;
&lt;li&gt;대칭적 구조에서 중복 비교를 피하기 위해 i+1부터 순회할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;참고 자료: 프로그래머스 코딩테스트 연습&lt;/p&gt;</description>
      <category>코딩테스트 준비</category>
      <category>ARR</category>
      <category>java</category>
      <category>Return</category>
      <category>반환</category>
      <category>배열</category>
      <category>부정 조건</category>
      <category>이차원 배열</category>
      <category>자바</category>
      <category>특별한 이차원 배열 2</category>
      <category>프로그래머스</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/13</guid>
      <comments>https://hisjeans.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%9E%90%EB%B0%94-%ED%8A%B9%EB%B3%84%ED%95%9C-%EC%9D%B4%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4-2#entry13comment</comments>
      <pubDate>Mon, 30 Mar 2026 16:52:52 +0900</pubDate>
    </item>
    <item>
      <title>웹 Front-End와 웹 Back-End</title>
      <link>https://hisjeans.tistory.com/entry/%EC%9B%B9-Front-End%EC%99%80-%EC%9B%B9-Back-End-1</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; &amp;zwj;♀️ 들어가기 전&amp;hellip;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;웹은 &lt;b&gt;프론트엔드(FE)&lt;/b&gt;와 &lt;b&gt;백엔드(BE)&lt;/b&gt;로 나뉨&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;브라우저&lt;/b&gt;를 &lt;b&gt;프론트엔드&lt;/b&gt; 또는 &lt;b&gt;클라이언트&lt;/b&gt;라고 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;웹백엔드는 인터넷 사용자에게 보이지 않는 것&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;학습 목표&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;웹프론트엔드에 대한 역할과 기술적 구성&lt;/li&gt;
&lt;li&gt;웹백엔드에 대한 역할과 기술적 구성&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;핵심 개념&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;HTML&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;CSS&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;JavaScript&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;클라이언트&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;서버&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;  학습하기&lt;/b&gt;&lt;/h3&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 data-ke-size=&quot;size18&quot;&gt;사용자에게 웹을 통해 다양한 콘텐츠/리소스(문서, 동영상, 사진 등)를 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;또한, 사용자의 요청(요구사항)에 반응해 동작&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;웹프론트엔드의 역할&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;웹콘텐츠를 잘 보여주기 위해 구조를 만듦(일종의 신문, 책) - &lt;b&gt;HTML&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;적절한 배치와 일관된 디자인 제공(보기 좋게) - &lt;b&gt;CSS&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;사용자 요청을 잘 반영해야 함(소통하듯이 반응 자체가 부드럽고 빠르게 이루어져야 함) - &lt;b&gt;Javascript&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;  HTML 코드 예&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;원하는 문서의 구조를 프로그래밍 언어로 표현해야 하는데 &lt;b&gt;HTML&lt;/b&gt;이라는 것이 그 구조를 잘 표현&lt;/p&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;h1&amp;gt;우리집에 오신걸 환영합니다&amp;lt;/h1&amp;gt;
&amp;lt;section&amp;gt;
	&amp;lt;h2&amp;gt;위치&amp;lt;/h2&amp;gt;
	&amp;lt;p&amp;gt;경기도 시흥시 어딘가 위치하고 있어요~&amp;lt;/p&amp;gt;
	&amp;lt;h2&amp;gt;특징&amp;lt;/h2&amp;gt;
	&amp;lt;p&amp;gt;우리집은 마루가 아주 작아요~ 하지만 옹기종기 모여있기 좋은 구조에요&amp;lt;/p&amp;gt;
&amp;lt;/section&amp;gt;
&amp;lt;footer&amp;gt;&amp;lt;email:crong@kdd123.com&amp;gt;&amp;lt;/footer&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;  스타일-CSS 코드 예&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;웹페이지 꾸미기 위해 각각의 HTML 태그(문서의 구조를 표현한 각 조각 단위) 꾸미기 위한 규칙 필요, &lt;b&gt;CSS&lt;/b&gt;가 이를 표현할 수 있는 프로그래밍 언어&lt;/p&gt;
&lt;pre class=&quot;css&quot; data-ke-language=&quot;css&quot;&gt;&lt;code&gt;.window-header-icon{
left:-28px;
position:absolute;
top:8px
}

.window-header-inline-content{
cursor:default;
display:inline-block;
margin:4px 6px 0 0
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;  동작-JavaScript 코드 예&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HTML, CSS 를 이리저리 움직이고 변경할 필요 있을 것, &lt;b&gt;JavaScript&lt;/b&gt;가 그걸 해줌&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;let aCardList=[];
for(var i=0;i&amp;lt;cardList.length;i++){
let str='${cardList[i]}번째 카드';
let id='list-${cardList[i]}';
aCardList.push(&amp;lt;li id={id} key={i} draggable-'true' onDragStart={dragStart}&amp;gt;{str}&amp;lt;/li&amp;gt;)
}&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;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;백 엔드(Back-End)란?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;프론트 엔드(Front-end)&lt;/b&gt;가&lt;span style=&quot;background-color: #9feec3;&quot;&gt; 프로그램의 앞 쪽, 클라이언트의 입장&lt;/span&gt;에서 개발이 진행된다면 &lt;b&gt;백 엔드(Back-end)&lt;/b&gt;는 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;프로그램의 뒷 부분&lt;/span&gt;, 즉 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;서버 입장&lt;/span&gt;에서의 개발이 진행&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;프론트 엔드를 다른 말로 &lt;b&gt;클라이언트 사이드(Client side)&lt;/b&gt;라고 말한다면, 백 엔드는 &lt;b&gt;서버 사이드(Server side)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;backend&lt;/b&gt;는 정보를 처리하고 저장하며, 클라이언트의 요청에 따라 정보를 내려주는 역할&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;백 엔드 개발자가 알아야 할 것들&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로그래밍 언어(JAVA, Python, PHP, Javascript 등)&lt;/li&gt;
&lt;li&gt;웹의 동작 원리&lt;/li&gt;
&lt;li&gt;알고리즘(algorithm), 자료구조 등 프로그래밍 기반 지식&lt;/li&gt;
&lt;li&gt;운영체제, 네트워크 등에 대한 이해&lt;/li&gt;
&lt;li&gt;프레임워크에 대한 이해(ex. Spring)&lt;/li&gt;
&lt;li&gt;DBMS에 대한 이해와 사용방법(ex. MySQL, Oracle 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;참고자료&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;부스트코스 웹 프로그래밍(풀스택)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹 프로그래밍(풀스택)</category>
      <category>CSS</category>
      <category>HTML</category>
      <category>javascript</category>
      <category>백엔드</category>
      <category>부스트코스</category>
      <category>서버</category>
      <category>웹</category>
      <category>의미</category>
      <category>클라이언트</category>
      <category>프론트엔드</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/12</guid>
      <comments>https://hisjeans.tistory.com/entry/%EC%9B%B9-Front-End%EC%99%80-%EC%9B%B9-Back-End-1#entry12comment</comments>
      <pubDate>Fri, 27 Mar 2026 15:51:40 +0900</pubDate>
    </item>
    <item>
      <title>웹의 동작(HTTP 프로토콜 이해)</title>
      <link>https://hisjeans.tistory.com/entry/%EC%9B%B9%EC%9D%98-%EB%8F%99%EC%9E%91HTTP-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EC%9D%B4%ED%95%B4</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; &amp;zwj;♀️ 들어가기 전&amp;hellip;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;웹 브라우저와 웹 서버 간에도 서로 통신하기 위해 규약 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이때 필요한 규약이 HTTP&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;학습 목표&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;HTTP 프로토콜의 작동방식에 대해 알아보자&lt;/li&gt;
&lt;li&gt;HTTP 프로토콜의 요청/응답 데이터 포맷에 대해 알아보자&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;핵심 개념&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;HTTP&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;Request 형식&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;Request Method&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;Response 형식&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;응답 코드&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; &amp;nbsp; 학습하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;인터넷(네트웍 통신)의 이해&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;인터넷 &amp;ne; WWW(World Wide Web) &lt;/b&gt;물리적 1의 컴퓨터에 여러 서버 동작, 각 서버는 포트라는 값으로 구분돼 동작&lt;/li&gt;
&lt;li&gt;인터넷 기반의 대표 서비스 중 하나&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 114px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;이름&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;프로토콜&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;포트&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;기능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;WWW&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;HTTP&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;80&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;웹서비스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;Email&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;SMTP/POP3/IMAP&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;25/110/114&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;이메일 서비스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;FTP&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;FTP&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;21&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;파일 전송 서비스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;DNS&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;TCP/UDP&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;53&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;네임서비스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;NEWS&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;NNTP&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;119&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;인터넷 뉴스 서비스&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;인터넷(Internet)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TCP/IP&lt;/b&gt; 기반의 네트워크가 전세계적으로 확대되어 하나로 연결된 &lt;b&gt;네트워크들의 네트워크(네트워크의 결합체)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;웹의 동작(HTTP 프로토콜 이해)&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;물리적인 1의 컴퓨터에 여러개의 서버 동작 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;각 서버는 포트라는 동작&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;HTTP(Hypertext Transfer Protocol)&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;팀 버너스리(Tim Berners-Lee)와 그가 속한 팀은 CERN에서 HTML뿐만 아니라 웹 브라우저 및 웹 브라우저 관련 기술과 HTTP를 발명&lt;/li&gt;
&lt;li&gt;문서화된 최초의 HTTP버전은 HTTP v0.9(1991년)&lt;/li&gt;
&lt;li&gt;HTTP는 서버와 클라이언트가 인터넷상에서 데이터를 주고받기 위한 프로토콜(protocol)&lt;/li&gt;
&lt;li&gt;HTTP는 계속 발전하여 HTTP/2까지 버전이 등장한 상태&lt;/li&gt;
&lt;li&gt;어떤 종류의 데이터도 전송 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;HTTP 작동방식&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;HTTP는 서버/클라이언트 모델 따름&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;클라이언트 -요청&amp;rarr; 서버 -응답&amp;rarr; 클라이언트&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;불특정 다수를 대상으로 하는 서비스에 적합&lt;/li&gt;
&lt;li&gt;클라이언트와 서버가 계속 연결된 형태가 아니기 때문에 클라이언트와 서버 간의 최대 연결 수보다 훨씬 많은 요청과 응답을 처리할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버는 응답 후 클라이언트와의 연결을 바로 끊어버리기 때문에, 서버가 클라이언트의 이전 상황 알 수 없음&lt;/li&gt;
&lt;li&gt;이러한 특징을 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;무상태(Stateless)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;이러한 특징 때문에 정보를 유지하기 위해 &lt;b&gt;Cookie&lt;/b&gt;와 같은 기술 등장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;URL(Uniform Resource Locator)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인터넷 상의 자원의 위치&lt;/li&gt;
&lt;li&gt;특정 웹 서버의 특정 파일에 접근하기 위한 경로 혹은 주소&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;http_-_.png&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;605&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFukTT/dJMb996SApt/W3nK5peiLycE7k4vmLx0R0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFukTT/dJMb996SApt/W3nK5peiLycE7k4vmLx0R0/img.png&quot; data-alt=&quot;출처: 부스트코스 웹 프로그래밍(풀스택)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFukTT/dJMb996SApt/W3nK5peiLycE7k4vmLx0R0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFukTT%2FdJMb996SApt%2FW3nK5peiLycE7k4vmLx0R0%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;1046&quot; height=&quot;605&quot; data-filename=&quot;http_-_.png&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;605&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: 부스트코스 웹 프로그래밍(풀스택)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;요청되는 데이터는 정해진 규칙 있음=&lt;b&gt;요청 데이터 포맷&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;요청 메시지는&lt;b&gt; 헤더/빈 줄/바디&lt;/b&gt; 세 부분으로 나뉨&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫번째 줄의 요청메소드는 서버에게 요청의 종류를 알려주기 위해 사용&lt;/li&gt;
&lt;li&gt;두 번째 줄부터 여러 줄의 헤더 정보&lt;/li&gt;
&lt;li&gt;각각의 줄은 헤더 명과 헤더 값이 콜론으로 구분&lt;/li&gt;
&lt;li&gt;각 줄은 라인피드와 캐리지 리턴으로 구분&lt;/li&gt;
&lt;li&gt;바디 요소는 POST나 PUT 통해 들어옴&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;응답 데이터 포맷도 요청 데이터 포맷과 마찬가지로 &lt;b&gt;헤더/빈 줄/응답 바디부분&lt;/b&gt;으로 나옴&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 줄에 반드시 응답 HTTP 프로토콜의 버전&lt;/li&gt;
&lt;li&gt;다음은 응답 코드 그리고 응답 메시지 등 나올 수 있음&lt;/li&gt;
&lt;li&gt;나머지 헤더 부분에 날자, 웹 서버 이름과 버전, 콘텐츠 타입, 캐시 제어 방식, 콘텐츠 길이 등의 값이 나오게 됨&lt;/li&gt;
&lt;li&gt;빈 줄 다음 나오는 것이 실제 응답 리소스 데이터가 나오는 부분&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하나의 물리적 컴퓨터에 여러 소프트웨어 서버 동작 가능(서버는 포트 값이 다르게 동작해야 하고 포트 값은 0보다 큰 숫자 값)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;IP:&lt;/b&gt; 집주소 같은 개념, 1의 컴퓨터에 1의 IP&lt;/li&gt;
&lt;li&gt;&lt;b&gt;포트:&lt;/b&gt; 하나의 방 같은 개념, 단 각 서버는 하나의 방을 하나씩 차지해야 함(여러 서버 존재할 수 없음), 포트 번호 각각 달라야 함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;요청 메서드:&lt;/b&gt; GET, PUT, POST, PUSH, OPTIONS 등의 요청 방식 옴&lt;/li&gt;
&lt;li&gt;&lt;b&gt;요청 URI:&lt;/b&gt; 요청하는 자원의 위치 명시&lt;/li&gt;
&lt;li&gt;&lt;b&gt;HTTP 프로토콜 버전:&lt;/b&gt; 웹 브라우저가 사용하는 프로토콜 버전 명시&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;*최초의 웹 서버는 GET방식만 지원&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;GET:&lt;/b&gt; 정보를 요청하기 위해 사용(SELECT), 요청 바디 없음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;POST:&lt;/b&gt; 정보를 밀어넣기 위해 사용(INSERT)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;PUT:&lt;/b&gt; 정보를 업데이트하기 위해 사용(UPDATE)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DELETE:&lt;/b&gt; 정보를 삭제하기 위해 사용(DELETE)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;HEAD:&lt;/b&gt; (HTTP)헤더 정보만 요청 해당 자원이 존재하는지 혹은 서버에 문제가 없는지 확인하기 위해 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;OPTIONS:&lt;/b&gt; 웹 서버가 지원하는 메서드의 종류 요청&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TRACE:&lt;/b&gt; 클라이언트의 요청을 그대로 반환 예컨대 echo 서비스로 서버 상태를 확인하기 위한 목적으로 주로 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;생각해보기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;  HTTP에 S가 붙은 HTTPS는 어떤 용도로 사용? HTTP와 무엇이 다른가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ㄴ HTTPS는 하이퍼텍스트 전송 프로토콜 보안으로 웹 브라우저와 웹 사이트 간 데이터를 전송하는 데 사용되는 기본 프로토콜인 HTTP의 보안 버전&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;참고자료&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;부스트코스 웹 프로그래밍(풀스택)&lt;/p&gt;</description>
      <category>웹 프로그래밍(풀스택)</category>
      <category>http</category>
      <category>url</category>
      <category>부스트코스</category>
      <category>서버</category>
      <category>웹동작</category>
      <category>웹프</category>
      <category>웹프로그래밍</category>
      <category>응답</category>
      <category>클라이언트</category>
      <category>풀스택</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/11</guid>
      <comments>https://hisjeans.tistory.com/entry/%EC%9B%B9%EC%9D%98-%EB%8F%99%EC%9E%91HTTP-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EC%9D%B4%ED%95%B4#entry11comment</comments>
      <pubDate>Fri, 27 Mar 2026 15:01:50 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 배열의 길이에 따라 다른 연산하기 (Java)</title>
      <link>https://hisjeans.tistory.com/entry/Java-%EB%B0%B0%EC%97%B4%EC%9D%98-%EA%B8%B8%EC%9D%B4%EC%97%90-%EB%94%B0%EB%9D%BC-%EB%8B%A4%EB%A5%B8-%EC%97%B0%EC%82%B0%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문제 설명:&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #dddddd;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;정수 배열&amp;nbsp;&lt;/span&gt;arr&lt;span style=&quot;text-align: left;&quot;&gt;과 정수&amp;nbsp;&lt;/span&gt;n&lt;span style=&quot;text-align: left;&quot;&gt;이 매개변수로 주어집니다.&amp;nbsp;&lt;/span&gt;arr&lt;span style=&quot;text-align: left;&quot;&gt;의 길이가 홀수라면&amp;nbsp;&lt;/span&gt;arr&lt;span style=&quot;text-align: left;&quot;&gt;의 모든 짝수 인덱스 위치에&amp;nbsp;&lt;/span&gt;n&lt;span style=&quot;text-align: left;&quot;&gt;을 더한 배열을,&amp;nbsp;&lt;/span&gt;arr&lt;span style=&quot;text-align: left;&quot;&gt;의 길이가 짝수라면&amp;nbsp;&lt;/span&gt;arr&lt;span style=&quot;text-align: left;&quot;&gt;의 모든 홀수 인덱스 위치에&amp;nbsp;&lt;/span&gt;n&lt;span style=&quot;text-align: left;&quot;&gt;을 더한 배열을 return 하는 solution 함수를 작성해 주세요.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;입출력 예:&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 51px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;arr&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;n&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;[49, 12, 100, 276, 33]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;27&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;[76, 12, 127, 276, 60]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;[444, 555, 666, 777]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;100&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;[444, 655, 666, 877]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;제출한 코드:&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1774350480212&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public int[] solution(int[] arr, int n) {
        
        if(arr.length%2!=0){//arr 길이=홀수
            for(int i=0;i&amp;lt;arr.length;i++){
                //짝수 인덱스 위치에 n을 더해야 하니 0도 포함되어야
                if(i%2==0){
                    arr[i]+=n;
                }
            }
        }
        else{//arr 길이=짝수
            for(int i=1;i&amp;lt;arr.length;i++){
                if(i%2!=0){
                    arr[i]+=n;
                }
            }
        }
        return arr;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;처음에는 단순히 for(int i=0; i&amp;lt;arr.length; i++)으로 설정했지만 짝수나 홀수 인덱스에 맞춰 2 또는 1부터 시작하는 것이 효율적일 거란 생각이 들었다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 짝수 인덱스를 처리할 땐 0 또한 포함되어야 한다는 것을 놓쳐 i=2로 초기값을 설정하는 실수를 했다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;짝수, 홀수 인덱스를 다룰 경우, 각각 초기값을 0과 2부터 시작하는 것으로 변경하여 0 또한 짝수 인덱스에 포함되도록 설정해야 한다‼️&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;다른사람 풀이:&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1774350774022&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution{
	public int[] solution(int[] arr, int n){
    	for(int idx=arr.length%2==0?1:0; idx&amp;lt;arr.length; idx+=2){
        //arr 길이가 짝수-&amp;gt;idx=1,3,5,7...(홀수 인덱스), 홀수-&amp;gt;idx=0,2,4,6...(짝수 인덱스)만 순회
        	arr[idx]+=n;
        }
        return arr;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;for 반복문의 초기값을 arr의 길이가 짝수이면 1, 홀수이면 0으로 시작&lt;/li&gt;
&lt;li&gt;arr 길이가 짝수일 땐 홀수 인덱스인 1부터 n을 더한다 이때 반복루프를 돌며 1, 3, 5... 와 같이 2를 더해 홀수 인덱스일 때만 더하도록 지정하였다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt; &lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;arr의 길이가 짝수, 홀수인 것에 맞추어 처음부터 시작값을 결정할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;idx+=2로 if 인덱스 짝수, 홀수에 대한 조건문 없이도 인덱스 갱신 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1774351126075&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution{
	public int[] solution(int[] arr, int n){
    	for(int i=arr.length-1;i&amp;gt;=0;i-=2){
        	arr[i]+=n;
        }
      	return arr;
    }
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;for 반복문을 내림차순으로 시작&lt;/li&gt;
&lt;li&gt;즉, arr의 마지막 인덱스(arr.length-1)부터 첫번째 인덱스(i&amp;gt;=0)까지 i-=2로 배열 길이가 홀수/짝수일 때 짝수/홀수 인덱스 위치에 n을 더함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt; &lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;arr의 길이에 따라 마지막 인덱스의 짝수, 홀수가 결정되고 이 수부터 2씩 감소시키면 별도의 조건문 없이도 조건을 충족시킬 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;  회고&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;짝수 개수에 0 빠뜨리지 말기&lt;/li&gt;
&lt;li&gt;for문을 작성할 때 생각없이 0부터 시작하지 말고 문제의 조건에 맞춰 실행할 수 있는 방법을 생각해보자&lt;/li&gt;
&lt;li&gt;조건문으로 단순히 필터링하는 방식뿐만 아니라 초기값, 증가폭을 이용해 필요한 인덱스를 직접 순회할 수도 있다&lt;/li&gt;
&lt;li&gt;내 풀이를 비롯한 다른 사람의 풀이는 모두 O(n)의 시간 복잡도로 동일하다 왜냐하면 모두 한 번씩 해당 인덱스를 방문해야 하기 때문이다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;참고자료: 프로그래머스 코딩테스트 연습&lt;/p&gt;</description>
      <category>코딩테스트 준비</category>
      <category>java</category>
      <category>배열</category>
      <category>배열의 길이에 따라 연산하기</category>
      <category>인덱스</category>
      <category>자바</category>
      <category>짝수</category>
      <category>코딩테스트</category>
      <category>코테</category>
      <category>프로그래머스</category>
      <category>홀수</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/10</guid>
      <comments>https://hisjeans.tistory.com/entry/Java-%EB%B0%B0%EC%97%B4%EC%9D%98-%EA%B8%B8%EC%9D%B4%EC%97%90-%EB%94%B0%EB%9D%BC-%EB%8B%A4%EB%A5%B8-%EC%97%B0%EC%82%B0%ED%95%98%EA%B8%B0#entry10comment</comments>
      <pubDate>Tue, 24 Mar 2026 21:14:13 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 배열의 원소 삭제하기 (Java)</title>
      <link>https://hisjeans.tistory.com/entry/Java-%EB%B0%B0%EC%97%B4%EC%9D%98-%EC%9B%90%EC%86%8C-%EC%82%AD%EC%A0%9C%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문제설명:&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: oklch(0.2282 0.047 83.09 / 0.035); color: oklch(0.2642 0.013 93.9); text-align: start;&quot;&gt;정수 배열&amp;nbsp;arr과&amp;nbsp;delete_list가 있습니다.&amp;nbsp;arr의 원소 중&amp;nbsp;delete_list의 원소를 모두 삭제하고 남은 원소들은 기존의&amp;nbsp;arr에 있던 순서를 유지한 배열을 return 하는 solution 함수를 작성해 주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;입출력 예:&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;arr&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;delete_list&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;[293, 1000, 395, 678, 94]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;[94, 777, 104, 1000, 1, 12]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;[293, 395, 678]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;[110, 66, 439, 785, 1]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;[377, 823, 119, 43]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;[110, 66, 439, 785, 1]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;오답:&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1773899253288&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public int[] solution(int[] arr, int[] delete_list) {
        int[] answer = new int[arr.length];
        for(int i=0;i&amp;lt;arr.length;i++){
            for(int j=0;j&amp;lt;delete_list.length;j++){
                if(arr[i]!=delete_list[j]) answer[i]=(arr[i]);
                //현재 이중 for문은 delete_list의 원소와 하나라도 다른 값이 있다면 추가하기 때문에 문제가 발생하는 것 
                //-&amp;gt; 한 번이라도 delete_list 원소와 같을 때 추가해야 한다!
                
            }
        }
        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(참고) int != Integer&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자바에서 int 는 기본 타입(primitive type) != Integer 대문자로 시작하는 참조 타입(class) 으로 인식하게 된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ㄴ 자바는 대소문자 구분하기 때문에 int와 Integer는 전혀 다른 심볼이 되는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;* 자바에는 Int가 없다 &amp;rarr; Integer&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1773837069455&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] answer=new int[arr.length];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;  &lt;span style=&quot;color: #d32f2f; text-align: left;&quot;&gt;실행한 결괏값 [293,1000,395,678,94]이 기댓값 [293,395,678]과 다릅니다.&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;현재상황: 이중 for문에서 arr 원소가 delete_list의 원소와 다를 때마다 출력할 정답 배열에 대입하고 있다&lt;/li&gt;
&lt;li&gt;문제: 문제는 delete_list의 원소와 arr원소가 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;한 번이라도 같을 때&lt;/span&gt; 삭제해야 하는 것‼️&lt;/li&gt;
&lt;li&gt;결괏값은 원소가 하나라도 다를 때가 아니라 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;원소 하나라도 같을 땐 제외하고 모두 다를 때만 넣어야 한다❗️&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;b&gt;  boolean 변수를 두자&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1773901531887&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

class Solution {
    public int[] solution(int[] arr, int[] delete_list) {
        List&amp;lt;Integer&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();
        for(int i=0;i&amp;lt;arr.length;i++){
            boolean deleteV1=false;
            //처음에는 지우지 않도록
            for(int j=0;j&amp;lt;delete_list.length;j++){
                if(arr[i]==delete_list[j]){ 
                	deleteV1=true;
                	break;
                    //delete_list 내의 값과 겹치는 arr 원소는 삭제해야 하는 값으로 인식하고 넘어가자
                }
            }
            if(!deleteV1) list.add(arr[i]);
            //delete_list에 겹치는 값이 없다면 출력값에 추가되도록
        }
        
        int[] answer=new int[list.size()];
        for(int i=0;i&amp;lt;list.size();i++)
            answer[i]=list.get(i);
        //리스트를 int[]로 반환
        
        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;* delteV1 대신 shouldDelete 로 변수명에 의미를 명시해주는 것도 생각해보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;다른 사람 풀이1:&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1773901882113&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.stream.IntStream;

class Solution{
	public int[] solution(int[] arr, int[] delete_list){
    	return IntStream.of(arr).filter(i-&amp;gt;!IntStream.of(delete_list).anyMatch(s-&amp;gt;s==i)).toArray();
		//delet_list의 값과 일치하는 값을 제외한 arr원소들을 반환
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;anyMatch(s-&amp;gt;s==i)는 delete_list에 i와 일치하는 값이 하나라도 있다면 true인데 delte_list에 없는 값만 남기기 위해 !(not)으로 어떠한 값도 일치하지 않을 때만 통과되도록 하고 있다&lt;/li&gt;
&lt;li&gt;즉, 일치하는 값이 하나라도 있을 땐 버리고 없을 땐 남겨주는 것&lt;/li&gt;
&lt;li&gt;arr 전체를 Stream으로 변환&amp;nbsp;&lt;/li&gt;
&lt;li&gt;filter(조건) 으로 delete_list에 존재하지 않는 값만 남김&lt;/li&gt;
&lt;li&gt;toArray() &amp;rarr; 배열 int[]로 변환&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;다른 사람 풀이2:&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1773902046193&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

class Solution{
	public int[] solution(int[] arr, int[] delete_list){
    	List&amp;lt;Integer&amp;gt; list=new ArrayList&amp;lt;&amp;gt;();
        for(int n:arr){
        	list.add(n);
            //arr-&amp;gt;list
        }
        for(int n:delete_list){
        	list.remove((Integer)n);
        	//delete_list 값 삭제
        }
        int[] answer=new int[list.size()];
        for(int i=0;i&amp;lt;list.size();i++){
        	answer[i]=list.get(i);
            //list-&amp;gt;배열
        }
        return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;list.remove(num); vs list.remove((Integer)num);&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;list.remove(num):&lt;/b&gt; 컴파일러는 num을 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;인덱스&lt;/span&gt;로 인식해 해당 인덱스의 값을 지운다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;list.remove((Integer)num):&lt;/b&gt; num이란 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;값&lt;/span&gt;으로 인식해 값 num을 지운다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ArrayList에서 &lt;b&gt;remove(int index)&lt;/b&gt;와 &lt;b&gt;remove(Object o)&lt;/b&gt;가 오버로드되어&lt;span style=&quot;background-color: #9feec3;&quot;&gt; int=index, Object=값&lt;/span&gt;으로 동작하기 때문에 int는 Integer로 명시해줘야 한다‼️&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;  회고&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대소문자 실수하지 말 것&lt;/li&gt;
&lt;li&gt;입력 원소 중 특정 리스트의 원소를 제외하고 출력해야 하는 문제의 상황은 특정 리스트의 원소와 하나라도 다를 때 출력하는 것이 아니라 입력 리스트의 원소와 조건으로 주어진 리스트의 원소가 하나라도 같을 때를 제외한 조건 리스트의 원소와 모두 다를 때 출력하는 것은 다르다&amp;nbsp;&lt;/li&gt;
&lt;li&gt;조건이 주어질 때 boolean 변수를 생각해보자&lt;/li&gt;
&lt;li&gt;remove(int index) != remove(Object o)&lt;/li&gt;
&lt;li&gt;list.remove 이용해 값을 삭제할 땐 Integer로 값을 직접 명시해줘야 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고자료: 프로그래머스 코딩테스트 연습&lt;/p&gt;</description>
      <category>코딩테스트 준비</category>
      <category>boolean</category>
      <category>java</category>
      <category>remove</category>
      <category>배열의 원소 삭제하기</category>
      <category>원소 삭제</category>
      <category>자바</category>
      <category>코딩테스트</category>
      <category>코테</category>
      <category>프로그래머스</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/9</guid>
      <comments>https://hisjeans.tistory.com/entry/Java-%EB%B0%B0%EC%97%B4%EC%9D%98-%EC%9B%90%EC%86%8C-%EC%82%AD%EC%A0%9C%ED%95%98%EA%B8%B0#entry9comment</comments>
      <pubDate>Tue, 24 Mar 2026 13:18:00 +0900</pubDate>
    </item>
    <item>
      <title>Xcode-GitHub 연동할 때 발생하는 에러 해결하기</title>
      <link>https://hisjeans.tistory.com/entry/Xcode-GitHub-%EC%97%B0%EB%8F%99%ED%95%A0-%EB%95%8C-%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;  no authors 문제&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;커밋을 하는데, 터미널에서 git authors를 설정했지만 no authors가 뜸&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;ㄴ Git 설정 범위&lt;b&gt;(scope)&lt;/b&gt; 문제‼️&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Git 설정 범위:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;local(현재 저장소에만)&lt;/li&gt;
&lt;li&gt;global(현재 사용자 계정의 모든 저장소)&lt;/li&gt;
&lt;li&gt;system(모든 사용자 및 저장소)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;rarr; &lt;b&gt;&quot;--global&quot;&lt;/b&gt; 옵션 주어 이후 생성되는 모든 레포에도 설정되도록 하자&lt;/p&gt;
&lt;pre id=&quot;code_1773725985460&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd #Xcode에서 프로젝트 폴더를 터미널로 드래그(경로 이동)

git config --global user.name &quot;깃허브 사용자명&quot;
git config --global user.email &quot;깃허브에 사용한 이메일&quot;
#전역으로 사용자 정보 설정&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;# 커밋, 푸시 in 터미널&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1773726166459&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd #Xcode에서 프로젝트 폴더를 터미널로 드래그(레포 루트 이동)

git add . 
#모든 변경사항 스테이징

git commit -m &quot;커밋메시지&quot;
#커밋 기록 생성

git push origin main
#원격(main) 브랜치로 전송&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;size18&quot;&gt;* git status: 변경 사항 확인&lt;/p&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;  Xcode에서 파일 이름 변경할 때 &quot;&lt;span style=&quot;background-color: #e9eef6; color: #1f1f1f; text-align: start;&quot;&gt;Make sure a valid repository exists at the specified location and try again.&quot;&lt;/span&gt;&lt;span style=&quot;color: #1f1f1f; text-align: start;&quot;&gt; 메시지가 뜰 때&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #1f1f1f; text-align: start;&quot;&gt;ㄴ Xcode에서 폴더 이름을 변경한 뒤 이를 Git에 전달하는데, 경로 변화를 추적하지 못한 일시적인 오류&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;  &lt;/span&gt;Finder에서 폴더 이름 변경한 후 commit 했는데 &quot;The repository could not be found&quot; 메시지가 뜰 때&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;ㄴ Git 입장, 기존 파일 삭제된 후 알 수 없는 새 파일이 생긴 것으로 인식&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;ㄴ &quot;The repository could not be found&quot;: Xcode에서 .git 폴더 위치 놓쳤다&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;Git 기준으로 터미널 상태 정리하자‼️&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Xcode 완전 종료(Cmd+Q)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;터미널 연 다음 프로젝트 루트로 이동(cd 폴더 드래그)&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1773816473052&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd #폴더 드래그

git status
#현재 Git 상태 확인-&amp;gt; &quot;deleted:...untracked:...&quot; 삭제된 파일, 새로 만든 파일이 뜸

git add .
#최신 상태임을 Git에게 알려줌

git commit -m &quot;커밋 메시지 작성&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;rArr; 폴더 이름을 바꿀 땐 Finder에서 직접 바꾸지 말고 &lt;b&gt;&quot;git mv&quot;&lt;/b&gt; 를 사용하자&lt;/p&gt;
&lt;pre id=&quot;code_1773819172747&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git mv #이전에 설정되어 있는 폴더 이름 #변경하려고 하는 폴더 이름
git commit -m &quot;커밋 메시지 작성&quot;
git push origin main&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;  &lt;span&gt;! [rejected]&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; main -&amp;gt; main (fetch first)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;error: failed to push some refs to...&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;ㄴ 이미 GitHub 원격(main)에 커밋되었지만 로컬 main에 이 커밋이 없어 원격 main에 비해 뒤쳐진 상태‼️ 여기서 바로 push를 시도해서 에러가 생긴 것 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;rArr; 우선 원격 변경 사항을 가져온 뒤에 합치자 pull &amp;rarr; push&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1773817484100&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd #파일 경로

git status
git branch
#브랜치가 현재 main인지 확인

git add .
git commit -m &quot;Local initial commit&quot;
#커밋되지 않은 변경사항이 많을 경우, 먼저 커밋하는 것이 안전

git pull --rebase origin main
#원격 main 변경 먼저 가져오자
#원격 커밋을 먼저 가져온 후 로컬 커밋 다시 쌓기

git push -u origin main&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;size18&quot;&gt;* pull -rebase: 히스토리 깔끔하게 유지 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;  정리&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;git authors를 설정할 땐 global 범위로 설정하여 앞으로 생성할 모든 레포에 동일한 이름과 이메일을 자동으로 사용하도록 하자&lt;/li&gt;
&lt;li&gt;기본적으로 cd 루트로 이동 &lt;span style=&quot;font-size: 1.12em; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;rarr; git status 변경사항 확인 &lt;/span&gt;&lt;span style=&quot;font-size: 1.12em; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;rarr; git add . 변경한 것 스테이징 &lt;/span&gt;&lt;span style=&quot;font-size: 1.12em; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;rarr; git commit -m &quot;커밋 메시지 작성&quot; &lt;/span&gt;&lt;span style=&quot;font-size: 1.12em; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;rarr; git push origin main 원격 브랜치로 푸시하는 흐름 기억하자&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 1.12em; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;Xcode에서 폴더 이름을 직접 변경하거나 Finder에서 바꾸는 것 보다 &amp;lt;&amp;lt; 안전하게 git mv 사용하자&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 1.12em; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;히스토리 깔끔하게 유지하는 방법으로 pull --rebase 사용하자&lt;/span&gt;&lt;span style=&quot;font-size: 1.12em; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Github 버전 관리</category>
      <category>! [rejected] main -&amp;gt; main (fetch first)</category>
      <category>Git</category>
      <category>git push 오류</category>
      <category>Make sure a valid repository exists at the specified location and try again.</category>
      <category>The repository could not be found</category>
      <category>xcode</category>
      <category>깃</category>
      <category>깃허브</category>
      <category>커밋</category>
      <category>푸시</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/8</guid>
      <comments>https://hisjeans.tistory.com/entry/Xcode-GitHub-%EC%97%B0%EB%8F%99%ED%95%A0-%EB%95%8C-%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0#entry8comment</comments>
      <pubDate>Wed, 18 Mar 2026 16:55:04 +0900</pubDate>
    </item>
    <item>
      <title>git push, pull, fetch, init, add</title>
      <link>https://hisjeans.tistory.com/entry/git-push-pull-fetch-init-add</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;git push: 원격 저장소로 내 작업 올림&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;로컬 환경에서 개발하며 여러 번 commit으로 버전 저장하고 난 후, 최종적으로 이 이력을 원격 저장소인 GitHub 에 업로드해야 함&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이때 활용하는 git 명령어 =&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;git push&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;git push: 로컬 저장소에 쌓인 커밋들을 원격 저장소의 해당 브랜치로 전송&lt;/li&gt;
&lt;li&gt;수동 push &amp;larr; because, 정교하게 push하기 위해서&lt;/li&gt;
&lt;li&gt;&lt;b&gt;push&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; font-size: 1.12em; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;되면 로컬 환경에서 개발한 코드 뿐 아니라 개발하면서 중간중간 commit 했던 이력들 또한 업로드됨&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;git pull: 내 브랜치에 원격 변경 사항 반영&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;when, 로컬에서 개발 중인 다른 팀원이 먼저 본인의 작업물 push 함으로 원격저장소 내용 변화 발생&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이때 원격저장소의 변경 사항을 현재 내 로컬 브랜치에 반영해 개발 계속하고자 함&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이때 활용하는 명령어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;git pull&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;git pull: 원격 저장소의 변경 이력을 가져온 후(fetch), 현재 브랜치와 자동으로 합치는 merge를 동시에 진행&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;git fetch, git pull 구분해 사용하는 이유&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;div style=&quot;color: #212529;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;when, 로컬 환경에서 작업하던 중 원격저장소의 내용을 다른 팀원이 수정함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이때 내가 개발한 내용을 원격저장소에 push하려고 한다면 &amp;rarr; &lt;b&gt;거절❗️&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;because, 원격저장소에 팀원의 수정사항이 이미 반영 되어 있고, 이때 우리의 push 를 받는다면 팀원의 수정사항이 &lt;b&gt;overwrite&lt;/b&gt; 되는 상황 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;rArr; pull 대신 &amp;rarr;&lt;span&gt; git &lt;/span&gt;fetch,&lt;span&gt;&amp;nbsp;&lt;/span&gt;merge&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;git fetch:&lt;/b&gt; 원격 저장소의 내용 -&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;&quot;가져오기만&quot;&lt;/b&gt;&lt;/span&gt;&amp;rarr; 로컬 저장소&lt;/li&gt;
&lt;li&gt;fetch 이후, 원격 브랜치와 로컬 브랜치 비교하며 충돌되는 상황 발생하지 않는지, 충돌한다면 어떻게 해결하면 좋을지 확인한 후,&lt;span style=&quot;font-size: 1.12em; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 문제가 없다고 판단되면&lt;b&gt; git &lt;/b&gt;&lt;/span&gt;&lt;b&gt;merge&lt;/b&gt;&lt;span style=&quot;font-size: 1.12em; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 1.12em; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;rarr; 두 브랜치 병합&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;작업 후 push하는 습관 들이자&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;command+shift+p &amp;gt; gc(git commit)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;동기화: commit pull, push&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;/ github의 repository를 먼저 만들고 clone하는 과정을 거쳐 원격저장소로부터 로컬 저장소 구성할 수 있음&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;git init: 기존 폴더 &amp;rarr; Git 저장소&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;  이미 로컬에서 개발한 Git을 이용해 형상관리 원격저장소에 업로드할 수 있지 않을까?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이때 로컬저장소에 필요한 명령어 &lt;b&gt;git init&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;git init&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 로컬 저장소를&lt;b&gt; Git &lt;/b&gt;통해 관리 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;git add와 파일 상태&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;git commit&lt;/b&gt;은 버전 기록할 때 활용&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;commit 할 때 여러 파일 수정사항 기록해도 좋지만, &lt;span style=&quot;background-color: #9feec3;&quot;&gt;하나의 commit에 하나의 파일&lt;/span&gt;만 저장할 수 있다면 다른 팀원들이 commit history 볼 때 조금 더 수월하게 볼 수 있을 것&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이때 활용하는 명령어 =&lt;b&gt; git add&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;git add&lt;/b&gt;는 git commit에 포함될 파일 지정&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;git add&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 하나의 파일 지정 &amp;rarr; 해당 파일 stage에 올림&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;파일 상태:&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;워킹 디렉터리의 모든 파일은 크게&lt;b&gt; Tracked(관리대상)/Untracked(관리대상 아님)&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;Tracked&lt;/b&gt; 파일: 이미 스냅샷 포함되어 있던 파일로 Git이 알고 있는 파일&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;나머지 파일 모두 &lt;b&gt;Untracked&lt;/b&gt; 파일: &lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;워킹 디렉토리에 있는 파일 중 스냅샷에도 Staging Area에도 포함되지 않은 파일&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tracked 파일은 세 가지 상태로 나뉨&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;Unmodified(수정하지 않음)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Modified(수정함)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Staged(커밋으로 저장소에 기록할)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;처음 저장소를 git clone하면 &amp;rarr; 모든 파일은 &lt;b&gt;Tracked이면서 Unmodified상태 &lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;〰️ because, 파일 Checkout하고 나서 아무것도 수정하지 않았기 때문&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;마지막 커밋 이후 아직 아무것도 수정하지 않은 상태에서 어떤 파일 수정하면 Git은 그 파일&lt;b&gt; Modified &lt;/b&gt;상태로 인식&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;실제 커밋 위해 이 수정한 파일을 &lt;b&gt;Staged&lt;/b&gt; 상태로 만들고, Staged 상태의 파일&lt;b&gt; git commit&lt;/b&gt;하면서 라이프사이클&lt;span style=&quot;background-color: #9feec3;&quot;&gt;(Tracked+Unmodified)&lt;/span&gt; 계속 반복&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;git init&lt;/b&gt; 또는 &lt;b&gt;git clone&lt;/b&gt;으로 로컬 저장소 준비&lt;/li&gt;
&lt;li&gt;코드 수정, 의미 있는 단위가 되었을 때 &lt;b&gt;git add&lt;/b&gt;로 스테이징&lt;/li&gt;
&lt;li&gt;&lt;b&gt;git commit&lt;/b&gt;해 버전 기록 남김&lt;/li&gt;
&lt;li&gt;if) 팀 작업인 저장소라면 &lt;b&gt;git fetch/git pull&lt;/b&gt; 수시로 변경사항 반영&lt;/li&gt;
&lt;li&gt;충돌 여부 확인 및 테스트 후, &lt;b&gt;git push&lt;/b&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;참고자료&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;boostcourse 「Github으로 따라하는 버전 관리」&amp;nbsp;&lt;/p&gt;</description>
      <category>Github 버전 관리</category>
      <category>Git</category>
      <category>git add</category>
      <category>git clone</category>
      <category>git commit</category>
      <category>git init</category>
      <category>git push</category>
      <category>github</category>
      <category>깃</category>
      <category>깃허브</category>
      <category>원격저장소</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/7</guid>
      <comments>https://hisjeans.tistory.com/entry/git-push-pull-fetch-init-add#entry7comment</comments>
      <pubDate>Thu, 5 Mar 2026 17:40:04 +0900</pubDate>
    </item>
    <item>
      <title>GitHub: Repository, Commit, Issues, Config, Clone</title>
      <link>https://hisjeans.tistory.com/entry/GitHub-Repository-Commit-Issues-Config-Clone</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Repository(저장소):&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;GitHub상 프로그램 담는 저장소&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Repository&lt;/b&gt;에서 코드 저장할 수 있을 뿐 아니라 Commit 히스토리, Pull Request 등 협업 위한 여러 작업 가능&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;개발하는 프로젝트 담는 폴더&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;b&gt;Commit(버전 저장):&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&quot;제출하다&quot; 라는 뜻&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;Git에서 버전 저장하는 것 의미&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Commit History&lt;/b&gt; &amp;rarr; 시간순 확인 가능&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #212529;&quot;&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Issues(소통 및 관리 도구):&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;개발하면서 소통 해야할 때 많음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;버그 발생해 debug 해야 하거나 새로운 기능 만들어야 하는 것도 포함될 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이런 상황의 대부분 코드를 보고 의견을 교환하여 해결해야 하는 경우 많음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;nbsp;ㄴ issues&lt;/b&gt;는 repository에서 이러한 기능을 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;issues&lt;/b&gt;에서 &lt;b&gt;&amp;ldquo;issue 생성&amp;rdquo;&lt;/b&gt; &amp;rarr; 해결하고 싶은 문제 업로드, 의견 달 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 때 해당 이슈가 어떤 것인지 알려주는 &lt;b&gt;labels&lt;/b&gt;, 해당 이슈 처리할 사람이 누구인지 &lt;b&gt;Assignee&lt;/b&gt;으로 지정할 수 있음&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Clone:&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;GitHub의 Repository 내용 -복제&amp;rarr; 내 컴퓨터(로컬) 환경&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;rArr; 로컬환경에서 GitHub의 파일받아 개발 가능&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Config:&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;로컬 환경에서 작업 후 commit 진행할 때, &quot;누가 해당 커밋을 했는지&quot; 기록하고 확인 필요&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;해당 작업 수행하는 git 명령어 = &lt;b&gt;git config&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #fbfcfd; color: #24292e; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;git config -- global user.name egoing
git config -- global user.email egoing@gmail.com&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;git config&lt;/b&gt;에&lt;b&gt; --global&lt;/b&gt; 옵션을 더해 해당 값을 기본값으로 활용&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;사용자의 이름(user.name), 이메일 주소(user.email) 등록&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;참고자료&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;boostcourse 「Github으로 따라하는 버전 관리」&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Github 버전 관리</category>
      <category>Clone</category>
      <category>commit</category>
      <category>config</category>
      <category>Git</category>
      <category>github</category>
      <category>issues</category>
      <category>repository</category>
      <category>깃</category>
      <category>깃허브</category>
      <category>커밋</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/6</guid>
      <comments>https://hisjeans.tistory.com/entry/GitHub-Repository-Commit-Issues-Config-Clone#entry6comment</comments>
      <pubDate>Thu, 26 Feb 2026 10:38:24 +0900</pubDate>
    </item>
    <item>
      <title>Git과 Github</title>
      <link>https://hisjeans.tistory.com/entry/Git%EA%B3%BC-Github</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Git과 Github란?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예: &amp;ldquo;dropbox&amp;rdquo;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;in 개발자 세계, 검증 끝난 정보도구 &amp;rarr; 일반인 사용 가능&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;ldquo;dropBox client&amp;rdquo; 컴퓨터에 설치하는 프로그램&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;⬆️&amp;nbsp;&amp;ldquo;dropbox.com&amp;rdquo; 정보 저장되는 인터넷 상의 서버&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이와 비슷한 개념 &lt;b&gt;Git&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Git:&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;when 소프트웨어 개발, 여러 사람 참여 방식 &amp;rarr; 개발 효율 ⬆️&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이때 중요한 점‼️:&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;팀원들 개발 도중 수정된 내역 다른 팀원 바로 확인&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;서비스에서 배포된 소프트웨어의 버전 관리 통해 개발의 효율성 ⬆️&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;&lt;b&gt;Git server &amp;amp; Git client:&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;git 여러 버전 관리 시스템 중 분산된 환경 &amp;rarr; 소스코드 관리&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;분산 환경 시스템에는 중앙서버, 클라이언트 존재&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;코드 모아놓게 되는 원격 컴퓨터 = &lt;b&gt;remote server&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;그 코드 사본 받아 개발하는 개인/지역 컴퓨터 = &lt;b&gt;local client&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;Git에서 &lt;b&gt;git server&lt;/b&gt;와 &lt;b&gt;git client&lt;/b&gt; 존재&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;git client&lt;/b&gt;는 &lt;b&gt;git server&lt;/b&gt;의 사본을 가지고 각자의 로컬 환경에서 개발 할 수 있음&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;ldquo;git server&amp;rdquo;:&lt;/b&gt; &lt;b&gt;github.com, gitlab&lt;/b&gt; 등&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;⬆️&amp;nbsp;작성&amp;nbsp;문서 ⬇️&amp;nbsp;동기화&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;ldquo;git client&amp;rdquo;: git CLI(Command-line interface),&lt;/b&gt; Visual Studio Code에 내장된 &lt;b&gt;git&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;rArr; 협업&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;참고자료&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;boostcourse 「Github으로 따라하는 버전 관리」&amp;nbsp;&lt;/p&gt;</description>
      <category>Github 버전 관리</category>
      <category>Git</category>
      <category>Git Server</category>
      <category>github</category>
      <category>깃</category>
      <category>깃허브</category>
      <category>버전 관리</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/5</guid>
      <comments>https://hisjeans.tistory.com/entry/Git%EA%B3%BC-Github#entry5comment</comments>
      <pubDate>Wed, 25 Feb 2026 15:36:56 +0900</pubDate>
    </item>
    <item>
      <title>volatile 키워드</title>
      <link>https://hisjeans.tistory.com/entry/volatile-%ED%82%A4%EC%9B%8C%EB%93%9C</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;다음 내용은 C 언어 코딩 도장, Microsoft Learn의 내용을 바탕으로 작성되었습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;pre id=&quot;code_1771980776476&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;volatile 자료형 변수이름;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;when 변수 선언,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;volatile&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;키워드로 컴파일러가 해당 변수를 최적화 대상에서 제외하고 항상 메모리에 접근하도록 함&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;예:&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;cpp&quot; style=&quot;background-color: #fbfcfd; color: #24292e; text-align: left;&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;volatile int num1=10; //num1 변수 값이 바뀔 수 있으니 항상 메모리에서 직접 읽으라고 컴파일러에게 알려주는 것&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;b&gt;  어떤 변수는 왜 최적화하면 안 될까?&lt;/b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;volatile&lt;/b&gt;&lt;b&gt;:&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;컴파일러가 실행 속도를 향상시키기 위해 변수의 값을 레지스터에 캐싱해 재활용하지 못하도록 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;rarr; 프로그램이 매번 메모리에 접근해 최신 값 읽어와야 하는 것&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;예:&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;cpp&quot; style=&quot;background-color: #fbfcfd; color: #24292e; text-align: left;&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;int i=0;
while(i&amp;lt;10)
	i++;
printf(&quot;%d\n&quot;, i);&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;코드 최적화 &amp;rarr; while 반복문 없애고 i에 10 할당(Visual Studio의 /O2 옵션, GCC의 -O3 옵션 사용해 최적화)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;darr;&lt;/p&gt;
&lt;pre class=&quot;perl&quot; style=&quot;background-color: #fbfcfd; color: #24292e; text-align: left;&quot;&gt;&lt;code&gt;int i=10;
printf(&quot;%d\n&quot;, i);&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;컴파일러가 판단하기에 반복문을 수행한 결과 = 10 〰️ 따라서 반복문 필요 ❌, &lt;b&gt;컴파일러 최적화 &lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;‼️&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;if) &lt;/span&gt;&lt;/b&gt;i를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;volatile&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;로 선언하면 &amp;rarr; 반복할 때마다 컴파일러가 항상 i의 메모리에 접근해야 하기 때문에 컴파일러는 while 반복문을 없애지 않음, 컴파일러 최적화 ❌&lt;/p&gt;
&lt;pre class=&quot;cpp&quot; style=&quot;background-color: #fbfcfd; color: #24292e; text-align: left;&quot;&gt;&lt;code&gt;volatile int i=0; //volatile로 선언-&amp;gt;항상 메모리 접근하도록 만듦
while(i&amp;lt;10) //항상 i의 메모리에 접근해야 하기 때문에 컴파일러가 반복문을 없애지 않음
	i++;
printf(&quot;%d\n&quot;, i);&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;  &lt;/b&gt;즉,&lt;b&gt; volatile &lt;/b&gt;은&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;변화하는 값을 가지고 있으니 변화할 때 사용하자&lt;/li&gt;
&lt;li&gt;측정하고자 하는 루프 or 변수 접근이 컴파일러에 의해 제거되지 않으므로 최적화를 의도적으로 막고 싶을 때 volatile 유용&lt;/li&gt;
&lt;li&gt;필요할 때마다 반드시 읽어서 사용&lt;/li&gt;
&lt;li&gt;컴파일러가 임의로 변수 값을 캐싱하지 못하게 함&lt;br /&gt;volatile&amp;nbsp;키워드 각각의 변수에 적용, 최적화하지 않고 동작하도록 함&lt;/li&gt;
&lt;li&gt;벤치 마크 테스트 등을 위하여 컴파일러 최적화를 의도적으로 배제해야 하는 경우 유용하게 사용 가능&lt;/li&gt;
&lt;li&gt;인터럽트 서비스 루틴과의 통신에 사용되는 다중 처리나 전역 데이터 영역에서 접근할 수 있는 공유 메모리에서 개체 선언하는 데 유용&lt;/li&gt;
&lt;li&gt;컴파일러가 프로그램에 액세스할 때마다 메모리에서 값을 다시 로딩하여 개체의 상당한 최적화 횟수를 줄일 수 있음&lt;/li&gt;
&lt;li&gt;개체 상태 예기치 않게 변경되는 경우 예상 가능한 프로그램 성능 보장하는 유일한 방법&lt;/li&gt;
&lt;li&gt;인터럽트, 멀티스레드, 하드웨어 접근 관련 코드에서 필수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고자료: 코딩 도장, Microsoft Learn&lt;/p&gt;</description>
      <category>코딩테스트 준비</category>
      <category>C</category>
      <category>c언어</category>
      <category>volatile</category>
      <category>변수</category>
      <category>최적화</category>
      <category>컴파일러최적화</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/4</guid>
      <comments>https://hisjeans.tistory.com/entry/volatile-%ED%82%A4%EC%9B%8C%EB%93%9C#entry4comment</comments>
      <pubDate>Wed, 25 Feb 2026 15:27:35 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/Java] 분수의 덧셈</title>
      <link>https://hisjeans.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4Java-%EB%B6%84%EC%88%98%EC%9D%98-%EB%8D%A7%EC%85%88</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;다음 내용은 프로그래머스 코딩테스트 입문 문제를 기반으로 작성된 글입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문제 설명:&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #dddddd;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;첫 번째 분수의 분자와 분모를 뜻하는&amp;nbsp;&lt;/span&gt;numer1&lt;span style=&quot;text-align: left;&quot;&gt;,&amp;nbsp;&lt;/span&gt;denom1&lt;span style=&quot;text-align: left;&quot;&gt;, 두 번째 분수의 분자와 분모를 뜻하는&amp;nbsp;&lt;/span&gt;numer2&lt;span style=&quot;text-align: left;&quot;&gt;,&amp;nbsp;&lt;/span&gt;denom2&lt;span style=&quot;text-align: left;&quot;&gt;가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;입출력 예:&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;numer1&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;denom1&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;numer2&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;denom2&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;[5,4]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;9&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;[29,6]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문제 이해:&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;두 분수의 분자(numer), 분모(denom)가 모두 주어졌을 때, 이를 더한 값을 기약분수로 나타낸다면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력: numer1, denom1, numer2, denom2&lt;/li&gt;
&lt;li&gt;출력: [분자, 분모] 형태 배열로 반환&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;분수 덧셈 공식:&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;A/B + C/D = (A x D + C x B) / B x D​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;두 분수를 통분해 더한 뒤, 분자와 분모의 최대공약수(GCD)로 나눠 기약분수로 만들어야 함&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;나의 풀이:&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;java&quot; style=&quot;background-color: #fbfcfd; color: #24292e; text-align: left;&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        int[] answer = new int[2]; //배열 초기화
        int den=denom1*denom2; //통분
        int num=numer1*denom2+numer2*denom1;
        int gcd=1;
        for(int i=1;i&amp;lt;=den&amp;amp;&amp;amp;i&amp;lt;=num;i++){
            if(den%i==0&amp;amp;&amp;amp;num%i==0)
                gcd=i; //최대공약수 갱신
            //반복문 작은 수 ~ 큰 수 진행되어 루프 마지막 최대공약수 저장
            //기약분수 만들기 위해 최대공약수 이용해야
        }
        den=den/gcd;
        num=num/gcd;
        answer[0]=num;
        answer[1]=den;
        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;시간 복잡도:&lt;/b&gt; O(N) _ 분자, 분모 가운데 더 작은 수까지 반복하기 때문에 선형 시간&amp;nbsp;&lt;/li&gt;
&lt;li&gt;배열 초기화, 단순히 분모가 같은 경우와 다른 경우를 나누어 처리하는 것 보다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;기약분수&lt;/b&gt;를 통하여 계산하는 것이 효과적&lt;br /&gt;&lt;b&gt;최대공약수&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;즉, 분자와 분모의 &lt;b&gt;GCD&lt;/b&gt; 구해야 함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기약분수&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;예: 1/4 + 1/4 = (1x4+1x4) / (4x4) = 8/16 = 1/2&lt;/li&gt;
&lt;li&gt;&lt;b&gt;분수 덧셈&lt;/b&gt;(통분 과정): (numer1&lt;span&gt;&amp;nbsp;&lt;/span&gt;denom2 + numer2&lt;span&gt;&amp;nbsp;&lt;/span&gt;denom1) / (denom1 * denom2)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;문제는 최대공약수를 얼마나 빨&lt;/b&gt;&lt;b&gt;리 찾는가&lt;/b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;성능 개선 방법 1:&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;반복 범위 최소화&lt;/p&gt;
&lt;pre id=&quot;code_1771907934600&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int limit=Math.min(den, num);
for(int i=1;i&amp;lt;=limit;i++);
//den, num 두 개의 조건을 모두 검사하지 않고, 두 수 가운데 더 작은 수까지만 반복해 반복 범위 최소화
{...}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;성능 개선 방법 2:&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;GCD 구할 때 단순히 1부터 반복(if 분자, 분모 매우 큰 수라면 반복횟수가 커져 성능 저하 발생 가능)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;- 성능&amp;uarr;, 숫자 기하급수적 증가할 때 발생하는 알고리즘적 한계 해결 필요&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&amp;rArr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;유클리드 호제법 O(log N)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;시간 복잡도로 원래 풀이 O(N) 보다 빠르게 최대공약수를 구할 수 있음&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;원리:&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;A, B 두 수가 있을 때(A&amp;gt;B), A를 B로 나눈 나머지를 &lt;b&gt;R&lt;/b&gt;이라 함&lt;/li&gt;
&lt;li&gt;A, B 최대공약수 = B, R의 최대공약수&lt;/li&gt;
&lt;li&gt;나머지 값이 0이 될 때까지 위 과정 반복, 0이 될 때 나누는 수=최대공약수&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;풀이:&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1771909893010&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static int gcd(int a, int b){ //두 수 a, b 있을 때
	while(!=0){ //0이 될 때까지 반복
    	int r=a%b; //a를 b로 나눈 나머지=r
        a=b;
        b=r;
        //a, b 최대공약수 = b, r 최대공약수
    }
    return a; //0이 될 때 나누는 수 = 최대공약수
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;다른 사람의 풀이:&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #fbfcfd; color: #24292e; text-align: left;&quot;&gt;&lt;code&gt;class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        int mother = num1 * num2; //분모
        int son1 = num1 * denum2; //첫 번째 분자
        int son2 = num2 * denum1; //두 번째 분자
        int totalSon = son1 + son2; //첫 번째 분자, 두 번째 분자의 합
        for(int i = mother; i &amp;gt;= 1; i--){ //내림차순으로 큰 수부터 공약수 찾기
            if(totalSon % i == 0 &amp;amp;&amp;amp; mother % i == 0){
                totalSon /= i; //즉시 나누기
                mother /= i;
            }
        }
        int[] answer = {totalSon, mother};
        return answer;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;mother(분모)~ 시작해 값 줄여가며 공약수 찾음&lt;/li&gt;
&lt;li&gt;하지만 숫자가 크다면&amp;nbsp;&lt;b&gt;유클리드 호제법&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이 적합_왜냐하면 큰 수에서 시작해 내려오는 방식 또한 &lt;b&gt;최악의 경우 O(N)&lt;/b&gt; 시간 소요되기 때문&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;정리 :&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;최대공약수를 구할 때 오름차순 &amp;lt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;내림차순&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이 유리하기는 하나&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;유클리드 호제법&lt;/b&gt; 같은 수학적 알고리즘을 잘 활용한다면 시간 복잡도를 보다 획기적으로 단축 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Math.min()&lt;/b&gt; 함수로 연산 범위를 줄이는 습관 필요&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;참고 자료: 프로그래머스 코딩테스트 입문&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트 준비</category>
      <category>java</category>
      <category>분수덧셈</category>
      <category>알고리즘</category>
      <category>유클리드호제법</category>
      <category>코딩테스트</category>
      <category>코테</category>
      <category>프로그래머스</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/3</guid>
      <comments>https://hisjeans.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4Java-%EB%B6%84%EC%88%98%EC%9D%98-%EB%8D%A7%EC%85%88#entry3comment</comments>
      <pubDate>Tue, 24 Feb 2026 14:16:43 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/Java] 콜라츠 수열</title>
      <link>https://hisjeans.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4Java-%EC%BD%9C%EB%9D%BC%EC%B8%A0-%EC%88%98%EC%97%B4</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;다음 내용은 프로그래머스 코딩테스트 연습 기반으로 작성된 글입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;콜라츠 수열&lt;/b&gt;: 수가 커졌다 작아지기를 반복하다 1에 수렴하는 모습을 우박에 빗대어 &lt;b&gt;'우박수', '우박수열'&lt;/b&gt;이라 부름&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;자연수 n에 대해 다음 작업 반복&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;T(n) = n/2 &lt;b&gt;(n이 짝수일 때)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;T(n) = 3n+1 &lt;b&gt;(n이 홀수일 때)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;함수 T(n)&lt;/b&gt;을 자연수 &lt;b&gt;n&lt;/b&gt;에 대해 반복한다면 1로 수렴한다는 추측&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;또한 다음과 같이 표현할 수 있음&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;T'(n) = n/2 &lt;b&gt;(n이 짝수일 때)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;T'(n) = 3n+1/2&lt;b&gt; (n이 홀수일 때)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;위 과정에서 거쳐간 모든 수를 기록한 수열 = &lt;b&gt;콜라츠 수열&lt;/b&gt;&lt;br /&gt;계산 결과 1,000 이하의 수에 대해 전부 1에 도달한다는 것&lt;br /&gt;임의의 1,000 보다 작거나 같은 양의 정수 n이 주어질 때 초기값 n인 콜라츠 수열을 return 하는 solution 함수 완성&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;나의 풀이:&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; style=&quot;background-color: #fbfcfd; color: #24292e; text-align: left;&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;import java.util.ArrayList;
import java.util.List; //list, arraylist java.util 패키지에 있기 때문, 'import java.util.*;' util 패키지 전체 import할 수 있음
class Solution {
    public int[] solution(int n) {
        List&amp;lt;Integer&amp;gt; answer=new ArrayList&amp;lt;&amp;gt;(); //배열 크기 모를 때 사용하기 적합
        answer.add(n); //초기값 추가
        while(n!=1){ //1이 될 때까지 반복
            if(n%2==0) {
                n=n/2;
                answer.add(n);
            }
            else {
                n=3*n+1;
                answer.add(n);
            }
          //answer.add(n); //while문 밖에 작성하여 업데이트된 n값을 리스트에 추가하는 문을 한 번만 작성하여 처리할 수 있음
        }

        return answer.stream().mapToInt(Integer::intValue).toArray();

    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;List&amp;lt; Integer&amp;gt;:&lt;/b&gt;&amp;nbsp;길이 미리 예측할 수 없는 배열에 적합&lt;/li&gt;
&lt;li&gt;수열 얼마나 길어질지 예측할 수 없기 때문에 동적 배열 이용&lt;/li&gt;
&lt;li&gt;문제 반환 타입은 int[]이기 때문에 stream() 사용해 리스트 기본형 배열로 변환&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;다른 사람의 풀이:&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; style=&quot;background-color: #fbfcfd; color: #24292e; text-align: left;&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;import java.util.stream.IntStream;

class Solution{
  public int[] solution(int n){
    return IntStream.concat(
      IntStream.iterate(n, i-&amp;gt;i&amp;gt;1, i-&amp;gt;i%2==0? i/2:i*3+1), 
      //n에서 시작해 i&amp;gt;1인 동안 반복 짝수일 때 i/2 홀수일 때 i*3+1 계산(초기값, 계속조건, 다음값 계산)
      IntStream.of(1))
      .toArray();
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;IntStream.iterate(초기값, 조건, 다음값):&lt;/b&gt; n부터 시작해 i&amp;gt;1인 동안 3번째 인자의 람다식(짝수 &amp;rarr; /2, 홀수면 &amp;rarr; *3+1) 반복 수행&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;IntStream.concat:&lt;/b&gt; iterate 조건 i&amp;gt;1이기 때문에 마지막 1이 포함되지 않기 때문에 &lt;b&gt;IntStream.of(1)&lt;/b&gt;을 이용하여 마지막 수 1을 강제로 붙임&lt;/li&gt;
&lt;/ul&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; &amp;nbsp; 정리&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Java의 기본 라이브러리 사용법 확인:&lt;br /&gt;1. java.lang 패키지 내 클래스(int, String 등) &amp;rarr; import 불필요&lt;br /&gt;2. 같은 패키지 내 클래스 &amp;rarr; import 불필요&lt;br /&gt;3. 다른 패키지 클래스 &amp;rarr; import 필요&lt;br /&gt;&amp;rArr; List, ArrayList 등 java.util 패키지에 있는 클래스이기 때문에 import 필요(&lt;b&gt;import java.util.*;&lt;/b&gt; 으로 한 번에 처리 가능)&lt;/li&gt;
&lt;li&gt;배열은 크기 고정이지만 리스트는 가변 크기로 결과값 개수 예측하기 힘든 배열에 대해 &lt;b&gt;ArrayList&lt;/b&gt; 활용하는 것이 효율적&lt;/li&gt;
&lt;li&gt;반복 루프 전 초기값 추가 &lt;b&gt;&quot;answer.add(n)&quot;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;반복 조건은 n이 1이 될 때까지 반복되도록&lt;/li&gt;
&lt;li&gt;n은 &lt;b&gt;answer.add&lt;/b&gt; 사용해 업데이트&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;참고 자료: 프로그래머스 코딩테스트 기초문제&lt;/p&gt;</description>
      <category>코딩테스트 준비</category>
      <category>ArrayList</category>
      <category>java</category>
      <category>streamapi</category>
      <category>코딩테스트</category>
      <category>코테</category>
      <category>콜라츠수열</category>
      <category>프로그래머스</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/2</guid>
      <comments>https://hisjeans.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4Java-%EC%BD%9C%EB%9D%BC%EC%B8%A0-%EC%88%98%EC%97%B4#entry2comment</comments>
      <pubDate>Mon, 23 Feb 2026 16:32:39 +0900</pubDate>
    </item>
    <item>
      <title>컴퓨터 과학 입문: 2진법부터 알고리즘, 스크래치까지</title>
      <link>https://hisjeans.tistory.com/entry/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B3%BC%ED%95%99-%EC%9E%85%EB%AC%B8-2%EC%A7%84%EB%B2%95%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%8A%A4%ED%81%AC%EB%9E%98%EC%B9%98%EA%B9%8C%EC%A7%80</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;b&gt;1. 2진법(Binary)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;컴퓨터 과학은 문제를 해결하는 과정, 즉 문제 해결에 대한 학문이자 정보 표현 방법이 핵심&lt;br /&gt;&lt;br /&gt;input &amp;rarr;&lt;b&gt; 문제 해결 중간 과정: '컴퓨터과학'&lt;/b&gt; &amp;rarr; output&lt;br /&gt;&lt;br /&gt;&lt;b&gt;진법 원리&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;- 10진법:&lt;/b&gt;&amp;nbsp;0~9까지&amp;nbsp;총&amp;nbsp;10개의&amp;nbsp;기호로&amp;nbsp;표현&amp;nbsp;(일상에서&amp;nbsp;사용)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt; &amp;nbsp; 컴퓨터는 0과 1로 이루어져 있는데, 이 숫자로 어떻게 사진과 영상을 표현할 수 있을까?&lt;br /&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ㄴ &lt;/b&gt;&lt;b&gt;2진법:&lt;/b&gt; 0과 1의 조합으로 글자, 사진, 영상, 소리 등을 저장 (컴퓨터에서 사용)&lt;br /&gt;&lt;br /&gt; &amp;nbsp; 0과 1보다 큰 수는 어떻게 표현할까?&lt;br /&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ㄴ&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;010은 숫자 2를 2진법 패턴으로 표현&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ㄴ&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;100은 백이 아닌 4를 의미 (2&amp;sup2;&amp;times;1 + 2&amp;sup1;&amp;times;0 + 1&amp;times;0 = 4)&lt;br /&gt;&lt;br /&gt;컴퓨터에는&amp;nbsp;많은&amp;nbsp;&lt;b&gt;스위치(트랜지스터)&lt;/b&gt;가 있으며, on/off 상태로 0과 1을 표현&lt;br /&gt;&lt;br /&gt;&lt;b&gt;비트:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2진법에서 하나의 자릿수를 표현하는 단위 (0 또는 1, 두 가지 값만 가질 수 있는 측정 단위)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1 또는 0, 참 또는 거짓, 켜짐 또는 꺼짐 등 두 가지 상태를 사용해 정보를 표현&lt;br /&gt;&lt;br /&gt;&lt;b&gt;8bits = 1Byte&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;총 2⁸ = 256개의 서로 다른 바이트가 존재&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;b&gt;Byte&lt;/b&gt;가 모이면&lt;br /&gt;&amp;darr; &lt;br /&gt;&lt;b&gt;KB&lt;/b&gt; (1,000 byte)&lt;br /&gt;&amp;darr;&lt;br /&gt;&lt;b&gt;MB&lt;/b&gt; (1,000 kilobyte = 100만 바이트)&lt;br /&gt;&amp;darr;&lt;br /&gt;&lt;b&gt;GB&amp;nbsp;&lt;/b&gt;(1,000&amp;nbsp;megabyte&amp;nbsp;=&amp;nbsp;10억&amp;nbsp;바이트)&lt;br /&gt;&amp;darr;&lt;br /&gt;&lt;b&gt;TB&lt;/b&gt;&amp;nbsp;(1,000&amp;nbsp;gigabyte&amp;nbsp;=&amp;nbsp;1조&amp;nbsp;바이트)&lt;br /&gt;&amp;darr;&lt;br /&gt;&lt;b&gt;페타바이트,&amp;nbsp;엑사바이트&lt;/b&gt;&amp;nbsp;등&amp;nbsp;더&amp;nbsp;큰&amp;nbsp;단위까지&amp;nbsp;표현&amp;nbsp;가능&lt;br /&gt;&lt;br /&gt;&lt;b&gt;트랜지스터:&lt;/b&gt; 컴퓨터 속 가장 작은 스위치로, 물리적으로 정보를 표현&lt;br /&gt;&lt;br /&gt;&lt;/p&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;size18&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;2. 정보의 표현&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;문자 표현&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 문자를 숫자로 표현할 수 있도록 정해진 표준:&lt;b&gt; ASCII(아스키코드)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;아스키코드&lt;/b&gt;는 총 128개의 부호를 정의 (A:65 ~ Z:90)&lt;br /&gt;&lt;br /&gt;예:&amp;nbsp;키보드&lt;br /&gt;&lt;br /&gt;ASCII만으로 모든 문자를 표현하기에는 부족 &amp;rarr;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;- 유니코드(Unicode):&lt;/b&gt; ASCII의 상위집합으로, 더 많은 비트를 사용해 다양한 문자를 표현 가능 (이모티콘까지 0과 1의 패턴으로 표현)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;이미지와 영상 표현&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;- 픽셀:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;스크린에&amp;nbsp;표시되는&amp;nbsp;수많은&amp;nbsp;작은&amp;nbsp;점들&amp;nbsp;(빨간색,&amp;nbsp;초록색,&amp;nbsp;파란색)&lt;br /&gt;&lt;br /&gt;세&amp;nbsp;가지&amp;nbsp;색상을&amp;nbsp;서로&amp;nbsp;다른&amp;nbsp;비율로&amp;nbsp;조합해&amp;nbsp;특정&amp;nbsp;색을&amp;nbsp;만듦&lt;br /&gt;&lt;br /&gt;&lt;b&gt;- RGB(Red, Green, Blue):&lt;/b&gt; 예를 들어 빨간색 72, 초록색 72, 파란색 33을 섞어 노란색을 만드는 숫자 표현 방식&lt;br /&gt;&lt;br /&gt;- 사진은 파일에 저장되고, GIF는 사진을 연속으로 빠르게 보여주어 움직이는 것처럼 보이게 함&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 영상은 수많은 그림을 연속적으로 이어 붙여 숫자로 표현 가능 (2진수 &amp;rarr; 10진수 &amp;rarr; 글자, 색상 &amp;rarr; 영상)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 음악은 음표를 이용해 숫자로 표현 가능&lt;/p&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;size18&quot;&gt;&lt;b&gt;3. 알고리즘(Algorithm)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;알고리즘:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;컴퓨터는&amp;nbsp;순서대로&amp;nbsp;필요한&amp;nbsp;동작을&amp;nbsp;수행하여&amp;nbsp;문제를&amp;nbsp;처리&lt;br /&gt;&lt;br /&gt;input&amp;nbsp;(숫자,&amp;nbsp;글자,&amp;nbsp;색깔&amp;nbsp;등&amp;nbsp;컴퓨터가&amp;nbsp;이해할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;2진법&amp;nbsp;표현)&amp;nbsp;&amp;rarr; &lt;b&gt;알고리즘:&lt;/b&gt; 입력 자료를 출력 형태로 만드는 처리 과정 &amp;rarr; output&lt;br /&gt;&lt;br /&gt;&lt;b&gt;알고리즘&amp;nbsp;=&lt;/b&gt;&amp;nbsp;입력값을&amp;nbsp;출력값&amp;nbsp;형태로&amp;nbsp;바꾸기&amp;nbsp;위해&amp;nbsp;어떤&amp;nbsp;명령어가&amp;nbsp;수행되어야&amp;nbsp;하는지를&amp;nbsp;나타낸&amp;nbsp;규칙들의&amp;nbsp;순서적&amp;nbsp;나열&lt;br /&gt;&lt;br /&gt;알고리즘을 평가할 때는&lt;b&gt; 정확성과 효율성&lt;/b&gt; (작업 완료까지의 시간, 노력 등)이 중요&lt;br /&gt;&lt;br /&gt;&lt;b&gt;의사코드:&lt;/b&gt;&lt;br /&gt;&lt;br /&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;도움&lt;br /&gt;&lt;br /&gt;컴퓨터가&amp;nbsp;수행할&amp;nbsp;작업을&amp;nbsp;사람이&amp;nbsp;사용하는&amp;nbsp;언어로&amp;nbsp;알고리즘의&amp;nbsp;논리적&amp;nbsp;절차를&amp;nbsp;작성&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1771829295724&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Pick up phone book
Open to middle of phone book
Look at page
If Smith is on page
Call Mike
Else if Smith is earlier in book
Open to middle of left half of book
    Go back to line 3
Else if Smith is later in book
Open to middle of right half of book
    Go back to line3
Else
Quit&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;파이썬, C언어 공통점: &lt;b&gt;함수(Functions)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;함수(Functions):&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;컴퓨터에게 무엇을 할지 알려주는 동사&lt;br /&gt;&lt;br /&gt;&quot;Pick&amp;nbsp;up&quot;,&amp;nbsp;&quot;Open&amp;nbsp;to&quot;,&amp;nbsp;&quot;Look&amp;nbsp;at&quot;,&amp;nbsp;&quot;Call&quot;,&amp;nbsp;&quot;Quit&quot;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;조건(Conditions): &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여러 선택지 중 하나를 택함&lt;br /&gt;&lt;br /&gt;&quot;If&quot;,&amp;nbsp;&quot;Else&amp;nbsp;if&quot;,&amp;nbsp;&quot;Else&quot;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;불리언(Boolean): &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Yes or No, True or False와 같이 2진법에서 0 또는 1이 나오는 질문&lt;br /&gt;&lt;br /&gt;&quot;Smith&amp;nbsp;is&amp;nbsp;on&amp;nbsp;page&quot;,&amp;nbsp;&quot;Smith&amp;nbsp;is&amp;nbsp;earlier&amp;nbsp;in&amp;nbsp;book&quot;,&amp;nbsp;&quot;Smith&amp;nbsp;is&amp;nbsp;later&amp;nbsp;in&amp;nbsp;book&quot;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;루프(Loop): &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;반복 순환&lt;br /&gt;&lt;br /&gt;&quot;Go&amp;nbsp;back&amp;nbsp;to&amp;nbsp;line&amp;nbsp;3&quot;&lt;/p&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;size18&quot;&gt;&lt;br /&gt;&lt;b&gt;4. 스크래치: 기초&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;프로그래밍&amp;nbsp;언어를&amp;nbsp;사용하는&amp;nbsp;쉬운&amp;nbsp;방법&amp;nbsp;중&amp;nbsp;하나는&amp;nbsp;스크래치와&amp;nbsp;같은&amp;nbsp;그래픽&amp;nbsp;프로그래밍&amp;nbsp;언어를&amp;nbsp;사용해&amp;nbsp;알고리즘을&amp;nbsp;만드는&amp;nbsp;것&lt;br /&gt;&lt;br /&gt;&lt;b&gt;스크래치:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;알고리즘의&amp;nbsp;구성&amp;nbsp;요소:&amp;nbsp;함수,&amp;nbsp;조건,&amp;nbsp;불리언&amp;nbsp;표현,&amp;nbsp;루프&amp;nbsp;등&lt;br /&gt;&lt;br /&gt;그래픽&amp;nbsp;프로그래밍&amp;nbsp;언어&lt;br /&gt;&lt;br /&gt;블록을&amp;nbsp;옮겨&amp;nbsp;붙이며&amp;nbsp;알고리즘을&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;있음&lt;br /&gt;&lt;br /&gt;화면&amp;nbsp;왼쪽:&amp;nbsp;함수,&amp;nbsp;변수&amp;nbsp;등의&amp;nbsp;퍼즐&amp;nbsp;조각들&amp;nbsp;&amp;rarr;&amp;nbsp;화면&amp;nbsp;중간으로&amp;nbsp;이동&lt;br /&gt;&lt;br /&gt;화면&amp;nbsp;오른쪽:&amp;nbsp;알고리즘의&amp;nbsp;결과&lt;br /&gt;&lt;br /&gt;&lt;b&gt;스크래치 블록:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;블록의&amp;nbsp;종류&amp;nbsp;&amp;rarr;&amp;nbsp;프로그램이&amp;nbsp;수행하는&amp;nbsp;일의&amp;nbsp;종류&lt;br /&gt;&lt;br /&gt;입력&amp;nbsp;&amp;rarr;&amp;nbsp;블록&amp;nbsp;&amp;rarr;&amp;nbsp;출력&lt;br /&gt;&lt;br /&gt;(예:&amp;nbsp;&quot;hello,&amp;nbsp;world&quot;&amp;nbsp;입력&amp;nbsp;&amp;rarr;&amp;nbsp;&quot;말해라&quot;&amp;nbsp;블록&amp;nbsp;&amp;rarr;&amp;nbsp;고양이가&amp;nbsp;&quot;hello,&amp;nbsp;world&quot;&amp;nbsp;말함)&lt;br /&gt;&lt;br /&gt;입출력을&amp;nbsp;이어&amp;nbsp;붙여&amp;nbsp;여러&amp;nbsp;작업을&amp;nbsp;순차적으로&amp;nbsp;수행&amp;nbsp;가능&lt;br /&gt;&lt;br /&gt;단,&amp;nbsp;컴파일은&amp;nbsp;스크래치에서&amp;nbsp;블록으로&amp;nbsp;구현할&amp;nbsp;수&amp;nbsp;없음&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. 스크래치: 심화&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;변수, 루프&lt;br /&gt;&lt;br /&gt;변수를&amp;nbsp;사용해&amp;nbsp;정보를&amp;nbsp;저장하고&amp;nbsp;재사용&amp;nbsp;가능&lt;br /&gt;&lt;br /&gt;(예:&amp;nbsp;&quot;count&quot;,&amp;nbsp;불리언&amp;nbsp;변수('참'&amp;nbsp;or&amp;nbsp;'거짓'))&lt;br /&gt;&lt;br /&gt;조건문을&amp;nbsp;활용해&amp;nbsp;복잡한&amp;nbsp;프로그램&amp;nbsp;구현&amp;nbsp;가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;참고 자료&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;부스트코스 '모두를 위한 컴퓨터 과학(CS50 2019)'&lt;/p&gt;</description>
      <category>2진법</category>
      <category>CS50</category>
      <category>바이트</category>
      <category>부스트코스컴퓨터과학</category>
      <category>비트</category>
      <category>스크래치</category>
      <category>알고리즘</category>
      <category>의사코드</category>
      <category>컴퓨터과학</category>
      <category>코딩입문</category>
      <author>hisjeans</author>
      <guid isPermaLink="true">https://hisjeans.tistory.com/1</guid>
      <comments>https://hisjeans.tistory.com/entry/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B3%BC%ED%95%99-%EC%9E%85%EB%AC%B8-2%EC%A7%84%EB%B2%95%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%8A%A4%ED%81%AC%EB%9E%98%EC%B9%98%EA%B9%8C%EC%A7%80#entry1comment</comments>
      <pubDate>Mon, 23 Feb 2026 15:53:18 +0900</pubDate>
    </item>
  </channel>
</rss>