<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>haryun.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Tue, 30 May 2023 13:42:02 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>haryun.log</title>
            <url>https://velog.velcdn.com/images/haryun_209/profile/33801761-d162-490f-90ea-0fb07af0ede7/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. haryun.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/haryun_209" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[vagrant] vagrant 시작하기]]></title>
            <link>https://velog.io/@haryun_209/vagrant-vagrant-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@haryun_209/vagrant-vagrant-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 30 May 2023 13:42:02 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>vagrant</strong>
<em>- 스크립트 기반의 가상 머신 구축 솔루션</em>
<em>- virtual box, VMware 지원</em>
<a href="https://developer.hashicorp.com/vagrant/docs/installation">vagrant Docs</a></p>
</blockquote>
<h3 id="1-install">1. install</h3>
<pre><code class="language-bash">$ brew install vagrant</code></pre>
<p>🍻홈브루로 설치 후 버전 확인~ (하이퍼바이저는 vbox7.0 버전으로 진행)
<img src="https://velog.velcdn.com/images/haryun_209/post/7a9533cf-3ee1-41a2-8f28-9b23eaf8ae42/image.png" alt=""></p>
<h3 id="2-command">2. command</h3>
<pre><code class="language-bash">$ vagrant init --기본 파일 생성
               --디렉토리에 Vagrantfile 생성
$ vagrant up --Vagrantfile 확인 후 프로비저닝
$ vagrant ssh --vm 원격 접속
$ vagrant halt --vm 종료
$ vagrant destroy --vm 삭제
$ vagrant provision --변경사항 동기화</code></pre>
<h3 id="3-test">3. test</h3>
<p>_ 🎈 vagrant box는 <a href="https://app.vagrantup.com/boxes/search">여기</a>서 확인 가능_</p>
<h4 id="3-1-vagrant-init">3-1) vagrant init</h4>
<pre><code class="language-bash">$ vagrant init</code></pre>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/54996d2a-8b78-4d38-9e00-6071e63e7e13/image.png" alt="">
init 실행 후 생성된 파일을 열어보면,
<img src="https://velog.velcdn.com/images/haryun_209/post/06bf71f3-2e6c-40c0-b05f-42607286ab0f/image.png" alt="">
기본 설정만 있는 것을 확인 할 수 있다! <em>(첫줄의 mode는 작성된 언어를 의미)</em></p>
<h4 id="3-2-vagrantfile-수정">3-2) Vagrantfile 수정</h4>
<p><code>config.vm.box = &quot;base&quot;</code> 해당 부분이 설치할 os 이미지를 지정하는 구문이다. 클라우드에 접속하여 하단의 이미지로 설치를 진행해보자.
<img src="https://velog.velcdn.com/images/haryun_209/post/df99b473-e771-4a41-89a9-761cbf1b37db/image.png" alt=""></p>
<p>기본 파일의 주석을 제거하고 필요한 부분만 남겨 설정을 마친다.</p>
<pre><code class="language-ruby">Vagrant.configure(&quot;2&quot;) do |config|
  config.vm.box = &quot;centos/7&quot;
  config.vm.box_check_update = false
  config.vm.network &quot;forwarded_port&quot;, guest: 22, host: 2200, host_ip: &quot;127.0.0.1&quot;, auto_correct: true, id: &quot;ssh&quot;
  config.vm.network &quot;private_network&quot;, ip: &quot;192.168.33.10&quot;
  config.vm.network &quot;public_network&quot;
  config.vm.synced_folder &quot;../data&quot;, &quot;/vagrant_data&quot;, disabled: true

  config.vm.provider &quot;virtualbox&quot; do |vb|
     vb.cpus = 2
     vb.memory = &quot;1024&quot;
  end
end</code></pre>
<p>이후 <code>vagrant up</code> 명령으로 생성!
<img src="https://velog.velcdn.com/images/haryun_209/post/1ae20350-4ae2-472e-aee1-44ec5ee68be3/image.png" alt=""></p>
<p><em>(⬆️ 중간에 네트워크 인터페이스를 지정해줘야함)</em></p>
<p>설치시 <code>Installing Virtualbox Guest Additions 7.0.6 - guest version is unknown</code> 라는 에러가 출력되는데, GA가 없어서 발생하는 것이라고 한다. 당장은 필요 없으니 스킵</p>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/e9e8675e-d019-4a4c-b993-b0d8314e1241/image.png" alt="">조금 기다리면 필요한 패키지가 설치되고 vm이 실행된 것을 확인 할 수 있다.</p>
<h4 id="3-3-vm-접속">3-3) vm 접속</h4>
<pre><code class="language-bash">$ vagrant ssh</code></pre>
<p>명령으로 접속하여 확인해본다.
<img src="https://velog.velcdn.com/images/haryun_209/post/eb8e33a2-282d-4a54-8f67-36afa60e07c3/image.png" alt=""><img src="https://velog.velcdn.com/images/haryun_209/post/a5781a38-88d0-4369-b547-5073db7b3b39/image.png" alt="">
os 버전도 일치하고, ip도 맞게 들어갔다.
vagrant로 vm 간단 구축 완료~~✌️</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] set -exuo pipefail]]></title>
            <link>https://velog.io/@haryun_209/Linux-shell-script-5</link>
            <guid>https://velog.io/@haryun_209/Linux-shell-script-5</guid>
            <pubDate>Tue, 28 Feb 2023 07:30:00 GMT</pubDate>
            <description><![CDATA[<h3 id="set--exuo-pipefail">set -exuo pipefail</h3>
<blockquote>
<p>옵션을 통해 쉘 스크립트의 오동작, 버그를 줄이는 명령.</p>
</blockquote>
<ul>
<li><code>e</code> : 첫번째 실행 실패시 쉘 스크립트 종료 (없는 파일, 디렉토리, 오타 등의 오류)</li>
<li><code>x</code> : 맨 윗줄 #! 뒤에 작성해 사용가능, 디버깅시 주로 사용 (변수값 확인시 유용)</li>
<li><code>u</code> : 정의되지 않은 변수 사용시 에러메세지 출력</li>
<li><code>o</code> : &#39;-o: on&#39; &#39;+o: off&#39; 앞에 작성한 옵션 사용여부 지정</li>
<li><code>pipefail</code> : 모든 명령이 true인 경우 true 출력</li>
</ul>
<h3 id=""></h3>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] shell script 4]]></title>
            <link>https://velog.io/@haryun_209/Linux-shell-script-4</link>
            <guid>https://velog.io/@haryun_209/Linux-shell-script-4</guid>
            <pubDate>Tue, 21 Feb 2023 11:15:46 GMT</pubDate>
            <description><![CDATA[<h2 id="bash-shell-script">bash shell script</h2>
<blockquote>
<p>inflearn - linux bash shell script(실전편)</p>
</blockquote>
<h3 id="🖊️-mariabackup">🖊️ mariabackup</h3>
<p>📌 mariaDB의 백업을 간단히 할 수 있는 유틸리티.</p>
<pre><code class="language-bash">$ mariabackup 
    --backup 
    --no-lock 
    --target-dir=&#39;백업 파일 저장경로&#39;
    --host=&#39;host ip&#39; 
    --port=3306 
    --user=&#39;username&#39; 
    --password=&#39;password&#39; </code></pre>
<p>📌 <strong>온라인 백업</strong>의 경우 실행중인 서비스의 업데이트 내용(백업중에 변경/생성된 내용)을 포함하기 위해 백업에 <code>ib_logfile0</code>을 포함해야한다.</p>
<pre><code class="language-bash">$ mariadbbackup
    --prepare
    --target-dir=&#39;백업 파일 저장경로&#39;</code></pre>
<p>해당 명령으로 진행한다!</p>
<p>📌 복구</p>
<pre><code class="language-bash">$ mariabackup 
    --move-back
    --target-dir=&#39;백업한 디렉토리 경로&#39;
    --data-dir=&#39;복구할 디렉토리 경로&#39;
    --user=&#39;username&#39;
    --password=&#39;password&#39;
</code></pre>
<h3 id="🖊️-backup-script">🖊️ backup script</h3>
<blockquote>
<p><strong>백업 정책</strong></p>
</blockquote>
<ul>
<li>web-db-storage의 구조</li>
<li>각각 소스, 서버 설정파일 / 데이터, 서버 설정파일 </li>
<li>매일 1회 실행</li>
<li>스토리지 서버의 <code>/BACKUP</code> 디렉토리에 호스트별로 저장</li>
<li>작업 완료 후 텔레그램으로 메세지 전송</li>
</ul>
<p><em>❗️<code>tar</code> 명령에서 <code>p: 소유자권한 유지</code> <code>P: 절대경로 유지</code> 옵션 사용가능!</em></p>
<h3 id="📌-mountnfs-access-denied-by-server-while-mounting--error">📌 mount.nfs: access denied by server while mounting ... error</h3>
<p>웹 서버의 백업 스크립트를 작성하고 실행하는데 마운트 지점에서 자꾸 에러가 났다. 
<img src="https://velog.velcdn.com/images/haryun_209/post/739aca83-73ae-4d4e-89a2-ec92625cc4f3/image.png" alt="">
좀 찾아보니 <code>/etc/exports</code> 파일이 원인인듯 했다. vBOX의 IP 대역 이슈때문에 파일을 다 수정했었는데 저 파일은 확인을 못해서 발생한 에러였다.. <a href="https://www.thegeekdiary.com/mount-nfs-access-denied-by-server-while-mounting-how-to-resolve/">참고링크</a></p>
<p>스토리지 서버에서 해당 파일을 수정해주고 다시 실행하니 정상적으로 작동하게 되었다~~
<img src="https://velog.velcdn.com/images/haryun_209/post/4c43f6d2-5d2d-4c19-a76b-11388d66752c/image.jpeg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] shell script 3]]></title>
            <link>https://velog.io/@haryun_209/Linux-shell-script-3</link>
            <guid>https://velog.io/@haryun_209/Linux-shell-script-3</guid>
            <pubDate>Mon, 20 Feb 2023 06:08:47 GMT</pubDate>
            <description><![CDATA[<h2 id="bash-shell-script">bash shell script</h2>
<blockquote>
<p>inflearn - linux bash shell script(실전편)</p>
</blockquote>
<h3 id="✏️-디스크-파티션-사용량-감시-스크립트">✏️ 디스크 파티션 사용량 감시 스크립트</h3>
<pre><code class="language-bash">$ df -h | awk &#39;{gsub(&quot;%&quot;, &quot;&quot;); USE=$5; MNT=$6; if ( USE &gt; 10 ) print USE, MNT}&#39; | column -t | grep -v &quot;^[A-Z]&quot;</code></pre>
<p>파이프라인으로 쭉 작성한 명령을 스크립트로 다시 작성한다.</p>
<pre><code class="language-shell">TEXT=&quot;$(df -h | \
        awk &#39;{
                gsub(&quot;%&quot;,&quot;&quot;);
                USE=$5;
                MNT=$6;
                if ( USE &gt; 80 )
                        print MNT,&quot;파티션이 &quot;,USE,&quot;%를 사용중입니다.&quot;
                }&#39; |\
        grep -v &quot;^[A-Z]&quot;)&quot;


# 텔레그램 메세지 전송 스크립트 작성 ... </code></pre>
<h4 id="🖍️-warnig-shell-level-1000-too-high-resetting-to-1--error">🖍️ warnig: shell level (1000) too high, resetting to 1 ... error</h4>
<p>스크립트를 실행하는데 해당 에러가 떴다....
재귀호출로 인해 발생하는 에러라고,,, <a href="https://unix.stackexchange.com/questions/369932/bash-warning-shell-level-1000-too-high-resetting-to-1">여기</a>서 확인해보니까 스크립트에서 텔레그램 실행 파일을 잘못 작성해놨었다 ㅋㅅㅋ..</p>
<h4 id="crontab-스케줄러에-추가">crontab 스케줄러에 추가</h4>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/8749e499-d995-4a11-96ef-be146be53c4c/image.png" alt="">
각각의 스크립트를 정각과 30분마다 실행하도록 등록했다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] shell script 2]]></title>
            <link>https://velog.io/@haryun_209/Linux-shell-script-2</link>
            <guid>https://velog.io/@haryun_209/Linux-shell-script-2</guid>
            <pubDate>Mon, 20 Feb 2023 05:10:13 GMT</pubDate>
            <description><![CDATA[<h2 id="bash-shell-script">bash shell script</h2>
<blockquote>
<p>inflearn - linux bash shell script(실전편)</p>
</blockquote>
<h3 id="crontab">&lt; crontab &gt;</h3>
<pre><code class="language-bash">$ crontab</code></pre>
<ul>
<li>리눅스의 스케줄러이다.</li>
<li>사용하는 옵션은 <code>-e(edit)</code>, <code>-l(list)</code>, <code>-r(remove)</code>  등이 있다.</li>
<li><code>분 시 일 월 요일 실행할 프로그램</code>의 순서로 작성한다.</li>
<li>1-6 (월 - 토) / 0,7 (일)</li>
</ul>
<h3 id="awk">&lt; awk &gt;</h3>
<pre><code class="language-bash">$ awk [option] &#39;{action [$1,$2]}&#39; filename</code></pre>
<ul>
<li>텍스트 파일의 데이터를 검사, 조작, 출력하는 명령이다.</li>
</ul>
<p>🖍️ 내장함수 <code>gsub(&quot;변경 전&quot;, &quot;변경 후&quot;);</code> 활용 가능</p>
<h3 id="✏️-텔레그램-메세지-전송-스크립트">✏️ 텔레그램 메세지 전송 스크립트</h3>
<p><a href="https://chicpro.dev/telegram%ed%85%94%eb%a0%88%ea%b7%b8%eb%9e%a8-%eb%b4%87%ec%9d%84-%ec%9d%b4%ec%9a%a9%ed%95%b4-%eb%a9%94%ec%84%b8%ec%a7%80-%ec%a0%84%ec%86%a1%ed%95%98%ea%b8%b0/">참고링크</a></p>
<pre><code class="language-shell"># telegram bot info
ID=&quot;-&quot;
API_TOKEN=&quot;-&quot;
URL=&quot;https://api.telegram.org/bot${API_TOKEN}/sendmessage&quot;

# date
DATE=&quot;$(date &quot;+%Y-%m-%d %H:%M&quot;)&quot;

# message
TEXT=&quot;${DATE} [$1] $2&quot;

# send message
curl -s -d &quot;chat_id=${ID}&amp;text=${TEXT}&quot; ${URL} &gt; /dev/null</code></pre>
<h3 id="✏️-로그-디렉토리-감시-스크립트">✏️ 로그 디렉토리 감시 스크립트</h3>
<pre><code class="language-shell">HOST=&quot;$(hostname)&quot;

if [ du -m /var/nginx/log -ge 1024 ]
then
        TEXT=&quot;/var/nginx/log 디렉토리 사용량이 1G를 초과하였습니다.&quot;
        /telegram.sh &quot;${HOST}&quot; &quot;${TEXT}&quot;
fi</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] shell script 1]]></title>
            <link>https://velog.io/@haryun_209/Linux</link>
            <guid>https://velog.io/@haryun_209/Linux</guid>
            <pubDate>Fri, 17 Feb 2023 14:27:45 GMT</pubDate>
            <description><![CDATA[<h2 id="웹-서버-트러블-슈팅">웹 서버 트러블 슈팅</h2>
<p><code>uptime</code> 서버 로드 에버리지 확인
<code>free -m</code> 메모리 사용량 확인 
<code>df -h</code> 디스크 사용량 확인</p>
<h3 id="💡-디스크-풀">💡 디스크 풀</h3>
<p><code>cannot create temp file for  here-document: No space left on device ...</code>
-&gt; 웹 서버 로그로 디스크가 꽉 찬 경우 </p>
<h4 id="gb-단위-용량을-차지하는-디렉토리-확인하기">GB 단위 용량을 차지하는 디렉토리 확인하기</h4>
<pre><code class="language-bash">$ cd /
$ du -h --max-depth=1 | grep G</code></pre>
<p><code>--max-depth=1</code> 옵션으로 / 디렉토리의 한단계 하위 디렉토리까지 확인할 수 있다.</p>
<pre><code class="language-bash">$ du -sh * | grep G</code></pre>
<p><code>*</code> 옵션으로 모든 파일 확인 가능</p>
<h4 id="로그-파일-모니터링">로그 파일 모니터링</h4>
<pre><code class="language-bash">$ watch -n 시간 &#39;ls -al | grep /var/log/nginx/access.log&#39;</code></pre>
<h4 id="디스크-사용량-모니터링">디스크 사용량 모니터링</h4>
<pre><code class="language-bash">$ watch -n 시간 &#39;df -h&#39;</code></pre>
<h3 id="💡-메모리-풀">💡 메모리 풀</h3>
<h3 id="💡-시스템-부하">💡 시스템 부하</h3>
<h3 id="💡-프로그램-문제">💡 프로그램 문제</h3>
]]></description>
        </item>
        <item>
            <title><![CDATA[[vagrant] host-only network ip range error 외 기타😵]]></title>
            <link>https://velog.io/@haryun_209/vagrant-error</link>
            <guid>https://velog.io/@haryun_209/vagrant-error</guid>
            <pubDate>Thu, 16 Feb 2023 09:48:14 GMT</pubDate>
            <description><![CDATA[<h3 id="vagrant-up-error">vagrant up error</h3>
<p>vagrant로 가상환경 구성중에 에러가 났다.. 기억해둘겸 포스팅</p>
<h3 id="❗️-host-only-network-error-">❗️ host-only network error ...</h3>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/99f07510-ce4d-4c89-9ae7-653d45ea80e9/image.png" alt="">
macOS에서 주로 발생하는 에러인듯 사용가능한 IP 범위에 맞지 않아서 그렇다고 한다! </p>
<pre><code>server01.vm.network &quot;private_network&quot;, ip: &quot;192.168.56.10&quot;</code></pre><p><code>vagrantfile</code>의 ip주소를 변경해주면 된다. <a href="https://www.virtualbox.org/manual/ch06.html#network_hostonly">참고</a></p>
<h3 id="❗️-executing-vboxmanage-">❗️ executing <code>VBoxManage</code> ...</h3>
<h4 id="1">1)</h4>
<pre><code>Command: [&quot;hostif&quot;], [&quot;create&quot;] ...</code></pre><p>이건 vbox의 확장팩이 없어서 발생하는 에러!
<a href="https://www.virtualbox.org/wiki/Downloads">확장팩 다운로드</a> 여기서 버전에 맞는 파일을 다운로드 한 뒤, <code>도구 - 확장 - 설치</code>로 적용한다.</p>
<h4 id="2">2)</h4>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/a9603cba-f04a-4a18-b17e-7a53fb9dd363/image.png" alt=""></p>
<p>위와 같은 에러인데 Command 부분이 조금 달라졌다. 
여기선 vagrant, vBox 모두 재설치 후 커널을 다시 로드하니까 된당</p>
<pre><code>sudo kextload -b org.virtualbox.kext.VBoxDrv;
sudo kextload -b org.virtualbox.kext.VBoxNetFlt;
sudo kextload -b org.virtualbox.kext.VBoxNetAdp;
sudo kextload -b org.virtualbox.kext.VBoxUSB;</code></pre><p><a href="https://discuss.hashicorp.com/t/vagrant-up-fails-on-macos-13-x-ventura-with-latest-2-3-2-vagrant-release/46043/5">참고링크</a></p>
<h3 id="❗️-guest-additional-error">❗️ guest additional error</h3>
<p>GA가 없어서 어쩌구하는 에러</p>
<pre><code>$ vagrant plugin install vagrant-vbguest</code></pre><p>해당 플러그인 설치하면 됨</p>
<h3 id="❗️the-following-ssh-command-responded-with-a-non-zero-exit-status">❗️The following SSH command responded with a non-zero exit status.</h3>
<p>뭐 하나 해결하면 열줄 실행되다가 뚝 끊김 난생 처음 이클립스 세팅했을 때 느낀 기분</p>
<pre><code>The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

umount /mnt

Stdout from the command:



Stderr from the command:

umount: /mnt: not mounted.</code></pre><p>이번엔 vagrant-vbguest 버전을 다운그레이드 해봄</p>
<pre><code>$ vagrant plugin uninstall vagrant-vbguest
$ vagrant plugin install vagrant-vbguest --plugin-version 0.21</code></pre><p><img src="https://velog.velcdn.com/images/haryun_209/post/6d484763-125c-49e3-bf43-1fe0526112d5/image.png" alt="">ㅋㅋ
뭔가 잘못된 것 같다 난 강의 들을 환경을 세팅하려던 것 뿐인데,,,,,
삽질을 잔뜩 하고 있음</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] 보안 설정]]></title>
            <link>https://velog.io/@haryun_209/Linux-%EB%B3%B4%EC%95%88-%EC%84%A4%EC%A0%95</link>
            <guid>https://velog.io/@haryun_209/Linux-%EB%B3%B4%EC%95%88-%EC%84%A4%EC%A0%95</guid>
            <pubDate>Sun, 15 Jan 2023 11:32:50 GMT</pubDate>
            <description><![CDATA[<h2 id="서버-보안-강화하기">서버 보안 강화하기</h2>
<h3 id="1-firewalld">1. firewalld</h3>
<pre><code class="language-bash"># apt install firewalld</code></pre>
<p>서버에 들어오는 트래픽을 허용하기위해 80, 443 포트를 열어준다.
<img src="https://velog.velcdn.com/images/haryun_209/post/79fbaa8a-cbd8-4d36-88ca-1af7fb2c5be8/image.png" alt=""></p>
<p>✏️ <code>firewall-cmd</code> : firewalld 설정 관리
✏️ <code>firewall-cmd --reload</code> : 변경사항 적용
✏️ <code>firewall-cmd --list-services</code> : 방화벽 설정 확인 </p>
<blockquote>
<p><code>--add-port</code>에 포트 번호를 입력하는 대신 <code>--add-service</code>의 인자로 프로토콜명을 입력하여 사용 가능</p>
</blockquote>
<p>ssh 설정을 위해 기존 컴퓨터에서 규칙을 추가한다.
<img src="https://velog.velcdn.com/images/haryun_209/post/cbfcc157-3254-4be8-b952-d1894c7e3a99/image.png" alt="">
열심히 설정해놨는데 재부팅하니까 초기화되었다,, </p>
<h3 id="2-ufw">2. ufw</h3>
<blockquote>
<p>UFW는 데비안 계열 리눅스에서 사용하는 방화벽 관리 프로그램이다. <a href="https://webdir.tistory.com/206">참고링크</a></p>
</blockquote>
<pre><code class="language-bash"># ufw enable
# ufw allow 80
# uwf allow 443
# ufw allow from &#39;IP.address&#39; to any port 22</code></pre>
<p>ufw를 활성화한 뒤, HTTP, HTTPS, SSH 규칙을 추가한다. (포트번호로도 지정 가능)</p>
<h3 id="3-selinux">3. SELinux</h3>
<p>centOS에는 SELinux가 기본적으로 설치되어 있지만, ubuntu에선 직접 설치해야한다. (보통 AppArmor를 사용한다고함)</p>
<pre><code class="language-bash"># aptinstall setools policycoreutils selinux-basics</code></pre>
<p>✏️ selinux-basic 설치과정에서 unable to locate~ 에러가 나서 AppArmor를 비활성화 해주었더니 해결되었다!</p>
<p>설치가 완료되면 <code>sestatus</code> 명령으로 상태를 확인한다.
<img src="https://velog.velcdn.com/images/haryun_209/post/0e6a9739-0284-4f6d-b33f-154de57ad76f/image.png" alt=""></p>
<p>세부 설정은 <code>/etc/selinux/config</code> 파일에서 수정한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] Nextcloud - 2]]></title>
            <link>https://velog.io/@haryun_209/Linux-Nextcloud-2</link>
            <guid>https://velog.io/@haryun_209/Linux-Nextcloud-2</guid>
            <pubDate>Wed, 11 Jan 2023 11:37:30 GMT</pubDate>
            <description><![CDATA[<h2 id="nextcloud의-스토리지로-s3-사용하기">Nextcloud의 스토리지로 S3 사용하기</h2>
<p>nectcloud의 외부 저장소로 aws s3를 지정한다.</p>
<h3 id="1-awscli-설치">1. awscli 설치</h3>
<pre><code class="language-bash">$ apt install python3-pip (pip 없는 경우)
$ pip3 install awscli</code></pre>
<p>설치가 완료되면 세션 종료 후 재접속해야한다.</p>
<pre><code class="language-bash">$ aws configure</code></pre>
<p>계정 액세스 키를 등록한다.</p>
<h3 id="2-s3-버킷-생성">2. s3 버킷 생성</h3>
<pre><code class="language-bash">$ aws s3 mb s3://bucketname </code></pre>
<h3 id="3-nextcloud의-외부-저장소로-지정">3. nextcloud의 외부 저장소로 지정</h3>
<p>administration settings 메뉴에서 외부 저장소로 s3 버킷을 추가한다!</p>
<h3 id="4-업로드-테스트">4. 업로드 테스트</h3>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/2fea5203-80f3-4ec9-b63e-ae467b2a25f8/image.png" alt="">
s3 버킷이랑 연동은 되었으나 업로드가 되지 않는다.. 아옥 ubuntu 22.04 버전에서 발생하는 ssl 에러인듯..</p>
<p><code>/etc/ssl/openssl.cnf</code> 파일을 찾아 내용을 수정해주었다!</p>
<pre><code># List of providers to load
[provider_sect]
default = default_sect
legacy = legacy_sect 
# The fips section name should match the section name inside the
# included fipsmodule.cnf.
# fips = fips_sect

# If no providers are activated explicitly, the default one is activated implicitly.
# See man 7 OSSL_PROVIDER-default for more details.
#
# If you add a section explicitly activating any other provider(s), you most
# probably need to explicitly activate the default provider, otherwise it
# becomes unavailable in openssl.  As a consequence applications depending on
# OpenSSL may not work correctly which could lead to significant system
# problems including inability to remotely access the system.
[default_sect]
activate = 1

[legacy_sect]
activate = 1</code></pre><p><a href="https://github.com/owncloud/core/issues/40071">참고링크</a></p>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/45af38e0-1c15-4713-b1b3-b75100fa2b7c/image.png" alt="">
nextcloud에서 업로드 한 파일이 보인다 오예~</p>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/8edb2138-6fcf-414f-908a-9b816f3f7120/image.png" alt="">
로컬 환경에서 생성한 파일을 버킷에 복사한다.
<img src="https://velog.velcdn.com/images/haryun_209/post/c90750fb-c158-4101-be0a-8d1a71c63170/image.png" alt=""><img src="https://velog.velcdn.com/images/haryun_209/post/f08c9a28-180e-4811-b759-eadbcb047b73/image.png" alt=""></p>
<p>nextcloud 콘솔, s3 bucket 보드에서 확인할 수 있다! 성공~</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] Nextcloud - 1]]></title>
            <link>https://velog.io/@haryun_209/Linux-Nextcloud-1</link>
            <guid>https://velog.io/@haryun_209/Linux-Nextcloud-1</guid>
            <pubDate>Mon, 09 Jan 2023 12:31:24 GMT</pubDate>
            <description><![CDATA[<p>한동안 졸업준비와 자격증 시험 공부를 하느라 포스팅이 많이 밀렸다ㅜㅜ,,
밀린 내용은 부지런히 올려야지,,😞</p>
<h2 id="nextcloud로-파일-공유-서버-구축하기">Nextcloud로 파일 공유 서버 구축하기</h2>
<h3 id="1-vm-준비">1. VM 준비</h3>
<p>지난 미디어 위키 서버는 centOS에서 진행하였으니 이번엔 ubuntu 22.04 live-server 이미지를 준비했다! 매번 그렇지만 새 VM을 생성하는 과정이 제일 재밌다 히히..</p>
<h3 id="2-nextcloud란-무엇인가">2. Nextcloud란 무엇인가?</h3>
<blockquote>
<p>Nextcloud는 다양한 종류의 문서를 저장, 편집, 활용할 수 있는 스토리지 기능은 물론 음성 및 화상 통화 호스팅과 같은 서비스를 제공하는 오픈 소스 소프트웨어다. <a href="https://nextcloud.com/">nextcloud</a></p>
</blockquote>
<p>드롭박스나 구글 드라이브를 떠올리면 될 것 같다. 프로젝트에 활용하는 경우 민감한 데이터를 내부에 저장하여 보호하거나, 개발시 넥스트클라우드 서버를 프론트단에 배치하여 클라이언트가 미디어에 접근하는 방식을 제어할 수 있다고 한다!</p>
<p>(ubuntu에서 설치할 경우 snap 패키지 관리자를 통해 nextcloud 서버를 바로 설치하고 작동시킬 수 있다.)</p>
<h3 id="3-lamp-서버-구축">3. LAMP 서버 구축</h3>
<pre><code># apt install lamp-server^</code></pre><p>이번엔 lamp 패키지로 한번에 뚝딱 설치할 것이다. 
설치시 <em>unable to locate package &lt;...&gt;</em> 라는 에러메세지가 나오면</p>
<ul>
<li><code>apt update</code> 명령 실행</li>
<li><code>sources.list</code>에 레포지토리 추가 등의 방법으로 해결할 수 있다!
<a href="https://chhanz.github.io/linux/2022/05/09/ubuntu-apt/">참고링크</a></li>
</ul>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/62c05458-5a41-4873-a1d0-f8bc8c37f652/image.png" alt="">
LAMP 설치 후 mySQL 보안도구를 설치하여 패스워드 설정을 하는데 계속 오류가 발생했다. 찾아보니 root 권한으로 패스워드를 설정하지 않아서 오류가 발생하는 것이라는데 초기 설정과정에서 왜 이런 에러가 나는건지 모르겟다;; 아무튼 <a href="https://seong6496.tistory.com/322">여기</a>를 보고 해결했다..</p>
<h4 id="📌-리눅스에서-패키지의-개념">📌 리눅스에서 패키지의 개념</h4>
<p>패키지란 리눅스 시스템에서 소프트웨어를 설치하는데 필요한 파일의 묶음이다. 그리고 이러한 패키지를 설치할 때 사용하는 것이 패키지 관리 도구이다. (apt나 yum 같은..) 리눅스를 사용하다보면 <code>저수준 패키지 관리도구</code>와 <code>고수준 패키지 관리도구</code>로 나누어지는 것을 알 수 있는데, 간단히 말해 소프트웨어 설치시의 의존성 문제를 해결한 것이 고수준 패키지 관리 도구이다. 고수준 패키지 관리 도구는 설치하려는 패키지의 의존성을 파악하고 필요한 경우 선행 패키지를 설치해준다. <a href="https://bradbury.tistory.com/227">패키지 참고링크</a></p>
<h4 id="📌-메타-패키지">📌 메타 패키지</h4>
<p>메타 패키지는 여러 프로그램을 동시에 설치할 수 있도록 패키지를 그룹화한 묶음이다. <a href="https://www.linuxadictos.com/ko/que-son-los-meta-paquetes-de-linux.html">여기</a>에 직접 메타 패키지를 만드는 방법이 나와있다. </p>
<h3 id="4-apache-설정">4. Apache 설정</h3>
<pre><code># a2enmod rewrite
# a2enmod headers</code></pre><p>아파치 서버와 넥스트클라우드를 연동하기 위해 <code>rewrite</code>와 <code>headers</code> 모듈을 활성화한다. </p>
<ul>
<li><em>rewite 모듈은 호출된 URL을 특정 규칙에 의해 변경한 뒤 호출하는 기능</em></li>
<li><em>headers 모듈은 HTTP 요청 헤더와 응답 헤더를 조절하고 수정하는 기능</em></li>
</ul>
<p>그리고 보안을 위해 <code>/var/www/nextcloud</code> 디렉토리에 데이터 파일을 보관하도록 지정한다.
<code>/etc/apache2/sites-available/000-default.conf</code> 파일에 설정 항목을 추가하면 된다! (들어오는 트래픽을 도큐먼트 루트 디렉토리가 아닌 별도의 nextcloud 어플리케이션으로 전달)</p>
<h3 id="5-nextcloud-다운로드">5. Nextcloud 다운로드</h3>
<p><a href="https://nextcloud.com/install/">Nextcloud</a>에서 파일을 다운받아 <code>/var/www/nextcloud</code> 디렉토리에 저장하고 설정파일을 추가한다.</p>
<ul>
<li>/etc/apache2/sites-available/nextcloud.conf 파일 추가</li>
<li>/etc/apache2/sites-available/000-default.conf에 내용 추가</li>
</ul>
<pre><code># chown -R www-data:www-data /var/www/nextcloud</code></pre><p>그리고 보안을 위해 nextcloud 디렉토리의 소유자와 소유그룹을 <code>www-data</code>로 변경한다.</p>
<h4 id="📌-www-data">📌 www-data</h4>
<p>보안을 위해 웹 서버에서 지정하는 특정 사용자의 권한. <a href="https://www.python2.net/questions-787995.htm">참고링크</a></p>
<h3 id="6-nextcloud-시작">6. Nextcloud 시작</h3>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/bf9f7aa5-a84e-4651-a6ca-68a31e616bf2/image.png" alt="">
접속하자마자 친절한 에러 화면을 보여준다 ㅎㅎ.. 모두 설치한 뒤에 재실행하면 관리자 계정을 생성하는 화면이 나온다. 아까 설정했던 MariaDB의 사용자명과 패스워드를 입력하면 완료~
<img src="https://velog.velcdn.com/images/haryun_209/post/ee726bbe-1e7f-4257-bc68-02ce151af46d/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AWS] SAA 자격증 취득 후기]]></title>
            <link>https://velog.io/@haryun_209/AWS-SAA-%EC%9E%90%EA%B2%A9%EC%A6%9D-%EC%B7%A8%EB%93%9D-%ED%9B%84%EA%B8%B0</link>
            <guid>https://velog.io/@haryun_209/AWS-SAA-%EC%9E%90%EA%B2%A9%EC%A6%9D-%EC%B7%A8%EB%93%9D-%ED%9B%84%EA%B8%B0</guid>
            <pubDate>Thu, 29 Dec 2022 02:27:17 GMT</pubDate>
            <description><![CDATA[<h3 id="1-후기">1. 후기</h3>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/6b8d3a04-3a94-47ec-a997-545dff91e60e/image.png" alt="">
이번에 응시한 saa 자격취득 시험에 합격했다! 
마지막 기말고사랑 일정이 겹쳐서 조금 빠듯했지만 나름 무난한 점수로 통과한 것 같아 기분이 좋다 ㅎㅎ
아무래도 시험 비용이 많이들다보니까 무조건 한번에 따야한다는 집념이 날 도운듯.. (운좋게 25% 바우처를 구해서 할인을 좀 받긴했다ㅎ)</p>
<p>SAA 시험은 총 65문제로 점수에 포함되지 않는 테스트용 15문제와 실전용 50문제로 출제된다. 50문제는 총 4과목으로 구성되고 결과표에서 과목별 정답률을 확인할 수 있다!
<img src="https://velog.velcdn.com/images/haryun_209/post/6b847873-0bc0-4442-b848-2d94eb4ebb4c/image.png" alt="">(과목별 출제비율을 알 수는 없지만 ㅎ)</p>
<h3 id="2-공부한-자료">2. 공부한 자료</h3>
<h4 id="1-그림으로-이해하는-aws-구조와-기술">1) <a href="http://www.yes24.com/Product/Goods/102368122">그림으로 이해하는 AWS 구조와 기술</a></h4>
<p>기본 개념을 정리하기 정말 좋은 책인것 같다. 서비스별로 간단한 설명과 그림을 통한 구조 설명이 명확해서 aws 클라우드를 처음 접할 때 정말 도움이 많이 되었다.</p>
<h4 id="2-따라하며-배우는-aws-네트워크-입문">2) <a href="http://www.yes24.com/Product/Goods/93887402">따라하며 배우는 AWS 네트워크 입문</a></h4>
<p>실습은 하고싶은데 뭐부터 해야하는지 막막했을 때 추천을 받아 구매한 책! 입문자들의 바이블인듯.. 서비스별로 환경을 구성하고 검증하는 과정이 자세히 설명되어있다! </p>
<h4 id="3-udemy-강의">3) <a href="https://www.udemy.com/course/best-aws-certified-solutions-architect-associate/">udemy 강의</a></h4>
<p>saa 시험에 출제되는 서비스 위주로 구성된 강의이다. 서비스별 개념설명과 실습이 잘 정리되어 있지만 여기 나오는 기출문제는 살짝 애매하게 느껴졌다..</p>
<h4 id="4-덤프">4) 덤프</h4>
<p>현재 saa 시험은 c03 버전이기때문에 examtopics, koreadump 같은 곳에서 해당 버전의 덤프를 구매하면 된다! 덤프에 있는 문제들이 100% 출제되는 것은 아니지만 유형이 비슷해서 많은 도움이 되었다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] 미디어위키 설치(+에러..)]]></title>
            <link>https://velog.io/@haryun_209/Linux-%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4-%EC%84%A4%EC%B9%98%EC%97%90%EB%9F%AC</link>
            <guid>https://velog.io/@haryun_209/Linux-%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4-%EC%84%A4%EC%B9%98%EC%97%90%EB%9F%AC</guid>
            <pubDate>Fri, 25 Nov 2022 04:33:33 GMT</pubDate>
            <description><![CDATA[<h2 id="centos-7에-미디어위키-설치하기">centOS 7에 미디어위키 설치하기</h2>
<h3 id="1-apache2-mariadb-php70">1. apache2, mariaDB, php7.0</h3>
<p>centOS 7 버전에서 php를 설치했더니 5.x 버전이 설치되었다. 해당버전에서는 미디어위키 지원이 안되기때문에 기존 php를 삭제하고 7.0 버전으로 재설치 해주었다. (<a href="https://www.happyjung.com/lecture/2483?page=9">참고</a>)
<img src="https://velog.velcdn.com/images/haryun_209/post/ffd5b31f-9ab6-4471-b8b4-ffd2844df1cc/image.png" alt="">
테스트 완료~</p>
<h3 id="2-미디어위키-설치-에러">2. 미디어위키 설치 에러</h3>
<h4 id="2-1-확장-모듈-미설치">2-1) 확장 모듈 미설치</h4>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/f4a3471a-ff15-4840-be32-94b406ac6179/image.png" alt="">
확장 기능을 설치하지 않아서 접속이 안된다. <code>mbstring</code>이 없다고 친절하게 알려준다.</p>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/9050cd68-15d3-47e7-ad62-8341a227b801/image.png" alt="">해당 모듈을 검색하고 php 버전에 맞게 설치해준다. 설치가 완료되면 아파치를 재실행 해주고 다시 접속한다!</p>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/0d22ba67-70b2-4857-8f2e-b15f5b78f3bb/image.png" alt="">링크를 클릭하여 나머지 설정을 해준다.</p>
<h4 id="2-2-500">2-2) 500</h4>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/dfd20b3a-c81c-470c-a875-f4f18c37e6e8/image.png" alt="">진짜 어림도 없음 바로 500
<code>var/log/httpd/error.log</code> 파일을 확인한다.</p>
<blockquote>
<p>PHP Fatal error:  Class &#39;DOMDocument&#39; not found in /var/www/html/wiki/includes/cache/LocalisationCache.php:658</p>
</blockquote>
<p>찾아보니 <code>xml</code>모듈을 설치하지 않아서 파일을 읽을 수 없다는 듯 하다. 설치 후 재실행 하면 세팅화면이 나온다 ㅜㅜ (php70w-xml)
(<a href="https://stackoverflow.com/questions/14395239/class-domdocument-not-found">참고</a>) </p>
<h3 id="3-미디어위키-세팅">3. 미디어위키 세팅</h3>
<p>정말 기초적인 세팅(DB 연결)만 해주었다. 설정이 끝나면 <code>LocalSettings.php</code> 파일을 다운로드 할 수 있다. vBox:GA 설치하면서 애를 너무 먹어서 그냥 파일을 다운받아 <code>scp</code>로 서버에 전송해주었다!</p>
<h4 id="3-1-localsettingsphp-not-readable-에러">3-1) LocalSettings.php not readable 에러</h4>
<p><code>LocalSettings.php</code> 파일을 새로 추가해서 SELinux가 보안상의 이유로 막은듯? 하다. <code>restorecon</code> 명령으로 SELinux 정책에 맞게 파일을 재배치 했다. </p>
<pre><code class="language-bash">$ restorecon -r /var/www/html/</code></pre>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/9832e14b-66dc-4d04-aee9-ce3ce3521fe6/image.png" alt="">
드디어 완성~ 설정할 때 지정했던 사용자 로그인도 잘된다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] 웹 서버 구축하기]]></title>
            <link>https://velog.io/@haryun_209/Linux-%EC%9B%B9-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@haryun_209/Linux-%EC%9B%B9-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0</guid>
            <pubDate>Thu, 24 Nov 2022 06:45:31 GMT</pubDate>
            <description><![CDATA[<h2 id="ubuntu에서-lamp-서버-구축">ubuntu에서 LAMP 서버 구축</h2>
<ul>
<li>ubuntu linux</li>
<li>apache</li>
<li>mariaDB</li>
<li>php</li>
</ul>
<pre><code class="language-bash">$ sudo apt install lamp-server^</code></pre>
<p>해당 명령을 이용하면 번들 패키지를 통해 웹 서버를 간단하게 구축할 수도 있지만 이번엔 수동으로 설치해보기로 했다!</p>
<p>서버는 vBox를 통해 <code>ubuntu 22.04</code> 버전을 생성했다. (기존PC에서 접속할 수 있도록 가상머신의 네트워크 환경을 변경해야함)</p>
<h3 id="1-apache2-설치-및-설정">1. apache2 설치 및 설정</h3>
<pre><code class="language-bash">$ sudo apt install apache2</code></pre>
<p>호스트PC에서 해당 서버로 접속하기 위해서 <code>ip addr</code> 명령으로 가상머신의 ip 주소를 확인 한 뒤 접속한다.
<img src="https://velog.velcdn.com/images/haryun_209/post/7a088bb0-4e26-4768-91e1-8b77a795ac7f/image.png" alt="">
설치만 해서 아직은 아파치 기본 페이지가 나온다! 이제 페이지를 추가해야한다.
<code>/etc/apache2/sites-available/</code> 디렉토리로 이동하여 <code>000-default.conf</code> 파일을 수정한다.</p>
<h4 id="1-1-vbox에서-공유폴더를-사용할-수-없는-문제">1-1) vBox에서 공유폴더를 사용할 수 없는 문제</h4>
<p>기존에 만들어둔 html 파일을 사용하려고 했는데 vBox에서 공유폴더 기능과 복사, 붙여넣기가 되지 않았다. 
<code>설정 - 고급 - 드래그앤드롭, 클립보드 공유</code> 항목을 양방향으로 변경하고 <code>guestAdditions.iso</code> 파일을 설치하려 했으나 자꾸 에러가 생김 ㅠㅠ (맥북 업데이트 후 최신버전의 vBox가 아니면 가상머신이 실행되지 않기에 최신버전을 사용하고 있는데 자잘한 에러가 너무 많이 생김🤬)</p>
<p><strong><em>결국 22.04 --&gt; 18.04 버전으로 재설치하고 사용할 수 있게 되었다.</em></strong></p>
<h4 id="1-2-접속시-403-forbidden">1-2) 접속시 403 Forbidden</h4>
<p>예전에 작업했던 파일을 옮기는 것은 성공 했으나 접속이 안된다. 에러로그를 확인해보았다!</p>
<blockquote>
<p>[Thu Nov 24 12:45:59.019930 2022] [core:error] [ pid 3349:tid 139823158687488] (13)Permission denied: [client 192.168.0.68:49781] AH00035: access to /index.html denied (filesystem path &#39;/var/www/html/starbucks/index.html&#39;) because search permissions are missing on a component of the path</p>
</blockquote>
<p><code>DocumentRoot</code> 는 바꿔놓고 해당 디렉토리의 권한을 바꾸지 않아서였다 히히,,
<img src="https://velog.velcdn.com/images/haryun_209/post/e21fa48d-1472-48f2-86d6-f1c6899d72d0/image.png" alt="">
드디어 정상 접속! 삽질의 연속이였다,,</p>
<h3 id="2-mariadb-설치">2. mariaDB 설치</h3>
<pre><code class="language-bash">$ sudo apt update
$ sudo apt install mariadb-server</code></pre>
<p>설치가 완료되면 <code>systemctl status mysql</code>로 상태를 확인한다.</p>
<h4 id="2-1-보안-조치">2-1) 보안 조치</h4>
<pre><code class="language-bash">$ mysql_secure_installation</code></pre>
<p>데이터베이스의 루트 패스워드를 설정한다.</p>
<h4 id="2-2-db-생성-및-데이터-추가">2-2) DB 생성 및 데이터 추가</h4>
<pre><code class="language-bash">$ mysql -u root </code></pre>
<p>DB 서버에 접근한 뒤, 새로운 데이터베이스와 테이블을 생성했다.
<img src="https://velog.velcdn.com/images/haryun_209/post/1fe461d6-af8d-4c5d-8ee0-3bc5192cfb6e/image.png" alt="">회원가입 페이지도 만들어져있으니 회원가입용으로 쓰면 되겠군</p>
<h3 id="3-php-설치">3. php 설치</h3>
<pre><code class="language-bash">$ sudo apt install php
$ sudo apt install libapache2-mod-php</code></pre>
<h4 id="3-1-php-테스트">3-1) php 테스트</h4>
<p>index.html 파일이 있는 경로에 <code>testPhp.php</code> 파일을 생성한다.</p>
<pre><code class="language-php">&lt;?php
phpinfo();
?&gt;</code></pre>
<p> 그리고 해당 파일 경로로 다시 접속해보면
<img src="https://velog.velcdn.com/images/haryun_209/post/c2516abe-8fd2-44af-a1a7-d7121e280f68/image.png" alt="">새로 생성한 파일이 정상적으로 연결되었다! (보안을 위해 확인 후 삭제해야한다!)</p>
<p>🔥 정말 간단한 준비 단계만 끝냈다,,ㅎ </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] ubuntu에서 aws s3로 백업하기]]></title>
            <link>https://velog.io/@haryun_209/Linux-ubuntu%EC%97%90%EC%84%9C-aws-s3%EB%A1%9C-%EB%B0%B1%EC%97%85%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@haryun_209/Linux-ubuntu%EC%97%90%EC%84%9C-aws-s3%EB%A1%9C-%EB%B0%B1%EC%97%85%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 22 Nov 2022 03:24:48 GMT</pubDate>
            <description><![CDATA[<h2 id="✅-vbox를-통해-설치한-ubuntu-1804v의-데이터를-aws-s3-버킷에-백업하기">✅ vBox를 통해 설치한 ubuntu-18.04v의 데이터를 aws S3 버킷에 백업하기</h2>
<h3 id="1-aws-cli-설치">1. aws cli 설치</h3>
<pre><code class="language-bash">기존 설치되어 있는 python의 버전을 확인하고 맞는 pip 설치 (python3 - pip3)

$ pip3 install --upgrade --user awscli
</code></pre>
<h3 id="2-aws-액세스-키-생성-후-연결">2. aws 액세스 키 생성 후 연결</h3>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/ef4295f2-eb56-46b4-ac52-0a19be6e687a/image.png" alt="">
해당 메뉴를 통해 액세스 키를 발급하면 csv 포맷의 파일을 다운로드 할 수 있다.</p>
<pre><code class="language-bash">$ aws configure
 -&gt; 차례로 ID, key, rigion, output format을 지정한다.</code></pre>
<h3 id="3-s3-버킷-생성">3. s3 버킷 생성</h3>
<pre><code class="language-bash">$ aws s3 mb s3://&#39;bucket name&#39;</code></pre>
<p><code>mb: make bucket 명령</code> 
버킷명은 전체 s3 서비스 내에 존재하는 버킷명과 중복될 수 없다. <del>(이거 완전 레어닉 삽니다,,)</del></p>
<p>생각한게 전부 안되길래 결국 강아지 이름으로 했다.. 
<img src="https://velog.velcdn.com/images/haryun_209/post/0ae2a79b-0170-4276-93a9-5124195ecc56/image.png" alt=""><code>aws s3 ls: 버킷 리스트 출력 명령</code></p>
<h3 id="4-버킷에-백업">4. 버킷에 백업</h3>
<pre><code class="language-bash">$ aws s3 sync &#39;백업 대상&#39; s3://&#39;버킷 이름&#39;</code></pre>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/13dbc5fb-221f-45d5-9476-44771ecb72d5/image.png" alt="">
테스트용으로 만든 디렉토리를 백업했다.
<img src="https://velog.velcdn.com/images/haryun_209/post/00ba6179-3ebb-482d-ae93-344d1edb9dfc/image.png" alt="">
s3 버킷에 정상적으로 파일이 백업되었다.
<img src="https://velog.velcdn.com/images/haryun_209/post/46c3036e-3ad7-401e-b74f-40404cd67700/image.png" alt="">
해당 디렉토리에 새로운 파일을 추가하고 <code>sync</code> 명령을 다시 실행해보면, 새롭게 생성한 파일만 업로드 되는 것을 확인할 수 있다. (기존 파일을 수정한 경우도 동일하게 적용됨)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] 아카이브]]></title>
            <link>https://velog.io/@haryun_209/Linux-%EC%95%84%EC%B9%B4%EC%9D%B4%EB%B8%8C</link>
            <guid>https://velog.io/@haryun_209/Linux-%EC%95%84%EC%B9%B4%EC%9D%B4%EB%B8%8C</guid>
            <pubDate>Fri, 18 Nov 2022 02:59:32 GMT</pubDate>
            <description><![CDATA[<h2 id="리눅스의-아카이브-관리">리눅스의 아카이브 관리</h2>
<blockquote>
<p>아카이브는 다수의 파일과 디렉토리로 이루어진 하나의 파일이다. 다수의 파일을 하나로 묶어 사용하면 이동, 공유, 저장 등의 작업이 수월해진다. (파일의 관리와 추적이 용이)</p>
</blockquote>
<p>아카이브는 <strong>파일시스템 이미지</strong>를 만들거나 <strong>데이터를 백업</strong>하는데에 주로 사용된다.</p>
<h2 id="1️⃣-파일-아카이빙">1️⃣ 파일 아카이빙</h2>
<h3 id="1-tar">1. tar</h3>
<h4 id="1-1-단순-아카이빙">1-1) 단순 아카이빙</h4>
<pre><code class="language-bash">$ tar cvf &#39;아카이브 이름&#39;.tar &#39;대상 파일&#39;</code></pre>
<p>tar 명령어에 주로 사용되는 옵션으로 c, v, f 가 있다.</p>
<ul>
<li>c: 새로운 아카이브 생성</li>
<li>v: 상세 메세지 출력</li>
<li>f: 아카이브 파일명 지정</li>
</ul>
<h4 id="1-2-아카이브의-압축">1-2) 아카이브의 압축</h4>
<pre><code class="language-bash">$ tar cvzf &#39;아카이브 이름&#39;.tar.gz &#39;대상 파일&#39;</code></pre>
<p>기존 명령어에 z 옵션을 추가하면 생성한 아카이브를 gzip 프로그램으로 압축할 수 있다. </p>
<h4 id="➡️-tar-명령은-일반적으로-파일-시스템-전체나-일부분을-아카이빙-하는데-사용한다">➡️ tar 명령은 일반적으로 파일 시스템 전체나 일부분을 아카이빙 하는데 사용한다.</h4>
<h3 id="2-split">2. split</h3>
<p>큰 용량의 파일을 작게 나누는 명령어이다. 
<em>(용량이 큰 프로그램 로그 파일등에 활용할 수 있음)</em></p>
<pre><code class="language-bash">$ split -b &#39;쪼갤 용량&#39; &#39;대상 파일&#39; &quot;나눈뒤 사용할 파일 이름&quot;
👇
$ split -b 10M test.tar.gz &quot;test.tar.gz.part&quot;</code></pre>
<p>해당 명령을 실행하면 parta, partb, partc 이런 형태로 파일이 생성된다. </p>
<p><em>(🤔 다시 합치고 싶다면 <code>cat test.tar.gz.part* &gt; archive.tar.gz</code>와 같이 표준 출력을 리다이렉션하여 가능!)</em></p>
<p>(<code>--one-file-system: 아카이브를 만들 때 다른 파티션에 있는 데이터를 제외</code>
 <code>--exclude=&#39;경로&#39;: 지정한 파일이나 디렉토리 제외</code>)</p>
<p> 로컬 서버에서 원격 서버로 아카이브한 파일을 전송하는 경우</p>
<pre><code class="language-bash"> $ tar czvf - &#39;대상 파일&#39; | ssh &#39;사용자명&#39;@&#39;IP주소&#39;
     &quot;cat &gt; &#39;파일명&#39;.tar.gz&quot;</code></pre>
<h3 id="3-파일-찾아서-모으기">3. 파일 찾아서 모으기</h3>
<h4 id="3-1-find">3-1) find</h4>
<pre><code class="language-bash">$ find /var/www/html/ -iname &quot;*.mp4&quot; \
-exec tar -rvf videos.tar {} \;</code></pre>
<p><code>/var/www/html/</code> 아래의 .mp4 확장자인 파일을 찾아 <code>-exec</code> 아래의 명령을 수행한다. ({}는 find 명령으로 찾아낸 파일을 의미함)</p>
<h4 id="3-2-locate">3-2) locate</h4>
<pre><code class="language-bash">$ locate &#39;대상 파일&#39;</code></pre>
<p><code>find</code>보다 <code>locate</code>가 결과를 더 빠르게 출력한다. 
(locate 명령은 인덱스를 대상으로 검색하기 때문에 find에 비해 빠른 소요시간을 갖고있으나 정확도가 떨어진다.)</p>
<h2 id="2️⃣-파티션-아카이빙">2️⃣ 파티션 아카이빙</h2>
<h3 id="1-dd">1. dd</h3>
<h4 id="1-1-디스크-이미지-생성">1-1) 디스크 이미지 생성</h4>
<pre><code class="language-bash">$ dd if=&#39;원본 드라이브&#39; of=&#39;저장할 경로(파일 혹은 장치)[.img]&#39;</code></pre>
<h4 id="1-2-복원">1-2) 복원</h4>
<pre><code class="language-bash">$ dd if=&#39;복원할 대상[.img]&#39; of=&#39;복원할 위치&#39;</code></pre>
<h3 id="2-rsync">2. rsync</h3>
<p>rsync 명령은 로컬/원격 호스트에 대상 파일이나 디렉토리를 복사하는 명령이다. (주로 백업용으로 사용)</p>
<p>데이터를 압축한 형태로 전송하고, 반복적으로 실행하는 경우 원본과 대조하여 수정된 부분만 전송하기때문에 scp보다 실행 속도가 빠르다.</p>
<pre><code class="language-bash">$ rsync -av &#39;대상 파일&#39; &#39;user&#39;@&#39;IP 주소&#39;:&#39;사본을 저장할 경로&#39;</code></pre>
<p><code>a: 아카이브 모드(재귀적으로 동작함)</code>, <code>v: 상세 결과 출력</code></p>
<h4 id="🚫-에러">🚫 에러</h4>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/762d2c52-940d-4696-9ae3-9405ebd3799b/image.png" alt="">code 127은 원격 호스트에 rsync가 설치되어있지 않기 때문에 발생한다.
(lxc를 사용하여 컨테이너로 파일을 복사했는데 발생함)</p>
<h4 id="➡️-dd-명령은-파티션-이미지를-생성하는데-적합하다">➡️ dd 명령은 파티션 이미지를 생성하는데 적합하다.</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] SSH]]></title>
            <link>https://velog.io/@haryun_209/Linux-SSH</link>
            <guid>https://velog.io/@haryun_209/Linux-SSH</guid>
            <pubDate>Mon, 14 Nov 2022 06:24:24 GMT</pubDate>
            <description><![CDATA[<h2 id="openssh">OpenSSH</h2>
<blockquote>
<p>오픈SSH(OpenSSH, OpenBSD Secure Shell)[a]는 시큐어 셸 (Secure Shell, SSH) 프로토콜을 이용하여 암호화된 통신 세션을 컴퓨터 네트워크에 제공하는 컴퓨터 프로그램의 모임이다. SSH 커뮤니케이션스 시큐리티가 제공하는 사유 시큐어 셸 소프트웨어 제품군을 대체할 목적으로 오픈 소스로 작성되었다. <a href="https://ko.wikipedia.org/wiki/%EC%98%A4%ED%94%88SSH">참조</a></p>
</blockquote>
<p>네트워크를 통해 원격 호스트에 접속하기 위하여 SSH를 사용한다. 
SSH는 암호화 키를 사용하여 plaintext를 <code>암호화</code>, <code>복호화</code>하여 데이터를 보호한다.</p>
<h3 id="1-openssh-설치-및-확인">1. openSSH 설치 및 확인</h3>
<pre><code class="language-bash">- ubuntu
$ apt install openssh-server 

필요한 경우 설치
$ apt install openssh-client </code></pre>
<p>대부분의 환경에서는 openssh-client가 기본적으로 설치되어있다.</p>
<pre><code class="language-bash">$ systemctl status ssh</code></pre>
<p>ssh의 실행 상태를 확인하고 필요한 경우 <code>systemctl stop ssh</code> 또는 <code>systemstl start ssh</code> 명령을 사용한다.</p>
<p>부팅시 자동으로 실행되도록 지정해야하는 경우 <code>systemctl enable ssh</code> 명령으로 활성화하고, <code>disable</code>로 비활성화 할 수 있다.</p>
<h3 id="2-원격-서버에-로그인하기">2. 원격 서버에 로그인하기</h3>
<p>lxc 컨테이너를 <code>RUNNING</code>상태로 전환한 뒤 해당 IP를 통해 접속한다.</p>
<pre><code class="language-bash">$ ssh &#39;접속할 서버의 계정&#39;@&#39;IP 주소&#39;</code></pre>
<h3 id="3-패스워드-없이-ssh-접속하기">3. 패스워드 없이 SSH 접속하기</h3>
<h4 id="3-1-키-생성">3-1) 키 생성</h4>
<p>클라이언트 서버에서 접속시 사용할 키를 생성한다.</p>
<pre><code class="language-bash">$ ssh-keygen</code></pre>
<p>이를 통해 RSA 알고리즘 기반의 키를 생성하였다. <code>.ssh</code> 디렉토리에 접근하면 <code>id_rsa</code>, <code>id_rsa.pub</code> 파일을 확인할 수 있다.
<img src="https://velog.velcdn.com/images/haryun_209/post/51311f94-971e-4864-b1dd-9cf770575c1d/image.png" alt=""></p>
<h4 id="3-2-키-복사">3-2) 키 복사</h4>
<pre><code class="language-bash">$ ssh-copy-id &#39;로그인 할 서버의 사용자명&#39;@&#39;IP주소&#39;</code></pre>
<p>키를 타겟 서버에 자동으로 복사해주는 명령이다.</p>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/c5c6cdb3-fd04-41bd-b797-f9979dec41eb/image.png" alt=""> 패스워드를 입력하지 않고 접속할 수 있게 되었다.</p>
<h3 id="4-scp-사용하기">4. SCP 사용하기</h3>
<p>SCP는 <code>SSH 프로토콜</code>을 사용해 파일과 디렉토리를 원격 서버로 복사한다. </p>
<pre><code class="language-bash">$ scp &#39;복사할 파일 경로&#39; &#39;원격 서버의 사용자명&#39;@&#39;IP주소&#39;:&#39;복사한 파일을 저장할 경로&#39;</code></pre>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/2c6e0693-7680-4047-84f6-1d42a3500120/image.png" alt="">로컬 서버에 있는 파일을 원격 접속 서버에 복사해보았다.
<img src="https://velog.velcdn.com/images/haryun_209/post/7dc7ae16-2cf5-4ba5-841c-30957b30fc3e/image.png" alt="">원격 접속한 서버에서 해당 파일을 정상적으로 확인할 수 있었다.</p>
<p><em>(🤔 <code>permission denined</code> 에러가 난다면 경로의 접근권한을 확인해보자!)</em></p>
<blockquote>
<p><code>ssh-copy-id -i .ssh/id_rsa.pub &#39;원격 서버의 사용자명&#39;@&#39;IP주소&#39;</code> 명령을 통해 쉽게 키를 복사할 수도 있다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] 컨테이너]]></title>
            <link>https://velog.io/@haryun_209/Linux-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88</link>
            <guid>https://velog.io/@haryun_209/Linux-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88</guid>
            <pubDate>Thu, 10 Nov 2022 10:22:22 GMT</pubDate>
            <description><![CDATA[<h2 id="리눅스에서-컨테이너-사용하기">리눅스에서 컨테이너 사용하기</h2>
<h3 id="1-컨테이너란">1. 컨테이너란?</h3>
<p><strong>hostOS와 커널을 공유하며 격리된 환경에서 프로세스를 실행하는 가상화 기술</strong>이다. 독립적인 <strong>운영체제 수준의 가상화 기술</strong>로 &#39;초경량 가상 서버&#39;라고 생각하면 될 듯 하다. (격리된 환경에서 사용하므로 다른 컨테이너에 영향을 주지 않는다.)</p>
<p>보통 가상화라고 한다면 hostOS에 다수의 guestOS를 설치하여 운용하는 기술을 의미하지만 리눅스 컨테이너는 하나의 리눅스 시스템에서 프로세스를 독립적으로 분리하여 환경을 구축하는 것을 의미한다.</p>
<p><em>🤔 말이 길어질수록 의미가 불분명해지는 것 같다,, 그러니까 컨테이너란 리눅스 시스템에서 프로세스를 분리하여 사용하는 것이고, 해당 프로세스는 독립적인 리눅스 환경을 갖추고 있다! 라는 의미로 이해해야겠다.</em></p>
<p>컨테이너 기술은 시스템 컨테이너와 애플리케이션 컨테이너로 나누어진다. </p>
<ul>
<li>시스템 컨테이너: LXC, LXD -&gt; 다수의 프로세스가 하나의 환경을 공유</li>
<li>애플리케이션 컨테이너: Doker(도커는 LXC를 기반으로 개발됨)  </li>
</ul>
<h3 id="2-컨테이너의-역할">2. 컨테이너의 역할</h3>
<p>결국 컨테이너를 통해 무엇을 하는건지가 중요한 것 같다. 컨테이너는 다음과 같은 특징을 가진다.</p>
<ul>
<li>쉽고 빠른 생성 (OS 입장에서는 프로세스를 실행하는 것과 마찬가지이므로 빠른 처리가 가능하다.)</li>
<li>가벼운 성능 </li>
<li>적은 오버헤드 </li>
<li>뛰어난 이식성 (파일 형태로 환경이 구성되어있어 공유가 쉬움)</li>
</ul>
<p>이와 같은 기능을 갖춘 컨테이너를 활용하여 서버에서 실행되는 애플리케이션별로 독립적인 환경을 구축하여 테스트, 운영, 배포 등이 가능하다.</p>
<h3 id="3-lxc를-통해-컨테이너-생성하기">3. LXC를 통해 컨테이너 생성하기</h3>
<p><em>🤔 이번엔 ubuntu와 centOS에서 LXC를 실행하여 컨테이너를 생성해보았다.</em></p>
<h4 id="1-ubuntu">1) ubuntu</h4>
<pre><code class="language-bash">- ubuntu
$ lxc-create -n [컨테이너 이름] -t [사용할 템플릿]</code></pre>
<p>-n 플래그는 컨테이너의 이름을 지정하고, -t는 컨테이너 템플릿을 지정한다.
만약 템플릿 부분에서 에러가 난다면 <code>/usr/share/lxc/templates/</code> 디렉토리에서 사용가능한 템플릿 목록을 확인해야한다.</p>
<p>해당하는 템플릿이 없다면</p>
<pre><code class="language-bash">- ubuntu
$ apt install lxc-templates</code></pre>
<p>명령으로 다운받으면 된다! (내가 그랬음)</p>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/edc726ef-cf50-4e0c-a3a5-8066d6386986/image.png" alt="">컨테이너를 생성하는 시간이 생각보다 오래 걸린다. 조금 기다리면 위와 같이 로그인시 사용할 패스워드를 알려주며 생성이 완료된다! 초기 설정은 username과 password 모두 &#39;ubuntu&#39; 이다.</p>
<h4 id="2-centos">2) centOS</h4>
<pre><code class="language-bash">- centOS
$ lxc-creat -n [컨테이너 이름] -t [사용할 템플릿]</code></pre>
<p>동일하게 컨테이너를 생성하면 패스워드가 저장된 위치를 알려주는 메세지가 출력된다.
<img src="https://velog.velcdn.com/images/haryun_209/post/f048b62e-795e-48f6-be8d-edb841a39f51/image.png" alt="">
<code>/var/lib/lxc/컨테이너이름/tmp_root_pass</code> 파일을 열어 패스워드를 확인할 수 있다.</p>
<h4 id="3-컨테이너-실행-및-접근">3) 컨테이너 실행 및 접근</h4>
<pre><code class="language-bash">$ lxc-start -n [컨테이너 이름]</code></pre>
<p>컨테이너 생성 후 상태를 확인해보면 <code>STOPPED</code>인 것을 확인할 수 있다. 위 명령을 통해 상태를 <code>RUNNING</code> 으로 활성화시켜준다.
(-d 옵션을 붙이면 컨테이너 실행 후 대화형 세션을 열지 않도록 해준다.)</p>
<pre><code class="language-bash">$ lxc-attach -n [컨테이너 이름]</code></pre>
<p>해당 명령으로 컨테이너에 접근한다.
<img src="https://velog.velcdn.com/images/haryun_209/post/e6b81fe2-0fef-4500-816f-f9e8c772cbb6/image.png" alt="">정상적으로 작동한다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AWS] VPC Peering]]></title>
            <link>https://velog.io/@haryun_209/AWS-VPC-Peering</link>
            <guid>https://velog.io/@haryun_209/AWS-VPC-Peering</guid>
            <pubDate>Fri, 04 Nov 2022 09:36:04 GMT</pubDate>
            <description><![CDATA[<h2 id="vpc-peering">VPC Peering</h2>
<blockquote>
<p>Virtual Private Cloud(VPC)는 사용자의 AWS 계정 전용 가상 네트워크입니다. VPC는 AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리되어 있습니다. AWS 리소스(예: Amazon EC2 인스턴스)를 VPC에서 시작할 수 있습니다.
VPC 피어링 연결은 프라이빗 IPv4 주소 또는 IPv6 주소를 사용하여 두 VPC 간에 트래픽을 라우팅할 수 있도록 하기 위한 두 VPC 사이의 네트워킹 연결입니다. 동일한 네트워크에 속하는 경우와 같이 VPC의 인스턴스가 서로 통신할 수 있습니다. 사용자의 자체 VPC 또는 다른 AWS 계정의 VPC와 VPC 피어링 연결을 만들 수 있습니다. VPC는 상이한 리전에 있을 수 있습니다(리전 간 VPC 피어링 연결이라고도 함). 
<a href="https://docs.aws.amazon.com/ko_kr/vpc/latest/peering/what-is-vpc-peering.html">AWS</a></p>
</blockquote>
<p>VPC Peering은 각각의 VPC 간의 연결을 구성하여 프라이빗 IP 주소를 통해 서로 통신해주는 역할을 담당한다.</p>
<p>VPC Peering이 제공하는 기능은 다음과 같다.</p>
<ul>
<li>고속 네트워크 통신(이를 통과하는 트래픽에대해서는 비용 절감이 가능)</li>
<li>리전 간 VPC 연결 가능</li>
<li>계정 간 VPC 연결 가능</li>
</ul>
<h2 id="vpc-사용">VPC 사용</h2>
<h3 id="1-두개의-vpc를-피어링-연결하기">1. 두개의 VPC를 피어링 연결하기</h3>
<p>목표: 두대의 EC2 인스턴스가 서로의 프라이빗 아이피로 연결하고 웹서비스 접근이 가능하도록 설정</p>
<h4 id="1-환경-준비">1) 환경 준비</h4>
<ul>
<li>VPC (1,2 두개의 VPC를 생성하고 각각의 퍼블릭 서브넷과 라우팅 테이블, 인터넷 게이트웨이 준비)</li>
<li>EC2 인스턴스 (VPC 퍼블릭 서브넷과 연결)</li>
<li>보안 그룹(SSH, ICMP - 모든영역 접속 가능)</li>
</ul>
<h4 id="2-환경-검증">2) 환경 검증</h4>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/89dadb4e-51bb-4cf8-a404-36f563861441/image.png" alt=""><img src="https://velog.velcdn.com/images/haryun_209/post/83a42bd5-5c35-4808-bec7-e530533e6dc0/image.png" alt="">각각의 인스턴스에서 서로의 프라이빗 IP에 접속이 불가함을 확인</p>
<ul>
<li>VPC1-EC2의 private IP : 10.41.1.100</li>
<li>VPC2-EC2의 private IP : 10.42.1.100</li>
</ul>
<h4 id="3-vpc-peering-연결-생성">3) VPC Peering 연결 생성</h4>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/78769126-3c07-400a-9a8e-34eaa9708f45/image.png" alt="">연결 대상을 지정하여 새 연결을 생성한 뒤 각각의 라우팅 테이블을 추가한다.</p>
<h4 id="4-보안규칙-추가">4) 보안규칙 추가</h4>
<p>VPC에 연결된 상대방 인스턴스가 웹 서비스 접근이 가능하도록 인바운드 규칙에 HTTP와 대상 IP를 추가한다.
<img src="https://velog.velcdn.com/images/haryun_209/post/cf51a9d5-254d-4999-b5bf-89f199ee8ea7/image.png" alt="">(VPC2-EC2에 추가된 인바운드 규칙, VPC1-EC2도 마찬가지로 추가)</p>
<h4 id="5-private-ip-통신-확인">5) Private IP 통신 확인</h4>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/707400eb-8fb9-4bad-bef5-e83ffda24f28/image.png" alt=""><img src="https://velog.velcdn.com/images/haryun_209/post/2fcf6379-d3bf-417e-aeea-9fd701391dcb/image.png" alt="">ping 명령으로 확인해보니 Private IP를 통해 정상적으로 통신중임!
<img src="https://velog.velcdn.com/images/haryun_209/post/06bc4cdb-2631-42cc-9722-6680d6aefe5a/image.png" alt=""><img src="https://velog.velcdn.com/images/haryun_209/post/8d76a771-e6e3-46ed-a2ee-f5ad483355a8/image.png" alt="">새로 추가한 HTTP 규칙으로 웹 서비스도 정상 접근 가능</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AWS] CloudFront]]></title>
            <link>https://velog.io/@haryun_209/AWS-CloudFront</link>
            <guid>https://velog.io/@haryun_209/AWS-CloudFront</guid>
            <pubDate>Thu, 03 Nov 2022 03:39:27 GMT</pubDate>
            <description><![CDATA[<h2 id="cloudfront">CloudFront</h2>
<blockquote>
<p>Amazon CloudFront는 .html, .css, .js 및 이미지 파일과 같은 정적 및 동적 웹 콘텐츠를 사용자에게 더 빨리 배포하도록 지원하는 웹 서비스입니다. CloudFront는 엣지 로케이션이라고 하는 데이터 센터의 전 세계 네트워크를 통해 콘텐츠를 제공합니다. CloudFront를 통해 서비스하는 콘텐츠를 사용자가 요청하면 지연 시간이 가장 낮은 엣지 로케이션으로 요청이 라우팅되므로 가능한 최고의 성능으로 콘텐츠가 제공됩니다. 
<a href="https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/Introduction.html">AWS</a></p>
</blockquote>
<p><strong>CloudFront</strong>는 AWS에서 제공하는 CDN 기능이다.
<strong>CDN(Contents Delivery Network)</strong>이란 <strong>지리적으로 서버를 분산시켜 사용자가 요청한 컨텐츠를 가까운 위치의 서버에서 전송함으로써 컨텐츠 제공 속도를 향상시키는 것</strong>을 의미한다.</p>
<ul>
<li>CDN 기술의 서버는 원본 컨텐츠를 가지고 있는 <strong>오리진 서버</strong>와 분산된 위치에 존재하는 <strong>캐시 서버</strong>로 나누어진다.</li>
<li>오리진 서버는 캐시 서버로 컨텐츠를 분산하여 저장한다. (이를 캐싱이라고 함)</li>
<li>사용자가 요청한 컨텐츠가 캐시 서버에 없는 경우 Cache Miss 상태가 되어 오리진 서버로 컨텐츠를 요청한다. (존재한다면 Cache Hit 상태)</li>
<li>캐싱 방식은 <strong>정적 캐싱과 동적 캐싱으로 구분</strong>된다.</li>
</ul>
<h3 id="1-cloudfront-기능">1. CloudFront 기능</h3>
<ul>
<li>글로벌 엣지 네트워크</li>
<li>정적/동적 컨텐츠 전송</li>
<li>장애 조치</li>
<li>SSL 지원</li>
<li>인증 url과 쿠키를 통한 인증과 접근제어</li>
</ul>
<h3 id="2-cloudfront-사용하기">2. CloudFront 사용하기</h3>
<h4 id="1-국외-리전에-환경을-구성한다">1) 국외 리전에 환경을 구성한다</h4>
<ul>
<li>VPC, Public subnet/routing table,  Internet Gateway, Public EC2 Instance(HTTP), Security group(SSH, HTTP)</li>
</ul>
<p>CloudFront 확인을 위해 상파울루 리전에 환경을 구성하였다.</p>
<h4 id="2-레코드-추가">2) 레코드 추가</h4>
<p>Route 53 레코드에 새로운 단순라우팅 레코드를 추가하여 EC2 인스턴스와 연결한 뒤 도메인에 접속하여 지연시간을 확인한다.
<img src="https://velog.velcdn.com/images/haryun_209/post/20e1aee7-0f23-43d2-b869-e36eb60b4b05/image.png" alt=""></p>
<p>웹에 대용량 이미지를 첨부하였기때문에 시간이 오래걸리는 것을 확인할 수 있다. 반복적으로 시도해본 결과 34~37s 정도 걸리는 듯 하다.</p>
<h4 id="3-cloudfront-배포-생성">3) CloudFront 배포 생성</h4>
<p>CloudFront에서 새로운 배포를 생성한다. 모든 엣지 로케이션에 컨텐츠를 배포하고, EC2 인스턴스의 퍼블릭 DNS 주소를 연결하여 지정한다. </p>
<p>배포시 도메인 검증을 위해 연결하고자 하는 도메인의 인증서가 필요하다. 버지니아 리전의 Certification Manager 대시보드에서 발급이 가능하고, 발급한 인증서는 Route 53에 새로운 레코드로 지정해야 검증이 정상적으로 진행된다. <em>(그런데 이 도메인 검증 절차가 생각보다 오래 걸린다,,,)</em>
<img src="https://velog.velcdn.com/images/haryun_209/post/36b03dbe-e58c-4998-82ef-671fa970e1d8/image.png" alt="">
배포도 5분~10분 정도 기다리니 완료되었다.</p>
<h4 id="4-대체-도메인에대한-레코드-생성">4) 대체 도메인에대한 레코드 생성</h4>
<p>Route 53에서 cdn.haryun.tk로 새로운 레코드를 정의한다.
<img src="https://velog.velcdn.com/images/haryun_209/post/583011a4-b163-4f75-be27-23b0fa8ba2bc/image.png" alt=""></p>
<h4 id="5-검증">5) 검증</h4>
<p>모든 설정이 끝났으니 검증을 진행한다. cdn.haryun.tk로 접속한다.
<img src="https://velog.velcdn.com/images/haryun_209/post/69b3cb52-7712-4ca1-8c8c-464c0f407144/image.png" alt="">36.88s -&gt; 946ms로 지연시간이 확연히 줄었다!
<img src="https://velog.velcdn.com/images/haryun_209/post/f2202b7f-c281-4757-b364-d186546c0ee0/image.png" alt="">해당 이미지의 헤더를 확인해보면 <strong>&#39;Hit from cloudfront&#39;</strong>라고 적혀있음을 확인할 수 있다. 클라우드프론트의 <strong>엣지 로케이션에 사용자가 요청한 컨텐츠가 존재</strong>한다는 의미이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AWS] Route 53]]></title>
            <link>https://velog.io/@haryun_209/AWS-Route-53</link>
            <guid>https://velog.io/@haryun_209/AWS-Route-53</guid>
            <pubDate>Wed, 02 Nov 2022 07:22:41 GMT</pubDate>
            <description><![CDATA[<h2 id="route-53">Route 53</h2>
<blockquote>
<p>Amazon Route 53는 높은 가용성과 확장성이 뛰어난 클라우드 Domain Name System (DNS) 웹 서비스입니다. 이 서비스는 최종 사용자를 인터넷 애플리케이션으로 라우팅할 수 있는 매우 안정적이고 비용 효율적인 방법을 개발자와 기업에 제공하기 위해 설계되었습니다. 이 서비스에서는 <a href="http://www.example.com%EA%B3%BC">www.example.com과</a> 같은 이름을 192.0.2.1과 같은 컴퓨터 간 연결에 사용되는 숫자 IP 주소로 변환합니다. 또한, Amazon Route 53는 IPv6와 완벽히 호환됩니다.
<a href="https://aws.amazon.com/ko/route53/">AWS</a></p>
</blockquote>
<p>Route 53은 AWS가 제공하는 DNS로, 운영중인 EC2나 S3와 같은 서비스의 <strong>엔드포인트와 접속할 IP 주소를 연결하는 기능</strong>을 담당한다. (엔드포인트: 해당 서비스에 접근하는 진입점)</p>
<p>DNS(Domain name system)은 네트워크의 복잡한 IP 주소체계를 도메인 네임에 매핑하여 연결하는 서비스이다. 해당 기능을 사용하기 위해서는 DNS 서버를 생성해야하는데 이 서버는 4가지 유형으로 분류된다.</p>
<ul>
<li>DNS 해석기</li>
<li>루트 네임 서버</li>
<li>TLD 네임 서버</li>
<li>권한 있는 네임 서버 </li>
</ul>
<h3 id="1-route-53의-서비스">1. Route 53의 서비스</h3>
<ul>
<li>도메인 이름 등록</li>
<li>DNS를 관리하는 호스팅 영역 </li>
<li>레코드를 생성하고 라우팅 정책 적용</li>
</ul>
<p>라우팅 정책의 경우 매우 다양한 방식을 지원하며, 용도에 맞게 적용 가능하다.
대표적인 라우팅 정책은 아래와 같다.</p>
<ul>
<li>Simple routing: 도메인에 하나의 리소스만을 지정하여 라우팅</li>
<li>Weighted routing: 도메인에 다수의 리소스를 지정하고 가중치 값에따라 라우팅</li>
<li>Latency routing: 다수의 리전에 리소스가 존재하고 지연시간이 가장 짧은 곳으로 라우팅</li>
<li>Failover routing: 주기적은 상태 확인을 통해 장애발생시 대상을 변경하여 라우팅</li>
</ul>
<p>이 외에도 다양한 정책이 존재한다. </p>
<h3 id="2-route-53에-개인-도메인-등록하기">2. Route 53에 개인 도메인 등록하기</h3>
<h4 id="1-domain-생성">1) Domain 생성</h4>
<p>freenom에서 12개월동안 무료로 이용 가능한 도메인을 생성했다.</p>
<h4 id="2-route-53에-호스팅-영역-추가">2) Route 53에 호스팅 영역 추가</h4>
<p>생성한 도메인을 새로운 호스팅 영역으로 지정한 뒤, freenom에 접속하여 route 53을 통해 생성된 네임서버를 적용한다. 해당 도메인에 A 레코드 또한 추가해준다.</p>
<h4 id="3-도메인에-접속하여-검증">3) 도메인에 접속하여 검증</h4>
<p><img src="https://velog.velcdn.com/images/haryun_209/post/809e650f-9d77-4c2d-b63b-a29e203156b2/image.png" alt=""><img src="https://velog.velcdn.com/images/haryun_209/post/7454cca1-70d1-489c-88cb-360ee6fde41b/image.png" alt="">생성한 도메인이 매핑한 IP로 정상 연결됨을 확인할 수 있다!
(Route 53에 최초 호스팅 영역을 생성하면 비용이 발생한다😭)</p>
<h3 id="3-route-53-구성하고-라우팅-정책-지정하기">3. Route 53 구성하고 라우팅 정책 지정하기</h3>
<h4 id="1-환경-준비">1) 환경 준비</h4>
<ul>
<li>VPC, public subnet, routing table, Internet gateway, public EC2 Instance, ALB, Security group 생성<h4 id="2-route-53-레코드-생성">2) Route 53 레코드 생성</h4>
단순 라우팅 정책을 적용하여 test.haryun.tk와 연결되도록 설정
<img src="https://velog.velcdn.com/images/haryun_209/post/208eedc4-b3b0-4110-a9b4-71bf70be0345/image.png" alt="">정상 접속
<img src="https://velog.velcdn.com/images/haryun_209/post/cbf06522-a851-40c4-aba9-10b4cfda8ef1/image.png" alt="">다시 접속하면 ALB가 분산처리 하여 두번째 인스턴스로 연결됨</li>
</ul>
<h4 id="3-과정">3) 과정</h4>
<p>1) 사용자가 주소 입력창에 test.haryun.tk를 입력하면 DNS 해석기에 해당 주소가 전달되고, DNS 해석기는 이를 루트 네임서버로 요청하여 .tk의 TLD 주소를 받는다. 
2) DNS 해석기는 다시 .tk의 TLD 주소를 네임서버로 요청하여 Route 53 호스팅 영역의 주소를 받는다.
3) DNS 해석기는 Route 53 호스팅 영역에 test.haryun.tk의 주소를 요청하여 응답을 받아 출력한다.</p>
<h4 id="4-장애-조치-라우팅-정책을-적용한-레코드-생성하기">4) 장애 조치 라우팅 정책을 적용한 레코드 생성하기</h4>
<p>Route 53의 상태검사에 EC2-1,2를 대상으로 추가한다.
<img src="https://velog.velcdn.com/images/haryun_209/post/1acae846-09eb-4e28-922f-568df09ef4e9/image.png" alt="">
장애조치 레코드를 추가한다.
<img src="https://velog.velcdn.com/images/haryun_209/post/991a5e69-ca18-4575-b829-c03dee01d414/image.png" alt="">
적용 후 해당 도메인에 접속하면 EC2-1 인스턴스로만 접속된다. (상태검사를 통해 정상적으로 작동중이기 때문임)</p>
<h4 id="5-장애-조치-라우팅-검증">5) 장애 조치 라우팅 검증</h4>
<p>EC2-1 인스턴스를 중지시킨 뒤에 다시 접속한다.
<img src="https://velog.velcdn.com/images/haryun_209/post/3a34501c-66a3-4601-bd27-880eca4043cf/image.png" alt="">상태 검사가 비정상 인것을 확인할 수 있다.
<img src="https://velog.velcdn.com/images/haryun_209/post/f998be7d-6bf0-434d-8175-4287fdbf514c/image.png" alt="">EC2-2 인스턴스로만 접속이 가능하다. (정상적으로 라우팅 되었음)</p>
]]></description>
        </item>
    </channel>
</rss>