<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>hee_08.log</title>
        <link>https://velog.io/</link>
        <description>기록장</description>
        <lastBuildDate>Mon, 27 Jan 2025 19:35:54 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>hee_08.log</title>
            <url>https://velog.velcdn.com/images/hee_08/profile/c6e344e6-70b4-4322-a5c6-4c9826b285a7/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. hee_08.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hee_08" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[혼공파] 3주차 - Chapter 04]]></title>
            <link>https://velog.io/@hee_08/%ED%98%BC%EA%B3%B5%ED%8C%8C-3%EC%A3%BC%EC%B0%A8-Chapter-04</link>
            <guid>https://velog.io/@hee_08/%ED%98%BC%EA%B3%B5%ED%8C%8C-3%EC%A3%BC%EC%B0%A8-Chapter-04</guid>
            <pubDate>Mon, 27 Jan 2025 19:35:54 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/hee_08/post/f9cbc45e-c7c7-48c2-b67d-993fae6fec0e/image.png" alt=""></p>
<hr>
<blockquote>
<p>3주차 진도 : Chapter 04
추가 숙제 : 리스트, 딕셔너리, 범위 자료형에 대해 이해한 내용을 바탕으로 포스팅하기 / 213p 1번 문제 풀기
기간 : 1/20 - 1/27</p>
</blockquote>
<hr>
<h2 id="213p-1번">213p 1번</h2>
<blockquote>
<p>list_a = [0, 1, 2, 3, 4, 5, 6, 7] 일 때
다음의 함수들을 실행했을 때 list_a의 결과는?</p>
</blockquote>
<h3 id="list_aextendlist_a">list_a.extend(list_a)</h3>
<ul>
<li>extend() : 기존 리스트의 끝에 다른 리스트의 <strong>모든</strong> 요소를 추가하는 함수</li>
</ul>
<p><img src="https://velog.velcdn.com/images/hee_08/post/6dbf1753-e582-4729-8d89-d20166552216/image.png" alt=""></p>
<hr>
<h3 id="list_aappend10">list_a.append(10)</h3>
<ul>
<li>append () : 리스트의 끝에 하나의 요소를 추가하는 함수
<img src="https://velog.velcdn.com/images/hee_08/post/ff390b92-cb9e-4cbd-9786-63c114d0814b/image.png" alt=""></li>
</ul>
<hr>
<h3 id="list_ainsert3-0">list_a.insert(3, 0)</h3>
<ul>
<li>insert() : 해당 인덱스에 값을 삽입하고, 이후 요소들은 한 칸씩 뒤로 밀림
<img src="https://velog.velcdn.com/images/hee_08/post/dd5aa665-de05-455c-b784-eedeb11c8560/image.png" alt=""></li>
</ul>
<p>네번째 인덱스에 0을 넣고, 나머지 값들은 밀린다</p>
<hr>
<h3 id="list_aremove3">list_a.remove(3)</h3>
<ul>
<li>remove() : 리스트에서 첫 번째로 등장하는 <strong>해당 값</strong>을 삭제한다
<img src="https://velog.velcdn.com/images/hee_08/post/fd498fa7-0845-40ab-bf9e-1aefcf04f28c/image.png" alt=""></li>
</ul>
<p>3인 값이 처음 등장한 요소를 없앤다</p>
<hr>
<h3 id="list_apop3">list_a.pop(3)</h3>
<ul>
<li>pop() : <strong>해당 인덱스</strong>의 요소를 제거하고 반환한다
<img src="https://velog.velcdn.com/images/hee_08/post/d5bde174-2bbf-4787-bed7-88adda437e1b/image.png" alt=""></li>
</ul>
<p>네번째 인덱스 값을 제거한다 </p>
<hr>
<h3 id="list_aclear">list_a.clear()</h3>
<ul>
<li>clear() : 리스트의 모든 요소를 삭제
<img src="https://velog.velcdn.com/images/hee_08/post/83597251-fd50-481a-9050-c17445e86634/image.png" alt=""></li>
</ul>
<hr>
<h3 id="remove와-pop의-차이">remove()와 pop()의 차이</h3>
<ul>
<li>remove() : <strong>값</strong>을 직접 찾아서 삭제</li>
<li>pop() : <strong>특정 인덱스</strong>의 요소를 삭제하고 삭제한 값을 반환</li>
</ul>
<table>
<thead>
<tr>
<th>메서드</th>
<th>기능</th>
<th>인자</th>
<th>반환값</th>
<th>오류 발생 조건</th>
</tr>
</thead>
<tbody><tr>
<td><code>remove(value)</code></td>
<td>특정 값을 찾아 <strong>첫 번째 요소</strong> 삭제</td>
<td>값 (<code>value</code>)</td>
<td>없음 (<code>None</code>)</td>
<td>값이 리스트에 없으면 <code>ValueError</code></td>
</tr>
<tr>
<td><code>pop(index)</code></td>
<td>특정 인덱스의 요소를 <strong>삭제하고 반환</strong></td>
<td>인덱스 (<code>index</code>), 기본값 <code>-1</code> (마지막 요소)</td>
<td>제거된 요소 반환</td>
<td>인덱스가 범위를 벗어나면 <code>IndexError</code></td>
</tr>
</tbody></table>
<hr>
<h1 id="1-리스트list">1. 리스트(List)</h1>
<ul>
<li>여러 개의 값을 하나의 변수에 저장할 수 있는 순차 자료형</li>
<li>요소(Element)들이 순서대로 저장되며, 인덱스(Index)를 통해 접근 가능 하다</li>
</ul>
<h2 id="11-리스트-생성">1.1. 리스트 생성</h2>
<pre><code class="language-python"># 빈 리스트
empty_list = []

# 숫자 리스트
numbers = [1, 2, 3, 4, 5]

# 문자열 리스트
fruits = [&quot;apple&quot;, &quot;banana&quot;, &quot;cherry&quot;]

# 여러 자료형 섞인 리스트
mixed = [1, &quot;hello&quot;, 3.14, True]

# 중첩 리스트 (리스트 안에 리스트)
nested_list = [[1, 2, 3], [4, 5, 6]]</code></pre>
<h2 id="12-리스트-인덱싱과-슬라이싱">1.2. 리스트 인덱싱과 슬라이싱</h2>
<pre><code class="language-python">numbers = [10, 20, 30, 40, 50]

print(numbers[0])  # 첫 번째 요소: 10
print(numbers[-1]) # 마지막 요소: 50
print(numbers[1:4]) # 슬라이싱: [20, 30, 40]</code></pre>
<h2 id="13-리스트-수정">1.3. 리스트 수정</h2>
<pre><code class="language-python">numbers[1] = 99  # 두 번째 요소를 99로 변경
print(numbers)  # [10, 99, 30, 40, 50]</code></pre>
<h2 id="14-리스트-요소-추가-및-삭제">1.4. 리스트 요소 추가 및 삭제</h2>
<pre><code class="language-python">fruits.append(&quot;grape&quot;)   # 끝에 요소 추가
fruits.insert(1, &quot;orange&quot;) # 특정 위치(1)에 삽입
fruits.extend([&quot;melon&quot;, &quot;kiwi&quot;]) # 여러 개 요소 추가

del fruits[2] # 세 번째 요소 삭제
print(fruits)</code></pre>
<hr>
<h1 id="2-딕셔너리dictionary">2. 딕셔너리(Dictionary)</h1>
<ul>
<li><strong>키(Key)와 값(Value) 쌍</strong>으로 이루어진 자료형</li>
<li>키를 통해 값을 빠르게 조회할 수 있다</li>
</ul>
<h2 id="21-딕셔너리-생성">2.1. 딕셔너리 생성</h2>
<pre><code class="language-python"># 빈 딕셔너리
empty_dict = {}

# 키와 값 쌍이 있는 딕셔너리
person = {
    &quot;name&quot;: &quot;Alice&quot;,
    &quot;age&quot;: 25,
    &quot;city&quot;: &quot;Seoul&quot;
}</code></pre>
<h2 id="22-딕셔너리-요소-접근">2.2. 딕셔너리 요소 접근</h2>
<pre><code class="language-python">print(person[&quot;name&quot;])  # &#39;Alice&#39; 출력
print(person.get(&quot;age&quot;))  # 25 출력</code></pre>
<h2 id="23-딕셔너리-요소-추가-및-수정">2.3. 딕셔너리 요소 추가 및 수정</h2>
<pre><code class="language-python">person[&quot;job&quot;] = &quot;Engineer&quot;  # 새 키값 추가
person[&quot;age&quot;] = 26  # 기존 값 변경</code></pre>
<h2 id="24-딕셔너리-요소-삭제">2.4. 딕셔너리 요소 삭제</h2>
<pre><code class="language-python">del person[&quot;city&quot;]  # 특정 키 삭제
person.pop(&quot;job&quot;)   # pop() 사용하여 삭제</code></pre>
<hr>
<h1 id="3-범위range-자료형">3. 범위(range) 자료형</h1>
<ul>
<li>일정한 숫자 범위를 생성하는 <strong>반복 가능한 자료형</strong></li>
<li>for문 에서 반복할 때 자주 사용된다</li>
</ul>
<h2 id="31-range-기본-사용법">3.1. range() 기본 사용법</h2>
<pre><code class="language-python">print(list(range(5)))  # [0, 1, 2, 3, 4] 
print(list(range(1, 6)))  # [1, 2, 3, 4, 5]
print(list(range(1, 10, 2)))  # [1, 3, 5, 7, 9] </code></pre>
<h2 id="32-range와-for문">3.2. range()와 for문</h2>
<pre><code class="language-python">for i in range(3):
    print(&quot;Hello&quot;)  # 3번 반복 출력</code></pre>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[[파이썬] 공백 기준으로 데이터 입력 받고 출력하기 ]]></title>
            <link>https://velog.io/@hee_08/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%85%EB%A0%A5-%EB%B0%9B%EA%B8%B0</link>
            <guid>https://velog.io/@hee_08/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%85%EB%A0%A5-%EB%B0%9B%EA%B8%B0</guid>
            <pubDate>Mon, 13 Jan 2025 14:44:50 GMT</pubDate>
            <description><![CDATA[<p>백준풀이시 입력과 출력이 동일하지 않으면 오답처리 된다.
풀이 할 때마다 무슨 함수가 있었는지.. 어떻게 입력 받아야 되는지 헷갈려서 
공백 기준으로 구분하여 입력받고 출력하는 방법을 정리하였다.</p>
<p>계속해서 추가될 예정 </p>
<p>마지막 업데이트 : 2025-01-13</p>
<hr>
<h2 id="1-리스트로-만들어-출력하기">1. 리스트로 만들어 출력하기</h2>
<ul>
<li>split() : 공백을 기준으로 입력을 나누어 리스트로 만드는 함수 </li>
<li>map(int, ...) : 각 요소를 정수로 변환하는 함수</li>
</ul>
<pre><code>numbers = list(map(int, input(&quot;공백으로 구분된 숫자를 입력하세요: &quot;).split()))
print(&quot;입력한 숫자들:&quot;, numbers)
</code></pre><blockquote>
<p>입력 : 1 2 3 4 5 
출력 : [1, 2, 3, 4, 5] </p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/hee_08/post/f774a5de-eb06-448a-bd92-bf568a04f5e2/image.png" alt=""></p>
<hr>
<h2 id="2-for-문으로-입력받은-값-출력하기">2. for 문으로 입력받은 값 출력하기</h2>
<ul>
<li>print(number, end=&quot; &quot;) 줄바꿈 없이 공백으로 숫자를 출력한다</li>
</ul>
<pre><code>print(&quot;공백으로 구분된 숫자를 입력하세요:&quot;)
for number in map(int, input().split()):
    print(number, end=&quot; &quot;)</code></pre><blockquote>
<p>입력 : 1 2 3 4 5
출력 : 1 2 3 4 5 </p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/hee_08/post/430aba7b-3070-48ad-acee-34a583269e48/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/hee_08/post/43b2914c-76a5-472a-a64c-4770f028f80c/image.png" alt=""></p>
<p>하나하나씩 출력하는데 end=&quot; &quot; 공백을 사이사이 넣는다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공파] 2주차 - Chapter 02(02-3) - 3]]></title>
            <link>https://velog.io/@hee_08/%ED%98%BC%EA%B3%B5%ED%8C%8C-2%EC%A3%BC%EC%B0%A8-Chapter-0202-3-3</link>
            <guid>https://velog.io/@hee_08/%ED%98%BC%EA%B3%B5%ED%8C%8C-2%EC%A3%BC%EC%B0%A8-Chapter-0202-3-3</guid>
            <pubDate>Mon, 13 Jan 2025 13:57:27 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>2주차 진도 : Chapter 02(02-3) - 3 
숙제 : 187p 3번 풀고 본인이 태어난 해와 띠를 출력하는 결과값 화면 인증
기간 : 1/3 - 1/19</p>
</blockquote>
<hr>
<h1 id="숙제">숙제</h1>
<pre><code>str_input = input(&quot;태어난 해를 입력하세요 : &quot;)

birth_year = int(str_input)

if birth_year % 12 == 0:
    print(&quot;원숭이 띠입니다&quot;)

elif birth_year % 12 == 1:
    print(&quot;닭 띠입니다&quot;)

elif birth_year % 12 == 2:
    print(&quot;개 띠입니다&quot;)

elif birth_year % 12 == 3:
    print(&quot;돼지 띠입니다&quot;)

elif birth_year % 12 == 4:
    print(&quot;쥐 띠입니다&quot;)

elif birth_year % 12 == 5:
    print(&quot;소 띠입니다&quot;)

elif birth_year % 12 == 6:
    print(&quot;범 띠입니다&quot;)

elif birth_year % 12 == 7:
    print(&quot;토끼 띠입니다&quot;)

elif birth_year % 12 == 8:
    print(&quot;용 띠입니다&quot;)

elif birth_year % 12 == 9:
    print(&quot;뱀 띠입니다&quot;)

elif birth_year % 12 == 10:
    print(&quot;말 띠입니다&quot;)

elif birth_year % 12 == 11:
    print(&quot;양 띠입니다&quot;)

</code></pre><img src="https://velog.velcdn.com/images/hee_08/post/2b0d92e4-9434-48af-a500-52885dff979f/image.png">




<hr>
<h1 id="1-변수와-입력">1. 변수와 입력</h1>
<h2 id="11-변수">1.1. 변수</h2>
<h3 id="정의">정의</h3>
<ul>
<li>값을 저장할 때 사용하는 식별자</li>
<li>변할 수 있는 자료</li>
</ul>
<h3 id="변수-활용-방법">변수 활용 방법</h3>
<ol>
<li>선언</li>
<li>값 할당</li>
<li>참조</li>
</ol>
<ul>
<li>참조 : 변수에서 값을 꺼내는 것을 의미</li>
</ul>
<hr>
<h2 id="12-파이썬에서의-변수">1.2. 파이썬에서의 변수</h2>
<ul>
<li><p>변수 자체의 이름을 적어주는 순간 선언된다</p>
<ul>
<li>c언어처럼 일일이 자료형을 붙여 선언해 줄 필요가 없다 </li>
</ul>
</li>
<li><p>참조하고 싶다면 참조할 위치에서 변수의 이름을 적어주면 된다</p>
</li>
</ul>
<hr>
<h1 id="2-복합-대입-연산자">2. 복합 대입 연산자</h1>
<h2 id="21-정의">2.1. 정의</h2>
<ul>
<li>기존의 연산자와 조합해서 사용할 수 있는 연산자</li>
</ul>
<h2 id="22-종류">2.2. 종류</h2>
<table>
<thead>
<tr>
<th>연산자</th>
<th>설명</th>
<th>예시</th>
<th>결과</th>
</tr>
</thead>
<tbody><tr>
<td><code>+=</code></td>
<td>덧셈 후 대입</td>
<td><code>a += b</code></td>
<td><code>a = a + b</code></td>
</tr>
<tr>
<td><code>-=</code></td>
<td>뺄셈 후 대입</td>
<td><code>a -= b</code></td>
<td><code>a = a - b</code></td>
</tr>
<tr>
<td><code>*=</code></td>
<td>곱셈 후 대입</td>
<td><code>a *= b</code></td>
<td><code>a = a * b</code></td>
</tr>
<tr>
<td><code>/=</code></td>
<td>나눗셈 후 대입</td>
<td><code>a /= b</code></td>
<td><code>a = a / b</code></td>
</tr>
<tr>
<td><code>//=</code></td>
<td>몫 나눗셈 후 대입</td>
<td><code>a //= b</code></td>
<td><code>a = a // b</code></td>
</tr>
<tr>
<td><code>%=</code></td>
<td>나머지 연산 후 대입</td>
<td><code>a %= b</code></td>
<td><code>a = a % b</code></td>
</tr>
<tr>
<td><code>**=</code></td>
<td>거듭제곱 후 대입</td>
<td><code>a **= b</code></td>
<td><code>a = a ** b</code></td>
</tr>
<tr>
<td><code>&amp;=</code></td>
<td>비트 AND 후 대입</td>
<td><code>a &amp;= b</code></td>
<td><code>a = a &amp; b</code></td>
</tr>
<tr>
<td>`</td>
<td>=`</td>
<td>비트 OR 후 대입</td>
<td>`a</td>
</tr>
<tr>
<td><code>^=</code></td>
<td>비트 XOR 후 대입</td>
<td><code>a ^= b</code></td>
<td><code>a = a ^ b</code></td>
</tr>
<tr>
<td><code>&gt;&gt;=</code></td>
<td>비트 오른쪽 시프트 후 대입</td>
<td><code>a &gt;&gt;= b</code></td>
<td><code>a = a &gt;&gt; b</code></td>
</tr>
<tr>
<td><code>&lt;&lt;=</code></td>
<td>비트 왼쪽 시프트 후 대입</td>
<td><code>a &lt;&lt;= b</code></td>
<td><code>a = a &lt;&lt; b</code></td>
</tr>
</tbody></table>
<hr>
<h1 id="3-input">3. input()</h1>
<h2 id="31-정의">3.1. 정의</h2>
<ul>
<li>사용자로부터 데이터를 입력 받을때 사용하는 함수</li>
<li>input() 함수의 () 안은 &#39;프롬프트 문자열&#39; 이라고 한다</li>
</ul>
<hr>
<h2 id="32-특징">3.2. 특징</h2>
<pre><code>age = input(&quot;Enter your age: &quot;)
print(type(age)) 
</code></pre><p>출력 : &lt;class &#39;str&#39;&gt;</p>
<ul>
<li>input() 함수는 사용자 입력을 항상 문자열(string)으로 반환한다</li>
</ul>
<h2 id="33-input-과-cast캐스트">3.3. input() 과 cast(캐스트)</h2>
<h3 id="정의-1">정의</h3>
<ul>
<li>cast : 데이터 타입을 명시적으로 변환하는 작업</li>
</ul>
<h3 id="종류">종류</h3>
<ul>
<li>int() : &quot;문자열&quot;을 int형으로 변환</li>
<li>float() :  &quot;문자열&quot;을 float형으로 변환</li>
<li>str () : &quot;숫자&quot;를 문자열로 변환</li>
</ul>
<h3 id="예제">예제</h3>
<pre><code>A = int(&quot;10&quot;) #문자열 10을 정수 10으로 반환
print(type(A)) #int형으로 변환한 A
print(A) #A의 값은 10</code></pre><hr>
<h1 id="4-valueerror-예외">4. ValueError 예외</h1>
<ul>
<li>자료형 변환시 변환할 수 없는 것을 변환하려고 할 때 발생하는 에러</li>
</ul>
<hr>
<h1 id="5-파이썬-튜터">5. 파이썬 튜터</h1>
<blockquote>
<p><a href="https://pythontutor.com/">https://pythontutor.com/</a> </p>
</blockquote>
<ul>
<li>코드 흐름을 쉽게 이해할 수 있도록 시각적으로 분석해주는 도구</li>
</ul>
<hr>
<h1 id="6-swap스왑">6. swap(스왑)</h1>
<h2 id="61-정의">6.1. 정의</h2>
<ul>
<li>두 변수의 값을 서로 교체하는 작업</li>
</ul>
<h2 id="62-특징">6.2. 특징</h2>
<ul>
<li>튜플 언패킹(Tuple Unpacking)을 사용하여 두 변수의 값을 한줄로 교환할 수 있다 </li>
<li>임시 변수가 필요없다</li>
<li>간결하고 가독성이 좋다</li>
<li>추가 메모리가 필요없다</li>
</ul>
<h2 id="63-사용-방법">6.3. 사용 방법</h2>
<pre><code>a = 5
b = 10


a, b = b, a   # Swap


print(a)  # 출력 10
print(b)  # 출력 5
</code></pre><hr>
<h1 id="7-format">7. Format()</h1>
<h2 id="71-정의">7.1. 정의</h2>
<ul>
<li><strong>문자열을 원하는 형식으로 조작</strong>할 수 있도록 도와주는 함수</li>
</ul>
<h2 id="72-기본-사용법">7.2. 기본 사용법</h2>
<pre><code>name = &quot;Hee&quot;
age = 20 

sentence = &quot;안녕 나는 {}이고 {}살이야&quot;.format(name, age)
print(sentence)
</code></pre><blockquote>
<p><strong>출력</strong>
안녕 나는 Hee고 20살이야</p>
</blockquote>
<ul>
<li>앞쪽에 있는 문자열의 {} 기호가 format() 함수 괄호 안에 있는 매개변수로 <strong>차례로</strong> 대치된다</li>
</ul>
<h2 id="73-추가-사용">7.3. 추가 사용</h2>
<h3 id="위치-정해주기">위치 정해주기</h3>
<pre><code>sentence = &quot;{1}은 {0}보다 큽니다.&quot;.format(5, 10)
print(sentence)</code></pre><blockquote>
<p><strong>출력</strong>
10은 5보다 큽니다</p>
</blockquote>
<h3 id="숫자를-문자열로-변환하기">숫자를 문자열로 변환하기</h3>
<pre><code>A = &quot;{}만원&quot;.format(50)
print(A)
print(type(A))</code></pre><blockquote>
<p><strong>출력</strong>
50만원
&lt;class &#39;str&#39;&gt;</p>
</blockquote>
<hr>
<h3 id="정렬하기">정렬하기</h3>
<pre><code>word = &quot;Python&quot;

print(&quot;좌측 정렬: {:&lt;10}&quot;.format(word))   
print(&quot;우측 정렬: {:&gt;10}&quot;.format(word))   
print(&quot;가운데 정렬: {:^10}&quot;.format(word))
</code></pre><img src ="https://velog.velcdn.com/images/hee_08/post/6e8b0e76-883d-4ff8-81ee-71a0e5f884f4/image.png">



<p>이 외에도 format()를 통한 다양한 포맷팅 가능 </p>
<hr>
<h1 id="8-indexerror-예외">8. IndexError 예외</h1>
<ul>
<li>인덱싱 가능한 자료형에서 존재하지 않는 인덱스에 접근할 때 발생하는 에러</li>
<li>{} 기호의 갯수가 format() 함수의 매개변수보다 많으면 발생</li>
<li>매개변수가 {} 보다 많으면 {} 개수만큼 적용되고 버려짐</li>
</ul>
<hr>
<h1 id="9-upper-과-lower">9. upper() 과 lower()</h1>
<h2 id="upper">upper()</h2>
<ul>
<li>문자열의 알파벳을 대문자로 바꾸는 함수</li>
</ul>
<h2 id="lower">lower()</h2>
<ul>
<li>문자열의 알파벳을 소문자로 바꾸는 함수</li>
</ul>
<hr>
<h1 id="10-strip-lstrip-rstrip">10. strip(), lstrip(), rstrip()</h1>
<h3 id="strip">strip()</h3>
<ul>
<li>문자열 양옆의 공백을 제거하는 함수</li>
</ul>
<pre><code>text = &quot;   Hello, Python!   &quot;
print(text.strip())  # 양쪽 공백 제거
print(text)
</code></pre><img src ="https://velog.velcdn.com/images/hee_08/post/1cd10f9f-7a3f-4e61-8467-80049544380a/image.png">


<h3 id="lstrip">lstrip()</h3>
<ul>
<li>문자열 왼쪽의 공백을 제거하는 함수</li>
</ul>
<h3 id="rstrip">rstrip()</h3>
<ul>
<li>문자열 오른쪽의 공백을 제거하는 함수</li>
</ul>
<hr>
<h1 id="11-is___">11. is___()</h1>
<ul>
<li>참(True) 또는 거짓(False)을 반환하는 함수</li>
<li>어떤 조건을 확인하거나 검증하는 역할</li>
</ul>
<hr>
<h1 id="12-find-rfind">12. find(), rfind()</h1>
<ul>
<li>문자열에서 특정 문자열의 위치(인덱스)를 찾는데 사용된다</li>
</ul>
<h3 id="find">find()</h3>
<ul>
<li>문자열의 왼쪽(처음) 부터 검색하여 <strong>첫번째로 일치하는 위치</strong>를 반환</li>
</ul>
<h3 id="rfind">rfind()</h3>
<ul>
<li>문자열의 오른쪽(끝) 부터 검색하여 <strong>첫번째로 일치하는 위치</strong>를 반환</li>
</ul>
<h3 id="예시">예시</h3>
<ul>
<li>검색 시 띄어쓰기(공백)나 콤마 마침표 같은 특수기호도 하나의 위치로 계산</li>
</ul>
<pre><code>text = &quot;Hello, Python! Python is fun.&quot;

index_1 = text.find(&quot;Python&quot;)
index_2 = text.rfind(&quot;Python&quot;)
print(index_1)  #출력 7
print(index_2)  #출력 15
</code></pre><hr>
<h1 id="13-in-연산자">13. in 연산자</h1>
<ul>
<li>특정 값이 시퀸스(문자열, 리스트, 튜플, 딕셔너리...등) 내에 존재하는지 확인해주는 연산자 </li>
</ul>
<h2 id="기본-문법">기본 문법</h2>
<pre><code>값 in 시퀸스 
# 값이 시퀀스에 &quot;포함되어 있으면&quot; True, 없으면 False 반환</code></pre><pre><code>값 not 시퀸스 
# 값이 시퀀스에 &quot;포함되어 있지 않으면&quot; True, 있으면 False 반환</code></pre><h2 id="예시-1">예시</h2>
<pre><code>text = &quot;Hello, Python!&quot;

print(&quot;Python&quot; in text)   # True
print(&quot;Java&quot; in text)     # False 
print(&quot;Hello&quot; not in text) # False
</code></pre><hr>
<h1 id="14-f-stringformatted-string">14. f-string(Formatted String)</h1>
<ul>
<li>문자열 내에서 변수를 간단하게 삽입하는 방법 </li>
<li>파이썬 3.6 이상 버전에서 도입</li>
</ul>
<p>대부분의 상황에서는 f-string 사용한다 왜 ?</p>
<ol>
<li>표현식을 입력할 떄마다 str() 로 감싸줘야 해서 귀찮다</li>
<li>문법이 간결 → format()보다 코드가 짧아지기 때문</li>
<li>format() 보다 속도가 빠르다</li>
</ol>
<h2 id="141-기본-사용">14.1. 기본 사용</h2>
<pre><code>name = &quot;Hee&quot;
age = 99

print(f&quot;안녕하세요, 저는 {name}이고 {age}살입니다.&quot;)
# 안녕하세요, 저는 Hee이고 99살입니다.
</code></pre><h2 id="142-그럼-format은-언제쓰는-것이-편한가">14.2. 그럼 format()은 언제쓰는 것이 편한가</h2>
<ol>
<li>문자열 내용이 많을 때 : 데이터를 뒤에 모아서 볼 수 있기 때문</li>
<li>데이터를 리스트에 담아서 사용 할 때 : * 라는 전개 연산자 사용으로 전체 전개 가능<pre><code>values = [&quot;Alice&quot;, 25, &quot;Seoul&quot;]
print(&quot;이름: {}, 나이: {}, 도시: {}&quot;.format(*values))
</code></pre></li>
</ol>
<pre><code>

----

## 14.3. f-string과 format() 비교


| 사용 상황                   | `f-string` (`f&quot;&quot;`) | `.format()` (`.format()`) |
|---------------------------|------------------|------------------|
| **Python 3.6 이상**        | ✅ 추천 (빠름) | ❌ 가능하지만 비효율적 |
| **Python 3.5 이하**        | ❌ 지원 안됨 | ✅ 추천 (호환성) |
| **단순한 문자열 포맷팅**    | ✅ 추천 (간결) | ❌ 불필요하게 길어짐 |
| **템플릿 재사용 (저장 후 값 삽입)** | ❌ 불편 | ✅ `.format()`이 유리 |
| **딕셔너리/리스트 값 삽입** | ❌ 불편 | ✅ `.format(*list, **dict)` |
| **JSON, SQL, HTML 생성**  | ❌ 불편 | ✅ `.format()`이 적합 |




---


# 15. 조건문

## 15.1.종류
</code></pre><p>if 조건:
    # 조건이 참(True)일 때 실행할 코드</p>
<p>elif 다른_조건:
    # 첫 번째 조건이 거짓(False)이고, 이 조건이 참(True)일 때 실행</p>
<p>else:
    # 모든 조건이 거짓(False)일 때 실행할 코드</p>
<pre><code>
* if → 기본 조건문
* if-else → 조건이 False일 때 실행할 코드 추가
* if-elif-else → 여러 조건 검사
* 간단한 조건문 → if 조건 else 표현식


---


## 15.2. False로 변환되는 값
| **타입**          | **Falsy 값 (False로 변환됨)** |
|------------------|--------------------------|
| **논리형 (`bool`)**   | `False` |
| **숫자형 (`int`, `float`, `complex`)** | `0`, `0.0`, `0j` (복소수 `0j`) |
| **문자열 (`str`)**    | `&quot;&quot;` (빈 문자열) |
| **리스트 (`list`)**   | `[]` (빈 리스트) |
| **튜플 (`tuple`)**   | `()` (빈 튜플) |
| **딕셔너리 (`dict`)** | `{}` (빈 딕셔너리) |
| **집합 (`set`)**     | `set()` (빈 집합) |
| **NoneType (`None`)** | `None` |
| **사용자 정의 객체**  | `__bool__()` 또는 `__len__()` 메서드가 `False`를 반환하는 경우 |








---

## 15.3. pass 키워드


### 정의
* 아무동작도 하지않는 Empty 코드 블록을 만들 때 사용한다
* 실행할 코드가 없을 때 비워두는 역할


### 사용해야하는 이유?
* 파이썬은 들여쓰기가 중요한 언어로 빈 코드 블록을 둘 수 없다
* 구문이 필요하지만 실행할 내용이 없을 때 사용해야한다 

</code></pre><p>if True:
    pass<br>    # 실행할 코드가 없지만 문법 오류 방지를 위해 사용</p>
<pre><code>
### 일부러 오류 발생시키기기 가능
* raise NotImplementedError 삽입





---

# 🔎 키워드 체크

* 미래의 까먹을 나를 위해 다시 적어두는 키워드...

&gt;변수 개념 ✅ 
복합 대입 연산자 ✅
input() 함수 ✅
cast의 정의와 종류 ✅
파이썬 튜터 ✅
swap의 정의와 사용 방법 ✅
format() 함수 쓰기 ✅
IndexError 예외 ✅
strip(), lstrip(), rstrip() ✅
is___()함수 역할 ✅
find(), rfind() 함수의 차이와 역할✅
in 연산자 ✅
f-string과 format()함수의 차이 ✅
기본 조건문 사용법 ✅
False로 변환되는 값 ✅
pass 키워드 사용 &lt;-&gt; raise NotImplementedError ✅</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[2024 Google Study Jam]]></title>
            <link>https://velog.io/@hee_08/2025-Google-Study-Jam-AI</link>
            <guid>https://velog.io/@hee_08/2025-Google-Study-Jam-AI</guid>
            <pubDate>Thu, 09 Jan 2025 14:53:04 GMT</pubDate>
            <description><![CDATA[<p>ai + 보안 + 앱 관련한 캡스톤 프로젝트를 진행중이라 
ai 노베이스인 나에게 기초적인 지식이 필요하다고 느껴졌다
그리고 12월에 시작해서 1월에 스터디잼이 끝나기 때문에
가볍게 수료해본다면 좋은 1월의 시작이 될 것 같았다!</p>
<hr>
<h1 id="1-구글-스터디-잼-google-study-jam-이란">1. 구글 스터디 잼 (Google Study Jam) 이란</h1>
<p>구글의 기술을 학습하고 실습할 수 있는 서비스이다</p>
<p>클라우드 컴퓨팅에 관심있는 개발자, 학생, IT 전문가 등등이 쉽게 학습하고 기술을 습득할 수 있도록 설계되었다</p>
<p>Google Cloud Platform(GCP) 라는 구글이 제공하는 클라우딩 컴퓨팅 플랫폼을 이용하여 실습을 통한 학습이 가능하다</p>
<blockquote>
<p><strong>Generative AI 2024 구글 스터디 잼 관련 안내 문서</strong>
<a href="https://docs.google.com/presentation/d/1W4sNFGfiap9-wIzyHEgvmc6pzRyUgtYNWCcRUBPN0qw/edit#slide=id.g6d00d499e0_0_0">https://docs.google.com/presentation/d/1W4sNFGfiap9-wIzyHEgvmc6pzRyUgtYNWCcRUBPN0qw/edit#slide=id.g6d00d499e0_0_0</a>  </p>
</blockquote>
<blockquote>
<p><a href="https://www.facebook.com/groups/studyjamkorea/">구글 스터디 잼 페이스북</a>을 통해 참여하는 다른 사람들과 소통이 가능하다</p>
</blockquote>
<hr>
<h1 id="2-스터디잼-주요-일정">2. 스터디잼 주요 일정</h1>
<h3 id="21-참가자-모집-기간">2.1. 참가자 모집 기간</h3>
<blockquote>
<p>1차 모집: ~ 2024년 12월 6일 오전 9시까지
2차 모집: ~ 2024년 12월 13일 오전 9시까지
3차 모집: ~ 2024년 12월 20일 오전 9시까지</p>
</blockquote>
<h3 id="22-스터디잼-진행-기간">2.2. 스터디잼 진행 기간</h3>
<p>2024년 12월 6일(금) ~ 2025년 1월 6일(일)
약 한 달간의 학습 기간 동안 자유롭게 학습과 실습이 진행가능하다</p>
<h3 id="23-안내-메일-발송">2.3. 안내 메일 발송</h3>
<p>신청 폼을 제출한 날짜에 따라 아래 일정에 맞춰 안내 메일이 발송된다</p>
<p>1차: 12월 6일 오후 중
2차: 12월 13일 오후 중
3차: 12월 20일 오후 중</p>
<hr>
<h1 id="3-참여-방법">3. 참여 방법</h1>
<ol>
<li>스터디잼 신청 폼 작성 후 제출</li>
<li>안내 메일을 통해 <strong>크레딧 등록 후</strong> 스터디 진행</li>
</ol>
<hr>
<h1 id="4-코스-및-수료에-따른-기념품">4. 코스 및 수료에 따른 기념품</h1>
<p><img src="https://velog.velcdn.com/images/hee_08/post/65a6788b-817e-428c-89fc-773d2f1b2305/image.png" alt=""></p>
<ul>
<li><a href="https://www.cloudskillsboost.google/paths/118">Beginner 코스</a> : 스티커팩</li>
<li><a href="https://www.cloudskillsboost.google/paths/236">Beginner + Intermediate 코스</a> : 스티커팩 + 스텐머그</li>
<li><a href="https://www.cloudskillsboost.google/paths/183">Beginner + Intermediate + Advanced 코스</a> : 스티커팩 + 스텐머그 + 백팩</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공파] 1주차 - Chapter 01 - 2(02-2)]]></title>
            <link>https://velog.io/@hee_08/%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A8-13%EA%B8%B0-1%EC%A3%BC%EC%B0%A8-tsyafvoi</link>
            <guid>https://velog.io/@hee_08/%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A8-13%EA%B8%B0-1%EC%A3%BC%EC%B0%A8-tsyafvoi</guid>
            <pubDate>Tue, 07 Jan 2025 06:53:28 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>1주차 진도 : Chapter 01 - 2(02-2)
숙제 : 101p 3-5번 실행
기간 : 1/6 - 1/12</strong></p>
</blockquote>
<h3 id="101p-3번">101p 3번</h3>
<pre><code>print(&quot;# 연습문제&quot;)
print(&quot;\\\\\\\\&quot;)
print(&quot;-&quot;*8)</code></pre><img src ="https://velog.velcdn.com/images/hee_08/post/0dca57f7-89ca-44f9-8d19-9b35bfa109dc/image.png">



<hr>
<h3 id="101p-4번">101p 4번</h3>
<pre><code>print(&quot;안녕하세요&quot;[1])
print(&quot;안녕하세요&quot;[2])
print(&quot;안녕하세요&quot;[3])
print(&quot;안녕하세요&quot;[4])
print(&quot;안녕하세요&quot;[5])</code></pre><img src = https://velog.velcdn.com/images/hee_08/post/73df4ec2-33df-4e5a-9388-b0b9588a120e/image.png>

<p>파이썬은 제로 인덱스이므로 5번째 문자열은 존재하지 않기 때문에
인덱스 범위를 넘어서면서 출력이 불가능해짐</p>
<hr>
<h3 id="101p-5번">101p 5번</h3>
<pre><code>print(&quot;안녕하세요&quot;[1:3])
print(&quot;안녕하세요&quot;[2:4])
print(&quot;안녕하세요&quot;[1:])
print(&quot;안녕하세요&quot;[:3])</code></pre><img src = https://velog.velcdn.com/images/hee_08/post/26f31b4a-0708-43df-aaad-c67d09fa3655/image.png>


<hr>
<h1 id="chapter-01-파이썬-시작하기">Chapter 01. 파이썬 시작하기</h1>
<blockquote>
<p><strong>학습 목표</strong></p>
</blockquote>
<ul>
<li>프로그래밍 언어 구성 요소 이해</li>
<li>파이썬이 무엇인지 알기</li>
<li>파이썬 실습 환경 구축 및 실행</li>
<li>파이썬 기본 용어 </li>
<li>파이썬 기본 출력 print() </li>
</ul>
<hr>
<h2 id="11-프로그래밍">1.1. 프로그래밍?</h2>
<ul>
<li><p>pro(미리) + gram(작성된)
program = 미리 작성된 것</p>
</li>
<li><p>프로그래밍 언어
: 컴퓨터가 이해할 수 있는 값은 이진값 뿐이기 때문에 그 값을 사람이 이해할 수 있는 형태로 보는 사람을 위한 언어</p>
</li>
</ul>
<hr>
<h2 id="12-파이썬">1.2. 파이썬?</h2>
<p><img src="https://velog.velcdn.com/images/hee_08/post/036c823c-6094-4ec9-95fe-bdf0d4050f50/image.png" alt=""></p>
<h3 id="기본-정보">기본 정보</h3>
<ul>
<li>1991년 귀도 반 로섬이 발표한 프로그래밍 언어</li>
<li>로고는 python 영어단어가 뜻하는 비단뱀을 모티프로 만들어짐</li>
</ul>
<h3 id="파이썬-특징">파이썬 특징</h3>
<ol>
<li><p>비전공자도 쉽게 배울 수 있다</p>
</li>
<li><p>다양한 분야에서 활용될 수 있다</p>
<ul>
<li>해킹도구</li>
<li>웹서버</li>
<li>IoT</li>
<li>인공지능</li>
</ul>
</li>
<li><p>대부분 운영체제에서 동일하게 사용</p>
</li>
<li><p>느리다</p>
<ul>
<li>일반적으로 C언어보다 10-350배 느림</li>
<li>컴퓨터 성능이 좋아졌기 때문에 게임 등 연산이 많이 필요한 프로그램이 아니라면 속도 차이를 크게 느낄 수 없다</li>
</ul>
</li>
</ol>
<hr>
<h2 id="13-파이썬-설치">1.3. 파이썬 설치</h2>
<p><a href="https://www.python.org/">https://www.python.org/</a> </p>
<ol>
<li><p>파이썬 인터렉티브 셸 : 파이썬으로 작성된 코드를 바로 실행해주는 프로그램(대화형 셸)</p>
<ul>
<li>인터프리터(interpreter) : 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경</li>
</ul>
</li>
<li><p>파이썬 IDLE 에디터 : 긴 코드나 코드를 저장해야 할 경우 사용하는 프로그램</p>
<ul>
<li>IDLE(Integrated Development Environment, 통합 개발 환경)</li>
</ul>
</li>
<li><p>VS CODE 사용
<a href="https://code.visualstudio.com/">https://code.visualstudio.com/</a> </p>
</li>
</ol>
<hr>
<h2 id="14-파이썬-용어">1.4. 파이썬 용어</h2>
<h3 id="문장">문장</h3>
<ul>
<li>실행할 수 있는 최소 단위</li>
<li>문장 + 문장 = 프로그램</li>
</ul>
<h3 id="표현식">표현식</h3>
<ul>
<li><p>어떠한 값을 만들어내는 간단한 코드</p>
<pre><code>10 + 20 </code></pre></li>
<li><p>값 : 숫자, 수식, 문자열 등등</p>
</li>
</ul>
<h3 id="키워드-예약어">키워드 (예약어)</h3>
<img src ="https://velog.velcdn.com/images/hee_08/post/32afa6e2-8179-429e-980d-463db47ae90a/image.png">

<ul>
<li>특별한 의미가 부여된 단어</li>
<li>파이썬이 만들어질 때 이미 사용하겠다고 예약해 놓은것</li>
<li>파이썬은 대소문자를 구분함</li>
</ul>
<h3 id="예약어-확인하기">예약어 확인하기</h3>
<pre><code>import keyword
print(keyword.kwlist)</code></pre><h3 id="식별자-변수-함수">식별자 (변수, 함수)</h3>
<ul>
<li><p>프로그래밍 언어에서 이름을 붙일 때 사용</p>
</li>
<li><p>식별자 만들 시 규칙</p>
<ul>
<li>키워드 사용 금지</li>
<li>특수문자는 언더바(_)만 허용</li>
<li>숫자로 시작할 수 없음</li>
<li>공백 포함 금지</li>
</ul>
</li>
<li><p>스네이크 케이스 : 소문자로 시작 </p>
<ul>
<li>item_list</li>
</ul>
</li>
</ul>
<ul>
<li><p>캐멀 케이스 : 대문자로 시작 -&gt; 클래스</p>
<ul>
<li>itemlist -&gt; Itemlist </li>
<li>뒤에 괄호()가 있을 시 : 함수</li>
<li>뒤에 괄호()가 없을 시 : 변수</li>
</ul>
</li>
</ul>
<h3 id="주석">주석</h3>
<ul>
<li>프로그램 진행에 영향을 주지않는 코드</li>
<li>프로그램을 설명하기 위해 사용</li>
<li>파이썬에서는 &#39;#&#39; 사용</li>
</ul>
<hr>
<h1 id="chapter-02-자료형">Chapter 02. 자료형</h1>
<blockquote>
<p><strong>학습목표</strong></p>
</blockquote>
<ul>
<li>자료와 자료형 의미</li>
<li>문자열 생성 방법</li>
<li>숫자 생성 방법</li>
<li>변수 선언 후 변수에 값 할당 방법</li>
</ul>
<h2 id="21-자료와-자료형">2.1. 자료와 자료형</h2>
<ul>
<li><p>자료 : 프로그램이 처리할 수 있는 모든 것</p>
</li>
<li><p>자료형 : 개발자들이 쉽게 사용할 수 있도록 기능과 역할에 따라 자료를 구분한 것</p>
</li>
</ul>
<h3 id="자료형-종류">자료형 종류</h3>
<ul>
<li>문자</li>
<li>문자열</li>
<li>숫자</li>
<li>불(boolean)</li>
</ul>
<h3 id="자료형-확인하기">자료형 확인하기</h3>
<pre><code>print(type(&quot;안녕&quot;))</code></pre><p>출력 : &lt;class &#39;str&#39;&gt;</p>
<hr>
<h2 id="22-문자열">2.2. 문자열</h2>
<h3 id="정의">정의</h3>
<ul>
<li>문자가 나열된 것</li>
<li>영어로 string(str)</li>
</ul>
<h3 id="만드는-방법">만드는 방법</h3>
<ol>
<li>큰따옴표(&quot;&quot;) 사이에 가두기</li>
<li>작은 따옴표(&#39;) 사이에 가두기</li>
<li>문자열 내부에 따옴표 넣기 (각자 다른 따옴표 쓰기)<pre><code>print(&quot;&#39;배가 고프구나&#39; 라고 생각했다.&quot;)</code></pre></li>
</ol>
<ul>
<li>이스케이프() 사용시 같은 따옴표 사용 가능<pre><code>print(&quot;\&quot;배가 고프구나\&quot; 라고 생각했다.&quot;)</code></pre></li>
</ul>
<hr>
<h2 id="23-문자열-연산자">2.3. 문자열 연산자</h2>
<h3 id="--연결">&#39;+&#39; : 연결</h3>
<ul>
<li>문자열 + 문자열 / 숫자 + 숫자 연결 가능</li>
</ul>
<h3 id="--반복">&#39;*&#39; : 반복</h3>
<ul>
<li>문자열 * 숫자(만큼 반복)</li>
<li>숫자 * 문자열 </li>
</ul>
<h3 id="--문자-선택">&#39;[]&#39; : 문자 선택</h3>
<ul>
<li>문자열 내부 문자 하나 선택</li>
<li>제로 인덱스 : 0부터 숫자 세기 -&gt; 파이썬 인덱싱 방식</li>
<li>원 인덱스 : 1부터 숫자 세기</li>
</ul>
<h3 id="-문자-슬라이싱범위선택">&#39;:&#39; 문자 슬라이싱(범위선택)</h3>
<ul>
<li>[0:1] : 0번째부터 1번째 까지</li>
<li>[1:] : 뒤나 앞 값 생략시 가장 뒤나 앞 위치까지 슬라이싱</li>
</ul>
<h3 id="len--문자열-길이-구하기">len() : 문자열 길이 구하기</h3>
<pre><code>&gt;&gt;&gt; print(len(&quot;안녕&quot;))</code></pre><p>출력 : 2 </p>
<hr>
<h2 id="24-숫자">2.4. 숫자</h2>
<h3 id="종류">종류</h3>
<ul>
<li>정수형 : int</li>
<li>부동소수점 (실수) : float</li>
</ul>
<hr>
<h2 id="25-숫자-연산자">2.5. 숫자 연산자</h2>
<ul>
<li><p>사칙 연산자 : + - * /</p>
</li>
<li><p>정수 나누기 연산자 : //</p>
<ul>
<li>소수점 아래를 뗀 결과만 출력</li>
</ul>
</li>
<li><p>나머지 연산자 : %</p>
</li>
<li><p>제곱 연산자 : ** </p>
<ul>
<li>2^4 = 2**4</li>
</ul>
</li>
</ul>
<h3 id="연산자-우선-순위">연산자 우선 순위</h3>
<p>*,/ 먼저 후 +, - 왼쪽부터 오른쪽 순으로</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[리눅스 마스터 2급 정리 + 후기]]></title>
            <link>https://velog.io/@hee_08/%EB%A6%AC%EB%88%85%EC%8A%A4-%EB%A7%88%EC%8A%A4%ED%84%B0-2%EA%B8%89-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@hee_08/%EB%A6%AC%EB%88%85%EC%8A%A4-%EB%A7%88%EC%8A%A4%ED%84%B0-2%EA%B8%89-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Fri, 06 Sep 2024 08:59:47 GMT</pubDate>
            <description><![CDATA[<p>2020년부터 2023년까지 4개년의 기출을 풀고
인터넷에 돌아다니는 족보들을 참고하여 직접 정리하였다</p>
<hr>
<h2 id="쉘">쉘</h2>
<h3 id="개발-순서">개발 순서</h3>
<p>sh -&gt; csh -&gt; ksh -&gt; tcsh -&gt; bash -&gt; zsh -&gt; dash </p>
<hr>
<h3 id="종류">종류</h3>
<h4 id="sh-bounce-shell">sh (bounce shell)</h4>
<ul>
<li>스티븐 본이 개발</li>
<li>최초의 유닉스 쉘</li>
</ul>
<h4 id="csh-c-shell">csh (C shell)</h4>
<ul>
<li>빌조이가 개발</li>
<li>히스토리, 작업제어 기능</li>
</ul>
<h4 id="ksh-korn-shell">ksh (korn shell)</h4>
<ul>
<li>데이비드 콘 개발</li>
<li>sh 기능에서 확장되었음 </li>
</ul>
<h4 id="tcsh">tcsh</h4>
<ul>
<li>켄 그리어가 개발</li>
<li>c shell 확장</li>
</ul>
<h4 id="bash">bash</h4>
<ul>
<li>브라이언 폭스가 개발</li>
<li>GNU 프로젝트</li>
</ul>
<h4 id="zsh">Zsh</h4>
<ul>
<li>폴이 개발</li>
<li>bash 기능 확장</li>
<li>명령어 자동완성</li>
</ul>
<h4 id="dash">dash</h4>
<ul>
<li>허버트 쉬가 개발 </li>
<li>POSIX 호환 쉘 </li>
</ul>
<hr>
<h3 id="명령어">명령어</h3>
<blockquote>
<p>set : 선언된 쉘 변수 전부 확인</p>
</blockquote>
<hr>
<h3 id="환경-변수">환경 변수</h3>
<blockquote>
<p>$SHELL : 로그인 시 부여받은 쉘 정보 </p>
</blockquote>
<hr>
<h3 id="bang-명령어-">Bang 명령어 (!)</h3>
<blockquote>
<p>!! : 직전 실행한 명령 다시 실행
!키워드 : 특정한 키워드 시작하는 가장 최근 명령어를 다시 실행
!?키워드 : 해당 키워드를 포함한 가장 최근 명령어를 다시 실행
!숫자 : 명령어 히스토리의 번호로 명령 다시 시작
history : 기록된 명령 번호 확인 가능</p>
</blockquote>
<hr>
<h2 id="리눅스-계열-배포판-패키지-관리-도구-분류">리눅스 계열, 배포판, 패키지 관리 도구 분류</h2>
<table>
<thead>
<tr>
<th align="left">계열</th>
<th>배포판</th>
<th align="center">패키지 관리 도구</th>
</tr>
</thead>
<tbody><tr>
<td align="left">데비안</td>
<td>Ubuntu, kali, Debain(Deb)</td>
<td align="center">apt, dpkg</td>
</tr>
<tr>
<td align="left">레드햇</td>
<td>Fedora</td>
<td align="center">dnf, rpm</td>
</tr>
<tr>
<td align="left"></td>
<td>CentOS 8이상</td>
<td align="center">dnf, rpm</td>
</tr>
<tr>
<td align="left"></td>
<td>CentOS 7이하</td>
<td align="center">yum, rpm</td>
</tr>
<tr>
<td align="left">SUSE</td>
<td>open SUSE</td>
<td align="center">zypper, rpm, YaST</td>
</tr>
</tbody></table>
<ul>
<li>온라인 기반 패키지 관리 도구가 아닌 것 : dpkg, YaST</li>
</ul>
<hr>
<h2 id="패키지-관리-도구-관련-자주-나오는-명령어">패키지 관리 도구 관련 자주 나오는 명령어</h2>
<h3 id="rpm">rpm</h3>
<blockquote>
<p>rpm -[옵션] 패키지명  </p>
</blockquote>
<pre><code>-i : 설치
-U : 설치 및 업데이트 
-q : 설치 여부 확인
-qa : 모든 패키지 설치 여부 확인
-e : 제거
-F : 기존 패키지가 있는 경우에만 설치
--nodeps : 패키지 의존성 무시하고 설치/제거
--force : 기존 패키지 설치 여부 무시하고 강제로 설치/제거</code></pre><hr>
<h3 id="yum">yum</h3>
<pre><code>remove : 제거
list : 전체 패키지 정보 출력
history list : yum 명령 사용한 작업 이력 확인</code></pre><hr>
<h2 id="편집기-종류-간단-특징">편집기 종류, 간단 특징</h2>
<blockquote>
<p>vi : 빌조이
vim : 브람 무레나르 (색깔을 바꾸어 가시성 좋게 할 수 있음)
emacs : 리처드 스톨만
pico : 아보
nano : 크리스 (GNU 프로젝트)
gedit : 파올로 메기 </p>
</blockquote>
<hr>
<h2 id="편집기-명령어-정리">편집기 명령어 정리</h2>
<h3 id="vi">vi</h3>
<ul>
<li>모드 3개 존재 : 명령모드, 입력모드, 명령행 모드 (&#39;:&#39; 입력시 진입)</li>
<li>명령모드 -&gt; 입력모드로 변경 하는 키 : a, i, o</li>
</ul>
<pre><code>x : 현재 커서 위치에 있는 문자 삭제
dd : 현재 줄 삭제
dw : 현재 줄에서 다음 단어까지 삭제
cw : 단어 변경 
a : 커서 뒤 부터 입력
A : 줄의 마지막에 입력
i : 현재 문자 앞에 입력
I : 줄의 시작 부분에 입력
Nyy : 아래방향으로 N줄만큼 복사
</code></pre><ul>
<li>set nu : 파일의 줄 번호 표시</li>
<li>set nonu : 파일의 줄 번호 표시 해제</li>
</ul>
<ul>
<li>set ai : 자동 들여쓰기</li>
<li>set noai : 자동 들여쓰기 해제 </li>
</ul>
<ul>
<li>vi -r 파일명 : 손상된 (네트워크 단절 같은 이유로) 파일 회복</li>
<li>vi -R 파일명 : 파일을 읽기 모드로 연다</li>
</ul>
<hr>
<h3 id="emacs">emacs</h3>
<blockquote>
<p>ctrl + x -&gt; ctrl + s : 파일 저장
ctrl x -&gt; s : 현재 열려있는 버퍼 저장
ctrl + b : 이전이동 
ctrl + p : 이전 줄 이동
ctrl + f : 앞 이동
ctrl + n : 다음 줄로 이동
ctrl + a : 줄의 시작으로 이동
ctrl + e : 줄의 끝으로 이동
ctrl + d : 현재 커서 위치 문자 삭제
ctrl + k : 커서부터 줄 끝까지 삭제
ctrl + x -&gt; ctrl + c : 편집기 종료</p>
</blockquote>
<hr>
<h3 id="nano">nano</h3>
<blockquote>
<p>ctrl + A : 줄 처음으로 이동
ctrl + E : 줄 끝으로 이동
ctrl + K : 현재 줄 삭제
ctrl + D : 현재 커서 위치 문자 삭제 </p>
</blockquote>
<hr>
<h2 id="osi-7계층">OSI 7계층</h2>
<h3 id="데이터-단위-기기">데이터 단위, 기기</h3>
<table>
<thead>
<tr>
<th align="left">게층</th>
<th>계층 이름</th>
<th align="center">데이터 단위</th>
<th>기기</th>
</tr>
</thead>
<tbody><tr>
<td align="left">7</td>
<td>애플리케이션</td>
<td align="center">메시지 or 데이터</td>
<td>서버</td>
</tr>
<tr>
<td align="left">6</td>
<td>표현</td>
<td align="center">메시지 or 데이터</td>
<td>게이트 웨이</td>
</tr>
<tr>
<td align="left">5</td>
<td>세션</td>
<td align="center">메시지 or 데이터</td>
<td></td>
</tr>
<tr>
<td align="left">4</td>
<td>전송</td>
<td align="center">TCP - 세그먼트</td>
<td>로드 밸런서</td>
</tr>
<tr>
<td align="left"></td>
<td></td>
<td align="center">UDP - 데이터 그램</td>
<td></td>
</tr>
<tr>
<td align="left">3</td>
<td>네트워크</td>
<td align="center">패킷</td>
<td>라우터(경로 찾기)</td>
</tr>
<tr>
<td align="left">2</td>
<td>데이터 링크</td>
<td align="center">프레임</td>
<td>스위치(MAC주소), 브릿지(분할/연결)</td>
</tr>
<tr>
<td align="left">1</td>
<td>물리</td>
<td align="center">비트</td>
<td>허브, 리피터(확산)</td>
</tr>
</tbody></table>
<hr>
<h3 id="프로토콜-포트-번호">프로토콜, 포트 번호</h3>
<table>
<thead>
<tr>
<th align="left">게층</th>
<th>계층 이름</th>
<th align="center">프로토콜</th>
</tr>
</thead>
<tbody><tr>
<td align="left">7</td>
<td>애플리케이션</td>
<td align="center">HTTP(80), HTTPS(443), FTP(ftp:21/ftp-data:20)</td>
</tr>
<tr>
<td align="left">6</td>
<td>표현</td>
<td align="center">SSL/TSL (HTTPS와 결합할 경우 443)</td>
</tr>
<tr>
<td align="left">5</td>
<td>세션</td>
<td align="center">SMPP(SMS)(2775)</td>
</tr>
<tr>
<td align="left">4</td>
<td>전송</td>
<td align="center">TCP</td>
</tr>
<tr>
<td align="left"></td>
<td></td>
<td align="center">UDP</td>
</tr>
<tr>
<td align="left">3</td>
<td>네트워크</td>
<td align="center">IP, ICMP(오류보고, 진단)</td>
</tr>
<tr>
<td align="left">2</td>
<td>데이터 링크</td>
<td align="center">이더넷</td>
</tr>
<tr>
<td align="left">1</td>
<td>물리</td>
<td align="center">전기, 광 신호 사용, 프로토콜 대신 표준(IEEE) 사용</td>
</tr>
</tbody></table>
<ul>
<li>FTP(ftp:21/ftp-data:20) 
ftp : 명령과 제어 신호 주고 받기
ftp-data : 실제 파일 전송이 이루어지는 연결</li>
</ul>
<hr>
<h2 id="최상위-도메인">최상위 도메인</h2>
<blockquote>
<p>com, net, edu, kr, int, org, gov, mil, jp</p>
</blockquote>
<hr>
<h2 id="환경-변수-1">환경 변수</h2>
<ul>
<li>시스템 쉘의 동작 방식을 정의</li>
</ul>
<h3 id="주요-환경-변수">주요 환경 변수</h3>
<blockquote>
<p>PS1 : 기본 프롬프트 정의
PS2 : 2차 프롬프트 정의 (&gt;)
DISPLAY : X 윈도에서 GUI 프로그램 실행시 어느 디스플레이에서 설정할 지 지정</p>
</blockquote>
<hr>
<h2 id="gui-툴킷">GUI 툴킷</h2>
<h2 id="qt">QT</h2>
<ul>
<li>C++로 개발된 크로스 플랫폼 GUI</li>
<li>애플리케이션과 데스크톱 환경 개발시 사용된다</li>
<li>KDE 데스크톱 환경은 QT 기반</li>
</ul>
<h2 id="gtk">GTK</h2>
<ul>
<li>C로 개발된 GUI 툴킷</li>
<li>GNOME 데스크톱 환경과 여러 리눅스 애플리케이션을 개발하는 데 사용된다</li>
<li>GIMP 라는 그래픽 편집 프로그램을 위해 개발되었지만 현재 다양한 데스크톱 환경 애플리케이션에서 사용</li>
</ul>
<hr>
<h2 id="x-윈도우-시스템">X 윈도우 시스템</h2>
<ul>
<li>그래픽 시스템의 기본 레이어로 화면에 그래픽을 표시하는 역할을 한다</li>
<li>네트워크 프로토콜 기반의 클라이언트-서버 시스템이다</li>
<li>X 컨소시엄에 의해 X11 버전이 처음으로 개정되어 X11R2가 발표되었다</li>
</ul>
<h3 id="디스플레이-매니저">디스플레이 매니저</h3>
<ul>
<li>주로 로그인 화면 제공</li>
<li>사용자가 인증된 후 데스크탑 세션을 시작하도록 도와준다</li>
<li>X 서버 실행, 관리</li>
</ul>
<h4 id="종류-1">종류</h4>
<blockquote>
<p>XDM : 가장 기본적인 디스플레이 매니저, X 윈도우 초기 버전이며 밑 두개와 다르게 특정 데스크탑 환경에 종속되지 않고 매우 가벼움 
KDM : KDE(플라즈마) 데스크탑 환경에서 사용하는 디스프레이 매니저
GDM : GNOME 데스크탑 환경을 위한 디스플레이 매니저</p>
</blockquote>
<h3 id="윈도우-매니저">윈도우 매니저</h3>
<ul>
<li>X-윈도우 상에서 윈도우의 배치와 표현을 담당하는 시스템 프로그램</li>
</ul>
<h3 id="명령어-1">명령어</h3>
<pre><code>시스템 시작시 X 윈도우 모드로 부팅 
systemctl set-default graphical.target

X서버에 접근할 수 있는 클라이언트를 IP 주소 기반으로 제어
xhost


</code></pre><h3 id="xorg">X.org</h3>
<ul>
<li>X 윈도우 시스템을 개발하고 관리하는 오픈 소스 커뮤니티</li>
<li>사용하는 라이센스 : MIT </li>
</ul>
<hr>
<h2 id="데스크톱-환경">데스크톱 환경</h2>
<ul>
<li><p>사용자가 시스템과 상호작용하는 GUI 제공</p>
</li>
<li><p>GNOME : 단순함과 직관적 인터페이스, GNU에서 만든 공개형 데스크톱 환경</p>
</li>
<li><p>Xfce : 경량화를 중점으로 설계되어 저사양 컴퓨터에서도 잘 돌아감</p>
</li>
<li><p>KDE : 커스터마이징 가능한 현대적인 UI와 깔끔한 디자인</p>
</li>
<li><p>Pantheon : Elementary OS에서 개발한 데스크톱 환경으로 미니멀리즘함</p>
</li>
</ul>
<hr>
<h2 id="gnome-데스크탑-주요-응용-프로그램">GNOME 데스크탑 주요 응용 프로그램</h2>
<blockquote>
<p>totem : 사운드 및 동영상 플레이어
evolution : 메일, 주소록, 일정 등 개인정보 관리
evince : pdf 뷰어
ego : 그래픽 뷰어 (Eye of GNOME Image Viewer)
GIMP : 그래픽 편집</p>
</blockquote>
<hr>
<h2 id="파일">파일</h2>
<blockquote>
<p>/etc/hosts : ip 주소와 도메인 주소 1:1 매칭
/etc/resolv.conf : DNS(네임서버) 설정 관리
/etc/shells : 사용 가능한 쉘 목록
/etc/passwd : 리눅스 계정 정보
/etc/profile : 시스템 전체(모든 사용자) 에게 적용되는 환경 변수와 시작 관련 프로그램 설정
/etc/bashrc : alias(별칭), bash 관련 설정 값
/etc/sysconfig/network : 네트워크 설정 관리 (레드햇 계열)
/etc/sysconfig/network-scripts : 네트워크 인터페이스 환경설정과 관련된 파일
/etc/services : FTP 프로토콜이 사용하는 포트 번호 확인
/etc/inittab : 리눅스 부팅 시 X윈도우 실행하기 위해 부팅모드 설정하는 파일</p>
</blockquote>
<blockquote>
<p>~/.bashrc : 개인 사용자가 정의한 alias 함수 설정
/lost+found : fcsk 명령 수행 시 손상된 디렉터리나 파일 수정을 위한 임시 디렉터리 
/sbin/nologin : 시스템 계정에 설정되는 쉘
$HOME/.Xauthority: X 윈도 실행시 생성되는 키 값이 저장되는 곳</p>
</blockquote>
<h2 id="자주-물어보는-파일-필드-내용">자주 물어보는 파일 필드 내용</h2>
<ul>
<li>&#39;:&#39; 로 각 필드 구분</li>
</ul>
<blockquote>
<p>/etc/passwd : 7번째 필드 사용자 로그인 쉘</p>
</blockquote>
<hr>
<h2 id="권한">권한</h2>
<blockquote>
<p>&lt;권한 보는 방법&gt;
파일 종류 : 특수 권한(rwx) : 소유자(rwx) : 그룹(rwx) : 기타(rwx)</p>
</blockquote>
<h3 id="기본-권한-지식">기본 권한 지식</h3>
<ul>
<li><p>읽기(r,4), 쓰기(w,2), 실행(x,1)</p>
</li>
<li><p>user(u), group user(g), other(o) 존재</p>
</li>
<li><p>기호 : +(추가), -(제거), =(권한 설정)</p>
</li>
<li><p>= (권한 설정) 에 대한 추가 정보</p>
<pre><code>chmod o=r hee.txt
이 경우 other에 r권한을 제외한 모든 권한은 사라지고 other의 r권한만 남게 된다 </code></pre></li>
</ul>
<hr>
<h3 id="디렉터리에-대한-rwx-권한">&quot;디렉터리&quot;에 대한 rwx 권한</h3>
<ul>
<li><p>읽기(r) : 디렉터리 안에 어떤 파일과 하위 디렉터리가 있는지 목록을 볼 수 있다</p>
</li>
<li><blockquote>
<p>ls 명령어로 디렉터리 파일 목록 확인가능하나 내용이나 세부 내용을 확인하기 위해서는 실행(x) 권한이 추가로 필요하다</p>
</blockquote>
</li>
<li><p>쓰기(w) : 디렉터리 내에서 파일이나 디렉터리를 생성, 삭제, 이름변경을 할 수 있는 권한</p>
</li>
<li><blockquote>
<p>디렉터리 내용을 수정할 수 있다</p>
</blockquote>
</li>
<li><blockquote>
<p>파일을 수정하려면 파일 자체에 대한 쓰기 권한도 필요 </p>
</blockquote>
</li>
<li><blockquote>
<p>파일 삭제시 디렉터리의 쓰기 권한이 있다면 삭제 가능</p>
</blockquote>
</li>
<li><p>x(실행) : 해당 디렉터리에 접근할 수 있는 권한</p>
</li>
<li><blockquote>
<p>실행권한이 있어야 디렉터리 내부로 접근할 수 있다 (cd)</p>
</blockquote>
</li>
</ul>
<hr>
<h3 id="특수-권한">특수 권한</h3>
<ul>
<li>Set-UID(4), Set-GID(2), Stickybit(1)</li>
<li>특수권한은 보안에 취약함</li>
</ul>
<h4 id="set-uid">SET-UID</h4>
<ul>
<li>주로 파일에 설정</li>
<li>소유자의 권한으로 파일 실행 가능</li>
<li>파일을 실행하는 순간만</li>
<li>설정 시 소유자 권한 x -&gt; s</li>
</ul>
<h4 id="set-gid">SET-GID</h4>
<ul>
<li>파일 및 디렉토리에 설정</li>
<li>파일 설정 : 파일이 속한 그룹의 권한으로 실행 가능</li>
<li>디렉터리 설정 : 디렉터리에서 설정된 모든 파일이나 디렉터리는 그 그룹 소유권 </li>
<li>설정 시 그룹 권한 x -&gt; s</li>
</ul>
<h4 id="sticky-bit">Sticky Bit</h4>
<ul>
<li>주로 디렉터리에 설정되며 파일에 설정하는 경우는 흔치 않음</li>
<li>디렉터리 내 파일을 생성한 사용자만 파일 삭제 가능</li>
</ul>
<hr>
<h3 id="권한-명령어">권한 명령어</h3>
<ul>
<li><p>ls -l : 권한 확인 명령어 </p>
</li>
<li><p>chown(change owner) : 파일이나 디렉터리의 소유자를 변경</p>
</li>
<li><p>chgrp (change Group) : 파일이나 디렉터리의 그룹 소유권을 변경</p>
</li>
<li><p>chmod (change mode) : 파일이나 디렉터리의 권한을 변경</p>
</li>
</ul>
<h4 id="옵션">옵션</h4>
<blockquote>
<p>-R : 모든 그룹 설정
-h : 옵션 없이 심볼릭 링크 파일 자체의 그룹 변경, 심볼릭 링크 대상 파일으 그룹 권한은 변경되지 않는다 
-t : Stikybit 설정
t는 o에만 사용 가능 g랑 같이 쓸 수 없다!!!</p>
</blockquote>
<hr>
<h3 id="umask">Umask</h3>
<ul>
<li>목적 : 디렉터리, 파일 생성시 기본 권한을 제한하기 위해 사용한다</li>
<li>기본 값 : 0022</li>
</ul>
<h4 id="기본-권한">기본 권한</h4>
<ul>
<li>파일 : 0666</li>
<li>디렉토리 : 0777</li>
</ul>
<h4 id="제한-하는-방법">제한 하는 방법</h4>
<ol>
<li>Umask 값은 0022</li>
<li>기본 디렉토리 권한이 0777으로 생성 되었다</li>
<li>0777 - 0022 = 0755</li>
<li>0755의 권한으로 바뀌게 된다 </li>
</ol>
<hr>
<h2 id="프로세스">프로세스</h2>
<h3 id="종류-2">종류</h3>
<blockquote>
<p>init : 가장 기본적인 프로세스로 시스템 부팅시 가장 먼저 실행된다 (현재는 systemd)
inetd : 네트워크 서비스 관리 데몬으로 필요할 때 만 서비스 시작
xinted : 위 버전의 확장판
standalone : 항상 메모리에 상주하며 백그라운드에서 지속적으로 실행된다 </p>
</blockquote>
<hr>
<h3 id="nice-renice">nice, renice</h3>
<ul>
<li>프로세스의 우선순위를 지정해주는 명령어 </li>
<li>NI 값 : -20에서 19 까지의 우선순위 값 (숫자가 작을수록 우선순위가 높다)</li>
<li>기본 우선순위 : 10</li>
</ul>
<h4 id="nice">nice</h4>
<ul>
<li>&quot;새로운 프로세스&quot;에만 적용가능</li>
<li>프로세스 &quot;이름&quot; 으로만 실행 가능</li>
<li>nice 에서 음수값으로 바꾸면 무조건 -- 로 설정해야함</li>
</ul>
<pre><code>nice [옵션] -[NI] [프로세스]
nice [프로세스]</code></pre><h4 id="renice">renice</h4>
<ul>
<li>&quot;이미 실행중인 프로세스&quot;에 사용 가능</li>
<li>프로세스 이름, PID로 실행 가능</li>
</ul>
<pre><code>renice [NI] [옵션] [프로세스(PID)]
</code></pre><ul>
<li>옵션<blockquote>
<p>-p : PID 지정 시 사용</p>
</blockquote>
</li>
<li>u : 사용자 이름 지정 시 사용 </li>
<li>g : 프로세스 그룸 ID로 사용 </li>
</ul>
<hr>
<h3 id="kill">kill</h3>
<pre><code>kill -[시그널] [프로세스 ID or 작업 번호]</code></pre><ul>
<li><p>예시 kill -9 511 : 511 프로세스를 강제로 종료</p>
<pre><code>kill -1 10 : 10 프로세스를 재시작</code></pre></li>
<li><p>시그널을 지정하지 않고 실행한다면 기본적으로 SIG TERM(15) 가 실행된다</p>
</li>
<li><blockquote>
<p>정상적으로 종료하라는 요청을 보냄</p>
</blockquote>
</li>
</ul>
<hr>
<h3 id="fg--bg">fg / bg</h3>
<ul>
<li>fg : bg에서 fg로 전환</li>
<li>bg : fg에서 bg로 전환</li>
<li>관련 기호는 &amp; </li>
</ul>
<h3 id="기타-명령어">기타 명령어</h3>
<blockquote>
<p>ps : 현재 실행중인 프로세스 상태 확인</p>
</blockquote>
<hr>
<h2 id="uuid">UUID</h2>
<ul>
<li><p>Universally Unique Identifier</p>
</li>
<li><p>정의 : 네트워크 상의 개체들을 식별할 때 충돌없이 사용할 수 있도로 설계 된 값</p>
</li>
<li><p>128 비트 길이의 값을 가짐
123e4567-e89b-12d3-a456-426614174000</p>
</li>
<li><p>사용되는 곳</p>
</li>
</ul>
<ol>
<li>파일 시스템 (파일, 디스크 파티션 고유 식별)</li>
<li>분산 시스템 (네트워크 상 여러 개체나 노드가 동일한 식별자를 가질 가능성을 피하기 위해서 사용)</li>
</ol>
<h3 id="명령어-2">명령어</h3>
<ul>
<li>blkid : uuid 를 보기 위함</li>
</ul>
<hr>
<h2 id="파일-시스템">파일 시스템</h2>
<h3 id="리눅스에서-사용될-수-있는-파일-시스템">리눅스에서 &quot;사용될 수 있는&quot; 파일 시스템</h3>
<blockquote>
<p>ext : 리눅스 전용 디스크 기반 파일 시스템
vfat : 리눅스에서 FAT 파일 시스템을 지원하기 위해 사용
ntfs : 윈도우 파일시스템이지만 드라이버를 통해 읽기/쓰기 가능</p>
</blockquote>
<h3 id="명령어--옵션">명령어 / 옵션</h3>
<blockquote>
<p>mke2fs : ext 계열 파일시스템을 생성하는 명령어 기본적으로 ext2 생성하나 옵션에 따라 ext3, 4를 생성 가능
-j : 저널링 기능 활성화 (ext3 파일시스템을 의미) 
-t : ext4 파일 시스템 생성시 붙여야 하는 옵션
mount : 파일 시스템 및 이동식 장치를 디렉터리의 특정 마운트 지점에 연결하는 명령어 
umount : 파일 시스템을 언마운트 하는데 사용</p>
</blockquote>
<hr>
<h2 id="시그널">시그널</h2>
<ul>
<li>프로세스 통신, 운영체제의 특정 이벤트 알림을 위해 사용</li>
</ul>
<h3 id="시그널-값">시그널 값</h3>
<table>
<thead>
<tr>
<th>시그널 이름</th>
<th>번호</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td><strong>SIG HUP</strong></td>
<td>1</td>
<td>터미널 연결 종료 시 발생. 데몬 재시작에 사용</td>
</tr>
<tr>
<td><strong>SIG INT</strong></td>
<td>2</td>
<td>인터럽트. <code>Ctrl + C</code>로 프로세스 중단</td>
</tr>
<tr>
<td><strong>SIG QUIT</strong></td>
<td>3</td>
<td>종료 시그널. <code>Ctrl + \</code>로 종료</td>
</tr>
<tr>
<td><strong>SIG KILL</strong></td>
<td>9</td>
<td>강제 종료. 무시할 수 없음</td>
</tr>
<tr>
<td><strong>SIG SEGV</strong></td>
<td>11</td>
<td>잘못된 메모리 접근 시 발생</td>
</tr>
<tr>
<td><strong>SIG CHLD</strong></td>
<td>17</td>
<td>자식 프로세스 종료 시 부모에게 전송</td>
</tr>
<tr>
<td><strong>SIG STOP</strong></td>
<td>19</td>
<td>프로세스 일시 중지. 무시할 수 없음</td>
</tr>
<tr>
<td><strong>SIG TSTP</strong></td>
<td>20</td>
<td>터미널에서 <code>Ctrl + Z</code>로 일시 중지</td>
</tr>
</tbody></table>
<hr>
<h2 id="tar--압축">tar / 압축</h2>
<h3 id="tar-tape-archive">tar (Tape Archive)</h3>
<ul>
<li>파일과 디렉토리를 묶는 작업을 수행하는 명령어</li>
</ul>
<pre><code>tar [옵션] [아카이브 파일명] [대상 파일/디렉토리]</code></pre><blockquote>
<p>주요 옵션
-c : 파일 생성
-C : 특정 디렉토리로 압축 해제할 경로 지정 가능 
-x : 추출
-r: tar 아카이브의 마지막에 파일들 추가
-v : 작업 진행 상태 출력
-f : 파일 이름 지정
-z (giz) : 압축 / 해제 
-j (bizp2) : 압축 / 해제
-J (xz) : 압축 / 해제 </p>
</blockquote>
<ul>
<li>기존 파일에 파일 추가시 rvf</li>
</ul>
<blockquote>
<p>압축률
compress &lt; gzip &lt; bzip &lt; xz (가장 고압축 = 파일 크기 가장 작음)
압축 해제, 풀기
uncompress &lt; x’z’vf &lt; x’j’vf &lt; x’J’vf 
확장자
.Z &lt; .gz &lt; .bz2 &lt; .xz</p>
</blockquote>
<hr>
<h2 id="프린트">프린트</h2>
<p>BSD 계열: lpr, lpq, lprm, lpc
System V 계열: lp , lpstat, cancel</p>
<h3 id="명령어-3">명령어</h3>
<blockquote>
<p>lp : 파일 인쇄
lpr : cups 이전 파일 인쇄 명령어
lpq : 인쇄 대기열의 상태를 보여줌 </p>
</blockquote>
<h3 id="자주-나오는-옵션">자주 나오는 옵션</h3>
<blockquote>
<p>-r : 삭제 </p>
</blockquote>
<hr>
<h2 id="네트워크">네트워크</h2>
<h3 id="비트-길이">비트 길이</h3>
<blockquote>
<p>IPv4 : 32bit
IPv6 : 128bit
MAC : 48bit</p>
</blockquote>
<hr>
<h2 id="네트워크-토폴로지">네트워크 토폴로지</h2>
<ul>
<li>네트워크를 구성하는 물리적, 논리적 연결 방식</li>
</ul>
<h3 id="스타">스타</h3>
<ul>
<li>모든 노드가 중앙 허브 또는 스위치에 직접 연결</li>
<li>장점 : 중앙장치가 네트워크 트래픽을 관리하므로 충돌이 적다</li>
<li>단점 : 중앙장치 고장시 전체 네트워크 중단된다</li>
</ul>
<h3 id="버스">버스</h3>
<ul>
<li>모든 노드가 단일 중앙 케이블(버스)에 &quot;직렬&quot;로 연결</li>
<li>장점 : 설치와 설정이 간단하고 비용이 저렴, 케이블 사용량이 적어 효율적이다</li>
<li>단점 : 네트워크 확장이 어렵고 트래픽이 많아지면 충돌이 발생할 가능성이 크다</li>
</ul>
<h3 id="링">링</h3>
<ul>
<li>노드들이 원형으로 연결되며 각 노드는 두개의 인접 노드와 연결된다</li>
<li>장점 : 하나에 회선에 연결되어 설치 비용 저렴</li>
<li>단점 : 한 노드에 장애가 발생 시 전체 네트워크 중단</li>
</ul>
<h3 id="망">망</h3>
<ul>
<li>각 노드가 다른 노드와 연결되어 있는 구조</li>
<li>장점 : 특정 노트에 장애가 발생해도 다른 경로로 전송 가능하다</li>
<li>단점 : 설치 관련 구성이 어렵고 비싸다 </li>
</ul>
<hr>
<h2 id="네트워크-명령어">네트워크 명령어</h2>
<blockquote>
<p>netstat : 네트워크 연결 상태를 보여주는 명령어 각 TCP 연결의 상태를 확인할 수 있다
ss : 네트워크 소켓 통계확인 </p>
</blockquote>
<h3 id="tcp-상태-값">TCP 상태 값</h3>
<blockquote>
<p>LISTEN: 서버가 클라이언트의 연결 요청을 대기 중인 상태 
(클라이언트와 연결이 아직 이루어지지 않은 상태
SYN_SENT: 클라이언트가 서버에게 연결 요청을 보낸 상태로, SYN 패킷을 전송한 상태
SYN_RECEIVED: 서버가 클라이언트의 SYN 패킷을 받고, SYN-ACK 패킷을 전송한 상태 (연결이 완전히 성립되기 전 단계)
ESTABLISHED: TCP 3-way 핸드셰이크가 완료되어 클라이언트와 서버가 연결된 상태로, 데이터 전송이 가능한 상태
FIN_WAIT: 클라이언트 또는 서버가 연결을 종료하기 위해 FIN 패킷을 보낸 상태
CLOSE_WAIT: 연결 종료를 요청받은 후, 종료 대기 상태
TIME_WAIT: 연결이 종료된 후, 일정 시간이 지나기까지 대기하는 상태</p>
</blockquote>
<h3 id="mii-tool">mii-tool</h3>
<ul>
<li>이더넷 카드에 연결된 케이블의 상태 확인 가능</li>
</ul>
<h3 id="ssh-프로토콜-관련-명령어">SSH 프로토콜 관련 명령어</h3>
<blockquote>
<p>scp : 파일 복사
sftp : 파일 전송
slogin : 로그인
ip route / route : 라우팅 테이블 정보 출력</p>
</blockquote>
<hr>
<h2 id="리눅스-파일-공유-서비스">리눅스 파일 공유 서비스</h2>
<blockquote>
<p>NFS (Network File System): 리눅스-유닉스 시스템 간 파일 공유에 사용
SAMBA: 리눅스-Windows 파일 공유</p>
</blockquote>
<hr>
<h2 id="리눅스-가상화-기술">리눅스 가상화 기술</h2>
<ul>
<li>실제 물리적 하드웨어를 소프트웨어적으로 분리하여 여러 가상 환경을 제공하는 기술</li>
</ul>
<h3 id="종류-3">종류</h3>
<ul>
<li>하이퍼 바이저 기반 : 물리적인 하드웨어 위에서 가상 머신을 실행할 수 있게 해주는 소프트웨어 레이어 </li>
</ul>
<ul>
<li>컨테이너 기반 : 호스트 운영체제의 커널을 공유하면서 애플리케이션을 격리된 환경에서 실행하는 방식이므로 가상머신보다 더 가볍고 빠르다 </li>
</ul>
<table>
<thead>
<tr>
<th>가상화 기술</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>KVM</td>
<td>Qumranet에서 개발한 하이퍼바이저이다 CPU 전가상화 방식 사용</td>
</tr>
<tr>
<td>Docker</td>
<td>운영 체제 수준의 가상화, 컨테이너 단위로 애플리케이션 격리, 가상 머신보다 가벼움</td>
</tr>
<tr>
<td>LXC</td>
<td>컨테이너 기반 가상화, 전통적인 방식의 VM-like 환경 제공</td>
</tr>
<tr>
<td>Xen</td>
<td>전통적인 하이퍼바이저 방식으로 호스트와 다른 아키텍처의 게스트는 실행할 수 없다</td>
</tr>
<tr>
<td>QEMU</td>
<td>CPU 에뮬레이션과 가상화를 지원, KVM과 함께 고성능 VM 생성 가능</td>
</tr>
<tr>
<td>VirtualBox</td>
<td>인텔의 하드웨어 가상화 VT-x와 AMD의 AMD-V를 기반으로 전가상화를 지원</td>
</tr>
</tbody></table>
<hr>
<h2 id="fdisk">fdisk</h2>
<ul>
<li>디스크 파티션 도구</li>
<li>하드디스크, SSD 같은 저장 장치에 새로운 파티션을 만들거나 기존 파티션을 수정, 삭제 할 때 사용된다</li>
</ul>
<h3 id="주요-명령어-옵션">주요 명령어, 옵션</h3>
<blockquote>
<p>fdisk -l : 시스템에 연결된 모든 디스크의 파티션 정보 출력
-d : 파티션 삭제
-n : 새로운 파티션 추가
-w : 파티션 테이블 저장 후 종료
-t : 파티션 타입 변경 
-m : 도움말 출력</p>
</blockquote>
<h3 id="주요-파티션-코드-값">주요 파티션 코드 값</h3>
<ul>
<li>t 옵션으로 변경 가능</li>
</ul>
<blockquote>
<p>Linux 파일 시스템 : 83
Linux 스왑 : 82
Linux LVM : 8e
NTFS (Windows) : 7
RAID : fd</p>
</blockquote>
<hr>
<h2 id="디스크-쿼터">디스크 쿼터</h2>
<ul>
<li>사용자 디스크 할당량을 설정</li>
<li>시스템 관리자, 서버 관리자가 특정 사용자가 사용할 수 있는 디스크 공간의 양을 제한할 때 사용하는 기능</li>
<li>주로 다중 사용자 시스템에서 서버 자원의 남용을 방지하는데 사용한다</li>
</ul>
<h3 id="주요-명령어">주요 명령어</h3>
<blockquote>
<p>quota : 현재 사용자 디스크 사용량과 할당된 디스크 공간 확인
quotaon : 디스크 쿼터 활성화
edquota : 사용자의 쿼터를 설정하는 명령어 (vi 편집기 사용) 
setquota : 사용자의 쿼터를 설정하는 명령어 (명령어를 통해 직접 설정)</p>
</blockquote>
<hr>
<h2 id="표준화기구">표준화기구</h2>
<blockquote>
<p>ISO : OSI 7계층
EIA : 이더넷 케이블의 배열 순서인 T568B를 표준화
IEEE = LAN 관련</p>
</blockquote>
<hr>
<h2 id="사운드">사운드</h2>
<h3 id="oss-open-sound-system">OSS (Open Sound System)</h3>
<ul>
<li>리눅스 운영체제에서 사운드를 만들고 캡쳐하기 위한 인터페이스</li>
<li>표준 유닉스 시스템콜 사용</li>
<li>Hannu Savloaonen에 의해 만들었다</li>
<li>현재 4종류의 라이센스 옵션 기반으로 배포된다</li>
</ul>
<h3 id="alsa-advanced-linux-sound-architecture">ALSA (Advanced Linux Sound Architecture)</h3>
<ul>
<li>OSS의 한계를 보완하기 위해 2002년부터 리눅스 커널에 포함되기 시작한 사운드 시스템</li>
<li>다중 사운드 스트림 지원</li>
</ul>
<hr>
<h2 id="디스크-용량-단위">디스크 용량 단위</h2>
<ul>
<li>GB＜TB＜PB＜EB</li>
</ul>
<blockquote>
<p>GB = Giga Byte(기가 바이트) = 1024 MB
TB = Tera Byte(테라 바이트) = 1024 GB = 1,048,576 MB
PB = Peta Byte(페타 바이트) = 1024 TB = 1,048,576 GB
EB = Exa Byte(엑사 바이트) = 1024 PB = 1,048,576 PB</p>
</blockquote>
<hr>
<h2 id="클러스터">클러스터</h2>
<ul>
<li>여러대의 컴퓨터를 연결하여 하나의 시스템처럼 동작하게 만드는 기술</li>
</ul>
<h3 id="고성능-계산용-클러스터-hpc">고성능, 계산용 클러스터 (HPC)</h3>
<ul>
<li>과학적 계산, 대규모 데이터 처리</li>
</ul>
<h3 id="고가용성-클러스터-ha">고가용성 클러스터 (HA)</h3>
<ul>
<li>서비스 중단 최소화 하기 위해 하나의 노드가 다운되면 다른 노드가 자동으로 서비스를 인계받는다 주로 중요한 웹 서비스나 데이터 베이스 서버에서 사용된다</li>
</ul>
<h3 id="부하-분산-클러스터">부하 분산 클러스터</h3>
<ul>
<li>여러 노드 간의 작업을 분산하여 시스템 성능을 최적화 하는 방법</li>
</ul>
<h3 id="스토리지-클러스터">스토리지 클러스터</h3>
<ul>
<li>대규모 데이터 저장을 지원하는 클러스터 </li>
</ul>
<h3 id="베어울프-클러스터">베어울프 클러스터</h3>
<ul>
<li>저가형 PC 여러대 연결하여 구성</li>
</ul>
<hr>
<h2 id="프로토콜">프로토콜</h2>
<h3 id="파일-공유">파일 공유</h3>
<ul>
<li>리눅스(유닉스)-윈도우 간의 파일 공유 </li>
</ul>
<blockquote>
<p>SMB -&gt; CIFS
FTP (SSL/TLS)
SFTP(SSH)</p>
</blockquote>
<h2 id="이것저것">이것저것</h2>
<blockquote>
<p>설치과정 중 make 과정 없는 것 : MySQL
리눅스 커널 기반 운영 체제 : webOS, Tizen, GENIVI
대량 자료 처리 자바 소프트웨어 프레임 워크 : Hadoop</p>
</blockquote>
<hr>
<h1 id="-짧은-후기">+ 짧은 후기</h1>
<p><img src="https://velog.velcdn.com/images/hee_08/post/2c6c1191-5bb3-44c6-b8f0-e64b022e7c7e/image.png" alt=""></p>
<ul>
<li>완전커트라인에 걸친 60점으로 합격하였다!</li>
<li>거의 암기 위주라 재수하고 싶지 않은 자격증이다.</li>
<li>공부 시간은 4일(벼락치기...) 평균 2-3시간 정도.</li>
<li>전공자라면 일주일 정도 잡으면 넉넉하게 합격할 듯 하다.</li>
<li>공부 방법 : 인터넷 족보 2번 스윽 읽기 -&gt; 4개년 기출 풀기.<ul>
<li>문제은행 (<a href="https://www.comcbt.com/xe/">https://www.comcbt.com/xe/</a>) 참고!</li>
</ul>
</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>