<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>co_joyau.log</title>
        <link>https://velog.io/</link>
        <description>신기술 조아</description>
        <lastBuildDate>Fri, 30 Dec 2022 10:08:14 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>co_joyau.log</title>
            <url>https://velog.velcdn.com/images/co_joyau/profile/02384de3-db14-47c9-b357-7ee261a861c6/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. co_joyau.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/co_joyau" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[숫자 추측 게임 만들기 - Random, While, If 메소드 활용]]></title>
            <link>https://velog.io/@co_joyau/%EC%88%AB%EC%9E%90-%EC%B6%94%EC%B8%A1-%EA%B2%8C%EC%9E%84-%EB%A7%8C%EB%93%A4%EA%B8%B0-Random-While-If-%EB%A9%94%EC%86%8C%EB%93%9C-%ED%99%9C%EC%9A%A9</link>
            <guid>https://velog.io/@co_joyau/%EC%88%AB%EC%9E%90-%EC%B6%94%EC%B8%A1-%EA%B2%8C%EC%9E%84-%EB%A7%8C%EB%93%A4%EA%B8%B0-Random-While-If-%EB%A9%94%EC%86%8C%EB%93%9C-%ED%99%9C%EC%9A%A9</guid>
            <pubDate>Fri, 30 Dec 2022 10:08:14 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>컴퓨터가 생성한 랜덤 숫자를 사용자가 맞추는 게임을 만들어보자.</strong></p>
</blockquote>
<h1 id="a-숫자-추측-게임----컴퓨터가-생성한-랜덤-숫자-맞히기">a. 숫자 추측 게임 -  컴퓨터가 생성한 랜덤 숫자 맞히기</h1>
<p>1) 1~100의 숫자 중 하나를 랜덤하게 생성하고 
2) 사용자가 예상하는 숫자를 입력하면
3) 사용자가 입력한 숫자가 컴퓨터가 생성한 숫자보다 큰지, 작은지, 같은지를 알려준다. 
4) 사용자가 랜덤하게 생성된 숫자와 같은 숫자를 입력하면 프로그램이 종료된다.</p>
<p>이를 위해서, random 모듈을 import하고 random.randrange() 메소드를 사용했다.</p>
<pre><code class="language-python">import random

intRandom = random.randrange(0,101)

while True:
    userInput = int(input(&#39;👇 Guess the number! \nEnter a number from 0 to 100:&#39;))
    if(userInput &lt; intRandom):
        print(&#39;HIGHER. Try again!&#39;)
    elif(userInput &gt; intRandom):
        print(&#39;LOWER. Try again!&#39;)
    else:
        print(&#39;YOU WIN.&#39;)
        break</code></pre>
<p>처음에는 사용자가 입력한 숫자가 컴퓨터 숫자보다 작으면, LOWER가 뜨고, 반대의 경우에는 HIGHER가 출력되도록 코드를 짰다.</p>
<p>그런데, 전자의 경우, 사실 사용자가 입력한 것이 작으면 더 큰 숫자를 다시 입력해야 하니깐, HIGHER를 출력해서, 사용자가 더 큰 숫자를 입력하기 쉽도록 유도하는 방향으로 코드를 수정했다.</p>
<p>이게 맞는 것인지는 모르겠지만, 직관적으로 볼 때, 출력된 문장에 따라서 바로 다시 숫자를 입력하기 용이한 것 같아서 이 코드가 실제로 코드를 실행하고 게임할 때 더 편한 것 같다. </p>
<h3 id="출력결과">출력결과</h3>
<p><img src="https://velog.velcdn.com/images/co_joyau/post/7b4841e6-e3a4-49f4-81da-32845b5038d3/image.png" alt=""></p>
<h1 id="b-숫자-추측-게임---컴퓨터가-사용자가-생각한-숫자-맞히기">b. 숫자 추측 게임 - 컴퓨터가 사용자가 생각한 숫자 맞히기</h1>
<p>게임[a]와 정반대로 이번 게임은 사용자가 생각한 숫자를 컴퓨터가 맞히는 게임이다. </p>
<p>1) 컴퓨터는 랜덤한 숫자를 출력하고 
2) 사용자는 그 숫자가 큰지, 작은지, 똑같은지에 대해서 입력한다. 
3) 컴퓨터가 사용자의 숫자를 맞히면 게임은 종료된다. </p>
<h2 id="첫-번째-코드">첫 번째 코드</h2>
<pre><code class="language-python">import random

intRandom = random.randrange(0,100)

print(&#39;Choose one number from 0 to 100 and make the computer guess. \nIf computer\&#39;s number is corret: type 1. \nif computer\&#39;s number is lower: type 0 \nif computer\&#39;s number is higher: type 2\n&#39;)

while True:
    print(&#39;Am I right?:&#39;,intRandom)
    userInput = int(input(&#39;Is the number correct?:&#39;))
    if (userInput == 0 or userInput == 2):
        print(random.randrange(0,100))
    elif(userInput == 1):
        print(&#39;I am a genius!&#39;)
        break</code></pre>
<p>이 코드에서는 랜덤하게 숫자가 나오지 않고 <U><strong>한 번 생성된 숫자만 계속해서 출력</strong></U>되었다. 이 점을 수정하고자 두 번째 코드를 만들었다.</p>
<h2 id="두-번째-코드">두 번째 코드</h2>
<pre><code class="language-python">import random

print(&#39;Choose one number from 0 to 100 and make the computer guess. \nIf computer\&#39;s number is corret: type 1. \nif computer\&#39;s number is lower: type 0 \nif computer\&#39;s number is higher: type 2\n&#39;)

while True:
    intRandom = random.randrange(0,100)
    print(&#39;Am I right?:&#39;,intRandom)
    userInput = int(input(&#39;Is the number correct?:&#39;))
    if (userInput == 0 or userInput == 2):
        continue
    elif(userInput == 1):
        print(&#39;I am a genius!&#39;)
        break</code></pre>
<h3 id="출력결과-1">출력결과</h3>
<p><img src="https://velog.velcdn.com/images/co_joyau/post/6454993f-8d97-4207-a9c5-4222f22b8dc1/image.png" alt=""></p>
<p>이 코드에서는 다행히 숫자가 계속해서 랜덤하게 생성되는 것을 확인할 수 있다. 그러나, 사용자가 입력한 값에 따라 추측하는 숫자를 up and down 해서 출력하는 역할을 하지 못한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[string method(스트링 메소드)를 이용해서 크리스마스 트리🎄 만들기(2) - 코드 간소화 + for문 활용]]></title>
            <link>https://velog.io/@co_joyau/string-method%EC%8A%A4%ED%8A%B8%EB%A7%81-%EB%A9%94%EC%86%8C%EB%93%9C%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4%EC%84%9C-%ED%81%AC%EB%A6%AC%EC%8A%A4%EB%A7%88%EC%8A%A4-%ED%8A%B8%EB%A6%AC-%EB%A7%8C%EB%93%A4%EA%B8%B02-%EC%BD%94%EB%93%9C-%EA%B0%84%EC%86%8C%ED%99%94-for%EB%AC%B8-%ED%99%9C%EC%9A%A9</link>
            <guid>https://velog.io/@co_joyau/string-method%EC%8A%A4%ED%8A%B8%EB%A7%81-%EB%A9%94%EC%86%8C%EB%93%9C%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4%EC%84%9C-%ED%81%AC%EB%A6%AC%EC%8A%A4%EB%A7%88%EC%8A%A4-%ED%8A%B8%EB%A6%AC-%EB%A7%8C%EB%93%A4%EA%B8%B02-%EC%BD%94%EB%93%9C-%EA%B0%84%EC%86%8C%ED%99%94-for%EB%AC%B8-%ED%99%9C%EC%9A%A9</guid>
            <pubDate>Fri, 30 Dec 2022 09:18:46 GMT</pubDate>
            <description><![CDATA[<p><a href="https://velog.io/@co_joyau/string-method%EC%8A%A4%ED%8A%B8%EB%A7%81-%EB%A9%94%EC%86%8C%EB%93%9C%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4%EC%84%9C-%ED%81%AC%EB%A6%AC%EC%8A%A4%EB%A7%88%EC%8A%A4-%ED%8A%B8%EB%A6%AC-%EB%A7%8C%EB%93%A4%EA%B8%B01"><code>지난 포스팅</code></a>에서 크리스마스 트리를 만들어봤다! </p>
<p>그런데, 반복문을 사용하기 전이라서 무려 13개의 print 함수를 만드는 노동을 했다. </p>
<p>for 문과 while문을 배운 이상, 크리스마스 트리를 더 이상 단순하게 만들 수 없어서 번에는 for문을 이용해서 간결한 코드를 작성해보았다. </p>
<h2 id="첫-번째-코드">첫 번째 코드</h2>
<pre><code class="language-python">tree = input(&#39;Enter &quot;*&quot; for tree: &#39;)
floor = input(&#39;Enter &quot;#&quot; for floor: &#39;)

for i in [1,3,5,7,9,11,13]:
    print((tree*i).center(30))
for j in [3,3,3]:
    print((floor*j).center(30))</code></pre>
<p>코드를 만들고 저번보다 더 큰 트리를 쉽게 만들어낼 수 있을것이라고 기대하고 대왕 트리를 출력하려고 보니, 리스트 부분에 숫자를 또 하나하나 추가해야 한다는 것을 깨달았다. 그래서 range의 특성을 이용해서 다시 한번 코드를 짜보았다.</p>
<h2 id="두-번째-코드">두 번째 코드</h2>
<pre><code class="language-python">tree = input(&#39;Enter &quot;*&quot; for tree: &#39;)
floor = input(&#39;Enter &quot;#&quot; for floor: &#39;)

for i in range(1,14,2):
    print((tree*i).center(30))
for i in range(3):
    print((floor*3).center(30))</code></pre>
<p>따단~ 이렇게 숫자 단 3개만 수정하면 원하는 트리를 만들어낼 수 있게 되었다.✨</p>
<h3 id="초대왕트리🎄">초대왕트리🎄</h3>
<p>기념으로, 초대왕 트리를 만들었다. 두 번째 코드 포맷에서 숫자들만 수정해주었다. </p>
<pre><code class="language-python">tree = input(&#39;Enter &quot;*&quot; for tree: &#39;)
floor = input(&#39;Enter &quot;#&quot; for floor: &#39;)

for i in range(1,100,2):
    print((tree*i).center(100))
for i in range(30):
    print((floor*10).center(100))</code></pre>
<p><img src="https://velog.velcdn.com/images/co_joyau/post/3c4e64d9-700b-49a2-9238-f3e444a984fa/image.png" alt=""></p>
<blockquote>
<h3 id="여전히-아쉬운-점">여전히 아쉬운 점</h3>
</blockquote>
<p>그런데 여전히 아쉬운 점이 존재한다. </p>
<p>1) 크리스마스 트리인만큼, 중간중간 장식이 들어가면 더 예쁠 것 같다.</p>
<p>2) 크리스마스 크기가 커질수록, center도 더 크게 조정해줘야 한다. 자동으로 크기에 맞게 center도 조정되는 코드를 만들고 싶다. 그런 코드가 반드시 존재할 거라고 생각한다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[string method(스트링 메소드)를 이용해서 크리스마스 트리🎄 만들기(1)]]></title>
            <link>https://velog.io/@co_joyau/string-method%EC%8A%A4%ED%8A%B8%EB%A7%81-%EB%A9%94%EC%86%8C%EB%93%9C%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4%EC%84%9C-%ED%81%AC%EB%A6%AC%EC%8A%A4%EB%A7%88%EC%8A%A4-%ED%8A%B8%EB%A6%AC-%EB%A7%8C%EB%93%A4%EA%B8%B01</link>
            <guid>https://velog.io/@co_joyau/string-method%EC%8A%A4%ED%8A%B8%EB%A7%81-%EB%A9%94%EC%86%8C%EB%93%9C%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4%EC%84%9C-%ED%81%AC%EB%A6%AC%EC%8A%A4%EB%A7%88%EC%8A%A4-%ED%8A%B8%EB%A6%AC-%EB%A7%8C%EB%93%A4%EA%B8%B01</guid>
            <pubDate>Wed, 28 Dec 2022 13:20:18 GMT</pubDate>
            <description><![CDATA[<h3 id="✨string의-method를-이용해서-크리스마스-트리를-만들어보자✨">✨string의 method를 이용해서 크리스마스 트리를 만들어보자!✨</h3>
<p>아래와 같은 크리스마스 트리를 사용자로부터 두 파라미터를 입력받아서 작성한다.</p>
<pre><code>              *
             ***
            *****
           *******
          *********
         ***********
             ###
             ###
             ###</code></pre><p>1) 사용자로부터 “*”와 “#”를 입력받아 사용할 수 있도록, input을 적용하여 코드를 짰다.
2) 각 파라미터가 중심에 올 수 있도록 string class의 center method를 사용했다.</p>
<pre><code class="language-python">tree = input(&#39;Enter &quot;*&quot; for tree: &#39;)
floor = input(&#39;Enter &quot;#&quot; for floor: &#39;)

print((tree*1).center(30))
print((tree*3).center(30))
print((tree*5).center(30))
print((tree*7).center(30))
print((tree*9).center(30))
print((tree*11).center(30))
print((floor*3).center(30))
print((floor*3).center(30))
print((floor*3).center(30))</code></pre>
<p>tree와 floor에 곱하는 숫자와 center의 숫자를 수정해서 자신의 원하는 트리로 재탄생시킬 수 있다. 
원한다면, <strong>정말 큰 대왕 트리</strong>도 만들 수 있을 것이다.🤩</p>
<hr>
<h4 id="추후-수정하고-싶은-부분">&lt;추후 수정하고 싶은 부분&gt;</h4>
<p>여러 줄로 이뤄진 크리스마스 트리를 생성하기 위해서 print를 총 9줄에 걸쳐서 사용했다. 때문에 코드가 매우 길고 지저분한 느낌이 든다. 다음에는 메소드를 이용해서 더 깔끔하게 작성해보고 싶다. 아마 for문을 사용해야 할 것 같은데 좀 더 공부해보고 해당 방법을 찾으면 2탄으로 돌아오겠다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[모듈이란? (나만의 모듈 생성 및 수정)]]></title>
            <link>https://velog.io/@co_joyau/%EB%AA%A8%EB%93%88%EC%9D%B4%EB%9E%80-%EB%AA%A8%EB%93%88-%EC%83%9D%EC%84%B1-%EB%B0%8F-%EC%88%98%EC%A0%95</link>
            <guid>https://velog.io/@co_joyau/%EB%AA%A8%EB%93%88%EC%9D%B4%EB%9E%80-%EB%AA%A8%EB%93%88-%EC%83%9D%EC%84%B1-%EB%B0%8F-%EC%88%98%EC%A0%95</guid>
            <pubDate>Wed, 28 Dec 2022 12:55:54 GMT</pubDate>
            <description><![CDATA[<h2 id="1-모듈이란">1. 모듈이란?</h2>
<p>모듈은 파일의 모음이다. </p>
<p>생성한 함수를 파일로 저장한 뒤에 import 뒤에 모듈을 입력하여 사용해서 불러들여서 사용할 수 있다.</p>
<p>예시) </p>
<pre><code class="language-python">import math</code></pre>
<h2 id="2-모듈-사용법">2. 모듈 사용법</h2>
<p>가장 대표적인 모듈은 math이다.
math 모듈 안에는 여러 함수가 존재한다.
<a href="https://docs.python.org/3/library/math.html">이곳</a>에는 math안에 존재하는 여러 함수와 기능이 정리되어 있다.</p>
<p>math의 함수들 중에서 제곱근(sqrt)를 사용해보자.
모듈 뒤에 “.”을 찍고 함수명을 작성한 뒤 괄호 안에 계산하고 싶은 파라미터를 입력하면 계산값이 나온다.</p>
<pre><code class="language-python">import math
math.sqrt(4)</code></pre>
<h3 id="21-모듈-속-함수-불러오기">2.1 모듈 속 함수 불러오기</h3>
<p>모듈에서 함수나 기능을 하나만 불러올 수도 있지만, 여러개를 불러오거나 전체를 불러올수도 있다.</p>
<p>from <code>모듈</code> import <code>함수, 기능</code></p>
<ul>
<li>from <code>모듈</code> import <code>*</code> → 전체 다 불러오기</li>
<li>from <code>모듈</code> import <code>a, b</code> → 한 번에 쉼표를 이용해서 여러 개 호출 가능</li>
</ul>
<blockquote>
<h4 id="참고-이미-정해진-모듈-안의-기능들을-바꿀려고-하지-말아야-한다">&lt;참고&gt; 이미 정해진 모듈 안의 기능들을 바꿀려고 하지 말아야 한다!</h4>
</blockquote>
<p>예를 들어서, math.pi는 <code>3.141592653589793</code> 이라는 값인데, “math.pi = 3.14” ← 이런 식으로 재지정해서는 안된다는 것이다. </p>
<h3 id="22-나만의-모듈-만들기">2.2 나만의 모듈 만들기</h3>
<p>다른 사람들이 만들어놓은 모듈 뿐만 아니라, 본인이 직접 모듈을 생성해서 활용할 수도 있다. </p>
<p>1) 모듈 파일을 생성하고 <code>.py</code> 확장자로 저장하기
2) import 하기 (.py 전의 이름까지만 작성하면 됨)</p>
<p>예시) 내가 만든 모듈명 → temperature.py</p>
<pre><code class="language-python">import temperature
temperature.weather_calculator.(32)</code></pre>
<h3 id="23-모듈-수정-후-사용하기">2.3 모듈 수정 후 사용하기</h3>
<p>만약, 생성한 모듈 속의 내용을 수정했다면, reload 후 수정된 내용이 추가가 된다.</p>
<p>1) 모듈의 내용 수정하고 저장
2) import imp 입력
3) imp.reload(파일명)</p>
<p>예시)</p>
<pre><code class="language-python">import imp
imp.reload(temperature)</code></pre>
<blockquote>
<h4 id="참고-imp-서비스-종료">&lt;참고&gt; imp 서비스 종료</h4>
<p><img src="https://velog.velcdn.com/images/co_joyau/post/f8895445-0bd1-457e-9beb-5f4d951f3912/image.png" alt=""></p>
</blockquote>
<p>파이썬 홈피에 imp를 검색하면 이러한 글이 나오는 것을 확인할 수 있다.
imp기능이 파이썬 버전 3.12에 사라진다는 것인데 대신에 importlib를 사용할 수 있다.
아직은 3.11이 가장 최신이니(2022년 12월 기준), imp를 사용할 수는 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ip와 포트, 도커와 포트바인딩]]></title>
            <link>https://velog.io/@co_joyau/%ED%8F%AC%ED%8A%B8%EB%B0%94%EC%9D%B8%EB%94%A9</link>
            <guid>https://velog.io/@co_joyau/%ED%8F%AC%ED%8A%B8%EB%B0%94%EC%9D%B8%EB%94%A9</guid>
            <pubDate>Wed, 28 Sep 2022 14:16:30 GMT</pubDate>
            <description><![CDATA[<p>서버가 클라이언트에게 요청받은 데이터를 전달할 때 무수히 많은 컴퓨터들 중 과연 어떤 컴퓨터에, 그리고 컴퓨터 화면 내의 무수히 많은 네이버, 카톡, 구글 중 과연 어떤 곳에 데이터를 전달해야하는지 알 수 있을까요? </p>
<p>정답은 ip와 포트에 있습니다.</p>
<h1 id="ip주소와-port">ip주소와 port</h1>
<p>   ip는 쉽게 00동 00단지 00아파트, 포트는 아파트 호수라고 보면 됩니다.
인터넷이 요청받은 데이터를 컴퓨터에게 전달하기 위해서는 주소를 알아야 합니다. 우선 ip로 어떤 컴퓨터에서 보냈는지 확인한 후 더 세부적으로 그 컴퓨터 내에서도 네이버인지, 카톡인지, 크롬인지 등 어느 곳에서 데이터를 요청했는지를 알아야 합니다. 
   포트는 프로세스에 따라 다릅니다. 계속해서 주소로 예를 들자면, 카톡창은 101호, 구글독스창은 102호, 날씨창은 103호,,,인 것입니다. ip로 기기를 찾았다면 ip주소로 기기를 찾고, port 번호로는 데이터 요청했던 프로그램 찾아서 갖다주는 것입니다. 같은 기기 내에 여러 프로그램이 있는데 크롬이 요청한 데이터를 네이버에 주면 안되기 때문에 구분하기 위해서 포트 번호가 존재하는 것이죠.</p>
<h1 id="도커와-포트바인딩">도커와 포트바인딩</h1>
<p>   도커는 가상환경입니다. 즉 도커 컨테이너(=도커에서 실행 중인 프로그램)은 밖의 상황을 모릅니다. 그래서 도커 안의 프로그램 하나가 지가 1호실에 사는 줄 알고 있죠.</p>
<p>   근데 사실 제 컴퓨터에는 1호실, 2호실에 이미 카톡과 크롬이 살고 있습니다. 그리고 3호실에 도커가 들어가있는겁니다. 따라서 인터넷에서 제 도커컨테이너 속 프로그램에 데이터를 주려면, 컴퓨터 기준 1호실이 아니라 3호실에 데이터를 줘야합니다. </p>
<p>   그래서 포트 바인딩이 필요한 것입니다. 포트바인딩을 하게 되면 “도커 안에 있는 놈이 1호실에 데이터 주라고 하면, 내컴퓨터 1호실이 아니라 3호실로 데이터 던져주세요.&quot;라고 할 수 있는 것입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[터미널과 쉘]]></title>
            <link>https://velog.io/@co_joyau/%ED%84%B0%EB%AF%B8%EB%84%90%EA%B3%BC-%EC%89%98</link>
            <guid>https://velog.io/@co_joyau/%ED%84%B0%EB%AF%B8%EB%84%90%EA%B3%BC-%EC%89%98</guid>
            <pubDate>Wed, 28 Sep 2022 13:52:45 GMT</pubDate>
            <description><![CDATA[<h1 id="터미널">터미널</h1>
<h4 id="터미널의-목적">터미널의 목적</h4>
<ul>
<li>정보를 처리하는 것이 아니라 명령을 다른 시스템에 보내는 것</li>
</ul>
<h4 id="터미널의-작동-방식">터미널의 작동 방식</h4>
<ul>
<li>사용자에게 CLI를 제공하며 두 가지 업무 (1. 사용자로부터 커멘트 형태의 인풋을 받는다. 2. 스크린에 출력물을 표시한다.)</li>
</ul>
<h1 id="셸">셸</h1>
<p>터미널에서 명령을 작성한 후 Enter 키를 누르면 터미널은 해당 명령을 다른 프로그램으로 전달하여 사용자가 무엇을 하고 싶은지 파악하는데, 대부분의 경우 해당 프로그램은 셸로 OS의 외부 계층을 형성하여 다음과 같은 기능을 수행한다.</p>
<pre><code>1. 최종 사용자가 제공한 명령을 해석합니다.
2. 명령 구문을 확인한 다음 명령이 올바르게 사용되는지 여부를 확인합니다.
3. 모든 것이 맞다면 셸은 명령을 커널이 이해할 수 있는 형태로 변환하여 커널에 전달합니다.
4. 그렇지 않으면 오류 메시지를 반환합니다.
5. 이전 명령이 올바른지 여부에 관계없이 다음 명령을 기다리는 터미널에 $ 프롬프트가 나타납니다. 

</code></pre><p>셸이 사용자의 명령을 커널이 이해할 수 있는 형태로 변환하는 즉시 커널은 애플리케이션 소프트웨어와 장치 하드웨어와 상호 작용하는 OS 라이브러리와 장치 드라이버인 두 구성 요소의 도움을 받아 명령을 실행한다.</p>
<h1 id="결론">결론:</h1>
<p>“터미널이 TV라면 쉘은 방송이고, 우리가 TV를 켬과 동시에 방송이 송출되는 것과 같이 터미널이 실행됨과 동시에 쉘이 실행되어 명령을 입력할 수 있게 되는 것입니다.”</p>
<p>참고) 
<a href="https://velog.io/@cataiden/terminal-shell">https://velog.io/@cataiden/terminal-shell</a></p>
<p><a href="https://www.geeksforgeeks.org/what-is-terminal-console-shell-and-kernel/">https://www.geeksforgeeks.org/what-is-terminal-console-shell-and-kernel/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[가상머신과 도커]]></title>
            <link>https://velog.io/@co_joyau/%EA%B0%80%EC%83%81%EB%A8%B8%EC%8B%A0%EA%B3%BC-%EB%8F%84%EC%BB%A4</link>
            <guid>https://velog.io/@co_joyau/%EA%B0%80%EC%83%81%EB%A8%B8%EC%8B%A0%EA%B3%BC-%EB%8F%84%EC%BB%A4</guid>
            <pubDate>Tue, 27 Sep 2022 14:40:14 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요. 도커와 가상머신 비교 글을 작성해보려고 합니다.</p>
<h2 id="가상머신-vm---virtual-machine">가상머신 (VM - virtual machine)</h2>
<p>가상머신이 없고 하나의 OS만 있다면 하나의 컴퓨터로 더 다양한 어플리케이션을 활용할 기회가 사라지는 것이다. 가상 머신이 없던 시절에는 내 노트북이 윈도우면 리눅스를 사용하기 위해서는 다른 컴퓨터가 필요했을 것이다. 그러나 가상머신이 등장하면서 하나의 컴퓨터에 가상의 컴퓨터를 설치해서 여러 개의 OS를 사용할 수 있게 되었다. 그 중 하이퍼바이저 기반의 가상화가 가장 많이 이용되었다. 하이퍼바이저는 논리적으로 분할된 공간에서 VM 이라는 독립된 가상환경을 만들고 호스트 시스템에서 VM에 깔린 게스트OS를 구동 및 모니터링하는 역할을 한다. 간단히 정리해 본다면,</p>
<p>호스트 시스템 : 서버의 OS
게스트 OS : 가상머신의 OS
하이퍼바이저 : 게스트OS를 구동 및 모니터링</p>
<p>*OS는 소프트웨어 포스팅에서 다뤘다.</p>
<h2 id="도커-docker">도커 (Docker)</h2>
<p>가상머신과 도커의 가장 큰 차이는 게스트OS의 유뮤이다.</p>
<p>가상머신에는 호스트OS 말고도 게스트OS가 깔리게 된다. (윈도우가 호스트로 깔린 컴퓨터에서 우분투를 사용하고 싶을 때 까는 것과 같다.) 가상머신의 경우는 새로운 게스트OS에 자원을 할당하게 됨으로 자원이 고갈되거나 한 OS에 할당되는 자원이 적어지게 된다. 그러면 효율성이 적어지게 되고 무거워지게 될 것이다.</p>
<p>그런데 도커의 컨테이너는 게스트OS가 없다. 도커는 가상머신 자원의 비효율성 문제를 해결해 게스트OS가 아니라 호스트OS내에서 필요한 패키지만 존재한다면 컨테이너 구동이 가능하다. </p>
<p><img src="https://velog.velcdn.com/images/co_joyau/post/e6eba981-f13d-4e6a-885f-036a666f47c7/image.png" alt="">
위의 사진이 도커를 가장 잘 설명한 그림이라고 한다. VM의 경우는 하이퍼바이저 위에 게스트 OS가 설치되어있다. 예시를 들자면 원래 윈도우가 깔린 컴퓨터에 리눅스라는 게스트 OS를 설치한 것이다. 그런데 도커의 경우는 게스트OS가 설치되어있지 않는다. 그 이유는 도커의 컨테이너는 호스트OS의 커널을 공유하기 때문이다.</p>
<p>출처)
<a href="https://velog.io/@kdaeyeop/%EB%8F%84%EC%BB%A4-Docker-%EC%99%80-VM%EC%9D%98-%EC%B0%A8%EC%9D%B4">https://velog.io/@kdaeyeop/%EB%8F%84%EC%BB%A4-Docker-%EC%99%80-VM%EC%9D%98-%EC%B0%A8%EC%9D%B4</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로그램과 프로세스]]></title>
            <link>https://velog.io/@co_joyau/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EA%B3%BC-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4</link>
            <guid>https://velog.io/@co_joyau/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EA%B3%BC-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4</guid>
            <pubDate>Tue, 27 Sep 2022 14:03:44 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요. 이번엔 프로그램과 프로세스에 대해서 작성해보겠습니다.</p>
<p>프로그램은 사실 남녀노소 많이들 익숙한 단어라고 생각합니다. 프로세스의 경우는 영어 process의 뜻 자체가 실행하다는 것이니 뭔가를 실행하는 것이군!이라고 생각할 수 있습니다. 그러나 이것들이 정확히 무엇인지에 대해서 물어보거나 이 둘의 차이점을 설명하라고 하면 말을 못하게 됩니다. 그래서 제가 이해한대로 이 둘의 차이점을 설명해보고자 합니다.</p>
<h2 id="프로그램">프로그램</h2>
<p>먼저, 프로그램은 exe로 끝나는 실행파일입니다. 이전 포스팅에서 원시, 소스 파일의 경우는 컴파일러로 컴파일을 해 기계어로 변경해야 컴퓨터가 이해 가능하다고 했는데요. 컴파일이 된 파일이 exe로 끝나는 실행파일입니다. 이렇게 보면 (프로그램 = 컴파일된 실행파일)인 것 같네요?!</p>
<h2 id="프로세스">프로세스</h2>
<p>그리고 프로세스는 프로그램을 실행하는 주체입니다. 프로그램을 실행하기 위해 프로그램을 열게 되면 그것을 실행하도록 하는 것이 프로세스라는 겁니다.
그런데 하나의 프로그램에 여러 프로세스가 있을 수 있습니다.</p>
<p>제가 본 블로그에서는 한글을 예시로 들었습니다. 저는 크롬으로 예를 들까 합니다. 
<img src="https://velog.velcdn.com/images/co_joyau/post/7e845f3f-978b-450a-8255-cae055e08a32/image.png" alt=""></p>
<p>우리가 크롬을 실행하면 단 하나의 창만 사용하는 것이 아니라 여러 개의 창을 사용할 수 있습니다. 심지어 시크릿 모드라는 다른 모드의 창도 사용 가능하죠. 그런데 그것은 여러 프로그램이 돌아가고 있는 것이 아니라 하나의 프로그램에 여러 개의 프로세스가 작동되고 있는 것입니다. 프로그램이 실행되면 CPU에 올라가 실행되는 하나의 인스턴스가 프로세스인 것입니다. </p>
<p>잘못된 부분에 대한 지적 감사히 받겠습니다:)</p>
<p>참고)
<a href="https://jhnyang.tistory.com/6">https://jhnyang.tistory.com/6</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[소프트웨어]]></title>
            <link>https://velog.io/@co_joyau/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4</link>
            <guid>https://velog.io/@co_joyau/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4</guid>
            <pubDate>Tue, 27 Sep 2022 13:49:54 GMT</pubDate>
            <description><![CDATA[<p>컴퓨터는 하드웨어와 소프트웨어로 나뉩니다. 그 중에서 소프트웨어에 대해서 제가 배운 것을 작성해보겠습니다.</p>
<h2 id="소프트웨어-종류">소프트웨어 종류</h2>
<p>소프트웨어는 시스템 소프트웨어와 응용 소프트웨어로 나뉩니다. 그리고 시스템 소프트웨어는 OS(운영체제), 데이터베이스, 컴파일러로 나뉩니다.
<img src="https://velog.velcdn.com/images/co_joyau/post/f434f605-be40-49fe-b02f-dad48c05cdfc/image.png" alt="">
계층 구조로 시각화해본다면 이렇게 만들 수 있습니다.</p>
<h3 id="os운영체제">OS(운영체제)</h3>
<p>운영체제는 하드웨어와 응용소프트웨어에서 중간 역할로서 둘 모두 관여합니다.
운영체제 사례로는 DOS, 윈도우, 리눅스 등이 있습니다. 이들은 아마 역사적으로 발전된 순으로 CLI, GUI, NUI 등의 인터페이스를 사용해왔습니다. 간단하게 정리하면 CLI는 언어로, GUI는 그래픽으로 NUI는 움직임으로 인간과 기계의 소통을 할 수 있도록 하는 인터페이스입니다. </p>
<h3 id="데이터베이스">데이터베이스</h3>
<p>데이터베이스는 여러 종류의 테이블이 목적에 맞게 모아둔 것입니다. 예를 들어서 회사의 고객들의 이름, 연령, 주소, 연락처, 소속, 하는 일 등을 저장해놓은 것이 데이터베이스입니다. 이러한 데이터베이스는 목적을 지니고 있습니다. 네이버 카페 중 패션 카페의 경우는 새롭게 떠오르는 브랜드와 신상옷들의 가격, 구매처, 후기 등이 있을 것이고 취업 카페의 취업 후기 란에서는 취뽀한 회사, 연봉, 이력서, 경력, 스펙 등의 데이터가 올라올 것입니다. 이 데이터들은 각각 패션 정보 공유, 취업 정보 공유라는 목적성을 가지고 있습니다. 이렇게 데이터 베이스는 목적성을 가지고 여러 사람에게 공유됩니다. </p>
<p>데이터 베이스는 종류에는 계층형, 관계형,객체형, 객체-관계형이 있습니다. 관계형의 경우는 우리가 흔히 생각하는 엑셀의 모양입니다. 객체형은 유튜브를 생각하면 되고 객체-관계형은 관계형의 네모 칸 셀마다 단순 문자나 숫자가 아니라 객체형 데이터가 들어있다고 생각하면 됩니다. </p>
<h3 id="컴파일과-컴파일러">컴파일과 컴파일러</h3>
<p>우리가 여러 언어에 문법으로 명령을 작성한 파일은 원시파일입니다. 인간은 이해할 수 없지만 기계는 이해할 수 없기에 기계어 코드로 변환해주는 작업이 필요합니다. 그 작업이 컴파일이고 컴파일 동작을 하는 것이 컴파일러입니다. </p>
<h4 id="cf-인터프리터와-컴파일러">cf. 인터프리터와 컴파일러</h4>
<p>인터프리터는 한 줄씩 코드를 읽어서 실행합니다. 반면, 컴파일러는 한 번에 전체 코드를 기계어로 만들어서 실행해 실행파일이 생성됩니다.</p>
<p>응용 프로그램의 경우는 좀 더 공부해보고 포스팅하거나 이 포스팅을 수정해야겠습니다.
감사합니다.</p>
<p>참고)
<a href="https://oriyong.tistory.com/56">https://oriyong.tistory.com/56</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[터미널 조작법]]></title>
            <link>https://velog.io/@co_joyau/vav6lqsj</link>
            <guid>https://velog.io/@co_joyau/vav6lqsj</guid>
            <pubDate>Sun, 18 Sep 2022 15:54:11 GMT</pubDate>
            <description><![CDATA[<p>   안녕하세요. 제가 첫 포스팅에서 혼돈의 도가니탕에 빠진 저에게 많은 도움이 되어주신 분을 언급했었는데요. (<a href="https://velog.io/@co_joyau/%EC%BD%94%EC%95%8C%EB%AA%BB%EC%9D%98-%EC%B2%AB-%ED%8F%AC%EC%8A%A4%ED%8C%85-6z2juc6d">https://velog.io/@co_joyau/코알못의-첫-포스팅-6z2juc6d</a>) 오늘 포스팅에서는 그 분과 첫 만남에서 배운 내용을 정리해볼까 합니다. </p>
<p>   첫 날부터 많은 것을 배웠습니다. 터미널 조작법, 깃헙 가입 및 프로필 꾸미기, linkedin 가입 및 프로필 꾸미기, HTML, CSS, Javascript 간단 사용법, VScode 조작법 및 확장팩 다운로드 등이 있습니다.</p>
<p>   이번 포스팅은 그 중에서도 터미널 조작법에 대해서 다뤄보겠습니다. 저는 현재 맥북과 삼성 노트북 두 대를 모두 사용 중인데요. 맥북과 윈도우의 터미널은 명령어도 다릅니다. 저 같은 경우에는 맥북으로 처음 배워서 그런지 맥북이 더 편한 것 같습니다. 맥북에서 쓰던 명령어가 윈도우에서는 사용할 수 없어서 불편하기도 했습니다. </p>
<hr>
<h2 id="터미널-설치">터미널 설치</h2>
<p>터미널을 실행하기 위해서는 터미널을 설치해야겠죠? 맥북의 경우는 터미널이 기본으로 깔려있지만, 윈도우는 직접 깔아줘야 합니다. 아래의 링크에서 윈도우 터미널을 설치할 수 있습니다. 설명도 자세히 나와있으니 참고해주세요.</p>
<p><a href="https://learn.microsoft.com/ko-kr/windows/terminal/install">https://learn.microsoft.com/ko-kr/windows/terminal/install</a></p>
<p>설치를 완료했다면, 클릭 후 창을 띄워해주세요.</p>
<h2 id="다양한-명령어">다양한 명령어</h2>
</aside>

<ul>
<li>pwd</li>
</ul>
<p>제일 처음 친 명령어는 pwd입니다. </p>
<p>pwd는 print working directory의 약어로 현재 디렉토리 위치를 알려줍니다. </p>
<p><img src="https://velog.velcdn.com/images/co_joyau/post/f1db47c6-4b3d-4f2b-b7c0-f2b3bc034276/image.png" alt=""></p>
<p>pwd 입력 후 enter 한 모습입니다. (username은 모자이크 처리했습니다.) 현재 위치한 디렉토리를 보여주네요. </p>
<ul>
<li>ls</li>
</ul>
<p>ls는 list의 준말입니다. 디렉토리의 파일과 폴더 list를 나타냅니다. </p>
<p>ls 입력 후 enter 한 모습입니다. 디렉토리의 파일과 폴더를 보여주네요. </p>
<p><img src="https://velog.velcdn.com/images/co_joyau/post/47deb958-1d16-4b09-a5fa-a5c87d001abf/image.png" alt=""></p>
<ul>
<li>cd와 cd ..</li>
</ul>
<p>cd는 change directory의 약어입니다. 말 그대로 디렉토리를 변경하는 명령어입니다. cd 뒤에 원하는폴더나 파일 명을 작성하고 enter를 누르면 이동하게 됩니다. </p>
<p>ls 명령어를 통해 보여진 폴더와 파일 중 “Videos”로 이동해보겠습니다.</p>
<p><img src="https://velog.velcdn.com/images/co_joyau/post/f0fbce20-efda-40bf-82cf-2ae730d83192/image.png" alt=""></p>
<p>이동하니 아무것도 없네요. 다시 뒤로 이동하겠습니다. </p>
<p>뒤로 돌아가려면 cd ..를 입력해주면 됩니다. </p>
<p><img src="https://velog.velcdn.com/images/co_joyau/post/ebdea745-d726-44b4-9420-27652dfff071/image.png" alt=""></p>
<ul>
<li>mkdir</li>
</ul>
<p>mkdir는 make directory의 약어입니다. 이 명령어를 이용하면 디렉토리를 생성할 수 있습니다. 저는 test라는 디렉토리를 생성해봤습니다.</p>
<p><img src="https://velog.velcdn.com/images/co_joyau/post/9f2dfc4c-a3a2-426e-9585-5b169c5213dd/image.png" alt=""></p>
<ul>
<li>echo</li>
</ul>
<p>echo 명령어 뒤에 어떤 텍스트를 적으면 그 텍스트가 터미널에 바로 출력됩니다.</p>
<p><img src="https://velog.velcdn.com/images/co_joyau/post/ed4553a4-1341-4d6d-a4f4-d920c086a267/image.png" alt=""></p>
<p>! echo로는 간단한 파일도 만들 수 있습니다.</p>
<p>echo 뒤에 &gt; newfile을 입력하게 되면 파일이 생성됩니다. </p>
<p>추후 수정이 가능하지만 “&gt;newfile”을 입력할 경우 기존의 내용이 모두 날아갑니다. 따라서, 기존 내용을 모두 삭제하고 파일을 생성할 경우가 아니라면, &gt;&gt;newfile을 입력해줘야 합니다.</p>
<ul>
<li>vi</li>
</ul>
<p>VI에는 명령모드와 입력모드가 있습니다. 입력모드에서는 텍스트를 입력하고 명령모드에서는 입력 외의 것을 명령할 수 있습니다. 두 가지 모두 모두 명령어가 많습니다.  [<a href="https://withcoding.com/112%5D">https://withcoding.com/112]</a>  (<a href="https://withcoding.com/112">https://withcoding.com/112</a>) 에 자세히 나와있습니다. 저는 입력모드로 갈 때 i(insert)를 사용했습니다. 이 모드로 변경 후 원하는 것을 작성하고 esc 버튼을 누르면 명령모드로 변경됩니다. 그 후 : 뒤에 여러가지 명령어를 사용할 수 있는데요. 저는 저장 후 나가는 :wq를 사용했습니다. 작성이 완료되면 cat 명령어를 이용해 출력할 수 있습니다. </p>
<p>윈도우 터미널의 경우는 아래의 이미지와 같이  vi 명령어를 사용할 수 없는 불편함이 있습니다. </p>
<p><img src="https://velog.velcdn.com/images/co_joyau/post/254893dc-a4c9-44ff-9b5e-a4fd4448d5d4/image.png" alt=""></p>
<p>다행히 아래의 포스팅을 보면 윈도우에서도 vi 명령어를 사용할 수 있도록 설정하는 방법이 나와있습니다.</p>
<p><a href="https://shanepark.tistory.com/221">https://shanepark.tistory.com/221</a></p>
<p>그 밖에도 정말 다양한 명령어가 수도 없이 많다고 알고 있습니다. 앞으로 명령어를 더 손에 익히고 배워가야겠습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코알못의 첫 포스팅]]></title>
            <link>https://velog.io/@co_joyau/%EC%BD%94%EC%95%8C%EB%AA%BB%EC%9D%98-%EC%B2%AB-%ED%8F%AC%EC%8A%A4%ED%8C%85-6z2juc6d</link>
            <guid>https://velog.io/@co_joyau/%EC%BD%94%EC%95%8C%EB%AA%BB%EC%9D%98-%EC%B2%AB-%ED%8F%AC%EC%8A%A4%ED%8C%85-6z2juc6d</guid>
            <pubDate>Sun, 18 Sep 2022 07:37:57 GMT</pubDate>
            <description><![CDATA[<p>   안녕하세요. <strong>코알못 JOYAU</strong>입니다. 2022년 9월 18일, 첫 벨로그 포스팅을 업로드하게 되었습니다.</p>
<p>   저는 경희대학교 정치외교학과에 재학 중인 학생입니다. 뼛속까지 문과 인간으로, 그동안 코딩과 거리두기를 정말 철저히 잘 지키고 있었습니다(이 정도면 보건복지부 상 받아야 한다 ㄹㅇ). 그랬던 제가 이렇게 개발 관련 블로그를 시작하게 되니 정말 감회가 새롭네요 ㅎ.ㅎ</p>
<p>   제가 개발 관련 공부를 시작하게 된 계기는 IT 스타트업에서의 마케팅 관련 인턴 덕분인데요. 마케팅 업무를 하다 주변 개발 분에게 HTML을 아주 개미 발톱마냥 쬐~끔 배워보니 “어쩌면 나 코딩을 좋아하게 될지도,,,?”라는 생각을 가지게 되었습니다. (다음 포스팅을 보면 아시겠지만, 정말 개미 발톱도 아니고 작동 방법 정도만 공부했습니다. 그래도 배우는 게 재미있었다는 점에 의의를 두고 싶습니다 ㅜ.ㅜ)</p>
<p>   앞으로 코딩의 “ㅋ”도 모르는 코알못의 성장일지를 벨로그에 차곡차곡 남기려고 합니다. 카테고리는 총 3가지(개발공부, 마케팅 업무, 다이어리)입니다. 학교, 인턴을 개발 공부와 병행하고 있어서 배우는 속도가 매우 느릴 예정인데요! 그래도 모든 포스팅과 개발 공부가 제 인생에 큰 자산이 되었으면 좋겠습니다. 앞으로 잘 부탁드리겠습니다:)_</p>
<p>*ps. 혼돈의 도가니탕 속에서 허우적거리던 저에게 수많은 정보와 기술을 알려주신 ㅅㅇ님께 정말 감사하다는 말씀을 전합니다!</p>
]]></description>
        </item>
    </channel>
</rss>