<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>swchung09 님의 블로그</title>
    <link>https://swchung09.tistory.com/</link>
    <description>swchung09 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Thu, 14 May 2026 07:53:14 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>swchung09</managingEditor>
    <item>
      <title>Nginx</title>
      <link>https://swchung09.tistory.com/88</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Nginx는 Apache서버의 단점을 개선하기 위해 나온 엔진이며, 엔진엑스라고 읽는다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 Nginx는 간편한 설정, 다양한 프로토콜 지원, Let's Entrypt를 사용하는 certbot이랑 연동이 쉽지만, 동적 설정 불가, DB연동 불가등 치명적인 단점도 있다. (따라서 동적으로 사용하고 싶으면, 다른 툴과 연동시켜야 한다)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투 환경에서는 아래 명령어로 설치하고, 잘 설치되었는지 확인할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1764548938240&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install nginx // Nginx 설치
sudo systemctl status nginx // Nginx 설치 확인
// 또는
nginx -v&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Nginx에서 사용하지 못하는 동적 기능을 사용하려면 Apache서버를 같이 쓰는 것이 좋다.&lt;/p&gt;</description>
      <category>서버</category>
      <category>nginx</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/88</guid>
      <comments>https://swchung09.tistory.com/88#entry88comment</comments>
      <pubDate>Mon, 1 Dec 2025 09:31:18 +0900</pubDate>
    </item>
    <item>
      <title>ssh</title>
      <link>https://swchung09.tistory.com/87</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;ssh는 secure shell의 줄임말로 telnet에서 발전된 원격 접속 프로토콜이다. ssh는 2가지 인증 방식이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RSA key(or ECC) 인증 : 공개키와 비밀키로 나누어서 각각 암호화와 복호화에 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비밀번호 인증 : 단순히 비밀번호로 인증하는 방법이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;다운로드.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;2172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgafet/dJMcabbvvGQ/EGk9h6V4jPA2Zas8FkkC01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgafet/dJMcabbvvGQ/EGk9h6V4jPA2Zas8FkkC01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgafet/dJMcabbvvGQ/EGk9h6V4jPA2Zas8FkkC01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcgafet%2FdJMcabbvvGQ%2FEGk9h6V4jPA2Zas8FkkC01%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;2172&quot; data-filename=&quot;다운로드.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;2172&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>서버</category>
      <category>SSH</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/87</guid>
      <comments>https://swchung09.tistory.com/87#entry87comment</comments>
      <pubDate>Mon, 17 Nov 2025 13:34:50 +0900</pubDate>
    </item>
    <item>
      <title>STP, HSRP, Ether Channel</title>
      <link>https://swchung09.tistory.com/86</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;회선 다중화(기기간을 연결할때, 2개 이상의 회선을 사용하는 기술)에서는 루프(패킷이 무한히 순환하게 되는 문제)가 발생할 수 있다. STP는 스위치 사이에서 최적의 경로를 알고리즘으로 선택하고, 루프를 트리 구조로 변경하여 루프가 생기지 않게 된다. 이로써 루프가 발생하는 토폴로지에서는, 루프의 원인이 될 수 있는 회선 하나를 물리적으로 끈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;STP에는 크게 6가지 종류가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CST : 기본적으로 사용되며 표준이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PVST : cisco 장비에서만 사용할 수 있으며, VLAN별로 최적화를 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PVST+ : cisco 장비에서만 사용할 수 있으며, CST와 호환되고, PVST를 개선했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RSTP : STP를 기반으로 빠르며, 표준이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PVRST : cisco 장비에서만 사용할 수 있으며, RSTP보다 빠르다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MSTP : VLAN을 그룹으로 묶어서 동작하며, 표준이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;STP는 루트를 기반으로 통신한다. 이때 BID를 정하여 통신하게 되며, BID는 우선순위(4096의 배수, 32768이 기본) + MAC 주소로 계산한다. 이때 BID값이 가장 낮은 스윔치가 루트가 된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HSRP는 내트워크에서 여러 게이트웨이를 설정하고, 장비에 문제가 생길경우 대기하고 있던 장비를 사용하여 통신이 지속적으로 가능하게 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HSRP는 cisco 전용 프로토콜이나, VRRP는 표준 프로토콜이라 다른 기기에서도 사용할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HSRP에는 6가지 상태가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Initial : 초기화 단계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Learn : 가상 IP 학습 및 Hello 패킷 수신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Listen : Hello 패킷 교환 완료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Speak : 가상 라우터 정의, 우선적으로 사용할 라우터 선정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Standby : 대기하고 있는 상태&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Active : 문제가 생길때까지 사용하는 게이트웨이&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HSRP는 이렇게 설정할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1762089997443&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Router(config)#interface [설정할 인터페이스]
Router(config-if)#standby [그룹 번호] ip [가상 IP 주소]
Router(config-if)#standby [그룹 번호] priority [우선 순위]
Router(config-if)#standby [그룹 번호] preempt&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ether Channel은 여러 개의 물리적인 회선을 하나의 논리적인 회선으로 묶는 기술이다. 이 기술을 사용하면, 대역폭을 증가시키고, 여러 회선을 손쉽게 관리할 수 있게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면 이렇게 설정할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1762088738118&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Switch(config)#interface range f0/1 - 2
Switch(config-if-range)#channel-group 1 mode active
Switch(config)#interface port-channel 1
Switch(config-if)#switchport mode trunk&lt;/code&gt;&lt;/pre&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>Ether Channel</category>
      <category>HSRP</category>
      <category>STP</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/86</guid>
      <comments>https://swchung09.tistory.com/86#entry86comment</comments>
      <pubDate>Sun, 2 Nov 2025 22:27:00 +0900</pubDate>
    </item>
    <item>
      <title>정신차려 이 각박한 터널 속에서!!</title>
      <link>https://swchung09.tistory.com/85</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 gre터널링을 설정하면 되는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router0과 Router1 사이에는 gre over ipsec(암호화가 추가된 gre)로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router1과 Router9 사이에는 gre로 설정하면 된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router0 gre 설정&lt;/p&gt;
&lt;pre id=&quot;code_1762084358922&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Router(config)#interface tunnel 0
Router(config-if)#ip address 100.100.100.1 255.255.255.0
Router(config-if)#tunnel source s0/1/0
Router(config-if)#tunnel destination 11.11.11.1&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router1 gre 설정&lt;/p&gt;
&lt;pre id=&quot;code_1762084406360&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Router(config)#interface tunnel 0
Router(config-if)#ip address 100.100.100.2 255.255.255.0
Router(config-if)#tunnel source s0/1/0
Router(config-if)#tunnel destination 10.10.10.1

Router(config)#interface tunnel 1
Router(config-if)#ip address 101.101.101.1 255.2555.255.0
Router(config-if)#tunnel source s0/1/0
Router(config-if)#tuunel destination 18.18.18.2&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router9 gre 설정&lt;/p&gt;
&lt;pre id=&quot;code_1762084792626&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Router(config)#interface tunnel 1
Router(config-if)#ip address 101.101.101.2 255.255.255.0
Router(config-if)#tunnel source s0/1/1
Router(config-if)#tunnel destination 11.11.11.1&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IPsec을 설정하려면 crypto 명령어를 사용하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router0 crypto 설정&lt;/p&gt;
&lt;pre id=&quot;code_1762085350132&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Router(config)#crypto isakmp policy 10
Router(config-isakmp)#encryption aes
Router(config-isakmp)#hash md5
Router(config-isakmp)#authentication pre-share
Router(config-isakmp)#lifetime 86400&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router1 crypto 설정&lt;/p&gt;
&lt;pre id=&quot;code_1762085433788&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Router(config)#crypto isakmp policy 10
Router(config-isakmp)#encryption aes
Router(config-isakmp)#hash md5
Router(config-isakmp)#authentication pre-share
Router(config-isakmp)#lifetime 86400&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로는 transform-set을 설정해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router0 ipsec transform-set 설정&lt;/p&gt;
&lt;pre id=&quot;code_1762085659876&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Router(config)#crypto ipsec transform-set transform esp-aes esp-md5-hmac&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router1 ipsec transform-set 설정&lt;/p&gt;
&lt;pre id=&quot;code_1762085734102&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Router(config)#crypto ipsec transform-set transform esp-aes esp-md5-hmac&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 crypto map을 설정해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router0 crypto map 설정&lt;/p&gt;
&lt;pre id=&quot;code_1762086268013&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Router(config)#access-list 100 permit gre host 11.11.11.1 host 10.10.10.1
Router(config)#crypto map mymap 10 ipsec-isakmp
Router(config-crypto-map)#set peer 11.11.11.1
Router(config-crypto-map)#set transform-set transform
Router(config-crypto-map)#match address 100
Router(config)#interface s0/1/0
Router(config-if)#crypto map mymap&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router1 crypto map 설정&lt;/p&gt;
&lt;pre id=&quot;code_1762086975842&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Router(config)#crypto map mymap 10 ipsec-isakmp
Router(config-crypto-map)#set peer 10.10.10.1
Router(config-crypto-map)#set transform-set transform
Router(config-crypto-map)#match address 100
Router(config)#interface s0/1/0
Router(config-if)#crypto map mymap&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후에 ACL관련해서 계속 했지만... %는 전혀 오르지 않았다.&lt;/p&gt;</description>
      <category>기타</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/85</guid>
      <comments>https://swchung09.tistory.com/85#entry85comment</comments>
      <pubDate>Sun, 2 Nov 2025 21:37:32 +0900</pubDate>
    </item>
    <item>
      <title>OMG..</title>
      <link>https://swchung09.tistory.com/84</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제에서는 라우터와 클라우드의 일부 설정이 잘못되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라우터에서는 왼쪽부터 ROUTER0, ROUTER2, ROUTER1로 이름을 변경한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 lmi-type을 cisco로 설정하면 된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router0&lt;/p&gt;
&lt;pre id=&quot;code_1762081091319&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;router(config)hostname ROUTER0
ROUTER0(config)#interface s0/3/0
ROUTER0(config-if)#frame-relay lmi-type cisco // 6번 조건&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router2&lt;/p&gt;
&lt;pre id=&quot;code_1762081261234&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Router(config)#hostname ROUTER2
ROUTER2(config)#interface s0/3/0
ROUTER2(config-if)#frame-relay lmi-type cisco&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router1&lt;/p&gt;
&lt;pre id=&quot;code_1762081326162&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Router(config)#hostname ROUTER1
ROUTER1(config)#interface s0/3/0
ROUTER1(config-if)#frame-relay lmi-type cisco&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 Cloud0에서 다음과 같이 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Serial0~2에서 LMI를 cisco로 변경한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Frame Relay에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Serial0의 102를 Serial1의 201로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Serial0의 103을 Serial2의 301로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Serial1의 203을 Serial2의 302로 연결한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지 했을때, 50%에서 멈췄다. 그래서 찾아본 결과, broadcast옵션을 붙여서 mapping을 해야한다는 것을 알게되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router0&lt;/p&gt;
&lt;pre id=&quot;code_1762082193739&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ROUTER0(config)#interface s0/3/0.1 multipoint
ROUTER0(config-subif)#frame-relay map ip 20.24.12.2 102 broadcast
ROUTER0(config-subif)#frame-relay map ip 20.24.12.3 103 broadcast&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router2&lt;/p&gt;
&lt;pre id=&quot;code_1762082304747&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ROUTER2(config)#int s0/3/0.2 multipoint
ROUTER2(config-subif)#frame-relay map ip 20.24.12.1 201 broadcast
ROUTER2(config-subif)#frame-relay map ip 20.24.12.3 203 broadcast&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router1&lt;/p&gt;
&lt;pre id=&quot;code_1762082421888&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ROUTER1(config)#interface s0/3/0.3 multipoint
ROUTER1(config-subif)#frame-relay map ip 20.24.12.1 301 broadcast
ROUTER1(config-subif)#frame-relay map ip 20.24.12.2 302 broadcast&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지 했을때 70%인데, 모든 통신이 된다. (뭐가 문제인지 모르겠음)&lt;/p&gt;</description>
      <category>기타</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/84</guid>
      <comments>https://swchung09.tistory.com/84#entry84comment</comments>
      <pubDate>Sun, 2 Nov 2025 20:45:33 +0900</pubDate>
    </item>
    <item>
      <title>느그 ACL 뭐하시노?</title>
      <link>https://swchung09.tistory.com/82</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;다른 설정에는 문제가 없으므로 udp설정으로 dns프로토콜이 서버에 도착할 수 있게 설정하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1762054873809&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;access-list 100 permit udp any host 10.10.10.1 eq 53
access-list 100 permit udp host 10.10.10.1 eq 53 any&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DNS 프로토콜은 UDP 53번 포트를 쓰고, 서버(10.10.10.1)에 도착할 수 있게 하고, 응답도 같은 방법으로 받을 수 있게 설정하면 된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;access-list_100_permit_udp_any_host_10.10.10.1_eq_53&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;access-list_100_permit_udp_host_10.10.10.1_eq_53_any&lt;/p&gt;</description>
      <category>기타</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/82</guid>
      <comments>https://swchung09.tistory.com/82#entry82comment</comments>
      <pubDate>Sun, 2 Nov 2025 12:46:18 +0900</pubDate>
    </item>
    <item>
      <title>NAT, FrameRelay, Tunneling</title>
      <link>https://swchung09.tistory.com/81</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;NAT은 Network Address Translation으로, 사설 ip를 공인 ip로 변경하는 서비스이다. 이 서비스는 가정용 공유기에 대부분 탑재 되어있으며, NAT이 있으면 여러가지 장점이 있다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- NAT은 한 ip를 여러 기기가 사용할 수 있어, 경제적이다&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 근래에 ipv4주소가 부족해지면서, NAT이 공인 ip주소의 수를 줄여주는 역할을 할 수 있다&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- NAT은 하나의 장치로 데이터가 나가기 때문에 방화벽을 구축하기 쉽다&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;NAT은 IP masquerading 방식으로 동작한다. 이 동작 방식은 하나의 공인 ip뒤에 여러 사설 ip를 할당하는 기법이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;NAT에는 여러 종류가 있다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Static NAT(정적 NAT) : 공인 ip와 사설 ip를 1:1 방식으로 변환한다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Dynamic NAT(동적 NAT) : &amp;nbsp;공인 ip와 사설 ip를 n:n으로 변환한다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Network Address Port Translation(NAPT) : Dynamic NAT에 포트까지 변환하는 방식이다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Source NAT(SNAT) : Static NAT와 유사하지만, 출발지 ip만 공개한다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Destination NAT(DNAT) : Static NAT와 유사하지만, 도착지 ip만 공개한다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 외에도 다양한 NAT가 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Static NAT는 다음과 같이 설정할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1762051429391&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;router(config)#ip nat inside source list [ACL 번호] interface [공인 ip가 할당된 인터페이스]
router(config)#interface [사설 ip를 할당한 인터페이스]
router(config-if)#ip nat inside // 내부
router(config)#interface [공인 ip가 할당된 인터페이스]
router(config-if)#ip nat outside // 외부&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dynamic NAT는 다음과 같이 설정할 수 있다. (전체적으로 Static NAT와 유사하지만, IP가 여러개여도 된다)&lt;/p&gt;
&lt;pre id=&quot;code_1762052060379&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;router(config)#ip nat pool [풀 이름] [처음 공인 ip주소 ~ 마지막 공인 ip주소] netmask [서브넷마스크] // 풀(ip 범위) 설정
router(config)#ip nat inside source list [ACL 번호] pool [풀 이름]
router(config)#interface [사설 ip를 할당한 인터페이스]
router(config-if)#ip nat inside // 내부
router(config)#interface [공인 ip가 할당된 인터페이스]
router(config-if)#ip nat outside // 외부&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;PAT는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Port Address Translation으로, Dynamic NAT의 한 종류이다. 이렇게 변환된 ip 주소는 호스트를 구분할 수 없어서, 포트번호로 구분한다. PAT에서 사용하는 포트는 주로 well-known(http, ssh 등의 서비스가 대부분 서버로 사용하는 포트)을 제외하고 49152(or 1024) ~ 65535 중에서 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PAT은 다음과 같이 설정할 수 있다. (Dynamic NAT에 포트까지 변환시켜서, 하나의 공인 ip로 여러 호스트가 통신할 수 있다)&lt;/p&gt;
&lt;pre id=&quot;code_1762052154207&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;router(config)#ip nat inside source list [ACL 번호] interface [공인 ip가 할당된 인터페이스]
router(config)#interface [사설 ip를 할당한 인터페이스]
router(config-if)#ip nat inside // 내부
router(config)#interface [공인 ip가 할당된 인터페이스]
router(config-if)#ip nat outside // 외부&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FrameRelay는 WAN사이에서 패킷을 가상 회선을 통해 주고받는다. 실제론 물리적인 회선을 여러 기기가 공유하지만, 논리적으로는 각각의 기기가 전용으로 설정된 것처럼 사용할 수 있게 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FrameRelay에는 크게 2가지가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PVC(&lt;s&gt;플라스틱?&lt;/s&gt;) : 고정된 경로로만 이동하는 가상회선이다. 항상 연결되어 있으므로, 데이터 전송시 대기 시간이 없고 빠르게 전송할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SVC : 동적으로 이동하는 가상회선이다. 필요할때만 연결하고 전송이 완료되면 회선을 끊는다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tunneling은 가상 사설 네트워크을 사용하여 데이터를 전송하는 기술이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VPN : 가상 사설 네트워크로 데이터를 암호화하여 전송한다.&lt;br /&gt;GRE : 암호화 없이 패킷을 다른 프로토콜로 변환하여 전송한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VPN을 사용할때는 다양한 방법을 사용할 수 있다. IKEv2, L2TP등은 암호화 없이 데이터를 전송하여, 보안에 취약하다. IPsec은 패킷을 인증하고 암호화하여, 위 방법의 취약한 부분을 개선한다.&lt;/p&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>Dynamic NAT</category>
      <category>FrameRelay</category>
      <category>NAT</category>
      <category>pat</category>
      <category>Static NAT</category>
      <category>tunneling</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/81</guid>
      <comments>https://swchung09.tistory.com/81#entry81comment</comments>
      <pubDate>Sun, 2 Nov 2025 12:12:20 +0900</pubDate>
    </item>
    <item>
      <title>사랑의 팟츄핑</title>
      <link>https://swchung09.tistory.com/80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;router 0&lt;/p&gt;
&lt;pre id=&quot;code_1762050560259&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ip nat inside source static 192.168.0.10 10.0.0.5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 구문으로 설정할 경우, nat와 범위가 겹치게 된다. 따라서 아래와 같이 설정해야한다.&lt;/p&gt;
&lt;pre id=&quot;code_1762050614574&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;no ip nat inside source static 192.168.0.10 10.0.0.5 // 기존 내용 삭제
ip nat inside source static 192.168.0.10 10.0.0.1&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;pre id=&quot;code_1762050633310&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;access-list 101 deny ip host 192.168.0.10 any&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 구문으로 설정할 경우, 192.168.0.10(서버 주소)에서 오는 트래픽을 모두 차단된다. 따라서 아래와 같이 설정해야한다.&lt;/p&gt;
&lt;pre id=&quot;code_1762050682076&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;no access-list 101 deny ip host 192.168.0.10 any // 기존 내용 삭제
access-list 101 permit ip host 192.168.0.10 any&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;router 4&lt;/p&gt;
&lt;pre id=&quot;code_1762050700060&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ip nat inside source static 192.168.1.10 40.0.0.5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 구문으로 설정할 경우, router 0과 마찬가지로 nat와 범위가 겹치게 된다. 따라서 아래와 같이 설정해야한다.&lt;/p&gt;
&lt;pre id=&quot;code_1762050756856&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;no ip nat inside source static 192.168.1.10 40.0.0.5 // 기존 내용 삭제
ip nat inside source static 192.168.1.10 40.0.0.1&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;pre id=&quot;code_1762050772693&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ip nat pool DEFAULT_POL 40.0.0.2 40.0.0.10 netmask 255.255.255.0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 구문으로 설정할 경우, DEFAULT_POL에서 POOL이 빠졌으므로, 이후 명령어에서 DEFAULT_POOL에서 사용할 수 없다. 따라서 아래와 같이 설정해야한다.&lt;/p&gt;
&lt;pre id=&quot;code_1762050839080&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;no ip nat pool DEFAULT_POL 40.0.0.2 40.0.0.10 netmask 255.255.255.0 // 기존 내용 삭제
ip nat pool DEFAULT_POOL 40.0.0.2 40.0.0.10 netmask 255.255.255.0&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;pre id=&quot;code_1762050852109&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;access-list deny ip host 192.168.1.10 any&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 구문으로 설정할 경우, 192.168.1.10(서버)에서 오는 트래픽이 모두 차단된다. 따라서 아래와 같이 설정해야한다.&lt;/p&gt;
&lt;pre id=&quot;code_1762050915225&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;no access-list deny ip host 192.168.1.10 any
access-list permit ip host 192.168.1.10 any&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CHOO_4992&lt;/p&gt;</description>
      <category>기타</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/80</guid>
      <comments>https://swchung09.tistory.com/80#entry80comment</comments>
      <pubDate>Sun, 2 Nov 2025 11:35:23 +0900</pubDate>
    </item>
    <item>
      <title>Linux 기본 명령어 &amp;amp; vi</title>
      <link>https://swchung09.tistory.com/78</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Linux는 오픈소스 OS로, UNIX운영체제를 모티브로 개발된 운영체제이다. 해당 OS는 오픈소스이므로, 파생된 OS들도 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적으로는 3가지 정도가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Ubuntu : Linux중에서도 가장 잘 알려진 OS&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Fedora : 개발자 친화적인 OS&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Arch Linux : 다양한 커스터마이징 기능이 있는 OS&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Linux에서는 기본적으로 자주 사용되는 명령어들이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ls : (현재, 또는 매개변수로 주어진) 디렉토리의 파일과 하위 디렉토리를 표시한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cat : 특정 파일을 텍스트로 읽는다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cd : 특정 디렉토리로 이동한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pwd : 현재 작업 디렉토리를 표시한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;clear : 화면을 지운다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rm : 파일을 지운다 (-r 옵션을 추가하면 디렉토리도 삭제)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;touch : 파일을 생성한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mkdir : 디렉토리를 생성한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mv : 파일을 (다른) 디렉토리로 옮긴다 (이를 응용하면 파일 이름 변경도 가능)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VI는 대부분의 Linux에 포함되어 있는 기본 텍스트 에디터이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령행 모드 &amp;lt;----&amp;gt; 명령 모드 &amp;lt;----&amp;gt; 입력 모드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 3모드 사이에서 이동하여 텍스트를 편집할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령행 모드 : 콜론으로 진입할 수 있으며, 저장, 종료등의 작업을 수행한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령 모드 : 명령행 모드에서는 비어있는 상태에서 Enter를 하고, 입력 모드에서는 Esc로 진입할 수 있다. 커서를 이동하거나 내용을 삭제하는 등의 역할을 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 모드 : i, a, o로 진입할 수 있으며, 텍스트를 입력하는 상태이다.&lt;/p&gt;</description>
      <category>서버</category>
      <category>Cat</category>
      <category>cd</category>
      <category>clear</category>
      <category>LS</category>
      <category>mkdir</category>
      <category>MV</category>
      <category>pwd</category>
      <category>RM</category>
      <category>Touch</category>
      <category>vi</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/78</guid>
      <comments>https://swchung09.tistory.com/78#entry78comment</comments>
      <pubDate>Wed, 29 Oct 2025 17:05:46 +0900</pubDate>
    </item>
    <item>
      <title>Server, PPP, WLAN</title>
      <link>https://swchung09.tistory.com/77</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;서버는 클라이언트(사용자)에게 정보나 서비스를 제공하는 컴퓨터다.&lt;br /&gt;패킷트레이서의 서버는 아래와 같은 기능을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP : 웹 데이터를 전송하는데 사용된다&lt;br /&gt;DHCP(v6) : IP를 동적으로 자동 할당하는데 사용된다&lt;br /&gt;(T)FTP : 파일을 전송하는데 사용된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DNS : 도메인을 IP등으로 변환하는데 사용된다&lt;br /&gt;AAA : 보안 정보를 인증하는데 사용된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SYSLOG : 로그를 기록하는데 사용된다&lt;br /&gt;NTP : 시간 정보를 제공하는데 사용된다&lt;br /&gt;EMAIL : 이메일 서비스를 제공하는데 사용된다&lt;br /&gt;IoT : IoT 기기를 제어하는데 사용되며, HTTP를 기반으로 이루어진다&lt;br /&gt;VM Management : VM을 관리하는데 사용된다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP는 Hyper Text Transfer Protocol의 약자로, 웹 데이터를 서로 주고받는데 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP에서는 메소드로 어떤 동작을 수행할지도 함께 결정하여 보낸다.&lt;br /&gt;GET : 데이터를 조회한다&lt;br /&gt;POST : 데이터를 전송한다&lt;br /&gt;PUT : 데이터 전체를 수정한다&lt;br /&gt;PATCH : 데이터 일부를 수정한다&lt;br /&gt;DELETE : 데이터를 삭제한다&lt;br /&gt;HEAD : HTTP의 헤더 부분만 전송한다(자주 쓰이진 않음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OPTIONS : 가능한 메소드 종류를 조회한다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;DNS(Domain Name System)은 도메인을 받으면 ip주소등으로 변환해주는 시스템이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;a title=&quot;DNS&quot; href=&quot;https://swchung09.tistory.com/57&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://swchung09.tistory.com/57&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1759713782170&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;DNS&quot; data-og-description=&quot;DNS(Domain Name System)은 도메인을 받으면 ip주소등으로 변환해주는 시스템이다. 일반적인 가정용 공유기에서는 ISP(Internet Service Provider : 통신3사)의 DNS을 사용하여 도메인에 접속하게 된다.도메인은 &quot; data-og-host=&quot;blog.aiswstudio.com&quot; data-og-source-url=&quot;https://swchung09.tistory.com/57&quot; data-og-url=&quot;https://blog.aiswstudio.com/57&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dtpd9k/hyZKEIpdAZ/j6kpkkeUN25CNwrIlxk0h0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bptyN5/hyZKhU9f0P/FYwEqXkofubiB2YaoHF46k/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bTXdUH/hyZJ5Hb2QW/5ywqagVrwijSsnTJQF8EXk/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://swchung09.tistory.com/57&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://swchung09.tistory.com/57&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dtpd9k/hyZKEIpdAZ/j6kpkkeUN25CNwrIlxk0h0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bptyN5/hyZKhU9f0P/FYwEqXkofubiB2YaoHF46k/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bTXdUH/hyZJ5Hb2QW/5ywqagVrwijSsnTJQF8EXk/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;DNS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;DNS(Domain Name System)은 도메인을 받으면 ip주소등으로 변환해주는 시스템이다. 일반적인 가정용 공유기에서는 ISP(Internet Service Provider : 통신3사)의 DNS을 사용하여 도메인에 접속하게 된다.도메인은&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.aiswstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;DHCP는 주로 사설 IP를 자동으로 할당해주는 역할을 하는 서버 역할을 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;a title=&quot;DHCP&quot; href=&quot;https://swchung09.tistory.com/49&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://swchung09.tistory.com/49&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1759713810063&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;DHCP&quot; data-og-description=&quot;DHCP는 주로 사설 IP를 자동으로 할당해주는 역할을 하는 서버 역할을 한다.대부분의 공유기는 DHCP서버를 포함하고 있으며, 주로 할당하는 IP는 192.168.0.0대역이다.DHCP는 4단계로 구성되어 있다.1. &quot; data-og-host=&quot;blog.aiswstudio.com&quot; data-og-source-url=&quot;https://swchung09.tistory.com/49&quot; data-og-url=&quot;https://blog.aiswstudio.com/49&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fvccO/hyZJ8qmkcu/wRzwKKk6IH42cKnk61ghqk/img.png?width=800&amp;amp;height=537&amp;amp;face=0_0_800_537,https://scrap.kakaocdn.net/dn/bfEOoe/hyZKhHDjBE/pw9i0kfGxF01obv7J0vwIk/img.png?width=800&amp;amp;height=537&amp;amp;face=0_0_800_537,https://scrap.kakaocdn.net/dn/lac85/hyZKL8BuHn/M4LbzB3ltalVjgTsfV1KYk/img.png?width=2654&amp;amp;height=1784&amp;amp;face=0_0_2654_1784&quot;&gt;&lt;a href=&quot;https://swchung09.tistory.com/49&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://swchung09.tistory.com/49&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fvccO/hyZJ8qmkcu/wRzwKKk6IH42cKnk61ghqk/img.png?width=800&amp;amp;height=537&amp;amp;face=0_0_800_537,https://scrap.kakaocdn.net/dn/bfEOoe/hyZKhHDjBE/pw9i0kfGxF01obv7J0vwIk/img.png?width=800&amp;amp;height=537&amp;amp;face=0_0_800_537,https://scrap.kakaocdn.net/dn/lac85/hyZKL8BuHn/M4LbzB3ltalVjgTsfV1KYk/img.png?width=2654&amp;amp;height=1784&amp;amp;face=0_0_2654_1784');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;DHCP&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;DHCP는 주로 사설 IP를 자동으로 할당해주는 역할을 하는 서버 역할을 한다.대부분의 공유기는 DHCP서버를 포함하고 있으며, 주로 할당하는 IP는 192.168.0.0대역이다.DHCP는 4단계로 구성되어 있다.1.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.aiswstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AAA는 네트워크 상에서 보안, 인증을 제어하는 기능을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AAA에는 두 가지 방식이 있으나, 거의 비슷하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RADIUS : UDP를 사용하여 인증한다&lt;/p&gt;
&lt;pre id=&quot;code_1759714073947&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aaa new-model
aaa authentication login default group radius local
radius server [이름]
address ipv4 [서버 ip주소] (auth-port [radius 포트])
key [키]

//콘솔 로그인에 적용할 경우
line console 0
login authentication default&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;TACACS : TCP를 사용하여 인증한다&lt;/p&gt;
&lt;pre id=&quot;code_1759714147688&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aaa new-model
aaa authentication login default group tacacs+ local
tacacs-server [서버 ip주소]
tacacs-server key [키]

//콘솔 로그인에 적용할 경우
line console 0
login authentication default&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SYSLOG는 네트워크 장비에서 업데이트 되거나, AAA등으로 발생한 로그들을 서버에 기록하는데 사용된다. 아래와 같이 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1759714237205&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;loggin on
loggin host [서버 ip주소]
no loggin console
service timestamps log datetime msec&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NTP는 네트워크 상에서 시간을 동기화하는데 사용된다. 아래와 같이 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1759713964498&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ntp server [서버 ip주소]&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PPP는 단순히 두 컴퓨터가 한번에 연결되었을때, IP 주소를 할당하지 않고도 통신할 수 있게하는 프로토콜이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PPP에는 두 가지 방식이 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PAP : 2-way-handshake를 사용하며, 데이터를 평문으로 전송한다&lt;/p&gt;
&lt;pre id=&quot;code_1759714528273&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//사용자 등록
username [사용자 이름] password [사용자 암호]

//pap 설정
interface [포트]
encapsulation ppp
ppp authentication pap
ppp pap sent-username [사용자 이름] password [암호]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CHAP : 3-way-handshake를 사용하며, 데이터를 암호화하여 전송한다&lt;/p&gt;
&lt;pre id=&quot;code_1759714566165&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//사용자 등록 및 호스트 이름 설정
hostname [호스트 이름]
username [사용자 이름] password [사용자 암호]

//chap 설정
interface [포트]
encapsulation pap
ppp authentication chap&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WLAN은 간단하게 얘기하면, Wi-Fi다. (&lt;s&gt;진짜 이거 말곤 설명할만한 기술이 없음...&lt;/s&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WLAN은 무선 근거리 네트워크를 제공하는데 사용되며, Bluetooth랑 다르게 LAN으로 분류된다. (즉 Bluetooth는 PAN)&lt;/p&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>PPP</category>
      <category>WLAN</category>
      <category>서버</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/77</guid>
      <comments>https://swchung09.tistory.com/77#entry77comment</comments>
      <pubDate>Mon, 6 Oct 2025 10:38:53 +0900</pubDate>
    </item>
    <item>
      <title>VLAN, Inter-VLAN, VTP, Port-Security</title>
      <link>https://swchung09.tistory.com/76</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;VLAN은 논리적으로 영역을 구분해서 각각의 장치가 같은 VLAN에서만 통신하게 구성하는 기능이다. VLAN을 사용하면 아래와 같은 장점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 같은 장비지만, 논리적으로 분리하여 사용할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 네트워크 관리가 용이해짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 보안이 강화됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 트래픽이 분리되어 효율성이 증가함&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VLAN은 VLAN Database에서 VLAN 정보를 관리한다. 아래 명령어로 VLAN Database를 확인할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1759057089361&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Switch#show vlan brief&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VLAN은 포트 모드를 설정하여 알맞게 설정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Access Mode : 하나의 VLAN만 속하며, PC 등을 연결할때 사용한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Trunk Mode : 여려 VLAN이 속하며, 스위치끼리 연결할때 사용한다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Trunk Mode에서는 여러 VLAN을 사용할 수 있다. 따라서 Trunking Protocol을 사용하여 여러 VLAN 트래픽을 서로 다른 장치에서도 사용하게 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 802.1Q : IEEE 표준 프로토콜, 최대 VLAN 갯수는 4096개&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ISL : Cisco 전용 프로토콜, 최대 VLAN 갯수는 1000개&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- DTP : Cisco 전용 프로토콜, 보안상 안 좋음&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Inter-VLAN은 라우터를 기준으로 VLAN 트래픽을 모아서, 서로 다른 VLAN 장치가 라우터를 거쳐 통신하게 하는 기능이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 interface g0/0뒤에 .숫자로 구분하며, 이로써 하나의 선에서 여러 Inter-VLAN을 설정할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VTP는 스위치들 사이에서 VLAN 정보를 공유하는 프로토콜이다. VTP에는 3가지 모드가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Server (기본 모드) : VLAN 정보를 생성하고 전송한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Client : VLAN 정보를 수신한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Transparent : VLAN 정보를 다른 스위치로 전송한다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VTP는 여러가지 정보를 사용하여 VLAN 정보를 공유할때 해당 정보가 일치해야만 공유되게 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. VTP Domain : 서버와 클라이언트 도메인 정보가 같아야만 VLAN 정보를 공유&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. VTP Password : 서버와 클라이언트 비밀번호가 같아야만 VLAN 정보를 공유&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Port-Security는 스위치가 포트에서 연결 가능한 장치를 제한하여 보안을 강화하는 기능이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Port-Security에서는 MAC주소를 3가지 방식으로 학습할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Static : 수동으로 MAC 주소를 지정하며, NVRAM(write로 저장하는 위치)에 저장 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Sticky : 자동으로 MAC 주소를 학습하며, NVRAM에 저장 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Dynamic : 자동으로 MAC 주소를 학습하나, NVRAM에는 저장 불가&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Port-Security에서는 MAC주소가 다를 경우(위반할 경우) 보안 정책을 설정하여 어떻게 대응할지 정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Shutdown (기본 설정) : 포트를 Error-disabled 상태로 차단&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Restrict : 위반한 MAC 주소의 트래픽만 차단하고, 로그에 기록함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Protect : Restrict와 동일하나, 로그에 기록하지 않음&lt;/p&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>Inter-VLAN</category>
      <category>Port-Security</category>
      <category>v</category>
      <category>VLAN</category>
      <category>vtp</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/76</guid>
      <comments>https://swchung09.tistory.com/76#entry76comment</comments>
      <pubDate>Sun, 28 Sep 2025 20:14:08 +0900</pubDate>
    </item>
    <item>
      <title>UTM Ubuntu desktop 공유 폴더 설정</title>
      <link>https://swchung09.tistory.com/75</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 블로그에서는 UTM 프로그램으로 ubuntu dektop을 설치했을때 어떻게 공유 폴더를 설정하는지 적어놓았다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2364&quot; data-origin-height=&quot;1904&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vJJhU/btsQwSYTebI/vKHbNssrEAFprC01xkvBjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vJJhU/btsQwSYTebI/vKHbNssrEAFprC01xkvBjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vJJhU/btsQwSYTebI/vKHbNssrEAFprC01xkvBjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvJJhU%2FbtsQwSYTebI%2FvKHbNssrEAFprC01xkvBjK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;326&quot; height=&quot;263&quot; data-origin-width=&quot;2364&quot; data-origin-height=&quot;1904&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널을 실행한 다음 아래 명령어를 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1757682963739&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkdir /home/user/바탕화면/공유폴더
sudo mount -t virtiofs share /home/user/바탕화면/공유폴더&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 공유 폴더가 바탕화면에 공유폴더라는 이름으로 생겼을 것이다.&lt;/p&gt;</description>
      <category>기타</category>
      <category>ubuntu</category>
      <category>UTM</category>
      <category>공유 폴더</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/75</guid>
      <comments>https://swchung09.tistory.com/75#entry75comment</comments>
      <pubDate>Fri, 12 Sep 2025 22:16:34 +0900</pubDate>
    </item>
    <item>
      <title>Ubuntu 언어 설정</title>
      <link>https://swchung09.tistory.com/74</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 블로그에서는 Ubuntu에서 한국어를 설정하는 법을 적었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(UTM에서 공유 폴더를 사용하는 경우, 버그가 생겨서 파일 탐색기에 표시가 되지 않는다. 따라서 UTM에서 공유 폴더를 사용할 예정이라면, 아래 과정을 하지 않는 것을 권장한다.)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj0tk0/btsQx3L9apd/7V03kkStri2cX3kyihJ8i1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj0tk0/btsQx3L9apd/7V03kkStri2cX3kyihJ8i1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj0tk0/btsQx3L9apd/7V03kkStri2cX3kyihJ8i1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj0tk0%2FbtsQx3L9apd%2F7V03kkStri2cX3kyihJ8i1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;317&quot; height=&quot;252&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오른쪽 위 메뉴에서 설정 버튼을 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DiIso/btsQxyMnyH7/mXQrK1e0KDkVKt8IhkDG3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DiIso/btsQxyMnyH7/mXQrK1e0KDkVKt8IhkDG3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DiIso/btsQxyMnyH7/mXQrK1e0KDkVKt8IhkDG3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDiIso%2FbtsQxyMnyH7%2FmXQrK1e0KDkVKt8IhkDG3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;320&quot; height=&quot;255&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메뉴를 아래까지 내리다보면 System 메뉴가 있다. 거기서 Region &amp;amp; Language 메뉴를 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/urzZY/btsQzaDGVwH/s6iDq9JtMXyf20t7a7KHkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/urzZY/btsQzaDGVwH/s6iDq9JtMXyf20t7a7KHkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/urzZY/btsQzaDGVwH/s6iDq9JtMXyf20t7a7KHkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FurzZY%2FbtsQzaDGVwH%2Fs6iDq9JtMXyf20t7a7KHkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;317&quot; height=&quot;252&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Manage Installed Languages를 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wusxZ/btsQzmD8EWb/orDiQ5a4I6cxbC5ZtKzPLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wusxZ/btsQzmD8EWb/orDiQ5a4I6cxbC5ZtKzPLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wusxZ/btsQzmD8EWb/orDiQ5a4I6cxbC5ZtKzPLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwusxZ%2FbtsQzmD8EWb%2ForDiQ5a4I6cxbC5ZtKzPLk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;318&quot; height=&quot;253&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 창이 뜰 경우 Install을 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2760&quot; data-origin-height=&quot;2180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rzHFX/btsQv0JTWck/HUXI17MXjXJIY10E0XWf51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rzHFX/btsQv0JTWck/HUXI17MXjXJIY10E0XWf51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rzHFX/btsQv0JTWck/HUXI17MXjXJIY10E0XWf51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrzHFX%2FbtsQv0JTWck%2FHUXI17MXjXJIY10E0XWf51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;312&quot; height=&quot;246&quot; data-origin-width=&quot;2760&quot; data-origin-height=&quot;2180&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Install / Remove Languages...버튼을 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcqLkj/btsQwSq4mO0/o89oRH50iB9LXNxyzTKMb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcqLkj/btsQwSq4mO0/o89oRH50iB9LXNxyzTKMb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcqLkj/btsQwSq4mO0/o89oRH50iB9LXNxyzTKMb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdcqLkj%2FbtsQwSq4mO0%2Fo89oRH50iB9LXNxyzTKMb0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;319&quot; height=&quot;254&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국어를 찾아서 선택하고 Apply 버튼을 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(조금 시간이 걸린다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/esiZaM/btsQwdvcgSe/Yc2CNkAVSeOQKexAsMkyak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/esiZaM/btsQwdvcgSe/Yc2CNkAVSeOQKexAsMkyak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/esiZaM/btsQwdvcgSe/Yc2CNkAVSeOQKexAsMkyak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FesiZaM%2FbtsQwdvcgSe%2FYc2CNkAVSeOQKexAsMkyak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;319&quot; height=&quot;254&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국어 메뉴를 맨 위까지 드래그한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2760&quot; data-origin-height=&quot;2180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5CBt8/btsQu5LcxWm/cJEy48caVSGKi9tA6KFBVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5CBt8/btsQu5LcxWm/cJEy48caVSGKi9tA6KFBVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5CBt8/btsQu5LcxWm/cJEy48caVSGKi9tA6KFBVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5CBt8%2FbtsQu5LcxWm%2FcJEy48caVSGKi9tA6KFBVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;309&quot; height=&quot;244&quot; data-origin-width=&quot;2760&quot; data-origin-height=&quot;2180&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Regional Formats 메뉴에 들어간 다음 English를 한국어로 바꾸고, Apply System-Wide 버튼을 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mo6tb/btsQv1Wi44A/0HeCzTUK4ooimpiVKnQKE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mo6tb/btsQv1Wi44A/0HeCzTUK4ooimpiVKnQKE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mo6tb/btsQv1Wi44A/0HeCzTUK4ooimpiVKnQKE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmo6tb%2FbtsQv1Wi44A%2F0HeCzTUK4ooimpiVKnQKE0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;239&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 재부팅하면 정상적으로 한국어가 적용되었다.&lt;/p&gt;</description>
      <category>기타</category>
      <category>ubuntu</category>
      <category>언어 설정</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/74</guid>
      <comments>https://swchung09.tistory.com/74#entry74comment</comments>
      <pubDate>Fri, 12 Sep 2025 21:25:21 +0900</pubDate>
    </item>
    <item>
      <title>UTM Ubuntu VM 만들기 (2)</title>
      <link>https://swchung09.tistory.com/73</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 블로그는 Ubuntu VM을 만드는 과정이다. 이전 과정에서 계정 설정 전까지 했으므로, 못했다면 이전 블로그를 참고하고 진행하는 것이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;이전 과정&quot; href=&quot;https://swchung09.tistory.com/72&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://swchung09.tistory.com/72&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1757677706129&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;UTM Ubuntu VM 만들기 (1)&quot; data-og-description=&quot;UTM은 맥에서 QEMU 가상화 엔진을 사용하여, 준수한 속도의 가상 환경을 제공한다. 그러나 UTM에서는 QEMU 말고도 여러가지 엔진을 사용할 수 있고, 그중에 Apple 가상화라는 옵션이 있다. 이 걸 사용&quot; data-og-host=&quot;blog.aiswstudio.com&quot; data-og-source-url=&quot;https://swchung09.tistory.com/72&quot; data-og-url=&quot;https://blog.aiswstudio.com/72&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/9orlL/hyZIO0abIy/shmUV2RvAB9BUwiERBdPlk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/ccbLkF/hyZIN70Fno/iLVvSVRKeCpgFPkMk8KfB1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/SiDF3/hyZJaHXbQa/1KrGZikkMJVnf3L9y1wsh1/img.png?width=1736&amp;amp;height=1440&amp;amp;face=0_0_1736_1440&quot;&gt;&lt;a href=&quot;https://swchung09.tistory.com/72&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://swchung09.tistory.com/72&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/9orlL/hyZIO0abIy/shmUV2RvAB9BUwiERBdPlk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/ccbLkF/hyZIN70Fno/iLVvSVRKeCpgFPkMk8KfB1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/SiDF3/hyZJaHXbQa/1KrGZikkMJVnf3L9y1wsh1/img.png?width=1736&amp;amp;height=1440&amp;amp;face=0_0_1736_1440');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;UTM Ubuntu VM 만들기 (1)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;UTM은 맥에서 QEMU 가상화 엔진을 사용하여, 준수한 속도의 가상 환경을 제공한다. 그러나 UTM에서는 QEMU 말고도 여러가지 엔진을 사용할 수 있고, 그중에 Apple 가상화라는 옵션이 있다. 이 걸 사용&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.aiswstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqhI4w/btsQyeT5N3E/ZWHlqTKk5tkdUZrigYMK1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqhI4w/btsQyeT5N3E/ZWHlqTKk5tkdUZrigYMK1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqhI4w/btsQyeT5N3E/ZWHlqTKk5tkdUZrigYMK1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqhI4w%2FbtsQyeT5N3E%2FZWHlqTKk5tkdUZrigYMK1K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;375&quot; height=&quot;237&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계정 정보는 자신이 원하는 대로 설정했다. 필자는 user에 1234로 설정해서 비밀번호에 약한 비밀번호라고 나오지만, 다음 과정으로 진행하는데는 문제가 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzIiQs/btsQx7AXeeo/ySC1XeIGihmAbhPokdAwC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzIiQs/btsQx7AXeeo/ySC1XeIGihmAbhPokdAwC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzIiQs/btsQx7AXeeo/ySC1XeIGihmAbhPokdAwC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzIiQs%2FbtsQx7AXeeo%2FySC1XeIGihmAbhPokdAwC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;376&quot; height=&quot;237&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 시간대를 선택할 수 있다. 이 부분 역시 건들일 필요가 없으므로 Next 버튼을 눌렀다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cK7ypZ/btsQzi2KVx9/QkBJbFPGWNHFg3xMa6PqzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cK7ypZ/btsQzi2KVx9/QkBJbFPGWNHFg3xMa6PqzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cK7ypZ/btsQzi2KVx9/QkBJbFPGWNHFg3xMa6PqzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcK7ypZ%2FbtsQzi2KVx9%2FQkBJbFPGWNHFg3xMa6PqzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;378&quot; height=&quot;238&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아까전 UTM처럼 요약 부분이 나온다. 올바른지 확인하고, Install 버튼을 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHBlSB/btsQvPnQz39/vPJBnkQ73SVkYsGQ9Axsdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHBlSB/btsQvPnQz39/vPJBnkQ73SVkYsGQ9Axsdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHBlSB/btsQvPnQz39/vPJBnkQ73SVkYsGQ9Axsdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHBlSB%2FbtsQvPnQz39%2FvPJBnkQ73SVkYsGQ9Axsdk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;381&quot; height=&quot;240&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 설치가 진행되고 있다. 완료될때까지 기다린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LA15z/btsQxuQK06X/De6SGFvnH62RiCMQgY0SO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LA15z/btsQxuQK06X/De6SGFvnH62RiCMQgY0SO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LA15z/btsQxuQK06X/De6SGFvnH62RiCMQgY0SO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLA15z%2FbtsQxuQK06X%2FDe6SGFvnH62RiCMQgY0SO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;390&quot; height=&quot;246&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(&lt;s&gt;분명 업데이트를 안 한다고 했던 것 같지만&lt;/s&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 화면이 뜨면 업데이트 버튼을 눌러 업데이트를 진행하는 것이 좋다. (이미 다운로드 받음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQoozk/btsQwgyGNff/cH5BsATdfXvVUrsv9w21tK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQoozk/btsQwgyGNff/cH5BsATdfXvVUrsv9w21tK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQoozk/btsQwgyGNff/cH5BsATdfXvVUrsv9w21tK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQoozk%2FbtsQwgyGNff%2FcH5BsATdfXvVUrsv9w21tK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;387&quot; height=&quot;244&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ubuntu 설치가 완료되면 로그인 창이 뜨며, 이 창이 뜨면 모든 과정을 잘 따라 온 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. Rosetta2 설정하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkpyNX/btsQx36mRg5/VFXTcToGdOzbBFIDnoXZJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkpyNX/btsQx36mRg5/VFXTcToGdOzbBFIDnoXZJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkpyNX/btsQx36mRg5/VFXTcToGdOzbBFIDnoXZJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkpyNX%2FbtsQx36mRg5%2FVFXTcToGdOzbBFIDnoXZJK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;386&quot; height=&quot;307&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 홈 화면에 들어오면 아래 문서에 있는 방법대로 진행하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;UTM Rosetta 설정&quot; href=&quot;https://docs.getutm.app/advanced/rosetta/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.getutm.app/advanced/rosetta/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1757678859060&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Rosetta&quot; data-og-description=&quot;Documentation for UTM virtual machines&quot; data-og-host=&quot;docs.getutm.app&quot; data-og-source-url=&quot;https://docs.getutm.app/advanced/rosetta/&quot; data-og-url=&quot;https://docs.getutm.app/advanced/rosetta/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.getutm.app/advanced/rosetta/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.getutm.app/advanced/rosetta/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Rosetta&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Documentation for UTM virtual machines&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.getutm.app&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r3nSw/btsQvRlE4xf/IS3gd3ZZutrWtj3mLz0od1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r3nSw/btsQvRlE4xf/IS3gd3ZZutrWtj3mLz0od1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r3nSw/btsQvRlE4xf/IS3gd3ZZutrWtj3mLz0od1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr3nSw%2FbtsQvRlE4xf%2FIS3gd3ZZutrWtj3mLz0od1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;395&quot; height=&quot;315&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Terminal을 실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2760&quot; data-origin-height=&quot;2180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdNOm3/btsQzmYpOlT/Uf0QDjsH3dY20cEJ5IOYC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdNOm3/btsQzmYpOlT/Uf0QDjsH3dY20cEJ5IOYC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdNOm3/btsQzmYpOlT/Uf0QDjsH3dY20cEJ5IOYC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdNOm3%2FbtsQzmYpOlT%2FUf0QDjsH3dY20cEJ5IOYC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;393&quot; height=&quot;310&quot; data-origin-width=&quot;2760&quot; data-origin-height=&quot;2180&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어를 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1757679073820&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkdir /media/rosetta
sudo mount -t virtiofs rosetta /media/rosetta&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drqGId/btsQzaDGGR7/SObv1O5LH7jyS1EAdkfyXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drqGId/btsQzaDGGR7/SObv1O5LH7jyS1EAdkfyXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drqGId/btsQzaDGGR7/SObv1O5LH7jyS1EAdkfyXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrqGId%2FbtsQzaDGGR7%2FSObv1O5LH7jyS1EAdkfyXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;392&quot; height=&quot;312&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/etc/fstab을 텍스트 에디터로 접근하고, 아래 줄을 추가한다.&lt;/p&gt;
&lt;pre id=&quot;code_1757679296455&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rosetta	/media/rosetta	virtiofs	ro,nofail	0	0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2760&quot; data-origin-height=&quot;2180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Rt7rN/btsQx8Np6yp/TGMIq9ivYb8dKb8Z0GmJy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Rt7rN/btsQx8Np6yp/TGMIq9ivYb8dKb8Z0GmJy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Rt7rN/btsQx8Np6yp/TGMIq9ivYb8dKb8Z0GmJy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRt7rN%2FbtsQx8Np6yp%2FTGMIq9ivYb8dKb8Z0GmJy1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;391&quot; height=&quot;309&quot; data-origin-width=&quot;2760&quot; data-origin-height=&quot;2180&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2760&quot; data-origin-height=&quot;2180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yH4V3/btsQxKFO4HG/AbkR4pnLSzWPp2B47NhfH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yH4V3/btsQxKFO4HG/AbkR4pnLSzWPp2B47NhfH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yH4V3/btsQxKFO4HG/AbkR4pnLSzWPp2B47NhfH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyH4V3%2FbtsQxKFO4HG%2FAbkR4pnLSzWPp2B47NhfH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;391&quot; height=&quot;309&quot; data-origin-width=&quot;2760&quot; data-origin-height=&quot;2180&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어를 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1757679460190&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo /usr/sbin/update-binfmts --install rosetta /media/rosetta/rosetta \
     --magic &quot;\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x3e\x00&quot; \
     --mask &quot;\xff\xff\xff\xff\xff\xfe\xfe\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff&quot; \
     --credentials yes --preserve yes --fix-binary yes&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 어떤 이유인지는 모르겠지만 update-binfmts가 없다고 나온다. 이 경우 아래 명령어를 먼저 입력하고, 다시 위의 명령어를 입력하면 해결된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BusLV/btsQwzywtd6/iwhmxpYquCm9tMIdKTOvk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BusLV/btsQwzywtd6/iwhmxpYquCm9tMIdKTOvk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BusLV/btsQwzywtd6/iwhmxpYquCm9tMIdKTOvk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBusLV%2FbtsQwzywtd6%2FiwhmxpYquCm9tMIdKTOvk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;396&quot; height=&quot;315&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;2268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1757679709095&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install binfmt-support&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시나 위 과정을 전부 수행했지만, ELF 파일이 실행되지 않는 경우, 아래 과정을 순차적으로 따라해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. amd64를 지원하도록 apt등을 수정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1930&quot; data-origin-height=&quot;1580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ljpXV/btsQx3FyifU/MfxHCYpkIn4NdeW28K0mt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ljpXV/btsQx3FyifU/MfxHCYpkIn4NdeW28K0mt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ljpXV/btsQx3FyifU/MfxHCYpkIn4NdeW28K0mt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FljpXV%2FbtsQx3FyifU%2FMfxHCYpkIn4NdeW28K0mt1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;392&quot; height=&quot;321&quot; data-origin-width=&quot;1930&quot; data-origin-height=&quot;1580&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/etc/apt/sources.list에서 다음과 같은 구문을 추가한다.&lt;/p&gt;
&lt;pre id=&quot;code_1757774793706&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# ARM64 저장소 (ports)
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports plucky main restricted universe multiverse
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports plucky-updates main restricted universe multiverse
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports plucky-security main restricted universe multiverse

# AMD64 저장소 (archive)
deb [arch=amd64] http://archive.ubuntu.com/ubuntu plucky main restricted universe multiverse
deb [arch=amd64] http://archive.ubuntu.com/ubuntu plucky-updates main restricted universe multiverse
deb [arch=amd64] http://archive.ubuntu.com/ubuntu plucky-security main restricted universe multiverse&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1930&quot; data-origin-height=&quot;1580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QTyTH/btsQzkzKKqq/K6gOiILaLPfIzE5iy2qu00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QTyTH/btsQzkzKKqq/K6gOiILaLPfIzE5iy2qu00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QTyTH/btsQzkzKKqq/K6gOiILaLPfIzE5iy2qu00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQTyTH%2FbtsQzkzKKqq%2FK6gOiILaLPfIzE5iy2qu00%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;388&quot; height=&quot;318&quot; data-origin-width=&quot;1930&quot; data-origin-height=&quot;1580&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. apt update&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어로 기존의 페키지를 업데이트 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1757774901640&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. apt install libc6:amd64&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1930&quot; data-origin-height=&quot;1580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvYD61/btsQxsTp7ML/apzFEAuWQGiggZQdeMSqM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvYD61/btsQxsTp7ML/apzFEAuWQGiggZQdeMSqM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvYD61/btsQxsTp7ML/apzFEAuWQGiggZQdeMSqM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvYD61%2FbtsQxsTp7ML%2FapzFEAuWQGiggZQdeMSqM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;382&quot; height=&quot;313&quot; data-origin-width=&quot;1930&quot; data-origin-height=&quot;1580&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어로 rosetta의 핵심 라이브러리를 amd64버전으로 설치한다.&lt;/p&gt;
&lt;pre id=&quot;code_1757774992430&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install libc6:amd64&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아마 여기까지 하면 대부분 잘 실행될 거다. 하지만 난 그 대부분에 속하지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행시키면 아래와 같은 메시지가 뜬다.&lt;/p&gt;
&lt;pre id=&quot;code_1757775063353&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;user@user:~/Desktop$ ./prob
rosetta error: unhandled auxillary vector type 29
 Trace/breakpoint trap (core dumped)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;찾아보니 최신 Ubuntu에서는 auxillary vector에 수정 사항이 생겨서 rosetta가 정상적으로 처리하지 못하는 것 같았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 다운그레이드를 해서 어떤 버전을 써야하는지 찾아보고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(곧 업데이트 예정)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지 오면 Rosetta 설정을 완료했다. 이제 arm64 기반의 가상 환경에서 x86_64 ELF 파일을 실행할 수 있게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(뭐 하나 까먹은 것 같은데.... 아 맞아 언어 설정이랑 공유 폴더 설정)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;언어 설정&quot; href=&quot;https://swchung09.tistory.com/74&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://swchung09.tistory.com/74&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1757679937864&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Ubuntu 언어 설정&quot; data-og-description=&quot;이 블로그에서는 Ubuntu에서 한국어를 설정하는 법을 적었다.&quot; data-og-host=&quot;blog.aiswstudio.com&quot; data-og-source-url=&quot;https://swchung09.tistory.com/74&quot; data-og-url=&quot;https://blog.aiswstudio.com/74&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/vRaGc/hyZIPdFCPy/2dZnhwMEoJwljILUADkTZk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/kETBU/hyZIQRcGgu/bSh76RpRv4N86k3hGJO6Ck/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/dwa13M/hyZJirNaoY/fP2wnkyO5nq9ZURrV5h25K/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://swchung09.tistory.com/74&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://swchung09.tistory.com/74&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/vRaGc/hyZIPdFCPy/2dZnhwMEoJwljILUADkTZk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/kETBU/hyZIQRcGgu/bSh76RpRv4N86k3hGJO6Ck/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/dwa13M/hyZJirNaoY/fP2wnkyO5nq9ZURrV5h25K/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Ubuntu 언어 설정&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이 블로그에서는 Ubuntu에서 한국어를 설정하는 법을 적었다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.aiswstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;Ubuntu 공유 폴더&quot; href=&quot;https://swchung09.tistory.com/75&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://swchung09.tistory.com/75&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1757683018572&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;UTM Ubuntu desktop 공유 폴더 설정&quot; data-og-description=&quot;이 블로그에서는 UTM 프로그램으로 ubuntu dektop을 설치했을때 어떻게 공유 폴더를 설정하는지 적어놓았다. 터미널을 실행한 다음 아래 명령어를 입력한다.sudo mkdir /home/user/바탕화면/공유폴더sudo mo&quot; data-og-host=&quot;blog.aiswstudio.com&quot; data-og-source-url=&quot;https://swchung09.tistory.com/75&quot; data-og-url=&quot;https://blog.aiswstudio.com/75&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dlJJCu/hyZIVyc8IG/21XIKdda3bM74Y1New19Mk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Eikgq/hyZJb7Va8m/F632CwhGNsQxGiVsSM7481/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/mDPlS/hyZJhmL5aP/kvtw8QmeYKCdeHRVFpLXzk/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://swchung09.tistory.com/75&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://swchung09.tistory.com/75&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dlJJCu/hyZIVyc8IG/21XIKdda3bM74Y1New19Mk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Eikgq/hyZJb7Va8m/F632CwhGNsQxGiVsSM7481/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/mDPlS/hyZJhmL5aP/kvtw8QmeYKCdeHRVFpLXzk/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;UTM Ubuntu desktop 공유 폴더 설정&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이 블로그에서는 UTM 프로그램으로 ubuntu dektop을 설치했을때 어떻게 공유 폴더를 설정하는지 적어놓았다. 터미널을 실행한 다음 아래 명령어를 입력한다.sudo mkdir /home/user/바탕화면/공유폴더sudo mo&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.aiswstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타</category>
      <category>linux</category>
      <category>Rosetta2</category>
      <category>ubuntu</category>
      <category>UTM</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/73</guid>
      <comments>https://swchung09.tistory.com/73#entry73comment</comments>
      <pubDate>Fri, 12 Sep 2025 20:48:32 +0900</pubDate>
    </item>
    <item>
      <title>UTM Ubuntu VM 만들기 (1)</title>
      <link>https://swchung09.tistory.com/72</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;UTM은 맥에서 QEMU 가상화 엔진을 사용하여, 준수한 속도의 가상 환경을 제공한다. 그러나 UTM에서는 QEMU 말고도 여러가지 엔진을 사용할 수 있고, 그중에 Apple 가상화라는 옵션이 있다. 이 걸 사용하면 실험적이지만, 굉장히 빠른 속도의 가상 환경을 사용할 수 있다. (단 호스트와 아키텍처가 일치하지 않는 경우, Apple 가상화를 사용할 수 없다.)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 Apple에서는 Linux VM을 한정으로, Rosetta2를 사용하여 Intel Linux 프로그램(즉, x86_64로 빌드된 파일)을 실행하게 도와준다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 블로그에서는 UTM에서 Ubuntu desktop과 Rosetta2를 사용하여, Intel Linux 프로그램을 실행하는 과정을 전부 기록하였다.&lt;br /&gt;(Macbook M4, Ubuntu desktop 25.04, 25년 9월 12일 기준으로 작성하였다)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. UTM 설치&lt;br /&gt;UTM은 크게 2가지 경로로 설치할 수 있다. 그러나 공식 사이트는 무료지만, 앱스토어는 유료(?)이다. 따라서 공식 사이트에서 설치하는 것을 권장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://mac.getutm.app/&quot;&gt;https://mac.getutm.app/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1757673596480&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;UTM&quot; data-og-description=&quot;Securely run operating systems on your Mac&quot; data-og-host=&quot;mac.getutm.app&quot; data-og-source-url=&quot;https://mac.getutm.app/&quot; data-og-url=&quot;https://mac.getutm.app/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/JFq29/hyZG01d3Dr/LTCGxk64ghq2FmRKoKQSS1/img.png?width=800&amp;amp;height=670&amp;amp;face=0_0_800_670,https://scrap.kakaocdn.net/dn/f0qQi/hyZIZ1D1rk/b2kxHjjAKKpbtQLaS0mMC0/img.png?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/sszRv/hyZJbz3DlR/U54XTOsb64HF3uE2CLTchK/img.png?width=800&amp;amp;height=646&amp;amp;face=0_0_800_646&quot;&gt;&lt;a href=&quot;https://mac.getutm.app/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mac.getutm.app/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/JFq29/hyZG01d3Dr/LTCGxk64ghq2FmRKoKQSS1/img.png?width=800&amp;amp;height=670&amp;amp;face=0_0_800_670,https://scrap.kakaocdn.net/dn/f0qQi/hyZIZ1D1rk/b2kxHjjAKKpbtQLaS0mMC0/img.png?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/sszRv/hyZJbz3DlR/U54XTOsb64HF3uE2CLTchK/img.png?width=800&amp;amp;height=646&amp;amp;face=0_0_800_646');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;UTM&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Securely run operating systems on your Mac&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mac.getutm.app&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. UTM 실행&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;130&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMQj9n/btsQw72i2l3/4W96JGWbJSMReU5rflAsZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMQj9n/btsQw72i2l3/4W96JGWbJSMReU5rflAsZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMQj9n/btsQw72i2l3/4W96JGWbJSMReU5rflAsZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMQj9n%2FbtsQw72i2l3%2F4W96JGWbJSMReU5rflAsZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;293&quot; height=&quot;261&quot; data-origin-width=&quot;130&quot; data-origin-height=&quot;116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 생긴 로고를 누르면 UTM을 실행할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Ubuntu Desktop 다운로드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ubuntu Desktop은 Canonical이 제공하는 무료 OS다. 아래 링크에서 자신의 컴퓨터와 일치하는 버전을 다운로드 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;Ubuntu 사이트&quot; href=&quot;https://ubuntu.com/download/desktop&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ubuntu.com/download/desktop&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1757675041865&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Download Ubuntu Desktop | Ubuntu&quot; data-og-description=&quot;Ubuntu is an open source software operating system that runs from the desktop, to the cloud, to all your internet connected things.&quot; data-og-host=&quot;ubuntu.com&quot; data-og-source-url=&quot;https://ubuntu.com/download/desktop&quot; data-og-url=&quot;https://ubuntu.com/download/desktop&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cHR0YE/hyZIOeL0wf/XZQuAstQfrfKjF1SDjpgP0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/gKUIU/hyZJiSQVB6/kDnclgyMzbumkKuWm0rWS0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/zlQIG/hyZIWcMqso/mqQqBibKVkoXPt9P7F6cSK/img.png?width=317&amp;amp;height=449&amp;amp;face=0_0_317_449&quot;&gt;&lt;a href=&quot;https://ubuntu.com/download/desktop&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ubuntu.com/download/desktop&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cHR0YE/hyZIOeL0wf/XZQuAstQfrfKjF1SDjpgP0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/gKUIU/hyZJiSQVB6/kDnclgyMzbumkKuWm0rWS0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/zlQIG/hyZIWcMqso/mqQqBibKVkoXPt9P7F6cSK/img.png?width=317&amp;amp;height=449&amp;amp;face=0_0_317_449');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Download Ubuntu Desktop | Ubuntu&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Ubuntu is an open source software operating system that runs from the desktop, to the cloud, to all your internet connected things.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ubuntu.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. UTM 가상 머신 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;1528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qbNmD/btsQu8ny7SF/wfRmhTFtyXnlWRMTandzUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qbNmD/btsQu8ny7SF/wfRmhTFtyXnlWRMTandzUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qbNmD/btsQu8ny7SF/wfRmhTFtyXnlWRMTandzUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqbNmD%2FbtsQu8ny7SF%2FwfRmhTFtyXnlWRMTandzUK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;401&quot; height=&quot;336&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;1528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 실행한 UTM 앱에서, 왼쪽 위에 있는 + 버튼을 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;1528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6fwxX/btsQu2HISDP/h5mmWBJFsKrwGyIvlBcSKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6fwxX/btsQu2HISDP/h5mmWBJFsKrwGyIvlBcSKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6fwxX/btsQu2HISDP/h5mmWBJFsKrwGyIvlBcSKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6fwxX%2FbtsQu2HISDP%2Fh5mmWBJFsKrwGyIvlBcSKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;410&quot; height=&quot;343&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;1528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 블로그에서는 Apple 가상화를 사용할 거기 때문에 가상화를 선택한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;1528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4dDx5/btsQxfTwVYE/DvVHnhLAp1id1NCkyKqwZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4dDx5/btsQxfTwVYE/DvVHnhLAp1id1NCkyKqwZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4dDx5/btsQxfTwVYE/DvVHnhLAp1id1NCkyKqwZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4dDx5%2FbtsQxfTwVYE%2FDvVHnhLAp1id1NCkyKqwZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;413&quot; height=&quot;346&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;1528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ubuntu는 Linux 기반의 운영체제 이기 때문에 Linux를 선택한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;1528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PTbmC/btsQvRy8El0/n6dloK4YhzL31JbF8lIKk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PTbmC/btsQvRy8El0/n6dloK4YhzL31JbF8lIKk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PTbmC/btsQvRy8El0/n6dloK4YhzL31JbF8lIKk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPTbmC%2FbtsQvRy8El0%2Fn6dloK4YhzL31JbF8lIKk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;424&quot; height=&quot;355&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;1528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 Apple 가상화와 Rosetta를 활성화 하고, 아까전 다운로드 받았던 iso 이미지를 찾아보기 버튼을 눌러서 불러온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;1528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfvrV6/btsQu4yKNWe/OFq22Nl8mxNkSX2KGpCOK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfvrV6/btsQu4yKNWe/OFq22Nl8mxNkSX2KGpCOK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfvrV6/btsQu4yKNWe/OFq22Nl8mxNkSX2KGpCOK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfvrV6%2FbtsQu4yKNWe%2FOFq22Nl8mxNkSX2KGpCOK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;423&quot; height=&quot;354&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;1528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드웨어는 본인 컴퓨터에 맞는 설정을 하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(필자는 14코어 CPU, 24gb RAM 맥북이라 다음과 같은 설정으로 진행하였다. 너무 많은 자원을 할당하면, 오히려 호스트 시스템과 가상 머신이 둘 다 느려지고, 너무 적게 자원을 할당하면, 가상 머신이 느려진다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;1528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xs6uL/btsQu8Vrnhc/7GUH3xM0xcm46oVpuCEvAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xs6uL/btsQu8Vrnhc/7GUH3xM0xcm46oVpuCEvAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xs6uL/btsQu8Vrnhc/7GUH3xM0xcm46oVpuCEvAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxs6uL%2FbtsQu8Vrnhc%2F7GUH3xM0xcm46oVpuCEvAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;426&quot; height=&quot;357&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;1528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저장소에서는 가상 머신이 사용할 수 있는 가상 디스크의 크기를 정할 수 있다. 이 부분은 딱히 건들이지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXOyP0/btsQv28ICp7/XSorUP8vFmwCTCB1JZxZvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXOyP0/btsQv28ICp7/XSorUP8vFmwCTCB1JZxZvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXOyP0/btsQv28ICp7/XSorUP8vFmwCTCB1JZxZvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXOyP0%2FbtsQv28ICp7%2FXSorUP8vFmwCTCB1JZxZvK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;410&quot; height=&quot;340&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 가상 머신과 파일 데이터를 공유할 필요가 있는 경우, 공유 디렉터리를 설정하는 것이 좋다. 필자는 Share folder라는 이름의 공유 디렉터리를 만들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/du9FBv/btsQxMDwGKD/7z2AkTCsBY0itiORdYJ3h1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/du9FBv/btsQxMDwGKD/7z2AkTCsBY0itiORdYJ3h1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/du9FBv/btsQxMDwGKD/7z2AkTCsBY0itiORdYJ3h1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdu9FBv%2FbtsQxMDwGKD%2F7z2AkTCsBY0itiORdYJ3h1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;417&quot; height=&quot;1440&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 설정한 대로 요약된 정보가 나온다. 빠진 설정이 있는지 확인하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 가상 환경 실행(Ubuntu 이미지 설치) (1)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXkmo8/btsQvSkAb5L/pKxjtjwe6oh5Wr47yeKmLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXkmo8/btsQvSkAb5L/pKxjtjwe6oh5Wr47yeKmLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXkmo8/btsQvSkAb5L/pKxjtjwe6oh5Wr47yeKmLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXkmo8%2FbtsQvSkAb5L%2FpKxjtjwe6oh5Wr47yeKmLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;416&quot; height=&quot;345&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 가상 환경을 실행할 차례이다. 재생 버튼 같이 생긴 걸 클릭해서 실행할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 첫번째 문제가 생겼다. 화면이 비정상적인 비율로 나온 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRplKP/btsQydOriJZ/q8Wi5U9CVKK2JTEABTu861/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRplKP/btsQydOriJZ/q8Wi5U9CVKK2JTEABTu861/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRplKP/btsQydOriJZ/q8Wi5U9CVKK2JTEABTu861/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRplKP%2FbtsQydOriJZ%2Fq8Wi5U9CVKK2JTEABTu861%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;435&quot; height=&quot;274&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런식으로 나오면, 전원 버튼을 누른 후, UTM 홈으로 가서 오른쪽 위에 있는 삼선 버튼(메뉴 버튼)을 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;1528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf3q6i/btsQv2VaLae/ucr6rGjS9JOhbzKOcofAp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf3q6i/btsQv2VaLae/ucr6rGjS9JOhbzKOcofAp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf3q6i/btsQv2VaLae/ucr6rGjS9JOhbzKOcofAp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf3q6i%2FbtsQv2VaLae%2Fucr6rGjS9JOhbzKOcofAp1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;474&quot; height=&quot;397&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;1528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 해상도를 자신의 컴퓨터에 맞는 비율로 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(여기서 동적 해상도를 안 끄면 아까와 같은 비극을 겪을 수 있다. &lt;s&gt;나도 알고 싶지 않았다...&lt;/s&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ol5Lg/btsQvYFirRT/FURvgKKPwrZmICK11kQHT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ol5Lg/btsQvYFirRT/FURvgKKPwrZmICK11kQHT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ol5Lg/btsQvYFirRT/FURvgKKPwrZmICK11kQHT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOl5Lg%2FbtsQvYFirRT%2FFURvgKKPwrZmICK11kQHT0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;463&quot; height=&quot;292&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우여곡절 끝에 부팅에 성공하면 이런 화면이 나올 것이다.(안 나오면, iso 이미지가 잘 들어갔는지 확인)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Enter를 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2934&quot; data-origin-height=&quot;1818&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lnEQ5/btsQyr0aLbB/XPW7HRtxtiuriYUgX0k0xK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lnEQ5/btsQyr0aLbB/XPW7HRtxtiuriYUgX0k0xK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lnEQ5/btsQyr0aLbB/XPW7HRtxtiuriYUgX0k0xK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlnEQ5%2FbtsQyr0aLbB%2FXPW7HRtxtiuriYUgX0k0xK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;445&quot; height=&quot;276&quot; data-origin-width=&quot;2934&quot; data-origin-height=&quot;1818&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 화면이 나오면, 부팅 중이니, 잠시 기다리고, 다음 화면이 나올 때까지 기다린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/46nZ9/btsQyt4yyQF/R9aQHEwRdIZsRYEVHJZvxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/46nZ9/btsQyt4yyQF/R9aQHEwRdIZsRYEVHJZvxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/46nZ9/btsQyt4yyQF/R9aQHEwRdIZsRYEVHJZvxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F46nZ9%2FbtsQyt4yyQF%2FR9aQHEwRdIZsRYEVHJZvxk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;449&quot; height=&quot;283&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 두 번째 문제가 발생했다. ubuntu에서 언어 선택을 할 때, 한국어가 깨져서 선택을 할 수 없다. 이럴 경우 그냥 영어로 진행한 후, 나중에 설정하는 것이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u854W/btsQxqHOVua/KQP3ep6uFAU2LwQnGZoPl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u854W/btsQxqHOVua/KQP3ep6uFAU2LwQnGZoPl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u854W/btsQxqHOVua/KQP3ep6uFAU2LwQnGZoPl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu854W%2FbtsQxqHOVua%2FKQP3ep6uFAU2LwQnGZoPl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;449&quot; height=&quot;283&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 별다르게 설정할 부분이 없어서 바로 Next버튼을 눌렀다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNSdEB/btsQypafgcX/k1xfyIr4Z2kQQbA1Kz1t3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNSdEB/btsQypafgcX/k1xfyIr4Z2kQQbA1Kz1t3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNSdEB/btsQypafgcX/k1xfyIr4Z2kQQbA1Kz1t3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNSdEB%2FbtsQypafgcX%2Fk1xfyIr4Z2kQQbA1Kz1t3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;459&quot; height=&quot;289&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 추후 언어를 변경할 거라서, 바로 Next 버튼을 눌렀다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FwSoN/btsQwC2zDm9/vReeUaJ5ghws6t0KNPSquK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FwSoN/btsQwC2zDm9/vReeUaJ5ghws6t0KNPSquK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FwSoN/btsQwC2zDm9/vReeUaJ5ghws6t0KNPSquK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFwSoN%2FbtsQwC2zDm9%2FvReeUaJ5ghws6t0KNPSquK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;450&quot; height=&quot;284&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 손 대지 않는 것이 좋다.(가상 네트워크 어뎁터 사용이 기본이기 때문)&lt;br /&gt;바로 Next를 눌렀다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0v5Zi/btsQwGYdSmu/V32lZywtUkBKa7AIkPi6V1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0v5Zi/btsQwGYdSmu/V32lZywtUkBKa7AIkPi6V1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0v5Zi/btsQwGYdSmu/V32lZywtUkBKa7AIkPi6V1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0v5Zi%2FbtsQwGYdSmu%2FV32lZywtUkBKa7AIkPi6V1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;451&quot; height=&quot;284&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 업데이트 해도 되고, 안 해도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필자는 최대한 빠르게 설정하기 위해 Skip을 눌렀다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dce5Lj/btsQxr012U3/JL7vKsmLuAIOsimzQCkjC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dce5Lj/btsQxr012U3/JL7vKsmLuAIOsimzQCkjC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dce5Lj/btsQxr012U3/JL7vKsmLuAIOsimzQCkjC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdce5Lj%2FbtsQxr012U3%2FJL7vKsmLuAIOsimzQCkjC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;460&quot; height=&quot;290&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 Ubuntu ISO로 부팅했을때, 메인 디스크에 Ubuntu를 설치할지, 아니면 ISO에서 부팅할지 설정할 수 있다. 일단은 기본 설정 대로 Ubuntu를 디스크에 설치하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLkQfN/btsQyr0aYR7/pGkakbAI0IMabgs7Xf4EN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLkQfN/btsQyr0aYR7/pGkakbAI0IMabgs7Xf4EN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLkQfN/btsQyr0aYR7/pGkakbAI0IMabgs7Xf4EN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLkQfN%2FbtsQyr0aYR7%2FpGkakbAI0IMabgs7Xf4EN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;464&quot; height=&quot;293&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 Automated with autoinstall file을 선택하면 고급 설정을 지원하지만, 지금은 굳이 필요 없음으로 바로 Next를 눌렀다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2934&quot; data-origin-height=&quot;1818&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m22MH/btsQvXM8uwe/Y5dNFFKvajbJC02IqFPfik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m22MH/btsQvXM8uwe/Y5dNFFKvajbJC02IqFPfik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m22MH/btsQvXM8uwe/Y5dNFFKvajbJC02IqFPfik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm22MH%2FbtsQvXM8uwe%2FY5dNFFKvajbJC02IqFPfik%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;462&quot; height=&quot;286&quot; data-origin-width=&quot;2934&quot; data-origin-height=&quot;1818&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ubuntu 앱을 얼마나 설치할지 선택할 수 있는 부분이다. 필자는 앱이 필요하면 직접 설치하고 싶어서, 바로 Next를 눌렀다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7Ltj2/btsQwIaC6s0/2cNYxcXckS1Wj9UQAp8Op0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7Ltj2/btsQwIaC6s0/2cNYxcXckS1Wj9UQAp8Op0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7Ltj2/btsQwIaC6s0/2cNYxcXckS1Wj9UQAp8Op0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7Ltj2%2FbtsQwIaC6s0%2F2cNYxcXckS1Wj9UQAp8Op0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;469&quot; height=&quot;296&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분에서는 하드웨어 드라이버와 미디어 포멧을 자동 설치할 수 있다. UTM을 사용하고 있기 때문에 1번째 설정은 큰 의미가 없고, 동영상이나 음악을 실행할 경우 2번째 설정을 체크하는 것이 좋다. (&lt;s&gt;뭐 어차피 VLC가 다 해주겠지만&lt;/s&gt;)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5bFzj/btsQyqUyOSj/u8aEGTiW6tcHhQ1lWNC35K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5bFzj/btsQyqUyOSj/u8aEGTiW6tcHhQ1lWNC35K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5bFzj/btsQyqUyOSj/u8aEGTiW6tcHhQ1lWNC35K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5bFzj%2FbtsQyqUyOSj%2Fu8aEGTiW6tcHhQ1lWNC35K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;474&quot; height=&quot;299&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디스크 전체에 설치할지 수동으로 특정 파티션에만 설치할지 선택할 수 있다. 어차피 가상 환경이고, 이전에 OS를 설치하여 사용한 적이 없기 때문에 바로 Next를 눌렀다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bliBLQ/btsQwQUf1qi/4PG5GYrNi21bksOlXKczmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bliBLQ/btsQwQUf1qi/4PG5GYrNi21bksOlXKczmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bliBLQ/btsQwQUf1qi/4PG5GYrNi21bksOlXKczmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbliBLQ%2FbtsQwQUf1qi%2F4PG5GYrNi21bksOlXKczmK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;470&quot; height=&quot;296&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분에서는 암호화를 선택할 수 있다. 지금 당장은 암호화가 필요 없음으로 바로 Next를 눌렀다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지 정리했을때, 글이 너무 길어진 것 같았다. 따라서 이어지는 과정은 다음 블로그에서 정리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;다음 과정&quot; href=&quot;https://swchung09.tistory.com/73&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://swchung09.tistory.com/73&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1757677743069&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;UTM Ubuntu VM 만들기 (2)&quot; data-og-description=&quot;이 블로그는 Ubuntu VM을 만드는 과정이다. 이전 과정에서 계정 설정 전까지 했으므로, 못했다면 이전 블로그를 참고하고 진행하는 것이 좋다.https://swchung09.tistory.com/72 UTM Ubuntu VM 만들기 (1)UTM은 맥&quot; data-og-host=&quot;blog.aiswstudio.com&quot; data-og-source-url=&quot;https://swchung09.tistory.com/73&quot; data-og-url=&quot;https://blog.aiswstudio.com/73&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/FyuZ4/hyZIQDGdOK/WrKxkEpkSmfrsZslP0Qr3k/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cWxx3z/hyZI7xF7MW/jZ0EfYW6Gi4pzx5IBaQhZk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Piqrv/hyZIZ1EvMH/KkbqNdEPltuwPO6Zh6u6kK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://swchung09.tistory.com/73&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://swchung09.tistory.com/73&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/FyuZ4/hyZIQDGdOK/WrKxkEpkSmfrsZslP0Qr3k/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cWxx3z/hyZI7xF7MW/jZ0EfYW6Gi4pzx5IBaQhZk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Piqrv/hyZIZ1EvMH/KkbqNdEPltuwPO6Zh6u6kK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;UTM Ubuntu VM 만들기 (2)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이 블로그는 Ubuntu VM을 만드는 과정이다. 이전 과정에서 계정 설정 전까지 했으므로, 못했다면 이전 블로그를 참고하고 진행하는 것이 좋다.https://swchung09.tistory.com/72 UTM Ubuntu VM 만들기 (1)UTM은 맥&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.aiswstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타</category>
      <category>linux</category>
      <category>Rosetta2</category>
      <category>ubuntu</category>
      <category>UTM</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/72</guid>
      <comments>https://swchung09.tistory.com/72#entry72comment</comments>
      <pubDate>Fri, 12 Sep 2025 20:46:46 +0900</pubDate>
    </item>
    <item>
      <title>네트워크 기초 정리</title>
      <link>https://swchung09.tistory.com/71</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크는 다양한 노드(외부와 통신이 가능한 모든 기기, 컴퓨터, 핸드폰, 공유기 등)들이 링크(노드를 잇는 선, 물리적일 수도 있고 가상일 수도 있음)로 연결되어 데이터를 주고 받는 구조이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크는 규모에 따라 4가지로 나눌 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PAN(Personal Area Network) : 개인이 소유한 기기에서 통신이 이루어지는 매우 작은 규모의 네트워크 (예: Wi-Fi, Bluetooth, USB 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LAN(Local Area Network) : 한 건물에서 통신이 이루어지는 작은 규모의 네트워크 (예: 오피스 LAN, 아파트 LAN 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MAN(Metropolitan Area Network) : 한 도시나 지역에서 통신이 이루어지는 큰 규모의 네트워크 (예: 강서구 네트워크, 서울시 네트워크)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WAN(Wide Area Network) : 여러 ISP(Internet Service Provider, 인터넷 서비스 제공자, SKT, KT, LGU+등)들이 연결되어 이루어지는 매우 큰 규모의 네트워크 (예: SKT 네트워크, KT 네트워크 등)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크는 여러 모델로 설명된다. 그 중 2가지를 설명하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OSI 7계층 : 네트워크에 빠짐없이 등장하는 모델이지만, 실제 과정과는 일부 차이가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7번째 계층) 응용 계층 : HTTP, FTP등을 사용하여 통신하는 계층&lt;br /&gt;6번째 계층) 표현 계층 : 이미지, 동영상등을 전송하는 계층&lt;br /&gt;5번째 계층) 세션 계층 : 연결을 유지하는 데이터를 전송하는 계층&lt;br /&gt;4번째 계층) 전송 계층 : 프로토콜과 포트번호를 포함하여 통신하는 계층&lt;br /&gt;3번째 계층) 네트워크 계층 : IP 주소 기반으로 통신하는 계층&lt;br /&gt;2번째 계층) 데이터링크 계층 : MAC 주소 기반으로 통신하는 계층&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번째 계층) 물리 계층 : 2진 데이터를 전송하는 물리적인 계층&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TCP/IP : OSI 계층 일부를 생략하여 표시하며, 실제 과정을 설명할 수 있다.&lt;br /&gt;5번째 계층) 응용 계층 : HTTP, FTP등을 사용하여 통신하는 계층&lt;br /&gt;4번째 계층) 전송 계층 : 프로토콜과 포트번호를 포함하여 통신하는 계층&lt;br /&gt;3번째 계층) 네트워크 계층 : IP 주소 기반으로 통신하는 계층&lt;br /&gt;2번째 계층) 데이터링크 계층 : MAC 주소 기반으로 통신하는 계층&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1번째 계층) 물리 계층 : 2진 데이터를 전송하는 물리적인 계층&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;IP주소는 8bit단위로 옥텟으로 불리며, 2가지 버전이 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;IPv4 : 32비트로 이루어져 있으며, 192.168.0.1과 같은 주소를 한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;IPv6 : IPv4의 주소 부족 문제를 해결하기 위해 나왔으며, 128비트로 이루어져 있고, [2001:4860:4860:0000:0000:0000:0000]과 같은 주소를 한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;IP주소는 네트워크 ID와 호스트 ID로 나뉜다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;네트워크 ID는 서로 다른 네트워크를 구분하는데 사용되고, 호스트 ID는 같은 네트워크에서 서로 다른 장치를 구분하는데 사용된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;서브넷 마스크는 255.255.255.0과 같은 형식으로 나타내며, 어디까지 네트워크 ID인지를 알려주는 역할을 한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;prefix는 서브넷 마스크를 10진수로 축약한 형태이다. 255.255.255.0일 경우 /24로 축약한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;참고) 와일드카드 마스크는 서브넷 마스크를 반전시킨 형태이다. 서브넷 마스크가 255.255.255.0일 경우, 0.0.0.255로 나타내며, AND연산으로 네트워크 주소를 쉽게 구할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;서브넷팅&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기존에 있던 네트워크를 특정 크기로 분할하여 여러 네트워크로 만드는 과정을 서브넷팅이라고 한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;서브넷팅에는 2가지 방식이 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;FLSM(Fixed Length Subnet Mask) : 고정된 크기로 분할하는 방식이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;VLSM(Variable Length Subnet Mask) : 동적인 크기로 분할하는 방식이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라우팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라우팅은 크게 2가지 방식으로 나누어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정적 라우팅(Static routing) : 정해진 노드로 데이터를 전송하는 방식이다. 기본 라우팅(Default routing)도 여기에 속한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동적 라우팅(Dynamic routing) : 동적으로 최적의 노드를 찾아 데이터를 전송하는 방식이다. RIP, OSPF, EIGRP등이 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RIP 라우팅&lt;/p&gt;
&lt;pre id=&quot;code_1758507211645&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;router rip
no auto-summary
version 2
network [네트워크 주소]&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OSPF 라우팅&lt;/p&gt;
&lt;pre id=&quot;code_1758507275337&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;router ospf [프로세스 id]
network [네트워크 주소] [와일드카드 마스크 : 서브넷 마스크를 비트 반전 시키면 된다. 예) 255.255.255.0 -&amp;gt; 0.0.0.255] area [구역 번호]&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EIGRP 라우팅&lt;/p&gt;
&lt;pre id=&quot;code_1758507332537&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;router eigrp [as-number]
no auto-summary
network [네트워크 주소] [와일드카드 마스크]&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;라우팅 재분배&lt;br /&gt;라우팅 재분배는 RIP, OSPF, EIGRP, Static 등의 서로 다른 라우팅 사이에서 통신이 가능하게 해주는 방법이다. 재분배는 redistribute 명령어로 할 수 있다. (참고로 동적 라우팅 끼리는 각각의 라우팅을 전부 재분배해야하지만, 동적 라우팅에서 정적 라우팅으로 재분배 할 경우 동적 라우팅에만 재분배 설정을 하면 된다)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;RIP 재분배&lt;/p&gt;
&lt;pre id=&quot;code_1758507438620&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;redistribute [라우팅 프로토콜] [metric [홉 수]]&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OSPF 재분배&lt;/p&gt;
&lt;pre id=&quot;code_1758507485757&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;redistribute [라우팅 프로토콜] [프로세스 id] metric [metric값] subnets&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;pre id=&quot;code_1758507549374&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;redistribute [라우팅 프로토콜] metric [대역폭, 지연, 신뢰도, 부하, MTU]&lt;/code&gt;&lt;/pre&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>IP</category>
      <category>OSI</category>
      <category>prefix</category>
      <category>TCP</category>
      <category>네트워크</category>
      <category>노드</category>
      <category>라우팅 재분배</category>
      <category>서브넷 마스크</category>
      <category>서브넷팅</category>
      <category>와일드카드 마스크</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/71</guid>
      <comments>https://swchung09.tistory.com/71#entry71comment</comments>
      <pubDate>Mon, 1 Sep 2025 23:19:07 +0900</pubDate>
    </item>
    <item>
      <title>NAT, PAT</title>
      <link>https://swchung09.tistory.com/70</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;NAT은 Network Address Translation으로, 사설 ip를 공인 ip로 변경하는 서비스이다. 이 서비스는 가정용 공유기에 대부분 탑재 되어있으며, NAT이 있으면 여러가지 장점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- NAT은 한 ip를 여러 기기가 사용할 수 있어, 경제적이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 근래에 ipv4주소가 부족해지면서, NAT이 공인 ip주소의 수를 줄여주는 역할을 할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- NAT은 하나의 장치로 데이터가 나가기 때문에 방화벽을 구축하기 쉽다&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;NAT은 IP masquerading 방식으로 동작한다. 이 동작 방식은 하나의 공인 ip뒤에 여러 사설 ip를 할당하는 기법이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NAT에는 여러 종류가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Static NAT(정적 NAT) : 공인 ip와 사설 ip를 1:1 방식으로 변환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Dynamic NAT(동적 NAT) : &amp;nbsp;공인 ip와 사설 ip를 1:n등으로 변환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Network Address Port Translation(NAPT) : Dynamic NAT에 포트까지 변환하는 방식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Source NAT(SNAT) : Static NAT와 유사하지만, 출발지 ip만 공개한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Destination NAT(DNAT) : Static NAT와 유사하지만, 도착지 ip만 공개한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 외에도 다양한 NAT가 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PAT는 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Port Address Translation으로, Dynamic NAT의 한 종류이다. 이렇게 변환된 ip 주소는 호스트를 구분할 수 없어서, 포트번호로 구분한다. PAT에서 사용하는 포트는 주로 well-known(http, ssh 등의 서비스가 대부분 서버로 사용하는 포트)을 제외하고 49152(or 1024) ~ 65535 중에서 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;896&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/corh5F/btsP75RV6qg/yVeMTg1NuaSatmlB37dzE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/corh5F/btsP75RV6qg/yVeMTg1NuaSatmlB37dzE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/corh5F/btsP75RV6qg/yVeMTg1NuaSatmlB37dzE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcorh5F%2FbtsP75RV6qg%2FyVeMTg1NuaSatmlB37dzE0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;410&quot; height=&quot;383&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;896&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 이미지는 패킷트레이서에서 PAT를 실습하기 위해 만든 토폴로지다. 이 토폴로지에서는 공유기가 PAT역할을 하여, PC에서 온 데이터를 마치 공유기가 보내는 것처럼 해준다. (내부 IP를 외부 IP로 데이터를 전송한다는 점에서 프록시와 유사한 성격을 갖는다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 PAT가 진행되는 예시이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &amp;nbsp;PC0이 기본 게이트웨이(공유기의 ip주소)로 서버로 향하는 데이터를 전송한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 공유기에서 PC0이 보낸 데이터를 수신한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 공유기는 PAT 변환 표에 PC0의 주소등을 기록하고, 포트 번호(공인 ip주소로 나갈때 쓰임)를 기록한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 공유기는 이후 인터넷을 거쳐서 서버에 도착한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(이때 서버는 공유기의 IP주소를 알 수 있지만, PC0의 IP주소는 알 수 없다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 서버는 요청을 처리한 다음 공유기로 데이터를 전송한다. 이 때 서버는 공유기에서 요청할때 쓴 포트로 데이터를 전송한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 공유기가 데이터를 받으면, PAT 변환 표에서 어디로 전송할지 찾고, 데이터를 PC0으로 전송해준다&lt;/p&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>NAT</category>
      <category>pat</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/70</guid>
      <comments>https://swchung09.tistory.com/70#entry70comment</comments>
      <pubDate>Wed, 27 Aug 2025 22:07:16 +0900</pubDate>
    </item>
    <item>
      <title>Express &amp;amp;&amp;amp; MySQL 예제</title>
      <link>https://swchung09.tistory.com/69</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 Express와 MySQL을 연동하여 구축해본 테스트 서버를 설명하고, 만들면서 발생한 문제를 해결하는 과정을 적었다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 node로 직접 실행할 app.js를 생성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1754134476552&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const express = require('express'); // Express 프레임워크 불러오기
const session = require('express-session'); // Express 프레임워크에서 사용할 세션 불러오기
const db = require('./db'); // db.js에서 db 불러오기(추후 설명)
const loginRouter = require('./routes/login') // login.js에서 로그인 라우터 불러오기(추후 설명)
const registerRouter = require('./routes/register') // register.js에서 회원가입 라우터 불러오기(추후 설명)
const app = express(); // app 객체 생성
const port = 3000; // 앱에서 사용할 포트

app.set('view engine', 'pug'); // pug 템플릿 엔진 사용
app.set('views', './views');

app.use(session({ // 세션 사용
    secret: 'secret-key', // 세션에서 사용할 비밀번호
    resave: false, // 요청마다 세션을 다시 쓰지 않음
    saveUninitialized: true // 세션이 비어있어도 사용
});

app.use('/login', loginRouter); // 로그인 라우터 사용
app.use('/register', registerRouter); // 회원가입 라우터 사용

app.get('/', (req, res) =&amp;gt; { // 메인 페이지
    res.render('index', {username: req.session.username});
});

app.listen(port, (err) =&amp;gt; { // 서버 실행
    if (err) {
        console.log(`에러: ${err}`);
    }else {
        console.log(`서버가 http://localhost:${port} 에서 실행 중입니다.`);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 db.js로 MySQL DB를 불러온다.&lt;/p&gt;
&lt;pre id=&quot;code_1754134708049&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const mysql = require('mysql2'); // MySQL 불러오기
const dotenv = require('dotenv'); // .env에서 환경 변수 불러오는 용도

dotenv.config(); // .env에서 환경 변수를 불러오기

const db = mysql.createConnection({ // DB 불러오기
    host: process.env.DB_HOST, // DB 주소(대부분의 경우 127.0.0.1(localhost))
    user: process.env.DB_USER, // DB 사용자 이름(대부분의 경우 root나 user)
    password: process.env.DB_PASSWORD, // DB 비밀번호
    database: process.env.DB_NAME // DB 이름
});

db.connect((err) =&amp;gt; { // DB 연결
   if (err) {
       console.error(`DB 연결 에러: ${err}`);
   }else {
       console.log('DB에 연결되었습니다.');
   }
});

module.exports = db; // 중요!&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 난 module.exports를 설정하지 않아서, 다른 곳에서 require로 불러오지 못하는 버그가 있었다. 꼭 적어주도록 하자.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 db.js로 DB를 불러올 수 있게 되었다. 다음으로는 /routes에 login.js로 로그인 기능을 구현해보자.&lt;/p&gt;
&lt;pre id=&quot;code_1754135368000&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const express = require('express'); // Express 프레임워크 불러오기
const db = require('../db'); // 상위 폴더에 있는 db.js 불러오기

const router = express.Router(); // 라우터 객체 생성

router.use(express.json()); // 모든 요청을 json 객체로 파싱
router.use(express.urlencoded({extended: false}); // application/x-www-form-urlencoded를 파싱하는 설정

router.get('/', (req, res) =&amp;gt; { // /login get 처리
    const message = req.session.message; // 1회용 메시지 베너
    req.session.message = null;
    res.render('login', {message: message});
});

router.post('/', (req, res) =&amp;gt; { // /login post(폼 제출) 처리
    const {username, password} = req.body; // 중요!
    // DB에서 값 찾아보기
    db.query('SELECT * FROM info WHERE username = ? AND password = ?', [username, password], (err, results, fields) =&amp;gt; {
        if (results.length &amp;gt; 0) {
            req.session.isLoggedIn = true;
            req.session.username = results[0].username;
            req.session.message = '로그인 성공'; // 로그인 성공 배너 메시지
            res.redirect('/'); // /로 이동
        }else {
            req.session.message = '로그인 실패'; // 로그인 실패 배너 메시지
            res.redirect('/login'); // /login으로 이동
        }
    });
});

module.exports = router; // app.js에서 불러오기 위한 설정&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 난 const {username, password} = req.body;로 하지 않고 []로 받아서 에러가 발생하였다. 이는 req.body가 배열이 아니라 키와 값이 매칭되는 객체 형태이기 때문에 {}로 파싱해야한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 회원 가입을 위해 /routes에 register.js를 만들어보자.&lt;/p&gt;
&lt;pre id=&quot;code_1754135582393&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const express = require('express'); // Express 프레임워크 불러오기
const db = require('db'); // DB 불러오기

const router = express.Router(); // 라우터 객체 생성

router.use(express.json()); // 모든 요청을 json으로 파싱
router.use(express.urlencoded({extended: false})); // application/x-www-form-urlencoded를 파싱하는 설정

router.get('/', (req, res) =&amp;gt; { // /register get 처리
    const message = req.session.message; // 1회용 베너 메시지
    req.session.message = null;
    res.render('register', {message: message});
});

rotuer.post('/', (req, res) =&amp;gt; { // /register post(폼 제출) 처리
    const {username, password} = req.body; // username과 password 파싱
    // 이미 DB에 있는 아이디인지 확인
    db.query('SELECT COUNT(*) FROM info WHERE username = ?', [username], (err, results, fields) =&amp;gt; {
        const count = results[0]['COUNT(*)'];
        if (count === 0){
            // DB에 값 추가
            db.query('INSERT INTO info (username, password) VALUES (?, ?)', [username, password], (err, results) =&amp;gt; {
                if (err) {
                    console.error(`회원가입 에러: ${err}`);
                }else {
                    req.session.message = '회원가입 성공'; // 회원 가입 성공 배너 메시지
                }
            });
        }
    });
});

module.exports = router; // app.js에서 불러오기 위한 설정&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 index.pug, login.pug, register.pug는 다음과 같이 작성하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;index.pug&lt;/p&gt;
&lt;pre id=&quot;code_1754136018397&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;doctype html
html(lang=&quot;en&quot;)
    head
        meta(charset=&quot;UTF-8&quot;)
        meta(name=&quot;viewport&quot;, content=&quot;width=device-width, initial-scale=1.0&quot;)
        title 메인 페이지
    body 
        if username 
            h1 Welcome #{username} !! 
        else 
            h1 Login first 
            a(href=&quot;/login&quot;) Login&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;login.pug&lt;/p&gt;
&lt;pre id=&quot;code_1754136033816&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;doctype html
html(lang=&quot;en&quot;)
    head
        meta(charset=&quot;UTF-8&quot;)
        meta(name=&quot;viewport&quot;, content=&quot;width=device-width, initial-scale=1.0&quot;)
        title 로그인
    body 
        if message 
            p #{message}
        h2 로그인
        form(action=&quot;/login&quot;, method=&quot;post&quot;)
            label(for=&quot;username&quot;) 사용자 이름 : 
            input(type=&quot;text&quot;, id=&quot;username&quot;, name=&quot;username&quot;, required)
            br
            label(for=&quot;password&quot;) 비밀번호 : 
            input(type=&quot;text&quot;, id=&quot;password&quot;, name=&quot;password&quot;, required)
            br
            button(type=&quot;submit&quot;) 로그인&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;register.pug&lt;/p&gt;
&lt;pre id=&quot;code_1754136047174&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;doctype html
html(lang=&quot;en&quot;)
    head
        meta(charset=&quot;UTF-8&quot;)
        meta(name=&quot;viewport&quot;, content=&quot;width=device-width, initial-scale=1.0&quot;)
        title 회원가입
    body 
        if message 
            p #{message}
        h2 회원가입
        form(action=&quot;/register&quot;, method=&quot;post&quot;)
            label(for=&quot;username&quot;) 사용자 이름 : 
            input(type=&quot;text&quot;, id=&quot;username&quot;, name=&quot;username&quot;, required)
            br
            label(for=&quot;password&quot;) 비밀번호 : 
            input(type=&quot;text&quot;, id=&quot;password&quot;, name=&quot;password&quot;, required)
            br
            button(type=&quot;submit&quot;) 회원가입&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 Express - MySQL을 연동시킨 예제의 코드를 분석하고, 내가 실수한 2군데를 설명해보았다.&lt;/p&gt;</description>
      <category>DB연동</category>
      <category>Express</category>
      <category>MYSQL</category>
      <category>실수?</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/69</guid>
      <comments>https://swchung09.tistory.com/69#entry69comment</comments>
      <pubDate>Sat, 2 Aug 2025 21:01:41 +0900</pubDate>
    </item>
    <item>
      <title>DB</title>
      <link>https://swchung09.tistory.com/68</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;DB는 DataBase의 약자로 데이터를 저장하는 역할을 한다. DB는 DataBase Management System(DBMS)로 관리하고, DBMS에는 MySQL, ORACLE, MariaDB등이 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB는 다음과 같은 특징이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실시간 접근성 : 언제든지 즉시 데이터를 조회하거나 수정할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계속적인 변화 : 지속적으로 데이터가 추가되거나 삭제될 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동시 공용 : 여러 사용자가 동시에 DB를 이용할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용에 의한 참조 : 내용 기반으로 값을 찾음&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관계형 DB는 테이블로 이루어져 있으며 key와 value의 관계를 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;열 : 고유한 이름을 가지고 자신만의 타입을 가짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;행 : 데이터의 묶음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;값 : 타입과 맞는 열과 행에 대응하는 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관계 : 데이터를 테이블 간의 관계를 설정하여 데이터를 연결&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼리 문법은 다양하지만 그중 MySQL은 다음과 같은 문법을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB 생성&lt;/p&gt;
&lt;pre id=&quot;code_1754009202676&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE DATABASE [DB 이름];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TABLE 생성&lt;/p&gt;
&lt;pre id=&quot;code_1754009255033&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE [TABLE 이름](ID INT, Name VARCHAR(30));&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;값 추가&lt;/p&gt;
&lt;pre id=&quot;code_1754009356051&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;INSERT INTO [TABLE 이름](ID, Name)
VALUES(1, '예시이름');&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;열 편집&lt;/p&gt;
&lt;pre id=&quot;code_1754009466292&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER TABLE [TABLE 이름] ADD [열 이름] [타입]; # 열 추가
ALTER TABLE [TABLE 이름] DROP [열 이름]; # 열 삭제
ALTER TABLE [TABLE 이름] MODIFY COLUMN [열 이름]; [타입] # 열 타입 변경&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB 삭제&lt;/p&gt;
&lt;pre id=&quot;code_1754009514983&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DROP DATABASE [DB 이름];&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TABLE 삭제&lt;/p&gt;
&lt;pre id=&quot;code_1754009553938&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DROP TABLE [TABLE 이름]; # 테이블 전체 삭제
TRUNCATE TABLE [TABLE 이름]; # 테이블 데이터 삭제&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;값 업데이트(수정)&lt;/p&gt;
&lt;pre id=&quot;code_1754009720901&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;UPDATE [TABLE 이름]
SET [열 이름]=[값]...
WHERE ID = [값];&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TABLE 출력&lt;/p&gt;
&lt;pre id=&quot;code_1754009978034&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT [열 이름] FROM [TABLE 이름];&lt;/code&gt;&lt;/pre&gt;</description>
      <category>기타</category>
      <category>DB</category>
      <category>데이터베이스</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/68</guid>
      <comments>https://swchung09.tistory.com/68#entry68comment</comments>
      <pubDate>Fri, 1 Aug 2025 10:03:33 +0900</pubDate>
    </item>
    <item>
      <title>Express(Middleware, Router)</title>
      <link>https://swchung09.tistory.com/67</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;미들웨어는 클라이언트의 요청에 응답하기 전에 거쳐가는 함수다. 미들웨어는 app.use로 설정할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미들웨어에는 크게 3가지 종류가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 애플리케이션 레벨 미들웨어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 애플리케이션에서 동작하게 설정된 미들웨어다.&lt;/p&gt;
&lt;pre id=&quot;code_1754007682630&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const express = require('express');
const app = express();
app.use((req, res) =&amp;gt; {
});&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 예외 처리 미들웨어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요청을 처리하는 중 문제가 생기면 호출되는 미들웨어다. 애플리케이션과 다르게 인자가 4개가 필요하다.&lt;/p&gt;
&lt;pre id=&quot;code_1754007802219&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const express = require('express');
const app = express();
app.use((err, req, res, next) =&amp;gt; {
});&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 내장 미들웨어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자주 호출되는 미들웨어는 express 네임스페이스로 접근할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1754008103132&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const express = require('express');
const app = express();
app.use(express.static('public')); // 요청 시 ./public 내 엔드포인트 이름을 가진 파일 제공
app.use(express.json()); // 요청 내용이 json인 경우 자동으로 파싱
app.use(express.urlencoded({extended:true})); // application/x-www-form-urlencoded 데이터를 자동으로 파싱
app.use(express.raw()); // 요청 내용을 buffer로 처리
app.use(express.text()); // 요청 내용을 plain text로 처리&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미들웨어 함수에서 next 함수를 사용할 경우 다음 미들웨어 함수로 넘어간다.&lt;/p&gt;
&lt;pre id=&quot;code_1754008312052&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const login = (req, res) =&amp;gt; {
    if (req.isLogined()) {
        next();
    }else {
        res.status(401).send('No');
    }
}
app.use(login);
app.get('/', (req, res) =&amp;gt; {
    res.send('Welcome');
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라우터는 라우팅을 모듈화하고 정리하기 위한 미들웨어다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;express.Router()로 라우터 객체를 선언하고 app.use로 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1754008620780&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const express = require('express');
const app = express();
const router = express.Router();

router.get('/', (req, res) =&amp;gt; {
    res.send('User hi');
}

app.use('/user', router);&lt;/code&gt;&lt;/pre&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>라우터</category>
      <category>미들웨어</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/67</guid>
      <comments>https://swchung09.tistory.com/67#entry67comment</comments>
      <pubDate>Fri, 1 Aug 2025 09:37:21 +0900</pubDate>
    </item>
    <item>
      <title>Express(Cookie, Session)</title>
      <link>https://swchung09.tistory.com/65</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Express 프레임워크에서는 cookie와 session기능을 사용할 수 있다. 우선 쿠키와 세션은 비슷한 원리로 작동되지만, 보안성등에서 차이가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠키는 브라우저 내에 저장되는 데이터이다. 이 쿠키는 브라우저가 자유롭게 수정하는 것이 가능하기 때문에 위변조가 매우 쉽다. 쿠키는 주로 로그인 상태 유지 등에 쓰인다. &lt;s&gt;(왜 내 쿠키는 추적용이지...)&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세션은 쿠키의 이런 단점을 보완하여 서버 내에서 저장하여 위변조가 불가능하게 하는 기술이다. 이 세션은 민감한 정보여도 브라우저에서 접근할 수 없기 때문에(암호화 됨) 안전하다.(다만 키를 너무 쉬운 걸로 설정하면 위험하다.)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Express에서는 cookie는 cookie-parser로, session은 express-session으로 설정할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1751821707326&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install cookie-parser express-session&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제는 cookie부터 설명하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Express는 use함수로 여러 기능을 추가할 수 있다. cookie는 다음과 같이 추가 할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1751821849125&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
app.use(cookieParser());&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cookie에 secret을 설정하고 싶으면 다음과 같이 하면 된다.(서명된 쿠키를 만들려면 필수로 설정해야 한다)&lt;/p&gt;
&lt;pre id=&quot;code_1751821896542&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;app.use(cookieParser('asdf'));&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 쿠키를 설정하려면 response.cookie함수로 설정할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1751821994627&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;app.get('/', (req, res) =&amp;gt; {
    res.cookie('cookie', 'yes', {
        signed: true,
        httpOnly: true
    }
    res.send('a');
})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 signed 쿠키랑 httpOnly 옵션을 설정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;signed 쿠키는 이전의 unsigned 쿠키(서명되지 않아서 조작이 가능한 쿠키)의 단점을 보완한 쿠키이다. 이런 방식으로 설정된 쿠키는 세션처럼 서버에서 저장하지 않고도 위변조를 막을 수 있다. 하지만 삭제 방지랑 내용을 확인하는 것은 막을 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;httpOnly 옵션은 브라우저내 자바스크립트가 접근하지 못하게 한다. 이로써 자바스크립트가 함부로 수정할 수 없으므로 XSS공격에서 어느 정도 보호할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠키를 불러올 때는 간단하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서명된 쿠키는 다음과 같이 불러올 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1751822363931&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;app.get('/', (req, res) =&amp;gt; {
    console.log(req.signedCookies.a);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서명되지 않은 쿠키는 다음과 같이 불러올 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1751822388661&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;app.get('/', (req, res) =&amp;gt; {
    console.log(req.cookies.a);
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세션은 초기 설정이 무조건 필요하다.&lt;/p&gt;
&lt;pre id=&quot;code_1751822606974&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const express = require('express');
const session = require('express-session');
const app = express();
app.set(session({
    secret: secret,
    resave: false,
    saveUninitialized: false,
    cookie: {
        httpOnly: true,
        secure: false,
        maxAge: 6000000,
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;secret은 세션을 암호화하는 키 역할을 한다. 따라서 세션에서는 매우 중요한 옵션이다.(없으면 작동하지 않는다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;resave는 세션이 변경되지 않았을 때도 강제로 저장할 지를 설정하는 옵션이다. 그래서 false로 하는 것이 성능면에서 더 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;saveUninitalized는 서버에서 세션을 설정하기 선까지는 세션을 사용하지 않는 옵션이다. 위장 마찬가지로 false로 하는 것이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 cookie부분은 위에서 설명했던 것과 같다. 쿠키의 maxAge는 쿠키의 만료 시간이다. 이는 ms단위임에 유의해야한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;session은 설정하는 것이 cookie보다 더 간단하다. 무엇보다 쿠키와는 달리 세션은 특별한 작업이 없어도 모든 객체를 저장할 수 있다. 세션은 단순히 변수를 다룬다고 생각하면 쉽다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세션은 다음과 같이 설정할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1751823015602&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;app.get('/', (req, res) =&amp;gt; {
    req.session.user = 'hello';
    req.session.list = ['asdf','sdfa','dfas'] //이런 것도 가능하다
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세션은 쿠키처럼 저장하지 않아도 response를 보내는 시점에 자동으로 보내준다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세션은 다음과 같이 읽을 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1751823100502&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;app.get('/', (req, res) =&amp;gt; {
    console.log(req.session.user);
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>cookie</category>
      <category>Express</category>
      <category>Node.js</category>
      <category>Session</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/65</guid>
      <comments>https://swchung09.tistory.com/65#entry65comment</comments>
      <pubDate>Mon, 7 Jul 2025 02:32:06 +0900</pubDate>
    </item>
    <item>
      <title>Express, pug</title>
      <link>https://swchung09.tistory.com/64</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Express 프레임워크는 Node.js에서 사용되는 웹 프레임워크이다. (프레임워크는 특정 분야에서 개발하는데 매우 유용한 툴이다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Express 프레임워크는 npm으로 설치가 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;밑에서 부터는 Express 프레임워크를 사용해서 /의 get요청을 받고 응답하는 예제이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 라이브러리를 설치해야한다. 다음 명령어로 설치할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1750608562445&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install express&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 라이브러리를 불러와야 한다. 둘 중 원하는 걸 사용하면 되나, package.json에 type이 모듈로 정의된 경우 두 번째 건 사용할 수 없다.&lt;/p&gt;
&lt;pre id=&quot;code_1750608090860&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import express from 'express'
const express = require('express');&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 express를 사용하기 위한 앱을 하나 불러온다.&lt;/p&gt;
&lt;pre id=&quot;code_1750608181796&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const app = express();&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 app에서 get요청을 처리하는 함수를 연결하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1750608237101&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;app.get('/', (req, res) =&amp;gt; {
    res.send('hello world!');
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때 /는 http://localhost:80/처럼 엔드포인트를 나타낸다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 클라이언트를 받기 위해 listen함수를 사용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1750608355301&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;app.listen(80);&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 방식대로 간단하게 app을 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 pug를 사용할 차례이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pug는 Express 프레임워크에서 html을 대체하기 위한 새로운 언어이다. 기본 구조는 다음과 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1750608472114&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;html
    head
        title hello
    body
        h1 hello world!&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 처럼 pug는 들여쓰기로 태그를 구분하는 것을 알 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Express 프레임워크를 사용한 Node.js에서 pug를 불러오기 위해서는 pug라이브러리를 설치해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1750608579116&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install pug&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 했다면 pug를 사용하기 위한 몇 가지 옵션을 설정하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1750608637057&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;app.set('view engine', 'pug');
app.set('views', './views');&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 아까 전에는 res.send로 답변을 보냈지만 이제는 res.render로 보내면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1750608761778&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;app.get('/', (req, res) =&amp;gt; {
    res.render('index');
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 pug에서는 일반적인 html과 다르기 때문에 몇 가지 속성은 변환해줘야 한다. 예를 들면&lt;/p&gt;
&lt;pre id=&quot;code_1750782452532&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;a href=&quot;https://example.com&quot; id=&quot;testid&quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 a 태그는&lt;/p&gt;
&lt;pre id=&quot;code_1750782499880&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a(href=&quot;https://example.com&quot;, id=&quot;testid&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 변환해야 한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외에도 여러가지를 사용할 수 있지만, 가장 신기한 부분은 따로 있다. -를 사용하면 일반적인 자바스크립트를 실행시킬 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1750782576942&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;- for (let i = 0; i &amp;lt; 3; i++)
	p= i&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(여기서 'p='은 'p i'와 같다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드에서처럼 - var, - const등을 사용할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한편 조건문 같은 경우, -를 사용하지 않는다.&lt;/p&gt;
&lt;pre id=&quot;code_1750782706707&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if args.value
	p true&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>Express</category>
      <category>Pug</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/64</guid>
      <comments>https://swchung09.tistory.com/64#entry64comment</comments>
      <pubDate>Mon, 23 Jun 2025 01:12:55 +0900</pubDate>
    </item>
    <item>
      <title>Node.js</title>
      <link>https://swchung09.tistory.com/63</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Node.js는 구글의 V8엔진을 사용한 자바스크립트 언어 중 하나이다. 다만 웹 브라우저에서 동작하는 자바스크립트는 html을 다루기 위해 DOM객체를 지원하지만, Node.js는 웹 브라우저가 목적이 아니라서 document같은 객체는 동작하지 않는다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Node.js를 쓰기 위해서는 여러 과정이 필요하다. 우선 Node.js 홈페이지에 들어가서 Node.js파일을 다운 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 터미널에서 원하는 프로젝트에 들어간 후, 다음 명령어를 실행한다.&lt;/p&gt;
&lt;pre id=&quot;code_1750173483832&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm init&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 json 파일이 생성되면서, 그 폴더는 Node.js작업 폴더가 된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적인 문법은 이전에 다룬 웹 js랑 같다.(var, let, for 등등) 따라서 모듈을 위주로 설명하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 Node.js는 require나 import로 npm 라이브러리를 불러올 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1750173293802&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;inmport fs from 'fs';
const fs = require('fs');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘 중 하나를 쓰면 fs모듈을 불러올 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fs모듈&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 읽기, 쓰기, 디렉토리 읽기 등 파일과 폴더를 사용하는 라이브러리이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 읽기&lt;/p&gt;
&lt;pre id=&quot;code_1750173897532&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fs.readFile(path, encoding, (err, data) =&amp;gt; {
    if (err) throw err;
    console.log(data);
})&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 쓰기&lt;/p&gt;
&lt;pre id=&quot;code_1750174046919&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fs.writeFile(path, data, (err) =&amp;gt; {
    if (err) throw err;
})&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리 읽기&lt;/p&gt;
&lt;pre id=&quot;code_1750174116760&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fs.readdir(path, (err, files) =&amp;gt; {
    if (err) throw err;
    files.forEach(file =&amp;gt; {
        console.log(file);
    })
})&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리 만들기&lt;/p&gt;
&lt;pre id=&quot;code_1750174272741&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fs.mkdir(path, (err) =&amp;gt; {
    if (err) throw err;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 외에도 파일과 폴더에 관해서 여러가지 작업을 할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;path모듈&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fs는 직접적으로 파일에 접근했다면, path는 경로를 처리하고 가져오는데 초점을 맞춘 모듈이다. 현재 실행 경로, 경로에서 파일 이름 추출, 확장자 추출, 디렉토리 추출등을 할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경로에서 디렉토리 추출 (예 : path가 ./a/f.txt라면 ./a)&lt;/p&gt;
&lt;pre id=&quot;code_1750174566740&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;path.dirname(path);&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경로에서 파일 이름 추출(확장자 포함, 예 : path가 ./a/f.txt라면 f.txt)&lt;/p&gt;
&lt;pre id=&quot;code_1750174640125&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;path.basename(path);&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경로에서 파일 확장자 추출(예 : path가 ./a/f.txt라면 txt)&lt;/p&gt;
&lt;pre id=&quot;code_1750174739608&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;path.extname(path);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 외에도 다양한 기능이 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;os모듈&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제의 정보를 가져오는데 사용하는 모듈이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(메소드가 너무 많으므로 하나로 정리하겠다)&lt;/p&gt;
&lt;pre id=&quot;code_1750174974628&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;os.type() // 운영체제 이름
os.platform() // 운영체제 플랫폼
os.release() // 운영체제 릴리즈
os.uptime() // 운영체제 업타임(켜져 있는 시간)
os.freemem() // 사용가능한 메모리
os.totalmem() // 전체 메모리
os.cpus() // cpu 정보(배열로 리턴)
os.arch() // cpu 아키텍처
os.hostname() // 호스트 이름&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외에도 crypto모듈과 http모듈이 있으며, 각각 암호화, 웹 통신의 기능이 있다.&lt;/p&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>FS</category>
      <category>node</category>
      <category>Node.js</category>
      <category>OS</category>
      <category>path</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/63</guid>
      <comments>https://swchung09.tistory.com/63#entry63comment</comments>
      <pubDate>Wed, 18 Jun 2025 00:45:06 +0900</pubDate>
    </item>
    <item>
      <title>API</title>
      <link>https://swchung09.tistory.com/62</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;API는 Application Programming Interface로 프로그램(클라이언트)과 프로그램(서버 등)이 정해진 방법으로 데이터를 주고 받는 것이다. API는 주로 서버에서 받아오는 용도로 사용되지만, 컴퓨터 내부에서도 사용될 수 있다. (예 macOS의 metal API 등)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분을 실습하기 위해 data.go.kr에서 js로 api로 데이터를 가져와 보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 사용할 api와 개인 토큰을 발급받는다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 js로 다음과 같은 형태로 전송하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1749395633613&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var serviceKey, returnType, numOfRows, pageNo, year, itemCode, url;
serviceKey = '';
returnType = 'json';
numOfRows = '100';
pageNo = '1';
year = '2020';
itemCode = 'PM10';
url = 'http://apis.data.go.kr/B552584/UlfptcaAlarmInqireSvc/getUlfptcaAlarmInfo'
    +'?serviceKey='+serviceKey
    +'&amp;amp;returnType='+returnType
    +'&amp;amp;numOfRows='+numOfRows
    +'&amp;amp;pageNo='+pageNo
    +'&amp;amp;year='+year
    +'&amp;amp;itemCode='+itemCode;
fetch(url)
.then(response =&amp;gt; response.json())
.then(data =&amp;gt; {console.log(data)})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 콘솔에 response가 출력될 것이다.&lt;/p&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>API</category>
      <category>fetch</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/62</guid>
      <comments>https://swchung09.tistory.com/62#entry62comment</comments>
      <pubDate>Mon, 9 Jun 2025 00:14:13 +0900</pubDate>
    </item>
    <item>
      <title>JSON, XML</title>
      <link>https://swchung09.tistory.com/61</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;JSON은 JavaScript Object Notation으로 자바스크립트에서 쉽게 데이터를 저장하고 전송하기 위한 형식이다. 반면에 XML은 eXtensible Markup Language로써 HTML(Hyper Text Markup Language)와 유사한 마크업 언어이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 가지 모두 데이터를 저장하는 용도로 주로 사용되지만, json과 xml은 사용되는 분야가 조금 다르다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;json은 웹 앱에서 주로 사용되며, 굳이 자바스크립트가 아닌 다른 언어여도 쉽게 사용할 수 있을 정도로 유명하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;xml은 프로그램의 설정들을 저장하는 용도로 사용된다. (과거에는 xml이 웹 기본 포맷이였지만,&lt;s&gt; json이 등장하고 한물 갔다...&lt;/s&gt;)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;json은 일반적으로 다음과 같은 형식을 가진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;key&quot; : [&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;item&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;xml은 일반적으로 다음과 같은 형식을 가진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;key&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;item&amp;gt;data&amp;lt;/item&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;/key&amp;gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 이 둘은 api를 불러오는 용도로도 사용된다. 따라서 다음 블로그로 이 부분을 정리하겠다.&lt;/p&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>json</category>
      <category>XML</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/61</guid>
      <comments>https://swchung09.tistory.com/61#entry61comment</comments>
      <pubDate>Mon, 9 Jun 2025 00:09:01 +0900</pubDate>
    </item>
    <item>
      <title>입력 후 평균 계산</title>
      <link>https://swchung09.tistory.com/60</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 prompt로 그만을 입력받기 전까지 입력받은 수를 저장하고, 평균을 구하는 문제이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제를 풀기 전, 평균을 어떤 방식으로 구하는지 알면 더 쉽게 풀 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평균은 총합에 갯수를 나눈 결과값이다. 따라서 모든 입력값을 더하고, 갯수로 나누면 쉽게 풀 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1748793881769&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let i = 0, sum = 0, num;
while (true){
    num = prompt();
    if (num == '그만'){
        break;
    }else {
        sum += parseInt(num);
    }
    i++;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 i로 갯수를 저장하고, sum으로 입력값을 더하는 변수를 만들었다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종 코드&lt;/p&gt;
&lt;pre id=&quot;code_1748793918404&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let i = 0, sum = 0, num;
while (true){
    num = prompt();
    if (num == '그만'){
        break;
    }else {
        sum += parseInt(num);
    }
    i++;
}
alert(sum/i);&lt;/code&gt;&lt;/pre&gt;</description>
      <category>기타</category>
      <category>JavaScript</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/60</guid>
      <comments>https://swchung09.tistory.com/60#entry60comment</comments>
      <pubDate>Mon, 2 Jun 2025 01:05:21 +0900</pubDate>
    </item>
    <item>
      <title>펠린드롬</title>
      <link>https://swchung09.tistory.com/59</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 앞에서 읽어도, 뒤에서 읽어도 같은 문자열인 펠린드롬인지를 판별하는 함수를 만드는 문제이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 for문으로 순서를 바꾼다음, 순서를 바꾸기 전의 문자열과 같은지 비교하면 풀 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;palindrome 함수&lt;/p&gt;
&lt;pre id=&quot;code_1748793672317&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function palindrome(x){
    let temp = '';
    for (let i = 0; i &amp;lt; x.length; i++){
        temp = x[i]+temp;
    }
    if (temp == x){
        console.log('true');
    }else {
        console.log('false');
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종 코드&lt;s&gt;(이게 맞나...)&lt;/s&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1748793709245&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function palindrome(x){
    let temp = '';
    for (let i = 0; i &amp;lt; x.length; i++){
        temp = x[i]+temp;
    }
    if (temp == x){
        console.log('true');
    }else {
        console.log('false');
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>기타</category>
      <category>JavaScript</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/59</guid>
      <comments>https://swchung09.tistory.com/59#entry59comment</comments>
      <pubDate>Mon, 2 Jun 2025 01:01:53 +0900</pubDate>
    </item>
    <item>
      <title>최대, 최소</title>
      <link>https://swchung09.tistory.com/58</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 최댓값을 구하는 max함수에서는 최댓값을 console에 출력하고, 최솟값을 구하는 min함수에서는 최솟값을 경고창에 출력하는 문제이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;max함수는 if로 첫 번째 값과 두 번째 값을 비교한 다음, 두 값 중 큰 것과 세 번째 값을 비교하면 풀 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;max 함수&lt;/p&gt;
&lt;pre id=&quot;code_1748793480443&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function max(a, b, c){
    let max;
    if (a &amp;lt; b){
        max = b;
    }else {
        max = a;
    }
    if (max &amp;lt; c){
        max = c;
    }
    console.log(max);
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;min함수도 마찬가지로 if로 첫 번째 값과 두 번째 값을 비교한 다음, 두 값 중 작은 것과 세 번째 값을 비교하면 풀 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1748793530228&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function min(a, b, c){
    let min;
    if (a &amp;gt; b){
        min = b;
    }else {
        min = a;
    }
    if (min &amp;gt; c){
        min = c;
    }
    alert(min);
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종 코드&lt;/p&gt;
&lt;pre id=&quot;code_1748793551357&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function max(a, b, c){
    let max;
    if (a &amp;lt; b){
        max = b;
    }else {
        max = a;
    }
    if (max &amp;lt; c){
        max = c;
    }
    console.log(max);
}
function min(a, b, c){
    let min;
    if (a &amp;gt; b){
        min = b;
    }else {
        min = a;
    }
    if (min &amp;gt; c){
        min = c;
    }
    alert(min);
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>기타</category>
      <category>JavaScript</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/58</guid>
      <comments>https://swchung09.tistory.com/58#entry58comment</comments>
      <pubDate>Mon, 2 Jun 2025 00:59:14 +0900</pubDate>
    </item>
    <item>
      <title>DNS</title>
      <link>https://swchung09.tistory.com/57</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;DNS(Domain Name System)은 도메인을 받으면 ip주소등으로 변환해주는 시스템이다. 일반적인 가정용 공유기에서는 ISP(Internet Service Provider : &lt;b&gt;&lt;s&gt;통신3사&lt;/s&gt;&lt;/b&gt;)의 DNS을 사용하여 도메인에 접속하게 된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도메인은 다음과 같은 구조로 되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;루트 네임서버 : 모든 도메인 을 관리하는 서버이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TLD(최상위 도메인) 서버 : 특정 TLD(예 : .com, .net등)을 관리하는 서버이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도메인 서버 : 도메인(예 : google.com, naver.com등)을 관리하는 서버이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DNS 레코드는 DNS서버가 어떤 동작을 해야하는지를 정하는 표이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 6가지의 레코드가 주로 사용되며, 각각의 레코드는 ip주소, 다른 도메인등을 가르킨다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 126px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 24.534884%; height: 18px;&quot;&gt;레코드&lt;/td&gt;
&lt;td style=&quot;width: 75.465116%; height: 18px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 24.534884%; height: 18px;&quot;&gt;A&lt;/td&gt;
&lt;td style=&quot;width: 75.465116%; height: 18px;&quot;&gt;IPv4주소를 가르킨다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 24.534884%; height: 18px;&quot;&gt;AAAA&lt;/td&gt;
&lt;td style=&quot;width: 75.465116%; height: 18px;&quot;&gt;IPv6주소를 가르킨다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 24.534884%; height: 18px;&quot;&gt;CNAME&lt;/td&gt;
&lt;td style=&quot;width: 75.465116%; height: 18px;&quot;&gt;특정 도메인의 별칭이다. 다른 도메인을 가르킨다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 24.534884%; height: 18px;&quot;&gt;MX&lt;/td&gt;
&lt;td style=&quot;width: 75.465116%; height: 18px;&quot;&gt;메일 관련 레코드이다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 24.534884%; height: 18px;&quot;&gt;NS&lt;/td&gt;
&lt;td style=&quot;width: 75.465116%; height: 18px;&quot;&gt;도메인을 관리하는 서버의 정보이다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 24.534884%; height: 18px;&quot;&gt;TXT&lt;/td&gt;
&lt;td style=&quot;width: 75.465116%; height: 18px;&quot;&gt;텍스트 데이터를 DNS에서 돌려준다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 DNS서버는 Root서버, TLD서버, Domain서버, Cache서버으로 이루어져 있으며 각각의 서버가 서로 통신하여 DNS레코드를 돌려준다.&lt;/p&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>DNS</category>
      <category>DNS 레코드</category>
      <category>dns 서버</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/57</guid>
      <comments>https://swchung09.tistory.com/57#entry57comment</comments>
      <pubDate>Mon, 2 Jun 2025 00:55:17 +0900</pubDate>
    </item>
    <item>
      <title>라우팅</title>
      <link>https://swchung09.tistory.com/56</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;라우팅은 라우터가 데이터를 목적기까지 보내는 최적의 경로를 선택하는 과정이다. 라우팅은 라우팅 테이블로 관리되며, 라우팅은 크게 2가지로 나뉜다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정적 라우팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라우터 관리자가 직접 경로를 설정하는 방식이다. 이 방식은 동적 라우팅에 비해 다소 복잡하고, 설정하기 어렵다. 따라서 일부 기업용 네트워크를 제외한 곳에서는 동적 라우팅을 사용한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동적 라우팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라우터가 자동으로 경로를 설정하는 방식이다. 이 방식은 정적 라우팅과 달리 설정할 필요가 없기 때문에 편리하다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고) 기본 라우팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정적 라우팅 방법 중 하나로, 기본적으로 모든 패킷을 다른 라우터로 전송하는 방식이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분을 실습하기 위해 cisco의 packet tracer를 사용할 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zKxhV/btsOldD5ylH/YfbCD8EvqigEFzv3ep5nN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zKxhV/btsOldD5ylH/YfbCD8EvqigEFzv3ep5nN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zKxhV/btsOldD5ylH/YfbCD8EvqigEFzv3ep5nN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzKxhV%2FbtsOldD5ylH%2FYfbCD8EvqigEFzv3ep5nN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;285&quot; height=&quot;270&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;700&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라우터 2개와 PC 2를 꺼낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(모든 장비는 왼쪽 아래에 있고, 라우터는 첫 번째 네트워크 장비에, PC는 두 번째 종점 장비에 있다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1432&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7nsP7/btsOmaGA2gv/vLiZeO9XuiB7A0j3k6kCwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7nsP7/btsOmaGA2gv/vLiZeO9XuiB7A0j3k6kCwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7nsP7/btsOmaGA2gv/vLiZeO9XuiB7A0j3k6kCwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7nsP7%2FbtsOmaGA2gv%2FvLiZeO9XuiB7A0j3k6kCwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;288&quot; height=&quot;290&quot; data-origin-width=&quot;1432&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 라우터를 클릭한 다음 전원을 끄고(그림의 오른쪽 밑), NIM-2T모듈을 검은 빈 공간으로 드래그 한 다음 전원을 켠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 반대쪽도 똑같이 모듈을 설정해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1432&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfwhrF/btsOmqoTdkL/k8y5FGZJHR7csKACxZ4RW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfwhrF/btsOmqoTdkL/k8y5FGZJHR7csKACxZ4RW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfwhrF/btsOmqoTdkL/k8y5FGZJHR7csKACxZ4RW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfwhrF%2FbtsOmqoTdkL%2Fk8y5FGZJHR7csKACxZ4RW1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;305&quot; height=&quot;307&quot; data-origin-width=&quot;1432&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽 밑 4번째 연결 부분에서 PC와 라우터 사이는 Copper Straight-Through 케이블로(검은 사선 모양), 라우터와 라우터 사이는 Serial DCE나 Serial DTE 케이블(빨간 번개 모양 또난 빨간 번개 모양과 시계 모양)로 연결한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연결하는 포트는 상관없지만, PC와 라우터 사이에는 Gigabit과 FastEthernet으로, 라우터와 라우터 사이에는 Serial로 연결시켜야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0B5b7/btsOmsfUUjd/IkHkn2hvkqVxElMFGANN90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0B5b7/btsOmsfUUjd/IkHkn2hvkqVxElMFGANN90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0B5b7/btsOmsfUUjd/IkHkn2hvkqVxElMFGANN90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0B5b7%2FbtsOmsfUUjd%2FIkHkn2hvkqVxElMFGANN90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;339&quot; height=&quot;334&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 왼쪽 라우터를 클릭한 다음 다음 명령어로 라우터와 라우터 사이 포트, 라우터와 PC사이의 포트를 활성화 시킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router&amp;gt;en (enable : 관리자 모드 활성화)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router#conf t (configure terminal : 터미널 설정)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router(config)#int g0/0/0 (interface gigabit0/0/0 : gigabit 0/0/0 포트의 인터페이스 선택)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router(config-if)#ip addr 192.168.0.1 255.255.255.0 (ip address 192.168.0.1 255.255.255.0 : 해당 인터페이스의 ip를 192.168.0.1로 할당하고, 서브넷 마스크를 255.255.255.0으로 할당)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Router(config-if)#no shut (no shutdown : 해당 인터페이스를 활성화)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정을 마치면 g0/0/0(PC랑 연결된 부분)을 활성화하는데 성공한 것이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JJp1u/btsOlEnTKaU/DBvvvn6SRZboOaiikswMS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JJp1u/btsOlEnTKaU/DBvvvn6SRZboOaiikswMS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JJp1u/btsOlEnTKaU/DBvvvn6SRZboOaiikswMS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJJp1u%2FbtsOlEnTKaU%2FDBvvvn6SRZboOaiikswMS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;330&quot; height=&quot;325&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이 후 반대쪽 라우터도 두 포트 모두 활성화 시켜준다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deIwbA/btsOlWBO6o4/kJgem3SGk3USJ5QVZt2ss1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deIwbA/btsOlWBO6o4/kJgem3SGk3USJ5QVZt2ss1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deIwbA/btsOlWBO6o4/kJgem3SGk3USJ5QVZt2ss1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeIwbA%2FbtsOlWBO6o4%2FkJgem3SGk3USJ5QVZt2ss1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;331&quot; height=&quot;326&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라우팅을 하기 위해선 라우터 끼리 통신하는 포트도 ip 할당이 필요하다. 따라서 라우터 끼리 통신하는 포트를 10.10.10.1로 설정했다.(왼쪽 라우터 기준)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wt448/btsOmVoEdNE/ncws0jJIWOLnaPqjQxJqC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wt448/btsOmVoEdNE/ncws0jJIWOLnaPqjQxJqC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wt448/btsOmVoEdNE/ncws0jJIWOLnaPqjQxJqC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwt448%2FbtsOmVoEdNE%2Fncws0jJIWOLnaPqjQxJqC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;324&quot; height=&quot;320&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대쪽 라우터는 10.10.10.2로 설정했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7l0Ao/btsOljEjIrS/4jNxvF1FAI81DByEjhu68K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7l0Ao/btsOljEjIrS/4jNxvF1FAI81DByEjhu68K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7l0Ao/btsOljEjIrS/4jNxvF1FAI81DByEjhu68K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7l0Ao%2FbtsOljEjIrS%2F4jNxvF1FAI81DByEjhu68K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;348&quot; height=&quot;343&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라우터의 ip설정은 모두 끝났으니, 이제 PC의 ip를 설정해야 한다. 일반적으로 Server를 설치해서 DHCP기능을 사용하지만, 주제와는 관련이 적으므로 수동으로 할당하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PC을 클릭한 다음 Desktop 메뉴를 누르고, 첫 번째 메뉴인 IP Configuration으로 들어간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tDHkY/btsOlGlGIqE/3leuU6zpfbIToNkKcdM7fK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tDHkY/btsOlGlGIqE/3leuU6zpfbIToNkKcdM7fK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tDHkY/btsOlGlGIqE/3leuU6zpfbIToNkKcdM7fK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtDHkY%2FbtsOlGlGIqE%2F3leuU6zpfbIToNkKcdM7fK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;350&quot; height=&quot;345&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;들어갔다면 ip를 공유기와 같은 네트워크 주소를 가진 ip 아무거나 설정하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금은 단순히 ip를 192.168.0.2로 설정하였고, 서브넷 마스크는 라우터와 동일한 255.255.255.0으로 하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고) 기본 게이트웨이 : 같은 네트워크에 속하지 않은 ip일 경우, 이 주소로 패킷을 내보낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dUZjCZ/btsOmteSpJd/A9AlHYk7wDJHMKa5YTcIC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dUZjCZ/btsOmteSpJd/A9AlHYk7wDJHMKa5YTcIC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dUZjCZ/btsOmteSpJd/A9AlHYk7wDJHMKa5YTcIC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdUZjCZ%2FbtsOmteSpJd%2FA9AlHYk7wDJHMKa5YTcIC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;341&quot; height=&quot;336&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대쪽 PC는 192.168.1.2로 설정하였고, 서브넷 마스크는 라우터와 동일한 255.255.255.0으로 하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;816&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nbUAT/btsOkN0cMcz/abxNlzi4SRdp82Z1uoFcs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nbUAT/btsOkN0cMcz/abxNlzi4SRdp82Z1uoFcs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nbUAT/btsOkN0cMcz/abxNlzi4SRdp82Z1uoFcs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnbUAT%2FbtsOkN0cMcz%2FabxNlzi4SRdp82Z1uoFcs1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;339&quot; height=&quot;314&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;816&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아마 모든 작업을 완료 했다면, 다음과 같이 ip가 할당 되었을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pWjOt/btsOkRO6UyV/VW3vndYO1HGuE05NPUeiK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pWjOt/btsOkRO6UyV/VW3vndYO1HGuE05NPUeiK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pWjOt/btsOkRO6UyV/VW3vndYO1HGuE05NPUeiK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpWjOt%2FbtsOkRO6UyV%2FVW3vndYO1HGuE05NPUeiK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;373&quot; height=&quot;368&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 본격적으로 라우팅을 해보겠다. 라우팅을 하기 위해선 configure terminal 상태여야 한다. (이전 단계로 넘어갔다면, 위에서 ip 설정할때의 명령어로 configure terminal 상태로 만들길 바란다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정적 라우팅 방법은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ip route [네트워크 대역] [서브넷 마스크] [목적지 ip주소]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 명령어는 다른 네트워크 대역을 가진 패킷을 만난 경우, 목적지 ip 주소로 보내게 해주는 정적 라우팅 명령어이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 과정을 통해 Router0 -&amp;gt; Router1까지 패킷을 보낼 수 있게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 Router0 &amp;lt;- Router1을 구현할 차례이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1422&quot; data-origin-height=&quot;1442&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SG6rf/btsOlA6Q6PV/iVLJ1kjmAolmdlZ8W1dbf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SG6rf/btsOlA6Q6PV/iVLJ1kjmAolmdlZ8W1dbf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SG6rf/btsOlA6Q6PV/iVLJ1kjmAolmdlZ8W1dbf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSG6rf%2FbtsOlA6Q6PV%2FiVLJ1kjmAolmdlZ8W1dbf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;371&quot; height=&quot;376&quot; data-origin-width=&quot;1422&quot; data-origin-height=&quot;1442&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대쪽에서는 왼쪽의 네트워크 대역(192.168.0.0)을 만나면 왼쪽 라우터로 보내면 된다.&lt;/p&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>packet tracer</category>
      <category>네트워크</category>
      <category>동적 라우팅</category>
      <category>라우팅</category>
      <category>정적 라우팅</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/56</guid>
      <comments>https://swchung09.tistory.com/56#entry56comment</comments>
      <pubDate>Mon, 2 Jun 2025 00:33:50 +0900</pubDate>
    </item>
    <item>
      <title>연속된 수를 더해서 n이 되는 경우의 수</title>
      <link>https://swchung09.tistory.com/54</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 연속된 수를 더해서 n이 되는 경우의 수를 출력하는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예) 15&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15 = 15&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15 = 7+8&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15 = 4 + 5 + 6&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15 = 1 + 2 + 3 + 4 + 5&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 n이 15이면 4가 출력되면 된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 메인 반복문 안에 숫자를 반복적으로 계산하는 방법으로 풀 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1748219281279&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;while ((l * (l - 1)) / 2 &amp;lt; n){//메인 반복문
    let num = n - ((l * (l - 1)) / 2);
    if (num % l == 0){
        v++;
    }
    l++;
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종코드&lt;/p&gt;
&lt;pre id=&quot;code_1748219351117&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let n = 15;
let v = 0, l = 1;
while ((l * (l - 1)) / 2 &amp;lt; n){
    let num = n - ((l * (l - 1)) / 2);
    if (num % l == 0){
        v++;
    }
    l++;
}
console.log(v)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타</category>
      <category>JavaScript</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/54</guid>
      <comments>https://swchung09.tistory.com/54#entry54comment</comments>
      <pubDate>Mon, 26 May 2025 09:29:18 +0900</pubDate>
    </item>
    <item>
      <title>뒤집어도 같은 숫자</title>
      <link>https://swchung09.tistory.com/53</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 1~9999까지의 숫자중 뒤집어도 같은 숫자를 출력하는 문제이다.(예 1 ~ 9, 11, 22, 33, 44 ... 1111등)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 숫자를 문자열로 변환한 다음 모두 같은 문자인지 확인하는 방법으로 풀 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크게 3가지 구조가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인 반복문&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인 반복문 내 첫번째 문자가 다른 모든 것과 같은지 확인하는 반복문&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;윗 반복문의 결과가 참이면 출력하는 console.log함수&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인 반복문&lt;/p&gt;
&lt;pre id=&quot;code_1748186625645&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (let i = 1; i &amp;lt; 10000; i++){
    let s = i.toString();//숫자를 문자열로 변환
    let check = true;//확인 변수
    for (let j = 1; j &amp;lt; s.length; j++){//모두 같은 문자인지 검사하는 반복문
        if (s[0] != s[j]){
            check = false;
            break;
        }
    }
    if (check){//모두 같다면
        console.log(i);//출력
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종코드&lt;/p&gt;
&lt;pre id=&quot;code_1748186639852&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (let i = 1; i &amp;lt; 10000; i++){
    let s = i.toString();
    let check = true;
    for (let j = 1; j &amp;lt; s.length; j++){
        if (s[0] != s[j]){
            check = false;
            break;
        }
    }
    if (check){
        console.log(i);
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>기타</category>
      <category>JavaScript</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/53</guid>
      <comments>https://swchung09.tistory.com/53#entry53comment</comments>
      <pubDate>Mon, 26 May 2025 00:24:03 +0900</pubDate>
    </item>
    <item>
      <title>별찍기 with 숫자</title>
      <link>https://swchung09.tistory.com/52</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 트리형 별찍기 문제에 index를 결합한 별찍기 문제이다. 예시는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 121&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 12321&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 1234321&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;123454321&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 3가지 부분으로 나눌 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인 반복문(현재 줄을 나타낼 수 있다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인 반복문 내의 공백 추가 반복문&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인 반복문 내의 숫자 출력 반복문&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 console.log에서는 줄바꿈이 기본이라서 text에 임시로 저장하고 줄바꿈이 필요할때 출력하는 방식을 사용하였다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인 반복문&lt;/p&gt;
&lt;pre id=&quot;code_1748186255095&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (let i = 1; i &amp;lt;= n; i++){
    let text = '';
    for (let j = 0; j &amp;lt; n-i; j++){//공백 추가
        text += ' ';
    }
    for (let j = 0; j &amp;lt; (2*i)-1; j++){//숫자 출력
        if (j &amp;lt; ((2*i)-1)/2){
            text += j+1;
        }else {
            text += ((2*i)-1)-j;
        }
    }
    console.log(text);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;숫자 출력에서 사용된 j &amp;lt; ((2*i)-1)/2 조건은 반복의 절반은 숫자가 증가하고, 나머지 절반은 숫자가 감소하는 방향으로 저장하기 위해 사용되었다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종 코드&lt;/p&gt;
&lt;pre id=&quot;code_1748186359358&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let n = 5;
for (let i = 1; i &amp;lt;= n; i++){
    let text = '';
    for (let j = 0; j &amp;lt; n-i; j++){
        text += ' ';
    }
    for (let j = 0; j &amp;lt; (2*i)-1; j++){
        if (j &amp;lt; ((2*i)-1)/2){
            text += j+1;
        }else {
            text += ((2*i)-1)-j;
        }
    }
    console.log(text);
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>기타</category>
      <category>JavaScript</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/52</guid>
      <comments>https://swchung09.tistory.com/52#entry52comment</comments>
      <pubDate>Mon, 26 May 2025 00:19:23 +0900</pubDate>
    </item>
    <item>
      <title>별찍기</title>
      <link>https://swchung09.tistory.com/51</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 다음과 같은 X자 형태로 출력하는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* &amp;nbsp; &amp;nbsp; *&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;* &amp;nbsp; *&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;*&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;* &amp;nbsp;*&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* &amp;nbsp; &amp;nbsp;*&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제를 나누어서 풀어보면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번째 반복문 - 공백 추가, 별찍기, 공백 추가, 별찍기(하나만 있어야 하는 중간 지점이 아니라면)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2번째 반복문 - 공백 추가, 별찍기, 공백 추가, 별찍기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2번째 반복문은 1번째 반복문에서 별이 하나만 있는 부분을 제외한 부분을 반대로 하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 이 문제에서 나는 console.log를 사용하려고 했고, console.log에서는 줄바꿈이 필수적이라 text에 저장한 다음 최종적으로 줄바꿈이 필요한 시점에 출력하는 방식을 사용하였다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번째 반복문에서 공백을 추가하고 별찍기를 한 다음, 다시 공백을 추가하고 별찍기를 하는 부분이다.&lt;/p&gt;
&lt;pre id=&quot;code_1748185839895&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (let i = 0; i &amp;lt; n; i++){
    let text = '';
    for (let j = 0; j &amp;lt; i; j++){//공백 추가
        text += ' ';
    }
    text += '*';//별찍기
    for (let j = 0; j &amp;lt; 2*(n-i-1)-1; j++){//공백 추가
        text += ' ';
    }
    if (i != n-1){//별찍기(하나만 있는 부분이 아니라면)
        text += '*';
    }
    console.log(text);//최종 출력
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 2번째 반복문에서는 이를 역순으로 출력하는 코드로 구성했다.&lt;/p&gt;
&lt;pre id=&quot;code_1748185934544&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (let i = n-2; 0 &amp;lt;= i; i--){
    let text = '';
    for (let j = 0; j &amp;lt; i; j++){//공백 추가
        text += ' ';
    }
    text += '*';//별찍기
    for (let j = 0; j &amp;lt; 2*(n-i-1)-1; j++){//공백 추가
        text += ' ';
    }
    text += '*';//별찍기
    console.log(text);/최종 출력
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종 코드&lt;/p&gt;
&lt;pre id=&quot;code_1748185958962&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let n = 4;
for (let i = 0; i &amp;lt; n; i++){
    let text = '';
    for (let j = 0; j &amp;lt; i; j++){
        text += ' ';
    }
    text += '*';
    for (let j = 0; j &amp;lt; 2*(n-i-1)-1; j++){
        text += ' ';
    }
    if (i != n-1){
        text += '*';
    }
    console.log(text);
}
for (let i = n-2; 0 &amp;lt;= i; i--){
    let text = '';
    for (let j = 0; j &amp;lt; i; j++){
        text += ' ';
    }
    text += '*';
    for (let j = 0; j &amp;lt; 2*(n-i-1)-1; j++){
        text += ' ';
    }
    text += '*';
    console.log(text);
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>기타</category>
      <category>JavaScript</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/51</guid>
      <comments>https://swchung09.tistory.com/51#entry51comment</comments>
      <pubDate>Mon, 26 May 2025 00:12:55 +0900</pubDate>
    </item>
    <item>
      <title>JavaScript</title>
      <link>https://swchung09.tistory.com/50</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트는 웹에서 주로 사용되는 언어이며, HTML이나 Node.js등의 방법으로 사용되고 있는 언어이다. C와 매우 유사한 문법을 가지고 있지만, 파이썬처럼 수식을 처리하기에도 좋은 언어이다. 또한 매우 객체지향적인 언어이다. (이후 설명하는 자바스크립트는 HTML(브라우저 환경)에서 작동하는 문법이다)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트에서 텍스트를 콘솔로 출력할때 C의 printf나 Python의 print를 사용할 수 없다. (print는 페이지를 인쇄하는 명령이다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 콘솔에 출력하기 위해 console.log를 사용해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1748183953597&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log('hello world');
console.log(&quot;hello world&quot;);
console.log(`hello world`) //대부분의 경우 세미콜론(;)을 붙여야 하지만, 고도로 발달한 브라우저는 알아서 잘 해석해버린다&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트에서는 변수와 배열, 함수(저장하는 경우)를 3가지 방법으로 선언할 수 있다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.217054%;&quot;&gt;생성자&lt;/td&gt;
&lt;td style=&quot;width: 38.565892%;&quot;&gt;(굳이)C랑 비교하자면&lt;/td&gt;
&lt;td style=&quot;width: 43.217053%;&quot;&gt;특징&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.217054%;&quot;&gt;var&lt;/td&gt;
&lt;td style=&quot;width: 38.565892%;&quot;&gt;&amp;nbsp;전역변수이면서 재선언이 가능하다.&lt;/td&gt;
&lt;td style=&quot;width: 43.217053%;&quot;&gt;전역적으로 사용이 가능하고, 재선언이 가능하다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.217054%;&quot;&gt;let&lt;/td&gt;
&lt;td style=&quot;width: 38.565892%;&quot;&gt;일반적인 변수와 같다.&lt;/td&gt;
&lt;td style=&quot;width: 43.217053%;&quot;&gt;{}괄호 내에서만 사용이 가능하고, 재선언이 불가능하다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.217054%;&quot;&gt;const&lt;/td&gt;
&lt;td style=&quot;width: 38.565892%;&quot;&gt;일반적인 변수와 대부분 같지만, 값을 변경할 수 없다.&lt;/td&gt;
&lt;td style=&quot;width: 43.217053%;&quot;&gt;let이랑 대부분 같지만 값을 변경할 수 없다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3가지 생성자 모두 비슷한 방법으로 사용된다.&lt;/p&gt;
&lt;pre id=&quot;code_1748184334013&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var a = 1;
var a = 2; // 가능
var b = 1;
var b = 2; // 불가능
b = 2; // 가능
const c = 1;
const c = 2; // 불가능
c = 2; // 불가능&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연산자는 비교 연산자의 느슨한 비교와 강한 비교가 있는 것을 제외하면 다 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;느슨한 비교&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;==이나 !==를 사용한다. 객체 타입이 달라고 자동으로 변환해 준다. 그러나 보안상 취약점이 생길 수 있는 방식이라 위험하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강한 비교&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;===이나 !===를 사용한다. 객체 타입이 달라도 자동으로 변환해 주지 않는다. 따라서 문자열과 숫자를 비교할 경우 항상 false가 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(나머지는 C 연산자 부분 참고)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;C 문법&quot; href=&quot;https://swchung09.tistory.com/7&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://swchung09.tistory.com/7&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1748184777433&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;C 기본 문법&quot; data-og-description=&quot;C언어는 역사 깊은 프로그래밍 언어이고, 저사양의 기기(임베디드 환경)에서도 잘 작동하는 언어이다. 그리고 C는 연산 속도가 다른 언어보다 월등히 더 빠르다.C 자료형정수형int실수형(32비트)fl&quot; data-og-host=&quot;blog.aiswstudio.com&quot; data-og-source-url=&quot;https://swchung09.tistory.com/7&quot; data-og-url=&quot;https://blog.aiswstudio.com/7&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dxQr2A/hyYYEjC8aL/kU0MxGCSQrl2OooXZvcKHK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bkqDUL/hyYYEjC8bj/wrkywQZo2mq5cLZjRQoTL1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/h0cGE/hyYYv71p8Q/xV2C0m1i7ALKkXHbp8UUWK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://swchung09.tistory.com/7&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://swchung09.tistory.com/7&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dxQr2A/hyYYEjC8aL/kU0MxGCSQrl2OooXZvcKHK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bkqDUL/hyYYEjC8bj/wrkywQZo2mq5cLZjRQoTL1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/h0cGE/hyYYv71p8Q/xV2C0m1i7ALKkXHbp8UUWK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;C 기본 문법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;C언어는 역사 깊은 프로그래밍 언어이고, 저사양의 기기(임베디드 환경)에서도 잘 작동하는 언어이다. 그리고 C는 연산 속도가 다른 언어보다 월등히 더 빠르다.C 자료형정수형int실수형(32비트)fl&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.aiswstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외에 if, else if, else 같은 분법은 C과 같다. 다른 부분이 있다면 함수와 포인터 유무, 클래스나 구조체 정도가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C에서는 함수를 선언할때 int main()처럼 자료형으로 선언하는 것이 아니라 function으로 선언하는 방식이다. 크게 2가지 방식이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수에 할당하는 방법&lt;/p&gt;
&lt;pre id=&quot;code_1748185304454&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let a = function(t){console.log(t)};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정석적으로 선언하는 방법&lt;/p&gt;
&lt;pre id=&quot;code_1748185340637&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function a(t){
    console.log(t);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>JavaScript</category>
      <category>js</category>
      <category>자바스크립트</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/50</guid>
      <comments>https://swchung09.tistory.com/50#entry50comment</comments>
      <pubDate>Mon, 26 May 2025 00:02:35 +0900</pubDate>
    </item>
    <item>
      <title>DHCP</title>
      <link>https://swchung09.tistory.com/49</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;DHCP는 주로 사설 IP를 자동으로 할당해주는 역할을 하는 서버 역할을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 공유기는 DHCP서버를 포함하고 있으며, 주로 할당하는 IP는 192.168.0.0대역이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DHCP는 4단계로 구성되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 해당 네트워크의 DHCP서버에서 MAC주소를 보낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. DHCP서버에서 서버의 MAC주소와 클라이언트(사용자) MAC주소, 그리고 사용가능한 IP주소를 보낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 클라이언트는 IP를 할당 받기 위해 서버의 MAC주소와 클라이언트의 MAC주소와 IP주소를 보낸다.&lt;br /&gt;4. 서버는 최종적으로 클라이언트의 MAC주소와 최종적으로 할당된 IP주소를 보낸다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 DHCP서버를 테스트 환경으로 구축하기 위해 Ubuntu 24.04.2 arm64이미지를 사용하고, VMware fusion을 사용해보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 VMware fusion에서 iso 이미지를 선택하고 설치했다. (iso 설치 과정은 생략)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투 환경에서는 apt로 isc-dhcp-server를 설치하는 것이 용이하다. 따라서 isc-dhcp-server를 사용하여 테스트 환경을 구축해보겠다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;892&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cD7YQT/btsOcUpCOjL/jlWjOo4pdUyfMNFJRf6hd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cD7YQT/btsOcUpCOjL/jlWjOo4pdUyfMNFJRf6hd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cD7YQT/btsOcUpCOjL/jlWjOo4pdUyfMNFJRf6hd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcD7YQT%2FbtsOcUpCOjL%2FjlWjOo4pdUyfMNFJRf6hd1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;458&quot; height=&quot;308&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;892&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo apt install isc-dhcp-server로 설치한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2654&quot; data-origin-height=&quot;1784&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SyO1z/btsOb8hOSfX/2XRu3jRQiGOLtZdzTtbL4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SyO1z/btsOb8hOSfX/2XRu3jRQiGOLtZdzTtbL4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SyO1z/btsOb8hOSfX/2XRu3jRQiGOLtZdzTtbL4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSyO1z%2FbtsOb8hOSfX%2F2XRu3jRQiGOLtZdzTtbL4k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;456&quot; height=&quot;307&quot; data-origin-width=&quot;2654&quot; data-origin-height=&quot;1784&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 텍스트 편집기로 /etc/netplan/[Tab]을 한 다음 dhcp4를 비활성화하고, 사용할 사설 ip 대역을 설정한 다음 netplan apply로 적용시킨다. 여기서 나오는 인터페이스 정보를 기억하면 좋다. 예 ens160&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2654&quot; data-origin-height=&quot;1784&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOos0E/btsObxh8auf/VEnMiG2mRW0Lxm4Eib6M21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOos0E/btsObxh8auf/VEnMiG2mRW0Lxm4Eib6M21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOos0E/btsObxh8auf/VEnMiG2mRW0Lxm4Eib6M21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOos0E%2FbtsObxh8auf%2FVEnMiG2mRW0Lxm4Eib6M21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;463&quot; height=&quot;311&quot; data-origin-width=&quot;2654&quot; data-origin-height=&quot;1784&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 텍스트 편집기로 /etc/dhcp/dhcp.conf에 있는 파일에 subnet을 지정하고, range로 ip할당 범위를 설정할 수 있다. (option router 속성으로 게이트웨이를 지정할 수 있다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1283&quot; data-origin-height=&quot;848&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q9ct6/btsOcBX9MPp/it1KRlkBYhyxuXXZrOHBkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q9ct6/btsOcBX9MPp/it1KRlkBYhyxuXXZrOHBkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q9ct6/btsOcBX9MPp/it1KRlkBYhyxuXXZrOHBkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq9ct6%2FbtsOcBX9MPp%2Fit1KRlkBYhyxuXXZrOHBkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;451&quot; height=&quot;298&quot; data-origin-width=&quot;1283&quot; data-origin-height=&quot;848&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 텍스트 편집기로 /etc/default/isc-dhcp-server에서 INTERFACES부분을 아까전에 사용한 인터페이스를 입력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;892&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c07e3k/btsOa1RLL2c/QDlEkg728tf8Q9Vq9kYQz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c07e3k/btsOa1RLL2c/QDlEkg728tf8Q9Vq9kYQz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c07e3k/btsOa1RLL2c/QDlEkg728tf8Q9Vq9kYQz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc07e3k%2FbtsOa1RLL2c%2FQDlEkg728tf8Q9Vq9kYQz0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;453&quot; height=&quot;305&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;892&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 systemctl로 실행시키면 된다.&lt;/p&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>DHCP</category>
      <category>ip자동할당</category>
      <category>isc-dhcp-server</category>
      <category>ubuntu dhcp</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/49</guid>
      <comments>https://swchung09.tistory.com/49#entry49comment</comments>
      <pubDate>Sun, 25 May 2025 23:27:53 +0900</pubDate>
    </item>
    <item>
      <title>CSS</title>
      <link>https://swchung09.tistory.com/48</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;CSS는 HTML에서 디자인을 하기 위한 스타일 시트 언어이다. 주로 HTML내 style태그 내에서 사용되거나 link로 연결해서 사용한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CSS에서는 속성을 적용시키는 3가지 방법이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;태그로 지정하는 방법&lt;/p&gt;
&lt;pre id=&quot;code_1747230546142&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Tag {
	key:value;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 다른 작업 없이 해당 태그에 이 속성이 붙게 된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스를 사용하는 방법&lt;/p&gt;
&lt;pre id=&quot;code_1747230650996&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.Class {
    key:value;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 사용시 class속성으로 지정하여 불러올 수 있다. id 선택자와 달리 재사용이 가능하며, &amp;nbsp;div태그와 주로 사용된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ID를 사용하는 방법&lt;/p&gt;
&lt;pre id=&quot;code_1747230723844&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#Id {
    key:value;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 사용시 id속성이로 지정하여 불러올 수 있다. class 선택자와 달리 재사용이 불가능하며, id를 지정하는 대부분의 태그에서 사용된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CSS에서는 특정 상태에 있는 요소를 가져오는 가상 선택자가 있다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 180px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 15.193798%; height: 18px;&quot;&gt;:hover&lt;/td&gt;
&lt;td style=&quot;width: 51.472868%; height: 18px;&quot;&gt;마우스 커서가 위에 있을 때(클릭하거나 포커스가 되어 있지 않아도 됨.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 15.193798%; height: 18px;&quot;&gt;:active&lt;/td&gt;
&lt;td style=&quot;width: 51.472868%; height: 18px;&quot;&gt;클릭하고 있는 상태&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 15.193798%; height: 18px;&quot;&gt;:focus&lt;/td&gt;
&lt;td style=&quot;width: 51.472868%; height: 18px;&quot;&gt;클릭하거나 포커스 되어있는 상태&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 15.193798%; height: 18px;&quot;&gt;:link&lt;/td&gt;
&lt;td style=&quot;width: 51.472868%; height: 18px;&quot;&gt;(주로 a태그에서)링크에 방문하지 않은 상태&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 15.193798%; height: 18px;&quot;&gt;:visited&lt;/td&gt;
&lt;td style=&quot;width: 51.472868%; height: 18px;&quot;&gt;(주로 a태그에서)링크에 방문한 상태&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 15.193798%; height: 18px;&quot;&gt;:checked&lt;/td&gt;
&lt;td style=&quot;width: 51.472868%; height: 18px;&quot;&gt;(주로 input태그에서)체크 되어 있는 상태&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 15.193798%; height: 18px;&quot;&gt;:disabled&lt;/td&gt;
&lt;td style=&quot;width: 51.472868%; height: 18px;&quot;&gt;(form태그에서)비활성화된 상태&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 15.193798%; height: 18px;&quot;&gt;:enabled&lt;/td&gt;
&lt;td style=&quot;width: 51.472868%; height: 18px;&quot;&gt;(form태그에서)활성화된 상태&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CSS에서 HTML에 존재하지 않는 가상의 요소에 스타일을 지정할 수 있다. 이를 가상 요소 선택자라고 한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.139535%;&quot;&gt;::before&lt;/td&gt;
&lt;td style=&quot;width: 76.860465%;&quot;&gt;요소 앞에 다른 요소 삽입&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.139535%;&quot;&gt;::after&lt;/td&gt;
&lt;td style=&quot;width: 76.860465%;&quot;&gt;요소 뒤에 다른 요소 삽입&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.139535%;&quot;&gt;::first-line&lt;/td&gt;
&lt;td style=&quot;width: 76.860465%;&quot;&gt;첫 줄에만 스타일 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.139535%;&quot;&gt;::first-letter&lt;/td&gt;
&lt;td style=&quot;width: 76.860465%;&quot;&gt;첫 글자에만 스타일 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CSS에서 글자에 스타일을 지정할때, font를 사용한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 108px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 23.255814%; height: 18px;&quot;&gt;font-family&lt;/td&gt;
&lt;td style=&quot;width: 76.744186%; height: 18px;&quot;&gt;글꼴 종류 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 23.255814%; height: 18px;&quot;&gt;font-size&lt;/td&gt;
&lt;td style=&quot;width: 76.744186%; height: 18px;&quot;&gt;글꼴 크기 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 23.255814%; height: 18px;&quot;&gt;font-style&lt;/td&gt;
&lt;td style=&quot;width: 76.744186%; height: 18px;&quot;&gt;글꼴 기울임 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 23.255814%; height: 18px;&quot;&gt;font-weight&lt;/td&gt;
&lt;td style=&quot;width: 76.744186%; height: 18px;&quot;&gt;글꼴 굵기 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 23.255814%; height: 18px;&quot;&gt;font-variant&lt;/td&gt;
&lt;td style=&quot;width: 76.744186%; height: 18px;&quot;&gt;소문자를 작은 대문자로 변환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 23.255814%; height: 18px;&quot;&gt;font&lt;/td&gt;
&lt;td style=&quot;width: 76.744186%; height: 18px;&quot;&gt;모든 글꼴 속성 일괄 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CSS에서 글자를 꾸밀때 쓰이는 태그는 다음과 같다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.604651%;&quot;&gt;color&lt;/td&gt;
&lt;td style=&quot;width: 76.395349%;&quot;&gt;글자 색상 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.604651%;&quot;&gt;text-shadow&lt;/td&gt;
&lt;td style=&quot;width: 76.395349%;&quot;&gt;글자 그림자 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.604651%;&quot;&gt;text-decoration&lt;/td&gt;
&lt;td style=&quot;width: 76.395349%;&quot;&gt;글자에 줄 긋기(밑줄, 취소선등)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.604651%;&quot;&gt;text-transform&lt;/td&gt;
&lt;td style=&quot;width: 76.395349%;&quot;&gt;글자의 대소문자 변환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.604651%;&quot;&gt;letter-spacing&lt;/td&gt;
&lt;td style=&quot;width: 76.395349%;&quot;&gt;글자 간격 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.604651%;&quot;&gt;word-spacing&lt;/td&gt;
&lt;td style=&quot;width: 76.395349%;&quot;&gt;단어 간격 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CSS에서 배경 부분을 설정할 수도 있다. 이때는 background속성을 사용한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.72093%;&quot;&gt;background-color&lt;/td&gt;
&lt;td style=&quot;width: 76.27907%;&quot;&gt;배경 색상 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.72093%;&quot;&gt;background-image&lt;/td&gt;
&lt;td style=&quot;width: 76.27907%;&quot;&gt;배경 이미지 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.72093%;&quot;&gt;background-size&lt;/td&gt;
&lt;td style=&quot;width: 76.27907%;&quot;&gt;(배경 이미지를 사용한 경우)배경 이미지의 크기 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.72093%;&quot;&gt;background-repeat&lt;/td&gt;
&lt;td style=&quot;width: 76.27907%;&quot;&gt;(배경 이미지를 사용한 경우)배경 이미지의 반복 형태 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.72093%;&quot;&gt;background-attachment&lt;/td&gt;
&lt;td style=&quot;width: 76.27907%;&quot;&gt;(배경 이미지를 사용한 경우)배경 이미지의 부착 형태 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.72093%;&quot;&gt;background-position&lt;/td&gt;
&lt;td style=&quot;width: 76.27907%;&quot;&gt;(배경 이미지를 사용한 경우)배경 이미지의 위치 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.72093%;&quot;&gt;background&lt;/td&gt;
&lt;td style=&quot;width: 76.27907%;&quot;&gt;배경 속성 일괄 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 외에도 다양한 속성이 있다. 추후 필요한 경우 더 정리할 예정이다.&lt;/p&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>css</category>
      <category>가상 선택자</category>
      <category>가상 요소 선택자</category>
      <category>글자 꾸미기</category>
      <category>폰트 설정</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/48</guid>
      <comments>https://swchung09.tistory.com/48#entry48comment</comments>
      <pubDate>Wed, 14 May 2025 23:09:25 +0900</pubDate>
    </item>
    <item>
      <title>우분투, SSH</title>
      <link>https://swchung09.tistory.com/47</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스 계열에서 파생된 운영체제 중 하나이다. 높은 안정성과 LTS(Long Time Support : 업데이트를 자주 수행하지 않아서 안정성을 보장하는 기능이다)로 서버 운영에 자주 사용된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스 계열에서는 CLI(Command Line Interface : 쉘 환경 인터페이스라고 생각하면 쉽다. 예) 터미널, &amp;nbsp;CMD등)를 주로 사용한다. 자주 사용되는 명령어는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ls (dir) : (dir)디렉토리에 있는 파일과 폴더들을 출력해준다. 기본적으로는 현재 디렉토리에 있는 파일과 폴더를 출력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rm (dir) : (dir)인 파일을 삭제하지만, -r 속성을 붙이면 폴더도 삭제가 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cat (file) : (file)의 텍스트 부분을 가져와서 출력해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;touch (file) : (file)라는 이름을 가진 파일을 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cd (dir) : (dir)로 이동한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mkdir (dir) : (dir)라는 이름을 가진 폴더를 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mv (old_dir) (new_dir) : (old_dir)에 있는 파일을 (new_dir)로 옴길 수 있다. 파일 이름을 바꾸는 용도로도 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예 ) mv로 파일 이름을 변경할 경우 mv ./old.txt ./new.txt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;clear : 이전까지 입력되거나 출력된 것들을 지우는 용도로 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 명령어는 윈도우와 호환되지 않지만, rm, cd, mkdir, mv는 사용할 수 있다. 그외의 명령어는 다음과 같이 호환된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ls - dir&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cat - type&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;touch - fsutil&amp;nbsp;file&amp;nbsp;createnew&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 맥은 리눅스 기반이기 때문에 그대로 사용할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스에서는 대부분이 CLI환경이기 때문에 앱을 설치하기가 번거롭다. 따라서 이를 간단하게 할 수 있는 패키지 관리 시스템을 주로 사용하며, 우분투에서는 apt(Advanced Package Tool)관리자가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;apt내 패키지를 업데이트 할 경우,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo apt update (패키지 이름)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;으로 한다. (sudo는 오른쪽에 있는 명령어를 임시로 관리자 권한으로 실행하는 역할을 한다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;apt내 패키지를 업그레이드 할 경우,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo apt upgrade (패키지 이름)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;으로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;apt로 패키지를 설치할 경우,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo apt install (패키지 이름)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;으로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;apt로 패키지를 제거할 경우,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo apt remove (패키지 이름)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;으로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고) 패키지를 제거한 경우, 필요 없는 의존성을 가진 패키지가 남아서 용량을 차지할 수 있다. 이 때는 sudo apt cleanup을 사용하면 된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 CLI환경을 가진 컴퓨터일 수록, 노트북처럼 키보드가 있지 않거나, 데스크탑 컴퓨터처럼 연결하기 쉽지 않을 수도 있고, 원격으로 접속이 필요할때 불편함을 느낄 수 있다. 이 때 SSH(Secure Shell)프로토콜을 사용하면, 안전하게 원격으로 쉘에 접근할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스, 맥, 윈도우가 모두 Openssl기능이 있으므로, ssh를 사용하기 편하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ssh는 다음과 같이 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ssh (아이디)@(주소)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ssh로 개인키를 통한 접속을 할 경우 : -i (dir) 옵션을 추가하면 된다. (맥이나 리눅스에서는 파일 권한이 600인 것을 권장한다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ssh로 기본 포트(22)가 아닌 다른 포트로 접속할 경우 : -p (port) 옵션을 추가하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;1394&quot; data-origin-height=&quot;2366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIWgaR/dJMcagDSZUV/XigAPhbS2KlcUC8PqKPt2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIWgaR/dJMcagDSZUV/XigAPhbS2KlcUC8PqKPt2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIWgaR/dJMcagDSZUV/XigAPhbS2KlcUC8PqKPt2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIWgaR%2FdJMcagDSZUV%2FXigAPhbS2KlcUC8PqKPt2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;491&quot; height=&quot;833&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;1394&quot; data-origin-height=&quot;2366&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예) ssh로 원격 접속을 할경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ssh (아이디)@(주소)를 입력한다. (나는 ssh 포트를 기본과 다르게 했기 때문에 -p 1113 옵션으로 1113번 포트로 변경하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후부터는 해당 컴퓨터의 쉘 환경을 그대로 사용할 수 있다.&lt;/p&gt;</description>
      <category>기타</category>
      <category>apt</category>
      <category>SSH</category>
      <category>ssh 개인키</category>
      <category>ssh 개인키 접속</category>
      <category>우분투</category>
      <category>우분투 명령어</category>
      <category>우분투 서버</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/47</guid>
      <comments>https://swchung09.tistory.com/47#entry47comment</comments>
      <pubDate>Wed, 14 May 2025 22:01:47 +0900</pubDate>
    </item>
    <item>
      <title>네트워크</title>
      <link>https://swchung09.tistory.com/46</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크는 여러 대의 컴퓨터가 서로 연결되어 정보를 주고 받는 시스템이다. 대표적인 네트워크로는 인터넷이 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크에는 4가지 종류가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PAN(Personal Area Network) : 개인 영역의 내트워크이다. 예) 블루투스나 와이파이로 자신의 기기 내에서 통신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LAN(Local Area Network) : 근거리 네트워크이다. 예) 한 건물 내, 한 사무실 내에서 통신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MAN(Metropolitan Area Network) : 도시권 네트워크이다. 예) 큰 규모의 도시 내, 대학 캠퍼스 내에서의 통신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WAN(Wide Area Network) : 광역 네트워크이다. 예) 인터넷&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크에서 서로 통신하기 위해서는 규칙이 있어야 하며, 이 규칙을 프로토콜이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로토콜에는 다양한 종류가 있지만, 자주 쓰이는 프로토콜은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP(Hyper Text Transfer Protocol) : 웹 페이지를 불러오는 용도로 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FTP(File Transfer Protocol) : 파일을 전송하고 받는 용도로 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SMTP(Simple Mail Transfer Protocol) : 메일 서버끼리 메일을 전송하거나 수신하는 용도로 주로 사용된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크에서 각 노드(컴퓨터)를 연결하는 방법을 구조적으로 분류한 것을 토폴로지라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토폴로지에는 크게 7가지의 구조가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고리형 토폴로지 : 노드가 원 형태로 배치되어 있는 구조이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그물형 토폴로지 : 노드가 전부(또는 다수)가 연결되어 있는 구조이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성형 토폴로지 : 중심 노드를 기준으로 배치되는 구조이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라인형 토폴로지 : 노드를 한 줄 형태로 배치한 구조이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트리형 토폴로지 : 상위 노드를 기준으로 계속 확장시키는 구조이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크에서는 호스트를 식별하기 위해 주소가 필요하다. 이 주소들은 논리적(동적)으로 부여되거나 물리적(정적)으로 부여된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논리적 주소에는 IPv4와 IPv6가 있다. 현재 대다수의 컴퓨터는 IPv4를 사용하며, IP 대역에 따라 다양하게 분류될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물리적 주소에는 MAC주소가 있다. 이는 생산할 때부터 고유로 저장된 주소이며, 변경이 불가능하다.&lt;/p&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>네트워크</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/46</guid>
      <comments>https://swchung09.tistory.com/46#entry46comment</comments>
      <pubDate>Wed, 14 May 2025 21:31:04 +0900</pubDate>
    </item>
    <item>
      <title>HTML</title>
      <link>https://swchung09.tistory.com/45</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;HTML은 Hyper Text Markup Language로 웹에서 하이퍼텍스트를 보여주는 용도로 사용되는 파일이다. 주로 CSS와 JS(Javascript)를 같이 사용하며, 웹에 있는 모든 페이지는 이 파일을 사용해야 페이지 내용을 보여줄 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTML은 다음과 같은 구조를 가진다.&lt;/p&gt;
&lt;pre id=&quot;code_1746748475229&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
    	&amp;lt;title&amp;gt;Title&amp;lt;/title&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
    	&amp;lt;h1&amp;gt;H1&amp;lt;/h1&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;!DOCTYPE은 이 파일이 html인 것을 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;&amp;gt;안에 있는 것은 태그이며, 이 구조에서 쓰인 태그는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;html&amp;gt; html파일을 시작하는 기본 태그이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;head&amp;gt; html파일 중 표시되지 않는 메타데이터를 주로 정의하거나 페이지의 제목을 표시하는 용도로 주로 사용된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;body&amp;gt; html파일 중 표시되는 부분을 정의하는 용도로 사용된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;/&amp;gt; 태그들은 닫는 태그이며, 대부분의 경우에는 필요하다.(단, img, input 같은 일부 태그는 닫는 &amp;nbsp;태그가 필요하지 않다)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;h1~h6태그는 제목을 나타내는 용도로 주로 사용된다.&lt;/p&gt;
&lt;div id=&quot;code_1746748861997&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
	&amp;lt;head&amp;gt;
    	&amp;lt;title&amp;gt;H1~H6&amp;lt;/title&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
    	&amp;lt;h1&amp;gt;H1&amp;lt;/h1&amp;gt;
        &amp;lt;h2&amp;gt;H2&amp;lt;/h2&amp;gt;
        &amp;lt;h3&amp;gt;H3&amp;lt;/h3&amp;gt;
        &amp;lt;h4&amp;gt;H4&amp;lt;/h4&amp;gt;
        &amp;lt;h5&amp;gt;H5&amp;lt;/h5&amp;gt;
        &amp;lt;h6&amp;gt;H6&amp;lt;/h6&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&quot;&gt;
&lt;h1&gt;H1&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;H2&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;H3&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;H4&lt;/h4&gt;
&lt;h5&gt;H5&lt;/h5&gt;
&lt;h6&gt;H6&lt;/h6&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 html은 다음과 같은 코드로 이루어져 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1746749019643&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
    	&amp;lt;title&amp;gt;H1~H6&amp;lt;/title&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
    	&amp;lt;h1&amp;gt;H1&amp;lt;/h1&amp;gt;
        &amp;lt;h2&amp;gt;H2&amp;lt;/h2&amp;gt;
        &amp;lt;h3&amp;gt;H3&amp;lt;/h3&amp;gt;
        &amp;lt;h4&amp;gt;H4&amp;lt;/h4&amp;gt;
        &amp;lt;h5&amp;gt;H5&amp;lt;/h5&amp;gt;
        &amp;lt;h6&amp;gt;H6&amp;lt;/h6&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;h1~h6는 글자의 크기를 지정할 수 있으며, h1이 가장 크고, h6가 가장 작다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTML에서 자주 사용되는 &amp;lt;p&amp;gt;태그는 택스트를 나타내는 용도로 쓰인다.&lt;/p&gt;
&lt;div id=&quot;code_1746749211843&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;title&amp;gt;P 태그&amp;lt;/title&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;p&amp;gt;hello world&amp;lt;/p&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hello world&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 HTML을 이루는 코드는 다음과 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1746749242774&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;title&amp;gt;P 태그&amp;lt;/title&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;p&amp;gt;hello world&amp;lt;/p&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 p 태그는 텍스트를 나타내는 용도로 쓰임을 알 수 있다.(문법 상으로는 틀리지만, html파일 내에서 &amp;lt;&amp;gt;안에 있지 않는 모든 텍스트는 브라우저가 알아서 랜더링해준다.)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTML에서 줄바꿈을 하는 br 태그도 있다.&lt;/p&gt;
&lt;div id=&quot;code_1747227969399&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
	&amp;lt;head&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
    	&amp;lt;p&amp;gt;Text1&amp;lt;/p&amp;gt;
        &amp;lt;p&amp;gt;Text2&amp;lt;/p&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Text1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Text2&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 HTML를 이루는 코드는 다음과 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1747227998793&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
    	&amp;lt;p&amp;gt;Text1&amp;lt;/p&amp;gt;
        &amp;lt;p&amp;gt;Text2&amp;lt;/p&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우 p태그의 기본적인 줄바꿈 기능을 사용하였지만, 프로그래밍 언어에서 자주 사용하는 \n처럼 &amp;lt;br&amp;gt;태그를 사용하면 더 효과적으로 줄바꿈을 할 수 있다.&lt;/p&gt;
&lt;div id=&quot;code_1747228230421&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
    	&amp;lt;p&amp;gt;Text1&amp;lt;br&amp;gt;Text2&amp;lt;/p&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Text1&lt;br /&gt;Text2&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 HTML를 이루는 코드는 다음과 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1747228258698&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
    	&amp;lt;p&amp;gt;Text1&amp;lt;br&amp;gt;Text2&amp;lt;/p&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTML에서 그룹화 하는 태그가 2가지가 있다. div 태그는 블럭 형태로 그룹화 하는 태그이고, span 태그는 인타인 형태로 그룹화하는 태그이다. div 태그는 어떤 사이트를 가더라도 div태그가 무조건 보이지만, span태그는 사실상 CSS로 대체되는 경우가 많아 잘 사용되지는 않는다. 따라서 div태그만 설명한다.&lt;/p&gt;
&lt;div id=&quot;code_1747229719319&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
    &amp;lt;div&amp;gt;
        &amp;lt;h1&amp;gt;제목&amp;lt;/h1&amp;gt;
        &amp;lt;p&amp;gt;내용1&amp;lt;/p&amp;gt;
        &amp;lt;p&amp;gt;내용2&amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&quot;&gt;
&lt;div&gt;
&lt;h1&gt;제목&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용2&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 HTML를 이루는 코드는 다음과 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1747229538551&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
    &amp;lt;div&amp;gt;
        &amp;lt;h1&amp;gt;제목&amp;lt;/h1&amp;gt;
        &amp;lt;p&amp;gt;내용1&amp;lt;/p&amp;gt;
        &amp;lt;p&amp;gt;내용2&amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 html처럼 div태그는 다른 태그와 달리 의미 있는 태그가 아닌 것 같지만, CSS에서 그룹 형태로 디자인을 적용시킬 때는 매우 유용하게 적용하게 할 수 있는 태그이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTML에서 링크를 표시할때 밑줄이 표함되어 있을 것이다. 이럴 때 사용하는 태그가 a태그이다.&lt;/p&gt;
&lt;div id=&quot;code_1747229774366&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;a href=&amp;quot;https://example.com&amp;quot;&amp;gt;example.com&amp;lt;/a&amp;gt;
    
&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&quot;&gt;&lt;a href=&quot;https://example.com&quot;&gt;example.com&lt;/a&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 HTML를 이루는 코드는 다음과 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1747229818482&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;a href=&quot;https://example.com&quot;&amp;gt;example.com&amp;lt;/a&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 HTML에서 밑줄이 포함된 URL 링크를 표시하는데 사용된다. 클릭하면 href속성에 있는 주소로 이동한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTML에서 이미지를 표시할 때 img태그를 사용한다.&lt;/p&gt;
&lt;div id=&quot;code_1747229957213&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;img src=&amp;quot;https://placehold.co/300x200&amp;quot;&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&quot;&gt;&lt;img src=&quot;https://placehold.co/300x200&quot; /&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 HTML를 이루는 코드는 다음과 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1747230010916&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;img src=&quot;https://placehold.co/300x200&quot;&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 img태그는 src에 있는 이미지를 불러와서 페이지에 표시해 주는 역할을 한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 외에도 다양한 태그가 있다. 나머지들은 추후 정리할 예정이다.&lt;/p&gt;</description>
      <category>HTML, CSS, JS, 웹, 네트워크</category>
      <category>a</category>
      <category>Br</category>
      <category>div</category>
      <category>H1</category>
      <category>html</category>
      <category>p</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/45</guid>
      <comments>https://swchung09.tistory.com/45#entry45comment</comments>
      <pubDate>Fri, 9 May 2025 09:01:17 +0900</pubDate>
    </item>
    <item>
      <title>Git, Github</title>
      <link>https://swchung09.tistory.com/44</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Git : Git은 2005년에 발표된 변경 사항을 자동으로 업로드해주는 분산 버전 관리 시스템이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Github : Git시스템으로 작성된 분산 버전 관리 시스템이면서, 깃 저장소 호스팅을 지원하는 사이트이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git에서 사용되는 용어는 다음과 같다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬 저장소 : 로컬에서 관리하고 저장하는 Git 저장소이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격 저장소 : Github같은 사이트에서 관리하고, 로컬 저장소의 파일을 업로드하는 곳이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스테이징 : 커밋 하기 전, 커밋할 파일들을 수집하는 것이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커밋 : 스테이징 된 파일들을 커밋 히스토리에 기록하는 것이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;푸쉬 : 로컬 저장소에 있는 커밋들을 원격 저장소에 업로드하는 것이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;풀 : 원격 저장소에 있는 파일을 로컬 저장소로 불러오는 것이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브랜치 : 작업을 나누어서 하기 위한 분기다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클론 : 다른 저장소의 프로젝트를 복제하는 것이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;병합 : 두 브랜치의 변경 사항을 하나로 합치는 것이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;풀 리퀘스트 : 커밋을 병합하는 걸 허락해달라고 요청하는 것이다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git에서 사용되는 명령어는 다음과 같다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git init : 현재 디렉토리에 git 저장소를 생성한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git clone [주소] : 원격 저장소의 내용을 복제하여 가저온다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git add [파일 이름] : 파일을 스테이징에 추가한다(변경 사항이 있는 경우)(모든 파일 추가에는 git add .을 사용한다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git commit : 스테이징에 추가된 변경 사항을 원격 저장소에 커밋한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git status : 현재 디렉토리의 git 저장소의 상태를 확인할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git log : 커밋 히스토리를 확인할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git push [원격 저장소][브랜치] : 원격 저장소에 업로드한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git pull [원격 저장소][브랜치] : 로컬 저장소로 불러온다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git branch [브랜치 이름] : 새로운 브랜치를 생성하거나, 로컬의 브랜치를 보여준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git checkout [브랜치 이름] : 다른 브랜치로 전환한다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고 : 맥에서 git-github를 연동해서 사용할 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image1.png&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;1167&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/32v7a/btsNLSs3qae/ZMnwTS5JO6c6cC3VXHte3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/32v7a/btsNLSs3qae/ZMnwTS5JO6c6cC3VXHte3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/32v7a/btsNLSs3qae/ZMnwTS5JO6c6cC3VXHte3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F32v7a%2FbtsNLSs3qae%2FZMnwTS5JO6c6cC3VXHte3K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;388&quot; height=&quot;1167&quot; data-filename=&quot;image1.png&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;1167&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Github-Settings-Developer Settings에서 tokens classic을 발급한다. (모든 권한을 활성화하였지만, 필요한 권한만 활성화하는 것을 권장한다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;발급받은 토큰을 복사하고, 터미널을 실행한 다음, git init을 하고,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1394&quot; data-origin-height=&quot;2366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxxU6w/btsNLtG2bRw/q0i0JlvpSPDFHInn9XNYVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxxU6w/btsNLtG2bRw/q0i0JlvpSPDFHInn9XNYVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxxU6w/btsNLtG2bRw/q0i0JlvpSPDFHInn9XNYVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxxU6w%2FbtsNLtG2bRw%2Fq0i0JlvpSPDFHInn9XNYVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;422&quot; height=&quot;716&quot; data-origin-width=&quot;1394&quot; data-origin-height=&quot;2366&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;origin을 추가합니다. (Your url은 보통 다음과 같은 형식을 가집니다 : https://github.com/[아이디]/[저장소 이름].git)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 파일을 업로드 하고, 아이디와 비밀번호를 물어보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1394&quot; data-origin-height=&quot;2366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bILA5C/btsNK4OvFFc/elKekcS9wKbcLLj7XOdiW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bILA5C/btsNK4OvFFc/elKekcS9wKbcLLj7XOdiW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bILA5C/btsNK4OvFFc/elKekcS9wKbcLLj7XOdiW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbILA5C%2FbtsNK4OvFFc%2FelKekcS9wKbcLLj7XOdiW1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;425&quot; height=&quot;721&quot; data-origin-width=&quot;1394&quot; data-origin-height=&quot;2366&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;아이디 : Github 아이디&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비밀번호 : 토큰 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;을 입력하면 된다.&lt;/p&gt;</description>
      <category>기타</category>
      <category>git</category>
      <category>github</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/44</guid>
      <comments>https://swchung09.tistory.com/44#entry44comment</comments>
      <pubDate>Wed, 7 May 2025 11:35:39 +0900</pubDate>
    </item>
    <item>
      <title>동적 할당, 구조체</title>
      <link>https://swchung09.tistory.com/43</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;일반적인 배열과 변수는 메모리 안에 변수가 할당된다. 이는 코드가 컴파일 될 때 크기가 정해지기 때문에, 이후 크기를 런타임에 추가적으로 할당 하기 위해서는 동적 할당이 필요하다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동적 할당에는 3가지 방법이있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-malloc() 가장 자주 사용되는 동적할당 방법이고, 원하는 자료형의 메모리를 직접할당하는 방식이다.&lt;/p&gt;
&lt;pre id=&quot;code_1744725839584&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int *arr = (int *)malloc(n*sizeof(int));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(여기서 사용되는 sizeof는 자료형이나 배열의 크기를 리턴한다. 그러나 배열은 기본적으로 자료형의 크기*전체 수이다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-calloc() 메모리를 원하는 개수 만큼 정확히 할당하는 방법이다. 이 방법은 malloc(n*sizeof(int))일 경우 calloc(n, sizeof(int))와 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1744726060589&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int *arr2 = (int *)calloc(n, sizeof(int));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-realloc() 이미 선언된 변수나 배열을 초기화하고 다시 할당하는 방법이다.&lt;/p&gt;
&lt;pre id=&quot;code_1744726122801&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int *arr3 = (int *)realloc(arr1, sizeof(int));&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구조체는 다른 언어들의 클래스와 거의 같은 역할을 한다. 비록 C는 객체 지향적이지 않지만, 구조체로 객체 지향적인 것처럼(?) 만들 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 구조체는 다음과 같이 선언할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1744726251575&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;struct data{
	int int_data;
    char char_data;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 data는 구조체 이름, int_data와 char_data는 data의 속성이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 다음과 같이 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1744726321274&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;struct data my_data;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 my_data는 객체의 이름과 같다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구조체는 typedef를 사용하면 자료형으로 만들 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1744726508735&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;typedef struct data_{
    int int_data;
    char char_data;
} data;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 후 기존의 struct (구조체 이름) (객체 이름) 형식이 아닌, int같은 기본 자료형과 같은 방식으로 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1744726578003&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;data my_data;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구조체로 포인터를 만들 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1744726809809&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;struct data my_data;
struct data* my_data_p = &amp;amp;my_data;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 포인터로 하면, 나중에 접근할 때 *를 사용하지 않고, -&amp;gt;를 사용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744726874505&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;data_p -&amp;gt; int_data;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지만 보면, 구조체는 단순히 변수만 속성으로 지정할 수 있고, 메서드는 사용할 수 없는 것 같지만, 함수 포인터를 사용하면 가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1744727302798&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
struct data {
    int int_data;
    char char_data;
    void (*print)(int, char);
}
void print_(int x, char y){
    printf(&quot;%d %c&quot;, x, y);
}
int main(){
    struct data my_data;
    my_data.print = print_;
    my_data.print(my_data.int_data, my_data.char_data);
    return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>C, C++</category>
      <category>c</category>
      <category>구조체_함수</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/43</guid>
      <comments>https://swchung09.tistory.com/43#entry43comment</comments>
      <pubDate>Tue, 15 Apr 2025 23:31:57 +0900</pubDate>
    </item>
    <item>
      <title>구조체가 담긴 배열의 포인터</title>
      <link>https://swchung09.tistory.com/42</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;구조체로 학생의 학번, 이름, 생년월일(정수6개)를 저장하는 구조체를&amp;nbsp;생성한&amp;nbsp;후,&amp;nbsp;구조체를&amp;nbsp;배열로&amp;nbsp;만들고,&amp;nbsp;그&amp;nbsp;구조체&amp;nbsp;배열&lt;br /&gt;의 주소를 저장하는 포인터 변수를 통해 구조체 배열에 접근하여&amp;nbsp;원하는&amp;nbsp;학생&amp;nbsp;수&amp;nbsp;만큼&amp;nbsp;정보를&amp;nbsp;입력받고&amp;nbsp;출력하는&amp;nbsp;코드&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 복잡해보이지만, 해결 방법이 어렵지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 라이브러리를 불러온다.&lt;/p&gt;
&lt;pre id=&quot;code_1744673123490&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 struct를 생성한다. struct에는 학번과, 이름, 생년월을을 저장해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744673186334&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;struct student{
    int student_num, birthday;
    char name[1000];
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 scanf로 학생 수를 입력 받고, VLA문법으로 배열과 포인터를 생성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744673278885&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int n;
scanf(&quot;%d&quot;, &amp;amp;n);
struct student info[n];
struct student* info_p = info;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 for문으로 학생 정보를 입력받는다. 이때 인덱스를 사용하지 않는 방법으로 포인터에 값을 증가시키면 인덱스와 같은 역할을 할 수 있다는 것을 이용했다.&lt;/p&gt;
&lt;pre id=&quot;code_1744673482671&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (int i = 0; i &amp;lt; n; i++){
    printf(&quot;학변 : &quot;);
    scanf(&quot;%d&quot;, &amp;amp;((info_p+i) -&amp;gt; student_num));
    printf(&quot;이름 : &quot;);
    scanf(&quot;%s&quot;, (info_p+i) -&amp;gt; name);
    printf(&quot;생년월일 : &quot;);
    scanf(&quot;%d&quot;, &amp;amp;((info_p+i) -&amp;gt; birthday));
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for문으로 저장된 정보를 출력하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1744674254601&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (int i = 0; i &amp;lt; n; i++){
    printf(&quot;%d/%d번째 학생 정보 &quot;, i, n-1);
    printf(&quot;학번 : %d &quot;, (info_p+i) -&amp;gt; student_num);
    printf(&quot;이름 : %s &quot;, (info_p+i) -&amp;gt; name);
    printf(&quot;생년월일 : %06d\n&quot;, (info_p+i) -&amp;gt; birthday);
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종 코드&lt;/p&gt;
&lt;pre id=&quot;code_1744677515388&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

struct student{
    int student_num, birthday;
    char name[1000];
};
int main(void){
    int n;
    scanf(&quot;%d&quot;, &amp;amp;n);
    struct student info[n];
    struct student* info_p = info;
    for (int i = 0; i &amp;lt; n; i++){
        printf(&quot;학번 : &quot;);
        scanf(&quot;%d&quot;, &amp;amp;((info_p+i) -&amp;gt; student_num));
        printf(&quot;이름 : &quot;);
        scanf(&quot;%s&quot;, (info_p+i) -&amp;gt; name);
        printf(&quot;생년월일 : &quot;);
        scanf(&quot;%d&quot;, &amp;amp;((info_p+i) -&amp;gt; birthday));
    }
    for (int i = 0; i &amp;lt; n; i++){
        printf(&quot;%d/%d번째 학생 정보 &quot;, i, n-1);
        printf(&quot;학번 : %d &quot;, (info_p+i) -&amp;gt; student_num);
        printf(&quot;이름 : %s &quot;, (info_p+i) -&amp;gt; name);
        printf(&quot;생년월일 : %06d\n&quot;, (info_p+i) -&amp;gt; birthday);
    }
    return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>기타</category>
      <category>c</category>
      <category>C++</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/42</guid>
      <comments>https://swchung09.tistory.com/42#entry42comment</comments>
      <pubDate>Tue, 15 Apr 2025 09:39:20 +0900</pubDate>
    </item>
    <item>
      <title>재귀함수, 포인터</title>
      <link>https://swchung09.tistory.com/41</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;재귀 함수는 함수 내부에서 자기 자신을 재귀적으로 호출하는 함수이다. 예)&lt;/p&gt;
&lt;pre id=&quot;code_1744590584124&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void hello(int n){
    if (0 &amp;lt; n){
    	printf(&quot;hello&quot;);
        hello(n-1);
    }else{
    	return;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 함수에서는 n이 0이 될때 까지 재귀적으로 hello를 호출한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재귀 함수의 대표적인 예에는 팩토리얼과 피보나치 수열이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;팩토리얼&quot; href=&quot;https://swchung09.tistory.com/38&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://swchung09.tistory.com/38&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1744590741892&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;27433번, 팩토리얼 2&quot; data-og-description=&quot;https://www.acmicpc.net/problem/27433이 문제는 정수 N을 줄때, N 팩토리얼을 출력하는 문제이다.팩토리얼은 1부터 N까지의 곱을 의미한다. 따라서 5 팩토리얼이면, 5*4*3*2*1=120이다.이 코드를 짜기 전, C에서&quot; data-og-host=&quot;blog.aiswstudio.com&quot; data-og-source-url=&quot;https://swchung09.tistory.com/38&quot; data-og-url=&quot;https://blog.aiswstudio.com/38&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lXcLz/hyYG6eSxAT/dTJaMKveJFKXTQbKcm5GR0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cqM87n/hyYFB0Fuyb/8caivrj3T5YEO87Q5a7B51/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/b7izQc/hyYCeTxCfV/8f0gprjI9r87Kn8pYTvFT0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://swchung09.tistory.com/38&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://swchung09.tistory.com/38&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lXcLz/hyYG6eSxAT/dTJaMKveJFKXTQbKcm5GR0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cqM87n/hyYFB0Fuyb/8caivrj3T5YEO87Q5a7B51/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/b7izQc/hyYCeTxCfV/8f0gprjI9r87Kn8pYTvFT0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;27433번, 팩토리얼 2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;https://www.acmicpc.net/problem/27433이 문제는 정수 N을 줄때, N 팩토리얼을 출력하는 문제이다.팩토리얼은 1부터 N까지의 곱을 의미한다. 따라서 5 팩토리얼이면, 5*4*3*2*1=120이다.이 코드를 짜기 전, C에서&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.aiswstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;피보나치 수열&quot; href=&quot;https://swchung09.tistory.com/39&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://swchung09.tistory.com/39&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1744590760410&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;10870번, 피보나치 수 5&quot; data-og-description=&quot;https://www.acmicpc.net/problem/10870이 문제는 n을 주면, n번째 피보나치 수를 구하는 문제이다.우선 이전에 풀었던 문제인 팩토리얼 2를 응용해서 풀거기 때문에, unsigned long int는 그대로 사용하겠다.우&quot; data-og-host=&quot;blog.aiswstudio.com&quot; data-og-source-url=&quot;https://swchung09.tistory.com/39&quot; data-og-url=&quot;https://blog.aiswstudio.com/39&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bApJaU/hyYEHOCJpW/xX3jb8OwWt009pSKaKRAV0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/rUOno/hyYB8eJXlG/wMfndw4c1G4vhLjGksukFK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/eosKEm/hyYCgjwlo6/k2WwR3ERoWciE4NhNvIAv0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://swchung09.tistory.com/39&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://swchung09.tistory.com/39&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bApJaU/hyYEHOCJpW/xX3jb8OwWt009pSKaKRAV0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/rUOno/hyYB8eJXlG/wMfndw4c1G4vhLjGksukFK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/eosKEm/hyYCgjwlo6/k2WwR3ERoWciE4NhNvIAv0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;10870번, 피보나치 수 5&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;https://www.acmicpc.net/problem/10870이 문제는 n을 주면, n번째 피보나치 수를 구하는 문제이다.우선 이전에 풀었던 문제인 팩토리얼 2를 응용해서 풀거기 때문에, unsigned long int는 그대로 사용하겠다.우&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.aiswstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 C언어 계열에서 빠질 수 없는 개념, 포인터이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포인터는 어떤 변수의 주소를 저장하는 변수이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포인터 기호는 *과 &amp;amp;가 있다. *는 포인터 변수가 가르키는 주소의 값을 가져오는 기호이고, scanf에서 자주 보이는 &amp;amp;는 변수의 주소값을 가져오는 기호이다. 예)&lt;/p&gt;
&lt;pre id=&quot;code_1744590911397&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int test = 0;
int* test_p = &amp;amp;test;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열은 배열의 첫 번째 값의 주소를 가르키기 때문에, 포인터 변수를 통해 배열을 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 arr = &amp;amp;arr = &amp;amp;arr[0]이다.&lt;/p&gt;</description>
      <category>C, C++</category>
      <category>c</category>
      <category>C++</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/41</guid>
      <comments>https://swchung09.tistory.com/41#entry41comment</comments>
      <pubDate>Mon, 14 Apr 2025 09:37:04 +0900</pubDate>
    </item>
    <item>
      <title>25501번, 재귀의 귀재</title>
      <link>https://swchung09.tistory.com/40</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;25501번&quot; href=&quot;https://www.acmicpc.net/problem/25501&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/25501&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 isPalindrome함수를 활용해서 함수의 반환 값과 recursion 함수의 호출 횟수를 출력하는 문제이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 이 문제에서는 문자열을 사용하므로, stdio.h와 string.h를 불러온다.&lt;/p&gt;
&lt;pre id=&quot;code_1744517019155&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;string.h&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제를 쉽게 풀기 위해서 run_time이라는 전역 변수를 생성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744523234810&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int run_time;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 이 문제에서 기본 적으로 준 recursion함수와 isPalindrome함수를 정의한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744517050722&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int recursion(const char *s, int l, int r){
    if(l &amp;gt;= r) return 1;
    else if(s[l] != s[r]) return 0;
    else return recursion(s, l+1, r-1);
}

int isPalindrome(const char *s){
    return recursion(s, 0, strlen(s)-1);
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 main함수에서 n을 입력받고, for문으로 문자열을 입력받고 결과 값을 출력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744523286358&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int main(){
    char s[1001];
    int n, a;
    scanf(&quot;%d&quot;, &amp;amp;n);
    for (int i = 0; i &amp;lt; n; i++){
        scanf(&quot;%s&quot;, &amp;amp;s);
        a = isPalindrome(s);
        printf(&quot;%d %d\n&quot;, a, run_time);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종 코드&lt;/p&gt;
&lt;pre id=&quot;code_1744523298599&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;string.h&amp;gt;

int run_time;

int recursion(const char *s, int l, int r){
    run_time += 1;
    if(l &amp;gt;= r) return 1;
    else if(s[l] != s[r]) return 0;
    else return recursion(s, l+1, r-1);
}

int isPalindrome(const char *s){
    run_time = 0;
    return recursion(s, 0, strlen(s)-1);
}

int main(){
    char s[1001];
    int n, a;
    scanf(&quot;%d&quot;, &amp;amp;n);
    for (int i = 0; i &amp;lt; n; i++){
        scanf(&quot;%s&quot;, &amp;amp;s);
        a = isPalindrome(s);
        printf(&quot;%d %d\n&quot;, a, run_time);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>백준 C, C++ 문제</category>
      <category>c</category>
      <category>C++</category>
      <category>백준 25501번</category>
      <category>재귀의 귀재</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/40</guid>
      <comments>https://swchung09.tistory.com/40#entry40comment</comments>
      <pubDate>Sun, 13 Apr 2025 14:48:46 +0900</pubDate>
    </item>
    <item>
      <title>10870번, 피보나치 수 5</title>
      <link>https://swchung09.tistory.com/39</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;10870번&quot; href=&quot;https://www.acmicpc.net/problem/10870&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/10870&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 n을 주면, n번째 피보나치 수를 구하는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 이전에 풀었던 문제인 팩토리얼 2를 응용해서 풀거기 때문에, unsigned long int는 그대로 사용하겠다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 기본 라이브러리를 불러온다.&lt;/p&gt;
&lt;pre id=&quot;code_1744515207466&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재귀 함수를 이용해서 풀거기 때문에, fibonaci함수를 생성한다. (a와 b는 이전에 있던 숫자들이다.)(만약 C++이라면, 첫 a와 b를 기본 값으로 설정할 수 있다. a = 0, b = 0)&lt;/p&gt;
&lt;pre id=&quot;code_1744515294859&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;unsigned long int fibonaci(int n, int a, int b);&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수 내에서는 n이 0이면 0을 리턴하고, n이 3보다 작으면 a+b를 리턴하고, 전부 아니면 fibonaci(n-1, b, a+b)를 리턴한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744515466090&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if (n == 0){
    return 0;
}else if (n &amp;lt; 3){
    return a+b;
}else {
    return fibonaci(n-1, b, a+b);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 n이 4라면, (a와 b는 추후 계산을 위해서 필요한 것이기 때문에, 각각 0과 1로 고정하겠다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n은 0이 아니고, 3보다 작지 않기 때문에, fibonaci(n-1, b, a+b)를 리턴한다. 리턴하기 전, fibonaci(n-1, b, a+b)를 계산한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fibonaci(n-1, a, b)(n=3, a=1, b = 1)에서 n은 0이 아니고, 3보다 작지 않기 때문에 fibonaci(n-1, b, a+b)를 리턴한다. 리턴하기 전, fibonaci(n-1, b, a+b)를 계산한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fibonaci(n-1, a, b)(n=2, a=1, b = 2)에서 n은 0이 아니지만, 3보다 작기 때문에 a+b = 3을 리턴한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fibonaci(n-1, a, b)(n=3, a=1, b=1)에서 fibonaci(2, 1, 2) = 3의 값을 그대로 리턴한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fibonaci(n-1, a, b)(n=4, a=0, b=1)에서 fibonaci(3, 1, 1) = 3의 값을 그대로 리턴한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 n이 4일때 피보나치의 값은 3이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;main함수에서 scanf로 n을 입력 받고, printf로 피보나치 함수의 결과를 출력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744516044565&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int main(){
    int n;
    scanf(&quot;%d&quot;, &amp;amp;n);
    printf(&quot;%lu&quot;, fibonaci(n, 0, 1));
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종 코드&lt;/p&gt;
&lt;pre id=&quot;code_1744516056046&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

unsigned long int fibonaci(int n, int a, int b){
    if (n == 0){
        return 0;
    }else if (n &amp;lt; 3){
        return a+b;
    }else {
        return fibonaci(n-1, b, a+b);
    }
}

int main(){
    int n;
    scanf(&quot;%d&quot;, &amp;amp;n);
    printf(&quot;%lu&quot;, fibonaci(n, 0, 1));
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>백준 C, C++ 문제</category>
      <category>c</category>
      <category>C++</category>
      <category>백준 10870번</category>
      <category>피보나치 수 5</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/39</guid>
      <comments>https://swchung09.tistory.com/39#entry39comment</comments>
      <pubDate>Sun, 13 Apr 2025 12:48:49 +0900</pubDate>
    </item>
    <item>
      <title>27433번, 팩토리얼 2</title>
      <link>https://swchung09.tistory.com/38</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;27433번&quot; href=&quot;https://www.acmicpc.net/problem/27433&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/27433&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 정수 N을 줄때, N 팩토리얼을 출력하는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팩토리얼은 1부터 N까지의 곱을 의미한다. 따라서 5 팩토리얼이면, 5*4*3*2*1=120이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드를 짜기 전, C에서는 숫자의 범위가 파이썬처럼 무한하지 않기 때문에, 리턴 타입을 unsigned long int로 설정하였다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 기본 라이브러리를 불러온다.&lt;/p&gt;
&lt;pre id=&quot;code_1744514168158&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 난 재귀함수로 문제를 풀거기 때문에, factorial함수를 생성한다. (unsigned long int는 부호가 없는 long int이기 때문에, 부호 비트가 없어서 더욱 큰 숫자의 범위를 표현할 수 있다.)&lt;/p&gt;
&lt;pre id=&quot;code_1744514282833&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;unsigned long int factorial(int n);&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수 내에서는 1보다 n이 크면 재귀적으로 호출하고, 아니면 1을 리턴하는 코드를 넣었다.&lt;/p&gt;
&lt;pre id=&quot;code_1744514346511&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if (1 &amp;lt; n){
	return n * factorial(n-1);
}else {
	return 1;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예) 만약 factorial에 5를 넣고 실행하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n은 1보다 크기 때문에(n = 5) return n * factorial(n-1)을 실행한다. 리턴하기 전, factorial(n-1)의 값을 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;factorial(n-1)(n = 4)에서 n은 1보다 크기 때문에(n = 4) return n * factorial(n-1)을 실행한다. 리턴하기 전, factorial(n-1)의 값을 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;factorial(n-1)(n = 3)에서 n은 1보다 크기 때문에(n = 3) return n * factorial(n-1)을 실행한다. 리턴하기 전, factorial(n-1)의 값을 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;factorial(n-1)(n = 2)에서 n은 1보다 크기 때문에(n = 2) return n * factorial(n-1)을 실행한다. 리턴하기 전, factorial(n-1)의 값을 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;factorial(n-1)(n = 1)에서 n은 더이상 1보다 크지 않기 때문에 1을 리턴한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;factorial(n-1)(n = 2)에서 이제 factorial(1)의 값을 구했기 때문에, 이제 n * 1 = 2 * 1 = 2를 리턴한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;factorial(n-1)(n = 3)에서 이제 factorial(2)의 값을 구했기 때문에, 이제 n * 2 = 3 * 2 = 6을 리턴한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;factorial(n-1)(n = 4)에서 이제 factorial(3)의 값을 구했기 때문에, 이제 n * 6 = 4 * 6 = 24를 리턴한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;factorial(n-1)(n = 5)에서 이제 factorial(4)의 값을 구했기 때문에, 이제 n * 24 = 5 * 24 = 120을 리턴한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;main함수에서 scanf로 입력 받고, printf로 factorial 결과 값을 출력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744514818832&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int main(){
    int n;
    scanf(&quot;%d&quot;, &amp;amp;n);
    printf(&quot;%lu&quot;, factorial(n));
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종 코드&lt;/p&gt;
&lt;pre id=&quot;code_1744514835370&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
unsigned long int factorial(int n){
    if (1 &amp;lt; n){
        return n * factorial(n-1);
    }else {
        return 1;
    }
}

int main(){
    int n;
    scanf(&quot;%d&quot;, &amp;amp;n);
    printf(&quot;%lu&quot;, factorial(n));
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;(중간에 팩토리얼 적다가 내 뇌에 혼란이 찾아 왔다...)&lt;/s&gt;&lt;/p&gt;</description>
      <category>백준 C, C++ 문제</category>
      <category>c</category>
      <category>C++</category>
      <category>백준 27433번</category>
      <category>팩토리얼 2</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/38</guid>
      <comments>https://swchung09.tistory.com/38#entry38comment</comments>
      <pubDate>Sun, 13 Apr 2025 12:31:09 +0900</pubDate>
    </item>
    <item>
      <title>배열, 변수(전역, 지역), 함수</title>
      <link>https://swchung09.tistory.com/36</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;배열은 다음과 같은 형태로 선언 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1744112901805&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int arr[12] = {0,};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 int는 배열에 있는 값의 타입이고, 12는 배열의 길이이다. 그리고 arr은 배열의 이름이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뒤에 있는 {0, }는 배열을 0으로 채우라는 의미이다.(또는 {0, 1, 2, 3}처럼 지정할 수도 있다.)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지역 변수는 main안 에서 사용하는 변수처럼 어떤 중괄호 안에서 선언된 변수이다. 이는 변수가 선언된 중괄호 내에서는 호출할 수 있지만, 중괄호가 닫히면 호출할 수 없다.&lt;/p&gt;
&lt;pre id=&quot;code_1744113161144&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int main(){
	int test = 0;
    //여기까지는 test를 호출할 수 있음
}//여기 부터는 test를 호출할 수 없음&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대로 전역 변수는 다른 함수에서도 호출할 수 있으며, main함수 밖 #include를 사용하는 부분 쪽에서 주로 선언 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1744113228833&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
int test = 0;
void test_func(){
	//여기서는 test를 호출할 수 있음
}
int main(){
	//여기서도 test를 호출할 수 있음
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 전역 변수는 꼭 int가 아니여도 된다. 배열이나 다른 타입도 가능하다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수는 특정 명령어를 모아 놓은 집합체이다. 함수의 대표적인 예는 main함수가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수는 다음과 같은 구조를 가진다.&lt;/p&gt;
&lt;pre id=&quot;code_1744113456697&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[리턴 타입] 함수 이름(매개 변수){
	코드
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리턴 타입은 return (리턴 값)에서 리턴 값의 타입을 의미한다.(만약 리턴 값이 없으면 리턴 타입은 void가 된다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매개 변수는 함수에게 변수를 넘겨주는 용도로 사용된다.&lt;/p&gt;</description>
      <category>C, C++</category>
      <category>c</category>
      <category>C++</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/36</guid>
      <comments>https://swchung09.tistory.com/36#entry36comment</comments>
      <pubDate>Tue, 8 Apr 2025 20:59:07 +0900</pubDate>
    </item>
    <item>
      <title>2차원 배열 이동 문제</title>
      <link>https://swchung09.tistory.com/35</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #3c4043; text-align: start;&quot;&gt;2차원 배열로 15x15 짜리 판을 하나 만들고, 0으로 전부 초기화 한 후, 정 가운데 부분만 1로 둡니다.(체스에서 말을 둔다고 생각)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #3c4043; text-align: start;&quot;&gt;그리고 숫자를 0이 입력될 때 까지 입력받고,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #3c4043; text-align: start;&quot;&gt;1을 입력할시 오른쪽으로, 2를 입력할시 아래로, 3을 입력할 시 왼쪽으로, 4를 입력할 시 위쪽으로 한칸씩 이동하고, 이동 할 때마다 이동한 판을 출력하는 코드를 작성하세요. &lt;span style=&quot;color: #3c4043; text-align: start;&quot;&gt;(범위 밖으로 나가는건 처리하지 않아도 됩니다)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #3c4043; text-align: start;&quot;&gt;조건) 이동하는 코드, 출력하는 코드는 모두 함수로 작성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #3c4043; text-align: start;&quot;&gt;이 문제에서는 전역 변수로 array를 선언하면 편하기 때문에, {{0, }, {0, } (생략)}형식으로 초기화 했다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744104538924&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int arr[15][15] = {{0,}, {0,}, {0,}, {0,}, {0,},
    {0,}, {0,}, {0,}, {0,}, {0,},
    {0,}, {0,}, {0,}, {0,}, {0,}};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #3c4043; text-align: start;&quot;&gt;이 배열은 다음과 같다. (전부 값은 0이다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #3c4043; text-align: start;&quot;&gt;(0, 0) (1, 0) (2, 0) (3, 0) (4, 0) (5, 0) (6, 0) (7, 0) (8, 0) (9, 0) (10, 0) (11, 0) (12, 0) (13, 0) (14, 0)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #3c4043; text-align: start;&quot;&gt;(0, 1) &amp;nbsp;(1, 1) (2, 1) &amp;nbsp;(3, 1) &amp;nbsp;(4, 1) (5, 1) &amp;nbsp;(6, 1) (7, 1) &amp;nbsp;(8, 1) &amp;nbsp;(9, 1) (10, 1) &amp;nbsp;(11, 1) (12, 1) (13, 1) (14, 1)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #3c4043; text-align: start;&quot;&gt;(0, 2) (1, 2) (2, 2) (3, 2) (4, 2) (5, 2) (6, 2) (7, 2) (8, 2) (9, 2) (10, 2) (11, 2) (12, 2) (13, 2) (14, 2) ...&lt;/span&gt;&lt;span style=&quot;color: #3c4043; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #3c4043; text-align: start;&quot;&gt;우선 이동 하기 전, 현재 1이 있는 부분을 찾아야 하기 때문에 find함수부터 만들었다. (이 때 함수는 크기가 2인 정수 배열을 리턴하기 위해 포인터를 사용한다.)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744104562962&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int* find(void){
    static int pos[2];
    for (int x = 0; x &amp;lt; 15; x++){
        for (int y = 0; y &amp;lt; 15; y++){
            if (arr[y][x] == 1){
                pos[0] = x;
                pos[1] = y;
                return pos;
            }
        }
    }
    return pos;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #3c4043; text-align: start;&quot;&gt;그 다음 left함수를 x-1로 구현했다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744104636948&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void left(void){
    int x = find()[0], y = find()[1];
    arr[y][x] = 0;
    arr[y][x-1] = 1;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 right함수를 x+1로 구현했다.&lt;/p&gt;
&lt;pre id=&quot;code_1744104659740&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void right(void){
    int x = find()[0], y = find()[1];
    arr[y][x] = 0;
    arr[y][x+1] = 1;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 up함수를 y-1(위에서 설명 한 것 처럼 y가 작을 수록 위를 의미하기 때문이다.)로 구현했다.&lt;/p&gt;
&lt;pre id=&quot;code_1744105142849&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void up(void){
    int x = find()[0], y = find()[1];
    arr[y][x] = 0;
    arr[y-1][x] = 1;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 down함수를 y+1로 구현했다.&lt;/p&gt;
&lt;pre id=&quot;code_1744105164148&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void down(void){
    int x = find()[0], y = find()[1];
    arr[y][x] = 0;
    arr[y+1][x] = 1;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 모든 이동 후, 출력하는 함수 print_arr를 만들었다.&lt;/p&gt;
&lt;pre id=&quot;code_1744105192672&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void print_arr(void){
    for (int x = 0; x &amp;lt; 15; x++){
        for (int y = 0; y &amp;lt; 15; y++){
            printf(&quot;%d &quot;, arr[x][y]);
        }
        printf(&quot;\n&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 각 번호마다 이동함수가 실행되는 switch-case와, 배열 가운데에 1을 추가하는 코드등이 포함된 main함수를 만들었다.&lt;/p&gt;
&lt;pre id=&quot;code_1744105266497&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int main(void){
    arr[7][7] = 1;
    int num = -1;
    while (num != 0){
        scanf(&quot;%d&quot;, &amp;amp;num);
        switch (num) {
            case 0:
                return 0;
            case 1:
                right();
                break;
            case 2:
                down();
                break;
            case 3:
                left();
                break;
            case 4:
                up();
        }
        print_arr();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종 코드&lt;/p&gt;
&lt;pre id=&quot;code_1744105281265&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
int arr[15][15] = {{0,}, {0,}, {0,}, {0,}, {0,},
    {0,}, {0,}, {0,}, {0,}, {0,},
    {0,}, {0,}, {0,}, {0,}, {0,}};

int* find(void){
    static int pos[2];
    for (int x = 0; x &amp;lt; 15; x++){
        for (int y = 0; y &amp;lt; 15; y++){
            if (arr[y][x] == 1){
                pos[0] = x;
                pos[1] = y;
                return pos;
            }
        }
    }
    return pos;
}
void left(void){
    int x = find()[0], y = find()[1];
    arr[y][x] = 0;
    arr[y][x-1] = 1;
}
void right(void){
    int x = find()[0], y = find()[1];
    arr[y][x] = 0;
    arr[y][x+1] = 1;
}
void up(void){
    int x = find()[0], y = find()[1];
    arr[y][x] = 0;
    arr[y-1][x] = 1;
}
void down(void){
    int x = find()[0], y = find()[1];
    arr[y][x] = 0;
    arr[y+1][x] = 1;
}
void print_arr(void){
    for (int x = 0; x &amp;lt; 15; x++){
        for (int y = 0; y &amp;lt; 15; y++){
            printf(&quot;%d &quot;, arr[x][y]);
        }
        printf(&quot;\n&quot;);
    }
}
int main(void){
    arr[7][7] = 1;
    int num = -1;
    while (num != 0){
        print_arr();
        scanf(&quot;%d&quot;, &amp;amp;num);
        switch (num) {
            case 0:
                return 0;
            case 1:
                right();
                break;
            case 2:
                down();
                break;
            case 3:
                left();
                break;
            case 4:
                up();
        }
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>기타</category>
      <category>c</category>
      <category>C++</category>
      <category>기타 문제</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/35</guid>
      <comments>https://swchung09.tistory.com/35#entry35comment</comments>
      <pubDate>Tue, 8 Apr 2025 18:34:15 +0900</pubDate>
    </item>
    <item>
      <title>10871번, X보다 작은 수</title>
      <link>https://swchung09.tistory.com/34</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;10871번&quot; href=&quot;https://www.acmicpc.net/problem/10871&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/10871&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 n개로 이루어진 수열 a와 정수 x를 주고, a에서 x보다 작은 수를 전부 출력하는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 입출력 라이브러리인 stdio.h를 불러온다.&lt;/p&gt;
&lt;pre id=&quot;code_1744086265884&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열과, n, x를 생성하고&lt;/p&gt;
&lt;pre id=&quot;code_1744086333183&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int arr[10000];
int n, x;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scanf로 n과 x를 입력받는다.&lt;/p&gt;
&lt;pre id=&quot;code_1744086366540&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;scanf(&quot;%d %d&quot;, &amp;amp;n, &amp;amp;x);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for 문으로 배열을 입력받는다.&lt;/p&gt;
&lt;pre id=&quot;code_1744086586688&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (int i = 0; i &amp;lt; n; i++){
	scanf(&quot;%d&quot;, &amp;amp;arr[i]);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후, x보다 작은 것들을 for 문으로 출력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744086653122&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (int i = 0; i &amp;lt; n; i++){
	if (arr[i] &amp;lt; x) printf(&quot;%d &quot;, arr[i]);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 코드&lt;/p&gt;
&lt;pre id=&quot;code_1744086668507&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
int main(){
    int arr[10000];
    int n, x;
    scanf(&quot;%d %d&quot;, &amp;amp;n, &amp;amp;x);
    for (int i = 0; i &amp;lt; n; i++){
        scanf(&quot;%d&quot;, &amp;amp;arr[i]);
    }
    for (int i = 0; i &amp;lt; n; i++){
        if (arr[i] &amp;lt; x) printf(&quot;%d &quot;, arr[i]);
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>백준 C, C++ 문제</category>
      <category>c</category>
      <category>C++</category>
      <category>X보다 작은 수</category>
      <category>백준 10871번</category>
      <author>swchung09</author>
      <guid isPermaLink="true">https://swchung09.tistory.com/34</guid>
      <comments>https://swchung09.tistory.com/34#entry34comment</comments>
      <pubDate>Tue, 8 Apr 2025 13:31:12 +0900</pubDate>
    </item>
  </channel>
</rss>