<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>su-tudy 님의 블로그</title>
    <link>https://su-tudy.tistory.com/</link>
    <description>su-tudy 님의 공부 기록- 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Fri, 17 Jul 2026 11:24:38 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>su-tudy</managingEditor>
    <image>
      <title>su-tudy 님의 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/7137300/attach/f8f580580f824bb680bae34d18530cd6</url>
      <link>https://su-tudy.tistory.com</link>
    </image>
    <item>
      <title>#9 실전 배포 &amp;mdash; 클라우드 서버 &amp;amp; Docker &amp;amp; Django</title>
      <link>https://su-tudy.tistory.com/179</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  실전 서버 배포 흐름 맛보기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1-8편까지는 내 PC 위에 VirtualBox로 만든 가상환경에서 실습했다. 외부에서 접속할 수 없는 &lt;b&gt;완전한 로컬 환경&lt;/b&gt;이었다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이번 편은 그다음 단계로, &lt;b&gt;실제 인터넷에서 접속 가능한 서버에 서비스를 올리는 흐름&lt;/b&gt;을 맛보기로 살펴보는 내용이다. &lt;b&gt;클라우드 서버를 빌려 공인 IP&lt;/b&gt;를 얻고, &lt;b&gt;Docker로 서비스를 실행&lt;/b&gt;하고, &lt;b&gt;도메인을 연결&lt;/b&gt;해 서비스가 외부에서 접속되기까지의 전체 과정을 가볍게 알아본다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #666666; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;※ 이 편은 직접 실습한 내용이 아니며, 수업 내용을 바탕으로 실제 서버 배포의 흐름과 개념을 중심으로 정리했다.&lt;/span&gt;&lt;/blockquote&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  미리 알아두면 좋은 개념&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 로컬 환경 VS 클라우드 환경&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h4&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: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #f89009; color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;1-8편 (로컬)&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #409d00; color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;9편 (클라우드)&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;VirtualBox 가상환경&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;실제 클라우드 서버&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;공인 IP 없고 내 PC만 접속 가능. 포트포워딩으로 내부 통신만 가능&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;공인 IP 보유. 전 세계 어디서나 접속 가능. 도메인 연결 가능&lt;/span&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;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 실전 배포 환경 관련 개념&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;공인 IP&lt;/b&gt; : 인터넷에서 직접 접근 가능한 IP 주소. 클라우스 서버를 생성하면 하나 할당된다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;ACG (방화벽)&lt;/b&gt; : 네이버 클라우드의 방화벽 설정. 허용할 포트를 여기서 열어줘야 외부에서 접근 가능하다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Nginx Proxy Manager&lt;/b&gt; : GUI로 리버스 프록시를 관리하는 Docker 컨테이너. 도메인별로 어떤 서비스로 연결할지 설정한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;리버스 프록시&lt;/b&gt; : 외부 요청을 받아 내부 서비스로 전달하는 중간 서버. 하나의 서버에서 여러 도메인을 처리한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Django&lt;/b&gt; : Python 기반 웹 프레임워크. Docker 컨테이너 안에서 실행한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;172.17.0.1&lt;/b&gt; : Docker 컨테이너에서 호스트 서버에 접근할 때 쓰는 기본 게이트웨이 IP. &lt;code&gt;127.0.0.1&lt;/code&gt;이 아니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  컨테이너 입장에서 &lt;code&gt;127.0.0.1&lt;/code&gt;은 자기 자신을 가리키기 때문에, Docker 컨테이너 안에서 호스트의 MariaDB에 접속하려면 &lt;code&gt;127.0.0.1&lt;/code&gt;이 아니라 &lt;code&gt;172.17.0.1&lt;/code&gt;을 사용해야 한다.&lt;/span&gt;&lt;/div&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  전체 배포 흐름 살펴보기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 전체 흐름&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;div class=&quot;flow&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;클라우드 서버 준비&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Dccker 설치&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;MariaDB 컨테이너&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Nginx Proxy Manager&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Django 앱&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;도메인 연결&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 클라우드 서버 준비&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;네이버 클라우드 플랫폼에서 서버를 생성하면 &lt;b&gt;공인 IP가 할당&lt;/b&gt;된다. &lt;b&gt;ACG(방화벽)에서 아래 포트를 열어줘야 외부 접속이 가능&lt;/b&gt;하다.&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ACG에서 열어야 할 포트&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;80&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;rarr;&amp;nbsp; &amp;nbsp;HTTP (웹 서비스)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;81&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;rarr;&amp;nbsp; &amp;nbsp;Nginx Proxy Manager 관리 페이지&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;443&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;rarr;&amp;nbsp; &amp;nbsp;HTTPS&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2226&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;rarr;&amp;nbsp; &amp;nbsp;SSH (보안을 위해 기본 22번 대신 사용)&lt;/span&gt;&lt;/blockquote&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  기본 22번 포트는 자동화된 해킹 시도(브루트포스)가 끊임없이 들어온다. SSH 포트 번호를 바꾸는 것만으로도 대부분의 자동화 공격을 차단할 수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ Docker + MariaDB 컨테이너&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;8편에서 로컬에 설치했던 것과 동일하게 Docker로 MariaDB를 띄운다. 옵션 하나가 다른데, &lt;code&gt;--restart=always&lt;/code&gt; 대신 &lt;code&gt;--restart unless-stopped&lt;/code&gt;를 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1780730111700&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 날짜 동기화 (Docker 작업 전 필수)
sudo date -s &quot;YYYY-MM-DD HH:MM:SS&quot;

# MariaDB 컨테이너 실행
docker run \
  --name mariadb__1 \
  -d \
  --restart unless-stopped \
  -e MARIADB_ROOT_PASSWORD=korea1231 \
  -e TZ=Asia/Seoul \
  -p 3306:3306 \
  -v /docker_projects/mariadb__1/conf.d:/etc/mysql/conf.d \
  -v /docker_projects/mariadb__1/mysql:/var/lib/mysql \
  mariadb:latest&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  날짜가 맞지 않으면 SSL 인증서, 토큰 인증 등이 실패할 수 있기 때문에 날짜 동기화는 Docker 작업 전 필수이다.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  &lt;code&gt;--restart unless-stopped&lt;/code&gt;는 내가 직접 &lt;code&gt;stop&lt;/code&gt;하지 않는 한 항상 재시작 한다. &lt;code&gt;--restart=always&lt;/code&gt;와 달리 수동으로 멈춘 경우엔 재시작하지 않는다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ Nginx Proxy Manager 설치&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;code&gt;docker-compose&lt;/code&gt;로 Nginx Proxy Manager 컨테이너를 띄운다. 설치 후 &lt;code&gt;공인IP:81로&lt;/code&gt; 접속하면 GUI 관리 화면이 나온다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;code&gt;docker-compose.yml&lt;/code&gt; &lt;b&gt;파일 생성&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;code&gt;docker-compose&lt;/code&gt;로 Nginx Proxy Manager 컨테이너를 띄운 후 DB_MYSQL_HOST를 &lt;code&gt;172.17.0.1&lt;/code&gt;로 지저해 호스트의 MariaDB와 연결한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;관리 페이지 접속&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;설치 후 &lt;code&gt;공인IP:81로&lt;/code&gt; 접속. 초기 계정 : &lt;code&gt;admin@example.com/ changeme&lt;/code&gt; &lt;span style=&quot;background-color: #ffffff; color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 로그인 후 즉시 비밀번호 변경 필수&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #3d3d3a; text-align: start;&quot;&gt;&amp;nbsp;&lt;b&gt;Proxy Host 추가&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #3d3d3a; text-align: start;&quot;&gt;Hosts &lt;span style=&quot;background-color: #ffffff; color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr;&lt;/span&gt; Proxy Hosts &lt;span style=&quot;background-color: #ffffff; color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr;&lt;/span&gt; Add Proxy Host에서 도메인과 내부 서비스 &lt;code&gt;IP:포트&lt;/code&gt;를 연결한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  Nginx Proxy Manager의 핵심은 Prorxy Host 설정이다. 도메인 &amp;rarr; 내부 서비스(&lt;code&gt;IP:포트&lt;/code&gt;)로 연결을 GUI에서 클릭 몇 번으로 설정 할 수 있다. Advanced 탭에서 커스텀 nginx 설정도 직접 입력할 수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ Django 앱 컨테이너 세팅&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Python 컨테이너를 띄우고 내부에서 Django를 설치한 뒤 프로젝트를 생성하는 흐름이다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Python 컨테이너 실행 및 접속&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;code&gt;docker run&lt;/code&gt;으로 Python 컨테이너를 띄우고 &lt;code&gt;docker exec -it python1 bash&lt;/code&gt;로 내부에 접속한다. Ubuntu 기반이라 &lt;code&gt;apt-get install...으로&lt;/code&gt; 패키지를 설치한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Django 및 mysqlclient 설치&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;code&gt;pip install Django mysqlclient&lt;/code&gt;로 Django와 MariaDB 연결 드라이버를 함께 설치한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Django 프로젝트 생성 및 실행&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;code&gt;django-admin startproject base.으로&lt;/code&gt; 프로젝트를 생성하고 &lt;code&gt;settings.py&lt;/code&gt;의 ALLOWED_HOSTS에 IP를 추가한 뒤 &lt;code&gt;python manage.py runserver 0.0.0.0:8000&lt;/code&gt;으로 시작한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;MariaDB 연결 및 마이그레이션&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;code&gt;settings.py&lt;/code&gt; DATABASES 설정에서 HOST를 &lt;code&gt;172.17.0.1&lt;/code&gt;로 지정하고 &lt;code&gt;python manage.py migrate&lt;/code&gt;로 초기 DB 테이블을 생성한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;settings.py DATABASES 핵심 설정&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;'ENGINE': 'django.db.backends.mysql', &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;'HOST': '172.17.0.1',&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# 컨테이너 &amp;rarr; 호스트 MariaDB&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;'PORT': '3306',&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 도메인 연결&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;도메인을 구매(iwantmyname 등)하고 DNS 설정(dnszi 등)에서 공인 IP를 연결하면 도메인으로 서버에 접속할 수 있다. Nginx Proxy Manager에서 해당 도메인을 Proxy Host로 등록하면 도메인 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 내부 서비스 연결이 완성된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;flow&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;도메인 구매&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;DNS에 공인 IP 등록&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Nginx Proxy Manager에 Proxy Host 추가&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;도메인으로 접속 성공&lt;/span&gt;&lt;/div&gt;
&lt;/div&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  핵심 명령어 스케치&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1780731582878&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 날짜 동기화
sudo date -s &quot;YYYY-MM-DD HH:MM:SS&quot;

# 컨테이너 내부 접속
docker exec -it 컨테이너명 bash

# Docker Compose로 컨테이너 일괄 실행
docker-compose up -d

# Django 프로젝트 생성
django-admin startproject base .

# Django 서버 실행 (외부 접속 허용)
python manage.py runserver 0.0.0.0:8000

# Django DB 마이그레이션
python manage.py migrate&lt;/code&gt;&lt;/pre&gt;
&lt;/div&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  시리즈 완주 &lt;span style=&quot;color: #141413; text-align: start;&quot;&gt; &lt;/span&gt; &lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;가상환경 구축부터 실전 배포 흐름까지, 리눅스 서버 운영의 전 과정을 정리했다. 로컬 가상환경에서 시작해 리눅스 기초 설정부터 웹 서비스 운영, Docker, 배포 흐름까지 이어지는 과정이다.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div class=&quot;flow&quot;&gt;&lt;a style=&quot;text-decoration: none;&quot; title=&quot;#0 리눅스 기초 &amp;mdash; 기본 개념 &amp;amp; 명령어&quot; href=&quot;https://su-tudy.tistory.com/136&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #ee2323;&quot;&gt;기초 &amp;amp; 명령어&lt;/span&gt;&lt;/div&gt;
&lt;/a&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;a style=&quot;text-decoration: none;&quot; title=&quot;#1 가상환경 구축 &amp;mdash; VirtualBox + CentOS + PuTTY&quot; href=&quot;https://su-tudy.tistory.com/142&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #f89009;&quot;&gt;가상환경 구축&lt;/span&gt;&lt;/div&gt;
&lt;/a&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;a style=&quot;text-decoration: none;&quot; title=&quot;#2 네트워크 설정 &amp;mdash; 랜카드 자동 활성화 &amp;amp; 고정 IP 변경&quot; href=&quot;https://su-tudy.tistory.com/143&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #f3c000;&quot;&gt;네트워크 설정&lt;/span&gt;&lt;/div&gt;
&lt;/a&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;a style=&quot;text-decoration: none;&quot; title=&quot;#3 사용자 및 권한 관리 &amp;mdash; sudo, chmod, chown&quot; href=&quot;https://su-tudy.tistory.com/148&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #009a87;&quot;&gt;권한 관리&lt;/span&gt;&lt;/div&gt;
&lt;/a&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;a style=&quot;text-decoration: none;&quot; title=&quot;#4 보안 설정 &amp;mdash; 방화벽(firewalld) &amp;amp; SELinux 비활성화&quot; href=&quot;https://su-tudy.tistory.com/151&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #006dd7;&quot;&gt;보안 설정&lt;/span&gt;&lt;/div&gt;
&lt;/a&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;a style=&quot;text-decoration: none;&quot; title=&quot;#5 웹 서버 구축 &amp;mdash; Nginx 설치 &amp;amp; Virtual Hosting&quot; href=&quot;https://su-tudy.tistory.com/154&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #1a5490;&quot;&gt;웹 서버&lt;/span&gt;&lt;/div&gt;
&lt;/a&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;a style=&quot;text-decoration: none;&quot; title=&quot;#6 데이터베이스 구축 &amp;mdash; MariaDB &amp;amp; SQLyog&quot; href=&quot;https://su-tudy.tistory.com/161&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #8a3db6;&quot;&gt;데이터베이스&lt;/span&gt;&lt;/div&gt;
&lt;/a&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;a style=&quot;text-decoration: none;&quot; title=&quot;#7 FTP 서버 구축 &amp;mdash; Pure-FTPd &amp;amp; FileZilla &amp;amp; 호스트 전용 어댑터&quot; href=&quot;https://su-tudy.tistory.com/162&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #ef5369;&quot;&gt;FTP 서버&lt;/span&gt;&lt;/div&gt;
&lt;/a&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;a style=&quot;text-decoration: none;&quot; title=&quot;#8 개발 환경 구축 &amp;mdash; PHP &amp;amp; EditPlus &amp;amp; Docker&quot; href=&quot;https://su-tudy.tistory.com/176&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #953b34;&quot;&gt;개발 환경&lt;/span&gt;&lt;/div&gt;
&lt;/a&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;a style=&quot;text-decoration: none;&quot; title=&quot;#9 실전 배포 &amp;mdash; 클라우드 서버 &amp;amp; Docker &amp;amp; Django&quot; href=&quot;https://su-tudy.tistory.com/179&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #456771;&quot;&gt;실전 배포&lt;/span&gt;&lt;/div&gt;
&lt;/a&gt;&lt;/div&gt;
&lt;/blockquote&gt;</description>
      <category>리눅스/Linux 실습</category>
      <author>su-tudy</author>
      <guid isPermaLink="true">https://su-tudy.tistory.com/179</guid>
      <comments>https://su-tudy.tistory.com/179#entry179comment</comments>
      <pubDate>Thu, 23 Apr 2026 18:13:58 +0900</pubDate>
    </item>
    <item>
      <title>고급 SQL과 설계</title>
      <link>https://su-tudy.tistory.com/177</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;toc-9&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  SQL 심화 개념 맛보기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div data-turn-start-message=&quot;true&quot; data-message-model-slug=&quot;gpt-5-5&quot; data-message-id=&quot;9850d69f-4d56-47f6-b37c-59de76299471&quot; data-message-author-role=&quot;assistant&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-is-only-node=&quot;&quot; data-is-last-node=&quot;&quot; data-end=&quot;115&quot; data-start=&quot;0&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;마지막 편에서는 서브쿼리, 집합 연산자, 인덱스, 정규화, ERD처럼 한 단계 더 나아간 개념들을 정리한다. 이번 편에서는 각 개념의 핵심과 사용 목적 위주로, 전체 흐름을 가볍게 맛보는 느낌으로 살펴본다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-is-only-node=&quot;&quot; data-is-last-node=&quot;&quot; data-end=&quot;115&quot; data-start=&quot;0&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&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;h2 id=&quot;toc-9&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  정리 노트&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;✧ &lt;span style=&quot;font-size: 1.12em; letter-spacing: 0px;&quot;&gt;서브쿼리 (Subquery)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;쿼리 안에 또 다른 쿼리를 넣는 것이다. 괄호 안의 쿼리가 먼저 실행되고 그 결과를 바깥 쿼리에서 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;sql&quot; style=&quot;color: #14181f;&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 평균 급여보다 높은 직원 조회
SELECT name, salary
FROM employees
WHERE salary &amp;gt; (SELECT AVG(salary) FROM employees);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-3&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;▸ EXISTS&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서브쿼리의 결과가 한 건이라도 존재하면 TRUE를 반환한다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;sql&quot; style=&quot;color: #14181f;&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 주문이 한 건이라도 있는 유저만 조회
SELECT name
FROM users u
WHERE EXISTS (
    SELECT 1
    FROM orders o
    WHERE o.user_id = u.id
);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 id=&quot;toc-3&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;▸ ANY&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서브쿼리 결과 중 하나라도 조건을 만족하면 TRUE다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;sql&quot; style=&quot;color: #14181f;&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 어느 부서든 최소 급여보다 높은 직원 조회
SELECT name, salary
FROM employees
WHERE salary &amp;gt; ANY (
    SELECT MIN(salary)
    FROM employees
    GROUP BY dept
);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-3&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;▸ ALL&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서브쿼리 결과 모두 조건을 만족해야 TRUE다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;sql&quot; style=&quot;color: #14181f;&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 모든 부서의 최대 급여보다 높은 직원 조회
SELECT name, salary
FROM employees
WHERE salary &amp;gt; ALL (
    SELECT MAX(salary)
    FROM employees
    GROUP BY dept
);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  &lt;code&gt;&amp;gt; ANY&lt;/code&gt; = 최솟값보다 크면 됨 / &lt;code&gt;&amp;gt; ALL&lt;/code&gt; = 최댓값보다도 커야 한다&lt;/span&gt;&lt;/div&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;h3 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;✧ &lt;span style=&quot;font-size: 1.12em; letter-spacing: 0px;&quot;&gt;집합 연산자&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;두 SELECT 결과를 합치거나 비교할 때 사용한다. 두 쿼리의 컬럼 수와 데이터 타입이 일치해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 105px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;연산자&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;code&gt;UNION&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;두 결과 합치기 (중복 제거)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;code&gt;UNION ALL&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;두 결과 합치기 (중복 포함)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;code&gt;INTERSECT&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;두 결과의 교집합&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;code&gt;EXCEPT&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;첫 번째 결과에서 두 번째 결과 빼기&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;sql&quot; style=&quot;color: #14181f;&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 서울 고객 + 부산 고객 합치기 (중복 제거)
SELECT name FROM users WHERE city = '서울'
UNION
SELECT name FROM users WHERE city = '부산';&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  MySQL은 INTERSECT, EXCEPT를 지원하지 않아서 JOIN이나 서브쿼리로 대체해야 한다.&lt;/span&gt;&lt;/div&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;✧ 인덱스 (Index)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;테이블에서 데이터를 빠르게 찾기 위한 색인이다. 책의 목차처럼 원하는 데이터의 위치를 미리 정리해 둔 것이라고 보면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;인덱스를 걸면&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;조회 속도는 빨라지지만&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;, 데이터를 추가/수정/삭제할 때마다 인덱스도 같이 업데이트해야 해서&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;쓰기 성능은 느려진다.&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;자주 조회하는 컬럼, WHERE나 JOIN에 자주 쓰이는 컬럼에 거는 게 일반적이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;sql&quot; style=&quot;color: #14181f;&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 인덱스 생성 (중복 허용)
CREATE INDEX idx_name ON users (name);

-- 인덱스 생성 (중복 불허)
CREATE UNIQUE INDEX idx_email ON users (email);

-- 인덱스 삭제
ALTER TABLE users DROP INDEX idx_name;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;✧ 정규화 (Normalization)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터 중복을 줄이고 이상 현상을 방지하기 위해 테이블을 올바르게 분리하는 과정이다. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;주요 정규화 단계는 1NF &amp;rarr; 2NF &amp;rarr; 3NF로 올라갈수록 중복이 줄어든다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;sql&quot; style=&quot;color: #14181f;&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;[정규화 전 - 하나의 테이블에 다 때려넣은 상태]
order_id  customer_name  customer_phone  product  price
1         김철수          010-1111-2222   노트북    1200000
2         김철수          010-1111-2222   마우스    30000
3         이영희          010-3333-4444   키보드    80000

문제: 김철수 전화번호가 바뀌면 여러 행을 다 수정해야 함

[정규화 후 - 테이블 분리]
customers: id, name, phone
orders: order_id, customer_id, product, price&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;✧ ERD (Entity Relationship Diagram)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;테이블 간의 관계를 시각적으로 표현한 설계도다. DB를 만들기 전에 구조를 미리 그려보는 용도로 쓴다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;sql&quot; style=&quot;color: #14181f;&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;[users] ─────────&amp;lt; [orders] &amp;gt;────────── [products]
  id (PK)            order_id (PK)         id (PK)
  name               user_id (FK)          name
  email              product_id (FK)       price
                     quantity&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;/span&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&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;표기&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;의미&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1 : 1&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하나에 하나 대응&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1 : N&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하나에 여러 개 대응 (가장 흔함)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;N : M&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여러 개에 여러 개 대응 (중간 테이블 필요)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;users와 orders는 1:N 관계다. 한 유저가 여러 주문을 할 수 있지만, 하나의 주문은 한 유저에게만 속한다.&lt;/span&gt;&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;h2 id=&quot;toc-9&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt; &amp;nbsp;체크포인트&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;warn-box&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;b&gt;  서브쿼리 vs JOIN 성능&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 서브쿼리로 짠 것과 JOIN으로 짠 것이 같은 결과를 낼 수 있는데, 일반적으로 JOIN이 더 빠른 경우가 많다. 서브쿼리는 매 행마다 반복 실행될 수 있기 때문이다. &lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;warn-box&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;b&gt;  주의 &amp;mdash; 인덱스는 만능이 아니다&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 인덱스를 무조건 많이 걸면 쓰기 성능이 떨어진다. 꼭 필요한 컬럼에만 선택적으로 걸어야 한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;h2 id=&quot;toc-10&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt; &lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;오늘의 한 줄 요약&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333; text-align: start;&quot;&gt; 서브쿼리로 쿼리 안에 쿼리를 넣고, 집합 연산자로 결과를 합치고, 인덱스로 조회를 빠르게 한다. 정규화로 테이블 구조를 잘 설계하고, ERD로 관계를 시각화한다.&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>DBMS/Part 4. 데이터베이스 고급</category>
      <author>su-tudy</author>
      <guid isPermaLink="true">https://su-tudy.tistory.com/177</guid>
      <comments>https://su-tudy.tistory.com/177#entry177comment</comments>
      <pubDate>Wed, 22 Apr 2026 19:23:02 +0900</pubDate>
    </item>
    <item>
      <title>#8 개발 환경 구축 &amp;mdash; PHP &amp;amp; EditPlus &amp;amp; Docker</title>
      <link>https://su-tudy.tistory.com/176</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  서버를 개발 환경으로 확장하기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;지금까지 Nginx 웹 서버를 구축하고 MariaDB를 설치했다. 그런데 HTML 파일만으로는 DB에서 데이터를 꺼내오거나 동적인 페이지를 만들 수 없다. &lt;b&gt;PHP를 Nginx와 연동&lt;/b&gt;하면 &lt;b&gt;서버에서 코드를 실행해 동적인 웹 페이지를 제공&lt;/b&gt;할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;EditPlus&lt;/b&gt;는 &lt;b&gt;FTP로 서버에 직접 연결해 파일을 편집하는 툴&lt;/b&gt;이다. PuTTY에서 vim을 쓰는 대신 로컬 편집기에서 코드를 작성하고 저장하면 서버에 바로 반영된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;마지막으로 &lt;b&gt;Docker&lt;/b&gt;는 &lt;b&gt;애플리케이션을 컨테이너 단위로 격리해 실행하는 기술&lt;/b&gt;이다. 6편에서 직접 설치했던 MariaDB를 Docker 컨테이너로 바꿔 실행해 보는 것으로 이 시리즈를 마무리한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;flow&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;PHP 설치&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Nginx 연동&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;EditPlus 연결&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;PHP 페이지 테스트&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Docker 입문&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;MariaDB 컨테이너화&lt;/span&gt;&lt;/div&gt;
&lt;/div&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  미리 알아두면 좋은 개념&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑&amp;nbsp; PHP와 PHP-FPM&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;PHP&lt;/b&gt; : 서버에서 실행되는 스크립트 언어. HTML 안에 PHP 코드를 섞어 동적 웹 페이지를 만들 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;PHP-FPM&lt;/b&gt; : FastCGI Process Manager. Nginx는 PHP를 직접 실행할 수 없기 때문에 PHP-FPM이 중간에서 PHP 요청을 처리한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;FastCGI&lt;/b&gt; : 웹 서버와 외부 프로그램(PHP 등) 사이의 인터페이스. Nginx가 9000번 포트로 PHP-FPM에 요청을 전달한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;REMI 저장소&lt;/b&gt; : PHP 최신 버전을 제공하는 서드파티 repo. 기본 yum 저장소의 PHP는 구버전이라 REMI를 별도로 추가해야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 가상머신 vs Docker&lt;/b&gt;&lt;/span&gt;&lt;/h4&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;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #f89009; color: #ffffff;&quot;&gt;&amp;nbsp; 가상머신&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #409d00; color: #ffffff;&quot;&gt;&amp;nbsp; Docker&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #409d00; color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;&amp;rarr; 이번 실습&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;OS 전체를 가상화&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프로세스 단위 격리&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;커널&lt;span style=&quot;background-color: #ffffff; color: #3d3d3a; text-align: start;&quot;&gt;&amp;middot;라이브러리를 모두 포함해 배포. 용량이 크고 성능 손실이 있다.&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;리눅스 커널을 공유해 VM보다 훨씬 가볍다. 성능 손실이 없고 환경을 그대로 재현할 수 있다.&lt;/span&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;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ Docker 구성 요소&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;요청 흐름&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;flow&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #f89009;&quot;&gt;Docker Client&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;명령 전달&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #8a3db6;&quot;&gt;Docker Host (Daemon)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #0593d3;&quot;&gt;Registry (이미지 저장소)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Docker Client &amp;mdash; &lt;code&gt;build&lt;/code&gt;, &lt;code&gt;pull&lt;/code&gt;, &lt;code&gt;run&lt;/code&gt; 같은 명령을 수행하는 인터페이스&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Docker Daemon &amp;mdash; 컨테이너와 이미지를 생성&amp;middot;관리하는 Docker 엔진&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Registry &amp;mdash; Docker Hub 같은 외부 이미지 저장소. &lt;code&gt;pull&lt;/code&gt;로 이미지를 받아온다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 이미지와 컨테이너&lt;/b&gt;&lt;/span&gt;&lt;/h4&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: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;이미지 (image)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;컨테이너 (Container)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;컨테이너를 만들기 위한 읽기 전용 템플릿.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이름 구조 : &lt;code&gt;[저장소]/[이름]: [태그]&lt;/code&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;예 : &lt;code&gt;mariadb:latest&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이미지로 만든 실행 단위. 이미지는 변경되지 않고, 변경사항은 컨테이너 계층에만 저장된다. 호스트와 완전히 격리된다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;
&lt;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  진행한 실습 과정 정리&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑&amp;nbsp; PHP 8 설치&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기본 저장소에는 PHP 최신 버전이 없다. &lt;b&gt;EPEL과 REMI 저장소를 추가&lt;/b&gt;한 후 PHP 8을 설치한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1780469649690&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 기존 PHP 완전 제거
sudo yum remove php* -y

# EPEL 저장소 설치
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y

# REMI 저장소 설치
sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm -y

# yum-utils 설치 (yum-config-manager 명령어 사용을 위해)
sudo yum install yum-utils -y

# 기존 remi-php 비활성화 후 PHP 8.0 활성화
sudo yum-config-manager --disable 'remi-php*'
sudo yum-config-manager --enable remi-php80

# PHP 8.0 및 필요한 확장 모듈 설치
sudo yum install php php-{common,cli,fpm,mysqlnd,zip,devel,gd,mbstring,curl,xml,pear,bcmath,json,opcache} -y

# 설치 확인
php -v

# PHP-FPM 시작 및 자동 활성화
sudo systemctl start php-fpm
sudo systemctl enable php-fpm&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  php-mysqld는 PHP에서 MariaDB/MySQL에 접속하기 위한 드라이버다. DB 연동이 필요하다면 반드시 포함해야 한다.&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-03 155550.png&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;111&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NzZO6/dJMcada6br0/IiVgP9o1Dru9KI64t4ufw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NzZO6/dJMcada6br0/IiVgP9o1Dru9KI64t4ufw1/img.png&quot; data-alt=&quot;PHP 설치 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NzZO6/dJMcada6br0/IiVgP9o1Dru9KI64t4ufw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNzZO6%2FdJMcada6br0%2FIiVgP9o1Dru9KI64t4ufw1%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;761&quot; height=&quot;111&quot; data-filename=&quot;스크린샷 2026-06-03 155550.png&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;111&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PHP 설치 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ Nginx와 PHP-FPM 연동 설정&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Nginx는 PHP 파일 요청을 직접 처리하지 못한다. PHP-FPM이 9000번 포트로 요청을 받아 처리하도록 설정 파일을 만든다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1780469902755&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# PHP 연동용 공통 include 파일 생성 
sudo vim /etc/nginx/conf.d/php_vhost.conf.include

# 아래 내용 추가
index index.php index.html index.htm;
root $documentRoot;

location ~ \.php$ {
    root              $documentRoot;
    fastcgi_pass      127.0.0.1:9000;   # PHP-FPM 포트
    fastcgi_index     index.php;
    fastcgi_param     SCRIPT_FILENAME $documentRoot/$fastcgi_script_name;
    include           /etc/nginx/fastcgi_params;
    fastcgi_read_timeout 600;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1780470157059&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# vhost.conf에 PHP 연동 내용 추가
sudo vim /etc/nginx/conf.d/vhost.conf

# 아래 내용 추가
server {
    listen 8011;
    server_name _;

    set $documentRoot /web/site1/public;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    include /etc/nginx/conf.d/php_vhost.conf.include;
}

server {
    listen 8012;
    server_name _;

    set $documentRoot /web/site2/public;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    include /etc/nginx/conf.d/php_vhost.conf.include;
}&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  &lt;code&gt;try_files $uri $uri/ /index.php?$args;&lt;/code&gt;는 요청한 파일이 없을 때 &lt;code&gt;index.php&lt;/code&gt;로 넘기는 설정이다. 워드프레스 같은 CMS에서 URL 라우팅이 작동하도록 하는 필수 설정이다.&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1780470224842&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 설정 문법 확인 후 nginx 재시작
sudo nginx -t
sudo systemctl restart nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ &lt;/b&gt;&lt;b&gt;EditPlus로 PHP 파일 작성 및 업로드 테스트&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;EditPlus를 FTP로 서버에 연결하면 로컬 편집기에서 저장하는 순간 서버에 바로 반영된다. PuTTY에서 vim을 쓰는 것보다 훨씬 편하게 코드를 작성할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;EditPlus 설치 후 실행 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 파일 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; FTP &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; FTP 설정 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 추가 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 아래 정보 입력&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;연결 후 public 폴더로 이동 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; &lt;code&gt;gugudan.php&lt;/code&gt; 파일 생성&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;브라우저에서 확인 : &lt;code&gt;192.168.56.x:8011/gugudan.php?dan=임의숫자&amp;amp;limit=임의숫자&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;EditPlus FTP서버 연결 정보&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서버&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp; &amp;nbsp;192.168.56.x&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;포트&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp; &amp;nbsp;21&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;유저명&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp; &amp;nbsp;FTP 계정 입력 (site1)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;비밀번호&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp; &amp;nbsp;설정한 비밀번호 입력&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1780471231307&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// gugudan.php에 아래 내용 추가
&amp;lt;?php
$dan   = intval($_GET['dan']);
$limit = intval($_GET['limit']);
?&amp;gt;
&amp;lt;h1&amp;gt;== &amp;lt;?=$dan?&amp;gt;단 ==&amp;lt;/h1&amp;gt;
&amp;lt;?php for ($i = 1; $i &amp;lt;= $limit; $i++) { ?&amp;gt;
&amp;lt;div&amp;gt;&amp;lt;?=$dan?&amp;gt; * &amp;lt;?=$i?&amp;gt; = &amp;lt;?=$dan * $i?&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;?php } ?&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;351&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ze3WL/dJMcaicwXsT/lZecr1MyMnHXXOMQBU98A0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ze3WL/dJMcaicwXsT/lZecr1MyMnHXXOMQBU98A0/img.png&quot; data-alt=&quot;브라우저에서 gugudan.php 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ze3WL/dJMcaicwXsT/lZecr1MyMnHXXOMQBU98A0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fze3WL%2FdJMcaicwXsT%2FlZecr1MyMnHXXOMQBU98A0%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;763&quot; height=&quot;351&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;351&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;브라우저에서 gugudan.php 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  &lt;code&gt;intval()&lt;/code&gt;로 입력값을 정수로 강제 변환하는 것은 보안상 중요하다. 사용자 입력을 그대로 사용하면 SQL 인젝션 같은 공격에 취약해 질 수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ Docker 설치&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1780471925419&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Docker 설치에 필요한 패키지 먼저 설치
sudo yum install yum-utils device-mapper-persistent-data lvm2 -y

# Docker 공식 저장소 추가
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# Docker CE 설치
sudo yum install docker-ce -y

# 버전 확인
docker -v

# Docker 시작 및 자동 활성화
sudo systemctl start docker
sudo systemctl enable docker&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1780472015402&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Docker Compose 설치
sudo curl -L &quot;https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)&quot; -o /usr/local/bin/docker-compose

# 실행 권한 부여
sudo chmod +x /usr/local/bin/docker-compose

# 버전 확인
docker-compose -version

# sudo 없이 docker 명령 실행 (현재 계정을 docker 그룹에 추가)
sudo usermod -aG docker ${USER}

# 반드시 PuTTY 재접속 후 적용 확인
docker ps&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  &lt;code&gt;usermod -aG docker ${USER}&lt;/code&gt;는 현재 세션에 바로 적용되지 않는다. PuTTY를 완전히 종료하고 재접속해야 &lt;code&gt;sudo&lt;/code&gt; 없이 docker 명령을 쓸 수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ Docker로 MariaDB 컨테이너 실행&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;기존에 직접 설치했던 MariaDB를 끄고, &lt;b&gt;Docker 컨테이너로 MariaDB를 띄운다&lt;/b&gt;. 데이터 파일은 호스트 경로에 마운트에 컨테이너를 삭제해도 데이터가 보존되도록 설정한다. &lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1780472179999&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 기존 MariaDB 서비스 중지 (포트 충돌 방지)
sudo systemctl stop mariadb
sudo systemctl disable mariadb

# MariaDB 컨테이너 실행
docker run --name mariadb1 \
  -d \
  --restart=always \
  -e MARIADB_ROOT_PASSWORD=korea1231 \
  -p 3306:3306 \
  -v /docker/projects/mariadb1/conf.d:/etc/mysql/conf.d \
  -v /docker/projects/mariadb1/mysql:/var/lib/mysql \
  -v /docker/projects/mariadb1/run/mysqld:/run/mysqld/ \
  mariadb:latest&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;code&gt;--name mariadb1&lt;/code&gt; : &lt;b&gt;컨테이너 이름 지정&lt;/b&gt;. 이후 명령어에서 이름으로 컨테이너를 참조한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;code&gt;-d&lt;/code&gt; : &lt;b&gt;백그라운드(detached) 실행&lt;/b&gt;. 터미널을 점유하지 않고 데몬처럼 실행된다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;code&gt;--restart=always&lt;/code&gt; : &lt;b&gt;서버 재부팅 시 자동&lt;/b&gt;으로 컨테이너가&lt;b&gt; 다시 시작&lt;/b&gt;된다. systemctl enable과 같은 효과&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;code&gt;-v&lt;/code&gt; (볼륨 마운트) : &lt;b&gt;호스트 경로와 컨테이너 경로를 연결&lt;/b&gt;. 컨테이너가 삭제되어도 데이터가 호스트에 남는다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1780472436795&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 컨테이너 실행 상태 확인
docker ps

# Docker 컨테이너 안의 MariaDB에 접속
docker exec -it mariadb1 mariadb -u root -p&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑&amp;nbsp; 자주 쓰는 Docker 명령어&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1780472491977&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 자주 쓰는 Docker 명령어
docker ps			# 실행 중인 컨테이너 목록
docker ps -a			# 전체 컨테이너 목록 (중지된 것 포함)
docker stop mariadb1		# 컨테이너 중지
docker start mariadb1		# 컨테이너 시작
docker rm mariadb1		# 컨테이너 삭제
docker images			# 로컬 이미지 목록
docker logs mariadb1		# 컨테이너 로그 확인&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;⚠️&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;오류 / 주의&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;warn-box&quot; data-ke-size=&quot;size16&quot;&gt;
    &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;
        &lt;b&gt;  요류 — PHP 파일이 다운로드되거나 소스코드가 그대로 보일 때&lt;/b&gt;
    &lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;
        PHP-FPM이 실행 중이지 않거나, &lt;code&gt;vhost.conf&lt;/code&gt;에 include 설정이 누락된 경우다. &lt;code&gt;sudo systemctl status php-fpm&lt;/code&gt;으로 상태를 확인하고, nginx 설정 파일에 &lt;code&gt;include /etc/nginx/conf.d/php_vhost.conf.include;&lt;/code&gt;가 들어있는지 확인한다.
    &lt;/span&gt;
&lt;/p&gt;
&lt;p class=&quot;warn-box&quot; data-ke-size=&quot;size16&quot;&gt;
    &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;
        &lt;b&gt;  오류 — docker run 후 컨테이너가 바로 종료될 때&lt;/b&gt;
    &lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;
        볼륨 마운트 경로가 없으면 컨테이너가 즉시 종료된다. &lt;code&gt;docker logs mariadb1&lt;/code&gt;로 오류 메세지를 확인하고, 마운트 경로 디렉토리를 미리 생성(&lt;code&gt;sudo mkdir -p /docker/projects/mariadb1/...&lt;/code&gt;)한 후 다시 실행한다.
    &lt;/span&gt;
&lt;/p&gt;
&lt;p class=&quot;warn-box&quot; data-ke-size=&quot;size16&quot;&gt;
    &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;
        &lt;b&gt;  오류 — 기존 MariaDB와 Docker MariaDB가 포트 충돌할 때&lt;/b&gt;
    &lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;
        둘다 3306 포트를 사용하려 해서 충돌이 생긴다. Docker 컨테이너를 실행하기 전에 반드시 &lt;code&gt;sudo systemctl stop mariadb&lt;/code&gt;로 기존 서비스를 먼저 중지해야 한다.
    &lt;/span&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; 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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  요약&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; ✔️ &lt;b&gt;REMI 저장소를 추가&lt;/b&gt;해 &lt;b&gt;PHP 8을 설치&lt;/b&gt;하고 &lt;b&gt;PHP-FPM으로 Nginx와 연동&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; ✔️ &lt;b&gt;공통 include 파일&lt;/b&gt;로 PHP 설정을 여러 서버 블록에서 재사용할 수 있게 함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; ✔️ &lt;b&gt;EditPlus를 FTP로 서버에 연결&lt;/b&gt;해 PHP 파일을 작성하고 동적 페이지를 테스트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; ✔️ &lt;b&gt;Docker를 설치&lt;/b&gt;하고 &lt;b&gt;MariaDB를 컨테이너로 전환&lt;/b&gt;해 볼륨 마운트로 데이터를 보존&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;다음 편으로 이동&amp;nbsp;  &amp;nbsp; &lt;a title=&quot;#9 실전 배포 &amp;mdash; 클라우드 서버 &amp;amp; Docker &amp;amp; Django&quot; href=&quot;https://su-tudy.tistory.com/179?category=1199903&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;#9 실전 배포 &amp;mdash; 클라우드 서버 &amp;amp; Docker &amp;amp; Django&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>리눅스/Linux 실습</category>
      <author>su-tudy</author>
      <guid isPermaLink="true">https://su-tudy.tistory.com/176</guid>
      <comments>https://su-tudy.tistory.com/176#entry176comment</comments>
      <pubDate>Wed, 15 Apr 2026 15:59:00 +0900</pubDate>
    </item>
    <item>
      <title>#7 FTP 서버 구축 &amp;mdash; Pure-FTPd &amp;amp; FileZilla &amp;amp; 호스트 전용 어댑터</title>
      <link>https://su-tudy.tistory.com/162</link>
      <description>&lt;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;br /&gt;  협업을 위한 파일 업로드 환경 만들기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;웹 서버에 파일을 올리려면 매번 PuTTY 명령어를 써야 한다. 하지만 리눅스를 모르는 협업자가 파일을 업로드해야 하는 상황이라면?&lt;b&gt; FTP 서버를 구축&lt;/b&gt;해 두면 &lt;b&gt;상대방은 FileZilla 만 열어서 드래그&amp;amp;드롭으로 파일을 올릴&lt;/b&gt; 수 있다&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;또한&lt;b&gt; Pure-FTPd와 MariaDB를 연동&lt;/b&gt;하면 &lt;b&gt;사용자마다 접근 가능한 폴더를 다르게 지정&lt;/b&gt;할 수 있다. 예를 들어 site1 담당자는 /web/site1에만, site2 담당자는 /web/site2에만 접근하도록 권한을 분리할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;flow&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;FileZilla STFP 연결&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Pure-FTPd 설치&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;MariaDB 연동&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;FTP 접속 확인&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;호스트 전용 어댑터&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  미리 알아두면 좋은 개념&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 대표적인 원격 프로토콜 3가지&lt;/b&gt;&lt;/span&gt;&lt;/h4&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: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;HTTP&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;SSH / SFTP&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;FTP&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;웹 서비스 제공에 사용되는 프로토콜. 브라우저와 서버가 통신하는 방식.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;리눅스 원격 제어 및 암호화된 파일 전송. PuTTY, FileZilla가 이 방식을 사용.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;원격 파일 전송 전용 프로토콜. Pure-FTPd가 이 방식을 담당.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #9d9d9d; color: #ffffff;&quot;&gt;&amp;nbsp;80 / 443&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #9d9d9d; color: #ffffff;&quot;&gt;&amp;nbsp;22&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #9d9d9d; color: #ffffff;&quot;&gt;&amp;nbsp;21&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  FileZilla로 SSH(SFTP) 방식으로 접속하는 것과 FTP 방식으로 접속하는 것은 다르다. SFTP는 리눅스 계정으로 접속하고, FTP(Pure-FTPd)는 DB에 등록된 별도 계정으로 접속한다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 능동형 vs 수동형 FTP&lt;/b&gt;&lt;/span&gt;&lt;/h4&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: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;능동형 (Active)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;수동형 (Passive)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서버가 클라이언트에게 데이터 연결을 시도한다. 클라이언트 방화벽에 막히는 경우가 많다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;클라이언트가 서버에게 데이터 연결을 시도한다. 방화벽 문제가 적어 일반적으로 권장되며, 호스트 전용 어탭터 환경에서 사용한다.&lt;/span&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;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 호스트 전용 어댑터란?&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기존 NAT 방식은 포트포워딩을 통해 호스트&amp;nbsp;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 가상머신으로 접속했다. &lt;b&gt;호스트 전용 어댑터를 추가&lt;/b&gt;하면 &lt;b&gt;가상머신이 호스트 PC와 직접 통신할 수 있는 전용 네트워크가 생긴다&lt;/b&gt;. 포트포워딩 없이도 &lt;b&gt;IP 주소만으로 바로 접속&lt;/b&gt;할 수 있어 FTP처럼 여러 포트를 쓰는 서비스에 훨씬 편리하다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;네트워크 방식 비교&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;background-color: #6164c6; color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;호스트 PC&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;rarr;&amp;nbsp; &amp;nbsp; 포트포워딩&amp;nbsp; &amp;nbsp; &amp;rarr;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #409d00; color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;가상머신 (NAT)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #666666;&quot;&gt;: 포트별로 일일이 설정 필요&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;background-color: #6164c6; color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;호스트 PC&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;rarr;&amp;nbsp; &amp;nbsp; &amp;nbsp; 직접 통신&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;rarr;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #409d00; color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;가상머신 (호스트 전용)&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp; : IP 주소로 바로 접속 가능&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  진행한 실습 과정 정리&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ FileZilla로 SFTP 연결 (SSH 방식)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;본격적인 FTP 서버 구축 전에, &lt;b&gt;FileZilla를 SSH 방식(SFTP)으로 먼저 연결&lt;/b&gt;해 파일 전송 기능을 확인한다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;FileZilla 설치 후 실행 :&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;nbsp;파일&amp;nbsp;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 사이트 관리자&amp;nbsp;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 새 사이트&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;아래 정보 입력 후 연결&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;FileZilla 사이트 관리자 입력값&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프로토콜&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp; &amp;nbsp;SFTP - SSH File Transfer Protocol&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;호스트&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp; &amp;nbsp;127.0.0.1&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;포트&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp; &amp;nbsp;설정해 두었던 SSH 포트 번호&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;유형&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp; &amp;nbsp;비밀번호 묻기&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사용자&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp; &amp;nbsp;리눅스 계정 이름&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-28 153159.png&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;465&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brV5sv/dJMcageBCeD/YTfgha5KG3Es2K2iA4MKvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brV5sv/dJMcageBCeD/YTfgha5KG3Es2K2iA4MKvK/img.png&quot; data-alt=&quot;FileZilla 사이트 관리자 정보 입력 후 연결&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brV5sv/dJMcageBCeD/YTfgha5KG3Es2K2iA4MKvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrV5sv%2FdJMcageBCeD%2FYTfgha5KG3Es2K2iA4MKvK%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;768&quot; height=&quot;465&quot; data-filename=&quot;스크린샷 2026-05-28 153159.png&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;465&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;FileZilla 사이트 관리자 정보 입력 후 연결&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 이미지 업로드 테스트&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;연결 성공 후 FileZilla에서 파일을 드래그해 서버로 전송하고, 웹 브라우저에서 이미지가 잘 뜨는지 확인한다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;파일질라에 드래그로 사진 전송&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;PuTTY에서 파일 전송 확인&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;파일을 웹서버 경로로 이동&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;HTML 파일 생성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;브라우저에서 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1780381749832&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# PuTTY에서 파일 전송 확인
cd ~
ls

# 파일을 웹서버 경로로 이동
mv 사진파일명 /web/site0/public

# HTML 파일 생성
vim /web/site0/public/파일이름.html

# HTML 파일 내용 추가
&amp;lt;hr /&amp;gt;
&amp;lt;img src=&quot;사진파일명.jpg&quot;&amp;gt;

# 브라우저에서 확인
127.0.0.1:포트번호/파일이름.html&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ Pure-FTPd 설치 및 설정&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1779963951398&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 기존 pure-ftpd 완전 삭제 (깔끔하게 재설치를 위해서)
sudo yum remove pure-ftpd -y
sudo rm -rf /etc/pure-ftpd

# pure-ftpd 설치
sudo yum install pure-ftpd -y

# 설정 파일 열기
sudo vim etc/pure-ftpd/pure-ftpd.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779963951401&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# /my 검색 &amp;rarr; MYSQLConfigFile 줄 주석(#) 제거
/my

# 수정 후 저장
:wp!&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-28 154515.png&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqGPos/dJMcaf7Npo6/54Ns3dlzantBqK2c7L6na0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqGPos/dJMcaf7Npo6/54Ns3dlzantBqK2c7L6na0/img.png&quot; data-alt=&quot;Pure-FTPd 설정 파일 주석 제거 할 부분&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqGPos/dJMcaf7Npo6/54Ns3dlzantBqK2c7L6na0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqGPos%2FdJMcaf7Npo6%2F54Ns3dlzantBqK2c7L6na0%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;711&quot; height=&quot;258&quot; data-filename=&quot;스크린샷 2026-05-28 154515.png&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;258&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Pure-FTPd 설정 파일 주석 제거 할 부분&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1779963951403&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# mysql 소켓 파일 경로 확인
sudo locate mysql | fgrep sock

# pureftpd-mysql 설정 파일 열기
sudo vim /etc/pure-ftpd/pureftpd-mysql.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779963951406&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# /my 검색
/my

# 아래 항목 수정
MYSQLSocket		/var/lib/mysql/mysql.sock
MYSQLUser		pureftpd			# MariaDB 접속 ID
MYSQLPassword		비밀번호			# MariaDB 접속 PW
MYSQLDatabase		pureftpd			# FTP 사용자 정보 DB
MYSQLCrypt		cleartext			# 비밀번호 평문 저장&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-28 154803.png&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;95&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buqYST/dJMcagFIoJl/4fyt3SDZNg6vfF0U92Pk90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buqYST/dJMcagFIoJl/4fyt3SDZNg6vfF0U92Pk90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buqYST/dJMcagFIoJl/4fyt3SDZNg6vfF0U92Pk90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuqYST%2FdJMcagFIoJl%2F4fyt3SDZNg6vfF0U92Pk90%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;712&quot; height=&quot;95&quot; data-filename=&quot;스크린샷 2026-05-28 154803.png&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;95&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;414&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blWh5a/dJMcaftduFa/6N8kEQh7HiObj6YITuGDI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blWh5a/dJMcaftduFa/6N8kEQh7HiObj6YITuGDI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blWh5a/dJMcaftduFa/6N8kEQh7HiObj6YITuGDI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblWh5a%2FdJMcaftduFa%2F6N8kEQh7HiObj6YITuGDI0%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;713&quot; height=&quot;414&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;414&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  실습환경에서는 MYSQLCrypt cleartext(평문)를 사용하지만, &lt;b&gt;운영 환경&lt;/b&gt;에서는 &lt;b&gt;md5 또는 sha1 같은 암호화 방식을 사용&lt;/b&gt;해야 한다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ MariaDB와 Pure-FTPd 연동&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;FTP 사용자 정보를 MariaDB로 관리하면 &lt;b&gt;사용자별 접근 폴더를 DB에서 쉽게 제어&lt;/b&gt;할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1779963951416&quot; class=&quot;sql&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;# MariaDB 접속
mysql -u root -p

# pureftpd 전용 계정 생성 (pureftpd DB만 조작 가능)
GRANT ALL PRIVILEGES ON pureftpd.* TO pureftpd@`localhost` IDENTIFIED BY '비밀번호';&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779963951419&quot; class=&quot;sql&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- pureftpd 전용 DB 생성
DROP DATABASE IF EXISTS pureftpd;
CREATE DATABASE pureftpd;
USE pureftpd;

-- FTP 사용자 정보를 저장할 users 테이블 생성
CREATE TABLE users (
  uidx       int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user`     varchar(100) NOT NULL,
  `password` varchar(100) NOT NULL,
  `gid`      int(10) unsigned NOT NULL,
  `uid`      int(10) unsigned NOT NULL,
  occurDate  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `status`   tinyint(1) unsigned NOT NULL DEFAULT '1',
  ipaccess   varchar(15) NOT NULL,
  comment    varchar(100) NOT NULL,
  ulBandWidth  smallint(5) unsigned NOT NULL,
  dlBandWidth  smallint(5) unsigned NOT NULL,
  quotaSize    smallint(5) unsigned NOT NULL,
  quotaFiles   int(10) unsigned NOT NULL,
  `dir`      varchar(100) NOT NULL,
  PRIMARY KEY (`uidx`)
);

-- FTP 계정 생성 및 접근 폴더 지정
INSERT INTO `users` VALUES
(1,'site1','korea1231',1000,1000,NOW(),1,'*','',0,0,0,0,'/web/site1'),
(2,'site2','korea1231',1000,1000,NOW(),1,'*','',0,0,0,0,'/web/site2'),
(3,'site3','korea1231',1000,1000,NOW(),1,'*','',0,0,0,0,'/web/site3');

-- 등록된 FTP 계정 확인
SELECT * FROM users;&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  위 SQL 문법은 PuTTY에서 MariaDB 콘솔에 접속 후 실행하거나, SQLYog 같은 GUI 프로그램에서 동일하게 실행할 수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  &lt;b&gt;gid&lt;/b&gt;와 &lt;b&gt;uid&lt;/b&gt;는 &lt;b&gt;리눅스 시스템의 계정 번호&lt;/b&gt;다. PuTTY에서 &lt;code&gt;sudo vim /etc/passwd&lt;/code&gt;로 확인할 수 있다. 일반 계정은 보통 1000번부터 시작한다.&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1779963951528&quot; class=&quot;properties&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# pure-ftpd 자동 시작 설정 및 재시작
sudo systemctl enable pure-ftpd
sudo systemctl restart pure-ftpd

# FTP 클라이언트 설치 후 접속 테스트
sudo yum install ftp
ftp 127.0.0.1

# name : DB에 등록한 아이디 (site1, site2 등)
# passwd : DB에 등록한 비밀번호&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ FTP 포트포워딩 및 FileZilla FTP 연결&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;VirtualBox &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 포트포워딩 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 규칙 추가 (호스트 포트: 임의설정 / 게스트 포트 21)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a;&quot;&gt;FileZilla &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 파일 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 사이트 관리자 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 새 사이트&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;FileZilla FTP 접속 정보&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프로토콜&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp; &amp;nbsp;FTP&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;호스트&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp; &amp;nbsp;127.0.0.1&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;포트&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp; &amp;nbsp;포트포워딩에서 설정한 포트&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;유형&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp; &amp;nbsp;비밀번호 묻기&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사용자&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp; &amp;nbsp;DB에 등록한 아이디 (site1, site2 등)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전송 설정&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp; &amp;nbsp;능동형으로 연결&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 호스트 전용 어댑터&lt;span style=&quot;color: #000000;&quot;&gt; 설정&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Passive 포트 대역을 설정하고 &lt;b&gt;호스트 전용 어댑터를 추가&lt;/b&gt;해 포트포워딩 없이 직접 접속할 수 있도록 구성한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1779963951530&quot; class=&quot;properties&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# Passive 포트 범위 설정 (1000개 포트 할당)
sudo vim /etc/pure-ftpd/pure-ftpd.conf

# /passive 검색 &amp;rarr; PassivePortRange 주석 제거
PassivePortRange	49001	50000

# pure-ftpd 재시작
sudo systemctl restart pure-ftpd&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;VirtualBox에서 CentOS 우클릭&amp;nbsp;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 정지&amp;nbsp;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; ACPI 종료&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a;&quot;&gt;설정&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;span style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;네트워크&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a;&quot;&gt;&amp;rarr; 어댑터 2&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a;&quot;&gt;&amp;rarr; 네트워크 어댑터 활성화 체크&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a;&quot;&gt;&amp;rarr; 호스트 전용 어댑터&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; VirtualBox Host-Only Ethernet Adapter 선택&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;VirtualBox 재시작 후 ip addr로 새 랜카드 IP 확인&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;PuTTY에서 새 IP 주소로 재연결&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-02 164042.png&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7SqZI/dJMcacXCChC/N5CVzUxxCGnkQQkWmLlLg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7SqZI/dJMcacXCChC/N5CVzUxxCGnkQQkWmLlLg1/img.png&quot; data-alt=&quot;호스트 전용 어댑터&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7SqZI/dJMcacXCChC/N5CVzUxxCGnkQQkWmLlLg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7SqZI%2FdJMcacXCChC%2FN5CVzUxxCGnkQQkWmLlLg1%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;753&quot; height=&quot;487&quot; data-filename=&quot;스크린샷 2026-06-02 164042.png&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;487&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;호스트 전용 어댑터&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;321&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XyZkV/dJMcafmyc8r/k1LVSoCb5ytcoyX6yYL5BK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XyZkV/dJMcafmyc8r/k1LVSoCb5ytcoyX6yYL5BK/img.png&quot; data-alt=&quot;새 랜카드 IP 주소 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XyZkV/dJMcafmyc8r/k1LVSoCb5ytcoyX6yYL5BK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXyZkV%2FdJMcafmyc8r%2Fk1LVSoCb5ytcoyX6yYL5BK%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;757&quot; height=&quot;321&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;321&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;새 랜카드 IP 주소 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  새로 생긴 랜카드의 IP는 보통 &lt;code&gt;192.168.56.x&lt;/code&gt; 대역이다. &lt;code&gt;ip addr&lt;/code&gt;로 정확한 주소를 확인한 후 사용한다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ FileZilla에서 FTP(Pure-FTPd) 방식으로 최종 &lt;span style=&quot;color: #000000;&quot;&gt;연결&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;FileZilla &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 파일 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 사이트 관리자 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 기존 사이트 모두 삭제 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 새 사이트&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;아래 정보 입력 후 연결&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;호스트 전용 어댑터 기반 FTP 접속 정보&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프로토콜&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp; &amp;nbsp;FTP&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;호스트&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp; &amp;nbsp;192.168.56.x (호스트 전용 어댑터 IP)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;포트&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp; &amp;nbsp;21 (기본값, 비워도 됨)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;유형&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp; &amp;nbsp;비밀번호 묻기&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사용자&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp; &amp;nbsp;DB에 등록한 아이디&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전송 설정&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:&amp;nbsp; &amp;nbsp;수동형(Passive)으로 변경&lt;/span&gt;&lt;/blockquote&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;⚠️&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;오류 / 주의&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;warn-box&quot; data-ke-size=&quot;size16&quot;&gt;
    &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;
        &lt;b&gt;  오류 — FTP 접속은 되는데 파일 목록이 안 보일 때&lt;/b&gt;
    &lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;
        FileZilla 전송 모드가 능동형으로 설정되어 있을 가능성이 높다. 사이트 관리자 전송 설정 탭에서 수동형(Passive)으로 변경하고 재연결한다.
    &lt;/span&gt;
&lt;/p&gt;
&lt;p class=&quot;warn-box&quot; data-ke-size=&quot;size16&quot;&gt;
    &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;
        &lt;b&gt;  오류 — pure-ftpd 재시작이 실패할 때&lt;/b&gt;
    &lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;
        &lt;code&gt;sudo journalctl -u pure-ftpd -n 30&lt;/code&gt;으로 최근 로그를 확인한다. 대부분 설정 파일의 경로 오타이거나 mysql 소켓 파일 경로가 틀린 경우다.
    &lt;/span&gt;
&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  요약&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;✔️ &lt;b&gt;FileZilla를 STFP 방식으로 연결&lt;/b&gt;해 파일 전송 기능 확인&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;✔️ &lt;b&gt;Pure-FTPd를 설치&lt;/b&gt;하고 &lt;b&gt;MariaDB와 연동&lt;/b&gt;해 사용자별 접근 폴더를 DB로 관리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;✔️ &lt;b&gt;Passive 포트 대역을 설정&lt;/b&gt;하고 &lt;b&gt;호스트 전용 어댑터&lt;/b&gt;를 추가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;✔️FileZilla에서&lt;b&gt; 수동형(Passive)&lt;/b&gt; FTP로 사용자별 접속을 확인했다.&lt;/span&gt;&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;style1&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;다음 편으로 이동&amp;nbsp;  &amp;nbsp; &lt;a title=&quot;#8 개발 환경 구축 &amp;mdash; PHP &amp;amp; EditPlus &amp;amp; Docker&quot; href=&quot;https://su-tudy.tistory.com/176?category=1199903&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;#8 개발 환경 구축 &amp;mdash; PHP &amp;amp; EditPlus &amp;amp; Docker&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>리눅스/Linux 실습</category>
      <author>su-tudy</author>
      <guid isPermaLink="true">https://su-tudy.tistory.com/162</guid>
      <comments>https://su-tudy.tistory.com/162#entry162comment</comments>
      <pubDate>Tue, 10 Dec 2024 16:15:31 +0900</pubDate>
    </item>
    <item>
      <title>#6 데이터베이스 구축 &amp;mdash; MariaDB &amp;amp; SQLyog</title>
      <link>https://su-tudy.tistory.com/161</link>
      <description>&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  서비스 운영을 위한 데이터베이스 구축&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;웹 서비스는 대부분 데이터베이스와 함께 동작한다. 회원 정보, 게시글, 상품 목록 등 &lt;b&gt;모든 데이터를 저장하고 꺼내오는 역할&lt;/b&gt;을 &lt;b&gt;DB가 담당&lt;/b&gt;한다. 이번 편에서 MariaDB를 먼저 구축해 두는 이유는 다음 편(FTP 서버 구축)에서 Pure-FTPd가 MariaDB와 연동되기 때문이다. DB가 먼저 세팅되어 있어야 FTP 사용자 정보를 DB로 관리할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;flow&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;MariaDB 설치&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;초기 설정&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;.계정 생성&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;SQLYog 연결&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  미리 알아두면 좋은 개념&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ MariaDB란?&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;MariaDB&lt;/b&gt; : 무료 오픈소스 관계형 DB(RDBMS). MySQL에서 파생되어 거의 동일한 문법을 사용하며, MySQL을 직접 대체할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;RDBMS&lt;/b&gt; : 관계형 데이터베이스 관리 시스템. 데이터를 테이블(행/열) 구조로 저장하고 SQL로 조회&lt;span style=&quot;background-color: #ffffff; color: #3d3d3a; text-align: start;&quot;&gt;&amp;middot;수정한다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;SQLYog&lt;/b&gt; : MariaDB/MySQL을 GUI로 관리하는 외부 접속 툴. 원격 서버의 DB를 로컬 PC에서 편리하게 다룰 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;포트 3306&lt;/b&gt; : MariaDB/MySQL의 기본 포트. SQLYog 같은 외부 툴로 접속하려면 포트포워딩에 3306을 등록해야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 권한 범위 3단계&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;MariaDB에서 GRANT 명령어로 권한을 줄 때, 범위를 어떻게 지정하느냐가 중요하다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;code&gt;*.*&lt;/code&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #666666;&quot;&gt;모든 데이터베이스, 모든 테이블 &amp;mdash; 관리자(root급) 계정에 사용&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;code&gt;db이름.*특정&lt;/code&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #666666;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DB의 모든 테이블 &amp;mdash; 일반 사용자 계정에 권장&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;code&gt;db이름.테이블명&lt;/code&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;특정 DB의 특정 테이블만 &amp;mdash; 최소 권한 원칙 적용 시&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ utf8mb4를 써야 하는 이유&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #9d9d9d; color: #ffffff;&quot;&gt;&amp;nbsp; utf8&amp;nbsp; &lt;/span&gt;&amp;nbsp;vs&amp;nbsp;&lt;span style=&quot;background-color: #9d9d9d; color: #ffffff;&quot;&gt; &amp;nbsp;utf8mb4&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;MariaDB의 기본 &lt;span style=&quot;background-color: #9d9d9d; color: #ffffff; text-align: left;&quot;&gt;&amp;nbsp; utf8&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #9d9d9d; color: #ffffff; text-align: left;&quot;&gt; &lt;/span&gt;은 실제로 3바이트만 지원해서 이모지나 일부 한자가 깨진다. &lt;span style=&quot;background-color: #9d9d9d; color: #ffffff; text-align: left;&quot;&gt;&amp;nbsp; utf8mb4&amp;nbsp;&amp;nbsp;&lt;/span&gt;는 진짜 4바이트 UTF-8로, 한글/이모지/특수문자를 모두 정상 저장할 수 있다. 처음 설치할 때 반드시 &lt;span style=&quot;background-color: #9d9d9d; color: #ffffff; text-align: left;&quot;&gt;&amp;nbsp; utf8mb4&amp;nbsp;&amp;nbsp;&lt;/span&gt;로 설정해 두는 것이 좋다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 접속 호스트 표기 차이&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;localhost&lt;/b&gt; : 서버 내부에서만 접속 가능. Unix 소켓 방식으로 동작하며 보안상 가장 제한적이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;127.0.0.1&lt;/b&gt; : 루프백 IP로 접속. TCP 방식으로 동작하며 SQLYog 같은 툴 연결에 사용한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;% (와일드카드)&lt;/b&gt; : 모든 호스트에서 접속 허용. 외부 접속을 허용할 때 사용하며 SQLYog 원격 연결에 필요하다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  진행한 실습 과정 정리&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ MariaDB 최신 버전 설치&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기본 yum 저장소의 MariaDB는 구버전이다. &lt;b&gt;공식 repo 파일을 직접 만들어 최신 버전을 설치&lt;/b&gt;한다. 기존에 설치된 MariaDB가 있다면 먼저 깔끔하게 삭제한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1779967300295&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 기존 MariaDB 완전 삭제 (라이브러리까지)
sudo yum remove mariadb 0y
sudo rm -rf /var/lib/mysql
sudo rm -rf /etc/my.cnf*&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779967373284&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# repo 파일 생성
sudo vim /etc/yum.repos.d/MariaDB.repo

# 아래 내용 추가 (버전이 바뀌면 11.3 부분을 수정)
[mariadb]
name = MariaDB
baseurl = https://tw1.mirror.blendbyte.net/mariadb/yum/11.3/centos/$releasever/$basearch
module_hotfixes = 1
gpgkey = https://tw1.mirror.blendbyte.net/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-30 173024.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;319&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zJygs/dJMcaarYhnK/NnYXFEZXo8Mo1RJ0KO11z1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zJygs/dJMcaarYhnK/NnYXFEZXo8Mo1RJ0KO11z1/img.png&quot; data-alt=&quot;repo 파일에 내용 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zJygs/dJMcaarYhnK/NnYXFEZXo8Mo1RJ0KO11z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzJygs%2FdJMcaarYhnK%2FNnYXFEZXo8Mo1RJ0KO11z1%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;764&quot; height=&quot;319&quot; data-filename=&quot;스크린샷 2026-05-30 173024.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;319&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;repo 파일에 내용 추가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1779967566746&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# my.cnf 파일에 설정 디렉토리 지정
sudo vim /etc/my.cnf

# 아래 내용 추가
!includedir /etc/my.cnf.d

# MariaDB 서버 + 클라이언트 설치
sudo yum install MariaDB-server MariaDB-client -y&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  MariaDB 버전은 주기적으로 업데이트된다. repo 파일의 11.3 부분을 최신 버전 번호로 바꾸면 된다. 현재 최신 버전은 &lt;a title=&quot;mariadb.org&quot; href=&quot;https://mariadb.org/download/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;mariadb.org&lt;/a&gt;에서 확인할 수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 인코딩 (utf8mb4) 설정&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;한글 데이터가 깨지지 않도록 &lt;b&gt;서버와 클라이언트 모두 utf8mb4로 설정&lt;/b&gt;한다. &lt;b&gt;설치 직후 서비스 시작 전&lt;/b&gt;에 반드시 해둬야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1780129713797&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 서버 인코딩 설정
sudo vim etc/my.cnf.d/server.cnf

# [mysqld] 아래에 추가
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-30 173315.png&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZZc4p/dJMcajbfO0L/jakmpaOWpyUkiwXIwegkT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZZc4p/dJMcajbfO0L/jakmpaOWpyUkiwXIwegkT0/img.png&quot; data-alt=&quot;서버 인코딩 설정 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZZc4p/dJMcajbfO0L/jakmpaOWpyUkiwXIwegkT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZZc4p%2FdJMcajbfO0L%2FjakmpaOWpyUkiwXIwegkT0%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;761&quot; height=&quot;438&quot; data-filename=&quot;스크린샷 2026-05-30 173315.png&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;438&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;서버 인코딩 설정 추가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1780130113460&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 클라이언트 인코딩 설정
sudo vim /etc/my.cnf.d/mysql-clients.cnf

# [mysql] 과 [mysqldump] 아래 각각 추가
[mysql]
default-character-set = utf8mb4

[mysqldump]
default-character-set = utf8mb4&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-30 173607.png&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FadIo/dJMb990Uvhv/RW1kKltFe5kalKTSVvEqd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FadIo/dJMb990Uvhv/RW1kKltFe5kalKTSVvEqd0/img.png&quot; data-alt=&quot;클라이언트 인코딩 설정 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FadIo/dJMb990Uvhv/RW1kKltFe5kalKTSVvEqd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFadIo%2FdJMb990Uvhv%2FRW1kKltFe5kalKTSVvEqd0%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;765&quot; height=&quot;477&quot; data-filename=&quot;스크린샷 2026-05-30 173607.png&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;477&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;클라이언트 인코딩 설정 추가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  MariaDB를 먼저 시작한 뒤에 인코딩을 바꾸면 기존 DB는 적용되지 않는다. 설치 직후, 서비스 시작 전에 설정 파일을 먼저 수정하는 것이 원칙이다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ MariaDB 시작 및 초기 보안 설정&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1780130323632&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# MariaDB 자동 시작 등록 및 시작
sudo systemctl enable mariadb
sudo systemctl start mariadb

# 초기 보안 설정 (최초 1회만 실행)
sudo /usr/bin/mariadb-secure-installation&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1780130352548&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 보안 설정 과정에서 아래와 같이 응답한다. 
Enter current password for root (enter for none):	Enter
Switch to unix_socket authentication: 			N
Change the root password: 				Y  # 비밀번호 설정
Remove anonymous users: 				Y
Disallow root login remotely: 				Y
Remove test database: 					Y
Reload privilege tables: 				Y&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  &lt;code&gt;Disallow root login remotely: Y&lt;/code&gt; 로 설정하면 외부에서 root 계정으로 직접 접속할 수 없다. SQLYog 연결 시에는 별도 관리자 계정을 만들어 사용한다.&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1780130481136&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 접속 확인
mysql -h 127.0.0.1 -u root -p&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-30 174205.png&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t5bXc/dJMcaa6AaXX/MppLoV4b5ucQSi7dKzeppk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t5bXc/dJMcaa6AaXX/MppLoV4b5ucQSi7dKzeppk/img.png&quot; data-alt=&quot;접속 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t5bXc/dJMcaa6AaXX/MppLoV4b5ucQSi7dKzeppk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft5bXc%2FdJMcaa6AaXX%2FMppLoV4b5ucQSi7dKzeppk%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;763&quot; height=&quot;280&quot; data-filename=&quot;스크린샷 2026-05-30 174205.png&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;접속 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 내부 접속 계정 생성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;root 계정을 직접 &lt;b&gt;외부에 노출하지 않기 위해&lt;/b&gt; 별도 관리자 계정을 만든다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1780131555353&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 패턴 1: 관리자용 계정 생성 (모든 DB 접근 허용)
GRANT ALL PRIVILEGES ON *.* TO 계정이름@`%` IDENTIFIED BY '비밀번호';

-- 패턴 2 : 일반 사용자 계정 생성 (특정 DB만 접근 허용 - 권장)
CREATE DATABASE myapp;
GRANT ALL PRIVILEGES ON myapp.* TO myapp_user@`%` IDENTIFIED BY '비밀번호';

-- 생성된 계정 확인
SELECT user, host FROM mysql.user;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1780131674371&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# root 계정으로 접속
mysql -u root -p


# 관리자 계정 생성
GRANT ALL PRIVILEGES ON *.* TO 계정이름@`%` IDENTIFIED BY '비밀번호';

# 권한 즉시 적용
FLUSH PRIVILEGES;

# root 로그아웃
exit

# 생성한 계정으로 재로그인 확인
/usr/bin/mariadb -u 계정이름 -p&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  권한을 변경한 후 &lt;code&gt;FLUSH PRIVILEGES&lt;/code&gt;를 실행해야 변경사항이 즉시 반영된다. &lt;b&gt;이 명령을 빠뜨리면 재시작 전까지 권한이 적용되지 않는다.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ SQLYog 설치 및 연결&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;SQLYog는 원격에서 MariaDB를 GUI로 관리하는 툴이다. 먼저 VirtualBox &lt;b&gt;포트포워딩에 3306 포트를 추가&lt;/b&gt;해야 한다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;VirtualBox &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 포트포워딩 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 규칙추가 (호스트포트 : 임의 설정 / 게스트 포트 : 3306)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;SQLYog 설치 후 실행 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 파일 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 새 연결&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;정보 입력 후 연결&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;연결 성공 후 폰트 설정과 삽입 공간 체크&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;쿼리창에서 &lt;code&gt;SHOW DATABASES;&lt;/code&gt; 실행 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; PuTTY와 동일한 결과 확인&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-30 181157.png&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;238&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8wY7q/dJMcabxAZx8/mKwckLlKWpMdeX06SnuJN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8wY7q/dJMcabxAZx8/mKwckLlKWpMdeX06SnuJN1/img.png&quot; data-alt=&quot;포트포워딩&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8wY7q/dJMcabxAZx8/mKwckLlKWpMdeX06SnuJN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8wY7q%2FdJMcabxAZx8%2FmKwckLlKWpMdeX06SnuJN1%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;760&quot; height=&quot;238&quot; data-filename=&quot;스크린샷 2026-05-30 181157.png&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;238&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;포트포워딩&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;SQLYog 연결 정보&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;호스트&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp; &amp;nbsp;127.0.0.1&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사용자&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp; &amp;nbsp;위에서 생성한 관리자 계정 (root 아님)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;비밀번호&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp; &amp;nbsp;설정한 비밀번호&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;포트&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp; &amp;nbsp;포트포워딩에서 설정한 호스트 포트&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터베이스&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :&amp;nbsp; &amp;nbsp;(비워도 됨)&lt;/span&gt;&lt;/blockquote&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  SQLYog에서 실행한 SQL과 PuTTY에서 실행한 SQL은 같은 MariaDB에 연결되어 있기 때문에 결과가 동일하다. 단순 조회는 SQLYog 가 편하고, 서버 설정이나 파일 작업은 PuTTY로 하는 식으로 역할을 나눠 사용하면 효율적이다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 자주 쓰는 MariaDB 명령어 모음&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1780132743099&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 데이터베이스 목록 보기
SHOW DATABASES;

-- 데이터베이스 선택
USE db이름;

-- 테이블 목록 보기
SHOW TABLES;

-- 테이블 구조 확인
DESCRIBE 테이블명; (DESC)

-- 현재 인코딩 확인
SHOW VARIABLES LIKE 'character%';

-- 계정 및 권한 목록 확인
SELECT user, host FROM mysql.user;
SHOW GRANTS FOR 계정이름@`%`;&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;⚠️&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;오류 / 주의&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;warn-box&quot; data-ke-size=&quot;size16&quot;&gt;
    &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;
        &lt;b&gt;  오류 — SQLYog 연결 오류 (Access denied)&lt;/b&gt;
    &lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;
        계정 생성 시 호스트를 &lt;code&gt;localhost&lt;/code&gt;로 지정하면 외부(SQLYog)에서 접속이 거부된다. 외부 접속 허용은 반드시 호스트를 &lt;code&gt;%&lt;/code&gt;로 지정해야 한다.
    &lt;/span&gt;
&lt;/p&gt;
&lt;p class=&quot;warn-box&quot; data-ke-size=&quot;size16&quot;&gt;
    &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;
        &lt;b&gt;  오류 — 한글 데이터가 ???로 깨질 때&lt;/b&gt;
    &lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;
        인코딩 설정을 MariaDB 시작 후에 변경했거나, &lt;code&gt;server.cnf&lt;/code&gt;와 &lt;code&gt;mysql-clients.cnf&lt;/code&gt; 중 하나를 빠뜨린 경우다. 설정 파일을 다시 확인하고 &lt;code&gt;sudo systemctl restart mariadb&lt;/code&gt;로 재시작한다. &lt;code&gt;SHOW VARIABLES LIKE 'character%';&lt;/code&gt;로 모든 항목이 utf8mb4인지 확인한다.
    &lt;/span&gt;
&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  요약&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;✔️ 공식 repo를 추가해 &lt;b&gt;MariaDB 최신 버전 설치&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; ✔️ 서비스 시작 전에 &lt;b&gt;utf8mb4 인코딩&lt;/b&gt;을 설정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; ✔️ MariaDB의 &lt;b&gt;초기 보안 설정&lt;/b&gt; 마침&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; ✔️ root 대신 별도 &lt;b&gt;관리자 계정&lt;/b&gt;을 만들어 보안 원칙을 준수&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; ✔️ &lt;b&gt;포트포워딩 3306&lt;/b&gt; 추가 후 SQLYog로 외부 GUI 접속에 성공&lt;/span&gt;&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;style1&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음 편으로 이동&amp;nbsp;   &lt;a title=&quot;#7 FTP 서버 구축 &amp;mdash; Pure-FTPd &amp;amp; FileZilla &amp;amp; 호스트 전용 어댑터&quot; href=&quot;https://su-tudy.tistory.com/162?category=1199903&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;#7 FTP 서버 구축 &amp;mdash; Pure-FTPd &amp;amp; FileZilla &amp;amp; 호스트 전용 어댑터&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;</description>
      <category>리눅스/Linux 실습</category>
      <author>su-tudy</author>
      <guid isPermaLink="true">https://su-tudy.tistory.com/161</guid>
      <comments>https://su-tudy.tistory.com/161#entry161comment</comments>
      <pubDate>Mon, 9 Dec 2024 19:04:38 +0900</pubDate>
    </item>
    <item>
      <title>#5 웹 서버 구축 &amp;mdash; Nginx 설치 &amp;amp; Virtual Hosting</title>
      <link>https://su-tudy.tistory.com/154</link>
      <description>&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  실제 서비스처럼 웹 환경 구성하기&lt;/b&gt;&lt;/span&gt;&lt;/h2&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;웹 서버&lt;/b&gt;는 클라이언트(웹 브라우저)가 &lt;b&gt;HTTP 요청을 보내면 HTML 페이지나 파일을 응답해 주는&lt;/b&gt; 프로그램이다. 내 PC의 자원을 외부와 공유하는 것으로, &lt;b&gt;서버 운영의 핵심&lt;/b&gt; 역할을 담당한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하나의 서버에서 여러 서비스를 운영하려면&lt;b&gt; Virtual Hosting&lt;/b&gt;이 필요하다. &lt;b&gt;포트 번호나 도메인을 다르게 설정&lt;/b&gt;해 &lt;b&gt;하나의 서버에서 여러 개의 독립된 웹사이트를 제공&lt;/b&gt;할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;flow&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;nginx 설치&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서비스 시작 &amp;amp; 자동화&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기본 웹루트 변경&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Virtual Hosting 설정&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;포트별 접속 확인&lt;/span&gt;&lt;/div&gt;
&lt;/div&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  미리 알아두면 좋은 개념들&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ &lt;/b&gt;&lt;b&gt;패키지 설치 방법 비교&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 63px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt; 직접 빌드 &lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;패키지 매니저 (yum) &lt;/b&gt;&lt;span style=&quot;background-color: #409d00; color: #ffffff;&quot;&gt;&lt;span style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;span style=&quot;background-color: #409d00; color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: center;&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&amp;nbsp;실습에서 사용&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 42px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt; 소스코드를 직접 받아 컴파일하는 방식&lt;/b&gt;. 유연하지만 비개발자에게 어렵고 의존성 문제가 생기기 쉽다. &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 42px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt; 미리 빌드된 실행 파일을 설치&lt;/b&gt;. 의존성 자동 해결, 버전 관리가 쉬워 가장 많이 쓰인다. rpm의 의존성 문제를 해결한 버전이다. &lt;/span&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;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 주요 개념 정리&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;yum repository&lt;/b&gt; : 수많은 패키지가 업로드된 거대 서버. 공식 repo 외에 사설 repo를 등록해서 더 많은 패키지를 설치할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;EPEL&lt;/b&gt; : Extra Pakages for Enterprise Linux. 기본 저장소에 없는 추가 패키지를 제공하는 repo. Nginx 최신 버전 설치에 활용된다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;웹루트 폴더&lt;/b&gt; : 웹 서버의 시작 지점 디렉토리. 브라우저가 접속했을 때 보여줄 파일들이 위치하는 곳이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Virtual Hosting&lt;/b&gt; : 하나의 서버에서 포트 번호 또는 도메인을 다르게 설정해 여러 개의 웹사이트를 동시에 운영하는 것.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  진행한 실습 과정 정리&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ Nginx 최신 버전 설치&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기본 yum 저장소는 최신 버전을 제공하지 않으므로 EPEL과 &lt;b&gt;nginx 공식 repo를 추가한 후 설치&lt;/b&gt;한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1779792294576&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# EPEL 저장소 추가
sudo yum install -y epel-release

# 설치된 패키지 업데이트
sudo yum update -y

# nginx 공식 repo 파일 생성 (최신 버전 설치를 위해)
sudo vim /etc/yum.repos.d/nginx.repo&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779792316424&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# nginx.repo 파일에 아래 내용 추가
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-26 195104.png&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DnbuF/dJMcadoxLap/n24D6yiXkDvzvE5kjSBQ9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DnbuF/dJMcadoxLap/n24D6yiXkDvzvE5kjSBQ9K/img.png&quot; data-alt=&quot;nginx.repo 파일에 추가한 내용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DnbuF/dJMcadoxLap/n24D6yiXkDvzvE5kjSBQ9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDnbuF%2FdJMcadoxLap%2Fn24D6yiXkDvzvE5kjSBQ9K%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;755&quot; height=&quot;117&quot; data-filename=&quot;스크린샷 2026-05-26 195104.png&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;nginx.repo 파일에 추가한 내용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1779792472436&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 저장 후 nginx 설치
sudo yum install -y nginx

# 버전 확인
nginx -v

# 상태 확인 (inactive(dead) = 설치만 된 상태)
sudo systemctl status nginx

# nginx 시작
sudo systemctl start nginx

# 부팅 시 자동 시작 설정
sudo systemctl enable nginx

# active(runnig) 확인
sudo systemctl status nginx&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  &lt;code&gt;start&lt;/code&gt;는 &lt;b&gt;지금 당장 켜는 것&lt;/b&gt;, &lt;code&gt;enable&lt;/code&gt;은 &lt;b&gt;재부팅 후에도 자동으로 켜지게 하는 것&lt;/b&gt;이다. 서버 운영 시 둘 다 설정해 두는 게 기본이다.&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-26 195345.png&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;238&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfdNtG/dJMcaglkgMd/kbuqDMQbrnHcBZHAL6PhYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfdNtG/dJMcaglkgMd/kbuqDMQbrnHcBZHAL6PhYk/img.png&quot; data-alt=&quot;nginx 버전 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfdNtG/dJMcaglkgMd/kbuqDMQbrnHcBZHAL6PhYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfdNtG%2FdJMcaglkgMd%2FkbuqDMQbrnHcBZHAL6PhYk%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;884&quot; height=&quot;238&quot; data-filename=&quot;스크린샷 2026-05-26 195345.png&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;238&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;nginx 버전 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-26 195430.png&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;147&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgR2eJ/dJMcaaFtq5V/9mDxpHXTYIMyXVUQXvlpJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgR2eJ/dJMcaaFtq5V/9mDxpHXTYIMyXVUQXvlpJ0/img.png&quot; data-alt=&quot;상태 확인 : 꺼져있는 상태 (설치만 된 상태)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgR2eJ/dJMcaaFtq5V/9mDxpHXTYIMyXVUQXvlpJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgR2eJ%2FdJMcaaFtq5V%2F9mDxpHXTYIMyXVUQXvlpJ0%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;884&quot; height=&quot;147&quot; data-filename=&quot;스크린샷 2026-05-26 195430.png&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;147&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;상태 확인 : 꺼져있는 상태 (설치만 된 상태)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-26 195522.png&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;145&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ebSgbY/dJMcaiQYqDG/4gdn1ozYSN2c2WaC4bICGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ebSgbY/dJMcaiQYqDG/4gdn1ozYSN2c2WaC4bICGk/img.png&quot; data-alt=&quot;상태 확인 : 켜져있는 상태&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ebSgbY/dJMcaiQYqDG/4gdn1ozYSN2c2WaC4bICGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FebSgbY%2FdJMcaiQYqDG%2F4gdn1ozYSN2c2WaC4bICGk%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;884&quot; height=&quot;145&quot; data-filename=&quot;스크린샷 2026-05-26 195522.png&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;145&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;상태 확인 : 켜져있는 상태&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ nginx 프로세스 및 포트 확인&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;포트포워딩 설정 시 게스트 포트 번호를 입력해야 하므로, nginx가 실제로 어떤 포트에서 실행 중인지 먼저 확인한다.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1779793325655&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# nginx 프로세스 번호(PID) 확인
sudo systemctl status nginx

# 관련 프로세스 정보 확인
sudo ps-ef | fgrep (프로세스_번호)

# 사용 중인 포트 확인
sudo netstat -nlp | fgrep nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-26 200241.png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cv1YkC/dJMcahxNR6e/km9nzajOhGdJGNkwmauZg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cv1YkC/dJMcahxNR6e/km9nzajOhGdJGNkwmauZg1/img.png&quot; data-alt=&quot;프로세스 번호 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cv1YkC/dJMcahxNR6e/km9nzajOhGdJGNkwmauZg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcv1YkC%2FdJMcahxNR6e%2Fkm9nzajOhGdJGNkwmauZg1%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;883&quot; height=&quot;257&quot; data-filename=&quot;스크린샷 2026-05-26 200241.png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프로세스 번호 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  출력된 프로세스 번호 중 &lt;b&gt;부모 프로세스 번호(Main PID)&lt;/b&gt;만 기억하면 된다. 자식 프로세스는 부모가 관리하므로 부모 PID로 관련 정보를 모두 조회할 수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-26 200344.png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IiOnE/dJMcad3aDl0/dWuX4i5yG64QcyPICujwX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IiOnE/dJMcad3aDl0/dWuX4i5yG64QcyPICujwX0/img.png&quot; data-alt=&quot;관련 프로세스 정보 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IiOnE/dJMcad3aDl0/dWuX4i5yG64QcyPICujwX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIiOnE%2FdJMcad3aDl0%2FdWuX4i5yG64QcyPICujwX0%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;883&quot; height=&quot;125&quot; data-filename=&quot;스크린샷 2026-05-26 200344.png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;125&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;관련 프로세스 정보 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-26 200352.png&quot; data-origin-width=&quot;885&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/04bjc/dJMcacJ3AjK/t7qnClZGXo40iVpU5K5W00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/04bjc/dJMcacJ3AjK/t7qnClZGXo40iVpU5K5W00/img.png&quot; data-alt=&quot;포트 번호 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/04bjc/dJMcacJ3AjK/t7qnClZGXo40iVpU5K5W00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F04bjc%2FdJMcacJ3AjK%2Ft7qnClZGXo40iVpU5K5W00%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;885&quot; height=&quot;72&quot; data-filename=&quot;스크린샷 2026-05-26 200352.png&quot; data-origin-width=&quot;885&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;포트 번호 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  포트를 별도로 설정하지 않았다면 &lt;b&gt;웹서버(nginx)&lt;/b&gt;는 기본적으로 &lt;b&gt;80번&lt;/b&gt;, &lt;b&gt;SSH(sshd)&lt;/b&gt;는 &lt;b&gt;22번&lt;/b&gt; 포트를 사용한다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 포트포워딩으로 웹 접속 확인 &lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;VirtualBox &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 포트포워딩 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 규칙 추가 (호스트 포트 : 임의 설정 / 게스트 포트 : 80)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;웹 브라우저에서 &lt;code&gt;127.0.0.1:8080&lt;/code&gt; 접속 Nginx 기본 페이지 확인&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-26 201748.png&quot; data-origin-width=&quot;878&quot; data-origin-height=&quot;188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/leaBf/dJMcafNyFxP/4iR1TvZBvY9NKtnklws8O0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/leaBf/dJMcafNyFxP/4iR1TvZBvY9NKtnklws8O0/img.png&quot; data-alt=&quot;포트포워딩&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/leaBf/dJMcafNyFxP/4iR1TvZBvY9NKtnklws8O0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FleaBf%2FdJMcafNyFxP%2F4iR1TvZBvY9NKtnklws8O0%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;878&quot; height=&quot;188&quot; data-filename=&quot;스크린샷 2026-05-26 201748.png&quot; data-origin-width=&quot;878&quot; data-origin-height=&quot;188&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;포트포워딩&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-26 201806.png&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceLKTb/dJMcafNyFyQ/ISKWiOJGfSBcj99RzKcGeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceLKTb/dJMcafNyFyQ/ISKWiOJGfSBcj99RzKcGeK/img.png&quot; data-alt=&quot;웹 브라우저 접속 성공&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceLKTb/dJMcafNyFyQ/ISKWiOJGfSBcj99RzKcGeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceLKTb%2FdJMcafNyFyQ%2FISKWiOJGfSBcj99RzKcGeK%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;407&quot; height=&quot;187&quot; data-filename=&quot;스크린샷 2026-05-26 201806.png&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;187&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;웹 브라우저 접속 성공&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  접속이 안 된다면 &lt;b&gt;방화벽이 켜져 있거나 SELinux가 활성화된 상태&lt;/b&gt;일 수 있다. 4편에서 다뤘던 방화벽 해제와 SELinux 비활성화 설정을 먼저 확인해 보자.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 기본 웹루트 폴더 경로 변경&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;nginx 설정은 &lt;code&gt;/etc/nginx/conf.d/&lt;/code&gt; 아래에 &lt;code&gt;.conf&lt;/code&gt; 파일로 관리한다. 기본 설정 파일인 &lt;code&gt;default.conf&lt;/code&gt;를 수정해 웹루트 경로를 원하는 곳으로 바꿀 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1779794595148&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# nginx 설정 파일에서 include 경로 확인
sudo vim /etc/nginx/nginx.conf
:q 로 나가기

# 확인한 conf.d 디렉토리로 이동
cd /etc/nginx/conf.d
ls

# 기본 설정 파일 열기
sudo vim default.conf

# location 블록 안의 root 경로를 원하는 경로로 수정
location / {
    root   /web/site0/public;    # 원하는 경로로 변경
    index  index.html index.htm;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-28 132854.png&quot; data-origin-width=&quot;882&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5D5fN/dJMcaayH0YP/ce3c4RKO3GeKNa4y7wkQOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5D5fN/dJMcaayH0YP/ce3c4RKO3GeKNa4y7wkQOk/img.png&quot; data-alt=&quot;nginx 설정 파일 구조 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5D5fN/dJMcaayH0YP/ce3c4RKO3GeKNa4y7wkQOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5D5fN%2FdJMcaayH0YP%2Fce3c4RKO3GeKNa4y7wkQOk%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;882&quot; height=&quot;280&quot; data-filename=&quot;스크린샷 2026-05-28 132854.png&quot; data-origin-width=&quot;882&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;nginx 설정 파일 구조 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-28 133042.png&quot; data-origin-width=&quot;882&quot; data-origin-height=&quot;115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bV2zGQ/dJMcageBpHK/Zz9aTB24n1amyk5RCAWUtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bV2zGQ/dJMcageBpHK/Zz9aTB24n1amyk5RCAWUtk/img.png&quot; data-alt=&quot;root 경로 변경&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bV2zGQ/dJMcageBpHK/Zz9aTB24n1amyk5RCAWUtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbV2zGQ%2FdJMcageBpHK%2FZz9aTB24n1amyk5RCAWUtk%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;882&quot; height=&quot;115&quot; data-filename=&quot;스크린샷 2026-05-28 133042.png&quot; data-origin-width=&quot;882&quot; data-origin-height=&quot;115&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;root 경로 변경&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ Virtual Hosting 설정 파일 생성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;포트별로 다른 웹사이트를 제공하는 &lt;b&gt;Virtual Hosting 설정 파일&lt;/b&gt;을 만든다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1779942916930&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# vhost 설정 파일 생성
sudo vim /etc/nginx/conf.d/vhost.conf

# 사이트별 포트와 경로 설정
server {
    listen [포트번호];
    server_name _;
    
    location / {
        root [웹루트_경로];
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-28 134141.png&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TXU92/dJMb99T4hbk/NvKyeAvbLcBby26pF8v1R0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TXU92/dJMb99T4hbk/NvKyeAvbLcBby26pF8v1R0/img.png&quot; data-alt=&quot;포트별 Vittual Hosting 설정 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TXU92/dJMb99T4hbk/NvKyeAvbLcBby26pF8v1R0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTXU92%2FdJMb99T4hbk%2FNvKyeAvbLcBby26pF8v1R0%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;884&quot; height=&quot;502&quot; data-filename=&quot;스크린샷 2026-05-28 134141.png&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;포트별 Vittual Hosting 설정 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;포트 &amp;rarr; 웹루트 매핑 구조&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #409d00; color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;:80&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;rarr;&amp;nbsp; &amp;nbsp;&lt;code&gt;/web/site0/public&lt;/code&gt; (기본)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #409d00; color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;:8011&amp;nbsp; &amp;nbsp;&lt;/span&gt; &amp;nbsp; &amp;rarr;&amp;nbsp; &amp;nbsp;&lt;code&gt;/web/site1/public&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #409d00; color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;:8012&amp;nbsp; &amp;nbsp;&lt;/span&gt; &amp;nbsp; &amp;rarr;&amp;nbsp; &amp;nbsp;&lt;code&gt;/web/site2/public&lt;/code&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  &lt;code&gt;server_name _&lt;/code&gt;&amp;nbsp; &amp;rarr;&amp;nbsp; _는 모든 도메인 허용. 특정 도메인만 받으려면 example.com으로 교체&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  &lt;code&gt;location /&lt;/code&gt;&amp;nbsp; &amp;rarr;&amp;nbsp; /는 모든 경로 처리. 특정 경로만 처리하려면 /api, /blog 등으로 교체.&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1779943777559&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 설정 파일 수정 후 nginx 재시작 (반드시 재시작해야 적용)
sudo systemctl restart nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 웹루트 폴더 생성 및 소유권 설정&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1779944039409&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 루트(/)로 이동 후 설정 한 경로 폴더 생성
cd /
sudo mkdir -p /web/site0/public
sudo mkdir -p /web/site1/public
sudo mkdir -p /web/site2/public

# 소유권 확인
ls -al /web

# 내 계정으로 소유권 변경 (편하게 작업하기 위해)
sudo chown 계정이름:계정이름 -R /web

# 확인용 index 파일 생성
echo &quot;site0&quot; &amp;gt; /web/site0/public/index.html
echo &quot;site1&quot; &amp;gt; /web/site1/public/index.html
echo &quot;site2&quot; &amp;gt; /web/site2/public/index.html&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-28 135429.png&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;130&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8IXKZ/dJMcaffJCxz/ynKp4zYZpJrCqv5JgcnDl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8IXKZ/dJMcaffJCxz/ynKp4zYZpJrCqv5JgcnDl0/img.png&quot; data-alt=&quot;지정한 경로의 폴더 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8IXKZ/dJMcaffJCxz/ynKp4zYZpJrCqv5JgcnDl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8IXKZ%2FdJMcaffJCxz%2FynKp4zYZpJrCqv5JgcnDl0%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;888&quot; height=&quot;130&quot; data-filename=&quot;스크린샷 2026-05-28 135429.png&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;130&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;지정한 경로의 폴더 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-28 135449.png&quot; data-origin-width=&quot;887&quot; data-origin-height=&quot;151&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sHmgh/dJMcaffJCxN/k0GU1EsPXqhXzVXQYNgjVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sHmgh/dJMcaffJCxN/k0GU1EsPXqhXzVXQYNgjVk/img.png&quot; data-alt=&quot;소유권 변경&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sHmgh/dJMcaffJCxN/k0GU1EsPXqhXzVXQYNgjVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsHmgh%2FdJMcaffJCxN%2Fk0GU1EsPXqhXzVXQYNgjVk%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;887&quot; height=&quot;151&quot; data-filename=&quot;스크린샷 2026-05-28 135449.png&quot; data-origin-width=&quot;887&quot; data-origin-height=&quot;151&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;소유권 변경&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;toc-2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 포트포워딩 추가 및 접속 확인&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;VirtualBox &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 포트포워딩 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 규칙 추가 (8011, 8012 포트도 각각 게스트 포트와 동일하게 설정)&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;브라우저에서 &lt;code&gt;127.0.0.1:8011&lt;/code&gt;, &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;code&gt;127.0.0.1:8012&lt;/code&gt; 접속&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;각각 다른 내용이 출력되면 Virtual Hosting 성공&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-28 135835.png&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;239&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CpHTF/dJMcagMtJnR/gCIDdtKbAkTdWumHnRaHK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CpHTF/dJMcagMtJnR/gCIDdtKbAkTdWumHnRaHK0/img.png&quot; data-alt=&quot;포트포워딩&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CpHTF/dJMcagMtJnR/gCIDdtKbAkTdWumHnRaHK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCpHTF%2FdJMcagMtJnR%2FgCIDdtKbAkTdWumHnRaHK0%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;891&quot; height=&quot;239&quot; data-filename=&quot;스크린샷 2026-05-28 135835.png&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;239&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;포트포워딩&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageslideblock alignCenter&quot; data-image=&quot;[{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/RTvtn/dJMcagTdvh2/nT68qkdl0mEsCBJxj8vPU0/img.png&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/qCTQ0/dJMcabElUZw/cV2zxrkDWOKjOLcJ9LV1g1/img.png&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/xmqsr/dJMcagTdvh3/VtIQpmqhnQqAHBSwHsK7c0/img.png&amp;quot;}]&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span class=&quot;image-wrap selected&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RTvtn/dJMcagTdvh2/nT68qkdl0mEsCBJxj8vPU0/img.png&quot; data-url=&quot;https://blog.kakaocdn.net/dn/RTvtn/dJMcagTdvh2/nT68qkdl0mEsCBJxj8vPU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RTvtn/dJMcagTdvh2/nT68qkdl0mEsCBJxj8vPU0/img.png&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRTvtn%2FdJMcagTdvh2%2FnT68qkdl0mEsCBJxj8vPU0%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; data-origin-width=&quot;887&quot; data-origin-height=&quot;149&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qCTQ0/dJMcabElUZw/cV2zxrkDWOKjOLcJ9LV1g1/img.png&quot; data-url=&quot;https://blog.kakaocdn.net/dn/qCTQ0/dJMcabElUZw/cV2zxrkDWOKjOLcJ9LV1g1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qCTQ0/dJMcabElUZw/cV2zxrkDWOKjOLcJ9LV1g1/img.png&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqCTQ0%2FdJMcabElUZw%2FcV2zxrkDWOKjOLcJ9LV1g1%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; data-origin-width=&quot;887&quot; data-origin-height=&quot;149&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xmqsr/dJMcagTdvh3/VtIQpmqhnQqAHBSwHsK7c0/img.png&quot; data-url=&quot;https://blog.kakaocdn.net/dn/xmqsr/dJMcagTdvh3/VtIQpmqhnQqAHBSwHsK7c0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xmqsr/dJMcagTdvh3/VtIQpmqhnQqAHBSwHsK7c0/img.png&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxmqsr%2FdJMcagTdvh3%2FVtIQpmqhnQqAHBSwHsK7c0%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; data-origin-width=&quot;887&quot; data-origin-height=&quot;149&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;button class=&quot;btn btn-prev&quot;&gt;&lt;span class=&quot;ico-prev&quot;&gt;이전&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;btn btn-next&quot;&gt;&lt;span class=&quot;ico-next&quot;&gt;다음&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;
  &lt;div class=&quot;mark&quot;&gt;&lt;span data-index=&quot;0&quot;&gt;0&lt;/span&gt;&lt;span data-index=&quot;1&quot;&gt;1&lt;/span&gt;&lt;span data-index=&quot;2&quot;&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;⚠️&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;오류 / 주의&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;warn-box&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;b&gt;  오류 &amp;mdash; Systemctl restart 실패 시&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 설정 파일 문법이 틀리면 nginx 재시작이 실패한다. &lt;code&gt;sudo nginx -t&lt;/code&gt;로 설정 파일 문법을 먼저 검사할 수 있다. 오류 메시지에 몇 번째 줄인 지 나오므로 해당 줄을 수정하면 된다.&lt;br /&gt;&lt;/span&gt;&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  요약&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; ✔️ EPEL과 nginx 공식 repo를 추가해 &lt;b&gt;최신 버전 nginx 설치&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; ✔️ &lt;b&gt;nginx 시작 &amp;amp; 자동 시작&lt;/b&gt; 설정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; ✔️ default.conf 에서 &lt;b&gt;기본 웹루트 경로 변경&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; ✔️ vhost.conf를 생성해 포트별로 다른 웹사이트를 제공하는 &lt;b&gt;Virtual Hosting&lt;/b&gt; 구현&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; ✔️ 설정 파일 수정 후엔 항상 문법 검사 후 재시작&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음 편으로 이동&amp;nbsp;  &amp;nbsp; &lt;a title=&quot;#6 데이터베이스 구축 &amp;mdash; MariaDB &amp;amp; SQLYog&quot; href=&quot;https://su-tudy.tistory.com/161?category=1199903&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;#6 데이터베이스 구축 &amp;mdash; MariaDB &amp;amp; SQLYog&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스/Linux 실습</category>
      <author>su-tudy</author>
      <guid isPermaLink="true">https://su-tudy.tistory.com/154</guid>
      <comments>https://su-tudy.tistory.com/154#entry154comment</comments>
      <pubDate>Sun, 24 Nov 2024 14:33:46 +0900</pubDate>
    </item>
    <item>
      <title>#4 보안 설정 &amp;mdash; 방화벽(firewalld) &amp;amp; SELinux 비활성화</title>
      <link>https://su-tudy.tistory.com/151</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  서버 접속을 막는 보안 기능 이해하기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음 편에서 Nginx 웹 서버를 설치하고 브라우저로 접속해 보는 과정을 다루게 되는데, 포트포워딩을 다 해놔도 접속이 안 되는 상황이 생길 것이다. 이유는 두 가지다. &lt;b&gt;방화벽&lt;/b&gt;이 &lt;b&gt;22번 포트(SSH) 이외의 모든 포트를 막고&lt;/b&gt; 있고, &lt;b&gt;SELinux&lt;/b&gt;가 &lt;b&gt;외부 프로세스의 시스템 접근을 차단&lt;/b&gt;하기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Nginx 설치 전에 이 두 가지를 먼저 정리해두지 않으면 나중에 접속이 안 되는 원인을 찾느라 헤매게 된다. 이번 편에서는 &lt;b&gt;방화벽을 해제&lt;/b&gt;하고 &lt;b&gt;SELinux를 비활성화&lt;/b&gt;하는 방법을 다룬다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;flow&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;방화벽 개념 이해&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;firewalld 해제&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;SELinux 개념 이해&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;SELinux 비활성화&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: center;&quot; 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;h2 id=&quot;toc-1&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  미리 알아두면 좋은 개념들&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 네트워크 관련 용어&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;방화벽 (Firewall)&lt;/b&gt; : 원치 않는 트래픽으로부터 네트워크를 보호하는 보안 솔루션. 허용된 포트 외 모든 접근을 차단한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;프로토콜&lt;/b&gt; : 컴퓨터 사이에서 데이터 교환 방식을 정의하는 규칙 체계. SSH, HTTP 등이 각각의 프로토콜이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;SSH&lt;/b&gt; : 원격지 호스트에 안전하게 접속하기 위한 프로토콜. 22번이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;데몬 (Daemon)&lt;/b&gt; : 백그라운드에서 계속 실행되는 프로세스. firewalld, nginx 모두 데몬으로 동작하며 &lt;code&gt;systemctl&lt;/code&gt;로 관리한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;포어그라운드&lt;/b&gt; : 눈앞에서 프로세스가 진행되는 상태. 실행 중엔 제어권을 프로세스가 가져간다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;백그라운드&lt;/b&gt; : 화면에 보이지 않는 곳에서 프로세스가 실행되는 상태. 제어권은 사용자가 유지한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ SELinux 모드 3가지&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 60px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style7&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;background-color: #ee2323; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&amp;nbsp;강제&lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt; Enforcing&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;background-color: #f3c000; color: #ffffff; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;경고 Permissive&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;background-color: #9d9d9d; color: #ffffff; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;비활성 Disabled&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 39px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 39px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;정책 위반 시 차단하고 로그 기록. 기본값이며 가장 엄격한 모드&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 39px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;위반을 차단하지 않고 경고 로그만 기록. 디버깅에 유용&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 39px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;SELinux를 완전히 끈 상태. 실습 환경에서 사용&lt;/b&gt;&lt;/span&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;h2 id=&quot;toc-1&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  진행한 실습 과정 정리&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 방화벽 해제&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;CentOS 7의 기본 방화벽은 &lt;b&gt;firewalld&lt;/b&gt;다. 상태를 확인한 후 중지하고 부팅 시 자동 시작도 꺼준다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1779369953397&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 방화벽 현재 상태 확인
sudo systemctl status firewalld

# 방화벽 중기 (즉시 적용)
sudo systemctl stop firewalld

# 부팅 시 자동 시작 비활성화
sudo systemctl disable firewalld

# 비활성화 확인
sudo systemctl status firewalld&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  &lt;code&gt;stop&lt;/code&gt;은 지금 당장 끄는 것이고, &lt;code&gt;disable&lt;/code&gt;은 재부팅 후에도 자동으로 켜지지 않게 하는 것이다. 두 명령을 모두 실행해야 완전히 해제된다.&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-21 224928.png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;103&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bF43zv/dJMcabK7cc4/9lLS6ViCRiD2AbXIO9GkV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bF43zv/dJMcabK7cc4/9lLS6ViCRiD2AbXIO9GkV0/img.png&quot; data-alt=&quot;방화벽 활성화&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bF43zv/dJMcabK7cc4/9lLS6ViCRiD2AbXIO9GkV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbF43zv%2FdJMcabK7cc4%2F9lLS6ViCRiD2AbXIO9GkV0%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;883&quot; height=&quot;103&quot; data-filename=&quot;스크린샷 2026-05-21 224928.png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;103&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;방화벽 활성화&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-21 224940.png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;93&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uYkgk/dJMcagyOpsI/flaey9d0lfz7dmfZcUxPfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uYkgk/dJMcagyOpsI/flaey9d0lfz7dmfZcUxPfk/img.png&quot; data-alt=&quot;방화벽 비활성화&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uYkgk/dJMcagyOpsI/flaey9d0lfz7dmfZcUxPfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuYkgk%2FdJMcagyOpsI%2Fflaey9d0lfz7dmfZcUxPfk%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;883&quot; height=&quot;93&quot; data-filename=&quot;스크린샷 2026-05-21 224940.png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;93&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;방화벽 비활성화&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ SELinux 비활성화&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;SELinux는 프로그램 설치와 서비스 운영 시 추가적인 권한 검사를 수행해서 실습 환경에서 자주 방해가 된다. 설정 파일을 수정해서 비활성화한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1779371183154&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 현재 SELinux 상태 확인
sestatus

# SELinux 설정 파일 열기
sudo vim /etc/selinux/config&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779371224948&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 수정할 항목
SELINUX=enforcing	&amp;rarr;	SELINUX-disabled&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779371294522&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 저장 후 반드시 재부팅(재부팅 없이는 적용 안 됨)
sudo reboot now

# 재부팅 후 확인
sestatus
# SELinux status: disabled 가 나오면 성공&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;⚠️&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;오류 / 주의&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;warn-box&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;b&gt;  주의 &amp;mdash; 실습 환경 vs 운영 환경&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 방화벽 해제와 SELinux 비활성화는 실습 편의를 위한 설정이다. 실제 운영 서버에서는 방화벽에서 필요한 포트만 열고(예 : &lt;code&gt;firewall-cmd --add-port=80/tcp&lt;/code&gt;), SELinux 정책을 조정하는 방식으로 운영하는 것이 원칙이다. &lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;warn-box&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;b&gt;  주의 &amp;mdash; SELinux 비활성화 후 반드시 재부팅하기&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; SELinux 설정은 파일을 저장해도 즉시 적용되지 않는다. 반드시 &lt;code&gt;reboot&lt;/code&gt;를 해야 변경사항이 반영된다. 재부팅없이 즉시 적용하고 싶다면 &lt;code&gt;setenforce 0&lt;/code&gt;으로 Permissive 모드로 임시 전환할 수 있다. 단, 재부팅하면 다시 설정 파일 값으로 돌아간다. &lt;/span&gt;&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;h2 id=&quot;toc-1&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  요약&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;✔️&lt;/span&gt; &lt;b&gt;systemctl stop&lt;/b&gt;과 &lt;b&gt;disable&lt;/b&gt; 로 방화벽을 완전히 해제&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;span style=&quot;text-align: start;&quot;&gt;✔️&lt;/span&gt;&amp;nbsp;&lt;b&gt; /ect/selinux/config&lt;/b&gt; 에서 &lt;b&gt;SELINUX=disabled&lt;/b&gt;로 수정 후 재부팅&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;span style=&quot;text-align: start;&quot;&gt;✔️&lt;/span&gt; 방화벽 해제와 SELinux 비활성화는 실습 편의를 위한 설정이며 운영 환경에서는 다르게 접근해야 함&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음 편으로 이동&amp;nbsp;  &amp;nbsp; &lt;a title=&quot;#5 웹 서버 구축 &amp;mdash; Nginx 설치 &amp;amp; Virtual Hosting&quot; href=&quot;https://su-tudy.tistory.com/154?category=1199903&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;#5 웹 서버 구축 &amp;mdash; Nginx 설치 &amp;amp; Virtual Hosting&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;</description>
      <category>리눅스/Linux 실습</category>
      <author>su-tudy</author>
      <guid isPermaLink="true">https://su-tudy.tistory.com/151</guid>
      <comments>https://su-tudy.tistory.com/151#entry151comment</comments>
      <pubDate>Sat, 23 Nov 2024 13:23:23 +0900</pubDate>
    </item>
    <item>
      <title>#3 사용자 및 권한 관리 &amp;mdash; sudo, chmod, chown</title>
      <link>https://su-tudy.tistory.com/148</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  리눅스에서 권한 관리가 중요한 이유&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;리눅스&lt;/b&gt;는&lt;b&gt; 여러 사용자가 동시에 사용하는 멀티유저 시스템&lt;/b&gt;이다. 그래서 모든 파일과 명령어에 &quot;누가 무엇을 할 수 있는가&quot;를 명확히 정해두는 &lt;b&gt;권한 시스템&lt;/b&gt;이 핵심이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1편에서 root 대신 일반 계정을 만들었는데, 그 계정으로 관리자 명령을 쓰려면 매번 su로 root 전환을 해야 했다. 이번 편은&lt;b&gt; sudo 권한을 부여&lt;/b&gt;해 이 번거로움을 해결하고, &lt;b&gt;chmod와 chown으로 파일 권한과 소유권을 직접 제어&lt;/b&gt;하는 방법을 배우는 과정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;flow&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;sudo 권한 부여&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;파일 권한 구조 이해&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;권한 변경(chmod)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;소유권 변경(chown)&lt;/span&gt;&lt;/div&gt;
&lt;/div&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;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  미리 알아두면 좋은 개념들&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ sudo란?&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;sudo는 &quot;&lt;b&gt;superuser do&lt;/b&gt;&quot;의 약자로, 일반 계정이 명령어 단위로 &lt;b&gt;관리자(root) 권한을 빌려 실행하는 명령어&lt;/b&gt;다. root로 완전히 전환하지 않고도 &lt;b&gt;필요한 명령만 권한을 올려서 실행&lt;/b&gt;할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아무나 쓸 수 있는 게 아니고, &lt;b&gt;&lt;code&gt;/etc/sudoers&lt;/code&gt; 파일에 등록&lt;/b&gt;되어 있거나 &lt;b&gt;wheel 그룹에 속한 사용자&lt;/b&gt;만 사용 가능하다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  root 계정을 자주 사용하 보안 위협에 노출되기 쉽다. sudo는 &quot;필요한 순간에만 권한을 빌린다&quot;는 원칙을 실현하는 방법이다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 파일 권한 구조 / 소유권 구조&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ls -al로 파일 목록을 보면 맨 앞에 10글자 권한 표시가 있고 그 오른쪽에 소유자와 그룹이 표시된다. 이 구조를 이해하면 chmod를 훨씬 쉽게 쓸 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VRu1d/dJMcaaL427x/zyV9wKbkJxa7rTXzkoSekK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VRu1d/dJMcaaL427x/zyV9wKbkJxa7rTXzkoSekK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VRu1d/dJMcaaL427x/zyV9wKbkJxa7rTXzkoSekK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVRu1d%2FdJMcaaL427x%2FzyV9wKbkJxa7rTXzkoSekK%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;558&quot; height=&quot;109&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;144&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-23 182759.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;111&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zTs0T/dJMcafzBzTF/53zZ42zwGRQls9civKEKek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zTs0T/dJMcafzBzTF/53zZ42zwGRQls9civKEKek/img.png&quot; data-alt=&quot;파일 종류 : - 일반파일 ❘ d 디렉토리 ❘ l 링크&amp;amp;nbsp; 권한 : r 읽기 ❘ w 쓰기 ❘ x 실행 ❘ - 권한없음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zTs0T/dJMcafzBzTF/53zZ42zwGRQls9civKEKek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzTs0T%2FdJMcafzBzTF%2F53zZ42zwGRQls9civKEKek%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;634&quot; height=&quot;134&quot; data-filename=&quot;스크린샷 2026-04-23 182759.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;111&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;파일 종류 : - 일반파일 ❘ d 디렉토리 ❘ l 링크&amp;nbsp; 권한 : r 읽기 ❘ w 쓰기 ❘ x 실행 ❘ - 권한없음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 숫자 표기법 (chmod에서 사용)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;권한을 숫자로 표현할 수 있다. 각 자리는 &lt;b&gt;소유자 / 그룹 / 다른 사용자&lt;/b&gt; 순이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-18 141837.png&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;165&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJhPjz/dJMcahdoPMq/Ahpkvr5GkiKkQhoaP1juyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJhPjz/dJMcahdoPMq/Ahpkvr5GkiKkQhoaP1juyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJhPjz/dJMcahdoPMq/Ahpkvr5GkiKkQhoaP1juyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJhPjz%2FdJMcahdoPMq%2FAhpkvr5GkiKkQhoaP1juyk%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;584&quot; height=&quot;114&quot; data-filename=&quot;스크린샷 2026-05-18 141837.png&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;165&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;숫자를 더해서 조합한다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;rwx&amp;nbsp; &lt;span style=&quot;color: #73726c; text-align: start;&quot;&gt;&amp;rarr; 4+2+1 = 7&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #73726c; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;rw-&amp;nbsp; &lt;span style=&quot;color: #73726c; text-align: start;&quot;&gt;&amp;rarr; 4+2+0 = 6&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #73726c; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #73726c; text-align: start;&quot;&gt;r-x&amp;nbsp; &lt;span style=&quot;color: #73726c; text-align: start;&quot;&gt;&amp;rarr; 4+0+1 = 5&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #73726c; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #73726c; text-align: start;&quot;&gt;&lt;span style=&quot;color: #73726c; text-align: start;&quot;&gt;r--&amp;nbsp; &lt;span style=&quot;color: #73726c; text-align: start;&quot;&gt;&amp;rarr; 4+0+0 = 4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  예 : chmod 755 파일명&amp;nbsp; &amp;rarr;&amp;nbsp; 소유자 rwx(7), 그룹 r-x(5), 다른 사용자 r-x(5)&lt;/span&gt;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;toc-1&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  진행한 실습 과정 정리&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ sudo 권한 부여&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;code&gt;/etc/sudoers&lt;/code&gt; 파일&lt;/b&gt;에 직접 계정을 추가하는 방법이다. &lt;b&gt;root 계정으로 전환&lt;/b&gt;한 후 작업한다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;root 계정으로 전환&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;sudoers 파일 열기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;파일 안에서 root 줄 검색 후 아래에 계정 추가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;저장 후 root 로그아운, 동작 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1779083930294&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# root 전환
su

# suddoers 파일 열기
vim etc/sudoers

# vim에서 root 검색
ESC &amp;rarr; /root &amp;rarr; n으로 다음 결과 이동

# a 눌러 입력모드 진입 후 root 줄 아래에 추가
root		ALL=(ALL)	ALL
계정이름	ALL=(ALL)	ALL		 &amp;larr; 이 줄 추가

# 저장 후 종료
:wq!

# root 로그아웃
exit

# 권한 부여 확인 : sudo 없이는 오류, sudo 붙이면 실행됨
updatedb		# 권한 없음 오류 발생
sudo updatedb		# 정상 실행&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-18 150043.png&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;171&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJFUED/dJMcaipP4xa/2ntBKY0Dkc4YWiD5v1ry31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJFUED/dJMcaipP4xa/2ntBKY0Dkc4YWiD5v1ry31/img.png&quot; data-alt=&quot;권한 설정 파일에서 sudo 명령어를 사용할 수 있는 회원 목록에 유저를 추가하는 것&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJFUED/dJMcaipP4xa/2ntBKY0Dkc4YWiD5v1ry31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJFUED%2FdJMcaipP4xa%2F2ntBKY0Dkc4YWiD5v1ry31%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;858&quot; height=&quot;171&quot; data-filename=&quot;스크린샷 2026-05-18 150043.png&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;171&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;권한 설정 파일에서 sudo 명령어를 사용할 수 있는 회원 목록에 유저를 추가하는 것&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  또 다른 방법 : &lt;code&gt;usermod -aG wheel&lt;/code&gt; 계정이름 으로 wheel 그룹에 추가해도 sudo를 사용할 수 있다. CentOS 7에서는 wheel그룹이 기본적으로 sudo 권한을 가진다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 파일 권한 확인 및 변경 (chmod)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1779084456674&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 파일 권한 확인
ls -al

# 숫자 표기법으로 권한 변경
chmod 755 파일명		# 소유자 rwx, 그룹/기타 r-x
chmod 644 파일명		# 소유자 rw-, 그룹/기타 r--
chmod 600 파일명		# 소유자 rw-, 그룹/기타 ---

# 기호 표기법으로 권한 변경
chmod u+x 파일명		# 소유자에게 실행 권한 추가
chmod g-w 파일명		# 그룹에서 쓰기 권한 제거
chmod o+r 파일명		# 다른 사용자에게 읽기 권한 추가
chmod a+x 파일명		# 모든 사용자에게 실행 권한 추가

# 폴더 하위 전체에 적용
chmod -R 755 폴더명&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  u = 소유자 (user)&amp;nbsp; &amp;nbsp;|&amp;nbsp; &amp;nbsp;g = 그룹 (group)&amp;nbsp; &amp;nbsp;|&amp;nbsp; &amp;nbsp;o = 다른 사용자 (other)&amp;nbsp; &amp;nbsp;|&amp;nbsp; &amp;nbsp;a = 전체 (all)&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 소유권 변경 (chown)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1779084625845&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 소유자만 변경
chown 새소유자 파일명

# 소유자와 그룹 함께 변경
chown 새소유자:새그룹 파일명

# 그룹만 변경
chown :새그룹 파일명

# 하위 폴더 전체 소유권 변경
chown -R 소유자:그룹 폴더명&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;⚠️&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;오류 / 주의&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;warn-box&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;b&gt;  주의 &amp;mdash; chown은 root만 실행 가능&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 소유권 변경은 관리자 권한이 필요하다. 일반 계정에서는&lt;code&gt;sudo chown ...&lt;/code&gt;으로 실행해야 한다. &lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;warn-box&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;b&gt;  주의 &amp;mdash; sudoers 파일 수정 시&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;code&gt;/etc/sudoers&lt;/code&gt;는 문법 오류가 생기면 &lt;code&gt;sudo&lt;/code&gt; 자체가 동작하지 않는다. 직접 &lt;code&gt;vim&lt;/code&gt;으로 열지 않고 &lt;code&gt;visudo&lt;/code&gt; 명령어를 사용하면 저장 전에 문법 검사를 해줘서 더 안전하다. &lt;/span&gt;&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;h2 id=&quot;toc-1&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  요약&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; text-align: start;&quot;&gt; ✔️ &lt;b&gt;/etc/sudoers&lt;/b&gt; 에 계정을 추가해 &lt;b&gt;sudo 권한&lt;/b&gt;을 부여&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; text-align: start;&quot;&gt; ✔️ 파일 권한은&lt;b&gt; 종류(1) + 소유자(3) + 그룹(3) + 기타(3)&lt;/b&gt;의 10자리 구조임을 이해&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; text-align: start;&quot;&gt; ✔️ &lt;b&gt;chmod&lt;/b&gt;로 숫자 또는 기호 방식으로 &lt;b&gt;파일 권한을 변경&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; text-align: start;&quot;&gt; ✔️&lt;b&gt; chown&lt;/b&gt;으로 파일의 &lt;b&gt;소유자와 그룹을 변경&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음 편으로 이동&amp;nbsp;  &amp;nbsp; &lt;a title=&quot;#4 보안 설정 &amp;mdash; 방화벽(firewalld) &amp;amp; SELinux 비활성화&quot; href=&quot;https://su-tudy.tistory.com/151&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;#4 보안 설정 &amp;mdash; 방화벽(firewalld) &amp;amp; SELinux 비활성화&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;</description>
      <category>리눅스/Linux 실습</category>
      <author>su-tudy</author>
      <guid isPermaLink="true">https://su-tudy.tistory.com/148</guid>
      <comments>https://su-tudy.tistory.com/148#entry148comment</comments>
      <pubDate>Wed, 13 Nov 2024 22:21:10 +0900</pubDate>
    </item>
    <item>
      <title>#2 네트워크 설정 &amp;mdash; 랜카드 자동 활성화 &amp;amp; 고정 IP 변경</title>
      <link>https://su-tudy.tistory.com/143</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  안정적인 서버 접속 환경 만들기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1편에서 가상머신에 PuTTY로 접속했다면, 매번 CentOS를 켤 때마다&lt;code&gt;ifup&lt;/code&gt; &lt;b&gt;명령어를 직접 입력해서 랜카드를 활성화해야 한다.&lt;/b&gt; 서버를 운영하는 입장에서 이건 굉장히 번거로운 일이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;또한 1편에서 설정한 게스트 &lt;b&gt;IP 10.0.2.15&lt;/b&gt;는 &lt;b&gt;DHCP로 자동 할당된 유동 IP&lt;/b&gt;이다. 서버는 IP가 바뀌면 접속 설정을 매번 다시 해야 하므로, &lt;b&gt;고정 IP로 변경해 두는&lt;/b&gt; 것이 기본 원칙이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이번 편에서는 이 두 가지를 설정 파일을 직접 수정하는 방식으로 해결하는 과정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;flow&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;랜카드 자동 활성화&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;고정 IP 확인&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;설정 파일 수정&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;포트포워딩 업데이트&lt;/span&gt;&lt;/div&gt;
&lt;/div&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;h2 id=&quot;toc-1&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  미리 알아두면 좋은 개념들&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 고정 IP vs 유동 IP&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 38px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 21px; text-align: center;&quot;&gt;&lt;b&gt;고정 IP&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333; text-align: start;&quot;&gt;(static IP)&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333; text-align: start;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #ffffff; text-align: start; background-color: #409d00;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #ffffff; text-align: center;&quot;&gt;&amp;rarr;&lt;/span&gt; &lt;/span&gt; 서버에 권장&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 21px; text-align: center;&quot;&gt;&lt;b&gt; 유동 IP&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Dynamic IP)&lt;/span&gt; &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333; text-align: start;&quot;&gt;&lt;b&gt;항상 같은 IP를 사용&lt;/b&gt;한다. 세팅이 다소 번거롭고 비용이 더 들지만, 안정적인 서비스 운영에 필수다. 웹서버, DB 서버 등에 사용한다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333; text-align: start;&quot;&gt;&lt;b&gt;제한된 IP를 여러 호스트가 번갈아 사용&lt;/b&gt;한다. 경제적이지만 IP가 수시로 바뀌어 안정적인 서비스가 어렵다. 일반 가정용 인터넷에 주로 사용한다.&amp;nbsp;&lt;/span&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 네트워크 관련 용어 정리&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;서브넷 마스크&lt;/b&gt; : IP 주소를 네트워크 영역과 호스트 영역으로 나누는 숫자 조합.&lt;span style=&quot;color: #1a5490;&quot;&gt; ( /24 = 255.255.255.0 )&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;게이트웨이&lt;/b&gt; : 외부 네트워크로 나가는 출구. 패킷을 어디로 보낼지 모를 때 우선 거치는 경로다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;DHCP&lt;/b&gt; : IP 주소를 자동으로 할당해 주는 프로토콜. 유동 IP 방식에서 사용한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;DNS&lt;/b&gt; : 도메인 이름을 IP 주소로 변환해 주는 서비스&lt;span style=&quot;color: #1a5490;&quot;&gt; ( 구글 공개 DNS : 8.8.8.8 )&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;라우팅&lt;/b&gt; : 패킷이 목적지까지 가는 경로를 결정하는 것. 라우팅 테이블에 경로 정보가 담겨 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;vim 편집기&lt;/b&gt; : 터미널 기반 텍스트 편집기이다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;h2 id=&quot;toc-1&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  진행한 실습 과정 정리&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 랜카드 자동 활성화&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;네트워크 설정 파일에서 &lt;b&gt;ONBOOT 값을 yes&lt;/b&gt;로 바꾸면, 가상머신이 부팅될 때 &lt;b&gt;자동으로 랜카드가 활성화&lt;/b&gt;된다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;PuTTY로 접속 후 root 계정으로 전환&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;네트워크 설정 파일 위치 검색&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;설정 파일을 vim으로 열기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;code&gt;ONBOOT=no&lt;/code&gt; &lt;span style=&quot;text-align: start;&quot;&gt;&amp;rarr; &lt;code&gt;ONBOOT=yes&lt;/code&gt;&lt;/span&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;로 수정 후 저장&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;네트워크 재시작 및 상태 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1776584030610&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# root 계정으로 전환
su

# 설정 파일 위치 검색 (결과가 없으면 updatedb 먼저 실행)
updatedb
locate enp0s3

# 설정파일 열기
sudo vim /etc/sysconfig/network-scripts/ifcfg-enp0s3&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-19 163921.png&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvph7R/dJMcafTQGoD/zlkwkZS7kTD7VNOkb5kAK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvph7R/dJMcafTQGoD/zlkwkZS7kTD7VNOkb5kAK0/img.png&quot; data-alt=&quot;네트워크 설정 파일 검색&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvph7R/dJMcafTQGoD/zlkwkZS7kTD7VNOkb5kAK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbvph7R%2FdJMcafTQGoD%2FzlkwkZS7kTD7VNOkb5kAK0%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;884&quot; height=&quot;142&quot; data-filename=&quot;스크린샷 2026-04-19 163921.png&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;142&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;네트워크 설정 파일 검색&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1776584190529&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 수정할 항목
ONBOOT=no  &amp;rarr;  ONBOOT=yes

# 저장 후 네트워크 재시작
systemctl restart network

# 정상 적용 확인 &amp;rarr; active (exited)가 보이면 성공
systemctl status network&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  vim에서 &lt;code&gt;a&lt;/code&gt; 를 누르면 입력모드(INSERT)로 전환된다. 수정 후 &lt;code&gt;ESC&lt;/code&gt;&amp;nbsp; &amp;rarr; &lt;code&gt;:wq!&lt;/code&gt; 를 입력하면 저장하고 종료한다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 고정 IP 변경&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;같은 설정 파일에서 &lt;b&gt;BOOTPROTO를 dhcp에서 static으로 바꾸고 IP 정보를 직접 입력&lt;/b&gt;한다. 변경 전에 현재 IP와 게이트웨이 주소를 먼저 확인해 둔다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;현재 IP 주소와 서브넷 마스크 확인&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;게이트웨이 주소 확인&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;설정 파일 열어서 쉉&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;네트워크 재시작&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;VirtualBox 포트포워딩의 게스트 IP를 새 고정 IP로 변경&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;PuTTY 재접속 후 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1776585150037&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# IP 주소 및 서브넷 마스크 확인
# 서브넷 마스크 예 : /24 &amp;rarr; 255.255.255.0  /8 &amp;rarr; 255.0.0.0
ip addr

# 게이트웨이 주소 확인
ip route&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0C12G/dJMcaijeQPA/XIMKMKN8U7bHeaKAKD7Z31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0C12G/dJMcaijeQPA/XIMKMKN8U7bHeaKAKD7Z31/img.png&quot; data-alt=&quot;ip 주소와 서브넷 마스크 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0C12G/dJMcaijeQPA/XIMKMKN8U7bHeaKAKD7Z31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0C12G%2FdJMcaijeQPA%2FXIMKMKN8U7bHeaKAKD7Z31%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;874&quot; height=&quot;170&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;170&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ip 주소와 서브넷 마스크 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-19 170611.png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;78&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crdKUQ/dJMcaaye71S/LT2w0kUKeCNkJeZ78GWC40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crdKUQ/dJMcaaye71S/LT2w0kUKeCNkJeZ78GWC40/img.png&quot; data-alt=&quot;게이트웨이 주소 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crdKUQ/dJMcaaye71S/LT2w0kUKeCNkJeZ78GWC40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrdKUQ%2FdJMcaaye71S%2FLT2w0kUKeCNkJeZ78GWC40%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;883&quot; height=&quot;78&quot; data-filename=&quot;스크린샷 2026-04-19 170611.png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;78&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;게이트웨이 주소 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1776585905169&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 설정 파일 열기
sudo vim /etc/sysconfig/network-scripts/ifcfg-enp0s3

# 수정할 항목
BOOTPROTO=dhcp  &amp;rarr;  BOOTPROTO=static

# 아래 내용 추가 (파일 맨 아래에 입력)
IPADDR=원하는_고정_IP_주소
GATEWAY=ip_route로_확인한_주소
NETMASK=255.255.255.0
DNS1=8.8.8.8
DNS2=8.8.4.4&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776585916244&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 네트워크 재시작 (설정 파일 변경 후 반드시 실행)
systemctl restart network

# IP 변경 확인
ip addr&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;note-box&quot;&gt; 고정 IP를 변경했다면 VirtuarBox &amp;rarr; 포트포워딩 설정에서 게스트 IP도 새 IP로 바꿔줘야 PuTTY 재접속이 된다.&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-19 170856.png&quot; data-origin-width=&quot;879&quot; data-origin-height=&quot;499&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YVeOj/dJMcaaLLWme/kBk9VIRrmJrYAcQetuIpJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YVeOj/dJMcaaLLWme/kBk9VIRrmJrYAcQetuIpJ1/img.png&quot; data-alt=&quot;포트포워딩 업데이트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YVeOj/dJMcaaLLWme/kBk9VIRrmJrYAcQetuIpJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYVeOj%2FdJMcaaLLWme%2FkBk9VIRrmJrYAcQetuIpJ1%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;879&quot; height=&quot;499&quot; data-filename=&quot;스크린샷 2026-04-19 170856.png&quot; data-origin-width=&quot;879&quot; data-origin-height=&quot;499&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;포트포워딩 업데이트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-19 171105.png&quot; data-origin-width=&quot;878&quot; data-origin-height=&quot;167&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcTkQH/dJMcahKTYhl/VgqLRBSXjK9p9BlCi39u0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcTkQH/dJMcahKTYhl/VgqLRBSXjK9p9BlCi39u0K/img.png&quot; data-alt=&quot;IP 변경 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcTkQH/dJMcahKTYhl/VgqLRBSXjK9p9BlCi39u0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdcTkQH%2FdJMcahKTYhl%2FVgqLRBSXjK9p9BlCi39u0K%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;878&quot; height=&quot;167&quot; data-filename=&quot;스크린샷 2026-04-19 171105.png&quot; data-origin-width=&quot;878&quot; data-origin-height=&quot;167&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;IP 변경 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;⚠️&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;오류 / 주의&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;warn-box&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;b&gt;  주의 &amp;mdash; systemctl restart network를 빠뜨리면&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 설정 파일을 수정해도 재시작을 하지 않으면 변경사항이 적용되지 않는다. 수정 후에는 반드시 네트워크를 재시작해야 한다. &lt;/span&gt;&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;h2 id=&quot;toc-1&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  요약&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;✔️ ONBOOT=yes로 바꿔 부팅 시 &lt;b&gt;랜카드가 자동 활성화&lt;/b&gt;되도록 설정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; ✔️ BOOTPROTO=static으로 바꾸고 IP, 게이트웨이, DNS를 직접 입력해 &lt;b&gt;고정 IP 설정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; ✔️ &lt;b&gt;설정 파일 수정 후&lt;/b&gt;에는 &lt;b&gt;반드시 재시작&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; ✔️ 고정 IP 변경 후 VirtuarBox &lt;b&gt;포트포워딩&lt;/b&gt; 게스트 IP도 함께 업데이트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음 편으로 이동&amp;nbsp;  &amp;nbsp; &lt;a title=&quot;사용자 및 권한 관리 &amp;mdash; sudo, chmod, chown&quot; href=&quot;https://su-tudy.tistory.com/148?category=1199903&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;#3 사용자 및 권한 관리 &amp;mdash; sudo, chmod, chown&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;</description>
      <category>리눅스/Linux 실습</category>
      <author>su-tudy</author>
      <guid isPermaLink="true">https://su-tudy.tistory.com/143</guid>
      <comments>https://su-tudy.tistory.com/143#entry143comment</comments>
      <pubDate>Mon, 4 Nov 2024 22:00:39 +0900</pubDate>
    </item>
    <item>
      <title>#1 가상환경 구축 &amp;mdash; VirtualBox + CentOS + PuTTY</title>
      <link>https://su-tudy.tistory.com/142</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  서버를 직접 구축하기 위한 출발점&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;리눅스 서버를 직접 구축하고 운영하는 과정을 배우는 실습 과정이다. 웹 서버, FTP 서버, 데이터베이스 서버까지 실제로 설치하고 설정하는 것을 목표로 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;첫 단계는 내 Windows 컴퓨터 안에 리눅스 가상머신을 만들어야 한다. 실제 서버 장비 없이도 실습할 수 있도록 &lt;b&gt;VirtualBox로 가상 서버&lt;/b&gt;를 띄우고,&lt;b&gt; PuTTY로 원격 접속&lt;/b&gt;하는 환경을 세팅하는 과정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;flow&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;VirtualBox 설치&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;CentOS 설치&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;포트포워딩 설정&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-arrow&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;PuTTY 접속&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: right;&quot; 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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  실습 환경 및 사용 도구&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.5193%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 62.8682%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 19.6124%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;버전&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.5193%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;VirtualBox&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 62.8682%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Oracle에서 만든 무료 가상머신 소프트웨어. Windows 위에 리눅스를 설치할 수 있개 해준다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 19.6124%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 7.0.14 &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.5193%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;CentOS 7&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 62.8682%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Red Hat 계열의 리눅스 배포판. 서버 환경에서 많이 쓰인다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 19.6124%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 7 (ISO: 2009) &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.5193%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;PuTTY&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 62.8682%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;SSH 원격 접속 클라이언트. 가상머신에 터미널로 접속할 수 있게 해주는 프로그램이다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 19.6124%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 0.80 (64-bit) &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.5193%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;D2Coding 폰트&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 62.8682%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;개발자용 폰트. 숫자 0과 영어 o를 구분해줘서 가독성이 좋다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 19.6124%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 1.3.2 &lt;/span&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  미리 알아두면 좋은 개념들&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ &lt;/b&gt;&lt;b&gt;IP와 PORT&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;IP (Internet Protocol)&lt;/b&gt; : 인터넷상에서 컴퓨터를 구별하는 주소&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;PORT&lt;/b&gt; : 같은 IP 안에서 어떤 프로그램(서비스)에 연결할지를 구별하는 번호.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;루프백 IP (127.0.0.1)&lt;/b&gt; : 자기 자신을 가리키는 예약된 IP 주소. localhost라고도 부른다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑&amp;nbsp;포트포워딩이란?&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;외부(호스트 PC)에서 가상머신 안으로 접속할 수 있도록 연결 통로를 만들어주는 설정&lt;/b&gt;이다. 가상 머신은 독립된 네트워크 안에 있기 때문에, 포트포워딩 없이는 PuTTY로 접속이 불가능하다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑&amp;nbsp;왜 root 말고 별도 계정을 만드는가?&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;root 계정은 모든 권한을 가진 최고 관리자 계정이다. 자주 사용하면 보안에 취약해지기 때문에, 일반 작업은 별도 계정으로 진행하고 root는 꼭 필요한 경우에만 사용하는 것이 원칙이다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  진행한 실습 과정 정리&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ VirtualBox 설치 및 초기 세팅&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;VirtualBox 설치 후 실행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;새로 만들기 : 이름 &amp;rarr; 자유, 종류 &amp;rarr; Linux, 버전 &amp;rarr; Red Hat (64-bit)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;메모리, 디스크 설정 : 디스크 크기는 32GB 권장&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;생성 후 저장소 설정: 저장소 &amp;rarr; 컨트롤러 비어있음 &amp;rarr; 디스크 파일 선택&amp;nbsp; &amp;rarr; CentOS ISO 파일 연결&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-14 191402.png&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;406&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H59FE/dJMcacpdTUI/qDhh5h47l5slcs3sBblEkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H59FE/dJMcacpdTUI/qDhh5h47l5slcs3sBblEkK/img.png&quot; data-alt=&quot;새로만들기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H59FE/dJMcacpdTUI/qDhh5h47l5slcs3sBblEkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH59FE%2FdJMcacpdTUI%2FqDhh5h47l5slcs3sBblEkK%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;860&quot; height=&quot;397&quot; data-filename=&quot;스크린샷 2026-04-14 191402.png&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;406&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;새로만들기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;410&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xGfb4/dJMcaaSuzBm/isyfEUssU3A19mLRVtXUK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xGfb4/dJMcaaSuzBm/isyfEUssU3A19mLRVtXUK0/img.png&quot; data-alt=&quot;저장소 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xGfb4/dJMcaaSuzBm/isyfEUssU3A19mLRVtXUK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxGfb4%2FdJMcaaSuzBm%2FisyfEUssU3A19mLRVtXUK0%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;860&quot; height=&quot;425&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;410&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;저장소 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ CentOS 설치&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;가상머신 시작 : 언어 선택 화면에서 한국어 선택&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;소프트웨어 선택 : 기본 웹 서버 선택&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;설치 대상 확인 &amp;rarr; 설치 시작&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;설치 중 Root 암호 설정 (기억할 수 있는 것으로 설정)&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  탭(Tab)과 방향키로 화면 내 커서를 이동할 수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0VEQw/dJMcagd54GK/ARYKTUEHfZNAg5xqHKnmL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0VEQw/dJMcagd54GK/ARYKTUEHfZNAg5xqHKnmL0/img.png&quot; data-alt=&quot;소프트웨어 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0VEQw/dJMcagd54GK/ARYKTUEHfZNAg5xqHKnmL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0VEQw%2FdJMcagd54GK%2FARYKTUEHfZNAg5xqHKnmL0%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;860&quot; height=&quot;581&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;소프트웨어 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-14 193820.png&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;592&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lOpn6/dJMcaaZecos/AiIL7Yx3BVWtZcGQJfGHaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lOpn6/dJMcaaZecos/AiIL7Yx3BVWtZcGQJfGHaK/img.png&quot; data-alt=&quot;암호 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lOpn6/dJMcaaZecos/AiIL7Yx3BVWtZcGQJfGHaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlOpn6%2FdJMcaaZecos%2FAiIL7Yx3BVWtZcGQJfGHaK%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;860&quot; height=&quot;581&quot; data-filename=&quot;스크린샷 2026-04-14 193820.png&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;592&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;암호 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 계정 생성 및 랜카드 활성화&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;가상머신 시작 :&amp;nbsp; 떼낼 수 있도록 시작&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;계정 생성과 랜카드 활성화&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1776164283682&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 계정 생성
useradd 계정이름

# 비밀번호 설정
passwd 계정이름
비밀번호 두번 입력

# 랜카드 종류 확인
ip addr

# 랜카드 활성화
ifup 랜카드명&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;note-box&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  랜카드를 활성화해야 PuTTY로 접속이 가능하다. CentOS에서의 작업은 여기까지이고, 이후 모든 작업은 PuTTY로 접속하여 진행한다.&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;304&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/usDWt/dJMcab5uf9c/gRJBtO1qRya8e63XCttmA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/usDWt/dJMcab5uf9c/gRJBtO1qRya8e63XCttmA1/img.png&quot; data-alt=&quot;랜카드 활성화&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/usDWt/dJMcab5uf9c/gRJBtO1qRya8e63XCttmA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FusDWt%2FdJMcab5uf9c%2FgRJBtO1qRya8e63XCttmA1%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;860&quot; height=&quot;294&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;304&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;랜카드 활성화&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ 포트포워딩 설정&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;VirtualBox &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 해당 가상머신 설정 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 네트워크 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 고급 &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 포트포워딩&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;+ 버튼으로 규칙 추가&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;아래와 같이 입력 후 확인&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1776164873363&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;프로토콜 : TCP		&amp;rarr; 통신 방식
호스트 IP : 0.0.0.0	&amp;rarr; 접속을 허용할 호스트(내 PC)의 IP (0.0.0.0 = 모든 주소 허용)
호스트 포트 : 2222	&amp;rarr; 외부(호스트 PC)에서 접속할 때 사용하는 포트(임의 설정)
게스트 IP : 10.0.2.15	&amp;rarr; 가상머신(CentOS)의 내부 IP
게스트 포트 : 22	&amp;rarr; 가상머신에서 실행 중인 서비스(프로세스)의 포트&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-14 201753.png&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;499&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMkNnH/dJMcaiXd7yN/2X0timVkYX5EKOqZiyVZJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMkNnH/dJMcaiXd7yN/2X0timVkYX5EKOqZiyVZJK/img.png&quot; data-alt=&quot;포트포워딩&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMkNnH/dJMcaiXd7yN/2X0timVkYX5EKOqZiyVZJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMkNnH%2FdJMcaiXd7yN%2F2X0timVkYX5EKOqZiyVZJK%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;877&quot; height=&quot;499&quot; data-filename=&quot;스크린샷 2026-04-14 201753.png&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;499&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;포트포워딩&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;❑ PuTTY 설치 및 접속&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;PuTTY 설치 후 실행&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;폰트 설정 : Window &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; Appearance &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; Font Settings &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; D2Coding 폰트로 변경&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;설정 저장 : Session &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; Default Settings &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; save&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;접속 : Host Name &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 계정이름@127.0.0.1, Port &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr; 2222(포트포워딩에 설정한 호스트 포트)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;Open &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr;&lt;/span&gt; Accept &lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&amp;rarr;&lt;/span&gt; 비밀번호 입력 후 접속&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-14 202558.png&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dXiaE5/dJMcaadSK5V/m3ajwyvLugMQUfgyYKIMq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dXiaE5/dJMcaadSK5V/m3ajwyvLugMQUfgyYKIMq0/img.png&quot; data-alt=&quot;PuTTY 접속&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dXiaE5/dJMcaadSK5V/m3ajwyvLugMQUfgyYKIMq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdXiaE5%2FdJMcaadSK5V%2Fm3ajwyvLugMQUfgyYKIMq0%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;860&quot; height=&quot;837&quot; data-filename=&quot;스크린샷 2026-04-14 202558.png&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;650&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PuTTY 접속&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-14 202729.png&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cL44Al/dJMcaf7iyVL/YlhJlWCh1oJm4b556LFSvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cL44Al/dJMcaf7iyVL/YlhJlWCh1oJm4b556LFSvK/img.png&quot; data-alt=&quot;접속 후 로그인 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cL44Al/dJMcaf7iyVL/YlhJlWCh1oJm4b556LFSvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcL44Al%2FdJMcaf7iyVL%2FYlhJlWCh1oJm4b556LFSvK%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;860&quot; height=&quot;150&quot; data-filename=&quot;스크린샷 2026-04-14 202729.png&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;접속 후 로그인 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&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;h2 id=&quot;toc-0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;⚠️ &lt;/span&gt;오류 / 주의&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;warn-box&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;b&gt;  오류 &amp;mdash; VirtualBox 설치가 안 되는 경우&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; Microsoft Visual C++ 2019 재배포 패키지가 없어서 발생하는 오류다. VirtualBox는 C++ 기반으로 만들어진 프로그램으로, 실행에 필요한 Visual C++ 런타임 라이브러리가 없을 경우 설치 과정에서 오류가 발생한다. VirtualBox 설치 전에 먼저 설치하면 해결된다. &lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;warn-box&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;b&gt;  오류 &amp;mdash; PuTTY 접속이 안 되는 경우&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 1. VirtualBox 가상머신이 실행 중인지 확인&lt;br /&gt;2. CentOS에서 랜카드가 활성화되어 있는지 확인&lt;br /&gt;3. 포트포워딩 설정이 올바른지 다시 확인&lt;br /&gt;4. 위 과정을 다 해도 안 된다면 호스트 포트 번호를 바꿔서 재시도 &lt;/span&gt;&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;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;  요약&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;✔️ VirtualBox에 &lt;b&gt;CentOS 7을 설치&lt;/b&gt;해 가상 서버 환경을 구축&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;✔️ &lt;b&gt;포트포워딩&lt;/b&gt;으로 외부(호스트)에서 가상머신으로 접속하는 통로 열기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;✔️ PuTTY로 가상머신에 &lt;b&gt;SSH 원격 접속&lt;/b&gt;하는데 성공&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;✔️ &lt;b&gt;Root 대신 별도 계정&lt;/b&gt;을 만들어 보안 원칙 지키기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음 편으로 이동&amp;nbsp;  &amp;nbsp; &lt;a title=&quot;#2 네트워크 설정 &amp;mdash; 랜카드 자동 활성화 &amp;amp; 고정 IP 변경&quot; href=&quot;https://su-tudy.tistory.com/143?category=1199903&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;#2&amp;nbsp;네트워크&amp;nbsp;설정&amp;nbsp;&amp;mdash;&amp;nbsp;랜카드&amp;nbsp;자동&amp;nbsp;활성화&amp;nbsp;&amp;amp;&amp;nbsp;고정&amp;nbsp;IP&amp;nbsp;변경&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;/i&gt;&lt;/blockquote&gt;</description>
      <category>리눅스/Linux 실습</category>
      <author>su-tudy</author>
      <guid isPermaLink="true">https://su-tudy.tistory.com/142</guid>
      <comments>https://su-tudy.tistory.com/142#entry142comment</comments>
      <pubDate>Sat, 2 Nov 2024 23:04:06 +0900</pubDate>
    </item>
  </channel>
</rss>