<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>mer1</title>
        <link>https://velog.io/</link>
        <description>정보보안을 공부하는 학생 (github 블로그로 이사갔습니다!)</description>
        <lastBuildDate>Mon, 28 Jun 2021 14:43:32 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>mer1</title>
            <url>https://images.velog.io/images/mer1-97/profile/fa4781d3-008b-42ce-8182-b654037dd42d/KakaoTalk_20201221_141056744.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. mer1. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/mer1-97" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[안드로이드 앱 취약점 진단 환경 구성]]></title>
            <link>https://velog.io/@mer1-97/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1-%EC%B7%A8%EC%95%BD%EC%A0%90-%EC%A7%84%EB%8B%A8-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%84%B1</link>
            <guid>https://velog.io/@mer1-97/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1-%EC%B7%A8%EC%95%BD%EC%A0%90-%EC%A7%84%EB%8B%A8-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%84%B1</guid>
            <pubDate>Mon, 28 Jun 2021 14:43:32 GMT</pubDate>
            <description><![CDATA[<h2 id="1-개요">1. 개요</h2>
<p>안드로이드 앱 취약점 진단 실습을 위해서 환경을 구성하였는데, 이 과정을 기록하고자 글을 작성한다.</p>
<h2 id="2-설치">2. 설치</h2>
<ul>
<li>InsecureBankv2 : <a href="https://github.com/dineshshetty/Android-InsecureBankv2">다운로드</a></li>
<li>Anaconda3 : <a href="https://www.anaconda.com/products/individual#download-section">다운로드</a></li>
<li>Nox : <a href="https://kr.bignox.com/">다운로드</a><br />

</li>
</ul>
<h3 id="1-insecurebankv2">1) InsecureBankv2</h3>
<p>깃허브에 들어간 후 Download Zip을 이용해 다운로드한다.</p>
<h3 id="2-anaconda3">2) Anaconda3</h3>
<p>anaconda3.exe를 이용해 설치하면 되는데, 중간에 &quot;Advanced Option&quot;에서 &quot;Add Anaconda to the system PATH enviroment variable&quot;을 체크해야 한다.</p>
<p>설치 완료 후 anaconda prompt를 이용하여 아래 실습을 진행한다.</p>
<pre><code>conda create -n py2.7 python=2.7 -y
</code></pre><p>InsecureBank는 파이썬 2 버전에서만 동작하므로 파이썬 2.7 버전 환경 구성을 위해 위 명령어를 입력한다.</p>
<pre><code>
activate py2.7
</code></pre><p>구축한 환경을 실행한 후, Android-InsecureBankv2-master\AndroLabServer 경로로 이동한다. 
(필자의 경우 E:\mobile\Android-InsecureBankv2-master\AndroLabServer)</p>
<pre><code>pip install -r requirements.txt
pip install web.py==0.37</code></pre><p>AndroidLabServer 폴더 내 requirements.txt 파일을 통해 라이브러리를 설치한다.</p>
<pre><code>python app.py</code></pre><p><img src="https://images.velog.io/images/mer1-97/post/5c6f8d40-09c8-4a28-94a4-c650509fb0e7/image.png" alt=""> 서버를 실행한다.</p>
<h3 id="3-nox">3) Nox</h3>
<p>nox_setup.exe를 이용해 설치한다.
<br /></p>
<pre><code>D:\Program Files\Nox\bin</code></pre><p><img src="https://images.velog.io/images/mer1-97/post/92ebdd1a-cfbb-4796-ad79-f2c784ee713d/image.png" alt=""> 시스템 환경 변수 편집 (검색) -&gt; [시스템 속성] - [고급] - [환경 변수] -&gt; [시스템 변수] - [Path] - [편집] -&gt; [환경 변수 편집] - [새로만들기]를 통해 녹스 경로를 추가한다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/5567d175-924a-4c65-83f1-37f2b57a937a/image.png" alt=""> 설치 완료 후, [고급설정]에서 해상도 설정을 스마트폰으로 변경한다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/2e42636b-f761-4afd-bc27-f490bb647fe8/image.png" alt=""> [기본설정]에서 ROOT켜기를 체크한다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/903012b6-9e2c-4865-9245-2010d3ca2e67/image.png" alt=""> PC에서 InsecureBankv2.apk 파일을 드래그앤드롭하여 Nox로 이동시킨다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/9157c88a-ffb3-4b9f-8583-7e5dbcc8a48c/image.png" alt=""> InsecureBank 앱을 실행시킨 후 서버 IP를 자신의 IP 주소로 설정한다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/bd0dd926-b87a-4a17-a2e4-eea49a918bfd/image.png" alt=""> 기본 아이디와 패스워드를 이용해 로그인을 시도하면 정상적으로 접속이 된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Vi 편집기에서 쓸만한 팁]]></title>
            <link>https://velog.io/@mer1-97/Vi-%ED%8E%B8%EC%A7%91%EA%B8%B0%EC%97%90%EC%84%9C-%EC%93%B8%EB%A7%8C%ED%95%9C-%ED%8C%81</link>
            <guid>https://velog.io/@mer1-97/Vi-%ED%8E%B8%EC%A7%91%EA%B8%B0%EC%97%90%EC%84%9C-%EC%93%B8%EB%A7%8C%ED%95%9C-%ED%8C%81</guid>
            <pubDate>Fri, 04 Jun 2021 18:21:54 GMT</pubDate>
            <description><![CDATA[<h2 id="1-개요">1. 개요</h2>
<p>리눅스를 사용하다보면 vi 편집기를 쓸 일이 종종 있는데 이때 개인적으로 유용했던 것들을 기록하고자 글을 쓴다.
<br></p>
<h2 id="2-예시">2. 예시</h2>
<p><strong>1) Line number 보이기</strong></p>
<pre><code>:set nu or :set number</code></pre><p><img src="https://images.velog.io/images/mer1-97/post/3b15507d-43fc-40fd-9f67-a56175d51a3a/image.png" alt=""> vi 편집기를 쓰다보면 몇번째 줄인지 알아야 할 때가 있는데 이때 사용하면 유용하다.</p>
<br>


<p><strong>2) 검색하기</strong></p>
<pre><code>:/검색할 내용</code></pre><p><img src="https://images.velog.io/images/mer1-97/post/2062d838-c521-494c-a455-7b1862a76b4a/image.png" alt=""> vi 편집기를 쓰다보면 파일 내에 특정 문자열을 찾아야 할 때가 있는데 이때 사용하면 유용하다. 위 그림은 파일 안에 3 문자열을 찾기 위한 예시이다.</p>
<br>

<p><strong>지속적으로 추가 예정...</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[서버 정보 노출 취약점]]></title>
            <link>https://velog.io/@mer1-97/%EC%84%9C%EB%B2%84-%EC%A0%95%EB%B3%B4-%EB%85%B8%EC%B6%9C-%EC%B7%A8%EC%95%BD%EC%A0%90-ju3lyymb</link>
            <guid>https://velog.io/@mer1-97/%EC%84%9C%EB%B2%84-%EC%A0%95%EB%B3%B4-%EB%85%B8%EC%B6%9C-%EC%B7%A8%EC%95%BD%EC%A0%90-ju3lyymb</guid>
            <pubDate>Fri, 04 Jun 2021 17:56:15 GMT</pubDate>
            <description><![CDATA[<h2 id="1-개요">1. 개요</h2>
<p><strong>서버 정보 노출 취약점</strong>이란 서버/OS의 종류, 버전, 설치된 모듈 등의 정보가 응답 헤더에 노출이 되는 취약점이다. 해당 항목이 취약한 이유는 공격자가 버전을 확인하여 CVE 취약점을 검색해 공격을 시도할 수 있기 때문이다.
<br></p>
<h2 id="2-점검-방법">2. 점검 방법</h2>
<p>점검은 칼리리눅스에서 curl을 이용해 진행하였다.</p>
<h3 id="1-nginx">1) Nginx</h3>
<ul>
<li>취약 여부 판별<pre><code>curl -I &#39;IP 주소 또는 도메인&#39;</code></pre><img src="https://images.velog.io/images/mer1-97/post/05beb0f9-eb63-4541-acf3-2e1dc082e70c/image.png" alt=""> 웹 서버 응답 패킷에 서버 정보(nginx/1.14.0)가 노출되므로 취약하다고 판별할 수 있다.</li>
</ul>
<h3 id="2-apache">2) Apache</h3>
<ul>
<li>취약 여부 판별<pre><code>curl -I &#39;IP 주소 또는 도메인&#39;</code></pre><img src="https://images.velog.io/images/mer1-97/post/9a7fadae-55b0-463c-8fa2-e18036d537cc/image.png" alt=""> 웹 서버 응답 패킷에 서버 버전과 PHP 버전(Apache/2.2.8, PHP/5.2.4)이 노출되므로 취약하다고 판별할 수 있다.</li>
</ul>
<blockquote>
<p>X-Powered-By란? 
-&gt; 쉽게 말해서 어떤 기술로 개발되었는지를 나타냄</p>
</blockquote>
<br>

<h2 id="3-대응방안">3. 대응방안</h2>
<p>해당 취약점은 서버의 버전 정보를 확인할 수 있어 취약한 것이므로 서버의 정보가 노출되지 않도록 설정 파일을 수정한다.</p>
<blockquote>
<ul>
<li>설정 파일 수정을 통해 정보가 노출되지 않도록 조치</li>
</ul>
</blockquote>
<ul>
<li>Server, X-Powered-By, X-AspNet-Version 등 서버 정보가 노출될 수 있는 헤더 제거</li>
</ul>
<br>

<h3 id="1-nginx-1">1) Nginx</h3>
<pre><code>sudo vi /etc/nginx/nginx.conf</code></pre><p><img src="https://images.velog.io/images/mer1-97/post/40603173-03ff-4ebe-ad55-14f91af834ca/image.png" alt=""> nginx.conf 파일에서 server_tokens을 off로 설정한다.</p>
<pre><code>sudo service nginx restart</code></pre><p>위 명령어를 이용해 nginx를 재시작한다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/333a8fc9-3776-4efd-a76c-f1d0daaa58ee/image.png" alt=""> 다시 확인해본 결과, 서버의 버전 정보가 노출되지 않았다.</p>
<br>

<h3 id="2-apache-1">2) Apache</h3>
<ul>
<li>서버 정보 노출 조치<pre><code>sudo vi /etc/apache2/apache2.conf</code></pre></li>
</ul>
<p><img src="https://images.velog.io/images/mer1-97/post/f5e4a606-95c9-41dc-8cc1-e9218a9017e5/image.png" alt=""> apache2.conf 파일에서 ServerTokens을 Prod로 설정한다.</p>
<pre><code>sudo service apache2 restart 또는
sudo /etc/init.d/apache2 restart</code></pre><p>위 명령어를 이용해 apache를 재시작한다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/c0740afa-a965-4a09-b24f-a6ea9287de28/image.png" alt=""> 다시 확인해본 결과, 서버의 버전 정보가 노출되지 않았으나 X-Powered-By를 통해 PHP 버전 정보가 노출되고 있다.</p>
<br> 

<ul>
<li>X-Powered-By 정보 노출 조치</li>
</ul>
<pre><code>sudo find / -name php.ini</code></pre><p>위 명령어를 입력하여 php.ini 위치를 찾는다.
<br></p>
<pre><code>sudo vi /etc/php5/apache2/php.ini</code></pre><p><img src="https://images.velog.io/images/mer1-97/post/8dc1e301-63dc-4951-8ba6-d0817cf54629/image.png" alt=""> php.ini 파일에서 expose_php를 Off로 설정한다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/a3ca3d7b-2ced-484e-9f72-cb91245ebeca/image.png" alt=""> 다시 확인해본 결과, 서버가 Apache라는 것 외에는 아무 정보도 노출이 되지 않았다.
<br></p>
<h2 id="4-왜-점검하는가">4. 왜 점검하는가?</h2>
<p>해당 취약점을 조치해야 하는 이유는 공격자 획득한 버전 정보를 이용해 CVE 취약점을 확인하고 공격을 시도할 수 있기 때문이다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/69912db3-9afb-458f-a89b-a742ee7354a7/image.png" alt=""> 위 그림은 2020년에 발견된 Apache 취약점 중 일부 항목이다. 공격자는 알려진 취약점 정보를 이용해 어떤 버전에 어떤 포인트를 공격하면 될지 생각할 수 있게 된다.</p>
<p>2020년에 발생한 Apache CVE 정보는 <a href="https://www.cvedetails.com/vulnerability-list/vendor_id-45/product_id-66/year-2020/Apache-Http-Server.html">링크</a>를 참고하길 바란다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Ubuntu에 Nginx + PHP + MySQL (LEMP) 설치 방법]]></title>
            <link>https://velog.io/@mer1-97/Ubuntu%EC%97%90-Nginx-PHP-MySQL-LEMP-%EC%84%A4%EC%B9%98-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@mer1-97/Ubuntu%EC%97%90-Nginx-PHP-MySQL-LEMP-%EC%84%A4%EC%B9%98-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Fri, 04 Jun 2021 16:25:06 GMT</pubDate>
            <description><![CDATA[<h1 id="개요">개요</h1>
<p>LEMP 스택은 웹 서버를 설치하여 사용하기 위한 오픈 소스 소프트웨어 묶음으로 Linux, nginx, MySQL, PHP로 이루어져있다. 나의 경우는 Ubuntu 18.04.4, Nginx, PHP7, MySQL을 이용하여 구축하였다.</p>
<h1 id="설치">설치</h1>
<h3 id="1-권한-획득">1) 권한 획득</h3>
<pre><code>sudo su</code></pre><h3 id="2-mysql-설치">2) MySQL 설치</h3>
<pre><code>apt-get -y install mysql-server mysql-client</code></pre><h3 id="3-nginx-설치">3) Nginx 설치</h3>
<ul>
<li><p>apache 중지 및 삭제</p>
<pre><code>service apache2 stop
apt-get remove apache2</code></pre><p>아파치가 이미 설치된 경우 위 명령어를 통해 아파치를 삭제한다.</p>
</li>
<li><p>Nginx 설치 및 실행</p>
<pre><code>apt-get -y install nginx
service nginx start</code></pre></li>
<li><p>설치 확인
<img src="https://images.velog.io/images/mer1-97/post/f9864ec4-9e56-4f49-9108-0fb137a98bff/image.png" alt="">
웹 브라우저에서 localhost를 입력하여 위 그림과 같은 화면이 나오면 정상적으로 설치된 것이다.</p>
</li>
</ul>
<h3 id="4-php7-설치">4) PHP7 설치</h3>
<ul>
<li><p>PHP 7 패키지 PPA 설치</p>
<pre><code>add-apt-repository ppa:ondrej/php</code></pre></li>
<li><p>apt-get 업데이트</p>
<pre><code>apt-get update</code></pre></li>
<li><p>PHP 7 설치</p>
<pre><code>apt-get -y install php7.0-fpm</code></pre><p>php-fpm은 php에 FastCGI Process Manager가 추가된 것이다.</p>
</li>
</ul>
<h3 id="5-nginx-환경-설정">5) Nginx 환경 설정</h3>
<ul>
<li>환경 설정<pre><code>vi /etc/nginx/sites-available/default</code></pre><img src="https://images.velog.io/images/mer1-97/post/2646f197-47b8-49a4-bce1-4b77c9f241b9/image.png" alt=""> Line 56~57, 60, 63 : 주석 제거</li>
</ul>
<br>

<ul>
<li><p>Nginx 재시작</p>
<pre><code>service nginx reload</code></pre></li>
<li><p>cgi.fix_pathinfo 설정 변경</p>
<pre><code>vi /etc/php/7.0/fpm/php.ini</code></pre><p><img src="https://images.velog.io/images/mer1-97/post/fa501f7b-66f3-423f-9a9e-0c6ba451575d/image.png" alt=""> cig.fix_pathinfo 설정 값을 1에서 0으로 변경한다.</p>
</li>
</ul>
<p>cf) 상당히 아래에 있기 때문에 :/cgi.fix를 입력하여 이동하는 것이 좋음
<br></p>
<ul>
<li><p>PHP-FPM 재시작</p>
<pre><code>service php7.0-fpm reload</code></pre></li>
<li><p>구동 테스트</p>
<pre><code>vi /var/www/html/info.php</code></pre><pre><code class="language-php">&lt;?php
phpinfo();
?&gt;</code></pre>
<p>info.php를 생성한 후 웹 브라우저에서 localhost/info.php로 접속을 시도한다.</p>
</li>
</ul>
<p><img src="https://images.velog.io/images/mer1-97/post/790b528f-9c17-4b3d-91ee-9cb669c959da/image.png" alt=""> 위 그림처럼 뜨면 정상적으로 설치가 된 것이다.</p>
<h3 id="6-php7과-mysql-연결">6) PHP7과 MySQL 연결</h3>
<ul>
<li><p>관련 package 검색</p>
<pre><code>apt-cache search php7.0</code></pre><p><img src="https://images.velog.io/images/mer1-97/post/d80fa95b-ea16-40db-8548-83ba435f64c8/image.png" alt=""> PHP에서 MySQL을 지원하기 위해서 보통 php7.0-mysql package를 설치하는데, 관련 package를 쉽게 찾기 위해서 search 명령어를 사용한다.</p>
</li>
<li><p>패키지 설치</p>
<pre><code>apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache  php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext</code></pre><p>필요에 따라 패키지를 선택하여 설치해도 되지만 본인의 경우 전부 설치하였다.</p>
</li>
<li><p>PHP-FPM 재시작</p>
<pre><code>service php7.0-fpm reload</code></pre></li>
</ul>
<h3 id="7-nginx-환경-설정">7) Nginx 환경 설정</h3>
<ul>
<li><p>환경 설정</p>
<pre><code>vi /etc/nginx/sites-available/default</code></pre><p><img src="https://images.velog.io/images/mer1-97/post/af915c1c-8283-45a7-8c6a-93bbddfb7a6b/image.png" alt=""> Line 60 주석 처리 후 Line 62 주석 제거</p>
</li>
<li><p>Nginx 재시작</p>
<pre><code>service nginx reload</code></pre></li>
</ul>
<br>

<hr>
<h2 id="참고자료">참고자료</h2>
<ul>
<li><a href="https://kindmaster.tistory.com/135?category=550076">https://kindmaster.tistory.com/135?category=550076</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[퍼블릭/프라이빗 클라우드]]></title>
            <link>https://velog.io/@mer1-97/%ED%8D%BC%EB%B8%94%EB%A6%AD%ED%94%84%EB%9D%BC%EC%9D%B4%EB%B9%97-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C</link>
            <guid>https://velog.io/@mer1-97/%ED%8D%BC%EB%B8%94%EB%A6%AD%ED%94%84%EB%9D%BC%EC%9D%B4%EB%B9%97-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C</guid>
            <pubDate>Tue, 25 May 2021 14:49:29 GMT</pubDate>
            <description><![CDATA[<h2 id="1-개요">1. 개요</h2>
<p>퍼블릭 클라우드와 프라이빗 클라우드라는 단어를 자주 접하였지만 정확한 뜻을 몰라서 이번 기회에 정리하게 되었다.</p>
<p>들어가기에 앞서 클라우드 컴퓨팅에 설명하자면 이는 네트워크, 서버, 스토리지, 애플리케이션 등의 컴퓨팅 리소스에 언제든지 편하게 접근할 수 있는 기술이다.</p>
<br />

<h2 id="2-퍼블릭-클라우드public-cloud">2. 퍼블릭 클라우드(Public Cloud)</h2>
<h3 id="21-개요">2.1 개요</h3>
<p>퍼블릭 클라우드는 클라우드 서비스 제공 기업이 인터넷을 통해 불특정 다수의 기업, 개인에게 컴퓨팅 리소스를 빌려주는 것이다.</p>
<h3 id="22-특징">2.2 특징</h3>
<ul>
<li>클라우드 서비스 제공 기업(CSP, Cloud Solution Provider)이 인터넷을 통해 서버, 스토리지 등의 IT 인프라를 제공하는 형태이다.</li>
<li>클라우드 사용자인 기업 및 개인은 CSP로부터 리소스를 받아 서비스를 운영하기 때문에 서비스 운영을 위한 하드웨어나 IT 인프라 투자 비용을 줄일 수 있다.</li>
<li>클라우드 사용량에 따라 요금을 책정하기 때문에 비용 측면의 이점이 있다.</li>
<li>필요에 따라 유연하게 리소스를 확장할 수 있다.</li>
<li>대표적인 예시로 AWS, Azure 등이 있다.</li>
</ul>
<br />

<h2 id="3-프라이빗-클라우드private-cloud">3. 프라이빗 클라우드(Private Cloud)</h2>
<h3 id="31-개요">3.1 개요</h3>
<p>프라이빗 클라우드는 기업이 직접 클라우드 환경을 구축하고 내부에서만 컴퓨팅 리소스를 사용하는 서비스이다.</p>
<h3 id="32-특징">3.2 특징</h3>
<ul>
<li>제한된 네트워크 안에서 특정 기업이나 사용자만을 대상으로 인프라를 제공하는 서비스이다.</li>
<li>기업이 프라이빗 클라우드 솔루션을 구매하여 설치하며, 일반적으로 구매한 기업이 클라우드의 관리, 유지보수 및 운영을 담당한다.</li>
<li>비교적 클라우드 사용자인 기업의 권한이 많아 그 안에서 유동적으로 서비스 활용이 가능하다.</li>
<li>폐쇄적인 형태이기 때문에 비교적 보안에 유리하다.</li>
</ul>
<br />]]></description>
        </item>
        <item>
            <title><![CDATA[하드닝이란]]></title>
            <link>https://velog.io/@mer1-97/%ED%95%98%EB%93%9C%EB%8B%9D%EC%9D%B4%EB%9E%80</link>
            <guid>https://velog.io/@mer1-97/%ED%95%98%EB%93%9C%EB%8B%9D%EC%9D%B4%EB%9E%80</guid>
            <pubDate>Mon, 24 May 2021 14:50:26 GMT</pubDate>
            <description><![CDATA[<h3 id="하드닝hardening">하드닝(Hardening)</h3>
<p>하드닝은 사전적 의미로는 단단하게 만든다는 뜻으로 보안에서는 취약성을 줄이는 것 또는 시스템 보안을 견고하게 하는 것이라고도 한다. 하드닝은 한번만 하는게 아니라 아래 예시와 같은 작업을 계속 진행해야 한다.</p>
<h3 id="하드닝의-예시">하드닝의 예시</h3>
<ul>
<li>외부에서 공개하는 서비스 국소화</li>
<li>불필요한 프로그램의 실행 정지</li>
<li>취약점을 수정하는 패치의 신속한 적용</li>
</ul>
<p>등등</p>
<hr>
<h2 id="참고">참고</h2>
<p><a href="https://zetawiki.com/wiki/%ED%95%98%EB%93%9C%EB%8B%9D">https://zetawiki.com/wiki/%ED%95%98%EB%93%9C%EB%8B%9D</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2021년 1회 정보처리기사 실기 후기]]></title>
            <link>https://velog.io/@mer1-97/2021%EB%85%84-1%ED%9A%8C-%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-%ED%9B%84%EA%B8%B0</link>
            <guid>https://velog.io/@mer1-97/2021%EB%85%84-1%ED%9A%8C-%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-%ED%9B%84%EA%B8%B0</guid>
            <pubDate>Thu, 29 Apr 2021 15:29:19 GMT</pubDate>
            <description><![CDATA[<p>이전에 정보처리기사 필기 후기에 이어 실기 후기를 작성하도록 하겠습니다.</p>
<p>저는 IT 관련학과 4학년 재학 중인 대학생이며 시험 준비 기간은 1주였고 책은 ㅅㄴㄱ으로 준비했습니다. </p>
<p>학교 중간고사 기간, 면접 준비, 교육 수강 등을 동시에 하다 보니 생각보다 공부를 많이 하지 못했습니다.</p>
<p><del>가채점 결과, 부분점수가 없다고 가정하고 확실하게 맞은 것은 14개(70점)로 합격 예상을 하고 있습니다.</del>
(가채점 답안은 <a href="http://www.gisafirst.com/board/n1/view.php?offset=0&amp;tq=1393907668&amp;reqCategory=&amp;idx=406&amp;word=&amp;s_type=&amp;s_content=&amp;s_terms=">여기</a>를 참고하였음)</p>
<p>6월 2일에 시험 결과가 나왔는데 78점이었습니다.
2021년 1회차 실기에는 부분 점수가 존재하는 것 같았으니 참고해주세요!</p>
<p>접수부터 시험 후기까지 상세히 알려드리도록 하겠습니다.</p>
<h2 id="1-시험-접수">1. 시험 접수</h2>
<p>필기 시험 때 늦게 신청을 하려다 고생했던 경험이 있어서 이번에는 시험 접수 첫날 시작하는 시간에 맞춰 큐넷에 들어갔고 그 결과 서울에 고사장을 잡을 수 있었습니다.</p>
<h2 id="2-공부-방법">2. 공부 방법</h2>
<p>저는 시험 1주 전에 공부를 시작했습니다.</p>
<p>책을 보기 전에 문제가 어떻게 나오는지 확인하려고 기출 문제를 확인해보았습니다.</p>
<p>2020년도에는 단답형, 서술형 등의 유형이 나왔으며 그 용어나 용어의 뜻을 서술하는 문제들이 있었습니다.</p>
<p>제가 산 책에는 중요도가 A,B,C,D로 나눠져있어서 중요도에 따라 공부를 했습니다. </p>
<p>저는 시간이 없었기에 이전 기출에서 2회 이상 출제되었던 부분은 대부분 스킵하고 중요도 A,B에 대해서만 공부하였습니다. </p>
<h2 id="3-시험-후기">3. 시험 후기</h2>
<p>간략하게 시험 후기를 적자면 2020년도와 달리 용어의 뜻을 서술하라는 문제는 전혀 없었고 전반적으로 쉽게 출제되었습니다.</p>
<p>저 같은 경우에는 책에 SQL, 프로그래밍 예제를 전부 풀어보았는데 거기에 나오는 가장 쉬운 문제 급으로 출제되었습니다.</p>
<h2 id="4-총평">4. 총평</h2>
<p>저는 운이 좋게도 이번 실기 시험의 난이도가 낮아서 1주일 만에 합격할 수 있었습니다. 2회는 1회보다 다소 어렵게 출제될 수 있으니 최소 2주 정도는 공부하셔야 무난하게 합격 가능할 것 같습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Error] sudoers 설정 파일에 없습니다. 이 시도를 보고합니다.]]></title>
            <link>https://velog.io/@mer1-97/Error-sudoers-%EC%84%A4%EC%A0%95-%ED%8C%8C%EC%9D%BC%EC%97%90-%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.-%EC%9D%B4-%EC%8B%9C%EB%8F%84%EB%A5%BC-%EB%B3%B4%EA%B3%A0%ED%95%A9%EB%8B%88%EB%8B%A4</link>
            <guid>https://velog.io/@mer1-97/Error-sudoers-%EC%84%A4%EC%A0%95-%ED%8C%8C%EC%9D%BC%EC%97%90-%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.-%EC%9D%B4-%EC%8B%9C%EB%8F%84%EB%A5%BC-%EB%B3%B4%EA%B3%A0%ED%95%A9%EB%8B%88%EB%8B%A4</guid>
            <pubDate>Tue, 13 Apr 2021 02:39:40 GMT</pubDate>
            <description><![CDATA[<h2 id="개요">개요</h2>
<p><img src="https://images.velog.io/images/mer1-97/post/e6255759-ba8b-4cfe-99bf-dd7d35b26c1b/image.png" alt=""> VMware ESXi에서 테스트용 인프라를 구축하기 위해 여러 가지 운영체제를 설치하고 있었다. 그러던 중, CentOS 명령 프롬프트에서 일반 사용자 계정에 root 권한을 부여하기 위해 sudo su, sudo -s 명령어를 입력했는데 &#39;sudoers 설정 파일에 없습니다. 이 시도를 보고합니다.&#39; 오류가 발생했다. 이를 해결하기 위해 구글링을 하였고 해결 방법을 남기고자 글을 쓴다.</p>
<br>

<h2 id="su-vs-sudo">su vs sudo</h2>
<p>sudoers 파일을 수정하기 위해서는 먼저 위의 개념을 알아야 한다.
su와 sudo는 root 권한으로 명령을 내리는 데 사용한다. root는 Windows에서 Administrator와 같은 개념으로 시스템에 대한 모든 권한을 갖고 작업을 할 수 있다. 즉, su와 sudo를 통해 root 권한을 획득할 수 있다.</p>
<p>둘의 차이는 su를 아무런 옵션 없이 실행하면 root 계정의 암호 입력을 통해 root 계정으로 사용자를 전환할 수 있다. sudo는 사용자 계정의 암호 입력을 통해 sudo 다음에 나오는 명령에 root 권한을 부여한 후 실행한다.</p>
<p>공통점</p>
<ul>
<li>root 권한으로 명령을 내리는 데 사용</li>
</ul>
<p>차이점</p>
<ul>
<li>su : root 계정으로 전환, root 계정의 암호 입력이 필요함</li>
<li>sudo : 계정 전환이 없음, 단일 명령어에 일시적으로 root 권한 부여, 사용자 계정의 암호 입력이 필요함</li>
</ul>
<br>

<h2 id="sudoers-파일">sudoers 파일</h2>
<p>sudoers 파일은 sudo 명령어에 대한 설정이 정의되어있다. 해당 파일 안에 sudo 명령어를 사용할 수 있는 계정을 지정할 수 있는데, &#39;sudoers 설정 파일에 없습니다. 이 시도를 보고합니다.&#39; 오류가 발생한 이유는 sudo 명령을 입력한 일반 사용자 계정에 대한 설정이 없었기 때문이다. </p>
<p>정리하면 sudo 명령어를 사용하기 위해서는 sudoers 파일에 일반 사용자 계정에 대한 설정이 있어야 하며, 없으면 su 명령어를 통해 root 계정으로 전환한 후 sudoers 파일을 수정해야 한다.</p>
<br>

<h2 id="문제해결">문제해결</h2>
<p><img src="https://images.velog.io/images/mer1-97/post/b1963456-7264-4eb8-ad7c-7499e53d0802/image.png" alt=""> su 명령어를 입력하여 root 계정으로 전환한다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/8d3a82cc-5827-408a-913d-94351fd0de74/image.png" alt=""> sudoers 파일은 쓰기(w) 권한이 없기 때문에 vi 편집기로 수정할 수 없다. 이를 해결할 방법이 2가지 있다.</p>
<ul>
<li>visudo 명령어 이용 (권장)</li>
<li>chomd 명령어로 파일 권한 변경 후 수정</li>
</ul>
<p>visudo에 대한 자세한 설명은 <a href="https://www.sudo.ws/man/1.8.17/visudo.man.html">여기</a>를 클릭하세요.</p>
<br>

<pre><code>visudo -f /etc/sudoers</code></pre><p><img src="https://images.velog.io/images/mer1-97/post/0a60c239-d170-4c95-b4fc-b177f71ae739/image.png" alt=""> 위 명령어를 이용하면 sudoers 파일을 수정할 수 있게 된다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/53a0935c-2644-4be7-848b-db44fc1645e4/image.png" alt=""> 해당 부분에 일반 사용자 계정명 ALL=(ALL) ALL을 추가하여 사용자가 sudo 명령어를 사용할 수 있도록 설정한다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/618d7642-7ee5-4d76-b6ab-3ba36b94c648/image.png" alt=""> 그 후 :wq를 입력하여 저장한다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/a6284f3a-7a93-4ce9-89ac-e5733f806b3e/image.png" alt=""> 일반 사용자 계정으로 sudo 명령어를 입력하면 에러가 발생하지 않고 정상적으로 접속된다.</p>
<br>

<h2 id="참고문헌">참고문헌</h2>
<p><a href="https://whitewing4139.tistory.com/74">https://whitewing4139.tistory.com/74</a>
<a href="https://coding-ggangfe.tistory.com/32">https://coding-ggangfe.tistory.com/32</a>
<a href="https://mans-daily.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4UbuntuCentOS-etcsudoers-%ED%8C%8C%EC%9D%BC%EC%9D%84-%EC%88%98%EC%A0%95%ED%95%98%EC%97%AC-sudo-%EA%B6%8C%ED%95%9C-%EB%B0%8F-root-%EA%B6%8C%ED%95%9C-%EB%B6%80%EC%97%AC%ED%95%98%EA%B8%B0">https://mans-daily.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4UbuntuCentOS-etcsudoers-%ED%8C%8C%EC%9D%BC%EC%9D%84-%EC%88%98%EC%A0%95%ED%95%98%EC%97%AC-sudo-%EA%B6%8C%ED%95%9C-%EB%B0%8F-root-%EA%B6%8C%ED%95%9C-%EB%B6%80%EC%97%AC%ED%95%98%EA%B8%B0</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Python3에서 IP, MAC 주소 가져오기]]></title>
            <link>https://velog.io/@mer1-97/Python3%EC%97%90%EC%84%9C-IP-MAC-%EC%A3%BC%EC%86%8C-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0</link>
            <guid>https://velog.io/@mer1-97/Python3%EC%97%90%EC%84%9C-IP-MAC-%EC%A3%BC%EC%86%8C-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0</guid>
            <pubDate>Thu, 01 Apr 2021 12:08:48 GMT</pubDate>
            <description><![CDATA[<h2 id="개요">개요</h2>
<p>최근에 ARP 스푸핑 공격 실습을 위해 파이썬으로 스크립트를 작성하고 있었다. 공격을 위해서는 호스트 PC의 IP, MAC 주소를 알아야 했는데, 노트북에 VMware와 그 안에 수많은 게스트 OS들이 존재했다. 
socket.gethostbyname(socket.gethostname()) 명령어로는 가상 환경의 IP 주소만 얻을 수 있었지만 구글링을 통해 이를 해결하였고 기록을 남겨두고자 한다.
<br></p>
<h2 id="ip-주소">IP 주소</h2>
<pre><code class="language-python">import socket</code></pre>
<p>파이썬에는 네트워크에 관련된 필요한 대부분의 기능을 제공하는 socket 모듈이 존재한다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/41e322c9-5ea0-4230-aafc-1f4c6ed0f56a/image.png" alt="">socket 모듈을 통해 IP 주소 획득도 가능하다.</p>
<pre><code class="language-python">print(socket.gethostbyname(socket.gethostname())) - (1)
print(socket.gethostbyname(socket.getfqdn())) - (2)
print(socket.gethostbyname_ex(socket.getfqdn())) - (3)
</code></pre>
<p>보통은 IP 주소를 얻기 위해 위의 명령어를 사용한다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/cc1f76b2-040c-486b-8969-c2ed770cf833/image.png" alt=""> 그러나, 내 환경에서는 호스트 PC의 IP 주소 192.168.123.108이 아닌 192.168.0.1이 출력이 된다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/06562d96-844a-48b7-92b6-543918270340/image.png" alt=""> 물론 (3) 명령어를 이용해서 모든 IP 주소를 획득한 후 골라내는 방법도 있지만 이보다 좋은 방법이 있다.</p>
<pre><code class="language-python">s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect((&#39;8.8.8.8&#39;, 80))
ip = s.getsockname()[0]
s.close()</code></pre>
<p>위 명령어를 통해 UDP 소켓을 외부 IP(구글 DNS 서버)에 연결하여 외부 시스템에 도달하기 위해 사용해야 하는 로컬 IP 주소를 파악할 수 있다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/3c77fbe0-5dfa-47ba-8deb-040707d7c2ff/image.png" alt=""> 실행 결과는 위 그림과 같다. 이 방법의 단점은 인터넷이 연결되어 있지 않은 경우 IP 주소를 얻어올 수 없다.
<br></p>
<h2 id="mac-주소">MAC 주소</h2>
<pre><code class="language-python">import re
from uuid import getnode

print(&quot;MAC : &quot;,&#39;:&#39;.join(re.findall(&#39;..&#39;, &#39;%012x&#39; % getnode())))</code></pre>
<p>파이썬 내장 모듈을 이용해서 MAC 주소를 얻을 수 있다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/ff461db2-03c4-4a6b-9bc8-ce2533dc6db6/image.png" alt=""> 실행 결과는 위 그림과 같다.
<br></p>
<hr>
<h2 id="참고문헌">참고문헌</h2>
<p><a href="https://see-ro-e.tistory.com/173">https://see-ro-e.tistory.com/173</a>
<a href="https://stackoverflow.com/questions/159137/getting-mac-address">https://stackoverflow.com/questions/159137/getting-mac-address</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ARP 정의 및 구조]]></title>
            <link>https://velog.io/@mer1-97/ARP-%EC%A0%95%EC%9D%98-%EB%B0%8F-%EA%B5%AC%EC%A1%B0</link>
            <guid>https://velog.io/@mer1-97/ARP-%EC%A0%95%EC%9D%98-%EB%B0%8F-%EA%B5%AC%EC%A1%B0</guid>
            <pubDate>Tue, 30 Mar 2021 17:07:11 GMT</pubDate>
            <description><![CDATA[<h2 id="arpaddress-resolution-protocol란">ARP(Address Resolution Protocol)란?</h2>
<h3 id="정의">정의</h3>
<ul>
<li>동일한 네트워크 대역(LAN 영역)에서 통신하기 위해 필요한 MAC 주소(물리적 주소)를 IP주소를 이용해서 알아오는 프로토콜</li>
<li>즉, 논리적인 주소(IP)를 이용해 물리적인 주소(MAC)를 알아오는 프로토콜<br />

</li>
</ul>
<h3 id="특징">특징</h3>
<ul>
<li>IP 주소와 이에 해당하는 MAC 주소 정보는 각 IP 호스트의 ARP 캐시라 불리는 메모리에 테이블 형태로 저장된 후 패킷 전송 시 사용된다.</li>
<li>Windows는 명령 프롬프트(cmd)에 arp -a 명령어, 리눅스의 경우 arp 명령어를 통하여 IP 주소와 MAC 주소의 대응 관계를 확인할 수 있다.</li>
<li>반대로 MAC 주소를 IP 주소로 대응 시키기 위해 사용하는 프로토콜인 RARP(Reverse Address Resolution Protocol)이 있다.</li>
</ul>
<p><img src="https://images.velog.io/images/mer1-97/post/4410bad5-a7a9-4c97-b4a8-9057a72f959b/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/mer1-97/post/4a1805a0-0027-467e-9192-11308bcdc654/image.png" alt="">운영체제에 따른 arp 캐시 테이블 조회 결과는 위와 같다.
<br /></p>
<h3 id="설명">설명</h3>
<p>컴퓨터는 IP 주소를 통해 다른 컴퓨터를 식별하는게 아니라 MAC 주소(물리적 주소)를 이용해 식별한다. 즉, IP 간 통신을 위해서는 MAC 주소(물리적 주소)를 알아야 하는데, 이를 확인하는 방법이 바로 ARP이다.
<br /></p>
<h3 id="헤더-구조">헤더 구조</h3>
<p><img src="https://images.velog.io/images/mer1-97/post/a6bf03cb-7a6b-47e6-9d37-c2ff2ad62fef/image.png" alt=""> ARP 헤더는 총 28bytes의 길이를 가진다.</p>
<ul>
<li>Hardware type(HTYPE) : 네트워크 유형을 뜻하지만 일반적으로 사용되는 Ethernet 환경은 0x0001 으로 세팅</li>
<li>Protocol type(PTYPE) : 프로토콜을 정의한다. IPv4의 경우 0x0800 으로 세팅되며, 아직 IPv6는 거의 사용되지 않기 때문에 보통 0x0800 으로 세팅</li>
<li>Hardware address length : MAC 주소(물리적 주소) 길이를 정의하며 Ethernet 환경의 경우 0x06 세팅</li>
<li>Protocol address length : 프로토콜의 길이를 정의하며 IPv4는 0x04 세팅. Protocol type 에서 설명한 것과 같이 아직 IPv6는 거의 사용되지 않기 때문에 보통 IPv4인 0x04 세팅이 고정적임</li>
<li>Opcode : ARP 패킷이 요청(Request) 또는 응답(Reply)에 따라 값이 바뀌게 되고 요청의 경우 1, 응답의 경우 2가 세팅</li>
<li>Source hardware address : 출발지 MAC 주소</li>
<li>Source protocol address : 출발지 IP 주소</li>
<li>Destination hardware address : 목적지 MAC 주소, 요청(Request)의 경우 목적지 MAC 주소를 모르기 때문에 0으로 세팅</li>
<li>Destination protocol address : 목적지 IP 주소<br />

</li>
</ul>
<h3 id="실습">실습</h3>
<p align="center"><img src = https://images.velog.io/images/mer1-97/post/0ef01293-4a94-4122-bcd1-018f6fddfe06/image.png width="250px"></p>ARP 캐시 테이블이 비워진 Test PC에서 ping 8.8.8.8 명령어를 입력하여 어떻게 ARP가 동작하는지 이해해보자.

<p><img src="https://images.velog.io/images/mer1-97/post/a197cddd-3a0d-411f-922c-91b22a1cf5aa/image.png" alt=""> ping 8.8.8.8 명령어 입력</p>
<p align="center"><img src = https://images.velog.io/images/mer1-97/post/3a082e6b-837a-4461-b5a0-ce935a2495ba/image.png width="400px"></p>ping 명령어 입력 시 운영체제는 서브넷 마스크를 기준으로 출발지와 도착지 네트워크 ID를 비교한다. 


<p><img src="https://images.velog.io/images/mer1-97/post/2881f652-6406-4af6-a345-1f60105503f5/image.png" alt="">출발지 네트워크 ID는 192.168.0이고 도착지 네트워크 ID는 8.8.8이므로 서로 다른 LAN 영역에 존재한다. 따라서 목적지 IP 주소를 게이트웨이의 IP 주소로 변경해야 한다. 네트워크 ID가 동일하다는 것은 동일한 LAN 영역에 위치한다는 뜻이며, 게이트웨이까지 스위칭 통신을 하기 위해 목적지 MAC 주소가 필요하다.</p>
<p>Test PC(출발지 호스트)는 목적지 MAC 주소를 알아내기 위해 자신이 속한 LAN 영역 전체(동일한 네트워크 ID를 사용하는 호스트)를 대상으로 192.168.0.2에 대응하는 MAC 주소를 찾기 위해 ARP 질의를 브로드캐스트 방식으로 전송한다.</p>
<blockquote>
<p>브로드캐스트(Broadcast)
자신과 동일한 네트워크 ID를 사용하는 모든 호스트에게 데이터를 전송</p>
</blockquote>
<p>게이트웨이(192.168.0.2)는 자신의 MAC 주소를 요청하는 사실을 알기에 유니캐스트(Unicast)로 자신의 MAC 주소를 Test PC에 전달한다.</p>
<blockquote>
<p>유니캐스트(Unicast)
특정 호스트에게 데이터를 전송</p>
</blockquote>
<p><img src="https://images.velog.io/images/mer1-97/post/23b8da8e-4c3a-4d97-abde-2f1ebb6e50be/image.png" alt=""> 위 그림처럼 ARP 캐시 테이블에 목적지 MAC 주소가 올라오면 운영체제는 ARP 캐시 테이블을 참조해 ping 데이터를 유니캐스트 방식으로 게이트웨이에 전송한다. 이후, 게이트웨이가 IP 주소에 기반한 라우팅 통신을 진행한다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/b69eea7f-095f-4a55-ada5-dc4697f27c9b/image.png" alt=""> ping 명령어를 입력한 후 ARP 캐시테이블을 확인한 결과는 위 그림과 같다.</p>
<p>정리하자면, 네트워크 계층에서 IP 간 통신을 하기 위해서는 데이터링크 계층에서 통신 경로를 먼저 설정해야 하며 도착지 식별을 위해 MAC 주소(물리적 주소)가 필요하다. ARP는 IP 주소를 MAC 주소로 변환시켜주는 프로토콜이며 IP, MAC 주소 간 매핑 정보는 ARP 캐시테이블에 저장이 된다. 다음에 통신 시 캐시테이블을 참조하여 데이터링크 계층 통신을 할 수 있다. 
<br /></p>
<h3 id="패킷-분석">패킷 분석</h3>
<p><img src="https://images.velog.io/images/mer1-97/post/5d0e806f-68c5-467b-b3f4-88622cdea82d/image.png" alt=""> 와이어샤크를 통해 ping 8.8.8.8 명령어 입력 시 ARP 패킷을 분석해보자.</p>
<p>1) ARP Request 패킷
<img src="https://images.velog.io/images/mer1-97/post/d5c02e24-4add-4a82-b13c-5ee3b2bc071e/image.png" alt=""> </p>
<ul>
<li>Hardware type(HTYPE) : 0x0001 (Ethernet 환경)</li>
<li>Protocol type(PTYPE) : 0x0800 (IPv4)</li>
<li>Hardware address length : 0x06 (Ethernet 환경)</li>
<li>Protocol address length : 0x04 (IPv4)</li>
<li>Opcode : 0x01 (ARP Request 패킷)</li>
<li>Source hardware address : 0x000c2902798c</li>
<li>Source protocol address : 0xc0a800c8 (10진수:192.168.0.200)</li>
<li>Destination hardware address : 0x0000000000 </li>
<li>Destination protocol address : 0xc0a80002 (10진수:192.168.0.2)<br />

</li>
</ul>
<p>2) ARP Response 패킷
<img src="https://images.velog.io/images/mer1-97/post/36d2f0a6-0d8d-4491-b845-53ba323b8e96/image.png" alt=""></p>
<ul>
<li>Hardware type(HTYPE) : 0x0001 (Ethernet 환경)</li>
<li>Protocol type(PTYPE) : 0x0800 (IPv4)</li>
<li>Hardware address length : 0x06 (Ethernet 환경)</li>
<li>Protocol address length : 0x04 (IPv4)</li>
<li>Opcode : 0x01 (ARP Request 패킷)</li>
<li>Source hardware address : 0x005056fc33b2</li>
<li>Source protocol address : 0xc0a80002 (10진수:192.168.0.2)</li>
<li>Destination hardware address : 0x000c2902798c</li>
<li>Destination protocol address : 0xc0a800c8 (10진수:192.168.0.200)</li>
</ul>
<br />

<hr>
<h2 id="참고문헌">참고문헌</h2>
<p><a href="https://ssup2.github.io/theory_analysis/Address_Resolution_Protocol/">https://ssup2.github.io/theory_analysis/Address_Resolution_Protocol/</a>
<a href="https://nirsa.tistory.com/27">https://nirsa.tistory.com/27</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[VMware NAT 설정 시 게스트 OS간 핑이 가지 않는 문제]]></title>
            <link>https://velog.io/@mer1-97/VMware-NAT-%EC%84%A4%EC%A0%95-%EC%8B%9C-%EA%B2%8C%EC%8A%A4%ED%8A%B8-OS%EA%B0%84-%ED%95%91%EC%9D%B4-%EA%B0%80%EC%A7%80-%EC%95%8A%EB%8A%94-%EB%AC%B8%EC%A0%9C-du0cvjdm</link>
            <guid>https://velog.io/@mer1-97/VMware-NAT-%EC%84%A4%EC%A0%95-%EC%8B%9C-%EA%B2%8C%EC%8A%A4%ED%8A%B8-OS%EA%B0%84-%ED%95%91%EC%9D%B4-%EA%B0%80%EC%A7%80-%EC%95%8A%EB%8A%94-%EB%AC%B8%EC%A0%9C-du0cvjdm</guid>
            <pubDate>Tue, 30 Mar 2021 07:20:09 GMT</pubDate>
            <description><![CDATA[<p>VMware를 이용해 웹 취약점 테스트용 가상 환경을 구성하던 중 게스트 OS간 핑이 가지 않는 문제가 발생했다. </p>
<p align="center"><img src = https://images.velog.io/images/mer1-97/post/e0728e35-5878-4e08-b689-4e96506aa086/image.png width="450px"></p>
VMware에서 가상 네트워크의 종류 중 하나인 NAT(Network Address Translation)는 호스트 PC로부터 IP를 할당받아 가상 머신 프로그램이 자체 DHCP 서버를 띄워 내부 네트워크 대역 할당 및 통신을 한다. 설정 시 호스트 PC를 통해 외부 네트워크와 통신이 가능하다.

<p align="center"><img src = https://images.velog.io/images/mer1-97/post/ce603443-5ea4-40b9-a649-15ff6e664753/image.png width="450px"></p>
위 그림은 192.168.0.249에서 192.168.0.171에 접속한 것이며 이처럼 NAT로 설정한 게스트 OS는 서로 통신이 가능하다.

<p align="center"><img src = https://images.velog.io/images/mer1-97/post/f62caec5-c054-4728-ab00-c4c5305b4cfb/image.png width="450px"></p>
그러나, 게스트 OS간 ping이 가지 않는 현상이 나타났다.
해당 문제를 해결하기 위해 검색한 결과 방화벽 설정이 문제라는 것을 알게 되었다.

<p align="center"><img src = https://images.velog.io/images/mer1-97/post/5a9f6394-e394-4f40-9ec7-c7bb595080e4/image.png width="450px"></p>
<p align="center"><img src = https://images.velog.io/images/mer1-97/post/67d7a00a-660a-4c9c-8647-3129312a24c3/image.png width="450px"></p>
게스트 OS에서 방화벽이 활성화되어 있었는데 이를 비활성화한다.

<p align="center"><img src = https://images.velog.io/images/mer1-97/post/7b227494-d83b-4690-a6a3-6e584fddaade/image.png width="450px"></p>
다시 ping을 시도하면 성공적으로 동작한다.]]></description>
        </item>
        <item>
            <title><![CDATA[[Error] MySQL-No database selected]]></title>
            <link>https://velog.io/@mer1-97/Error-No-database-selected</link>
            <guid>https://velog.io/@mer1-97/Error-No-database-selected</guid>
            <pubDate>Tue, 23 Mar 2021 09:00:59 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>ERROR : No database selected</p>
</blockquote>
<p>mysql에서 해당 에러가 발생하는 이유는 사용하고자 할 데이터 베이스를 선택하지 않았기 때문이다.</p>
<pre><code>show databases;
use [데이터 베이스명];</code></pre><p>show databases를 통해 데이터 베이스를 확인하고 use를 통해 사용하고자 할 데이터 베이스를 선택하면 된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[웹 아키텍처 분석]]></title>
            <link>https://velog.io/@mer1-97/%EC%9B%B9-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EB%B6%84%EC%84%9D</link>
            <guid>https://velog.io/@mer1-97/%EC%9B%B9-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EB%B6%84%EC%84%9D</guid>
            <pubDate>Tue, 16 Mar 2021 07:44:46 GMT</pubDate>
            <description><![CDATA[<h4 id="본-게시글은-인프런-크리핵티브-무료-강의-반드시-알고-넘어가야-할-웹-기술-기초편을-참고하여-작성하였습니다">본 게시글은 인프런 크리핵티브 무료 강의 &quot;반드시 알고 넘어가야 할 웹 기술 기초편&quot;을 참고하여 작성하였습니다.</h4>
<hr>
<h2 id="웹-아키텍처-동작-원리">웹 아키텍처 동작 원리</h2>
<p><img src="https://images.velog.io/images/mer1-97/post/bd574e9a-eed4-4d54-aa67-c831a738884b/image.png" alt="">
클라이언트 측에서 사용자가 웹 브라우저를 통해 사이트에 접속하게 되면 웹 브라우저에서는 도메인에 따른 IP 변환 작업을 한다. 이유는 데이터 전송을 위해서는 IP가 반드시 필요하기 때문이다. 이후, HTTP 요청 메시지를 제작한다.
<br/></p>
<p align="center"><img src = "https://images.velog.io/images/mer1-97/post/02e55714-fa6a-4cc9-819d-b94cd41acd81/image.png" width="500px"></p>
HTTP 프로토콜은 TCP/IP 통신을 기반으로 하기 때문에 TCP 연결의 특징인 3-way hand shake 과정을 거친 후 HTTP 데이터를 전송하게 된다. 요청에 따른 DB 연결 및 질의 과정을 거치며, 이에 따라 응답 메시지를 제작 후 전송을 한다. 

<p><img src="https://images.velog.io/images/mer1-97/post/7beedf0e-35da-467f-bda5-703f308dcc10/image.png" alt="">
웹 서버로부터 응답 메시지를 받으면 이를 해석 후 바디에 있는 데이터인 HTML 코드를 웹 브라우저가 해석하여 사용자에게 깔끔한 인터페이스를 제공한다.
<br /></p>
<h3 id="참고">참고</h3>
<ul>
<li><p>로컬 DNS 캐시 (cmd -&gt; ipconfig /displaydns)</p>
<p align="center"><img src = "https://images.velog.io/images/mer1-97/post/91641769-57d8-46d7-8a75-faf936ae707c/image.png" width="300px"></p>
</li>
<li><p>hosts 파일 (C:\Windows\System32\drivers\etc\hosts)</p>
</li>
</ul>
<p align="center"><img src = "https://images.velog.io/images/mer1-97/post/1e70ce7b-d9b7-4f1b-9307-2994c9d95e43/image.png" width="300px"></p>
hosts 파일은 DNS 서버를 사용하기 이전에 Windows에서 주로 사용하던 파일로 서버 주소를 적어 놓은 텍스트 파일이다. 인터넷 연결이 현재는 대부분 DNS 서버를 통해 이루어지고 있지만, Windows에서는 hosts 파일을 이용하여 IP 주소와 호스트 이름을 매핑시켜 준다.

<ul>
<li>클라이언트</li>
</ul>
<p>대표적으로 웹 브라우저가 있으며 종류로는 인터넷 익스플로러, 크롬, 사파리, 파이어폭스 등이 있다. 웹 브라우저는 사용자가 입력한 URL을 이용해 서버에 자원을 요청하고, 서버로부터 응답을 받아서 해석 후(HTML, CSS, JAVASCRIPT 코드) 사용자에게 GUI 환경을 제공한다.
<br /></p>
<h2 id="웹-사이트-구조-분석">웹 사이트 구조 분석</h2>
<p><img src="https://images.velog.io/images/mer1-97/post/cdfb2b75-ba26-4b99-bb13-655c974a151f/image.png" alt="">
웹 사이트는 HTML, CSS, JAVASCRIPT 3요소로 구성이 되어있다. 웹에 가독성 있는 인터페이스를 구성하기 위해 HTML, CSS가 사용되며 동적인 인터페이스 구성을 위해 JAVASCRIPT가 사용된다. 일반적으로 웹 사이트는 웹 서버와 통신을 위해 HTML 태그를 사용하거나 JAVASCRIPT를 통해 통신이 가능하다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/c12e74e3-ea2d-4804-8b59-6bea9d831b78/image.png" alt="">
오늘날의 웹 사이트 구조는 이전의 구조와 달리 Ajax라는 기술을 이용해 페이지 동기화 필요 없이(새로 고침 x) 서버에 요청/응답을 받아 페이지 재구성(렌더링)이 가능해졌다. 백 엔드 측에 부하율을 낮출 수 있기 때문에 트래픽이 많이 발생하는 웹 사이트의 경우 Ajax 기술을 적극적으로 사용하고 있다.</p>
<h2 id="웹-서버-웹-어플리케이션-서버">웹 서버, 웹 어플리케이션 서버</h2>
<p><img src="https://images.velog.io/images/mer1-97/post/c24b54a1-7c8e-4eeb-9d2d-8e330474d5e3/image.png" alt="">
웹 서버는 클라이언트 자원 요청에 따른 웹 서비스를 제공한다. 웹 서버의 종류는 아파치, IIS, Nginx, WebtoB, Oracle HTTP Server 등이 있다. Java Web Application 환경의 경우 웹 서버와 웹 어플리케이션 서버를 분리하여 웹 서버는 정적인 컨텐츠 자원 제공을 담당하며, 웹 어플리케이션 서버는 동적인 컨텐츠 자원 제공을 담당한다. 이를 통해 보다 효율적이며 유연한 서비스 제공을 목표로 한다.</p>
<h2 id="웹-서버-동작-원리">웹 서버 동작 원리</h2>
<p><img src="https://images.velog.io/images/mer1-97/post/765fb84b-f32c-4690-a2a4-18c62885d550/image.png" alt="">
클라이언트 측에서 웹 서버 요청 메시지를 보내면 웹 서버는 이를 요청된 자원 유/무를 검토하여 클라이언트 측에 응답 메시지를 보낸다. </p>
<p><img src="https://images.velog.io/images/mer1-97/post/98e833d7-1736-41a3-9127-5f2f2d394f56/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/mer1-97/post/c22d9011-4b50-4c40-97b7-e1f2d8c78dd4/image.png" alt="">
URL로 서버에 자원을 요청하면 웹 서버에 설정 파일안에 설정된 경로를 참조하여 자원 유/무를 확인한다. 이렇게 웹 서버에서 바라보는 경로를 웹 디렉터리, 웹 루트, 도큐먼트 루트 등으로 부른다. 이 설정 파일은 파일 다운로드/업로드 취약점 공격 시 많이 활용된다.
<br/></p>
<h2 id="java-web-application-환경의-3-tier-구조-동작-원리">Java Web Application 환경의 3-Tier 구조 동작 원리</h2>
<p>1) 정적 자원 요청 시
<img src="https://images.velog.io/images/mer1-97/post/768df092-31de-4260-b474-d5bcc6d57dd8/image.png" alt="">
사용자 측에서 정적 자원을 요청할 경우 웹 서버 측에서 처리 후 응답 메시지를 보낸다.</p>
<p>2) 동적 자원 요청 시
<img src="https://images.velog.io/images/mer1-97/post/3d0fe248-dae0-47a4-94bb-59ecf62f7be8/image.png" alt="">
동적 자원을 요청할 경우 웹 서버는 웹 어플리케이션 서버로 포워딩하며, 웹 어플리케이션 서버에서 이를 받은 후 어플리케이션 로직에 따라 처리 후 응답 메시지를 사용자에게 보낸다. 만약, 로직 상에서 데이터베이스 질의 과정이 있으면 데이터베이스와 연결을 한다. </p>
<h2 id="java-web-application-환경의-wswas-구성">Java Web Application 환경의 WS/WAS 구성</h2>
<p><img src="https://images.velog.io/images/mer1-97/post/10255a8a-3da5-41e3-951d-a81620f5fec4/image.png" alt="">
대부분 하나의 회사에서 제공하는 웹 서버와 웹 어플리케이션 서버를 쌍으로 사용한다. 가격 면이나, 설치, 유지보수 등 대응 면에서 훨씬 효율적이기 때문이다.</p>
<h2 id="웹-서버와-웹-어플리케이션-서버를-분리하는-이유">웹 서버와 웹 어플리케이션 서버를 분리하는 이유</h2>
<p>1) 웹 서버가 필요한 이유
클라이언트(웹 브라우저)에 이미지 파일(정적 자원)을 보내는 과정을 생각해보자.</p>
<ul>
<li>이미지 파일과 같은 정적 자원들은 웹 문서(HTML 문서)가 클라이언트로 보내질 때 함께 가는 것이 아니다.</li>
<li>클라이언트는 HTML 문서를 먼저 받고 그것에 맞게 필요한 이미지 파일들을 다시 서버로 요청하면 그제서야 이미지 파일을 받아온다.</li>
<li>웹 서버를 통해 정적 자원을 웹 어플리케이션 서버까지 가지 않고 앞단에서 빠르게 보내줄 수 있다.
따라서 웹 서버에서는 정적 자원만 처리하도록 기능을 분배하여 서버의 부담을 줄일 수 있다.<br />

</li>
</ul>
<p>2) 웹 어플리케이션 서버가 필요한 이유</p>
<ul>
<li>웹 페이지는 정적 자원과 동적 자원 모두 존재한다.</li>
<li>사용자의 요청에 맞게 적절한 동적 자원을 만들어서 제공해야 한다.</li>
<li>이때 웹 서버만을 이용한다면 사용자가 원하는 요청에 대한 결과 값을 모두 미리 만들어 놓고 서비스를 해야 한다.</li>
<li>이렇게 수행하기에는 자원이 절대적으로 부족하다.
따라서 웹 어플리케이션 서버를 통해 요청에 맞는 데이터를 DB에서 가져와 로직에 맞게 그때그때 결과를 만들어 제공함으로써 자원을 효율적으로 사용할 수 있다.</li>
</ul>
<p>결과적으로 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성을 위해 웹 서버와 웹 어플리케이션 서버를 분리한다.
<br /></p>
<h2 id="server-side와-client-side에-대한-이해">Server Side와 Client Side에 대한 이해</h2>
<p><img src="https://images.velog.io/images/mer1-97/post/884d08a9-0548-4f6b-8896-641d3e21cd34/image.png" alt="">
웹 구조는 크게 Server Side와 Client Side로 나눌 수 있으며, 웹 클라이언트에서 해석되는 스크립트(언어)를 Client-Side Script라고 하며, 웹 어플리케이션 서버에서 해석되는 스크립트(언어)를 Server-Side Script라고 한다.</p>
<h3 id="실습">실습</h3>
<p>Client-Side Script, Server-Side Script 이해를 위한 실습을 진행해보자.</p>
<pre><code class="language-php">&lt;script&gt;
var x = 2;
document.write(&quot;&lt;b&gt; -&gt; Client-Side Script&lt;/b&gt;&lt;br&gt;&quot;);
for(var i=1; i&lt;10; i++) {
    document.write(x + &quot;x&quot; + i + &quot;=&quot; + x*i + &quot;&lt;br&gt;&quot;);
}
&lt;/script&gt;

&lt;?php
echo &quot;&lt;b&gt; -&gt; Server-Side Script&lt;/b&gt;&lt;br&gt;&quot;;
$x = 2;
for($i = 1; $i&lt;10; $i++) {
    $y = $x*$i;
    $result = &quot;{$x}x{$i}={$y}&lt;br&gt;&quot;;
    echo $result;
}
?&gt;</code></pre>
<p>실행 결과</p>
<p align="center"><img src = "https://images.velog.io/images/mer1-97/post/a9580e83-051c-4436-baa3-df2961ae1324/image.png" width="250px"></p>

<p>소스 보기</p>
<p align="center"><img src = "https://images.velog.io/images/mer1-97/post/8484453f-0133-4b61-9e27-8fbff57269dd/image.png" width="650px"></p>

<p>test.php를 실행하면 서버 측에서 기동이 된다. script 부분은 Client-Side Script이기 때문에 해석이 불가능하므로 그대로 반환하고 ?php 부분은 Server-Side Script이므로 실행한 후 반환한다(소스 보기 참고). 반환 값을 전달받은 웹 브라우저는 남은 script 부분을 해석해서 출력한 후 이미 해석이 되어 넘어온 값을 출력한다.</p>
<hr>
<h2 id="참고문헌">참고문헌</h2>
<p><a href="https://goddaehee.tistory.com/90">https://goddaehee.tistory.com/90</a>
<a href="https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html">https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[쿠키와 세션]]></title>
            <link>https://velog.io/@mer1-97/%EC%BF%A0%ED%82%A4%EC%99%80-%EC%84%B8%EC%85%98</link>
            <guid>https://velog.io/@mer1-97/%EC%BF%A0%ED%82%A4%EC%99%80-%EC%84%B8%EC%85%98</guid>
            <pubDate>Tue, 09 Mar 2021 09:08:30 GMT</pubDate>
            <description><![CDATA[<h4 id="본-게시글은-인프런-크리핵티브-무료-강의-반드시-알고-넘어가야-할-웹-기술-기초편을-참고하여-작성하였습니다">본 게시글은 인프런 크리핵티브 무료 강의 &quot;반드시 알고 넘어가야 할 웹 기술 기초편&quot;을 참고하여 작성하였습니다.</h4>
<hr>
<h2 id="등장-배경">등장 배경</h2>
<p>HTTP 프로토콜은 비연결지향(Connectionless), 상태정보 유지안함(Stateless) 특성 때문에 서버는 통신할 때마다 클라이언트가 누구인지 인증을 해야 한다. </p>
<ul>
<li><p>비연결지향(Connectionless)
클라이언트가 요청한 후 응답을 받으면 그 연결을 끊는다.</p>
</li>
<li><p>상태정보 유지 안함(Stateless)
통신이 끝나면 상태를 유지하지 않는다.</p>
</li>
</ul>
<p>쿠팡에서 물건을 사려고 최초 로그인을 해도 서버는 클라이언트가 누군지 기억하지 않기 때문에 페이지를 이동할 때마다 로그인을 해야 하는데, 이를 해결하기 위해 쿠키와 세션을 사용하게 된다.<br><br /></p>
<h2 id="쿠키cookie">쿠키(Cookie)</h2>
<ul>
<li>웹 서버에서 발급 시 클라이언트 하드 디스크에 텍스트 형태로 저장되는 작은 기록 정보 파일이다.</li>
<li>클라이언트 PC 사용자들은 해당 쿠키 정보를 열람할 수 있다.</li>
<li>클라이언트의 상태 정보를 로컬에 저장했다가 참조한다.</li>
<li>일정 시간 동안 데이터를 저장할 수 있다.<br />

</li>
</ul>
<h3 id="쿠키-헤더-구조">쿠키 헤더 구조</h3>
<p>서버에서 클라이언트로 쿠키 발급 시 Set-Cookie 헤더에 의해 클라이언트 쿠키값이 세팅이 되고 해당 사이트 접근 시마다 클라이언트는 Set-Cookie에 의해 세팅된 값을 Cookie 헤더에 세팅하여 요청 메시지를 전달한다. 서버는 이를 통해 상태 관리를 한다.</p>
<pre><code>* Set-Cookie 헤더 구조
Set-Cookie: name=value [; expires=date] [; path=path] [; domain=domain] [; secure]

* Cookie 헤더 구조
Cookie: name1=value1 [; name2=value2] [; name3=value3]</code></pre><br/>

<h3 id="쿠키-발급-과정-로그인-예시">쿠키 발급 과정 (로그인 예시)</h3>
<ol>
<li><p>아이디 패스워드 입력 후 로그인 요청을 한다.
<img src="https://images.velog.io/images/mer1-97/post/95a9b94c-9ea8-41b1-9c87-daff5dabc798/1.PNG" alt=""></p>
</li>
<li><p>로그인이 정상적으로 이루어지면 Set-Cookie 헤더에 의해 쿠키 값이 세팅이 된다. (id=hong123 등)
<img src="https://images.velog.io/images/mer1-97/post/69c0e58b-79fc-4ecb-99e4-b3c831a8da3a/2.PNG" alt=""></p>
</li>
<li><p>홍길동이 B 사이트에 다시 접근하게 되면 웹 브라우저에서는 해당 사이트에 대한 쿠키값을 Cookie 헤더에 세팅한다. 웹 어플리케이션 서버는 이를 통해 사용자 식별을 한다.
<img src="https://images.velog.io/images/mer1-97/post/5b309bca-6b58-4d97-8770-4124120dbf33/3.PNG" alt=""></p>
</li>
<li><p>로그아웃 요청이 오면 웹 어플리케이션 서버에서는 Set-Cookie 헤더에 삭제할 값을 입력한다. 그 결과 사이트 B에 대한 쿠키 정보는 사라지게 된다.
<img src="https://images.velog.io/images/mer1-97/post/8a759e2e-b87f-4dd9-99a2-f954f7bd0a0b/4.PNG" alt=""></p>
<br/>

</li>
</ol>
<h3 id="쿠키-사용의-예시">쿠키 사용의 예시</h3>
<ul>
<li>쇼핑몰의 장바구니 기능</li>
<li>방문 사이트에서 로그인 시, &quot;아이디와 비밀번호를 저장하시겠습니까&quot;<br/>

</li>
</ul>
<h2 id="세션session">세션(Session)</h2>
<ul>
<li>세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리한다.</li>
<li>서버에서 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때가지 인증상태를 유지한다.</li>
<li>세션은 문자가 암호화, 난독화 되어있는 형태가 아닌 임의의 문자들이 무작위로 나열된 것으로 공격자 측에서는 특정 사용자의 세션을 추측하기 어렵다.</li>
<li>사용자에 대한 정보를 서버에 저장하기 때문에 보안 면에서 쿠키보다 우수하다.</li>
<li>사용자가 많아질수록 서버에 과부하를 주게 되므로 성능 저하의 요인이 된다.<br/>

</li>
</ul>
<h3 id="세션-발급-과정-로그인-예시">세션 발급 과정 (로그인 예시)</h3>
<ol>
<li>아이디 패스워드 입력 후 로그인 요청을 한다.</li>
<li>로그인이 정상적으로 이루어지면 웹 어플리케이션 서버에 클라이언트의 세션 정보가 세팅된다.
<img src="https://images.velog.io/images/mer1-97/post/e9cb7114-f2f2-4e20-90ef-de41f11dc954/1.PNG" alt=""></li>
<li>Set-Cookie 헤더를 통해 클라이언트 웹 브라우저에 세션 값을 세팅한다.
<img src="https://images.velog.io/images/mer1-97/post/8e883de7-ecd1-4194-aa71-7dec8627c667/2.PNG" alt=""></li>
<li>홍길동이 B 사이트에 접근할 때마다 Cookie 헤더를 통해 본인의 세션 값을 세팅하고 이를 통해, 다른 페이지로 이동해도 사용자 인증을 거칠 필요가 없게 된다.
<img src="https://images.velog.io/images/mer1-97/post/82239c10-cafa-48bd-bbf1-f5ad6ace7826/3.PNG" alt=""></li>
<li>세션 폐기는 서버 안에 홍길동의 세션 값 삭제를 통해 이루어진다.
<img src="https://images.velog.io/images/mer1-97/post/65e72c1d-fb5b-462c-878c-d50ab7f1ad11/image.png" alt=""><br/>

</li>
</ol>
<h3 id="세션-사용의-예시">세션 사용의 예시</h3>
<ul>
<li>로그인 정보 유지<br/>

</li>
</ul>
<h2 id="정리">정리</h2>
<p align="center"><img src = "https://images.velog.io/images/mer1-97/post/db36fd20-632f-45cb-b1b8-e3526ba4804d/image.png" width="450px"></p>

<p><strong>세션이 보안 측면에서 좋은데 왜 쿠키를 사용할까?</strong>
-&gt; 대규모 웹 서비스의 경우 수많은 사용자들의 세션을 관리하기에는 서버에 엄청난 부하를 가져오기 때문에 서버에 부담이 낮은 쿠키 사용을 선호한다. </p>
<hr>
<h3 id="참고-문헌">참고 문헌</h3>
<ul>
<li><a href="https://victorydntmd.tistory.com/34">https://victorydntmd.tistory.com/34</a></li>
<li><a href="https://hyonee.tistory.com/180">https://hyonee.tistory.com/180</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[URL이란]]></title>
            <link>https://velog.io/@mer1-97/URL%EC%9D%B4%EB%9E%80</link>
            <guid>https://velog.io/@mer1-97/URL%EC%9D%B4%EB%9E%80</guid>
            <pubDate>Tue, 09 Mar 2021 07:05:22 GMT</pubDate>
            <description><![CDATA[<h4 id="본-게시글은-인프런-크리핵티브-무료-강의-반드시-알고-넘어가야-할-웹-기술-기초편을-참고하여-작성하였습니다">본 게시글은 인프런 크리핵티브 무료 강의 &quot;반드시 알고 넘어가야 할 웹 기술 기초편&quot;을 참고하여 작성하였습니다.</h4>
<hr>
<h2 id="urluniform-resource-locator">URL(Uniform Resource Locator)</h2>
<p>URL은 통합 자원 지시자로 인터넷의 리소스를 가리키는 표준 명칭으로 서버의 자원을 요청할 때 사용된다. URL을 통해 인터넷 상의 모든 리소스를 요청할 수 있으며, HTTP, FTP 등의 자원 요청도 가능하다.</p>
<br/>

<h3 id="동작원리">동작원리</h3>
<img src = "https://images.velog.io/images/mer1-97/post/aaa47107-d5ad-4782-a139-1fec1310ae79/1.PNG">

<p>클라이언트 측에서 웹 서버에 자원을 요청을 하면 웹 서버는 파일 시스템안에 해당하는 자원을 클라이언트 측으로 전송한다.</p>
<p>만일 자원을 지정하지 않고(<a href="http://www.test.co.kr">www.test.co.kr</a>) 사이트 도메인만 호출을 할 경우 웹 서버에 설정이 된 기본 자원이 호출된다.</p>
<br/>

<h3 id="url-예약-문자">URL 예약 문자</h3>
<p align="center"><img src = "https://images.velog.io/images/mer1-97/post/27c89437-1975-4bd3-9a3c-21366c8f4740/image.png" width="600px"></p>

<p>URL 상에서 특정 기능을 하는 문자로 웹 클라이언트와 서버 간에 서로 예약되어 있는 문자이다.</p>
<pre><code>http://www.test.co.kr/board.do?gubun=notice&amp;idx=192&amp;sort=desc</code></pre><p>위와 같은 코드가 있다면 전달되는 파라미터는 gubun : notice, idx : 192, sort : desc 총 3개이다.</p>
<p>만일 로그인시 패스워드에 URL 예약 문자(?,= 등)가 들어간 상태로 전송이 될 경우 데이터 손실 방지를 위해 URL 인코딩 기술을 사용한다.</p>
<br/>

<h3 id="url-인코딩">URL 인코딩</h3>
<p>URL 상에서 문자를 표현하는 방법으로 데이터 전송 상에 손실을 막기 위해 사용한다. 예악 문자를 단순 데이터로 전송이 될 수 있도록 인코딩을 한다. 웹 브라우저를 사용할 경우 브라우저에서 URL 인코딩은 자동으로 해준다.</p>
<p align="center"><img src = "https://images.velog.io/images/mer1-97/post/64984a73-fd86-4a61-98d9-96307d34145d/image.png" width="400px"></p>

<ul>
<li>예시
<img src="https://images.velog.io/images/mer1-97/post/cffad41e-9710-4fde-a2d5-5b58625d7652/image.png" alt=""></li>
</ul>
<p>네이버에 #$&#39;를 입력하면 쿼리안에 인코딩 값이 들어가있는 걸 알 수 있다.</p>
<br/>

<hr>
<h2 id="참고">참고</h2>
<p>url 인코딩되어 있는 값을 디코딩 해주는 간단한 스크립트를 만든 적이 있는데 필요하신 분들은 사용해주시길 바랍니다.</p>
<p><a href="https://github.com/mer1-97/urldecoder">https://github.com/mer1-97/urldecoder</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2021년 1회 정보처리기사 필기 후기]]></title>
            <link>https://velog.io/@mer1-97/2021-%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-1%ED%9A%8C-%ED%95%84%EA%B8%B0-%ED%9B%84%EA%B8%B0</link>
            <guid>https://velog.io/@mer1-97/2021-%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-1%ED%9A%8C-%ED%95%84%EA%B8%B0-%ED%9B%84%EA%B8%B0</guid>
            <pubDate>Sun, 07 Mar 2021 16:16:35 GMT</pubDate>
            <description><![CDATA[<p>저는 IT 관련학과 4학년 재학중인 대학생이며 시험준비기간은 2주였고 책은 ㅅㄴㄱ으로 준비했습니다.</p>
<p><img src="https://images.velog.io/images/mer1-97/post/cc3e5c45-9531-405e-b375-42e4d5b64c38/image.png" alt=""></p>
<p>가채점 결과, 1과목:95 2과목:95 3과목:95 4과목:90 5과목:90으로 필기 합격 예정입니다.</p>
<p>접수부터 시험 후기까지 상세히 알려드리도록 하겠습니다.</p>
<h2 id="1-시험-접수">1. 시험 접수</h2>
<p>시험 접수 첫날 오후에 필기시험 접수하려고 큐넷에 들어갔습니다. 
근데 웬걸.... 서울, 경기, 인천에 시험장이 모두 마감되어있었습니다.</p>
<p>멀리 가야 하나 고민하던 중 간신히 서울에 있는 고등학교에 자리가
나는 바람에 간신히 접수할 수 있었습니다.</p>
<p>다음 회차 접수하시려는 분들은 꼭 첫날 열리자마자 접속하시고 저처럼 조금 늦게 들어가도 계속 보면 잔여 인원이 1자리씩 나오니까 포기하지 마시고 계속 시도해보시길 바랍니다.</p>
<h2 id="2-공부-방법">2. 공부 방법</h2>
<p>저는 시험 2주 전에 공부를 시작했습니다.</p>
<p>책을 보기 전에 문제가 어떻게 나오는지 확인하려고 최신 기출문제 1회차를 풀어보았습니다. (채점만 하고 틀린 거 확인은 안 했음)</p>
<p>그 후, 제가 산 책에는 중요도가 A,B,C,D로 나눠져있어서 중요도에 따라 공부를 했습니다. </p>
<p>책이 너무 두꺼워서 A,B 부분의 개념만 보며 1회독을 하고 2회독할 때는 개념을 대충 훑고 같이 딸린 문제들을 풀었습니다. </p>
<p>시험한 3일 전부터는 잘 안 외워지는 부분만 노트에 따로 적어서 계속 보았습니다. </p>
<p>저 같은 경우에는 전공 수업에서 들은 내용이 포함되어 있는 과목들(2과목 소프트웨어 개발, 3과목 데이터베이스 구축, 4과목 프로그래밍 언어활용)은 그나마 수월하게 했습니다.</p>
<p>5과목에서 신기술들이 여러 개 나오는데 저는 이것들을 워드파일에 정리해서 시험 당일날 오전에 보고 들어갔습니다. </p>
<p>그리고 <strong>개정 후 기출문제들을 꼭 풀어봐야 합니다.</strong>
이번 시험에서 개정 후 나왔던 기출 문제들 몇 개가 똑같이 나온 걸 보면 다음 회차 때도 충분히 나올 가능성이 있습니다.</p>
<h2 id="3-시험-후기">3. 시험 후기</h2>
<p>간략하게 시험 후기를 적자면, 자세히 읽어보면 풀 수 있는 문제들이 종종 있었습니다. 예를 들어 ~ 장점이 아닌 것은? 이라는 문제가 있으면 이건 누가 봐도 아닌 거 같은데? 라고 생각이 드는 보기가 있고 실제로 그게 정답입니다. </p>
<p>개념서의 양이 생각보다 많기 때문에 단순 시험 합격이 목적이면 이걸 전부 공부하는 것보다 중요도가 높은 것들을 위주로만 공부해도 충분히 합격 가능할 거 같습니다.</p>
<h2 id="4-총평">4. 총평</h2>
<p>전공자 기준으로 2주 정도 열심히 공부하면 충분히 필기 합격 가능할 것 같으며 개정 후 기출문제들을 꼭 풀어보시길 바랍니다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ModuleNotFoundError: No module named 'Crypto']]></title>
            <link>https://velog.io/@mer1-97/ModuleNotFoundError-No-module-named-Crypto</link>
            <guid>https://velog.io/@mer1-97/ModuleNotFoundError-No-module-named-Crypto</guid>
            <pubDate>Thu, 31 Dec 2020 17:49:23 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-python">from Crypto.Cipher import AES</code></pre>
<blockquote>
</blockquote>
<p>Traceback (most recent call last):
  File &quot;C:\Users~\Desktop\python 프로젝트\test.py&quot;, line 4, in <module>
    from Crypto.Cipher import AES
ModuleNotFoundError: No module named &#39;<strong>Crypto</strong>&#39;</p>
<p>파이썬3에서 pip install pycrypto를 해도 Crypto 모듈을 찾을 수 없다는 오류가 발생했다.</p>
<pre><code class="language-python">pip install pycryptodome</code></pre>
<p>이럴땐 pycryptodome을 설치하면 오류가 해결된다.</p>
]]></description>
        </item>
    </channel>
</rss>