<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>lehero</title>
    <link>https://lehero.tistory.com/</link>
    <description>php, mysql 개발에 관한 여러가지 이야기를 나누는 곳입니다.</description>
    <language>ko</language>
    <pubDate>Sat, 11 Apr 2026 04:07:36 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>lehero</managingEditor>
    <item>
      <title>백엔드 처리, 프로시저 처리</title>
      <link>https://lehero.tistory.com/317</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;SQL&amp;nbsp;프로시저와&amp;nbsp;PHP는&amp;nbsp;서로&amp;nbsp;다른&amp;nbsp;역할을&amp;nbsp;수행하는&amp;nbsp;기술이지만&amp;nbsp;함께&amp;nbsp;사용할&amp;nbsp;때&amp;nbsp;장단점이&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;장점:&lt;br /&gt;1.&amp;nbsp;**성능&amp;nbsp;향상**:&amp;nbsp;SQL&amp;nbsp;프로시저는&amp;nbsp;데이터베이스에서&amp;nbsp;실행되므로&amp;nbsp;데이터베이스&amp;nbsp;서버에서&amp;nbsp;로직을&amp;nbsp;처리하므로써&amp;nbsp;성능이&amp;nbsp;향상될&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;2.&amp;nbsp;**보안&amp;nbsp;강화**:&amp;nbsp;프로시저를&amp;nbsp;사용하면&amp;nbsp;일부&amp;nbsp;데이터에&amp;nbsp;대한&amp;nbsp;직접적인&amp;nbsp;액세스를&amp;nbsp;제어할&amp;nbsp;수&amp;nbsp;있어&amp;nbsp;보안을&amp;nbsp;강화할&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;단점:&lt;br /&gt;1.&amp;nbsp;**유연성&amp;nbsp;감소**:&amp;nbsp;SQL&amp;nbsp;프로시저는&amp;nbsp;데이터베이스에&amp;nbsp;종속적이기&amp;nbsp;때문에&amp;nbsp;코드를&amp;nbsp;유연하게&amp;nbsp;변경하기&amp;nbsp;어려울&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;2.&amp;nbsp;**디버깅&amp;nbsp;어려움**:&amp;nbsp;SQL&amp;nbsp;프로시저&amp;nbsp;내에서&amp;nbsp;발생한&amp;nbsp;오류를&amp;nbsp;추적하고&amp;nbsp;디버깅하기&amp;nbsp;어려울&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;3.&amp;nbsp;**포팅&amp;nbsp;어려움**:&amp;nbsp;데이터베이스&amp;nbsp;시스템을&amp;nbsp;변경하거나&amp;nbsp;다른&amp;nbsp;환경으로&amp;nbsp;이전할&amp;nbsp;때&amp;nbsp;프로시저의&amp;nbsp;이식성이&amp;nbsp;떨어질&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;백엔드의 장단점:&lt;br /&gt;1. 다양한 웹 프로젝트에서 사용될 수 있으며, 다양한 데이터 소스와 통합이 가능합니다.&lt;br /&gt;2. 일반적으로 디버깅이 쉽고, 오류 메시지가 명확하여 문제를 해결하기 용이합니다.&lt;br /&gt;&lt;br /&gt;종합적으로, 프로젝트의 요구 사항과 성능, 유지보수 등을 고려하여 SQL 프로시저와 백엔드 어떻게 조합할지 결정해야 합니다.&lt;/p&gt;</description>
      <category>tech/SQL</category>
      <category>SQL</category>
      <category>백엔드</category>
      <category>프로시저</category>
      <author>lehero</author>
      <guid isPermaLink="true">https://lehero.tistory.com/317</guid>
      <comments>https://lehero.tistory.com/317#entry317comment</comments>
      <pubDate>Mon, 15 Jul 2024 23:27:22 +0900</pubDate>
    </item>
    <item>
      <title>생년 월일로 나이 계산</title>
      <link>https://lehero.tistory.com/316</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 생년월일로 나이를 계산하는 함수입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1720482097309&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?php
function calculateKoreanAge($birthDate) {
    // 생년월일을 DateTime 객체로 변환
    $birthDateTime = new DateTime($birthDate);
    $currentDateTime = new DateTime();

    // 연도 차이를 계산
    $age = $currentDateTime-&amp;gt;format('Y') - $birthDateTime-&amp;gt;format('Y');

    // 현재 연도에서 생일이 지났는지 확인
    if ($currentDateTime-&amp;gt;format('m-d') &amp;lt; $birthDateTime-&amp;gt;format('m-d')) {
        $age--;
    }

    return $age;
}

// 생년월일을 입력 받기 (예: '1990-05-15')
$birthDate = '1990-05-15';
$age = calculateKoreanAge($birthDate);
echo &quot;만 나이: &quot; . $age;
?&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생년월일을 datetime으로 변환을 해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1720482181046&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$birthDateTime = new DateTime($birthDate);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생일이 지났는지 확인&lt;/p&gt;
&lt;pre id=&quot;code_1720482227242&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if ($currentDateTime-&amp;gt;format('m-d') &amp;lt; $birthDateTime-&amp;gt;format('m-d')) {
    $age--;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>tech/PHP</category>
      <category>php</category>
      <category>나이</category>
      <category>나이계산</category>
      <category>생년월일</category>
      <author>lehero</author>
      <guid isPermaLink="true">https://lehero.tistory.com/316</guid>
      <comments>https://lehero.tistory.com/316#entry316comment</comments>
      <pubDate>Tue, 9 Jul 2024 08:45:21 +0900</pubDate>
    </item>
    <item>
      <title>JavaScript setTimeout</title>
      <link>https://lehero.tistory.com/315</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;JavaScript에서&amp;nbsp;특정&amp;nbsp;작업을&amp;nbsp;몇&amp;nbsp;초&amp;nbsp;후에&amp;nbsp;실행하려면&amp;nbsp;setTimeout&amp;nbsp;함수를&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;setTimeout&amp;nbsp;함수는&amp;nbsp;일정&amp;nbsp;시간(밀리초&amp;nbsp;단위)이&amp;nbsp;지난&amp;nbsp;후에&amp;nbsp;지정된&amp;nbsp;함수를&amp;nbsp;실행합니다.&lt;br /&gt;&lt;br /&gt;사용법:&lt;/p&gt;
&lt;pre id=&quot;code_1719920711517&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;setTimeout(function, delay);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;function:&amp;nbsp;지연&amp;nbsp;후&amp;nbsp;실행할&amp;nbsp;함수&lt;br /&gt;delay:&amp;nbsp;지연&amp;nbsp;시간(밀리초&amp;nbsp;단위)&lt;br /&gt;&lt;br /&gt;예제&amp;nbsp;1&amp;nbsp;-&amp;nbsp;간단한&amp;nbsp;예제:&lt;/p&gt;
&lt;pre id=&quot;code_1719920735966&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;setTimeout(function() {
    console.log(&quot;3초 후에 이 메시지가 출력됩니다.&quot;);
}, 3000);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;예제&amp;nbsp;2&amp;nbsp;-&amp;nbsp;화살표&amp;nbsp;함수&amp;nbsp;사용:&lt;/p&gt;
&lt;pre id=&quot;code_1719920746726&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;setTimeout(() =&amp;gt; {
    console.log(&quot;5초 후에 이 메시지가 출력됩니다.&quot;);
}, 5000);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;예제&amp;nbsp;3&amp;nbsp;-&amp;nbsp;함수&amp;nbsp;참조&amp;nbsp;전달:&lt;/p&gt;
&lt;pre id=&quot;code_1719920755679&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function showMessage() {
    console.log(&quot;2초 후에 이 메시지가 출력됩니다.&quot;);
}
setTimeout(showMessage, 2000);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;예제&amp;nbsp;4&amp;nbsp;-&amp;nbsp;DOM&amp;nbsp;조작&amp;nbsp;예제:&lt;/p&gt;
&lt;pre id=&quot;code_1719920771589&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;
    &amp;lt;title&amp;gt;setTimeout Example&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div id=&quot;message&quot;&amp;gt;메시지가 여기에 나타납니다.&amp;lt;/div&amp;gt;
    &amp;lt;script&amp;gt;
        setTimeout(() =&amp;gt; {
            document.getElementById(&quot;message&quot;).textContent = &quot;4초 후에 이 메시지가 나타납니다.&quot;;
        }, 4000);
    &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;설명:&lt;br /&gt;간단한&amp;nbsp;예제:&amp;nbsp;3초&amp;nbsp;후에&amp;nbsp;콘솔에&amp;nbsp;메시지를&amp;nbsp;출력합니다.&lt;br /&gt;화살표&amp;nbsp;함수&amp;nbsp;사용:&amp;nbsp;5초&amp;nbsp;후에&amp;nbsp;콘솔에&amp;nbsp;메시지를&amp;nbsp;출력합니다.&lt;br /&gt;함수&amp;nbsp;참조&amp;nbsp;전달:&amp;nbsp;showMessage라는&amp;nbsp;함수를&amp;nbsp;정의하고,&amp;nbsp;2초&amp;nbsp;후에&amp;nbsp;실행합니다.&lt;br /&gt;DOM&amp;nbsp;조작&amp;nbsp;예제:&amp;nbsp;setTimeout을&amp;nbsp;사용하여&amp;nbsp;4초&amp;nbsp;후에&amp;nbsp;div&amp;nbsp;요소의&amp;nbsp;텍스트&amp;nbsp;내용을&amp;nbsp;변경합니다.&lt;br /&gt;&lt;br /&gt;이&amp;nbsp;예제들은&amp;nbsp;JavaScript에서&amp;nbsp;setTimeout&amp;nbsp;함수를&amp;nbsp;사용하여&amp;nbsp;특정&amp;nbsp;작업을&amp;nbsp;지연시키는&amp;nbsp;방법을&amp;nbsp;보여줍니다.&amp;nbsp;setTimeout은&amp;nbsp;비동기적으로&amp;nbsp;동작하므로,&amp;nbsp;지연&amp;nbsp;시간&amp;nbsp;동안&amp;nbsp;코드의&amp;nbsp;다른&amp;nbsp;부분이&amp;nbsp;계속&amp;nbsp;실행될&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>tech/javascript</category>
      <category>javascript</category>
      <category>setTimeout</category>
      <category>시간</category>
      <author>lehero</author>
      <guid isPermaLink="true">https://lehero.tistory.com/315</guid>
      <comments>https://lehero.tistory.com/315#entry315comment</comments>
      <pubDate>Tue, 2 Jul 2024 20:47:52 +0900</pubDate>
    </item>
    <item>
      <title>PHP 디버깅. 에러 보이게 하는 방법</title>
      <link>https://lehero.tistory.com/314</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;PHP&amp;nbsp;개발을&amp;nbsp;하다&amp;nbsp;보면&amp;nbsp;다양한&amp;nbsp;에러와&amp;nbsp;문제를&amp;nbsp;만나게&amp;nbsp;됩니다.&amp;nbsp;이때,&amp;nbsp;에러&amp;nbsp;메시지를&amp;nbsp;정확히&amp;nbsp;보고&amp;nbsp;수정하는&amp;nbsp;것이&amp;nbsp;중요합니다.&amp;nbsp;PHP는&amp;nbsp;기본적으로&amp;nbsp;에러&amp;nbsp;메시지를&amp;nbsp;숨기는&amp;nbsp;설정이&amp;nbsp;되어&amp;nbsp;있는&amp;nbsp;경우가&amp;nbsp;많기&amp;nbsp;때문에,&amp;nbsp;개발&amp;nbsp;환경에서&amp;nbsp;에러를&amp;nbsp;표시하도록&amp;nbsp;설정하는&amp;nbsp;방법을&amp;nbsp;알아보겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. php.ini 설정 파일 수정&lt;/b&gt;&lt;br /&gt;PHP의&amp;nbsp;설정&amp;nbsp;파일인&amp;nbsp;php.ini를&amp;nbsp;수정하여&amp;nbsp;에러를&amp;nbsp;표시할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;이&amp;nbsp;파일은&amp;nbsp;PHP가&amp;nbsp;설치된&amp;nbsp;디렉터리에&amp;nbsp;위치해&amp;nbsp;있습니다.&lt;br /&gt;PHP가 설치된 디렉터리에서 php.ini 파일을 찾아 텍스트 에디터로 엽니다. &lt;br /&gt;1.2.&amp;nbsp; display_errors 설정 변경&lt;/p&gt;
&lt;pre id=&quot;code_1719872738971&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;display_errors = On&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;display_errors&amp;nbsp;값을&amp;nbsp;On으로&amp;nbsp;설정하면&amp;nbsp;에러&amp;nbsp;메시지가&amp;nbsp;브라우저에&amp;nbsp;출력됩니다.&lt;br /&gt;1.3. error_reporting&amp;nbsp;설정&amp;nbsp;변경&lt;/p&gt;
&lt;pre id=&quot;code_1719872787313&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;error_reporting = E_ALL&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;error_reporting&amp;nbsp;값을&amp;nbsp;E_ALL로&amp;nbsp;설정하면&amp;nbsp;모든&amp;nbsp;수준의&amp;nbsp;에러를&amp;nbsp;보고합니다.&lt;br /&gt;&lt;b&gt;2. PHP 코드 내에서 설정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1719872828425&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// 에러를 발생시키는 코드 예시
echo $undefined_variable;
?&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;notranslate&quot; style=&quot;all: initial;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>tech/PHP</category>
      <category>display_errors</category>
      <category>error</category>
      <category>php</category>
      <category>php_info</category>
      <category>디버깅</category>
      <author>lehero</author>
      <guid isPermaLink="true">https://lehero.tistory.com/314</guid>
      <comments>https://lehero.tistory.com/314#entry314comment</comments>
      <pubDate>Tue, 2 Jul 2024 07:29:58 +0900</pubDate>
    </item>
    <item>
      <title>cloudflare http로 접속시 https로 리다이렉션</title>
      <link>https://lehero.tistory.com/313</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저에 http로 접속 했을 때 http로 리다이렉션을 할려면 아파치 설정에서 리다이렉션을 하거나 백엔드에서 리다이렉션을 해야 합니다.&lt;br /&gt;&lt;br /&gt;cloudflare를 이용하면 좀 더 편하게 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;https.png&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;706&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bx4Tze/btsHcm1yOM3/OI1nLdUNWT1VhNij4DSIP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bx4Tze/btsHcm1yOM3/OI1nLdUNWT1VhNij4DSIP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bx4Tze/btsHcm1yOM3/OI1nLdUNWT1VhNij4DSIP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbx4Tze%2FbtsHcm1yOM3%2FOI1nLdUNWT1VhNij4DSIP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;818&quot; height=&quot;706&quot; data-filename=&quot;https.png&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;706&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;URL은 www.도메인/*&lt;br /&gt;설정 선택은 항상 https사용을 선택해서 page rule 저장 선택 한 뒤 소유한 도메인 URL을 브라우저에서 접속하면 https로 리다이렉션 되는 것을 볼 수 있습니다.&lt;/p&gt;</description>
      <category>tech</category>
      <category>Cloudflare</category>
      <category>HTTP</category>
      <category>https</category>
      <category>리다이렉션</category>
      <author>lehero</author>
      <guid isPermaLink="true">https://lehero.tistory.com/313</guid>
      <comments>https://lehero.tistory.com/313#entry313comment</comments>
      <pubDate>Mon, 6 May 2024 10:02:11 +0900</pubDate>
    </item>
    <item>
      <title>cloudflare를 이용한 방화벽 설정</title>
      <link>https://lehero.tistory.com/312</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;해외에서 서버로 접근을 시도하는 경우가 있고, 로그를 확인하여 보면 악의적인 접근 시도 일 때가 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;hacker-2883632_640.jpg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JPTKH/btsHbQu4JcN/YDzxY1lGy6Owb1sjOH5qIk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JPTKH/btsHbQu4JcN/YDzxY1lGy6Owb1sjOH5qIk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JPTKH/btsHbQu4JcN/YDzxY1lGy6Owb1sjOH5qIk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJPTKH%2FbtsHbQu4JcN%2FYDzxY1lGy6Owb1sjOH5qIk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;640&quot; height=&quot;427&quot; data-filename=&quot;hacker-2883632_640.jpg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;427&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 공격 시도를 막기 위해서 방화벽을 설정합니다. &lt;br /&gt;중국 발 공격을 막기 위해서는 geoip(&lt;a href=&quot;https://dev.maxmind.com/geoip&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dev.maxmind.com/geoip&lt;/a&gt;)를 이용해서 중국 발 아이피 대역을 막기도 하지만 설정에 불편함이 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cloudflare에 가입을 하고 난 뒤 DNS에서 도메인을 등록해야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;cloudflare2.png&quot; data-origin-width=&quot;1285&quot; data-origin-height=&quot;347&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GSjJk/btsHbBY9rwO/xtCBtNCnxqwoHKghWVkkGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GSjJk/btsHbBY9rwO/xtCBtNCnxqwoHKghWVkkGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GSjJk/btsHbBY9rwO/xtCBtNCnxqwoHKghWVkkGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGSjJk%2FbtsHbBY9rwO%2FxtCBtNCnxqwoHKghWVkkGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1285&quot; height=&quot;347&quot; data-filename=&quot;cloudflare2.png&quot; data-origin-width=&quot;1285&quot; data-origin-height=&quot;347&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도메인 등록이 되었다하더라도 도메인 인증이 된 후 사용이 가능합니다.&lt;br /&gt;인증 후 좌측 Security 선택 WAF에서 중국을 선택한 후 block을 선택하면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;waf.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;691&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cedAOU/btsHbrvvIdq/K9UUcDBK3zCjw2qIMQJHd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cedAOU/btsHbrvvIdq/K9UUcDBK3zCjw2qIMQJHd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cedAOU/btsHbrvvIdq/K9UUcDBK3zCjw2qIMQJHd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcedAOU%2FbtsHbrvvIdq%2FK9UUcDBK3zCjw2qIMQJHd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;691&quot; data-filename=&quot;waf.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;691&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;waf2.png&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;952&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDfWMP/btsHcHKSrDN/r7Iw3vc52LxkJzTIiBBkT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDfWMP/btsHcHKSrDN/r7Iw3vc52LxkJzTIiBBkT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDfWMP/btsHcHKSrDN/r7Iw3vc52LxkJzTIiBBkT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDfWMP%2FbtsHcHKSrDN%2Fr7Iw3vc52LxkJzTIiBBkT1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1044&quot; height=&quot;952&quot; data-filename=&quot;waf2.png&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;952&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;홍콩은 따로 추가를 해야 합니다.&lt;br /&gt;이렇게 한 뒤 deploy를 선택하면 적용이 됩니다.&lt;/p&gt;</description>
      <category>tech</category>
      <category>Cloudflare</category>
      <category>DNS</category>
      <category>linux</category>
      <category>도메인</category>
      <category>방화벽</category>
      <category>중국</category>
      <category>차단</category>
      <author>lehero</author>
      <guid isPermaLink="true">https://lehero.tistory.com/312</guid>
      <comments>https://lehero.tistory.com/312#entry312comment</comments>
      <pubDate>Sat, 4 May 2024 22:24:01 +0900</pubDate>
    </item>
    <item>
      <title>자주 사용하는 $_SERVER</title>
      <link>https://lehero.tistory.com/311</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;$_SERVER는 개발 작업을 할 때 쓰이지 않는 곳이 없을 정도로 널리 사용되고 있는 PHP에서 정해진 예약 변수입니다.&lt;br /&gt;print_r($_SERVER)이나 var_dump($_SERVER)를 해보시면 아시겠지만 배열 형태로 되어 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$_SERVER['HTTP_HOST']&lt;br /&gt;도메인 부분에 대당 합니다.&lt;br /&gt;테스트 서버 도메인과 실서버 도메인이 다를 때 $_SERVER['HTTP_HOST']를 사용하면 실서버로 이전 했을 때 별도의 작업이 필요 없습니다.&lt;/li&gt;
&lt;li&gt;$_SERVER['PHP_SELF']&lt;br /&gt;도메인 뒤에 경로 입니다.&lt;br /&gt;https://google.com&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;/shop/product.php&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$_SERVER['QUERY_STRING']&amp;nbsp;&lt;br /&gt;쿼리스트링 부분 입니다.&lt;br /&gt;예)?stx=abcd&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;$_SERVER['REMOTE_ADDR']&lt;br /&gt;접속된 사용자의 공인 아이피입니다.&lt;/li&gt;
&lt;li&gt;$_SERVER['DOCUMENT_ROOT']&lt;br /&gt;httpd.conf 에 설정된 웹서버의 루트 디렉토리입니다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>tech/PHP</category>
      <category>$_SERVER</category>
      <category>php</category>
      <category>팁</category>
      <author>lehero</author>
      <guid isPermaLink="true">https://lehero.tistory.com/311</guid>
      <comments>https://lehero.tistory.com/311#entry311comment</comments>
      <pubDate>Mon, 4 Dec 2023 21:01:12 +0900</pubDate>
    </item>
    <item>
      <title>windows 블루스크린 video tdr failure</title>
      <link>https://lehero.tistory.com/310</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;온라인 게임을 하다가 갑자기 블루스크린이 뜨면서 video tdr failure 라고 뜨면서 재부팅이 되었습니다.&lt;br /&gt;온라인 게임이라서 신고 당하지 않을까 했지만 다행히 신고는 당하지 않았습니다.&lt;br /&gt;&lt;br /&gt;시도 했던 방법을 몇 가지 적어 보겠습니다.&lt;br /&gt;1. video에러 라고 떠서 nvidia 그래픽 카드 드라이버를 완전 삭제&lt;br /&gt;DDU(Display Driver Uninstaller)&lt;br /&gt;&lt;a href=&quot;https://www.wagnardsoft.com/display-driver-uninstaller-DDU-&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.wagnardsoft.com/display-driver-uninstaller-DDU-&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1699781195768&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Display Driver Uninstaller (DDU)&quot; data-og-description=&quot;Drivers removal utility and other tools.&quot; data-og-host=&quot;www.wagnardsoft.com&quot; data-og-source-url=&quot;https://www.wagnardsoft.com/display-driver-uninstaller-DDU-&quot; data-og-url=&quot;https://www.wagnardsoft.com/display-driver-uninstaller-DDU-&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bvXZRB/hyUuVW4rBE/Sop3Wc2IaaoTkE2HkT31YK/img.png?width=415&amp;amp;height=81&amp;amp;face=0_0_415_81,https://scrap.kakaocdn.net/dn/btjtD0/hyUu3HyHMT/MXc21c2Tv035j8GsjZ9SS0/img.png?width=480&amp;amp;height=218&amp;amp;face=0_0_480_218,https://scrap.kakaocdn.net/dn/qNBII/hyUuUqkpJK/KkKbzvygbVdK0DiEvkQkv0/img.jpg?width=476&amp;amp;height=218&amp;amp;face=0_0_476_218&quot;&gt;&lt;a href=&quot;https://www.wagnardsoft.com/display-driver-uninstaller-DDU-&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.wagnardsoft.com/display-driver-uninstaller-DDU-&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bvXZRB/hyUuVW4rBE/Sop3Wc2IaaoTkE2HkT31YK/img.png?width=415&amp;amp;height=81&amp;amp;face=0_0_415_81,https://scrap.kakaocdn.net/dn/btjtD0/hyUu3HyHMT/MXc21c2Tv035j8GsjZ9SS0/img.png?width=480&amp;amp;height=218&amp;amp;face=0_0_480_218,https://scrap.kakaocdn.net/dn/qNBII/hyUuUqkpJK/KkKbzvygbVdK0DiEvkQkv0/img.jpg?width=476&amp;amp;height=218&amp;amp;face=0_0_476_218');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Display Driver Uninstaller (DDU)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Drivers removal utility and other tools.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.wagnardsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삭제 후 최신 드라이버 설치&lt;br /&gt;&lt;br /&gt;2. 비디오 카드 전원 뺐다 꼽아 봤습니다.&lt;br /&gt;3. 램을 뺐다 꼽아 봤습니다.&lt;br /&gt;4. 비디오 카드 팬에 쌓여 있던 먼지를 제거 했습니다.&lt;br /&gt;5. 제어판 &amp;gt; 사운드 드라이버 사용하지 않기로 변경&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;nvidia.png&quot; data-origin-width=&quot;437&quot; data-origin-height=&quot;89&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgeFy8/btsAc4e5yYS/l3KmxYk5GRvwM33vdjL3K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgeFy8/btsAc4e5yYS/l3KmxYk5GRvwM33vdjL3K0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgeFy8/btsAc4e5yYS/l3KmxYk5GRvwM33vdjL3K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgeFy8%2FbtsAc4e5yYS%2Fl3KmxYk5GRvwM33vdjL3K0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;437&quot; height=&quot;89&quot; data-filename=&quot;nvidia.png&quot; data-origin-width=&quot;437&quot; data-origin-height=&quot;89&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우 키 + S &amp;gt; 장치관리자 &amp;gt; 사운드, 비디오 및 게임 컨트롤러 부분에 nvidia 사운드는 사용하지 않으므로 사용하지 않기로 했습니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;6. 모니터와 비디오 카드(=그래픽카드)는 HDMI로 연결되어 있는데, 다른 HDMI로 연결 해봤더니 잘 되고 있습니다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>tech/windows</category>
      <category>DDU</category>
      <category>hdmi</category>
      <category>Nvidia</category>
      <category>video tdr failure</category>
      <category>블루스크린</category>
      <category>앤비디아</category>
      <category>윈도우</category>
      <author>lehero</author>
      <guid isPermaLink="true">https://lehero.tistory.com/310</guid>
      <comments>https://lehero.tistory.com/310#entry310comment</comments>
      <pubDate>Sun, 12 Nov 2023 18:39:19 +0900</pubDate>
    </item>
    <item>
      <title>또 다른 조건문 switch</title>
      <link>https://lehero.tistory.com/309</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;조건에 따라서 다른 실행이나 변수에 담는 여러가지 행위를 할 때 보통은 if를 사용하는 경우가 있습니다.&lt;br /&gt;때에 따라서는 switch가 더 클린한 코드를 만들수 있습니다.&lt;br /&gt;&lt;br /&gt;*if&lt;/p&gt;
&lt;pre id=&quot;code_1698235622418&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if($condition){
	$res = 1;
}else{
	$res = 2;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*switch&lt;/p&gt;
&lt;pre id=&quot;code_1698235673632&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;switch($condition){
	case &quot;1&quot; : $res = &quot;1&quot;; breack;
	case &quot;2&quot; : $res = &quot;2&quot;; breack;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 if도 짧게 가능 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1698235719224&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if($condition) $res = 1;
else $res = 2;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹은 삼항 연산자도 가능합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1698235765637&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$res = ($condition) ? 1 : 2;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>tech/PHP</category>
      <category>condition</category>
      <category>IF</category>
      <category>php</category>
      <category>Switch</category>
      <category>분기</category>
      <category>삼항연산자</category>
      <category>조건</category>
      <author>lehero</author>
      <guid isPermaLink="true">https://lehero.tistory.com/309</guid>
      <comments>https://lehero.tistory.com/309#entry309comment</comments>
      <pubDate>Wed, 25 Oct 2023 21:10:03 +0900</pubDate>
    </item>
    <item>
      <title>사용자 정의 함수에 값을 가져 오는 방법</title>
      <link>https://lehero.tistory.com/308</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 정의 함수에 값을 가져 오는 방법은 여러가지가 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1698067090698&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function inside(){
	$month = &quot;12&quot;;
	return $month;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 사용자 정의 함수는 inside를 실행하면 12가 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1698067186958&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$prefix = &quot;month : &quot;;
function inside($prefix){
	$month = &quot;12&quot;;
	return $prefix.$month;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인자 값으로 $prefix의 값을 넣을수 있습니다.&lt;br /&gt;인자 값에는 문자열뿐만 아니라 배열도 가능 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1698067277166&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$prefix = array(&quot;year&quot;, &quot;month&quot;, &quot;day&quot;);
function inside($prefix=array()){
	$month = &quot;12&quot;;
	return $prefix[0].$month;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인자 값과는 별도로 글로벌로 가져 올려면 아래와 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1698067342780&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$prefix = &quot;month : &quot;;
function inside(){
	global $prefix;
    
	$month = &quot;12&quot;;
	return $prefix.$month;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>tech/PHP</category>
      <category>function</category>
      <category>Global</category>
      <category>php</category>
      <category>배열</category>
      <category>인자</category>
      <author>lehero</author>
      <guid isPermaLink="true">https://lehero.tistory.com/308</guid>
      <comments>https://lehero.tistory.com/308#entry308comment</comments>
      <pubDate>Mon, 23 Oct 2023 22:22:53 +0900</pubDate>
    </item>
  </channel>
</rss>