<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>hyun.log</title>
        <link>https://velog.io/</link>
        <description>하고 싶은거 하면서 삽시다.</description>
        <lastBuildDate>Mon, 28 Jul 2025 12:36:19 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>hyun.log</title>
            <url>https://velog.velcdn.com/images/hyun_731/profile/4fb4bb4b-302b-41a3-9b20-b1a520e1e161/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. hyun.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hyun_731" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[부산소마고 1학년 1학기 회고록]]></title>
            <link>https://velog.io/@hyun_731/1%ED%95%99%EB%85%84-1%ED%95%99%EA%B8%B0-%ED%9A%8C%EA%B3%A0%EB%A1%9D</link>
            <guid>https://velog.io/@hyun_731/1%ED%95%99%EB%85%84-1%ED%95%99%EA%B8%B0-%ED%9A%8C%EA%B3%A0%EB%A1%9D</guid>
            <pubDate>Mon, 28 Jul 2025 12:36:19 GMT</pubDate>
            <description><![CDATA[<h1 id="3월">3월</h1>
<p>선생님들 말로는 처음 기숙사 생활을 해서 조금 힘들거라고 하셨는데 나는 중학교 때 대회를 다니면서 여러 곳에서 자는게 익숙하다 보니, 힘들었다기 보단, 즐거웠다. 내가 원하는 공부를 배우고, 나와 같은 관심사의 친구들과 만날수 있다는게 너무 설레고 즐거웠다. </p>
<p>굳이 조금 힘들었던건 <strong>중학교때 보다 상벌점 관리가 어려운 것 같다고 느꼈다.</strong> 
물론 당연한 말(?)이겠지만, 우리 반만 그런건진 모르겠는데 상점을 생각보다 얻을 일이 없고, 기숙사에서 벌점 먹는게 제일 무서웠다.</p>
<p>학교 생활에서는 대학교 수업에서 미리 보았던 친구들과 스터디를 만들기도 했고, 알고리즘 동아리, 플로이테크 코스 등, <strong>1학년 때 기초를 확실히 잡자고 다짐</strong>하고 전부 지원하고 다 붙었다.</p>
<p>근데 친구들이 전부 같은 인문계 학교로 가서 조금 부러웠다. 
친구들이랑 멀어질까봐 인문계 갈껄 이라고 조금은 후회했지만, 난 내가 좋아하는 공부한다는거에 만족했다. (근데 오히려 이게 ㄹㅇ 좋았던거 였음 전부 같은 학교가니까 연락이 안끊기고 합류해서 놀아도 전부 아는 사이라서)</p>
<h1 id="4월">4월</h1>
<p>본격적으로 슬슬 적응기간이 끝나고 동아리 활동과 본격적인 수업이 시작됐다. 깃허브 사용법을 익히고 본격적인 알고리즘 수업이 들어갔는데, 조금 처음 듣는다면 어려운 정도의 난이도였다. 본격적으로 플로이 테크 코스와 알고리즘을 시작했는데, 플테코는 개인 멘토 선배가 있어서 걱정이 없었지만, 알고리즘 동아리는 조금 힘들었다. 그래도 나중을 생각하며 최대한 열심히 들을려고 노력했다. 그리고 어느새 시험기간이 다가왔다.</p>
<h1 id="5월">5월</h1>
<p>중간고사를 치고 내 나름대로 사회빼곤 만족스러운 점수가 나와서 좋았다. 이후 수학여행을 가서 놀고 체육대회도 했는데, 사실상 이거 두개 밖에 안한거 같은데 5월은 후딱 지났다.</p>
<h1 id="6월--7월">6월 ~ 7월</h1>
<p>정신없게 5월을 지내고 보니 기말고사가 다가왔다,, 공부를 하려고는 했지만 한달 동안 풀어졌던 탓인지 잘 되지 않았고 잘 친것도 있었지만 별로 만족스럽지 못한 결과를 만들어 냈다. 그래도 1학기 시험이 끝나서 조금 마음편히 휴식하는 기간을 가졌다. 시험 기간 동안 못했던 전공 공부도 했고 플테코 최종 발표 준비도 했다.
그리고 어쩌다 보니 선배님들과 방학전에 캠프를 했는데 거기서 교내 알고리즘 경진대회 1등을 해버렸다! 솔직히 하나도 기대를 안했어서 감흥이 없다 랄까? 어쨋든 대회에서 1등도 해보는 경험도 했다! 그리고 선배님들이랑 이틀동안 친분도 좀 쌓고 학교와서 가장 재밌었던 경험이었던것 같다!</p>
<p>누군가가 볼때는 열심히 한 1학기일 것이고 또 다른 누군가가 보기에는 잘 보내지 못한 1학기라고 볼 수도 있다. 나는 후자라고 생각한다. 학교 시험 공부라는 핑계로 자격증 공부, 추가적인 전공 공부를 조금 많이 게을리 했던 것 같다. 하지만 지나간 일에는 후회하지 않으려고 한다. 이후에 똑같은 실수를 반복하지 않기위해 노력하면 된다. 여름방학에는 정신차리고 다시 공부에 임해서 2학기때 성장한 내가 되어있으면 좋겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[알고리즘] BFS,DFS]]></title>
            <link>https://velog.io/@hyun_731/BFS-DFS</link>
            <guid>https://velog.io/@hyun_731/BFS-DFS</guid>
            <pubDate>Thu, 15 May 2025 11:21:55 GMT</pubDate>
            <description><![CDATA[<p><strong><span style="color:red;">BFS(Breadth-First Search)</span></strong>, <strong><span style="color:blue;">DFS(Depth-First Search) </span></strong> 
그래프를 탐색하는 알고리즘이며 순서대로 영어 뜻 그대로 <strong><span style="color:red;">너비 우선 탐색</span></strong>, <strong><span style="color:blue;">깊이 우선 탐색</span></strong>이다.</p>
<h1 id="dfs깊이-우선-탐색">DFS(깊이 우선 탐색)</h1>
<p>DFS는 깊이 우선 탐색 알고리즘으로, 스택이나 재귀 호출을 이용하여 구현할 수 있다.
<strong>한 방향으로 최대한 깊게 탐색</strong>한 뒤, 더 이상 갈 곳이 없으면 다시 돌아와 다른 경로를 탐색한다.
<img src="https://velog.velcdn.com/images/hyun_731/post/c6d6aa69-7990-4c07-908f-d348da1b72ca/image.jpg" alt="">
*<em>사용예시 : 퍼즐, 백트래킹, 조합 탐색
*</em></p>
<h1 id="bfs너비-우선-탐색">BFS(너비 우선 탐색)</h1>
<p>BFS는 너비 우선 탐색 알고리즘으로, 큐를 이용하여 구현할 수 있다.
 <strong>현재 정점에서 가까운 노드부터 넓게 탐색</strong>한다.
<img src="https://velog.velcdn.com/images/hyun_731/post/726e94a6-6ee2-49c7-b0e3-251fa4507350/image.jpg" alt="">
*<em>사용예시 : 최단 거리, 경로 탐색
*</em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[자료구조] 그래프(Graph)]]></title>
            <link>https://velog.io/@hyun_731/%EA%B7%B8%EB%9E%98%ED%94%84</link>
            <guid>https://velog.io/@hyun_731/%EA%B7%B8%EB%9E%98%ED%94%84</guid>
            <pubDate>Thu, 15 May 2025 10:57:27 GMT</pubDate>
            <description><![CDATA[<h1 id="그래프의-정의">그래프의 정의</h1>
<p>그래프는 <strong><span style="color: red">정점(Vertex)</span></strong>와 <strong><span style="color: blue">간선(Edge)</span></strong>로 이루어진 자료구조이다.
그래프는 대표적인 <strong>비선형 자료구조</strong>이다.</p>
<blockquote>
<h2 id="비선형-자료구조란">비선형 자료구조란?</h2>
<p>비선형 자료구조는 데이터 원소 간의 관계가 순차적이 아닌
<strong>계층적</strong> 이거나 <strong>복잡한 연결 관계</strong>를 가지는 자료구조이다.</p>
</blockquote>
<h3 id="특징">특징</h3>
<p>요소들이 <strong>일렬로 정렬되어있지 않다.</strong>
<strong>한 요소가 여러 요소와 연결</strong> 될 수 있다.
<strong>복잡한 관계를 표현</strong>하기 좋다.</p>
<h3 id="대표적인-비선형-자료구조">대표적인 비선형 자료구조</h3>
<p><strong><p style="font-size:20px;">트리,그래프</p></strong></p>
<h1 id="그래프의-요소">그래프의 요소</h1>
<p><strong>Vertex (정점)</strong> : 데이터를 담는 단위
<strong>Edge (간선)</strong> : 정점 간의 연결
<strong>Weight (가중치)</strong> : 간선에 부여된 값
<strong>Direction (방향성)</strong> :간선에 방향이 있는 경우(유향 그래프), 없는 경우(무향 그래프)
<strong>Degree (차수)</strong> : 한 정점에 연결된 간선의 개수
<strong>Adjacency (인접)</strong> : 두 정점이 간선으로 연결되어 있는 관계
<strong>Path (경로)</strong> : 한 정점에서 다른 정점으로 가는 간선의 연속
<strong>Cycle (사이클)</strong> : 시작 정점으로 되돌아오는 경로
<strong>Connected Graph</strong> : 모든 정점이 연결되어 있는 그래프</p>
<h1 id="그래프-구현">그래프 구현</h1>
<h3 id="인접-리스트">인접 리스트</h3>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/bf7e84e7-270e-45b3-a465-ddb6cd5088be/image.jpg" alt=""></p>
<h3 id="인접-행렬">인접 행렬</h3>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/18df9573-071e-40d7-b821-0d1edca17b0d/image.jpg" alt=""></p>
<h1 id="그래프의-종류">그래프의 종류</h1>
<h3 id="무방향-그래프">무방향 그래프</h3>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/a3228116-cf72-4895-a4b3-b85329ad837e/image.jpg" alt="">
*<em>특징 : 간선에 방향이 없음, A-B, B-A
*</em></p>
<h3 id="방향-그래프">방향 그래프</h3>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/6aee4779-6aad-48e1-b98a-4871c3f18b2b/image.jpg" alt="">
*<em>특징 : 간선에 방향이 있음, A-&gt;B랑 B&lt;-A는 다름
*</em></p>
<h3 id="연결-그래프">연결 그래프</h3>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/91d28abb-1245-428a-ae60-2c2e67ab5d90/image.jpg" alt="">
*<em>특징 : 모든 정점이 경로를 통해 연결되어 있음
*</em></p>
<h3 id="비연결-그래프">비연결 그래프</h3>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/e27df57a-f566-4f51-b59d-5be9b77a0cd3/image.jpg" alt="">
<strong>특징 : 일부 정점들이 서로 연결되어 있지 않음</strong></p>
<h3 id="가중치-그래프">가중치 그래프</h3>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/aae42a70-70d7-4fc1-8d69-69921229016d/image.jpg" alt="">
<strong>특징 : 간선에 비용, 거리 등의 값(가중치)이 있음</strong></p>
<h3 id="순환-그래프">순환 그래프</h3>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/de5ab69b-0380-42b4-8149-53d3070051e8/image.jpg" alt="">
<strong>특징 : 정점을 따라 이동했을 때 다시 처음 위치로 돌아오는 경로가 존재함</strong></p>
<h3 id="비순환-그래프">비순환 그래프</h3>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/b7fbd76f-20a3-45c9-8512-8dc2f7aa89e4/image.jpg" alt="">
<strong>특징 : 순환이 없음</strong></p>
<h3 id="완전-그래프">완전 그래프</h3>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/bc499790-395d-4077-afe3-dc5a6449977d/image.jpg" alt="">
<strong>특징 : 모든 정점이 서로 연결됨</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Flip-Flop(플립플롭)]]></title>
            <link>https://velog.io/@hyun_731/Flip-Flop%ED%94%8C%EB%A6%BD%ED%94%8C%EB%A1%AD</link>
            <guid>https://velog.io/@hyun_731/Flip-Flop%ED%94%8C%EB%A6%BD%ED%94%8C%EB%A1%AD</guid>
            <pubDate>Tue, 06 May 2025 05:59:40 GMT</pubDate>
            <description><![CDATA[<h1 id="flip-flop이란">Flip-Flop이란?</h1>
<p>디지털 회로에서 1비트 정보를 저장하고 유지할 수 있는 회로
<strong>순차회로</strong>의 기본</p>
<p>용도 : 레지스터, 카운터, 메모리 등 데이터 저장 및 제어에 사용</p>
<h2 id="순차회로란">순차회로란?</h2>
<p>입력뿐만 아니라 현재 상태(과거 정보) 에 따라서 출력이 결정되는 회로
<strong>Flip-Flop(플립플롭)</strong>을 사용하여 상태를 저장한다.</p>
<h1 id="flip-flop의-종류">Flip-Flop의 종류</h1>
<p>아래 회로들을 보기에 앞서</p>
<p><strong>Q : 현재 출력 상태(현재 플립플롭이 0인지 1인지)
Q(t+1) : 다음 출력 상태(현재 Q에 입력이나 조건이 적용된 다음 값)
Q̅ : Q의 반대값(보수)</strong></p>
<h2 id="sr-플립플롭sr-flip-flop">SR 플립플롭(SR Flip-Flop)</h2>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/3a9bad7a-234b-4e64-9b45-3efa9e434825/image.png" alt="">
•    가장 기본적인 플립플롭이다.
•    S(Set) 입력으로 출력 1, R(Reset) 입력으로 출력 0을 만든다.
•    S=R=1일 때 불능 상태</p>
<h2 id="d-플립플롭d-flip-flop">D 플립플롭(D Flip-Flop)</h2>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/a88538c5-8cab-46b8-b451-841af4294e6b/image.png" alt="">
•    입력 D를 클럭 신호에 따라 그대로 저장하는 회로이다.
•    SR 플립플롭의 S, R 입력을 D 하나로 통합하여 S=D, R=D’로 구성한다.
•    입력이 하나라 S=R=1과 같은 불능 상태가 발생하지 않는다.</p>
<h2 id="jk-플립플롭jk-flip-flop">JK 플립플롭(JK Flip-Flop)</h2>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/c24936ad-2264-4f9c-be8a-61c15f7785f7/image.png" alt="">
•    RS 플립플롭에서 S=1, R=1인 경우 불능 상태가 되는 것을 해결한 논리회로이다.
•    J는 S(Set)에, K는 R(Reset)에 대응하는 입력이다.
•    J와 K가 동시에 1이면 플립플롭의 출력은 이전 출력의 보수 상태로 변화하게 된다.</p>
<h2 id="t-플립플롭t-flip-flop">T 플립플롭(T Flip-Flop)</h2>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/dcfc05fb-bd49-4bcc-9414-7ca58915ab8a/image.png" alt="">
•    JK 플립플롭의 J와 K에 동일한 값을 입력하여 만든 회로이다.
•    입력이 1이면 출력이 토글(반전)되고, 입력이 0이면 출력이 유지된다.</p>
<blockquote>
<p>참고한 글
<a href="https://devraphy.tistory.com/297">https://devraphy.tistory.com/297</a>
<a href="https://homubee.tistory.com/47">https://homubee.tistory.com/47</a></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[자료구조] 원형 큐, 덱]]></title>
            <link>https://velog.io/@hyun_731/%EC%9E%90%EB%A3%8C-%EA%B5%AC%EC%A1%B0-%EC%9B%90%ED%98%95-%ED%81%90-%EB%8D%B1</link>
            <guid>https://velog.io/@hyun_731/%EC%9E%90%EB%A3%8C-%EA%B5%AC%EC%A1%B0-%EC%9B%90%ED%98%95-%ED%81%90-%EB%8D%B1</guid>
            <pubDate>Fri, 04 Apr 2025 16:14:56 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/hyun_731/post/87f10172-b70f-4e4a-adab-52223751e5f3/image.png" alt=""></p>
<h1 id="원형-큐-circular-queue">원형 큐 (Circular Queue)</h1>
<p><strong>원형 큐는 선입선출(FIFO) 방식은 그대로 유지</strong>하되, <strong>선형 큐의 공간 낭비 문제를 해결하기 위해 고안된 큐</strong>이다.
말 그대로 큐의 끝과 시작이 이어져 원형처럼 동작하는 구조</p>
<p>파이썬으로 구현한 코드는 아래와 같다 </p>
<pre><code>class CircularQueue:
    arr : list
    f : int
    r : int
    size : int
    def __init__(self,size):
        self.arr = [0]*size
        self.f = 0
        self.r = 0
        self.size = size
    def isFull(self):
        if (self.r + 1) % self.size == self.f: return True
        return False
    def isEmpty(self):
        return self.f == self.r
    def dequeue(self):
        if self.isEmpty():
            return &quot;아무것도 없습니다.&quot;
        self.f = (self.f + 1) % self.size
        p = self.arr[self.f]
        self.arr[self.f] = None
        return p
    def enqueue(self, a):
        if not self.isFull():
            self.r = (self.r + 1) % self.size
            self.arr[self.r] = a
        else:
            print(&quot;자리가 없습니다.&quot;)</code></pre><p>메서드 종류</p>
<ul>
<li>enqueue: 값을 집어넣는 메서드</li>
<li>dequeue: 값을 빼내는 메서드</li>
<li>isFull: 꽉 찼는지 확인하는 메서드</li>
<li>isEmpty: 비었는지 확인하는 메서드</li>
</ul>
<p>특징</p>
<ul>
<li>선형 큐의 공간 낭비 문제 해결</li>
<li>다만, 식이 조금 복잡해짐<h1 id="덱-deque">덱 (Deque)</h1>
덱(Deque, Double-Ended Queue)은 <strong>양쪽 끝에서 삽입과 삭제가 모두 가능한 자료구조</strong>이다.</li>
</ul>
<p><strong>스택과 큐의 장점을 모두 가지고 있어</strong> 유연하게 사용 가능합니다.</p>
<p>특징</p>
<ul>
<li>앞(front)에서도 삽입/삭제 가능</li>
<li>뒤(rear)에서도 삽입/삭제 가능</li>
<li>원형 큐에서 조금만 수정하면 구현 가능</li>
</ul>
<p>파이썬으로 구현한 코드는 아래와 같다 </p>
<pre><code>class Deque:
    arr : list
    f : int
    r : int
    size : int
    def __init__(self,size):
        self.arr = [0]*size
        self.f = 0
        self.r = 0
        self.size = size
    def isFull(self):
        if (self.r + 1) % self.size == self.f: return True
        return False
    def isEmpty(self):
        return self.f == self.r
    def delete_front(self): #s
        if self.isEmpty():
            return &quot;아무것도 없습니다.&quot;
        p = self.arr[self.f]
        self.arr[self.f] = None
        self.f = (self.f + 1) % self.size
        return p
    def delete_rear(self):
        if self.isEmpty():
            return &quot;아무것도 없습니다.&quot;
        self.r = (self.r - 1 + self.size) % self.size
        p = self.arr[self.r]
        self.arr[self.r] = None
        return p
    def add_rear(self, a): #s
        if not self.isFull():
            self.arr[self.r] = a
            self.r = (self.r + 1) % self.size
        else:
            print(&quot;자리가 없습니다.&quot;)
    def add_front(self, a):
        if not self.isFull():
            self.f = (self.f - 1 + self.size) % self.size
            self.arr[self.f] = a
        else:
            print(&quot;자리가 없습니다.&quot;)</code></pre><p>메서드 종류</p>
<ul>
<li>add_front(a) : 앞에서 a을 삽입</li>
<li>add_rear(a) : 뒤에서 a을 삽입</li>
<li>delete_front() : 앞에서 값을 삭제하고 반환</li>
<li>delete_rear() : 뒤에서 값을 삭제하고 반환</li>
<li>isFull() : 꽉 찼는지 확인</li>
<li>isEmpty() : 비어있는지 확인</li>
</ul>
<p>예시</p>
<ul>
<li>웹 브라우저의 앞으로 가기/뒤로 가기</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[개발자 환경 구축] 기본 개발 환경 구축]]></title>
            <link>https://velog.io/@hyun_731/%EA%B0%9C%EB%B0%9C%EC%9E%90-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95-%EA%B0%80%EC%83%81-%ED%99%98%EA%B2%BD</link>
            <guid>https://velog.io/@hyun_731/%EA%B0%9C%EB%B0%9C%EC%9E%90-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95-%EA%B0%80%EC%83%81-%ED%99%98%EA%B2%BD</guid>
            <pubDate>Thu, 03 Apr 2025 10:33:35 GMT</pubDate>
            <description><![CDATA[<h1 id="운영체제-설치">운영체제 설치</h1>
<h3 id="개발환경">개발환경</h3>
<p>운영체제에 따라 웹 서버, 데이터베이스, 프로그래밍
언어가 상이할 수 있다.</p>
<p>운영체제별 개발환경 구축 비교
<img src="https://velog.velcdn.com/images/hyun_731/post/94b6d8ec-57c9-47ff-812e-fdbfc99b718c/image.png" alt=""></p>
<h3 id="운영체제-설치하기">운영체제 설치하기</h3>
<p>*<em>운영체제 설치시 고려해야 하는 부분
*</em>- 상용 운영체제인 경우 라이선스 및 수량 확인</p>
<ul>
<li>개발통합환경(IDE)과의 호환성</li>
<li>운영체제 EOS(End of Service) 여부</li>
<li>운영체제 설치 후 취약점 점검 항목에 따른 조치</li>
<li>운영체제 최신 패치 여부 확인<h4 id="가상환경-구축">가상환경 구축</h4>
가상환경을 사용하기 위해 VMware를 설치한다.
VMware를 설치하는 도중 아래와 같은 화면이 나타날 것이다.
<img src="https://velog.velcdn.com/images/hyun_731/post/2189734a-d60e-4cf3-9540-f2b160efd792/image.png" alt=""><h4 id="more-seamless더-매끄럽게">More Seamless(더 매끄럽게)</h4>
<img src="https://velog.velcdn.com/images/hyun_731/post/b1800835-eef5-4f27-bff0-6b15b155e5d7/image.png" alt=""></li>
</ul>
<p>가상 머신(VM)과 호스트 OS 간의 원활한 통합</p>
<p>고성능 그래픽 및 네트워크 지원</p>
<p>드래그 앤 드롭, 클립보드 공유 등의 편리한 기능</p>
<h4 id="more-isolated더-격리된">More Isolated(더 격리된)</h4>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/1058706e-5cdb-4251-a821-04a5da8bc747/image.png" alt="">
각 VM이 독립적으로 실행되어 보안 강화</p>
<p>샌드박스 환경 제공으로 악성코드 격리 가능</p>
<p>기업 환경에서 데이터 보호 및 네트워크 분리 지원</p>
<h2 id="리눅스">리눅스</h2>
<p><strong>1. 우분투 설치를 진행하기 전 언어를 설정한다.
*<em><img src="https://velog.velcdn.com/images/hyun_731/post/749a3f8c-073a-490f-8f14-94b05c79cd45/image.png" alt="">
*</em>2. 우분투 서버 설치를 선택한다.</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/8490aaa1-83ef-49b9-9f8c-642c2aaff2f8/image.png" alt="">
<strong>3. 호스트 이름을 설정 한다.</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/61c9af2b-1ba9-499f-9baa-dd8eec3853fb/image.png" alt="">
<strong>4. 사용자 이름을 설정한다.</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/87b90b18-cc8e-413c-98a0-edd541ab43d2/image.png" alt="">
<strong>5. 파티션을 지정한다.</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/06e30f4e-e1b8-422c-af1b-43485a9e6bbe/image.png" alt="">
<strong>6. 서버 사용 목적에 따라 선택 후 설치한다.</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/b4efb3f3-fd5c-43ef-ab55-bf51ae7c1e0c/image.png" alt="">
<strong>7. 설치가 완료되면 CLI 환경에서 우분투로 로그인한다.</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/e9ed3497-1d49-4507-accc-17f2e8237165/image.png" alt=""></p>
<h2 id="윈도우">윈도우</h2>
<p><strong>1. 사용할 언어와 시간을 선택한다.</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/f0ec2f2d-e1d8-4605-8898-26cc74f7479a/image.png" alt="">
<strong>2. 키보드 설정을 선택한다.</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/f8ab52c1-050c-4e4f-ba2c-d4347402090d/image.png" alt="">
<strong>3. 설치 옵션을 선택한다.</strong>
3-1. 옵션 선택후 아래에 있는 &quot;파일, 앱, 설정을 포함하여 모든 항목을 삭제하는 것에 동의 합니다.&quot; 체크박스를 활성화 한다.
<img src="https://velog.velcdn.com/images/hyun_731/post/4865f957-f183-42ad-a574-89da982451b4/image.png" alt="">
<strong>4. 제품 키를 선택한다.</strong>
4-1. 제품 키가 없는 경우 아래에 &quot;제품 키가 없습니다.&quot;를 누른다.
<img src="https://velog.velcdn.com/images/hyun_731/post/ebc21514-8ea5-4721-8450-1c6ed1ff2ba5/image.png" alt="">
<strong>5. 사용 할 에디션을 선택한다.</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/3817bc1b-a2c8-4886-a676-a01d04888eff/image.png" alt="">
<strong>6. 내용을 읽어보고 아래에 있는 동의를 클릭한다.</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/45db0260-cd97-415f-bfbd-f0032d819ff7/image.png" alt="">
<strong>7. 윈도우를 설치 할 파티션을 지정한다.</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/1c578f58-e0e3-4e22-a193-13c464487423/image.png" alt="">
<strong>8. 설치 버튼을 누른다.</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/9fbc70a2-bdd4-4aa6-b619-e50c52476316/image.png" alt="">
<img src="https://velog.velcdn.com/images/hyun_731/post/d89d714f-af6b-4d72-a46c-6d1fb374bed9/image.png" alt=""></p>
<h1 id="개발도구-설치">개발도구 설치</h1>
<h3 id="개발도구-종류">개발도구 종류</h3>
<p>장비 구분별로 서버별 용도, 운영체제, 설치 소프트웨어(S/W) 등이 있으며
개발도구별 서버명, 설치 S/W, 운영체제 현황은 아래와 같다.
<img src="https://velog.velcdn.com/images/hyun_731/post/27399aab-673b-4b64-8539-0615a8a9fd12/image.png" alt="">
장비별 서버명, 설치 S/W, 운영체제 현황은 아래와 같다.
<img src="https://velog.velcdn.com/images/hyun_731/post/577b3efd-cbcd-4be2-be3d-b3df4b340a31/image.png" alt=""></p>
<h1 id="개발도구-활용">개발도구 활용</h1>
<h3 id="통합개발환경ide-integrated-development-environment">통합개발환경(IDE, Integrated Development Environment)</h3>
<p>통합개발환경을 뜻하는 ‘IDE’는 ‘Integrated Development Environment’의 약자 로 개발을 하면서 사용하는 도구들의 집합을 말한다.</p>
<blockquote>
<p>통합개발환경의 지원 </p>
</blockquote>
<ul>
<li>언어팩</li>
<li>개발 편집기 </li>
<li>Git 연동</li>
<li>Syntax Highlighting </li>
<li>기타 플러그인</li>
</ul>
<p>통합개발환경의 종류
<img src="https://velog.velcdn.com/images/hyun_731/post/0f345a3e-1f29-4c03-a1c8-034a4f7149fe/image.png" alt=""></p>
<h2 id="개발-환경-서비스-사례">개발 환경 서비스 사례</h2>
<h3 id="개발-환경-및-도구">개발 환경 및 도구</h3>
<p>JDK: Java 개발 및 실행 환경 제공
Eclipse: 통합개발환경(IDE)</p>
<h3 id="서버-및-wasweb-application-server">서버 및 WAS(Web Application Server)</h3>
<p>Web 서버: Oracle iPlanet – HTTP 요청 서비스, 부하 분산 및 Fail-Over 기능 제공
WAS: Oracle Weblogic – J2EE 환경의 분산 및 클러스터링 서비스 제공</p>
<h3 id="데이터베이스-및-형상관리">데이터베이스 및 형상관리</h3>
<p>DBMS: Oracle – 업무 데이터를 저장
형상관리: SVN, Dimension – 소스코드 및 운영환경 관리</p>
<h3 id="프레임워크-및-모델링">프레임워크 및 모델링</h3>
<p>전자정부 표준 프레임워크: Spring 기반의 통합 개발 환경 제공
DB 모델링: DA# – 정보 시스템의 표현, 분석, 설계 지원
APP 모델링: EA – 업무 프로세스 분석 및 설계 지원
Anyframe: 조달청 표준 개발 프레임워크 – DAO, VO, SQL 자동 생성</p>
<h3 id="기타-개발-지원-도구">기타 개발 지원 도구</h3>
<p>웹 리포팅: Rexpert – 다양한 출력 형식으로 보고서 및 통계 제공
SSO/EAM: KSign – PKI 기반의 통합 로그인 및 EAM 솔루션 제공
소스 코드 품질관리: PMD – 전자정부 표준 프레임워크의 코드 품질 룰 적용
빌드 및 배포: Ant – XML 기반의 빌드 스크립트 제공
배포 자동화: Jenkins – 빌드된 소스 배포 자동화</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[고정소수점,부동소수점]]></title>
            <link>https://velog.io/@hyun_731/%EA%B3%A0%EC%A0%95%EC%86%8C%EC%88%98%EC%A0%90%EB%B6%80%EB%8F%99%EC%86%8C%EC%88%98%EC%A0%90</link>
            <guid>https://velog.io/@hyun_731/%EA%B3%A0%EC%A0%95%EC%86%8C%EC%88%98%EC%A0%90%EB%B6%80%EB%8F%99%EC%86%8C%EC%88%98%EC%A0%90</guid>
            <pubDate>Thu, 03 Apr 2025 02:40:29 GMT</pubDate>
            <description><![CDATA[<h1 id="고정소수점">고정소수점</h1>
<p>움직이지 않고 고정된 소수점을 뜻한다.</p>
<p>32비트 체계라고 가정한다면
<img src="https://velog.velcdn.com/images/hyun_731/post/97eccc88-3d14-444a-8be6-ac8b7d0ba6a0/image.png" alt=""></p>
<blockquote>
<p><strong>부호 비트</strong>
(0은 양수, 1은 음수)
**
정수부
*<em>정수부분이 저장된다
*</em>
소수부
**소수부분이 저장된다</p>
</blockquote>
<p>예를 들어보자
5.75를 2진수로 변환하면
5.75 = 101.11(2)
양수 이므로 부호비트에는 0이 저장되고
101은 정수부에, 11은 소수부에 저장 된다.
*<em>0|000000000000101|1100000000000000
*</em></p>
<h1 id="ieee754-부동소수점">IEEE754 부동소수점</h1>
<p>고정되지 않고 움직이는 소수점을 뜻한다.</p>
<p>32비트 체계라고 가정한다면
<img src="https://velog.velcdn.com/images/hyun_731/post/ac341e94-a052-4ffd-8c99-539db6685443/image.png" alt=""></p>
<blockquote>
<p>** Sign(부호 비트)는 1bit를 가지며 부호를 나타낸다. **
(0은 양수, 1은 음수)
**
Exponent(지수부)는 8bits를 가진다.**
Bias(127)를 적용하여 저장
실제 지수 값 = 저장된 값 - 127
예를 들어, 저장된 지수 값이 130이라면 실제 지수는 130 - 127 = 3
**
Mantissa(가수부)는 23bit를 가진다.**
정규화된 수는 1.XXXXX… × 2^E 형태를 따름
따라서, 1. 부분은 암묵적으로 존재
저장된 값은 XXXXX… 부분만 저장됨</p>
</blockquote>
<p>예를 들어보자
5.75를 IEEE 754 32비트로 변환해보자</p>
<p>*<em>5.75 = 101.11(2)
*</em>이런식으로 이진수로 변화 시킨 후</p>
<p>이 101.11(2) 정규화를 시키면</p>
<p><strong>1.0111 × 2^2</strong> 이런 식으로 나타낼 수 있다.
(만약 소수점이 뒤로 간다면 뒤로 간 만큼 새고 지수에 -를 붙인다.)
예 0.0010001 - &gt; 1.0001 × 2^-3</p>
<p>그럼 일단 양수이므로 최상위 비트(부호 비트)는 0이 되며</p>
<p>지수의 값이 1.0111 × 2^ <u><strong>2</strong></u>
2 이므로 127 + 2를 하여 129를 지수부에 표시하면 된다.</p>
<p>그리고 남은 0111을 가수부에 표시하면 된다</p>
<p>완성 후
*<em>0 | 10000001 | 01110000000000000000000  *</em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[자료구조] 스택,큐]]></title>
            <link>https://velog.io/@hyun_731/%EC%9E%90%EB%A3%8C-%EA%B5%AC%EC%A1%B0-%EC%8A%A4%ED%83%9D%ED%81%90</link>
            <guid>https://velog.io/@hyun_731/%EC%9E%90%EB%A3%8C-%EA%B5%AC%EC%A1%B0-%EC%8A%A4%ED%83%9D%ED%81%90</guid>
            <pubDate>Thu, 27 Mar 2025 15:38:21 GMT</pubDate>
            <description><![CDATA[<h1 id="스택-stack">스택 (Stack)</h1>
<p><strong>스택(Stack)은 후입선출(LIFO, Last In First Out) 방식으로 동작하는 선형 자료 구조이다.</strong>
말그대로 가장 나중에 들어온 것이 가장 먼저 나가는 방식이다
파이썬 Class로 구현한 코드는 아래와 같다.</p>
<pre><code>class Stack:
    arr : list
    t : int

    def __init__(self,size):
        self.arr = [0]*size
        self.t = -1

    def isFull(self):
        if self.t == (len(self.arr) - 1): return True
        return False

    def isEmpty(self):
        return self.t == -1

    def pop(self):
        if self.isEmpty():
            return &quot;아무것도 없습니다.&quot;
        else:
            p = self.arr[self.t]
            self.t -= 1
            return p

    def push(self, a):
        if self.isFull() == False:
            self.t += 1
            self.arr[self.t] = a
        else:
            print(&quot;자리가 없습니다.&quot;)</code></pre><p>위 코드에 구현 되어있는 메서드 종류는 아래와 같다.</p>
<p><strong>메서드 종류</strong></p>
<ul>
<li>push는 값을 집어 넣는 메서드</li>
<li>pop은 값을 빼내는 메서드</li>
<li>isFull는 꽉 차있는지 알려주는 메서드</li>
<li>isEmpty는 비어있는지 알려주는 메서드</li>
</ul>
<p>스택의 예로는 뒤로가기가 있다.</p>
<h1 id="큐-queue">큐 (Queue)</h1>
<p><strong>큐(Queue)은 선입선출(FIFO, First In First Out) 방식으로 동작하는 선형 자료 구조이다.</strong>
말그대로 가장 먼저 들어온 것이 가장 먼저 나가는 방식이다
파이썬 Class로 구현한 코드는 아래와 같다.</p>
<pre><code>class Queue:
    arr : list
    f : int
    r : int

    def __init__(self,size):
        self.arr = [0]*size
        self.f = -1
        self.r = -1

    def isFull(self):
        if self.r == (len(self.arr) - 1): return True
        return False

    def isEmpty(self):
        return self.f == self.r

    def dequeue(self):
        if self.isEmpty():
            return &quot;아무것도 없습니다.&quot;
        else:
            self.f += 1
            p = self.arr[self.f]
            return p

    def enqueue(self, a):
        if self.isFull() == False:
            self.r += 1
            self.arr[self.r] = a
        else:
            print(&quot;자리가 없습니다.&quot;)</code></pre><p><strong>메서드 종류</strong></p>
<ul>
<li>enqueue는 값을 집어 넣는 메서드</li>
<li>dequeue은 값을 빼내는 메서드</li>
<li>isFull는 꽉 차있는지 알려주는 메서드</li>
<li>isEmpty는 비어있는지 알려주는 메서드</li>
</ul>
<p>큐의 예로는 프린터 대기열이 있다.</p>
<h1 id="단점">단점</h1>
<p><strong>선형 큐 (Linear Queue)</strong>의 단점</p>
<ul>
<li><p>배열 기반 큐의 비효율성: 큐에서 요소를 제거하면 앞쪽이 비지만, 배열에서 공간을 그대로 두기 때문에 빈 공간이 쌓임. 이로 인해 실제로 큐가 가득 찼다고 판단해도 물리적으로는 공간이 남아 있을 수 있다.</p>
</li>
<li><p>고정 크기: 큐의 크기가 고정되어 있어서 크기를 조정하기 어려움. 큐가 가득 차면 더 이상 요소를 삽입할 수 없음.</p>
</li>
</ul>
<p><strong>선형 스택 (Linear Stack)</strong>의 단점</p>
<ul>
<li><p>고정 크기: 스택의 크기도 고정되어 있어서 스택이 가득 차면 더 이상 삽입할 수 없음. 크기 조정이 불편함.</p>
</li>
<li><p>오버플로우 및 언더플로우: 스택이 가득 차거나 비어있을 때, 오버플로우(삽입 불가)나 언더플로우(제거 불가) 문제가 발생할 수 있음.</p>
</li>
<li><p>단방향 삽입/삭제: 후입선출(LIFO) 방식만 지원하므로 다른 방식으로 데이터를 접근하기 어려움. 중간에 접근하려면 전체 스택을 조회해야 함.</p>
</li>
</ul>
<p>큐와 스택을 시각화 하면 다음과 같다.
<img src="https://velog.velcdn.com/images/hyun_731/post/62f52040-0bf3-43b4-b16a-b4f4abd42123/image.png" alt=""></p>
<h3 id="마치며">마치며...</h3>
<p>공부 열심히 해야 할 것 같습니다. ㅠㅠ</p>
<blockquote>
<p><em>*<em>달을 향해 쏴라, 빗나가도 별이 될테니. *</em></em>
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ-<em><strong>Les Brown</strong></em>-</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[개발자 환경 구축] 운영체제]]></title>
            <link>https://velog.io/@hyun_731/%EA%B0%9C%EB%B0%9C%EC%9E%90-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C</link>
            <guid>https://velog.io/@hyun_731/%EA%B0%9C%EB%B0%9C%EC%9E%90-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C</guid>
            <pubDate>Wed, 26 Mar 2025 14:26:27 GMT</pubDate>
            <description><![CDATA[<h1 id="운영체제">운영체제</h1>
<p>사용자의 하드웨어, 시스템 리소스를 제어하고 프로그램에 대한 일반적 서비스를 지원하는 시스템 소프트웨어이다.
개념도는 아래와 같다.</p>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/096a434c-1510-415e-b1b2-0f4223f11c0b/image.jpeg" alt=""></p>
<h1 id="운영체제의-주요-기능">운영체제의 주요 기능</h1>
<h2 id="1-처리능력-향상">1. 처리능력 향상</h2>
<p>예시 : 멀티태스킹을 통해 여러 프로그램을 동시에 실행 (예: 브라우저에서 유튜브를 보면서 워드 작업)</p>
<h2 id="2-응답시간-단축">2. 응답시간 단축</h2>
<p>예시 : SSD와 함께 최적화된 OS 스케줄링으로 부팅 시간 단축 (예 : Windows의 빠른 시작 기능)</p>
<h2 id="3-신뢰도-향상">3. 신뢰도 향상</h2>
<p>예시 : 시스템 충돌 발생 시 자동 복구 기능 제공 (예 : 윈도우의 블루스크린 후 자동 재부팅)</p>
<h2 id="4-컴퓨터-시스템과-사용자-간-인터페이스interface-기능-제공">4. 컴퓨터 시스템과 사용자 간 인터페이스(Interface) 기능 제공</h2>
<p>예시 : GUI(그래픽 인터페이스) 제공 (예 : macOS의 Dock, Windows의 시작 메뉴)</p>
<h2 id="5-출력-역할-지원">5. 출력 역할 지원</h2>
<p>예시 : 프린터 드라이버를 통해 인쇄 작업 처리 (예 : 문서 인쇄 시 프린터로 데이터 전송)</p>
<h2 id="6-각-프로그램과-사용자-간-보호">6. 각 프로그램과 사용자 간 보호</h2>
<p>예시 : 사용자 계정 권한 설정 및 보안 기능 제공 (예 : 관리자 권한이 필요한 프로그램 실행 시 UAC 창 표시)</p>
<h2 id="7-주기억-장치-관리">7. 주기억 장치 관리</h2>
<p>예시 : 가상 메모리를 활용하여 RAM이 부족할 때 디스크를 사용 (예 : Windows의 페이징 파일)</p>
<h2 id="8-cpu를-통한-프로그램-실행-관리">8. CPU를 통한 프로그램 실행 관리</h2>
<p>예시 : 프로세스 스케줄링으로 CPU 자원을 효율적으로 배분 (예 : 백그라운드에서 업데이트 진행 중에도 게임 실행 가능)</p>
<h2 id="9-컴퓨터-시스템-내-파일-관리">9. 컴퓨터 시스템 내 파일 관리</h2>
<p>예시 : 파일 시스템을 통해 데이터 저장 및 접근 관리</p>
<h2 id="10-컴퓨터-시스템-명령어-해석수행">10. 컴퓨터 시스템 명령어 해석/수행</h2>
<p>예시 : 명령어 입력 시 실행 (예 : 터미널에서 ls 입력 시 파일 목록 출력)</p>
<h1 id="운영체제의-종류">운영체제의 종류</h1>
<h2 id="windows-os">Windows OS</h2>
<p>Microsoft사 제품으로 유료로 다양한 라이선스 정책이 적용되어 있다. 주로 중소 규모 및 개인용 PC의 OS로 사용된다.</p>
<h2 id="unix">UNIX</h2>
<p>IBM, HP, Sun사의 제품으로 유료로 다양한 라이선스 정책이 적용되어 있다. 주 로 대용량 처리, 안전성이 요구되는 서버(Server) 제품군에 사용된다.</p>
<h2 id="linux">Linux</h2>
<p>Linux Torvalds사의 제품으로 무료이다. 중대 규모 서버에 사용된다.</p>
<h2 id="ios">iOS</h2>
<p>Apple사 제품으로 하드웨어의 번들(Budle)이다. 스마트폰 및 태블릿 PC에 사용 된다.</p>
<h2 id="android">Android</h2>
<p>Google사 제품으로 무료이다. 스마트폰 및 태블릿 PC에 사용된다.</p>
<h1 id="운영체제의-기본-명령어-활용">운영체제의 기본 명령어 활용</h1>
<h2 id="clicommand-line-interface의-특징">CLI(Command Line Interface)의 특징</h2>
<h3 id="작업-환경">작업 환경</h3>
<p>텍스트 기반의 인터페이스
키보드를 사용하여 명령 입력</p>
<h3 id="작업-형태">작업 형태</h3>
<p>명령어를 입력하여 직접적인 조작 수행
사용자가 명령어의 문법과 옵션을 숙지해야 함</p>
<h3 id="작업-방법">작업 방법</h3>
<p>명령어와 옵션을 입력하여 실행
자동화 및 스크립트 작성이 용이</p>
<h2 id="guigraphic-user-interface의-특징">GUI(Graphic User Interface)의 특징</h2>
<h3 id="작업-환경-1">작업 환경</h3>
<p>그래픽 요소(아이콘, 버튼, 창)를 이용한 시각적 인터페이스
마우스와 키보드를 사용하여 조작</p>
<h3 id="작업-형태-1">작업 형태</h3>
<p>아이콘 클릭, 드래그앤드롭, 창 전환 등 직관적인 조작
사용자가 명령어를 몰라도 쉽게 작업 가능</p>
<h3 id="작업-방법-1">작업 방법</h3>
<p>마우스를 사용하여 프로그램 실행 및 설정 변경
다양한 애플리케이션을 동시에 실행 가능 (멀티태스킹 지원)</p>
<h2 id="운영체제-기본-명령어">운영체제 기본 명령어</h2>
<h3 id="윈도우-기본-명령어">윈도우 기본 명령어</h3>
<h4 id="윈도우-명령어-종류">윈도우 명령어 종류</h4>
<p>윈도우 CMD창에 help 입력
help의 매개변수로 명령어 이름을 넣으면 그 명령어에 대한 설명이 나온다.
<img src="https://velog.velcdn.com/images/hyun_731/post/23ad9c31-dd08-45e5-82bc-68c9653c2e91/image.png" alt="">
systeminfo를 사용 했을 때
<img src="https://velog.velcdn.com/images/hyun_731/post/c58be802-99a9-4305-a85e-0471c4d0125e/image.png" alt=""></p>
<h4 id="윈도우-기본-명령어-주요-설명">윈도우 기본 명령어 주요 설명</h4>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/137eb883-ffe7-4885-9aa6-4699ca0d526b/image.png" alt=""></p>
<h3 id="리눅스-기본-명령어">리눅스 기본 명령어</h3>
<p>리눅스(우분투)는 Ctrl + Alt + T를 사용하여 Linux 터미널에 접속한다.</p>
<h4 id="리눅스-기본-명령어-주요-설명">리눅스 기본 명령어 주요 설명</h4>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/1ffcb846-4b63-4a3e-ba0d-d15496d29b7d/image.png" alt="">
사용중인 리눅스 종류 및 버전 확인 방법
<img src="https://velog.velcdn.com/images/hyun_731/post/450b4b81-5d55-4bda-9927-ce0686df2c12/image.png" alt=""></p>
<h2 id="리눅스-서버-버전-gui-변경">리눅스 서버 버전 GUI 변경</h2>
<p>리눅스 OS 경우 GUI 기반 환경에서의 기본 명령어를 입력한 후 관련 내용을 확인한다.</p>
<p>리눅스(우분트) 경우 Desktop 버전이 아닌 Server 버전으로 구축한 경우 CLI 레벨로 구축이 되나, 관리하는 과정에서 GUI 레벨의 패키지가 필요한 경우 GUI를 설치 하기 전 apt-get 도구의 Upgrade를 진행한다.(충돌이나 오류를 방지하기 위함이다.)</p>
<p>GUI 명령어 실행을 위해서 startx 명령어를 입력하면 xwindow 환경이 실행되면서     GUI 환경으로 전환된다.</p>
<p>GUI로 변경하는 경우 5로 runlevel를 조정한다.
<img src="https://velog.velcdn.com/images/hyun_731/post/e1d61498-5962-49a1-88cb-f6730730403b/image.png" alt=""></p>
<h1 id="운영체제-작업-우선순위-설정">운영체제 작업 우선순위 설정</h1>
<h2 id="운영체제-프로세스의-개념">운영체제 프로세스의 개념</h2>
<p>CPU를 통해 수행되는 사용자 및 시스템 프로그램
시스템의 작업 단위</p>
<h2 id="운영체제의-프로세스의-특징">운영체제의 프로세스의 특징</h2>
<ol>
<li>현재 실행 중이거나 곧 실행이 가능한 프로그램</li>
<li>운영체제 내에 PCB를 가진 프로그램</li>
<li>목적 또는 결과에 따라 발생하는 사건들의 과정</li>
<li>프로세스는 병행 수행 가능</li>
<li>CPU는 수시로 프로세스들 사이를 다중화하여 전환</li>
<li>지정된 결과를 얻기 위한 계통적 동작</li>
<li>비동기적 행위(Asynchronous Activity)</li>
<li>프로세스가 할당하는 개체(Entity)로서 디스패치(Dispatch) 가능</li>
</ol>
<h2 id="운영체제-프로세스-종류">운영체제 프로세스 종류</h2>
<h3 id="순차-프로세스">순차 프로세스</h3>
<p><strong>한 프로세스의 수행이 순차적인 방법으로 진행</strong>
어느 한순간에 많아야 하나의 명령어만 프로세스를 대표하여 수행하게 됨
현재 실행 중인 하나의 프로그램으로 프로세스가 포함하고 있는 내용 </p>
<p>(가) 프로세스 문맥: 상태 워드나 레지스터들</p>
<p>(나) 기억장치 문맥: 데이터 세그먼트, 코드 세그먼트, 실행 스택 등</p>
<p>(다) 프로세스와 연관된 속성들</p>
<ul>
<li>프로세스 이름: 프로세스가 생성될 때 할당된 내부 번호</li>
<li>우선순위: CPU를 할당하는 스케쥴링에 사용</li>
<li>권한: 정보 보호 및 수행할 연산을 지정</li>
</ul>
<h3 id="병행-프로세스">병행 프로세스</h3>
<p>** 병행 프로세스의 개념**
(가) 프로그램 그 자체가 프로세스는 아님</p>
<p>(나) 하나의 프로그램 = 수동적(Passive)인 단위 </p>
<p>(다) 하나의 프로세스 = 능동적(Active)인 단위
** 병행 프로세스의 형태**
<img src="https://velog.velcdn.com/images/hyun_731/post/d9a18847-dd45-4773-be6d-fb2c5b19f4ee/image.png" alt="">
*<em>1. 형태 1 (병렬 실행)
*</em>p와 q 프로세스가 나란히 실행된다.
두 프로세스가 독립적으로 실행되며 서로 간섭하지 않는다.
멀티코어 CPU 환경에서는 실제 병렬 실행이 가능하다.</p>
<p>*<em>2. 형태 2 (인터리빙 실행)
*</em>p와 q 프로세스가 번갈아가며 실행된다.
작은 단위의 작업들이 교차 실행되며, 마치 시분할(time-sharing) 방식처럼 보인다.
단일 코어 CPU에서 스케줄링 기법을 통해 여러 프로세스를 동시에 실행하는 것처럼 보이게 만든다.</p>
<p>*<em>3. 형태 3 (중첩 실행)
*</em>p가 실행되다가 중간에 q가 실행된 후 다시 p가 이어서 실행된다.
p가 q의 실행을 기다리는 구조로, 동기화가 필요한 경우에 사용된다.
예를 들어, p가 데이터를 준비한 후 q가 이를 처리하는 경우가 해당된다.</p>
<h2 id="프로세스-상태의-개념">프로세스 상태의 개념</h2>
<h3 id="상태state">상태(State)</h3>
<p>컴퓨터 시스템 내에 하나의 프로세스가 존재하는 동안 그 프로세스는 계속해서 여러 사건들에 의해 일련의 상태 변화를 거침</p>
<p>구분
<strong>제출(Submit) 상태
보류(Hold) 상태
준비(Ready) 상태
실행(Running) 상태
대기(Waiting) 상태
완료(Complete) 상태</strong></p>
<h2 id="프로세스와-프로그램의-차이">프로세스와 프로그램의 차이</h2>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/2288d5ea-7065-4c97-b200-a7a3b26d291e/image.png" alt=""></p>
<h3 id="프로그램-program-예시">프로그램 (Program) 예시</h3>
<p>chrome.exe (크롬 브라우저 설치 파일)
python script.py (파이썬 스크립트)</p>
<h3 id="프로세스-process-예시">프로세스 (Process) 예시</h3>
<p>사용자가 크롬을 두 번 실행하면 chrome <strong>프로세스가 2개 생성</strong>됨.
메모장을 실행하면 notepad.exe 프로세스가 생성됨.
python script.py를 실행하면 python.exe 프로세스가 실행됨.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[개발자 환경 구축] CLI,Git,Github]]></title>
            <link>https://velog.io/@hyun_731/%EA%B0%9C%EB%B0%9C%EC%9E%90%ED%99%98%EA%B2%BD%EA%B5%AC%EC%B6%95-CLI-GIT-GITHUB</link>
            <guid>https://velog.io/@hyun_731/%EA%B0%9C%EB%B0%9C%EC%9E%90%ED%99%98%EA%B2%BD%EA%B5%AC%EC%B6%95-CLI-GIT-GITHUB</guid>
            <pubDate>Thu, 20 Mar 2025 11:02:23 GMT</pubDate>
            <description><![CDATA[<h2 id="cli이란">CLI이란?</h2>
<p>컴퓨터와 사용자 간의 상호작용을 위한 텍스트 기반의 사용자 인터페이스이다.</p>
<h2 id="cli-명령어-정리">CLI 명령어 정리</h2>
<blockquote>
<p><strong>ls : 현재 디렉토리 내 파일 리스트를 보여주는 명령어다
ls -l : 내 파일 또는 폴더 리스트를 상세 정보와 함께 보여주는 명령어다 
ls -a : 숨겨진 파일까지 모두 보여주는 명령어
ls (폴더명) : (폴더명) 내 파일 리스트를 보여준다.
cd(change directory) (폴더명) : (폴더명) 디렉토리로 이동한다.
cd ~ : 최상위 폴더(HOME)로 이동한다.
cd .. : 상위 폴더로 이동한다.</strong></p>
</blockquote>
<blockquote>
<p><strong>mkdir (폴더명) : 현재 디렉토리에 (폴더명) 이름을 가진 폴더가 생성된다.
mkdir (폴더명1) (폴더명2) : 현재 디렉토리에 (폴더명1),(폴더명2)를 생성한다.
touch (파일명) : 현재 디렉토리 (파일명) 이름을 가진 파일이 생성된다.
touch (파일명1) (파일명2) : 현재 디렉토리에 (파일명1),(파일명2)을 생성한다.
pwd : 절대경로(홈에서 부터 위치를 표시하는 경로)를 표시한다.
ㅤㅤㅤ 상대경로(내 위치에서 부터 위치를 표시하는 경로)</strong> </p>
</blockquote>
<blockquote>
<p>*<em>상대경로 예:<br>touch test/t.txt test 디렉토리에 들어가지 않고 바로 test 디렉토        리에 파일 생성함
cd ../(폴더명) 내 위치에서 상위폴더로 이동 후 바로 (폴더명)으로 이동        한다 *</em></p>
</blockquote>
<blockquote>
<p><strong>cat (파일명) : 파일을 읽는다.
cat &gt;&gt; (파일명) : 명령어 실행 후 추가 할 텍스트를 입력후 Control + D를 누르면 텍스트가 추가 된다.
cat &gt; (파일명) : 명령어 실행 후 대체 할 텍스트를 입력후 Control + D를 누르면 모든 텍스트가 대체 된다.
echo &quot;할 말&quot; &gt; (파일명).(파일확장자) : &quot;할 말&quot;을 (파일명)파일에 추가 한다.
rm (파일명) : 파일을 삭제한다.
rm (파일명1) (파일명2) <em>.txt : 파일명1, 파일명2, txt 확장자로 끝나는 파일을 삭제한다. *.</em>은 모든 파일을 삭제한다. 
rmdir (폴더명) : 폴더를 삭제한다.
rmdir (폴더명1) (폴더명2) * : 폴더명1, 폴더명2 폴더을 삭제한다. *은 모든 폴더를 삭제한다. 
rm -rf (폴더명) : (폴더명)와 (폴더명) 속 파일와 폴더를 강제로 삭제한다.
cp (복사할 대상 파일) (복사될 파일의 이름) : 파일을 복사한다.
mv (이동 시킬 대상) (이동 할 디렉토리)/ : 파일이나 폴더를 다른 디렉토리로 이동 시킨다.
mv -i (이동 시킬 대상) (이동 할 디렉토리) : 도착할 디렉토리에 동일한 이름의 디렉토리가 존재하면 덮어 쓸 것 인지 물어본다.
mv -f (이동 시킬 대상) (이동 할 디렉토리) : 도착할 디렉토리에 동일한 이름의 디렉토리가 존재하면 덮어 쓸 것 인지 물어보지 않고 덮어 쓴다.
mv (이름 바꿀 대상) (바꿀 이름) : (바꿀 이름)을 가진 디렉토리가 없다면 대상의 이름을 (바꿀 이름)으로 바꾼다.
rename
(명령어) -help : (명령어)에 대한 설명이 나온다.</strong></p>
</blockquote>
<h2 id="homebrew란">Homebrew란?</h2>
<p>macOS 용 소프트웨어 패키지 관리자이다.</p>
<h2 id="homebrew-명령어">Homebrew 명령어</h2>
<blockquote>
<p><strong>brew -v : 현재 버전을 확인한다.
brew update : 패키지 목록을 업데이트 한다.
brew upgrade : 모든 패키지를 최신버전으로 업데이트 한다.
brew upgrade (패키지명) : (패키지)의 버전을 최신버전으로 업데이트 한다.
brew doctor : 상태확인 및 문제해결
brew install (패키지명) : (패키지명)을 설치한다.
brew uninstall (패키지명) : (패키지명)을 제거한다.
brew reinstall (패키지명) : (패키지명)을 재설치한다.
brew list : 패키지 목록을 표시한다.
brew info (패키지명) : (패키지명)의 정보를 표시해준다.
brew outdated : 업데이트가 필요한 패키지를 알려준다.
brew cleanup : 오래된 패키지 및 캐시파일을 정리해준다.</strong></p>
</blockquote>
<h2 id="git">Git</h2>
<p>로컬컴퓨터에서 사용하는 분산 버전 관리 시스템</p>
<h2 id="git-설치-방법">Git 설치 방법</h2>
<h3 id="mac-os">Mac OS</h3>
<p><strong>1. 홈브류 ( <a href="https://brew.sh/">https://brew.sh/</a> ) 에 접속하여 설치하기위한 명령어를 복사한다.</strong></p>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/eaa95824-d3a3-4beb-9e12-93422ee5f5b5/image.png" alt=""></p>
<p>*<em>2. 홈브류 사이트에서 복사한 커맨드를 터미널에 붙여넣는다.
*</em></p>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/3aa16cd5-6371-437b-95db-81ba3fed4816/image.png" alt=""></p>
<p>그렇게 한다면 위처럼 패스워드를 치는 창이 나올텐데 맥북 패스워드를 입력한다.
(키보드를 입력해도 아무것도 안나오는게 정상이다.)
그러면 아래의 사진 처럼 어떤 스크립트가 설치 될 것인지 나오는데 엔터를 눌러 설치를 진행한다.</p>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/1684dc38-47b0-498d-83f5-a5f24c45756a/image.png" alt=""></p>
<p>설치가 끝났다면 아래의 사진처럼 경로를 설정하기 위한 커맨드를 알려주는데</p>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/9b48ab09-b83c-4202-9a6e-210d8b8695c9/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/b8073df7-92ad-407d-a6ae-cfb88977a436/image.png" alt=""></p>
<p>위 사진에 있는 커맨드를 전부 복사 후 터미널에 붙여넣기 한다.</p>
<p>모두 붙여넣었다면 아마 아무런 메세지도 뜨지 않을 것인데 그러면 아마 설치가 성공적으로 되었을 것이다.</p>
<p><strong>3. Git 홈페이지 접속
Git(<a href="https://git-scm.com/">https://git-scm.com/</a>) 홈페이지에 접속한다.</strong></p>
<p><strong>4. 웹사이트에 들어가서 아래의 사진과 같은 부분이 있을 건데 Download for Mac을 누른다.</strong><img src="https://velog.velcdn.com/images/hyun_731/post/08769875-5602-4e1f-b579-bc42dc353018/image.png" alt="">
<strong>5. 아래의 명령어를 터미널에 붙여 넣는다</strong>
<strong>(참고로 터미널은 Command + Space를 눌러 터미널을 검색하면 된다.)</strong></p>
<pre><code>$ brew install git</code></pre><p><img src="https://velog.velcdn.com/images/hyun_731/post/f1a305c7-81fa-4e3d-96f7-4020e2459f41/image.png" alt="">
<strong>6. 설치가 완료 됐다면 아래의 명령어를 입력해서 정상적으로 버전이 출력 된다면 설치가 완료된 것이다.</strong></p>
<pre><code>git --version</code></pre><h3 id="windows-os">Windows OS</h3>
<p><strong>1. Git 파일 다운로드</strong>
<strong>사이트(<a href="https://git-scm.com/downloads)%EC%97%90">https://git-scm.com/downloads)에</a> 접속하여 Windows 아이콘을 클릭한다.</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/7106c4c3-67ae-4465-9039-46ed049c7370/image.png" alt="">
<strong>Standalone Installer에 있는 목록 중 자신의 윈도우 비트에 맞는 셋업 파일을 다운받는다.</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/c3724644-17fd-4fd8-9915-b6cb4cd45a6c/image.png" alt="">
<strong>2. 깃 설치파일 실행</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/a5c1d062-c2f2-4e87-bfbb-973108d7854b/image.png" alt=""></p>
<hr>

<p><strong>깃이 설치될 경로를 지정한다.</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/ce75ba15-5b84-4bcf-95ab-694d60653a4b/image.png" alt=""></p>
<hr>

<p><strong>3. 추가적으로 설치할 컴포넌트를 선택한다. (아래의 사진은 기본값)</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/64cf7c54-4b56-42ab-ba0d-4fc142ab9130/image.png" alt="">
<strong>Additional icons
ㅤㅤon the Desktop : 바탕화면에 아이콘을 추가 한다.</strong>
<em>*
Windows Explorer integration
ㅤㅤGit Bash Here : 폴더에서 바로 Git에 접속하는 Git Bash Here 추가
ㅤㅤGit GUI Here :  폴더에서 바로 Git GUI에 접속하는 Git GUI Here 추가
**
<strong>Git LFS (Large File Support) : 대용량 파일 지원</strong>
**
Associate .git</em> configuration files with the defalut text editor
.git* 구성 파일을 기본 텍스트 편집기와 연결**</p>
<p><strong>Associate .sh files to be run with Bash
실행할 .sh 파일을 Bash와 연결</strong></p>
<p><strong>Check daily for git for Windows updates
윈도우 업데이트에 대한 새로운 업데이트 매일 확인</strong></p>
<p><strong>(NEW!) Add a Git Bash Profile to Windows Terminal
윈도우 터미널에 Git Bash 프로파일 추가</strong></p>
<hr>

<p><strong>4. 시작메뉴에 Git을 추가 할지 여부를 선택한다.</strong>
<strong>추가를 원하지 않는다면 Don&#39;t create a Start Menu folder를 체크한다.</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/93b3b9a5-45ba-423c-9b27-4005cb1268a2/image.png" alt=""></p>
<hr>

<p><strong>5. 에디터 설치</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/06e9ebce-f257-4330-9046-dcfe1a39ce2d/image.png" alt="">
<strong>Notepad++,VSC등등 원하는 에디터를 선택하면 된다. (기본값 Vim)</strong></p>
<hr>

<p>** 6. 리포지토리 메인 브랜치 설정**
<img src="https://velog.velcdn.com/images/hyun_731/post/061515fd-ada0-4b87-baa7-906c6072e12f/image.png" alt="">
<strong>git에서 새로운 리포지토리를 만들 때 메인 브랜치의 이름을 어떻게 할지 설정하는 단계이다.</strong> 
<strong>만약에 메인 브랜치명을 별도로 사용한다면 아래 옵션을 선택한다.</strong></p>
 <hr>

<p><strong>7. git 환경변수 관련 설정</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/ae9bf23a-da85-42d2-bbcb-411afd99e4ca/image.png" alt=""></p>
<p><strong>git 경로를 환경 변수에 추가해서 git 명령어를 어디서든지 쓸 수 있게 하는 옵션이다.</strong></p>
<p><strong>Use Git from Git Bash only
git을 git bash에서만 쓸 수 있게 하는 옵션</strong></p>
<p><strong>Git for the command line and also from 3rd-party software
다른 프로그램에서도 git 명령어를 사용할 수 있게 하는 옵션</strong></p>
<p><strong>Use Git and optional Unix tools for the Command Prompt
명령 프롬프트에서 git과 유닉스 툴을 같이 사용할 수 있게 하는 옵션</strong></p>
<p>*<em>주의사항 유닉스가 윈도우를 덮어버리기 때문에 이 옵션을 이해한 경우에만 사용. *</em></p>
<hr>

<p><strong>8. SSH 프로그램 선택
** <img src="https://velog.velcdn.com/images/hyun_731/post/c6638569-632e-45eb-8940-d506426e75e2/image.png" alt="">
**Git에서 사용하길 원하는 ssh 프로그램을 선택하는 옵션이다.</strong></p>
<p><strong>Git이랑 같이 제공되는 OpenSSH를 사용할지, 외부 OpenSSH를 사용할지 선택 할 수 있다.</strong>
 <hr></p>
<p><strong>9. Https 인증서 선택</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/c56204c9-814b-4e9f-a185-3da20cebaad8/image.png" alt=""></p>
<p>*<em>Https 연결 시 사용되는 인증서와 관련된 옵션이다.
*</em>
*<em>OpenSSL과 윈도우 보안 인증서 중 어떤 것을 사용할지 선택하면 된다.
*</em>
 <hr></p>
<p><strong>10. 줄바꿈 옵션 선택
*<em><img src="https://velog.velcdn.com/images/hyun_731/post/23101bb6-632d-42bf-b628-b4ac5da2a43f/image.png" alt="">
*</em>git에서 사용할 줄바꿈 옵션을 선택하는 단계이다.
**
**Checkout Window-style, commit Unix-style line endings
소스 코드를 받을때는 윈도우 스타일로, 코드를 올릴때는 유닉스 스타일로 올리는 옵션</strong></p>
<p><strong>Checkout as-is, commit Unix-style line endings
받을 때는 코드의 설정대로, 올릴 때는 유닉스 스타일로 올리는 옵션</strong></p>
<p><strong>Checkout as-is, commit as-is
받을 때나 올릴 때나 코드의 설정을 따르는 옵션</strong></p>
<hr> 

<p><strong>11. 터미널 설정</strong>
<img src="https://velog.velcdn.com/images/hyun_731/post/dc6e3fb2-9072-48cb-a232-9540850a4761/image.png" alt=""></p>
<p>*<em>git 터미널을 어떤 것을 사용할지 선택하는 단계이다.
*</em>
*<em>MinTTY를 쓸지 윈도우 콘솔창을 쓸지 선택한다.
*</em></p>
 <hr>

<p>*<em>12. git pull 옵션 선택
*</em><img src="https://velog.velcdn.com/images/hyun_731/post/fcb4d4d7-a085-4781-b392-1cb742c25d85/image.png" alt=""></p>
<p><strong>git pull 명령어 사용 시 fast-forward나 merge를 할지, rebase를 할지, fast-forward를 할지 선택하는 단계이다.</strong></p>
 <hr>

<p>*<em>13. 인증 관련 설정
*</em><img src="https://velog.velcdn.com/images/hyun_731/post/b002d8f5-b798-45a2-b873-eff6b5045485/image.png" alt=""></p>
<p>*<em>git credential helper 관련 설정이다.
*</em></p>
<hr> 

<p>*<em>14. 추가 옵션 설정
*</em> <img src="https://velog.velcdn.com/images/hyun_731/post/f34518d6-a43b-4ace-9968-0c713443251e/image.png" alt=""></p>
<p>*<em>git에서 어떤 옵션을 활성화할지 선택하는 단계이다.
*</em>
*<em>파일 시스템 캐시를 사용할지, 심볼릭 링크를 사용할지 선택(중복 가능)
*</em>
 <hr></p>
<p><strong>15. 실험적 기능 사용 여부 설정
** <img src="https://velog.velcdn.com/images/hyun_731/post/4eb4eef3-1300-4450-926b-ae21b690a9b2/image.png" alt="">
*<em>실험적 기능 사용 여부를 선택한다.
*</em> 
**Enable experimental support for pseudo consoles 
Git이 윈도우 환경에서 가상 콘솔(pseudo console) 지원
가상 콘솔은 프로그램과 터미널 간의 인터페이스로,커맨드 라인 애플리케이션과 터미널 간의 상호작용이 가능</strong>
 
<strong>Enable experimental built-in file system monitor
Git이 내장 파일 시스템 모니터(experimental build-in file system monitor) 지원
파일 시스템 모니터는 파일 시스템의 변경 사항을 감지하여 Git 작업을 자동으로 업데이트할 수 있는 기능 제공</strong></p>
 <hr>

<p>*<em>16. git 설치 진행
*</em></p>
<p> <img src="https://velog.velcdn.com/images/hyun_731/post/4962322b-d21b-437b-a251-f7c2f7d8cc5b/image.png" alt=""></p>
<p>*<em>git 설치 완료
*</em></p>
<h2 id="github">Github</h2>
<p>Git을 사용하는 프로젝트를 지원하는 웹 호스팅 서비스</p>
<h2 id="cli-명령어-문제-예제">CLI 명령어 문제 예제</h2>
<ol>
<li><p>현재 작업 중인 디렉토리의 경로를 확인하세요.</p>
<pre><code> pwd</code></pre></li>
<li><p>test_folder라는 폴더를 현재 디렉토리에 생성한 후, 해당 폴더로 이동하세요.</p>
<pre><code> mkdir test_folder</code></pre></li>
<li><p>example.txt 라는 빈 파일을 생성하고, 파일이 생성되었는지 확인하세요.</p>
<pre><code> touch example.txt
 ls</code></pre></li>
<li><p>example.txt 파일에 &quot;Hello, CLI!&quot;라는 문장을 추가하고, 내용을 확인하세요.</p>
<pre><code> echo &quot;Hello, CLI! &quot; &gt; example.txt 
 (느낌표 뒤에 공백 붙여야함 아니면 에러가 나면서 무한루프에 빠짐)</code></pre></li>
<li><p>example.txt 파일의 이름을 sample.txt로 변경하세요.</p>
<pre><code> mv example.txt sample.txt</code></pre></li>
<li><p>sample.txt 파일을 삭제하세요.</p>
<pre><code> rm sample.txt</code></pre></li>
<li><p>숨김 파일도 포함하여 현재 디렉토리의 모든 파일과 폴더를 확인하세요.</p>
<pre><code> ls -a</code></pre></li>
<li><p>현재 디렉토리에서 한 단계 위의 디렉토리로 이동하세요.</p>
<pre><code> cd ..</code></pre></li>
<li><p>test_folder 안에 copy.txt 파일을 생성한 후, 이를 backup.txt라는 이름으로 복사하세요.</p>
<pre><code> cd text_folder
 touch copy.txt
 cp copy.txt backup.txt
 ls (확인하는 용)</code></pre></li>
<li><p>test_folder 폴더와 내부 파일을 포함하여 모두 삭제하세요.</p>
<pre><code>cd ..
rm -rf </code></pre></li>
<li><p>projects 폴더를 생성하고 안에 test1.txt,test2.txt,test3.txt 세 개의 파일을 한 번에 생성하세요.</p>
<pre><code>mkdir projects
cd projects
touch test1.txt test2.txt test3.txt

or

mkdir projects
touch projects/text1.txt</code></pre></li>
<li><p>test1, test2 폴더를 생성하고 test2 폴더를 test1 폴더 안으로 이동시키세요.</p>
<pre><code>mkdir test1 test2
mv test2 test1/</code></pre></li>
<li><p>projects 폴더를 backup_projects 폴더로 복제하고 backup_projects 폴더 안에 있는 모든 파일을 확인하세요.</p>
<pre><code>cp -r projects backup_projects
ls backup_projects</code></pre></li>
<li><p>현재 폴더에서 .txt 확장자를 가진 모든 파일을 삭제하세요.</p>
<pre><code>rm *.txt</code></pre></li>
<li><p>rm 명령어의 사용법을 확인할 수 있는 도움말을 출력하세요.</p>
<pre><code>rm -help</code></pre></li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴퓨터는 어떻게 연산을 할까?(컴퓨터의 덧셈 방법)]]></title>
            <link>https://velog.io/@hyun_731/how-do-computers-do-addition</link>
            <guid>https://velog.io/@hyun_731/how-do-computers-do-addition</guid>
            <pubDate>Tue, 25 Feb 2025 05:06:49 GMT</pubDate>
            <description><![CDATA[<h3 id="✋들어가기전">✋들어가기전</h3>
<p>자기전에 침대에 누워 핸드폰을 보고 있었는데, 갑자기 문득 든 생각 “컴퓨터는 어떻게 연산을 하는거지?” 나같은 사람이 있을거 같기도 하고 그냥 궁금할거 같아서 준비했다. 틀린 부분이나 피드백이 있다면 댓글로 알려주면 감사하겠다!</p>
<h3 id="비트-연산자">비트 연산자</h3>
<p>일단 우리가 컴퓨터가 어떻게 연산을 하는지 알기 위해선 <strong>비트 연산자</strong>에 대해 알 필요가 있다.
컴퓨터가 이진법을 사용한다는 사실은 이 글을 읽는 모두가 알고 있을 것이고,, 
비트 연산자는... 음..
솔직히 나같은 경우에는 쓸 일이 없어서 그냥 이름만 듣고 넘겼었는데,,
이번 기회에 한번 알아보도록 하자!</p>
<p>다들 <strong>컴퓨터에서 가장 작은 단위가 1bit</strong>인건 알고 있겠지요?
그거 가지고 논리 연산을 할 수 있게 만든게 바로? 비트 연산자이다! 
위키에 나와있는 정의로는 <strong>‘비트 단위로 논리 연산을 할때 사용하는 연산자’</strong> 라고 되어있다. </p>
<p>그 중 오늘 우리가 사용할 부분만 간단하게 설명 하겠다.</p>
<h3 id="and연산논리곱"><strong>AND연산(논리곱)</strong></h3>
<p><strong>입력 된 두 비트가 모두 1일때만 1을 반환</strong>한다.
C언어에서 <strong>비트연산자 &#39;&amp;&#39;</strong>로 사용한다. <img src="https://velog.velcdn.com/images/hyun_731/post/c0bf5725-fecf-45de-b82d-74efce3a402a/image.png" alt=""></p>
<h3 id="or연산논리합"><strong>OR연산(논리합)</strong></h3>
<p><strong>입력 된 두 비트중 하나라도 1이라면 1을 반환</strong>한다.
C언어에서 <strong>비트연산자 &#39;|&#39;</strong>로 사용한다.<img src="https://velog.velcdn.com/images/hyun_731/post/ef021e9c-6049-447c-9863-5427ef39f19c/image.png" alt=""></p>
<h3 id="xor연산베타적-논리합"><strong>XOR연산(베타적 논리합)</strong></h3>
<p><strong>입력 된 두 비트가 서로 다를 때 1을 반환</strong>한다.
C언어에서 <strong>비트연산자 &#39;^&#39;</strong>로 사용한다.<img src="https://velog.velcdn.com/images/hyun_731/post/79a06da4-cb75-4137-bc68-d280a5ea2432/image.png" alt=""></p>
<h3 id="컴퓨터가-연산하는-방법">컴퓨터가 연산하는 방법</h3>
<p>컴퓨터는 사칙연산을 덧셈으로 한다. 빼기는 2의 보수<strong>(궁금하다면 직접 찾아보셈)</strong>를 사용해 더하는 방식이고, 곱셈은 덧셈을 반복하면 되고, 나누기는 조금 복잡하니까 넘어가고,
어찌되었든 덧셈이 중요한것 같으므로 덧셈에 대해 알아보자.</p>
<h3 id="컴퓨터가-덧셈-하는-방법">컴퓨터가 덧셈 하는 방법</h3>
<p>컴퓨터는 이진수를 사용하기 때문에 합이 2이상이 된다면 자리올림을 해주면 된다.
Sum = &#39;합&#39;, Carry = &#39;자리올림&#39;</p>
<p>0 + 0 = 0(Sum) , 0(Carry)
0 + 1 = 1(Sum) , 0(Carry)
1 + 0 = 1(Sum) , 0(Carry)
1 + 1 = 0(Sum) , 1(Carry)</p>
<p>우리가 평상시 사용하는 10진수를 예로 들자면 6 + 5 = 11 두 값의 합이 10을 넘어가니 자리를 올려서 표시한다.</p>
<p>근데, 저 식 어디선가 본 적 있는거 같지 않나?</p>
<p>그렇다! <strong>합은 XOR연산이고, 자리올림은 AND연산</strong>인거다!</p>
<p>논리회로로 표현한다면 아래와 같이 표현되고 
이것을 <strong>반가산기(Half Adder)</strong>라 부른다.
<img src="https://velog.velcdn.com/images/hyun_731/post/9ec87d0a-3055-46fb-b1bd-1af3876282cb/image.png" alt=""></p>
<p>그리고 반가산기는 이전자리 덧셈에서 올라오는 자리올림을 고려하지 않는다.
두 개의 비트와 이전자리 덧셈에서 올라오는 자리올림을 더해 계산하는 회로는 아래의 그림처럼 표현되고, 
이것을 <strong>전가산기(Full Adder)</strong>라 부른다.
<img src="https://velog.velcdn.com/images/hyun_731/post/71838127-9033-48dd-aaa4-ec1c67511d8e/image.png" alt=""></p>
<p>계산되는 순서를 살펴보자, 우리가 10 + 2를 한다고 하고 10을 2진수로 바꿔 표현하여 <strong>1010(2)</strong>로 변환하고, 2을 2진수로 바꿔 표현하여 <strong>0010(2)</strong>로 변환한다.</p>
<p>그 중 <strong>1010(2)의 최하위 비트</strong>와 <strong>0010(2)의 최하위 비트</strong>를 <strong>반가산기</strong>에 집어 넣는다.</p>
<p>거기서 나오는 Sum은 <strong>결과값의 최하위 비트</strong>에 들어간다.</p>
<p>Carry은 <strong>전가산기</strong>로 보내서 다음 값을 계산하고 Sum을 <strong>결과값의 다음 하위 비트에 넣고</strong> Carry를 <strong>전가산기</strong>로 보내는걸 반복한다. 
아래의 그림을 살펴보며 천천히 이해해보자! 
<img src="https://velog.velcdn.com/images/hyun_731/post/2353b273-443f-4e67-b390-d16dbef9845a/image.jpg" alt="">
<strong>파란박스의 왼쪽이 Carry,오른쪽이 Sum이다.</strong></p>
<blockquote>
<p>참고한 글들
<a href="https://borntodevelop.tistory.com/entry/IT-2%EC%A7%84%EC%88%98-4%EC%B9%99%EC%97%B0%EC%82%B0%EB%8D%94%ED%95%98%EA%B8%B0%EB%B9%BC%EA%B8%B0%EA%B3%B1%ED%95%98%EA%B8%B0%EB%82%98%EB%88%84%EA%B8%B0-%EC%9B%90%EB%A6%AC-Bit-Binary">https://borntodevelop.tistory.com/entry/IT-2%EC%A7%84%EC%88%98-4%EC%B9%99%EC%97%B0%EC%82%B0%EB%8D%94%ED%95%98%EA%B8%B0%EB%B9%BC%EA%B8%B0%EA%B3%B1%ED%95%98%EA%B8%B0%EB%82%98%EB%88%84%EA%B8%B0-%EC%9B%90%EB%A6%AC-Bit-Binary</a>
<a href="https://bttrthn-ystrdy.tistory.com/33">https://bttrthn-ystrdy.tistory.com/33</a>
<a href="https://namu.wiki/w/%EB%85%BC%EB%A6%AC%20%EC%97%B0%EC%82%B0#s-2.2">https://namu.wiki/w/%EB%85%BC%EB%A6%AC%20%EC%97%B0%EC%82%B0#s-2.2</a>
<a href="https://blog.naver.com/highkrs/220646655792">https://blog.naver.com/highkrs/220646655792</a>
<a href="https://www.youtube.com/watch?v=5vnC07bQ0uo&amp;t=568s">https://www.youtube.com/watch?v=5vnC07bQ0uo&amp;t=568s</a></p>
</blockquote>
<h3 id="번외로">번외로,,</h3>
<p><strong>비트연산자와 논리연산자는 다르다.</strong> 가끔 <strong>&#39;&amp;&#39;</strong>이거랑 <strong>&#39;&amp;&amp;&#39;</strong>를 똑같다고 생각하는 친구들이 있던데, <strong>&#39;&amp;&#39;를 사용하면 비트를 반환</strong>하고, <strong>&#39;&amp;&amp;&#39;를 사용하면 참 또는 거짓을 반환</strong>한다.</p>
<h3 id="마치며">마치며,,</h3>
<p>이 글은 내가 인터넷을 통해 조사하고 이해한 후 작성한 것이므로, 잘못된 부분이 있을 수 있다. 댓글로 잘못된 부분을 지적해주면 수정하도록 하겠다.</p>
<p>최대한 어려운 부분 다빼고 설명해서 이해가 안될수도 있다. 보충할 점이나 궁금한 점이 있다면 댓글로 알려준다면 더 자세히 설명해 보겠다.. 2의 보수에 관한 점은 시간이 된다면 따로 다뤄보도록 하겠다. 그리고 진짜 열심히 적었다,, 특히 그림 그리는거 제일 오래걸림,,</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 아니, Casting이 Conversion이 도대체 뭐가 다른건데? (자료형의 변신은 무죄!)]]></title>
            <link>https://velog.io/@hyun_731/Casting-Conversion</link>
            <guid>https://velog.io/@hyun_731/Casting-Conversion</guid>
            <pubDate>Tue, 14 Jan 2025 06:59:39 GMT</pubDate>
            <description><![CDATA[<h3 id="✋들어가기전">✋들어가기전</h3>
<p>파이썬을 공부하다, 자료형(Datatype)을 공부하다가 아니? 이게 뭔가? Casting이랑 Conversion이 나왔는데 이게 도대체 먼 차이인지 모르겠는게 아닌가? 나같은 사람이 있을거 같아서 정리하기 위해 준비했다. 틀린 부분이나 피드백이 있다면 댓글로 알려주면 감사하겠다.</p>
<h3 id="자료형이란-무엇인가">자료형이란 무엇인가?</h3>
<p>Casting과 Conversion에 대해 알아보기 전 우리는 자료형의 기본개념을 알고 가야한다. </p>
<p><strong>자료형은 프로그래밍에서 변수의 성질을 명확히 하고, 잘못된 연산을 방지하기 위해 사용</strong>되어진다.</p>
<p>자료형(Data Type)은 프로그래밍 언어에서 변수에 저장할 수 있는 값의 종류를 정의한다. 예를 들어 정수형(int)는 숫자 값을 저장하며, 문자열(str)은 문자들을 저장한다. </p>
<blockquote>
<p>파이썬에서 사용되는 중요한 자료형들
<strong>정수(int) : 10, -100, 9와 같은 정수형 데이터를 나타낸다.
실수(float) : 0.7, 3.1와 같은 실수형 데이터를 나타낸다.
문자열(str) : &quot;Hello World!&quot;와 같이 문자들이 모인 데이터를 나타낸다.
불리언(bool) : True나 False같은 참과 거짓을 나타낸다.</strong></p>
</blockquote>
<h3 id="casting과-conversion의-차이점">Casting과 Conversion의 차이점</h3>
<h3 id="casting-명시적-형-변환">Casting (명시적 형 변환)</h3>
<p>프로그래머가 명시적으로 자료형을 변환하는 것이다.
예를 들어 아래의 코드를 살펴보자</p>
<pre><code>a = 10;
print(float(a));

출력 값 : 10.0</code></pre><p>위 코드와 같이 정수형 변수인 a를 float()를 통해 <strong>프로그래머가 a를 float로 형 변환한다고 명시</strong>하고있다.</p>
<h3 id="coversion-암시적-형-변환">Coversion (암시적 형 변환)</h3>
<p>파이썬 인터프리터가 자동으로 자료형은 변환하는 것이다.
예를 들어 아래의 코드를 살펴보자</p>
<pre><code>a = 20;
b = 1.0;
print(a+b);

출력 값 : 21.0</code></pre><p>위와 같이 <strong>정수형 데이터를 가진 a</strong>와 <strong>실수형 데이터를 가진 b</strong>를 더하면 <strong>따로 명시하지 않아도 자동으로 파이썬 내부에서 실수형으로 변환</strong>된다. (추가로 실수형은 정수형보다 더 큰 저장범위를 갖기 때문에 실수형으로 변환된다.)</p>
<h3 id="결론">결론</h3>
<p>따라서 Casting과 Conversion의 차이점은</p>
<blockquote>
<p><strong>Casting은 직접적으로 변환하라고 요구하는 것이고, 
Conversion은 사용자가 따로 요구하지 않아도 자동으로 변환되는 것이다.</strong></p>
</blockquote>
<h3 id="마치며">마치며,,</h3>
<ul>
<li>생각보다 안어렵네 <del><em>(한줄 요약) Conversion : 자동 Casting : 수동</em></del><h4 id="글을-다-적고나서-보니-쉽게-설명해줬다기-보단-자료를-조사한-그대로인거-같아서-불만족스럽다">+글을 다 적고나서 보니 쉽게 설명해줬다기 보단 자료를 조사한 그대로인거 같아서 불만족스럽다.</h4>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[C] 전역 변수 배열? 
 (C언어의 메모리 구조를 쉽게 배워보자!)]]></title>
            <link>https://velog.io/@hyun_731/C-%EC%A0%84%EC%97%AD-%EB%B3%80%EC%88%98-%EB%B0%B0%EC%97%B4-C%EC%96%B8%EC%96%B4%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0%EB%A5%BC-%EC%89%BD%EA%B2%8C-%EB%B0%B0%EC%9B%8C%EB%B3%B4%EC%9E%90</link>
            <guid>https://velog.io/@hyun_731/C-%EC%A0%84%EC%97%AD-%EB%B3%80%EC%88%98-%EB%B0%B0%EC%97%B4-C%EC%96%B8%EC%96%B4%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0%EB%A5%BC-%EC%89%BD%EA%B2%8C-%EB%B0%B0%EC%9B%8C%EB%B3%B4%EC%9E%90</guid>
            <pubDate>Sat, 07 Dec 2024 12:56:40 GMT</pubDate>
            <description><![CDATA[<h3 id="✋-들어가기전">✋ 들어가기전</h3>
<p>가끔 알고리즘 풀이를 보다보면 배열을 전역 변수에 선언해두는 경우가 종종 있다. 그 이유를 파해쳐보자. 틀린 부분이나 피드백이 있다면 댓글로 알려주면 감사하겠다.</p>
<h3 id="🎬사건의-발달">🎬사건의 발달</h3>
<p>나는 최근 알고리즘 문제를 풀다가 의문점을 발견했다. 아래의 두 코드를 확인해보자.</p>
<pre><code>//첫번째 코드
#include &lt;stdio.h&gt;

int main(){
    int a[2001][2001] = {0,};
    printf(&quot;%d&quot;,a[0][0]);
}

//실행 결과 : 없음.</code></pre><pre><code>//두번째 코드
#include &lt;stdio.h&gt;

int a[2001][2001];

int main(){
    printf(&quot;%d&quot;,a[0][0]);
}

//실행 결과 : 0</code></pre><p>위 두 코드에 차이점을 알겠는가? 그렇다.
첫번째 코드에선 배열 a를 <strong>지역 변수</strong>로 선언했고.
두번째 코드에선 배열 a를 <strong>전역 변수</strong>로 선언했다.</p>
<h4 id="두번째-코드는-정상작동-되는데-첫번째-코드를-작동이-안되는-이유는-무엇일까-그-이유를-알기-위해선-c언어의-메모리-구조를-알아야-한다">두번째 코드는 정상작동 되는데 첫번째 코드를 작동이 안되는 이유는 무엇일까? 그 이유를 알기 위해선 <strong>C언어의 메모리 구조</strong>를 알아야 한다.</h4>
<h2 id="💾-c언어의-메모리-구조">💾 C언어의 메모리 구조</h2>
<p><img src="https://velog.velcdn.com/images/hyun_731/post/563c54bc-692c-41c3-8911-6080c7068920/image.png" alt="">
<strong><del>직접 만듬 ㅎ,</del></strong></p>
<h3 id="코드-영역">코드 영역</h3>
<p><strong>코드 영역(텍스트 영역)</strong>은 우리가 작성한 소스 코드가 실행되는 공간이다. CPU는 코드 영역에 있는 코드들을 하나씩 수행한다.</p>
<h3 id="데이터-영역">데이터 영역</h3>
<p>데이터 영역에는 <strong>전역 변수</strong>와 <strong>정적 변수</strong>가 저장된다. 데이터 영역은 프로그램이 시작할 때 할당되며, 종료될 때까지 존재한다.</p>
<h3 id="힙heap-영역">힙(Heap) 영역</h3>
<p>힙 영역은 개발자가 직접 동적으로 <strong>메모리 할당하고 해지</strong>하는 공간이다. 힙 영역은 메모리의 낮은 주소에서 높은 주소 방향으로 할당된다. 또한 <strong>스택 영역과 Free Store 공간을 공유</strong>한다.</p>
<h3 id="스택stack-영역">스택(Stack) 영역</h3>
<p>지역 변수와 함수 매개변수가 저장되는 공간이다. 스택 영역은 <strong>함수가 호출될 때마다</strong> 생성되며, 함수 호출이 끝나면 해당 프레임이 사라진다. 스택은 <strong>후입선출(LIFO)</strong> 방식으로 동작한다. 또한 <strong>힙 영역과 Free Store 공간을 공유</strong>한다. 스택 영역은 메모리의 높은 주소에서 낮은 주소 방향으로 할당된다.</p>
<blockquote>
<p><strong>프로그램의 실행순서</strong> </p>
</blockquote>
<ol>
<li>프로그램 실행이 시작되면 텍스트 영역에 있는 코드가 실행된다.</li>
<li>프로그램에서 사용되는 전역 변수와 정적 변수는 데이터 영역에 저장되고, 초기화되지 않은 변수는 BSS 영역에 저장된다.</li>
<li>함수 호출 시 스택 영역에 지역변수와 매개변수가 저장되며, 함수 호출이 끝나면 스택에서 해당 프레임이 제거된다.</li>
<li>동적 메모리 할당은 힙 영역에서 이루어지며, 메모리 해제는 개발자가 직접 관리해야한다.</li>
</ol>
<blockquote>
<p>** <em>참고*</em> BSS 영역이란? 
ㅤㅤㅤ초기화되지 않은 전역 변수와 정적 변수를 저장하는 메모리 영역이다.
ㅤㅤㅤ이 영역에 저장된 변수들은 자동으로 0으로 초기화된다.</p>
</blockquote>
<p>이제 대충 이해가 되었는가? 그렇다면 다시 코드를 살펴보자.</p>
<pre><code>//첫번째 코드
#include &lt;stdio.h&gt;

int main(){
    int a[2001][2001] = {0,}; //지역 변수 스택 영역에 할당됨
    printf(&quot;%d&quot;,a[0][0]);
}

//실행 결과 : 없음.</code></pre><pre><code>//두번째 코드
#include &lt;stdio.h&gt;

int a[2001][2001]; //전역 변수 데이터 영역에 할당됨

int main(){
    printf(&quot;%d&quot;,a[0][0]);
}

//실행 결과 : 0</code></pre><h3 id="첫번째-코드의-문제점">첫번째 코드의 문제점</h3>
<p>첫번째 코드에서 배열 a는 지역변수로 선언되었고, 스택 영역에 할당된다. 배열 a[2001][2001]은 매우 큰 크기를 가지므로 스택 메모리의 크기를 초과하여 스택 오버플로우가 발생할 수 있다. 즉, 스택 공간이 부족하여 프로그램이 실행되지 않게 된다.</p>
<h3 id="두번째-코드는-정상-작동">두번째 코드는 정상 작동!</h3>
<p>두번째 코드에서 배열 a는 전역 변수로 선언되었고, 데이터 영역에 할당된다. 전역 변수는 프로그램이 시작될 때 메모리가 할당되며, 초기화되지 않은 전역 변수는 BSS 영역에 저장된다. 이 변수는 자동으로 0으로 초기화되기 때문에 a[0][0]의 값이 0으로 출력된다.</p>
<p><strong>따라서 배열을 전역 변수로 선언하면 자동으로 초기화도 해주고, 값도 더 크게 사용할 수 있다!
<em><del>근데 그렇다고 사용하는 배열 전부다 전역에 두는 짓은 하지 말기</del></em></strong> 
왜냐하면 디버깅이나 유지보수가 어려워질 수 있다. 그러므로 전역 변수를 최소화하고 필요한 경우에만 사용하는 것이 좋다.</p>
<h3 id="결론">결론</h3>
<ol>
<li><p>지역변수 배열은 스택 영역에 할당되므로 메모리 공간이 제한적이다. 너무 큰 배열을 스택에 할당하면 스택 오버플로우가 발생할 수 있다.</p>
</li>
<li><p>전역 변수 배열은 데이터 영역에 할당되므로 더 큰 배열을 사용할 수 있고, 초기화되지 않으면 자동으로 0으로 초기화된다.</p>
</li>
<li><p>전역 변수를 사용할 때는 메모리 공간을 충분히 확보할 수 있지만, 전역 변수의 과도한 사용은 프로그램을 복잡하게 만들 수 있으므로 최소화해야 한다.</p>
</li>
</ol>
<blockquote>
<p>참고한 글들
<a href="https://kyoun.tistory.com/34">https://kyoun.tistory.com/34</a>
<a href="https://iyk2h.tistory.com/100">https://iyk2h.tistory.com/100</a>
<a href="https://all-young.tistory.com/17">https://all-young.tistory.com/17</a></p>
</blockquote>
<h3 id="마치며">마치며,,</h3>
<p>이 글은 내가 인터넷을 통해 조사하고 이해한 후 작성한 것이므로, 잘못된 부분이 있을 수 있다. 댓글로 잘못된 부분을 지적해주면 수정하도록 하겠다. (힘들게 썻다,, 좋아요 좀 눌러주라 ㅠㅠㅠ) 그 밖에도 궁금한게 있다면 <del><em><strong>알아서 찾아봐라</strong></em></del></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[C] 문자열, 너 도대체 누구니?]]></title>
            <link>https://velog.io/@hyun_731/C-%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84-%EC%9E%85%EB%A0%A5-%EB%B0%9B%EC%95%84%EB%B3%B4%EC%9E%90</link>
            <guid>https://velog.io/@hyun_731/C-%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84-%EC%9E%85%EB%A0%A5-%EB%B0%9B%EC%95%84%EB%B3%B4%EC%9E%90</guid>
            <pubDate>Wed, 20 Nov 2024 12:12:28 GMT</pubDate>
            <description><![CDATA[<h3 id="✋-들어가기전">✋ 들어가기전</h3>
<p>내가 이 글을 쓰는 이유는 <strong><del>코딩테스트에서 문자열 입력 받는걸 까먹어버려 문제를 풀지 못한게 한</del></strong>이 되어 리마인드겸 기록을 위해 작성했다.
틀린 부분이나 피드백이 있다면 댓글로 알려주면 감사하겠다.</p>
<h3 id="🤔-char-자료형">🤔 char 자료형?</h3>
<p>문자열에 대해 알아보기 위해선 우선 <strong>char(Character)</strong>에 대해 알아볼 필요가 있다.</p>
<p><strong>C언어에서 char은 1Byte의 공간을 할당 받으며 문자를 저장하기 위해 사용이 된다. 서식지정자는 %c 이다</strong>
근데 말만 문자를 저장하는 공간이지 <strong>사실상 1Byte짜리 정수형 변수</strong>이다. 근데 이제 문자를 표현하는 능력을 곁들인,,
즉 표면적으로는 문자로 표현되지만 내부에서는 숫자로 처리되어진다는 말이다.</p>
<p>대표적으로 사용되는 예가 아스키 코드가 있다.</p>
<h3 id="🥱-그래서-문자열-그게-뭔데">🥱 그래서 문자열? 그게 뭔데?</h3>
<p>영어로는** STRING<strong>, 정의는 **&quot;문자들을 나열하여 하나로 묶은 대상&quot;</strong> 이다.</p>
<p><strong>??? : 어 그러면 문자열을 받을려면 char 자료형인 변수를 사용하면 되겠네?</strong></p>
<p>반은 맞고 반은 틀리다. char형 변수가 문자를 받는건 맞다. 
그런데 이 글의 목적은 무엇인가? <strong>&#39;문자열&#39;</strong>을 받는 것이다.</p>
<p>아래의 코드를 살펴보자</p>
<pre><code>#define _CRT_SECURE_NO_WARNINGS
#include &lt;stdio.h&gt;

int main() {
    char a; //char형 a라는 변수 생성
    scanf(&quot;%c&quot;, &amp;a); //INPUT
    printf(&quot;%c&quot;, a); //OUTPUT
}</code></pre><p>이 코드에서 만약 &quot;abc&quot; 라고 넣으면 어떻게 출력이 될까?
아마 아래와 같이 출력 될 것이다.</p>
<pre><code>INPUT : abc
OUTPUT : a</code></pre><p>왜냐? char형 변수는 &#39;문자&#39;를 저장하니까.</p>
<p><strong>??? : 그러면 &#39;문자열&#39;은 어떻게 입력 받는데?</strong></p>
<p>간단하다 그냥 char형 배열을 만들어 주고 서식지정자를 %s로 바꾸어 주면 된다.</p>
<p>아래의 코드를 살펴보자</p>
<pre><code>#define _CRT_SECURE_NO_WARNINGS
#include &lt;stdio.h&gt;

int main() {
    char a[10]; //a라는 10개의 char 변수를 저장할 수 있는 배열 생성
    scanf(&quot;%s&quot;, a); //INPUT
    printf(&quot;%s&quot;, a); //OUTPUT
}</code></pre><p>위 코드에서 &#39;abc&#39;를 넣어보면?</p>
<pre><code>INPUT : abc
OUTPUT : abc</code></pre><p>입력 받은 &#39;abc&#39;가 정상적으로 출력이 된다!</p>
<p>다만 scanf(&quot;%s&quot;, (배열 명)); 은 <strong>첫번 째 공백을 기준으로 나누기 때문에 이 점을 유의</strong> 해야한다. 예를 들어 &#39;Hello world&#39;를 입력하면 &#39;Hello&#39; 만 들어간다.</p>
<p>만약 띄어쓰기도 포함하고 싶으면 아래의 함수를 사용하자
<strong>fgets(배열명,길이(5글자 입력받고 싶으면 6으로),stdin);</strong>
공백 포함 입력 가능 ⇒ 줄바꿈 포함,문자열 끝에 자동으로 NULL 문자 추가됨
근데 길이가 배열의 크기를 넘어가면 어떻게 될까?
-&gt; <strong>배열의 크기를 넘어버리면 배열의 공간을 넘어서서 다른 메모리를 침범 할 수 있으니 조심하자
(버퍼 오버플로우)</strong>
가능하면 그냥 <strong>fgets(배열명,sizeof(배열명),stdin);</strong> 이렇게 쓰자.</p>
<p>결론은 문자열을 입력 받기 위해서는 <strong>char형 배열을 만들고 서식지정자를 %s</strong>로 바꿔주면 된다!</p>
<h3 id="️-이제-문자열을-이용하면서-중요한-null-문자에-대해-알아보자">‼️ 이제 문자열을 이용하면서 중요한 NULL 문자에 대해 알아보자</h3>
<p>문자열을 입력받고 난 뒤에서는 &#39;\0&#39; (NULL 문자)가 항상 마지막 공간에 추가된다. 그러므로 내가 a라는 배열에 &#39;abc&#39;를 저장하고 싶다면 배열을 선언 할때 
<strong>char a[&#39;들어가는 문자의 갯수 + 1&#39;]; 즉 char a[4]; 이런 식으로 선언</strong>을 해줘야 한다. 저렇게 선언 하지 않는 다면 에러가 뜬다. </p>
<p>그러므로 이 NULL 문자는 <strong>문자열의 끝을 알리고 구분</strong>할 수 있게 해주는 매우 중요한 친구이다.</p>
<p>+추가로 string.h 함수를 이용해 문자열의 길이를 strlen(&quot;배열 명&quot;)을 이용해 쉽게 구하는 등, 문자열을 사용하는데 여러 편한 기능들을 제공한다.
아래는 string.h에 있는 함수 목록이다.</p>
<blockquote>
<p><strong>strlen(배열명) → 문자열길이
strcpy(배열명 a, b) → b를 a에 복사
strcat(a,b) → b를 a에 이어 붙임 a의 길이가 커야함
strcmp(a,b) → 문자열 비교(같으면 0,틀리면 틀린 문자 - 틀린 문자) 
예 oranges orange → s - \0 = 115 반환</strong></p>
</blockquote>
<p>char a[10] = &quot;hyun&quot;;
이렇게 초기화를 한 후에
a = &quot;abcd&quot;;는 안됨 이럴 경우 strcpy를 통해 수정해야함</p>
<h3 id="마치며">마치며,,</h3>
<p>오늘은 이렇게 문자열에 대해 알아봤다. 아스키 코드에 대해선 나중에 하고 싶을 때 추가로 작성 하겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[부산 소마고를 준비하며]]></title>
            <link>https://velog.io/@hyun_731/%EB%B6%80%EC%82%B0-%EC%86%8C%EB%A7%88%EA%B3%A0%EB%A5%BC-%EC%A4%80%EB%B9%84%ED%95%98%EB%A9%B0</link>
            <guid>https://velog.io/@hyun_731/%EB%B6%80%EC%82%B0-%EC%86%8C%EB%A7%88%EA%B3%A0%EB%A5%BC-%EC%A4%80%EB%B9%84%ED%95%98%EB%A9%B0</guid>
            <pubDate>Wed, 06 Nov 2024 11:50:19 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/hyun_731/post/896a2494-5976-4443-84c2-c2e31281bb9c/image.jpeg" alt=""> </p>
<h3 id="✋-들어가기-앞서">✋ 들어가기 앞서</h3>
<p>소마고를 준비했던 과정을 기록하고 나중에 소마고를 준비하는 학생들이 이 글을 보고 도움이 되었으면 하는 마음이다. 다른 내용들은 입학하며 채울 예정이다.</p>
<h3 id="💻-개발자를-꿈꾸게-된-과정">💻 개발자를 꿈꾸게 된 과정</h3>
<p>어릴때 부모님의 권유로 블럭코딩을 접했다. 그 과정에서 내가 생각하던 것들을 컴퓨터 화면속에 표현할 수 있다는게 되게 매력적으로 느껴졌고 그렇게 중학교에 올라와 텍스트 코딩과 알고리즘을 공부하며 개발자가 되고자 마음 먹게 되었다.</p>
<h3 id="🏫-부산소마고를-접하게-된-계기">🏫 부산소마고를 접하게 된 계기</h3>
<p>중학교 1학년, 코딩에 재미를 붙이고 한창 문제를 풀때였다. 개발자가 빨리 되고 싶었던 나는 코딩 관련 학교를 찾아보며 부산소프트웨어마이스터고라는 학교를 발견하게 되었다. 때마침 아는 형이 부산소마고를 간다는 걸 듣게 되었고 학교에 대해 알아봤다. 사실 중학교 3학년 2학기 전까진 부산소마고에 갈려는 생각은 없었다. 왜냐하면 마이스터고를 간다면 졸업 후 3년 동안 대학을 못가기 때문이다. 하지만 중학교 3학년 2학기에 올라와서 진지하게 진로에 대해 생각하게 되었고 개발자가 되기로 마음먹으며, <strong>인문계가서 관심없는 공부를 할바에 차라리 내가 좋아하는 걸 공부하자고 생각</strong>하며 부소마고를 준비하게 되었다.</p>
<h3 id="😓-입학-준비">😓 입학 준비</h3>
<p>조금 늦게 입학하기로 마음을 먹은 나는 급하게 학업계획서와 자기소개서를 준비했다. 다행히 평소에도 좋은 성적을 유지 했었기에 성적은 별로 문제가 되지 않았고 여러 동아리 활동과 학생회장을 했기 때문에 학업계획서와 자기소개서 내용 적는것도 힘들진 않았다. 그렇게 매일 자기소개서와 학업계획서를 준비하고 고치며 입학원서 내기 하루 전날 완성했다. </p>
<p>원서를 내고 나서는 <strong>NCS, 면접, 코딩테스트</strong>를 준비했다.</p>
<blockquote>
<p><strong>NCS</strong>는 <strong>준비할 필요가 없는거 같다.</strong> 실제로 나도 하루하고 안했다.</p>
</blockquote>
<blockquote>
<p><strong>코딩테스트</strong>는 나는 딱히 어렵지 않았지만 어려워하는 애들이 대다수 였을것 같았다. 첫번째 두번째 세번째 문제까지는 코딩을 조금 배워도 풀수있을 난이도 였지만 <strong>네번째 다섯번째 문제는 2~3개월 코딩 배워서 풀 수 있는 난도는 아니였다.</strong> 특히 4번 문제는 아스키코드를 활용하는 문제 였던거 같은데 솔직히 아스키 코드 알고 있으면 쉬운 문제지만, 나는 아스키 코드를 알고 있음에도 불구하고 순간적으로 문자열 입력 받는걸 까먹어서 못풀었다... 만약 코딩 테스트를 본다면 <strong>코드업의 기초 100제</strong> 풀 정도로 공부하면 걱정 없을것 같다. 나는 그냥 안하고 테스트 봤다.</p>
</blockquote>
<blockquote>
<p><strong>면접</strong>은 제일 많이 준비했던것 같다. 나는 말을 빨리하는 편이라 말 속도 조절 연습 또한 했고 선생님들과 처음 모의 면접을 볼 땐 다리를 떨고 손가락을 꼼지락거리는 등 엉망진창이였다. 하지만 선생님들의 피드백을 빠르게 받아들였고 말 속도와 시선처리 등 많은 부분들을 개선했다. 면접을 준비 할때 가장 중요한것은 어떤 질문이 나와도 침착하게 대응할 수 있는 <strong>능력을 기르는 것과 내 생각을 잘 전달 할 수 있는것 그리고 모의면접을 많이 해보는 것</strong>이라고 생각한다. 연습 할 땐 예상 면접 질문을 만들며 연습하면 된다. (참고로 나는 예상 면접 질문 20개 중에서 비슷한 질문 한개 나왔다.)</p>
</blockquote>
<h3 id="✅-1차-합격">✅ 1차 합격</h3>
<p>떨리는 마음으로 1차 합격 결과를 기다렸다. 매일 부산소마고 관련 영상들을 보고 내가 입학 했을때의 미래를 생각했다. 결과발표 당일날 학교에서 선생님 노트북으로 결과 확인을 누르고 1차 합격 메세지를 보고 되게 기뻤다.</p>
<h3 id="✅-2차-합격">✅ 2차 합격</h3>
<p>2차 보러 가기 전까지 면접 준비를 하며 보냈고 2차 면접 당일에는 그냥 학교를 안간다는게 그냥 되게 신났다. 복장은 학교 교복을 입고 갔고, 교실에 입실 한 후 먼저 코딩테스트를 본 후 그 다음으로 NCS를 했는데 시간이 엄청 부족하다. 그리고 점심시간에 밥을 먹고 <strong>(점심시간에 밥을 안주니 챙겨와야 한다.)</strong> 면접을 볼땐 <strong>두개의 교실을 들어갔는데 처음엔 4가지 질문에 대해 15분? 정도 구상 시간을 주고 한 교실당 2개의 질문 씩 1분 30초 동안 답변 하는거였다.</strong> 질문은 대충 예상한 느낌에 질문과 비슷하게 나와서 침착하게 내 생각을 전했다. 기다리는건 엄청 오래 기다렸던거 같은데 막상 면접은 빠르게 끝났다. 그 이후 신체 검사를 하고 만두와 우유를 받았다. 그리고 같이 지원한 친구와 함께 집으로 갔다. 그리고 대망의 결과발표 당일 때마침 결과 나오는 시간에 담임쎔 수업이였고 화면을 키고 친구들에게 응원을 받으며 결과 버튼을 눌렀고 합격이란걸 알게되자 소리질렀다. 교장 교감선생님도 축하해 주셨다. 2차 결과 볼때 처음에는 긴장되지 않았던거 같은데 근데 막상 5분 남으니까 되게 긴장됐다. 거기에 친구의 합격 소식도 들으며 더 기뻐했다.</p>
<h3 id="마치며">마치며...</h3>
<p>만약 소마고에 들어오고 싶은데 성적이 안될거 같거나 고민이 된다면 일단 넣고 한번 도전 해봤으면 좋겠다. 나 또한 고민 했지만 열심히 준비하고 들어오고자 하는 마음이 간절하니 붙었다. 이 글을 읽고 있는 당신도 할 수 있을 것이다.</p>
<blockquote>
<p><em><strong>해보지 않고는 당신이 무엇을 해낼 수 있는지 알 수 없다. 
    ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ- 프랭클린 아담</strong></em></p>
</blockquote>
]]></description>
        </item>
    </channel>
</rss>