<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>im_taeho.log</title>
        <link>https://velog.io/</link>
        <description>반갑습니다 :)</description>
        <lastBuildDate>Thu, 11 Jan 2024 14:48:05 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. im_taeho.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/im_taeho" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[REST API 예시]]></title>
            <link>https://velog.io/@im_taeho/REST-API-%EC%98%88%EC%8B%9C</link>
            <guid>https://velog.io/@im_taeho/REST-API-%EC%98%88%EC%8B%9C</guid>
            <pubDate>Thu, 11 Jan 2024 14:48:05 GMT</pubDate>
            <description><![CDATA[<h1 id="마이페이지">마이페이지</h1>
<ul>
<li><strong>내 정보를 반환받는 기능입니다.</strong></li>
<li><strong>HTTP 헤더</strong>의 <strong>Authorization 필드</strong>에 Access Token을 포함하여 전송해야 합니다.</li>
</ul>
<pre><code class="language-http">GET /users/me</code></pre>
<p><strong>성공</strong>: 200 OK
<strong>실패</strong>:</p>
<table>
<thead>
<tr>
<th>Code</th>
<th>Message</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td><code>401</code></td>
<td><code>Access Token 만료</code></td>
<td>사용자의 Access Token이 만료되었거나 유효하지 않은 경우</td>
</tr>
</tbody></table>
<p><strong>요청 헤더</strong></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td><code>Authorization</code></td>
<td><code>Bearer</code> + <code>JWT Access Token</code></td>
</tr>
</tbody></table>
<p><strong>요청 파라미터</strong>
없음</p>
<p><strong>요청 필드</strong>
없음</p>
<p><strong>응답 필드</strong></p>
<table>
<thead>
<tr>
<th>Field</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td><code>nickname</code></td>
<td><code>String</code></td>
<td>닉네임</td>
</tr>
<tr>
<td><code>introduction</code></td>
<td><code>String</code></td>
<td>자기소개</td>
</tr>
<tr>
<td><code>score</code></td>
<td><code>Integer</code></td>
<td>별점</td>
</tr>
<tr>
<td><code>gold</code></td>
<td><code>Integer</code></td>
<td>금메달 개수</td>
</tr>
<tr>
<td><code>silver</code></td>
<td><code>Integer</code></td>
<td>은메달 개수</td>
</tr>
<tr>
<td><code>bronze</code></td>
<td><code>Integer</code></td>
<td>동메달 개수</td>
</tr>
<tr>
<td><code>userid</code></td>
<td><code>Integer</code></td>
<td>회원ID (DB 기본키)</td>
</tr>
</tbody></table>
<p><strong>요청 예시(URI, 헤더)</strong></p>
<blockquote>
<pre><code class="language-http">GET /users/me</code></pre>
</blockquote>
<pre><code>```http header
Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI0IiwiYXV0aCI6IlJPT...</code></pre><p><strong>응답 예시(JSON)</strong></p>
<blockquote>
<pre><code class="language-json">{
  &quot;nickname&quot;: &quot;닉네임A&quot;,
  &quot;introduction&quot;: &quot;안녕하세요. 닉네임A 입니다. 반갑습니다.&quot;,
  &quot;score&quot;: 85,
  &quot;gold&quot;: 0,
  &quot;silver&quot;: 0,
  &quot;bronze&quot;: 3,
  &quot;userid&quot;: 8
}</code></pre>
</blockquote>
<pre><code>
# 게시판 조회
- **게시판의 게시글 리스트를 조회하는 기능입니다.**
- **HTTP 헤더**의 **Authorization 필드**에 Access Token을 포함하여 전송해야 합니다.
```http header
GET /notices</code></pre><p><strong>성공</strong>: 200 OK
<strong>실패</strong>:</p>
<table>
<thead>
<tr>
<th>Code</th>
<th>Message</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td><code>401</code></td>
<td><code>Access Token 만료</code></td>
<td>사용자의 Access Token이 만료되었거나 유효하지 않은 경우</td>
</tr>
<tr>
<td><code>400</code></td>
<td><code>유효하지 않은 게시판명</code></td>
<td>게시판명이 &quot;원정대&quot; or &quot;의뢰인&quot;이 아닌 경우</td>
</tr>
<tr>
<td><code>400</code></td>
<td><code>유효하지 않은 lastid</code></td>
<td>lastid 값이 존재하지 않는 경우</td>
</tr>
<tr>
<td><code>400</code></td>
<td><code>필수 파라미터 전달 누락</code></td>
<td>필수로 입력해야하는 파라미터를 전달하지 않은 경우</td>
</tr>
</tbody></table>
<p><strong>요청 헤더</strong></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td><code>Authorization</code></td>
<td><code>Bearer</code> + <code>JWT Access Token</code></td>
</tr>
</tbody></table>
<p><strong>요청 파라미터</strong></p>
<table>
<thead>
<tr>
<th align="center">필수</th>
<th>Params</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td align="center">X</td>
<td><code>lastid</code></td>
<td><code>Integer</code></td>
<td>마지막으로 호출 된 id (미입력시 최근 id부터 출력)</td>
</tr>
<tr>
<td align="center">O</td>
<td><code>amount</code></td>
<td><code>Integer</code></td>
<td>한번에 호출할 게시글 개수</td>
</tr>
<tr>
<td align="center">X</td>
<td><code>type</code></td>
<td><code>String</code></td>
<td><code>&quot;원정대&quot;</code> or <code>&quot;의뢰인&quot;</code> (미입력시 전체 조회)</td>
</tr>
</tbody></table>
<p><strong>요청 필드</strong>
없음</p>
<p><strong>응답 필드</strong></p>
<table>
<thead>
<tr>
<th>Field</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td><code>type</code></td>
<td><code>String</code></td>
<td>&quot;원정대&quot; or &quot;의뢰인&quot;</td>
</tr>
<tr>
<td><code>title</code></td>
<td><code>String</code></td>
<td>제목</td>
</tr>
<tr>
<td><code>score</code></td>
<td><code>Integer</code></td>
<td>별점</td>
</tr>
<tr>
<td><code>gender</code></td>
<td><code>String</code></td>
<td>성별</td>
</tr>
<tr>
<td><code>category</code></td>
<td><code>String</code></td>
<td>카테고리</td>
</tr>
<tr>
<td><code>createdDateTime</code></td>
<td><code>String</code></td>
<td>작성시각</td>
</tr>
<tr>
<td><code>noticeId</code></td>
<td><code>Integer</code></td>
<td>게시글ID</td>
</tr>
</tbody></table>
<p><strong>요청 예시(URI, 헤더)</strong></p>
<blockquote>
<pre><code class="language-http">GET /notices?lastid=10&amp;amount=2&amp;type=원정대</code></pre>
</blockquote>
<pre><code>```http header
Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI0IiwiYXV0aCI6IlJPT...</code></pre><p><strong>응답 예시(JSON)</strong></p>
<blockquote>
<pre><code class="language-json">[
  {
    &quot;type&quot;: &quot;원정대&quot;,
    &quot;title&quot;: &quot;게시글111&quot;,
    &quot;score&quot;: 76,
    &quot;gender&quot;: &quot;male&quot;,
    &quot;category&quot;: &quot;벌레&quot;,
    &quot;createdDateTime&quot;: &quot;2024-01-12 13:12:50&quot;,
    &quot;noticeId&quot;: 10
  },
  {
    &quot;type&quot;: &quot;원정대&quot;,
    &quot;title&quot;: &quot;게시글222&quot;,
    &quot;score&quot;: 93,
    &quot;gender&quot;: &quot;female&quot;,
    &quot;category&quot;: &quot;벌레&quot;,
    &quot;createdDateTime&quot;: &quot;2024-01-11 20:32:16&quot;,
    &quot;noticeId&quot;: 9
  }
]</code></pre>
</blockquote>
<pre><code>
# 회원가입
- **신규 회원 정보를 입력받고 회원가입 요청을 보내는 기능입니다.**
- **입력했던 이메일 주소로 회원인증 링크를 전송합니다.**
```http
POST /users/signup</code></pre><p><strong>성공</strong>: 201 Created
<strong>실패</strong>:</p>
<table>
<thead>
<tr>
<th>Code</th>
<th>Message</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td><code>400</code></td>
<td><code>아이디 형식 오류</code></td>
<td>아이디 조건에 부합되지 않는 경우</td>
</tr>
<tr>
<td><code>400</code></td>
<td><code>비밀번호 형식 오류</code></td>
<td>비밀번호 조건에 부합되지 않는 경우</td>
</tr>
<tr>
<td><code>400</code></td>
<td><code>이메일 형식 오류</code></td>
<td>이메일 조건에 부합되지 않는 경우</td>
</tr>
</tbody></table>
<p><strong>요청 헤더</strong>
없음</p>
<p><strong>요청 파라미터</strong>
없음</p>
<p><strong>요청 필드</strong></p>
<table>
<thead>
<tr>
<th>Field</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td><code>id</code></td>
<td><code>String</code></td>
<td>아이디</td>
</tr>
<tr>
<td><code>pw</code></td>
<td><code>String</code></td>
<td>비밀번호</td>
</tr>
<tr>
<td><code>email</code></td>
<td><code>String</code></td>
<td>이메일</td>
</tr>
<tr>
<td><code>nickname</code></td>
<td><code>String</code></td>
<td>닉네임</td>
</tr>
<tr>
<td><code>gender</code></td>
<td><code>String</code></td>
<td>성별</td>
</tr>
</tbody></table>
<p><strong>응답 필드</strong></p>
<table>
<thead>
<tr>
<th>Field</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td><code>id</code></td>
<td><code>String</code></td>
<td>아이디</td>
</tr>
<tr>
<td><code>pw</code></td>
<td><code>String</code></td>
<td>비밀번호</td>
</tr>
<tr>
<td><code>email</code></td>
<td><code>String</code></td>
<td>이메일</td>
</tr>
<tr>
<td><code>nickname</code></td>
<td><code>String</code></td>
<td>닉네임</td>
</tr>
<tr>
<td><code>gender</code></td>
<td><code>String</code></td>
<td>성별</td>
</tr>
<tr>
<td><code>userId</code></td>
<td><code>Integer</code></td>
<td>회원ID</td>
</tr>
</tbody></table>
<p><strong>요청 예시(URI, JSON)</strong></p>
<blockquote>
<pre><code class="language-http">POST /users/signup</code></pre>
</blockquote>
<pre><code>```JSON
{
  &quot;id&quot;: &quot;test1&quot;,
  &quot;pw&quot;: &quot;1q2w3e4r&quot;,
  &quot;email&quot;: &quot;testmail@naver.com&quot;,
  &quot;nickname&quot;: &quot;닉네임A&quot;,
  &quot;gender&quot;: &quot;male&quot;
 }

**응답 예시(JSON)**

&gt; ```JSON
{
  &quot;id&quot;: &quot;test1&quot;,
  &quot;pw&quot;: &quot;1q2w3e4r&quot;,
  &quot;email&quot;: &quot;testmail@naver.com&quot;,
  &quot;nickname&quot;: &quot;닉네임A&quot;,
  &quot;gender&quot;: &quot;male&quot;
  &quot;userId&quot;: 1
}</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Git] fetch vs. pull]]></title>
            <link>https://velog.io/@im_taeho/Git-fetch-vs.-pull</link>
            <guid>https://velog.io/@im_taeho/Git-fetch-vs.-pull</guid>
            <pubDate>Sun, 08 Jan 2023 09:53:25 GMT</pubDate>
            <description><![CDATA[<h3 id="💡-fetch와-pull의-차이">💡 fetch와 pull의 차이</h3>
<ul>
<li><code>fetch</code> : 원격 저장소의 최신 커밋을 로컬로 가져오기만 함</li>
<li><code>pull</code> : 원격 저장소의 최신 커밋을 로컬로 가져와 <code>merge</code> 또는 <code>rebase</code> 함<br>
### 💡 원격 브랜치의 새 커밋 확인
```shell
$ git fetch
```</li>
<li>미리 원격 브랜치의 새 커밋 확인해보기<pre><code class="language-shell">$ git checkout &lt;원격 저장소 이름&gt;/&lt;브랜치 이름&gt;</code></pre>
</li>
<li>원격 브랜치의 새 커밋을 로컬의 <code>main</code>브랜치에 적용하고 싶은 경우<pre><code class="language-shell">$ git pull</code></pre>
<br>

</li>
</ul>
<h3 id="💡-원격의-새-브랜치-확인">💡 원격의 새 브랜치 확인</h3>
<pre><code class="language-shell">$ git fetch</code></pre>
<ul>
<li><strong>remote</strong>에 새로운 원격 브랜치 확인<pre><code class="language-shell">$ git branch -a</code></pre>
</li>
<li>원격의 새 브랜치 커밋내역 확인<pre><code class="language-shell">$ git checkout &lt;원격 저장소 이름&gt;/&lt;브랜치 이름&gt;</code></pre>
</li>
<li><code>main</code> 브랜치로 돌아와 로컬에도 원격과 같은 브랜치 생성<pre><code class="language-shell">$ git switch -t &lt;원격 저장소 이름&gt;/&lt;브랜치 이름&gt;</code></pre>
</li>
<li><code>$ git switch -t</code>는 <code>$ git push -u</code>와 같은 것</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Git] HEAD]]></title>
            <link>https://velog.io/@im_taeho/Git-HEAD</link>
            <guid>https://velog.io/@im_taeho/Git-HEAD</guid>
            <pubDate>Sat, 07 Jan 2023 12:37:04 GMT</pubDate>
            <description><![CDATA[<h2 id="🚩-git의-head">🚩 Git의 HEAD</h2>
<ul>
<li>현재 속한 브랜치의 가장 최신 커밋</li>
<li>또는 익명의 브랜치로 이동한 위치
<img src="https://velog.velcdn.com/images/im_taeho/post/88ced155-5d11-43ee-820a-8c05420d69bc/image.PNG" alt="">
<img src="https://velog.velcdn.com/images/im_taeho/post/8f3d4f36-9160-4fd5-acaa-c6246c510550/image.PNG" alt=""><h3 id="💡-checkout으로-앞뒤로-이동하기">💡 checkout으로 앞뒤로 이동하기</h3>
</li>
<li>이전으로 <strong>1칸</strong> 이동<pre><code class="language-shell">$ git checkout HEAD^</code></pre>
<pre><code class="language-shell">$ git checkout HEAD~</code></pre>
</li>
<li>이전으로 <strong>3칸</strong> 이동<pre><code class="language-shell">$ git checkout HEAD^^^</code></pre>
<pre><code class="language-shell">$ git checkout HEAD~~~</code></pre>
<pre><code class="language-shell">$ git checkout HEAD~3</code></pre>
</li>
<li>특정 <strong>커밋 해시</strong>로 이동<pre><code class="language-shell">$ git checkout &lt;커밋 해시&gt;</code></pre>
</li>
<li>직전에 했던 이동을 <strong>한 단계</strong> 되돌리기<pre><code class="language-shell">$ git checkout -</code></pre>
<br>

</li>
</ul>
<h3 id="💡-head익명의-브랜치-명명하기">💡 HEAD(익명의 브랜치) 명명하기</h3>
<pre><code class="language-shell">$ git switch -c &lt;새로운 브랜치 이름&gt;</code></pre>
<br>

<h3 id="💡-head를-사용한-reset-활용법">💡 HEAD를 사용한 reset 활용법</h3>
<pre><code class="language-shell">$ git reset --hard HEAD(원하는 단계)</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Git] Working directory & Staging area & Repository]]></title>
            <link>https://velog.io/@im_taeho/Git-Working-directory-Staging-area-Repository</link>
            <guid>https://velog.io/@im_taeho/Git-Working-directory-Staging-area-Repository</guid>
            <pubDate>Sat, 07 Jan 2023 10:48:15 GMT</pubDate>
            <description><![CDATA[<h2 id="🚩-git의-3가지-공간">🚩 Git의 3가지 공간</h2>
<p><img src="https://velog.velcdn.com/images/im_taeho/post/3acff30d-ea36-4be5-86a5-ef6fbfa8986c/image.png" alt=""></p>
<h3 id="💡-working-directory">💡 Working directory</h3>
<ul>
<li><code>Untracked</code> : <strong>Add</strong>된 적 없거나 <strong>ignore</strong>된 파일</li>
<li><code>Tracked</code> : <strong>Add</strong>된 적 있고 <strong>변경내역</strong>이 있는 파일</li>
<li><code>$ git add</code>로 <strong>Staging area</strong>로 이동 가능
<img src="https://velog.velcdn.com/images/im_taeho/post/0c538fb0-c921-43c0-8164-d7def84e66e0/image.PNG" alt=""><br>
### 💡 Staging area</li>
<li>커밋을 위한 준비 단계</li>
<li><code>$ git commit</code>로 <strong>Repository</strong>로 이동 가능
<img src="https://velog.velcdn.com/images/im_taeho/post/8c1751af-8a3e-42ff-b3f0-5d0ab811b911/image.PNG" alt=""><br>
### 💡 Repository</li>
<li>커밋된 상태<br>
### 💡 파일을 Staging area → Working directory로 이동
```shell
$ git restore --staged <파일 이름>
```</li>
<li>초기 상태
<img src="https://velog.velcdn.com/images/im_taeho/post/e9fee2fd-efaf-4843-af61-3b9e7fa04771/image.PNG" alt=""></li>
<li>위 명령어로 파일 하나를 <strong>Working directory</strong>로 이동하면
<img src="https://velog.velcdn.com/images/im_taeho/post/c38f1281-6195-4c29-936f-3267c8dde9e4/image.PNG" alt=""><br>
### 💡 파일을 Working directory에서도 제거
```shell
$ git restore <파일 이름>
``` </li>
<li><strong>Working directory</strong>에서도 파일을 제거하면 이전 커밋 상태로 돌아감
<img src="https://velog.velcdn.com/images/im_taeho/post/988e77bf-101b-4efe-ae7f-1fdb65c6adef/image.PNG" alt=""></li>
</ul>
<br>

<hr>
<h2 id="🚩-파일의-삭제와-이동을-하는-2가지-방법">🚩 파일의 삭제와 이동을 하는 2가지 방법</h2>
<h3 id="💡-git-rm">💡 git rm</h3>
<pre><code class="language-shell">$ git rm &lt;파일 이름&gt;</code></pre>
<ul>
<li>파일이 삭제되고 변경내역이 <strong>Staging area</strong>에 존재
<img src="https://velog.velcdn.com/images/im_taeho/post/f9843e64-1b9f-4ff9-82e1-62bee0fae077/image.PNG" alt=""></li>
<li>그냥 파일을 삭제 하면 변경내역이 <strong>Working directory</strong>에 존재
<img src="https://velog.velcdn.com/images/im_taeho/post/c67606e4-d73a-4815-8d6b-054f2cc8c50c/image.PNG" alt=""><br>

</li>
</ul>
<h3 id="💡-git-mv">💡 git mv</h3>
<pre><code class="language-shell">$ git mv &lt;변경전 파일명&gt; &lt;변경후 파일명&gt;</code></pre>
<ul>
<li>파일 이름이 변경되고 변경내역이 <strong>Staging area</strong>에 존재
<img src="https://velog.velcdn.com/images/im_taeho/post/2b690bde-6812-4733-997a-83ae8c28ecae/image.PNG" alt=""></li>
<li>그냥 파일 이름을 변경하면 변경내역이 <strong>Working directory</strong>에 존재
<img src="https://velog.velcdn.com/images/im_taeho/post/78887065-b619-41d1-9a83-6d9a1c2b9015/image.PNG" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Git] Push & Pull]]></title>
            <link>https://velog.io/@im_taeho/Git-Push-Pull</link>
            <guid>https://velog.io/@im_taeho/Git-Push-Pull</guid>
            <pubDate>Sat, 07 Jan 2023 07:19:00 GMT</pubDate>
            <description><![CDATA[<h2 id="🚩-원격-저장소로-push와-pull을-해봅시다">🚩 원격 저장소로 Push와 Pull을 해봅시다.</h2>
<h3 id="💡-원격-저장소로-push커밋-밀어올리기">💡 원격 저장소로 Push(커밋 밀어올리기)</h3>
<pre><code class="language-shell">$ git push</code></pre>
<br>

<h3 id="💡-원격에서-로컬-저장소로-pull커밋-당겨오기">💡 원격에서 로컬 저장소로 Pull(커밋 당겨오기)</h3>
<pre><code class="language-shell">$ git pull</code></pre>
<br>

<h3 id="💡-원격에서-pull할-것이-있을-때-push-하기">💡 원격에서 Pull할 것이 있을 때 Push 하기</h3>
<ul>
<li>원격에서 Pull할 것이 있기 때문에 (새로운 커밋)이 있기 때문에 Push 불가능</li>
<li>Pull 해서 원격의 버전을 받아오고 Push 가능</li>
</ul>
<ol>
<li><strong>Merge</strong> 방식<pre><code class="language-shell">$ git pull --no-rebase</code></pre>
</li>
</ol>
<ul>
<li>결과
<img src="https://velog.velcdn.com/images/im_taeho/post/af10ec24-30e5-47cc-a50f-0a7601404ae4/image.PNG" alt=""></li>
</ul>
<ol start="2">
<li><strong>Rebase</strong> 방식<pre><code class="language-shell">$ git pull --rebase</code></pre>
</li>
</ol>
<ul>
<li>결과
<img src="https://velog.velcdn.com/images/im_taeho/post/04ded2f9-e1ca-49ce-a42f-9eef49acba53/image.PNG" alt=""><br>
</li>
</ul>
<hr>
<h2 id="🚩-협업시-충돌-상황-해결하기">🚩 협업시 충돌 상황 해결하기</h2>
<h3 id="💡-merge-방식으로-충돌-해결">💡 <strong>Merge</strong> 방식으로 충돌 해결</h3>
<pre><code class="language-shell">$ git pull --no-rebase</code></pre>
<ul>
<li>충돌 상황 해결 후 아래 두 명령어 실행하여 커밋<pre><code class="language-shell">$ git add .
$ git commit</code></pre>
</li>
<li>결과
<img src="https://velog.velcdn.com/images/im_taeho/post/5248b212-f1ef-4d9f-b763-9109d048bd28/image.PNG" alt=""><br>

</li>
</ul>
<h3 id="💡-rebase-방식으로-충돌-해결">💡 <strong>Rebase</strong> 방식으로 충돌 해결</h3>
<pre><code class="language-shell">$ git pull --rebase</code></pre>
<ul>
<li>충돌 상황 해결 후 아래 두 명령어 실행<pre><code class="language-shell">$ git add .
$ git rebase --continue</code></pre>
</li>
<li>결과</li>
</ul>
<ol>
<li>만약 원격 저장소의 내용으로 수정할 경우
<img src="https://velog.velcdn.com/images/im_taeho/post/ded2b619-d3f6-4c77-9a47-5b6fcfe198a2/image.PNG" alt=""></li>
<li>만약 원격 저장소와 다른 내용으로 수정할 경우
<img src="https://velog.velcdn.com/images/im_taeho/post/3ecb2d8f-4a9d-4915-ad35-bf93917d36b9/image.PNG" alt=""><br>

</li>
</ol>
<h3 id="💡-로컬-저장소의-내역-강제로-push하기">💡 로컬 저장소의 내역 강제로 Push하기</h3>
<ul>
<li>원격 저장소의 내역과 관계없이 로컬 저장소의 내역들 강제로 Push</li>
<li>🚨 협업 상황시 팀원들이 내역이 날라갈 수 있으므로 주의!<pre><code class="language-shell">$ git push --force</code></pre>
</li>
</ul>
<h2 id="🚩-원격에서-브랜치-다루기">🚩 원격에서 브랜치 다루기</h2>
<h3 id="💡-로컬에서-만든-브랜치-원격으로-push하기">💡 로컬에서 만든 브랜치 원격으로 Push하기</h3>
<ul>
<li>로컬에서 새로운 브랜치 생성 후<pre><code class="language-shell">$ git push -u &lt;원격 저장소 이름&gt; &lt;새로운 브랜치 명&gt;</code></pre>
</li>
<li><code>$ git branch</code>로는 원격의 브랜치까지 확인할 수 없다.
<code>$ git branch -all</code>로 원격과 로컬의 브랜치 모두 확인 가능<br>
### 💡 원격에서 만든 브랜치 로컬로 받아오기</li>
<li>원격의 변경사항을 아래 명령어로 확인<pre><code class="language-shell">$ git fetch</code></pre>
</li>
<li>아래 명령어로 원격과 같은 이름의 브랜치 생성 후 연결하고 switch<pre><code class="language-shell">$ git switch -t &lt;원격 저장소 이름&gt;/&lt;원격 브랜치 이름&gt;</code></pre>
<br>

</li>
</ul>
<h3 id="💡-원격에-있는-브랜치-삭제하기">💡 원격에 있는 브랜치 삭제하기</h3>
<p>```shell
$ git push &lt;원격 저장소 이름&gt; --delete &lt;원격 브랜치 이름&gt;</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Git] 원격 저장소]]></title>
            <link>https://velog.io/@im_taeho/Git-%EC%9B%90%EA%B2%A9-%EC%A0%80%EC%9E%A5%EC%86%8C</link>
            <guid>https://velog.io/@im_taeho/Git-%EC%9B%90%EA%B2%A9-%EC%A0%80%EC%9E%A5%EC%86%8C</guid>
            <pubDate>Fri, 06 Jan 2023 12:43:13 GMT</pubDate>
            <description><![CDATA[<h2 id="🚩-github-사용하기">🚩 GitHub 사용하기</h2>
<h3 id="💡-github에-레포지토리-생성-후-업로드-하기">💡 GitHub에 레포지토리 생성 후 업로드 하기</h3>
<ol>
<li>로컬 저장소의 Git에 원격 저장소로의 연결을 추가 ( <code>origin</code>: 원격 저장소 이름 )<pre><code class="language-shell">$ git remote add origin &lt;원격 저장소 주소&gt;</code></pre>
</li>
<li>기본 브랜치 명을 <code>main</code>으로 변경<pre><code class="language-shell">git branch -M main</code></pre>
</li>
<li>로컬 저장소의 커밋 내역들을 원격 저장소로 push(업로드)
<code>-u</code> : 현재 브랜치에서 <code>origin</code> 원격 저장소의 <code>main</code> 브랜치로 push 기본값 설정<pre><code class="language-shell">git push -u origin main</code></pre>
<br>

</li>
</ol>
<h3 id="💡-원격-저장소-목록-보기">💡 원격 저장소 목록 보기</h3>
<pre><code class="language-shell">$ git remote</code></pre>
<ul>
<li>원격 저장소의 주소까지 자세히 보기<pre><code class="language-shell">$ git remote -v</code></pre>
</li>
</ul>
<h3 id="💡-로컬-저장소와-원격-저장소의-연결-끊기">💡 로컬 저장소와 원격 저장소의 연결 끊기</h3>
<pre><code class="language-shell">$ git remote remove &lt;원격 저장소 이름&gt;</code></pre>
<h3 id="💡-github에서-프로젝트-다운받기">💡 GitHub에서 프로젝트 다운받기</h3>
<ul>
<li>Git Bash에서 대상 폴더로 이동 후 아래 명령어 실행<pre><code class="language-shell">$ git clone &lt;원격 저장소 주소&gt;</code></pre>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Git] Branch]]></title>
            <link>https://velog.io/@im_taeho/Git-Branch</link>
            <guid>https://velog.io/@im_taeho/Git-Branch</guid>
            <pubDate>Mon, 02 Jan 2023 12:44:38 GMT</pubDate>
            <description><![CDATA[<h2 id="🚩-branch-목적">🚩 Branch 목적</h2>
<ul>
<li>프로젝트를 하나 이상의 모습으로 관리해야 할 때<ul>
<li>ex) 실배포용, 테스트 서버용, 새로운 시도용</li>
</ul>
</li>
<li>여러 작업들이 각각 독립되어 진행될 때<ul>
<li>ex) 신기능 1, 신기능 2, 코드 개선, 긴급 수정<img src="https://velog.velcdn.com/images/im_taeho/post/06dba556-7925-48db-bcb8-badbcaf957d6/image.PNG" width="20%" height="20%">
<br>
</li>
</ul>
</li>
</ul>
<hr>
<h2 id="🚩-브랜치-생성이동삭제수정확인">🚩 브랜치 생성/이동/삭제/수정/확인</h2>
<h3 id="💡-브랜치-생성">💡 브랜치 생성</h3>
<pre><code class="language-shell">$ git branch &lt;브랜치명&gt;</code></pre>
<h3 id="💡-브랜치-목록-확인">💡 브랜치 목록 확인</h3>
<pre><code class="language-shell">$ git branch</code></pre>
<h3 id="💡-브랜치-이동">💡 브랜치 이동</h3>
<pre><code class="language-shell">$ git switch &lt;이동할 브랜치명&gt;</code></pre>
<h3 id="💡-브랜치-생성과-동시에-이동">💡 브랜치 생성과 동시에 이동</h3>
<pre><code class="language-shell">$ git switch -c &lt;브랜치명&gt;</code></pre>
<h3 id="💡-브랜치-삭제">💡 브랜치 삭제</h3>
<pre><code class="language-shell">$ git branch -d &lt;삭제할 브랜치명&gt;</code></pre>
<h3 id="💡-브랜치-강제삭제">💡 브랜치 강제삭제</h3>
<pre><code class="language-shell">$ git branch -D &lt;강제삭제할 브랜치명&gt;</code></pre>
<h3 id="💡-tip">💡 TIP</h3>
<ul>
<li><code>$ git log</code> 명령어는 현재 위치한 브랜치에서의 커밋 로그만 확인 가능</li>
<li>여러 브랜치의 내역을 한눈에 보는 명령어는 아래 참조<pre><code class="language-shell">$ git log --all --decorate --oneline --graph</code></pre>
<br>

</li>
</ul>
<hr>
<h2 id="🚩-브랜치를-합치는-방법">🚩 브랜치를 합치는 방법</h2>
<h3 id="💡-merge">💡 merge</h3>
<ul>
<li>두 브랜치를 한 커밋으로 이어 붙이는 방법<img src="https://velog.velcdn.com/images/im_taeho/post/0ff678e0-c0d8-4f07-9bc5-a642133e5024/image.PNG" width="20%" height="20%">
### 💡 add-coach 브랜치를 main 브랜치로 **merge** 하는 경우</li>
<li><code>main</code> 브랜치로 이동 후 아래 명령어로 병합<pre><code class="language-shell">$ git merge add-coach</code></pre>
</li>
<li>병합이 완료된 브랜치는 아래 명령어로 삭제<pre><code class="language-shell">$ git branch -d add-coach</code></pre>
</li>
<li><strong>TIP : ** **merge</strong>도 하나의 커밋이기 때문에 <strong>reset</strong>으로 되돌리기 가능<h3 id="💡-merge-충돌-해결하기">💡 merge 충돌 해결하기</h3>
</li>
<li>오류 메시지와 <code>$ git status</code> 확인하기</li>
<li>VS Code에서 오류난 부분 확인하기</li>
<li>당장 해결이 어려운 경우 <code>merge</code> 중단하기<pre><code class="language-shell">$ git merge --abort</code></pre>
</li>
<li>해결이 완료된 경우 <code>$ git add .</code>, <code>git commit -m &quot;&lt;메시지&quot;&gt;</code>으로 병합 완료</li>
</ul>
<hr>
<h3 id="💡-rebase">💡 rebase</h3>
<ul>
<li>브랜치를 다른 브랜치에 이어 붙이는 방법<img src="https://velog.velcdn.com/images/im_taeho/post/15656223-a8ed-44b1-bf1a-eea7a7ccdb3d/image.PNG" width="20%" height="20%">
### 💡 new-teams 브랜치를 main 브랜치로 rebase 하는 경우</li>
<li><code>new-teams</code> 브랜치로 이동 후 아래 명령어로 병합<ul>
<li>🚨 <strong>merge</strong>와는 반대이므로 주의!<pre><code class="language-shell">$ git rebase main</code></pre>
</li>
</ul>
</li>
<li>소스트리에서 확인해보면 <code>main</code> 브랜치는 <code>new-teams</code> 브랜치보다 뒤쳐져 있다.
<img src="https://velog.velcdn.com/images/im_taeho/post/cb5919b3-c09f-4300-8c29-c576672405f9/image.PNG" alt=""></li>
<li>이를 해결하기 위해 <code>main</code> 브랜치로 이동 후 아래 명령어를 실행<pre><code class="language-shell">$ git merge new-teams</code></pre>
</li>
<li>이후 <code>new-teams</code> 브랜치 삭제<pre><code class="language-shell">$ git branch -d new-teams</code></pre>
<h3 id="💡-rebase-충돌-해결하기">💡 rebase 충돌 해결하기</h3>
</li>
<li>오류 메시지와 <code>$ git status</code> 확인하기</li>
<li>VS Code에서 오류난 부분 확인하기</li>
<li>당장 해결이 어려운 경우 <code>rebase</code> 중단하기<pre><code class="language-shell">$ git rebase --abort</code></pre>
</li>
<li>해결이 완료된 경우 <code>$ git add .</code> 후에<pre><code class="language-shell">$ git rebase --continue</code></pre>
</li>
<li>충돌이 모두 해결될 때까지 반복한다.</li>
</ul>
<hr>
<br>
[사진 출처] https://www.atlassian.com/git/tutorials/merging-vs-rebasing
]]></description>
        </item>
        <item>
            <title><![CDATA[[Git] Reset & Revert (과거로 돌아가기)]]></title>
            <link>https://velog.io/@im_taeho/Git-Reset-Revert-%EA%B3%BC%EA%B1%B0%EB%A1%9C-%EB%8F%8C%EC%95%84%EA%B0%80%EA%B8%B0</link>
            <guid>https://velog.io/@im_taeho/Git-Reset-Revert-%EA%B3%BC%EA%B1%B0%EB%A1%9C-%EB%8F%8C%EC%95%84%EA%B0%80%EA%B8%B0</guid>
            <pubDate>Mon, 02 Jan 2023 11:08:08 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>Git</strong>에서 <strong>과거로 돌아가는 방식</strong>은 2가지가 있습니다.</p>
</blockquote>
<ul>
<li>*<em>reset : *</em> 원하는 시점으로 돌아간 뒤 이후 내역들을 삭제</li>
<li>*<em>revert : *</em> 되돌리기 원하는 시점의 커밋을 거꾸로 실행</li>
</ul>
<h2 id="🚩-커밋-해시-확인하기">🚩 커밋 해시 확인하기</h2>
<ul>
<li><code>$ git log</code> 명령어를 실행하면 각 커밋에 대한 해시값을 확인할 수 있다.<img src="https://velog.velcdn.com/images/im_taeho/post/b9ece569-2238-4a58-aa42-09ba83e1f546/image.PNG" alt=""><br>
</li>
</ul>
<hr>
<h2 id="🚩-reset">🚩 Reset</h2>
<h3 id="💡-reset-사용해서-과거로-돌아가기">💡 reset 사용해서 과거로 돌아가기</h3>
<pre><code class="language-bash">$ git reset --hard &lt;커밋 해시&gt;</code></pre>
<h3 id="💡-커밋하지-않은-변경사항들을-취소하기">💡 커밋하지 않은 변경사항들을 취소하기</h3>
<pre><code class="language-bash">$ git reset --hard</code></pre>
<h3 id="💡-reset의-3가지-옵션">💡 reset의 3가지 옵션</h3>
<ul>
<li><strong><code>--soft</code> : ** **Repository</strong>에서 <strong>Staging Area</strong>로 이동</li>
<li><strong><code>--mixed</code></strong>(default) <strong>:</strong> <strong>Repository</strong>에서 <strong>Working Directory</strong>로 이동</li>
<li><strong><code>--hard</code> : ** 수정사항들을 **완전히 삭제</strong></li>
</ul>
<hr>
<h2 id="🚩-revert">🚩 Revert</h2>
<h3 id="💡-revert-사용해서-과거의-커밋-되돌리기">💡 revert 사용해서 과거의 커밋 되돌리기</h3>
<pre><code class="language-bash">$ git revert &lt;커밋 해시&gt;</code></pre>
<p><code>:wq</code>로 커밋 메시지 저장하기</p>
<h3 id="💡-revert-중-커밋이-충돌하는-경우">💡 revert 중 커밋이 충돌하는 경우</h3>
<ul>
<li><strong>문제상황 :</strong> 사용자는 두 번째 버전의 커밋으로 <strong>되돌리기(revert)</strong>하려고 한다. 
이전의 커밋에서 <code>leopards.yaml</code>을 생성하였기 때문에 이 커밋을 <strong>되돌리기(revert)</strong>하면 <code>leopards.yaml</code>을 삭제하는 커밋이 생성된다.
그러나 최근 커밋에서 <code>leopards.yaml</code>을 수정한 내역이 있기때문에 <code>leopards.yaml</code>을 삭제하는 커밋을 생성하지 못한다. <br></li>
<li><img src="https://velog.velcdn.com/images/im_taeho/post/38f0d1d8-b2cc-4e63-9062-dad49a19fc63/image.PNG" alt=""> </li>
<li><img src="https://velog.velcdn.com/images/im_taeho/post/291a52a1-88a5-440d-8fc1-b2a5ad88a561/image.PNG" alt=""></li>
<li><strong>해결방안</strong><ul>
<li><code>$ git rm leopards.yaml</code>로 Git에서 해당 파일을 삭제한다.</li>
<li><code>$ git revert --continue</code>로 중단된 작업을 이어서 한다.</li>
<li><code>:wq</code>로 커밋 메시지를 저장한다.</li>
</ul>
</li>
</ul>
<br>

<h3 id="💡-커밋하지-않고-revert-하기">💡 커밋하지 않고 revert 하기</h3>
<pre><code class="language-bash">$ git revert --no-commit &lt;커밋 해시&gt;</code></pre>
<ul>
<li><strong>활용</strong> <ul>
<li>원하는 다른 작업을 추가 후 함께 커밋</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Git] Commit]]></title>
            <link>https://velog.io/@im_taeho/Git-Commit</link>
            <guid>https://velog.io/@im_taeho/Git-Commit</guid>
            <pubDate>Mon, 02 Jan 2023 09:43:19 GMT</pubDate>
            <description><![CDATA[<h2 id="🚩-commit을-이용해-변경사항을-기록해-봅시다">🚩 Commit을 이용해 변경사항을 기록해 봅시다.</h2>
<h3 id="💡-commit할-파일-담기">💡 Commit할 파일 담기</h3>
<ul>
<li><p>파일 하나 담기</p>
<pre><code class="language-bash">$ git add &lt;파일&gt;</code></pre>
</li>
<li><p>모든 파일 담기</p>
<pre><code class="language-bash">$ git add .</code></pre>
</li>
</ul>
<h3 id="💡-파일이-담긴지-확인">💡 파일이 담긴지 확인</h3>
<ul>
<li><code>$ git status</code> 실행<img src="https://velog.velcdn.com/images/im_taeho/post/29395425-078a-4976-b773-f5a7c6f0650d/image.PNG" alt=""></li>
<li><code>Changes to be committed</code>: 현재 변경사항(버전)에 담긴 파일 목록</li>
<li><code>Untracked files</code>: Git의 관리에 영향을 받지 않고 추적되지 않는 파일 목록<br></li>
<li><code>$ git diff</code> 명령어를 실행하여 자세한 변경내역을 확인할 수 있다.</li>
</ul>
<h3 id="💡-commit-실행하기">💡 Commit 실행하기</h3>
<ul>
<li>메시지와 함께 Commit 하기<pre><code class="language-bash">$ git commit -m &quot;&lt;메시지&gt;&quot;</code></pre>
</li>
<li>Commit 로그 확인하기<pre><code class="language-bash">$ git log</code></pre>
<img src="https://velog.velcdn.com/images/im_taeho/post/72d4f295-495d-452d-867b-f79513a00107/image.PNG" alt=""></li>
</ul>
<h3 id="💡-commit과-add를-한꺼번에-실행하기">💡 Commit과 Add를 한꺼번에 실행하기</h3>
<pre><code class="language-bash">$ git commit -am &quot;&lt;메시지&gt;&quot;</code></pre>
<ul>
<li>🚨 새로 추가된(untracked) 파일이 없을 때만 가능</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Git] 초기 설정 & 프로젝트 관리 시작]]></title>
            <link>https://velog.io/@im_taeho/Git-%EC%B4%88%EA%B8%B0-%EC%84%A4%EC%A0%95-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC-%EC%8B%9C%EC%9E%91</link>
            <guid>https://velog.io/@im_taeho/Git-%EC%B4%88%EA%B8%B0-%EC%84%A4%EC%A0%95-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC-%EC%8B%9C%EC%9E%91</guid>
            <pubDate>Mon, 02 Jan 2023 08:08:45 GMT</pubDate>
            <description><![CDATA[<h2 id="🚩-git-초기-설정">🚩 Git 초기 설정</h2>
<h3 id="💡-git에서-전역으로-사용자-이름과-이메일-주소를-설정-github와-별개">💡 Git에서 전역으로 사용자 이름과 이메일 주소를 설정 (GitHub와 별개)</h3>
<ul>
<li><strong>Git Bash</strong>에서 아래 명령어들을 실행
<code>$ git config --global user.name &quot;이름&quot;</code>
<code>$ git config --global user.email &quot;이메일&quot;</code><br>
### 💡 기본 브랜치명을 변경하는 법</li>
<li><strong>main</strong>으로 브랜치 명을 변경할 시
<code>$ git config --global init.defaultBranch main</code><br>
### 💡 프로젝트 생성 & Git 초기화</li>
<li><strong>Git Bash</strong>에서 프로젝트 폴더로 이동 후 아래 명령어 실행
<code>$ git init</code></li>
<li>프로젝트 폴더 내에 <code>.git</code> 폴더가 생성된다.<br>
### 💡 현재 폴더(프로젝트)에서 Git 상태 확인</li>
<li><code>$ git status</code></li>
</ul>
<hr>
<h2 id="🚩-git이-무시해야할-파일-설정">🚩 Git이 무시해야할 파일 설정</h2>
<ul>
<li>빌드 결과물, 라이브러리 같은 자동으로 생성 또는 다운로드 되는 파일들</li>
<li>보안상 민감한 정보를 담은 파일들<br>
### 💡 .gitignore 파일을 사용해 배제할 요소를 지정</li>
<li>프로젝트 폴더 내에 <code>.gitignore</code>파일 생성</li>
<li>Git으로부터 배제할 요소들(파일, 폴더)의 이름을 적고 저장<br>
### 💡 .gitignore 파일 형식</li>
<li><a href="https://git-scm.com/docs/gitignore">https://git-scm.com/docs/gitignore</a> 참조</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CS50] 1. 컴퓨팅 사고]]></title>
            <link>https://velog.io/@im_taeho/CS50-1.-%EC%BB%B4%ED%93%A8%ED%8C%85-%EC%82%AC%EA%B3%A0</link>
            <guid>https://velog.io/@im_taeho/CS50-1.-%EC%BB%B4%ED%93%A8%ED%8C%85-%EC%82%AC%EA%B3%A0</guid>
            <pubDate>Thu, 29 Dec 2022 15:51:17 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>이 글은 부스트코스의 <strong>모두를 위한 컴퓨터 과학 (CS50 2019)</strong> 강의를 참고하여 포스팅하였습니다.</p>
</blockquote>
<h2 id="컴퓨터-과학이란-무엇인가">컴퓨터 과학이란 무엇인가?</h2>
<p><strong>컴퓨터 과학</strong>이란 문제를 해결하는 과정을 공부하는 학문이다.
문제를 해결한다는 것은 <strong>입력(input)</strong>을 전달받아 <strong>출력(output)</strong>을 만들어내는 과정이다.
그리고 그 중간에 있는 과정이 <strong>컴퓨터 과학</strong>이다.</p>
<p>앞으로 컴퓨터 과학을 배움에 있어 입력과 출력을 표현하기 위한 <strong>약속</strong>(표준)이 필요하다.</p>
<h2 id="2진법">2진법</h2>
<p>컴퓨터는 입력과 출력을 표현하는 방법으로 2진법을 사용한다.
우리는 일상에서 0, 1, 2, 3, 4, 5, 6, 7, 8, 9로 이루어진 <strong>10진법</strong>을 사용하는 반면,
컴퓨터는 오직 0과 1로 이루어진 <strong>2진법</strong>을 사용한다. 컴퓨터는 0과 1만으로 다양한 글자나 사진, 영상, 소리 등을 저장할 수 있다.</p>
<p>먼저 10진법으로 표현된 숫자를 예시로 살펴보자.
우리는 <code>123</code>이라는 숫자를 당연히 <code>백이십삼</code>이라고 읽을 것이다.
이것을 자세히 표현해 보면 <code>1x100 + 2x10 + 3x1 = 123</code>으로 표현되어 <code>백이십삼</code>이라고 읽는 것이다.</p>
<p>10진법에서는 각 자리의 숫자들에 <strong>10의 거듭제곱</strong>을 곱해 표현하였다.
비슷하게 2진법에서는 각 자리에 <strong>2의 거듭제곱</strong>을 곱해 수를 표현한다.</p>
<p>예를 들어 10진수 <code>5</code>를 표현하기 위해서는 <code>1x4 + 0x2 + 1x1 = 5</code>이므로 2진수로 <code>101</code>이라 표현한다.</p>
<h2 id="비트">비트</h2>
<p>컴퓨터는 <strong>비트</strong>라는 측정 단위를 이용해 정보를 연산하고 저장한다.
<strong>비트</strong>는 <code>binary digit</code>의 줄임말로 0과 1 두가지 값만 갖는 측정 단위이다.
컴퓨터는 디지털 데이터를 여러 개의 비트들을 조합함으로써 0과 1 두가지 값만으로도 많은 양의 정보를 저장할 수 있다.</p>
<h2 id="비트열">비트열</h2>
<p>하나의 비트는 0과 1, 두 가지 값만 저장하기 때문에 많은 양의 데이터를 저장하기엔 턱없이 부족하다. 때문에 다양한 데이터를 저장하기 위해 여러 개의 비트들을 조합하여 사용하고 <strong>바이트(byte)</strong>는 8개의 비트가 모여 만들어진 것이다.
비트 하나는 0과 1을 표현할 수 있으므로 <strong>1바이트는 <code>2^8 = 256개</code>의 수</strong>를 표현할 수 있다.</p>
<h2 id="문자의-표현">문자의 표현</h2>
<p>컴퓨터는 오직 0과 1로 이루어진 <strong>2진법</strong>을 사용한다고 했다. 그렇다면 문자도 0과 1로 이루어진 숫자로 표현해야할 것이다.
문자를 숫자로 표현하는 방식에는 다양한 표준이 존재하는데 그 중 하나로 <strong>ASCII(아스키코드)</strong>와 <strong>Unicode</strong>가 존재한다.</p>
<h3 id="ascii">ASCII</h3>
<p>아스키코드는 총 128개의 부호로 정의되어 있다. 아래는 아스키 코드 중 알파벳 대문자 부분만 발췌한 것이다.
<img src="https://velog.velcdn.com/images/im_taeho/post/51557852-20d9-480e-84d5-60441a398f04/image.png" alt="">
몇 개를 살펴보면 A는 65, C는 67로 표현된다. 이는 10진법 기준이므로 2진법 수로 변환하면 <code>1x64 + 0x32 + 0x16 + 0x8 + 0x4 + 0x2 + 0x1 (64+1)</code>이므로 <code>1000001</code>이다.</p>
<h4 id="몇-가지-더-예를-들어보자">몇 가지 더 예를 들어보자.</h4>
<ul>
<li>HELLO = <code>72</code> <code>69</code> <code>76</code> <code>76</code> <code>79</code></li>
</ul>
<p>아스키 코드는 128개의 부호들로 정의되어 있기 때문에 알파벳 대문자/소문자와 몇가지 특수기호, 명령어들로 이루어져 있다. 
그렇기 때문에 다양한 언어의 문자와 이모티콘, 특수 문자 등을 표현하기 위해 <strong>Unicode</strong>라는 표준이 등장한다.</p>
<h3 id="unicode">Unicode</h3>
<p>Unicode는 적게는 8비트, 많게는 32비트까지 이용해 문자를 표현가능 하도록 지원한다. 
😂 ← 이런 이모티콘 까지 표현이 가능한데, 이 이모티콘은 10진법으로 <code>128,514</code>이며 2진법으로는 무려 <code>11111011000000010</code>로 표현해야 한다.</p>
<h2 id="알고리즘">알고리즘</h2>
<p>앞서 컴퓨터가 숫자, 글자, 색깔 등을 컴퓨터가 이해할 수 있는 2진법으로 표현하는 것을 배웠다. 이것은 <strong>입력(input)</strong>에 해당하는 것이다.
그렇다면 이 <strong>입력(input)</strong>에서 어떻게 <strong>출력(output)</strong>을 얻을수 있을까?
<strong>알고리즘</strong>은 입력(input)에서 받은 자료를 출력(output) 형태로 만드는 처리 과정을 뜻한다.
<img src="https://velog.velcdn.com/images/im_taeho/post/7dc60516-d500-4ae3-bbde-c96d0dd83818/image.png" alt=""></p>
<p>즉, 알고리즘은 입력값을 출력값의 형태로 바꾸기 위해 명령들이 어떻게 수행되어야 하는지에 대한 <strong>규칙들의 순서적 나열</strong>이다.
같은 출력값이 나오더라도 알고리즘에 따라 출력을 하기까지의 시간이 다를 수 있다.</p>
<h3 id="전화번호부에서-mike-smith를-찾는-예제">전화번호부에서 Mike Smith를 찾는 예제</h3>
<blockquote>
</blockquote>
<ul>
<li>첫 번째 알고리즘<ul>
<li>전화번호부를 집어 들고 첫 페이지를 펼친 후 Mike Smith가 그 페이지에 있는지 찾는다.</li>
<li>없으면 그 다음 페이지에서 찾는다.</li>
<li>Mike Smith를 찾을 때까지 또는 전화번호부가 끝날 때까지 이것을 반복한다.</li>
</ul>
</li>
</ul>
<p>이 알고리즘의 <strong>정확도</strong>를 따져보면 확실히 Mike Smith를 찾는 데에는 문제가 없을 것이다. 하지만 알고리즘을 평가할 때는 <strong>정확도</strong>도 중요하지만, <strong>효율성</strong>도 중요하다.
<strong>효율성</strong>은 작업을 완료하기 까지 얼마나 시간과 노력을 덜 들일 수 있는지에 대한 것이다.
이렇게 한 페이지씩 찾아보는 알고리즘은 정확하지만 매우 시간이 오래걸리고 비효율적이다.</p>
<blockquote>
</blockquote>
<ul>
<li>두 번째 알고리즘<ul>
<li>전화번호부를 집어 들고 첫 페이지를 펼친 후 Mike Smith가 그 페이지에 있는지 찾는다.</li>
<li>없으면 <strong>두 페이지 뒤</strong>에서 찾는다.</li>
<li>Mike Smith를 찾을 때까지 또는 전화번호부가 끝날 때까지 이것을 반복한다.</li>
</ul>
</li>
</ul>
<p>두 번째 알고리즘은 확실히 첫 번째 알고리즘보다 시간이 절반밖에 걸리지 않으므로 <strong>효율성</strong>은 개선되었을 것이다. 하지만 Mike Smith가 있는 페이지를 그냥 넘어갈 수도 있으니 <strong>정확성</strong>면에서 떨어진다.</p>
<blockquote>
</blockquote>
<ul>
<li>세 번째 알고리즘<ul>
<li>전화번호부 가운데를 펼치고 Mike Smith가 있는지 찾아본다.</li>
<li>없다면, 전화번호부가 이름순으로 정렬되어 있으므로 Mike Smith가 앞부분에 있는지 뒷부분에 있는지 보고 책의 절반을 버린다.</li>
<li>책의 나머지 절반 부분에서 똑같은 과정을 수행한다.</li>
<li>이 과정은 한 페이지가 남을 때까지 계속 수행한다.</li>
</ul>
</li>
</ul>
<p>세 번째 알고리즘은 앞서 살펴본 두 알고리즘보다 확실히 <strong>효율적</strong>이다.
만약 1000페이지에 달하는 전화번호부가 있다고 가정해보자.
첫 번째 알고리즘은 1000개의 페이지를 모두 찾아보아야 하고, 두 번째 알고리즘은 500개의 페이지를 찾아보아야 한다.
세 번째 알고리즘은 최악의 경우에도 <code>1000 → 500 → 250 → 125 → 62 → 31 → 15 → 7 → 3 → 1</code> 10개의 페이지만 살펴보면 Mike Smith가 있는 위치를 찾을 수 있다.</p>
<p>이렇게 <strong>알고리즘</strong>이란 입력값을 출력값의 형태로 바꾸기 위해 어떤 명령들이 수행되어야 하는지에 대한 <strong>규칙들의 순서적 나열</strong>이다.</p>
<h3 id="의사코드pseudo-code">의사코드(pseudo code)</h3>
<p>위와 같은 세 번째 알고리즘을 우리는 <strong>의사코드</strong>라는 방식으로 명료하게 정리할 수 있다.</p>
<blockquote>
</blockquote>
<ol>
<li>전화번호부를 집어든다.</li>
<li>전화번호부의 중간을 편다.</li>
<li>페이지를 본다.</li>
<li>만약에 Mike Smith가 페이지에 있으면</li>
<li>　　Mike Smith에게 전화한다.</li>
<li>그렇지 않고 만약 Mike Smith가 앞 페이지에 있으면</li>
<li>　　앞 페이지의 절반을 편다.</li>
<li>　　3번째 줄부터 다시 실행한다</li>
<li>그렇지 않고 만약 Mike Smith가 뒷 페이지에 있으면</li>
<li>　　뒷 페이지의 절반을 편다.</li>
<li>　　3번째 줄부터 다시 실행한다.</li>
<li>그러지 않으면</li>
<li>　　그만둔다.</li>
</ol>
]]></description>
        </item>
    </channel>
</rss>