<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>행복한 삶을 위하여</title>
    <link>https://cosmos2024.tistory.com/</link>
    <description>유용한 정보를 함께 나누고자 합니다.</description>
    <language>ko</language>
    <pubDate>Tue, 28 Jul 2026 21:34:07 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>행복한 삶을 위하여</managingEditor>
    <image>
      <title>행복한 삶을 위하여</title>
      <url>https://tistory1.daumcdn.net/tistory/7527675/attach/08b355ae8a7e48a2a7d16800456f8df7</url>
      <link>https://cosmos2024.tistory.com</link>
    </image>
    <item>
      <title>넷플릭스에서 꼭 봐야 할 SF 드라마 &amp;amp; 영화 추천</title>
      <link>https://cosmos2024.tistory.com/13</link>
      <description>&lt;p data-end=&quot;439&quot; data-start=&quot;255&quot; data-ke-size=&quot;size16&quot;&gt;SF(Sci-Fi, 공상과학)는 단순한 상상력의 산물이 아니라, 인간의 본질을 탐구하고, 기술과 사회가 맞물릴 때 발생할 수 있는 다양한 가능성을 조망하는 &lt;b&gt;거울 같은 장르&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-end=&quot;439&quot; data-start=&quot;255&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;439&quot; data-start=&quot;255&quot; data-ke-size=&quot;size16&quot;&gt;특히 넷플릭스는 글로벌 스트리밍 플랫폼답게, 타 플랫폼에선 보기 어려운 &lt;b&gt;독창적인 세계관과 시나리오&lt;/b&gt;를 가진 작품들을 엄선해 제공합니다.&lt;/p&gt;
&lt;p data-end=&quot;541&quot; data-start=&quot;443&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;541&quot; data-start=&quot;443&quot; data-ke-size=&quot;size16&quot;&gt;이번 포스팅에서는 단순한 재미를 넘어, &lt;b&gt;서사, 미장센, 철학적 메시지&lt;/b&gt;까지 고려해 선정한 &lt;b&gt;넷플릭스에서 반드시 감상해야 할 SF 드라마 &amp;amp; 영화&lt;/b&gt;를 소개해드리겠습니다.&lt;/p&gt;
&lt;p data-end=&quot;541&quot; data-start=&quot;443&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;754&quot; data-origin-height=&quot;72&quot;&gt;&lt;a href=&quot;https://www.netflix.com/&quot; target=&quot;&quot; title=&quot;넷플릭스 SF 드라마 영화&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDg6u4/btsNaL8Mcgo/GEFnXsKVHETEGCvDmt4uj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDg6u4%2FbtsNaL8Mcgo%2FGEFnXsKVHETEGCvDmt4uj1%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;754&quot; height=&quot;72&quot; data-origin-width=&quot;754&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;608&quot; data-start=&quot;569&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://www.netflix.com/title/81128579&quot;&gt;1. &lt;b&gt;더 플랫폼 (The Platform, 2019)&lt;/b&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7124016057410808&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 반응형] 최상단 고정 광고 --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-7124016057410808&quot; data-ad-slot=&quot;1200949376&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;873&quot; data-origin-height=&quot;449&quot;&gt;&lt;a href=&quot;https://www.netflix.com/title/81128579&quot; target=&quot;&quot; title=&quot;넷플릭스 SF 드라마 영화&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rdLSv/btsNaBSU4ej/efkHFipJQBzkHK5lorNxuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrdLSv%2FbtsNaBSU4ej%2FefkHFipJQBzkHK5lorNxuK%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;873&quot; height=&quot;449&quot; data-origin-width=&quot;873&quot; data-origin-height=&quot;449&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;676&quot; data-start=&quot;609&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;633&quot; data-start=&quot;609&quot;&gt;&lt;b&gt;장르&lt;/b&gt;: 디스토피아 / 사회풍자&lt;/li&gt;
&lt;li data-end=&quot;658&quot; data-start=&quot;634&quot;&gt;&lt;b&gt;감독&lt;/b&gt;: 갈더 가스텔루-우루티아&lt;/li&gt;
&lt;li data-end=&quot;676&quot; data-start=&quot;659&quot;&gt;&lt;b&gt;러닝타임&lt;/b&gt;: 94분&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;919&quot; data-start=&quot;852&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666; text-align: start;&quot;&gt;수직 구조의 감옥에서 펼쳐지는 계층적 생존 게임.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666; text-align: start;&quot;&gt;단순한 스릴러처럼 보이지만, 자본주의 사회의 극단적인 면모를 철학적으로 그려낸&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;사회적 SF 명작&lt;/b&gt;&lt;span style=&quot;color: #666666; text-align: start;&quot;&gt;입니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666; text-align: start;&quot;&gt;제한된 자원, 인간 본성, 집단 심리 등 여러 사회 이슈를 압축한 이 작품은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;SF를 통한 인간 심리 탐구&lt;/b&gt;&lt;span style=&quot;color: #666666; text-align: start;&quot;&gt;에 탁월한 예시가 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;919&quot; data-start=&quot;852&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;919&quot; data-start=&quot;852&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;추천 포인트&lt;/b&gt;&lt;br /&gt;✔ 철학적인 주제의식&lt;br /&gt;✔ 독창적 세계관 설정&lt;br /&gt;✔ 엔딩 해석의 여지가 많아 토론거리 제공&lt;/p&gt;
&lt;hr data-end=&quot;924&quot; data-start=&quot;921&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;963&quot; data-start=&quot;926&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://www.netflix.com/title/80230399&quot;&gt;2. &lt;b&gt;익스트랙션 (Extraction, 2020)&lt;/b&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;460&quot;&gt;&lt;a href=&quot;https://www.netflix.com/title/80230399&quot; target=&quot;&quot; title=&quot;넷플릭스 SF 드라마 영화&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDsGDv/btsNbhlOT3O/JoZmFyo2s3jzReDAXT3t6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDsGDv%2FbtsNbhlOT3O%2FJoZmFyo2s3jzReDAXT3t6K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;860&quot; height=&quot;460&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1029&quot; data-start=&quot;964&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;988&quot; data-start=&quot;964&quot;&gt;&lt;b&gt;장르&lt;/b&gt;: 액션 / SF / 첩보&lt;/li&gt;
&lt;li data-end=&quot;1009&quot; data-start=&quot;989&quot;&gt;&lt;b&gt;주연&lt;/b&gt;: 크리스 헴스워스&lt;/li&gt;
&lt;li data-end=&quot;1029&quot; data-start=&quot;1010&quot;&gt;&lt;b&gt;감독&lt;/b&gt;: 샘 하그레이브&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1163&quot; data-start=&quot;1031&quot; data-ke-size=&quot;size16&quot;&gt;단순한 액션 영화처럼 보일 수 있지만, &lt;b&gt;기술과 인간의 관계&lt;/b&gt;에 대해 미묘하게 탐색하는 영화입니다.&lt;/p&gt;
&lt;p data-end=&quot;1163&quot; data-start=&quot;1031&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1163&quot; data-start=&quot;1031&quot; data-ke-size=&quot;size16&quot;&gt;특히 후속편(익스트랙션 2)에서 SF적 요소가 더 뚜렷하게 드러나며, &lt;b&gt;포스트 휴먼 시대의 가능성&lt;/b&gt;에 대해 은유적으로 묘사합니다.&lt;/p&gt;
&lt;p data-end=&quot;1163&quot; data-start=&quot;1031&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1231&quot; data-start=&quot;1165&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;추천 포인트&lt;/b&gt;&lt;br /&gt;✔ 고퀄리티 액션씬&lt;br /&gt;✔ 신체성 + 기술 진화에 대한 SF적 접근&lt;br /&gt;✔ 몰입감 높은 전개&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1862&quot; data-start=&quot;1829&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://www.netflix.com/title/80100172&quot;&gt;3. &lt;b&gt;다크 (Dark, 2017~2020)&lt;/b&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7124016057410808&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 반응형] 최상단 고정 광고 --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-7124016057410808&quot; data-ad-slot=&quot;1200949376&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;460&quot;&gt;&lt;a href=&quot;https://www.netflix.com/title/80100172&quot; target=&quot;&quot; title=&quot;넷플릭스 SF 드라마 영화&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K6tGG/btsNa39fUAq/AgZ6fSZKWhK1tqUMkWQ2vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK6tGG%2FbtsNa39fUAq%2FAgZ6fSZKWhK1tqUMkWQ2vk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;877&quot; height=&quot;460&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1906&quot; data-start=&quot;1863&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1877&quot; data-start=&quot;1863&quot;&gt;&lt;b&gt;국가&lt;/b&gt;: 독일&lt;/li&gt;
&lt;li data-end=&quot;1906&quot; data-start=&quot;1878&quot;&gt;&lt;b&gt;장르&lt;/b&gt;: 시간여행 / 미스터리 / SF&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2045&quot; data-start=&quot;1908&quot; data-ke-size=&quot;size16&quot;&gt;넷플릭스 오리지널 중 &lt;b&gt;가장 정교한 타임 패러독스 서사&lt;/b&gt;를 구현한 작품. 단순한 시간여행을 넘어서, &lt;b&gt;세대 간의 비극적 인연&lt;/b&gt;과 &lt;b&gt;운명이라는 개념의 허구성&lt;/b&gt;까지 탐색합니다.&lt;/p&gt;
&lt;p data-end=&quot;2045&quot; data-start=&quot;1908&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2045&quot; data-start=&quot;1908&quot; data-ke-size=&quot;size16&quot;&gt;시청자의 논리적 사고력을 자극하는 고급 SF 드라마입니다.&lt;/p&gt;
&lt;p data-end=&quot;2045&quot; data-start=&quot;1908&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2117&quot; data-start=&quot;2047&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;추천 포인트&lt;/b&gt;&lt;br /&gt;✔ 복잡한 타임라인이 완벽하게 짜인 각본&lt;br /&gt;✔ 깊이 있는 캐릭터 서사&lt;br /&gt;✔ 철학과 물리학의 결합&lt;/p&gt;
&lt;hr data-end=&quot;2122&quot; data-start=&quot;2119&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2164&quot; data-start=&quot;2124&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://www.netflix.com/title/70264888&quot;&gt;4. &lt;b&gt;블랙 미러 (Black Mirror, 2011~)&lt;/b&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;467&quot;&gt;&lt;a href=&quot;https://www.netflix.com/title/70264888&quot; target=&quot;&quot; title=&quot;넷플릭스 SF 드라마 영화&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KJK4F/btsNa83IJe3/ZHK6G4K4Xbzpn8tksl4pNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKJK4F%2FbtsNa83IJe3%2FZHK6G4K4Xbzpn8tksl4pNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;877&quot; height=&quot;467&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;467&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2209&quot; data-start=&quot;2165&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2179&quot; data-start=&quot;2165&quot;&gt;&lt;b&gt;국가&lt;/b&gt;: 영국&lt;/li&gt;
&lt;li data-end=&quot;2209&quot; data-start=&quot;2180&quot;&gt;&lt;b&gt;장르&lt;/b&gt;: 디스토피아 / 옴니버스 / SF&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2358&quot; data-start=&quot;2211&quot; data-ke-size=&quot;size16&quot;&gt;기술 발전이 인간에게 어떤 그림자를 드리우는지를 각 에피소드마다 &lt;b&gt;독립적으로 구성된 단편 시리즈&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-end=&quot;2358&quot; data-start=&quot;2211&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;특히 AI, SNS, 메타버스, 뇌파 인터페이스 등 현대 기술을 소재로 한 현실 가능한 시나리오가 많아, &lt;b&gt;현대인의 필독작&lt;/b&gt;이라고 할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;2358&quot; data-start=&quot;2211&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2426&quot; data-start=&quot;2360&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;추천 포인트&lt;/b&gt;&lt;br /&gt;✔ 다양한 시나리오로 구성된 옴니버스&lt;br /&gt;✔ 사회비판적 시선&lt;br /&gt;✔ 몰입도 높은 연출과 반전&lt;/p&gt;
&lt;hr data-end=&quot;2431&quot; data-start=&quot;2428&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2460&quot; data-start=&quot;2433&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://www.netflix.com/title/80074220&quot;&gt;5. &lt;b&gt;3% (2016~2020)&lt;/b&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;873&quot; data-origin-height=&quot;465&quot;&gt;&lt;a href=&quot;https://www.netflix.com/title/80074220&quot; target=&quot;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W2e7M/btsNaecMfce/Ekje3TpcwQ9Z4NKbIKSsdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW2e7M%2FbtsNaecMfce%2FEkje3TpcwQ9Z4NKbIKSsdK%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;873&quot; height=&quot;465&quot; data-origin-width=&quot;873&quot; data-origin-height=&quot;465&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2504&quot; data-start=&quot;2461&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2476&quot; data-start=&quot;2461&quot;&gt;&lt;b&gt;국가&lt;/b&gt;: 브라질&lt;/li&gt;
&lt;li data-end=&quot;2504&quot; data-start=&quot;2477&quot;&gt;&lt;b&gt;장르&lt;/b&gt;: 디스토피아 / 생존 / SF&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2622&quot; data-start=&quot;2506&quot; data-ke-size=&quot;size16&quot;&gt;브라질에서 제작된 드라마지만 글로벌한 인기를 끈 이유는 &lt;b&gt;현실의 계급 시스템&lt;/b&gt;을 SF적으로 재해석한 데 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;2622&quot; data-start=&quot;2506&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;사회적 불평등, 선택의 딜레마, 유토피아의 허상 등, 다층적 주제를 풀어낸 작품입니다.&lt;/p&gt;
&lt;p data-end=&quot;2622&quot; data-start=&quot;2506&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2691&quot; data-start=&quot;2624&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;추천 포인트&lt;/b&gt;&lt;br /&gt;✔ 브라질 특유의 세계관&lt;br /&gt;✔ 현대 사회에 대한 직설적 은유&lt;br /&gt;✔ 현실감 있는 캐릭터 설정&lt;/p&gt;
&lt;hr data-end=&quot;2696&quot; data-start=&quot;2693&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2735&quot; data-start=&quot;2698&quot; data-ke-size=&quot;size26&quot;&gt;마무리하며 &amp;ndash; SF는 단지 상상이 아닌, 미래를 읽는 렌즈&lt;/h2&gt;
&lt;p data-end=&quot;2839&quot; data-start=&quot;2737&quot; data-ke-size=&quot;size16&quot;&gt;SF는 단순한 '공상'이 아닙니다.&lt;/p&gt;
&lt;p data-end=&quot;2839&quot; data-start=&quot;2737&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;지금 우리가 겪는 현실의 문제들을 투영해 미래의 가능성을 그려보고, 인간과 기술, 존재의 의미를 재해석하는 &lt;b&gt;철학적 탐구의 장르&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-end=&quot;2839&quot; data-start=&quot;2737&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2939&quot; data-start=&quot;2841&quot; data-ke-size=&quot;size16&quot;&gt;넷플릭스는 그런 면에서 SF 장르의 보고(寶庫)라 할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;2939&quot; data-start=&quot;2841&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2939&quot; data-start=&quot;2841&quot; data-ke-size=&quot;size16&quot;&gt;이번 추천작 리스트를 통해, 단순한 재미를 넘어서 &lt;b&gt;생각을 확장하는 경험&lt;/b&gt;을 하시길 바랍니다.&lt;/p&gt;
&lt;p data-end=&quot;2939&quot; data-start=&quot;2841&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;754&quot; data-origin-height=&quot;72&quot;&gt;&lt;a href=&quot;https://www.netflix.com/&quot; target=&quot;&quot; title=&quot;넷플릭스 SF 드라마 영화&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwCaWp/btsNa5Tu6kt/KTiCUrtKrNFT1TZfg1cHj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwCaWp%2FbtsNa5Tu6kt%2FKTiCUrtKrNFT1TZfg1cHj1%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;754&quot; height=&quot;72&quot; data-origin-width=&quot;754&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>유용한 정보</category>
      <category>넷플릭스 sf 드라마</category>
      <category>넷플릭스 SF 영화</category>
      <category>넷플릭스에서 꼭 봐야 할 sf 드라마 &amp;amp; 영화 추천</category>
      <author>행복한 삶을 위하여</author>
      <guid isPermaLink="true">https://cosmos2024.tistory.com/13</guid>
      <comments>https://cosmos2024.tistory.com/13#entry13comment</comments>
      <pubDate>Sat, 5 Apr 2025 18:24:10 +0900</pubDate>
    </item>
    <item>
      <title>사용기) BenQ 모니터 (GW2785TC)</title>
      <link>https://cosmos2024.tistory.com/12</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;2020년 3월에 EW2780을 구입하여 기존 삼성모니터와 듀얼로 사용하다가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삼성모니터가 이상해져서 본 모델을 이번에 추가로 구입하여 사용중에 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 모니터 구입시 BenQ 브랜드를 몰랐었는데 여러 사이트를 검색한 결과,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BenQ 모니터가 디자인, 기능, 가격 등 모두 맘에 들어서 구입하였던 것이고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에도 선택은 BenQ 모니터였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피벗, 스위블 기능이 있어서 사진과 같이 모니터 암을 구입하여 사용하니 좋네요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pzBRQ/btsL0BAHlx6/AfcMG76xXGK8CetiY57kMk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pzBRQ/btsL0BAHlx6/AfcMG76xXGK8CetiY57kMk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pzBRQ/btsL0BAHlx6/AfcMG76xXGK8CetiY57kMk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpzBRQ%2FbtsL0BAHlx6%2FAfcMG76xXGK8CetiY57kMk%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;773&quot; height=&quot;435&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히, 재택근무하며 오랫동안 모니터를 보는 저에게는 블루라이트 차단 기능 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;눈을 보호하기 위한 다양한 기능과 마이크 기능이 유용합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lz6eP/btsL2b1thaJ/xAKTcElvkj5Heggx1CupPk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lz6eP/btsL2b1thaJ/xAKTcElvkj5Heggx1CupPk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lz6eP/btsL2b1thaJ/xAKTcElvkj5Heggx1CupPk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flz6eP%2FbtsL2b1thaJ%2FxAKTcElvkj5Heggx1CupPk%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;773&quot; height=&quot;435&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;눈보호를 위해서 Low Blue Light Plus(청색광 차단), Flicker Free(깜박임 방지),&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B.I(자동밝기조절), ePaper, 색약모드 등 다양한 기능이 제공되어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모니터를 장시간 사용해도 피로하지가 않아서 너무 좋네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccz6zW/btsL0Z1ZviI/6u4TK13nMIJ0tK5WUkpLUk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccz6zW/btsL0Z1ZviI/6u4TK13nMIJ0tK5WUkpLUk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccz6zW/btsL0Z1ZviI/6u4TK13nMIJ0tK5WUkpLUk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fccz6zW%2FbtsL0Z1ZviI%2F6u4TK13nMIJ0tK5WUkpLUk%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;773&quot; height=&quot;435&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7124016057410808&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 반응형] 최상단 고정 광고 --&gt;
&lt;p&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-7124016057410808&quot; data-ad-slot=&quot;1200949376&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;&lt;/p&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ya21g/btsL2ecO2lt/aNGTMxU7VwwJYjxzTcQRO1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ya21g/btsL2ecO2lt/aNGTMxU7VwwJYjxzTcQRO1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ya21g/btsL2ecO2lt/aNGTMxU7VwwJYjxzTcQRO1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYa21g%2FbtsL2ecO2lt%2FaNGTMxU7VwwJYjxzTcQRO1%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;773&quot; height=&quot;435&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습모드, 관리모드, 코딩모드, 리딩모드 등 다양한 모드가 있어서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학생, 직장인들에게 하나의 선택지가 될 수 있을 것 같네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HDMI, USB-C, DP 단자가 있어서 다양한 기기와 연결이 가능하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;USB-C 포트로는 충전도 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcMH8l/btsL18cOuSn/n3x4NzWEk2lHKznpAKf4Pk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcMH8l/btsL18cOuSn/n3x4NzWEk2lHKznpAKf4Pk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcMH8l/btsL18cOuSn/n3x4NzWEk2lHKznpAKf4Pk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdcMH8l%2FbtsL18cOuSn%2Fn3x4NzWEk2lHKznpAKf4Pk%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;773&quot; height=&quot;435&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/law7A/btsL0W5HYnC/ATTWlEbWsLSCWKz1FmHbuK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/law7A/btsL0W5HYnC/ATTWlEbWsLSCWKz1FmHbuK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/law7A/btsL0W5HYnC/ATTWlEbWsLSCWKz1FmHbuK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flaw7A%2FbtsL0W5HYnC%2FATTWlEbWsLSCWKz1FmHbuK%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;773&quot; height=&quot;435&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아쉬운 부분은 USB-C 포트가 하나여서 마이크 기능과 충전기능을&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동시에 사용할 수 없다는 것인데 향후 개발되는 모델에는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가하면 좋을 것 같네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 모델은 어답터가 있어서 선정리하는데 불편했는데 GW2785TC 모델은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전원케이블이 220V 케이블이어서 선정리가 깔끔해서 이 또한 좋네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에너지스타 마크를 받아서 일반 모니터보다 20~30% 에너지 절약되는 부분도 좋고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3년 무상보증 서비스가 있어서 향후 A/S에 대한 부담도 많이 줄었네요.&lt;/p&gt;</description>
      <category>IT, 프로그램</category>
      <category>BenQ</category>
      <category>gw2785tc</category>
      <category>내돈내산</category>
      <category>모니터</category>
      <category>사용기</category>
      <author>행복한 삶을 위하여</author>
      <guid isPermaLink="true">https://cosmos2024.tistory.com/12</guid>
      <comments>https://cosmos2024.tistory.com/12#entry12comment</comments>
      <pubDate>Sat, 25 Jan 2025 10:12:30 +0900</pubDate>
    </item>
    <item>
      <title>PHP) select 쿼리 결과 카운트 (mysqli_num_rows())</title>
      <link>https://cosmos2024.tistory.com/11</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;835&quot; data-origin-height=&quot;187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BLS2b/btsLS4CLckz/hMxyHkB7panK7nKaWQWu3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BLS2b/btsLS4CLckz/hMxyHkB7panK7nKaWQWu3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BLS2b/btsLS4CLckz/hMxyHkB7panK7nKaWQWu3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBLS2b%2FbtsLS4CLckz%2FhMxyHkB7panK7nKaWQWu3K%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;835&quot; height=&quot;187&quot; data-origin-width=&quot;835&quot; data-origin-height=&quot;187&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;select 쿼리 결과 카운트 (mysqli_num_rows())를 활용하는 방법과 팁&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스팅에서는 &lt;b&gt;mysqli_num_rows()&lt;/b&gt; 함수로 MySQL의 select 쿼리 결과를 카운트하는 방법에 대해 살펴보겠습니다. PHP와 MySQL로 작업하시는 분들에게 데이터의 &lt;b&gt;레코드 수 확인&lt;/b&gt;은 굉장히 중요한 과정 중의 하나입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. mysqli_num_rows() 함수란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysqli_num_rows()는 MySQL 데이터베이스에서 실행된 &lt;b&gt;select 쿼리 결과의 레코드 수&lt;/b&gt;를 반환하는 PHP 내장 함수입니다.&lt;br /&gt;이 함수는 주로 &lt;span style=&quot;color: #ee2323;&quot;&gt;검색 결과의 데이터가 &lt;b&gt;몇 건인지 확인&lt;/b&gt;할 때 사용&lt;/span&gt;됩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문법:&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;int&lt;/span&gt; &lt;span&gt;mysqli_num_rows&lt;/span&gt;(mysqli_result &lt;span&gt;$result&lt;/span&gt;); &lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$result: mysqli_query()나 mysqli_store_result()로 반환된 &lt;b&gt;쿼리 결과 객체&lt;/b&gt;를 입력받습니다.&lt;/li&gt;
&lt;li&gt;반환값: 쿼리로 반환된 &lt;b&gt;레코드(행)의 개수&lt;/b&gt;를 정수형(int)으로 반환합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 기본적인 사용 방법&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;예제 1: select 쿼리 결과의 행 수 출력&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 코드는 데이터베이스에서 특정 테이블의 전체 레코드 수를 출력하는 간단한 예제입니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;?php&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 데이터베이스 연결&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$conn = mysqli_connect('localhost', 'username', 'password', 'database');&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 연결 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if (!$conn) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;die('데이터베이스 연결 실패: ' . mysqli_connect_error());&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 쿼리 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$sql = &quot;SELECT * FROM users&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$result = mysqli_query($conn, $sql);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 결과 행 수 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if ($result) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; $rowCount = mysqli_num_rows($result);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot;총 레코드 수: &quot;&amp;nbsp;. $rowCount . &quot;개&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;} else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot;쿼리 실행 실패: &quot;&amp;nbsp;. mysqli_error($conn);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 연결 종료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysqli_close($conn);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;?&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드는 users 테이블에 저장된 &lt;b&gt;전체 레코드 수&lt;/b&gt;를 가져옵니다.&lt;br /&gt;mysqli_query() 함수가 성공적으로 결과를 반환했다면, mysqli_num_rows()로 해당 결과의 행 수를 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7124016057410808&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 반응형] 최상단 고정 광고 --&gt;
&lt;p&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-7124016057410808&quot; data-ad-slot=&quot;1200949376&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;&lt;/p&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 실무에서 자주 쓰이는 상황&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 행 수를 출력하는 것으로 끝나는 경우는 드뭅니다. 데이터를 활용하려면 조건별로 결과를 구분하고 효율적으로 처리해야 합니다. 아래는 자주 쓰이는 몇 가지 응용 사례입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1 조건 검색 후 결과 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 조건에 맞는 데이터가 &lt;b&gt;존재하는지 여부&lt;/b&gt;를 확인할 때 mysqli_num_rows()를 활용할 수 있습니다.&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;?php&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$sql = &quot;SELECT * FROM users WHERE status = 'active'&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$result = mysqli_query($conn, $sql);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if ($result) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $activeUsers = mysqli_num_rows($result);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ($activeUsers &amp;gt;&amp;nbsp;0) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &quot;활성 상태의 사용자가 &quot;&amp;nbsp;. $activeUsers . &quot;명 있습니다.&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &quot;활성 상태의 사용자가 없습니다.&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;} else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &quot;쿼리 실패: &quot;&amp;nbsp;. mysqli_error($conn);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;?&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드는 &lt;b&gt;조건 검색&lt;/b&gt;을 활용해 활성 사용자(active user)의 수를 출력합니다.&lt;br /&gt;결과 행 수를 조건문에서 활용해 데이터 존재 여부를 체크할 수 있다는 점이 중요합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.2 페이징 처리에 활용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 애플리케이션에서 게시판이나 상품 목록을 구현할 때 &lt;b&gt;페이징 처리&lt;/b&gt;가 필수적입니다.&lt;br /&gt;이때 mysqli_num_rows()를 이용해 전체 데이터 수를 구하고, 이를 기반으로 페이지 수를 계산합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;?php&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$perPage = 10; // 한 페이지당 출력할 데이터 개수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$page = isset($_GET['page']) ? intval($_GET['page']) : 1;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$start = ($page - 1) * $perPage;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 전체 데이터 수 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$sqlCount = &quot;SELECT * FROM products&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$resultCount = mysqli_query($conn, $sqlCount);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$totalRows = mysqli_num_rows($resultCount);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$totalPages = ceil($totalRows / $perPage);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 현재 페이지의 데이터 가져오기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$sql = &quot;SELECT * FROM products LIMIT $start, $perPage&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$result = mysqli_query($conn, $sql);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if ($result) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;while ($row = mysqli_fetch_assoc($result)) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot;상품명: &quot;&amp;nbsp;. $row['product_name'] . &quot;&amp;lt;br&amp;gt;&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot;&amp;lt;br&amp;gt;현재 페이지: &quot;&amp;nbsp;. $page . &quot;&amp;nbsp;/ 총 페이지: &quot;&amp;nbsp;. $totalPages;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;} else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot;쿼리 실패: &quot; . mysqli_error($conn);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;?&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드는 한 페이지당 10개의 상품을 출력하는 &lt;b&gt;페이징 처리&lt;/b&gt;를 구현한 예제입니다.&lt;br /&gt;mysqli_num_rows()로 전체 데이터 개수를 확인하고 페이지 수를 계산하는 방식입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. mysqli_num_rows() 사용 시 주의사항&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysqli_num_rows()는 MySQL 서버에서 반환된 &lt;b&gt;결과 객체에 대한 정보&lt;/b&gt;를 기반으로 행 수를 계산합니다. 따라서 다음 사항에 유의하세요.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;select 문에서만 사용 가능&lt;/b&gt;&lt;br /&gt;mysqli_num_rows()는 select 쿼리에만 사용할 수 있습니다. insert, update, delete 쿼리에는 사용할 수 없으니 주의하세요.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;결과가 NULL인 경우 처리&lt;/b&gt;&lt;br /&gt;쿼리가 실패하거나 반환된 결과가 없는 경우, mysqli_num_rows() 호출 시 에러가 발생할 수 있습니다.&lt;br /&gt;따라서 항상 mysqli_query()의 결과를 먼저 확인한 후 사용해야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대규모 데이터 처리 시 성능&lt;/b&gt;&lt;br /&gt;매우 큰 데이터셋의 전체 행 수를 확인하는 경우 성능 이슈가 발생할 수 있습니다.&lt;br /&gt;이때는 COUNT()와 같은 MySQL의 집계 함수를 활용하는 것이 더 효율적입니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 대안: COUNT()로 행 수 확인하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysqli_num_rows() 대신 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;u&gt;MySQL의 집계 함수인 COUNT()를 활용하면 더 효율적으로 행 수를 확인&lt;/u&gt;&lt;/span&gt;할 수 있습니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;?php&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$sql = &quot;SELECT COUNT(*) AS total FROM users&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$result = mysqli_query($conn, $sql);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if ($result) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$row = mysqli_fetch_assoc($result);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;echo &quot;총 레코드 수: &quot; . $row['total'] . &quot;개&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;} else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot;쿼리 실패: &quot;&amp;nbsp;. mysqli_error($conn);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;?&amp;gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방법은 대규모 데이터 처리 시 &lt;b&gt;메모리 절약&lt;/b&gt;과 &lt;b&gt;성능 최적화&lt;/b&gt; 측면에서 더 유리합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;220&quot; data-origin-height=&quot;119&quot;&gt;&lt;a href=&quot;https://www.php.net/&quot; target=&quot;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oeqRe/btsLTqy4nJy/mqKeOXZH3vtS6NiLzA0670/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoeqRe%2FbtsLTqy4nJy%2FmqKeOXZH3vtS6NiLzA0670%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;220&quot; height=&quot;119&quot; data-origin-width=&quot;220&quot; data-origin-height=&quot;119&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;188&quot; data-origin-height=&quot;63&quot;&gt;&lt;a href=&quot;https://mariadb.org/&quot; target=&quot;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xCoyL/btsLUFhuhQn/iMS0gBGqCsWzBOYh9EU6EK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxCoyL%2FbtsLUFhuhQn%2FiMS0gBGqCsWzBOYh9EU6EK%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;188&quot; height=&quot;63&quot; data-origin-width=&quot;188&quot; data-origin-height=&quot;63&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT, 프로그램</category>
      <category>count</category>
      <category>mariadb</category>
      <category>mysqli_num_rows</category>
      <category>php</category>
      <author>행복한 삶을 위하여</author>
      <guid isPermaLink="true">https://cosmos2024.tistory.com/11</guid>
      <comments>https://cosmos2024.tistory.com/11#entry11comment</comments>
      <pubDate>Wed, 22 Jan 2025 09:25:28 +0900</pubDate>
    </item>
    <item>
      <title>PHP) mysql 쿼리 결과 영향을 받은 레코드 수 카운트 (mysqli_affected_rows())</title>
      <link>https://cosmos2024.tistory.com/10</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M2fIu/btsLUZtgc7E/Dl7MmiGe4vOy47ucZafIu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M2fIu/btsLUZtgc7E/Dl7MmiGe4vOy47ucZafIu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M2fIu/btsLUZtgc7E/Dl7MmiGe4vOy47ucZafIu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM2fIu%2FbtsLUZtgc7E%2FDl7MmiGe4vOy47ucZafIu1%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;837&quot; height=&quot;187&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;187&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; letter-spacing: 0px;&quot;&gt;웹 개발 작업을 하다 보면 데이터베이스에서 데이터를&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;삽입, 수정, 삭제&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; letter-spacing: 0px;&quot;&gt;하는 과정에서 영향을 받은 레코드의 수를 확인해야 할 때가 많습니다. PHP의&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;mysqli_affected_rows()&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; letter-spacing: 0px;&quot;&gt;함수는 이런 상황에서 매우 유용하게 사용됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;mysqli_affected_rows()란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysqli_affected_rows()는 PHP에서 MySQL 작업 후,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;INSERT, UPDATE, DELETE&lt;/b&gt;와 같은 쿼리의 실행 결과로 영향을 받은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;레코드 수를 반환&lt;/b&gt;하는 함수입니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;문법:&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;int mysqli_affected_rows(mysqli $link);&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$link: MySQL 서버와 연결된&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;mysqli_connect()&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체.&lt;/li&gt;
&lt;li&gt;반환값:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;쿼리 실행 후 영향을 받은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;행(row)의 수&lt;/b&gt;를 반환.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;0&lt;/b&gt;: 쿼리 실행 결과로 영향을 받은 행이 없음.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;-1&lt;/b&gt;: 쿼리가 실패했거나 유효하지 않을 때.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;2. 기본적인 사용 방법&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;예제 1: 단순 INSERT 쿼리 후 영향받은 레코드 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 코드는 MySQL 테이블에 데이터를 삽입한 후,&lt;span&gt;&amp;nbsp;&lt;/span&gt;mysqli_affected_rows()를 사용해 실제로 삽입된 레코드 수를 확인하는 예제입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;?php&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 데이터베이스 연결&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$conn = mysqli_connect('localhost', 'username', 'password', 'database');&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 연결 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if (!$conn) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;die('데이터베이스 연결 실패: ' . mysqli_connect_error());&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// INSERT 쿼리 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$sql = &quot;INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com')&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$result = mysqli_query($conn, $sql);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 영향을 받은 행 수 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if ($result) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; echo &quot;삽입된 레코드 수: &quot;&amp;nbsp;. mysqli_affected_rows($conn) . &quot;개&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;} else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; echo &quot;쿼리 실패: &quot;&amp;nbsp;. mysqli_error($conn);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// 연결 종료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysqli_close($conn);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;?&amp;gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;mysqli_query()가 성공적으로 실행되면,&lt;span&gt;&amp;nbsp;&lt;/span&gt;mysqli_affected_rows()가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;삽입된 행 수&lt;/b&gt;를 반환합니다.&lt;/li&gt;
&lt;li&gt;실패한 경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;-1이 반환되므로, 에러를 처리할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;예제 2: UPDATE 쿼리의 영향을 받은 레코드 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UPDATE 쿼리에서도 영향을 받은 레코드 수를 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;?php&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$sql = &quot;UPDATE users SET email = 'new_email@example.com' WHERE username = 'john_doe'&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$result = mysqli_query($conn, $sql);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if ($result) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$affectedRows = mysqli_affected_rows($conn);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; if ($affectedRows &amp;gt;&amp;nbsp;0) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; &lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; echo &quot;업데이트된 레코드 수: &quot;&amp;nbsp;. $affectedRows . &quot;개&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; } else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; &lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; echo &quot;업데이트된 레코드가 없습니다. (조건에 맞는 데이터가 없거나 값이 동일)&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;} else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; echo &quot;쿼리 실패: &quot;&amp;nbsp;. mysqli_error($conn);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;?&amp;gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;UPDATE&amp;nbsp;쿼리에서 영향을 받은 레코드 수는&amp;nbsp;업데이트된 데이터가 있을 경우에만 반환됩니다.&lt;/li&gt;
&lt;li&gt;조건에 맞는 데이터가 없거나, 이미 값이 동일한 경우 영향을 받은 행 수는&lt;span&gt;&amp;nbsp;&lt;/span&gt;0으로 반환됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7124016057410808&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 반응형] 최상단 고정 광고 --&gt; &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-7124016057410808&quot; data-ad-slot=&quot;1200949376&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;3. 실무에서 유용한 활용 사례&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;3.1 DELETE 쿼리 결과 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삭제 작업에서도 영향을 받은 레코드 수를 확인하는 것이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;?php&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$sql = &quot;DELETE FROM users WHERE status = 'inactive'&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$result = mysqli_query($conn, $sql);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if ($result) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; $deletedRows = mysqli_affected_rows($conn);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; if ($deletedRows &amp;gt;&amp;nbsp;0) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; echo &quot;삭제된 레코드 수: &quot; . $deletedRows . &quot;개&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; } else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; &lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; echo &quot;삭제된 레코드가 없습니다. (조건에 맞는 데이터 없음)&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;} else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; echo &quot;쿼리 실패: &quot;&amp;nbsp;. mysqli_error($conn);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;?&amp;gt;&lt;span style=&quot;color: #4078f2;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드는 특정 조건에 맞는 데이터를 삭제한 후, 삭제된 레코드 수를 반환합니다.&lt;br /&gt;만약 조건에 맞는 데이터가 없다면&lt;span&gt;&amp;nbsp;&lt;/span&gt;0을 반환하므로, 이를 통해 삭제 결과를 확인할 수 있습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;3.2 트랜잭션 처리와 함께 사용하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트랜잭션을 사용하여 데이터 무결성을 유지하면서&lt;span&gt;&amp;nbsp;&lt;/span&gt;mysqli_affected_rows()로 쿼리 성공 여부를 검증할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;?php&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysqli_begin_transaction($conn);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;try {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// 데이터 삽입&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; $sql1 = &quot;INSERT INTO orders (order_id, amount) VALUES (1, 100)&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; mysqli_query($conn, $sql1);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; $affected1 = mysqli_affected_rows($conn);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; // 데이터 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; $sql2 = &quot;UPDATE users SET balance = balance - 100 WHERE user_id = 1&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; mysqli_query($conn, $sql2);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; $affected2 = mysqli_affected_rows($conn);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; // 트랜잭션 완료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; if ($affected1 &amp;gt;&amp;nbsp;0 &amp;amp;&amp;amp;&amp;nbsp;$affected2 &amp;gt;&amp;nbsp;0) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; &lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; mysqli_commit($conn);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; &lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; echo &quot;트랜잭션 성공: 주문 생성 및 잔액 업데이트 완료&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; } else {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; &lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; throw new Exception(&quot;영향을 받은 레코드가 없습니다.&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;} catch (Exception $e) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; mysqli_rollback($conn);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; echo &quot;트랜잭션 실패: &quot;&amp;nbsp;. $e-&amp;gt;getMessage();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysqli_close($conn);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;?&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 예제는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;주문 생성&lt;/b&gt;과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;잔액 차감&lt;/b&gt;을 한 트랜잭션에서 처리하는 코드입니다.&lt;br /&gt;mysqli_affected_rows()로 각각의 쿼리 결과를 검증하고, 하나라도 실패하면 트랜잭션을 롤백합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;4.&lt;span&gt;&amp;nbsp;&lt;/span&gt;mysqli_affected_rows()&lt;span&gt;&amp;nbsp;&lt;/span&gt;사용 시 주의사항&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;4.1 SELECT 쿼리에는 사용 불가&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysqli_affected_rows()는 INSERT, UPDATE, DELETE와 같은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;데이터 변경 작업&lt;/b&gt;에만 사용 가능합니다.&lt;br /&gt;&lt;b&gt;SELECT 쿼리&lt;/b&gt;의 경우에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;mysqli_num_rows()를 사용해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// SELECT 쿼리 결과를 확인하려면 mysqli_num_rows() 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$sql = &quot;SELECT * FROM users&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$result = mysqli_query($conn, $sql);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$rowCount = mysqli_num_rows($result); // SELECT 쿼리는 이 방식으로 처리&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;4.2 중복 데이터와 영향받은 레코드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UPDATE 쿼리에서 값이 동일한 레코드에 대해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;변경이 발생하지 않으면&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;영향을 받은 레코드로 계산되지 않습니다.&lt;span style=&quot;color: #a0a1a7;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$sql = &quot;UPDATE users SET email = 'john@example.com' WHERE username = 'john_doe'&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysqli_query($conn, $sql);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;echo mysqli_affected_rows($conn); // 결과: 0 (이미 값이 동일)&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;4.3 AUTO_INCREMENT와의 연동&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;INSERT 쿼리에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;AUTO_INCREMENT&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;필드를 사용하는 경우, 레코드 삽입 후&lt;span&gt;&amp;nbsp;&lt;/span&gt;mysqli_insert_id()와 함께 사용하면 삽입된 레코드의 ID와 영향을 받은 레코드 수를 함께 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$sql = &quot;INSERT INTO users (username, email) VALUES ('jane_doe', 'jane@example.com')&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysqli_query($conn, $sql);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if (mysqli_affected_rows($conn) &amp;gt;&amp;nbsp;0) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$insertedId = mysqli_insert_id($conn);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; echo &quot;삽입 성공! 새 레코드 ID: &quot;&amp;nbsp;. $insertedId;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;5. 결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysqli_affected_rows()는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;데이터 변경 작업&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;후 영향을 받은 레코드 수를 확인할 수 있는 매우 유용한 함수입니다. 실무에서 쿼리 결과를 검증하거나 트랜잭션의 성공 여부를 판단할 때 활용할 수 있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;220&quot; data-origin-height=&quot;119&quot;&gt;&lt;a href=&quot;https://www.php.net/&quot; target=&quot;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjilgl/btsLUCkN94I/koZEsm5KL94lPkhMB9fWC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbjilgl%2FbtsLUCkN94I%2FkoZEsm5KL94lPkhMB9fWC0%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;220&quot; height=&quot;119&quot; data-origin-width=&quot;220&quot; data-origin-height=&quot;119&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;188&quot; data-origin-height=&quot;63&quot;&gt;&lt;a href=&quot;https://mariadb.org/&quot; target=&quot;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cX27KQ/btsLTG2O5ec/b5ExKuuq4zPrSaBWqTk2m1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcX27KQ%2FbtsLTG2O5ec%2Fb5ExKuuq4zPrSaBWqTk2m1%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;212&quot; height=&quot;71&quot; data-origin-width=&quot;188&quot; data-origin-height=&quot;63&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4928&quot; data-origin-height=&quot;3280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LNlpD/btsL2H6SN7f/WEULCFUgCvKBbw1n9OjmbK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LNlpD/btsL2H6SN7f/WEULCFUgCvKBbw1n9OjmbK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LNlpD/btsL2H6SN7f/WEULCFUgCvKBbw1n9OjmbK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLNlpD%2FbtsL2H6SN7f%2FWEULCFUgCvKBbw1n9OjmbK%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;333&quot; height=&quot;222&quot; data-origin-width=&quot;4928&quot; data-origin-height=&quot;3280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2900&quot; data-origin-height=&quot;4334&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LX38L/btsL2ce1H8H/suOa3tnKNOfr6CJkniCj2K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LX38L/btsL2ce1H8H/suOa3tnKNOfr6CJkniCj2K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LX38L/btsL2ce1H8H/suOa3tnKNOfr6CJkniCj2K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLX38L%2FbtsL2ce1H8H%2FsuOa3tnKNOfr6CJkniCj2K%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;330&quot; height=&quot;493&quot; data-origin-width=&quot;2900&quot; data-origin-height=&quot;4334&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>IT, 프로그램</category>
      <category>mysqli_affected_rows</category>
      <category>php</category>
      <category>레코드수</category>
      <category>쿼리결과영향레코드수</category>
      <author>행복한 삶을 위하여</author>
      <guid isPermaLink="true">https://cosmos2024.tistory.com/10</guid>
      <comments>https://cosmos2024.tistory.com/10#entry10comment</comments>
      <pubDate>Tue, 21 Jan 2025 15:14:47 +0900</pubDate>
    </item>
    <item>
      <title>웹프로그램) 구글 차트를 사용한 그래프 만들기 소스</title>
      <link>https://cosmos2024.tistory.com/9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;일일 데이터에 대한 그래프 생성이 필요하여 &lt;a href=&quot;https://developers.google.com/chart?hl=ko&quot;&gt;구글차트&lt;/a&gt;를 사용하여 그래프를 만들어 봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러가지 시행착오를 거치며 만든 소스를 공개합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 부분(파란색 글씨)에 서버 사이드 프로그램으로 데이터를 넣으면 되겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 소스를 사용하여 만들어진 그래프의 이미지는 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;267&quot;&gt;&lt;a href=&quot;https://developers.google.com/chart?hl=ko&quot; target=&quot;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NVqe0/btsLUYA50tQ/v8EULkc48gTkuakCTK9IH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNVqe0%2FbtsLUYA50tQ%2Fv8EULkc48gTkuakCTK9IH1%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;616&quot; height=&quot;267&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;267&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7124016057410808&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 반응형] 최상단 고정 광고 --&gt;
&lt;p&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-7124016057410808&quot; data-ad-slot=&quot;1200949376&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;&lt;/p&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;google.charts.load('current', {'packages':['corechart']});&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;google.charts.setOnLoadCallback(drawChart1);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;function drawChart1()&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var data = google.visualization.arrayToDataTable([&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;['일', 'A', {role:'annotation'}, 'B', {role:'annotation'},],&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;['08/01\n(토)', 3, '3', 3, '3',],&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;['08/02\n(일)', 5, '5', 1, '1',],&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;['08/03\n(월)', &amp;nbsp;, &amp;nbsp;'', 5, '5',],&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;['08/04\n(화)', &amp;nbsp;, &amp;nbsp;'', 3, '3',],&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;['08/05\n(수)', 7, '7', 2, '2',],&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;['08/06\n(목)', 3, '3', 9, '9',],&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;['08/07\n(금)', 2, '2', 8, '8',],&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;['08/08\n(토)', 7, '7', 3, '3',],&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;['08/09\n(일)', 5, '5', 2, '2',],&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var options = {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;curveType: 'none',&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;curveType: 'function', // 그래프가 스무스하게 연결됨 (이 부분이 없으면 curve가 없어짐)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;interpolateNulls : true, // 데이터가 없을 경우 다음 데이터와 라인 연결&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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;(위 08/03, 08/04 데이터가 없으므로 08/02와 08/05 연결됨)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title : ' ', // 그래프 상단의 타이틀&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;titleTextStyle : {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color: 'blue',&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fontName: '맑은 고딕',&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fontSize: 16,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bold: 1,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;italic: 0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;annotations: { &amp;nbsp;// 주석달기 (그래프 위에 표시하는 데이터 관련)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;textStyle: {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fontSize: 12,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bold: true,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;italic: true,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fontSize: 10,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fontName: '맑은 고딕',&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;subtitle: '횟수1',&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vAxis: { // Y축&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title: '비율 (%)',&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;textStyle: {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color: 'black',&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fontName: '맑은 고딕',&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fontSize: 11&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hAxis: { // X축&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gridlines: {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count: -1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;textStyle: {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color: 'black',&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fontName: '맑은 고딕',&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fontSize: 11&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;seriesType: 'line',&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width: 600, // 그래프 폭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height: 265,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bar: {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;groupWidth: '100%'&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;legend: { // 주석&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;position: 'bottom',&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;textStyle: {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color: 'black',&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fontName: '맑은 고딕',&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fontSize: 12&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;chartArea:{left:70, top:5, height:'70%', width:'100%'}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var chart = new google.visualization.ComboChart(document.getElementById('Combo_Chart1'));&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;chart.draw(data, options);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;/script&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;div id=&quot;Combo_Chart1&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글 차트는 디자인적으로 그렇게 좋다고는 볼 수 없지만 무료라는 잇점이 있습니다. 다만 그래프를 만드는 데이터가 구글로 넘어가는 부분이 있으므로 민감한 데이터의 경우 상용 그래프 사용을 추천드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 구글에서 제공하는 그래프의 여러 형태입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9sRKi/btsLTrY0IHf/u7CKKNoZqKtycmU0lZzUA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9sRKi/btsLTrY0IHf/u7CKKNoZqKtycmU0lZzUA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9sRKi/btsLTrY0IHf/u7CKKNoZqKtycmU0lZzUA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9sRKi%2FbtsLTrY0IHf%2Fu7CKKNoZqKtycmU0lZzUA0%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;759&quot; height=&quot;194&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VMd4Q/btsLTrLxlD2/sm4WPf4SWWJ2kP5kroHKv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VMd4Q/btsLTrLxlD2/sm4WPf4SWWJ2kP5kroHKv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VMd4Q/btsLTrLxlD2/sm4WPf4SWWJ2kP5kroHKv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVMd4Q%2FbtsLTrLxlD2%2Fsm4WPf4SWWJ2kP5kroHKv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;755&quot; height=&quot;194&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;189&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sMTf3/btsLTunDRt2/X0BrG5KSnnQ6v14zBL404k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sMTf3/btsLTunDRt2/X0BrG5KSnnQ6v14zBL404k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sMTf3/btsLTunDRt2/X0BrG5KSnnQ6v14zBL404k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsMTf3%2FbtsLTunDRt2%2FX0BrG5KSnnQ6v14zBL404k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;753&quot; height=&quot;189&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;189&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dKOxak/btsLT3pUBv8/P3tWnoVeWlvFn0uTJ1OsYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dKOxak/btsLT3pUBv8/P3tWnoVeWlvFn0uTJ1OsYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dKOxak/btsLT3pUBv8/P3tWnoVeWlvFn0uTJ1OsYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdKOxak%2FbtsLT3pUBv8%2FP3tWnoVeWlvFn0uTJ1OsYk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;755&quot; height=&quot;191&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;191&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wswsd/btsLSLKcgfS/t9fVNhhfSW7hpz0R9mrss1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wswsd/btsLSLKcgfS/t9fVNhhfSW7hpz0R9mrss1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wswsd/btsLSLKcgfS/t9fVNhhfSW7hpz0R9mrss1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWswsd%2FbtsLSLKcgfS%2Ft9fVNhhfSW7hpz0R9mrss1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;753&quot; height=&quot;193&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;193&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bksMpN/btsLS3DRrfX/d43jeGuVw28kKixnT55Zm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bksMpN/btsLS3DRrfX/d43jeGuVw28kKixnT55Zm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bksMpN/btsLS3DRrfX/d43jeGuVw28kKixnT55Zm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbksMpN%2FbtsLS3DRrfX%2Fd43jeGuVw28kKixnT55Zm0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;755&quot; height=&quot;192&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;192&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>IT, 프로그램</category>
      <category>구글차트</category>
      <category>무료차트</category>
      <category>프로그램소스</category>
      <author>행복한 삶을 위하여</author>
      <guid isPermaLink="true">https://cosmos2024.tistory.com/9</guid>
      <comments>https://cosmos2024.tistory.com/9#entry9comment</comments>
      <pubDate>Tue, 21 Jan 2025 10:07:33 +0900</pubDate>
    </item>
    <item>
      <title>APM 웹서버 구축 - 6) SQL Server 연동 방법</title>
      <link>https://cosmos2024.tistory.com/8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 SQL Server 연동방법에 대해 살펴보고자 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 Apache와 PHP를 사용하여 웹 서버 시스템을 구성할 때에는 MariaDB를 사용하나 SQL Server로 구성된 다른 시스템과의 연동이 필요할 때는 아래와 같은 프로그램 설치와 설정이 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 드라이버별 PHP, OS 지원현황 확인&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/en-us/sql/connect/php/system-requirements-for-the-php-sql-&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.microsoft.com/en-us/sql/connect/php/system-requirements-for-the-php-sql-&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;driver?view=sql-server-2017 &lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. 설정순서&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(1)&amp;nbsp;드라이버를&amp;nbsp;다운로드합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;PHP7.2는&amp;nbsp;Microsoft&amp;nbsp;Drivers&amp;nbsp;5.6&amp;nbsp;for&amp;nbsp;PHP&amp;nbsp;for&amp;nbsp;SQL&amp;nbsp;Server&amp;nbsp;지원합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/sql/connect/php/download-drivers-php-sql-server?view=sql-server-2017&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.microsoft.com/ko-kr/sql/connect/php/download-drivers-php-sql-server?view=sql-server-2017&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(2)&amp;nbsp;압축을&amp;nbsp;푼&amp;nbsp;후,&amp;nbsp;php_sqlsrv_73_ts_x64.dll&amp;nbsp;파일을&amp;nbsp;C:\php7\ext에&amp;nbsp;복사합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(3)&amp;nbsp;php.ini에&amp;nbsp;아래&amp;nbsp;내용을&amp;nbsp;추가합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Dynamic&amp;nbsp;Extensions] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;extension=php_sqlsrv_73_ts_x64.dll &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&amp;nbsp;제일&amp;nbsp;아래에&amp;nbsp;추가&amp;nbsp;&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[MSSQL] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mssql.textlimit=2147483647 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mssql.textsize=2147483647 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(4)&amp;nbsp;ODBC&amp;nbsp;드라이버를&amp;nbsp;설치합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;sqlsrv&amp;nbsp;드라이버는&amp;nbsp;ODBC를&amp;nbsp;기반으로&amp;nbsp;최신&amp;nbsp;SQL&amp;nbsp;Server&amp;nbsp;릴리즈의&amp;nbsp;기능에&amp;nbsp;대한&amp;nbsp;엑세스를&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;제공합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;msodbcsql_17.3.1.1_x64.msi&amp;nbsp;을&amp;nbsp;다운받아서&amp;nbsp;설치합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7124016057410808&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 반응형] 최상단 고정 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. DB 연결용 PHP 프로그램&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;? &lt;br /&gt;try { &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$db_host = &quot;IP_ADDRESS, PORT NO&quot;;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$connectionOptions = array(&quot;Database&quot;=&amp;gt;&quot;DB명&quot;, &quot;UID&quot;=&amp;gt;&quot;ID&quot;, &quot;PWD&quot;=&amp;gt;&quot;Password&quot;, &quot;CharacterSet&quot;=&amp;gt;&quot;UTF-8&quot;);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$conn_erp = sqlsrv_connect($db_host, $connectionOptions);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if($conn_erp == false){&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; die(&quot;ERP DB연결에 실패했습니다!!&quot;); &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;br /&gt;}&amp;nbsp;&amp;nbsp; &lt;br /&gt;catch(Exception&amp;nbsp;$e){&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; echo(&quot;Error!&quot;);&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;?&amp;gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT, 프로그램</category>
      <category>apm연동</category>
      <category>MS-SQL</category>
      <category>SQL Server</category>
      <author>행복한 삶을 위하여</author>
      <guid isPermaLink="true">https://cosmos2024.tistory.com/8</guid>
      <comments>https://cosmos2024.tistory.com/8#entry8comment</comments>
      <pubDate>Thu, 26 Dec 2024 19:38:12 +0900</pubDate>
    </item>
    <item>
      <title>APM 웹서버 구축 - 5) SendMail 설치 및 설정</title>
      <link>https://cosmos2024.tistory.com/7</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 전자메일을 보내는데 사용되는 메일 전송 에이전트(MTA)인 SendMail의 설치 및 설정 방법에 대해서 알아 보겠습니다. SendMail은 윈도우즈 뿐만 아니라 유닉스, 리눅스 환경에서도 가장 일반적으로 사용되는 MTA 중 하나입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템에서 관리가 필요한 이벤트가 발생한다든지, 주기적으로 보고서를 보낸다든지, 비밀번호를 분실하여 요청할 때 등 이메일 서버와 연동한 이메일 전송은 다양한 경우에 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.&amp;nbsp;홈페이지에서&amp;nbsp;프로그램을&amp;nbsp;다운로드합니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;&lt;a href=&quot;https://www.glob.com.au/sendmail/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.glob.com.au/sendmail/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;fake&amp;nbsp;sendmail&amp;nbsp;for&amp;nbsp;windows &lt;br /&gt;using&amp;nbsp;fake&amp;nbsp;sendmail&amp;nbsp;generally&amp;nbsp;all&amp;nbsp;you&amp;nbsp;need&amp;nbsp;to&amp;nbsp;do&amp;nbsp;is&amp;nbsp;install&amp;nbsp;sendmail.exe&amp;nbsp;in&amp;nbsp;\usr\lib&amp;nbsp;,&amp;nbsp;and&amp;nbsp;existing&amp;nbsp;code&amp;nbsp;that&amp;nbsp;calls&amp;nbsp;/usr/lib/sendmail&amp;nbsp;will&amp;nbsp;work.&amp;nbsp;if&amp;nbsp;you're&amp;nbsp;coding&amp;nbsp;new&amp;nbsp;applications,&amp;nbsp;all&amp;nbsp;you&amp;nbsp;need&amp;nbsp;to&amp;nbsp;do&amp;nbsp;is&amp;nbsp;construct&amp;nbsp;your&amp;nbsp;email&amp;nbsp;message&amp;nbsp;with&amp;nbsp;complete&amp;nbsp;headers,&amp;nbsp;then&amp;nbsp;pipe&amp;nbsp;it&amp;nbsp;to&amp;nbsp;/usr/lib/sendmail&amp;nbsp;-t&amp;nbsp;for&amp;nbsp;examp... &lt;br /&gt;&lt;a href=&quot;http://www.glob.com.au&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;http://www.glob.com.au&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2.&amp;nbsp;프로그램&amp;nbsp;설치&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;c:/Sendmail에&amp;nbsp;압축파일을&amp;nbsp;풉니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7124016057410808&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 반응형] 최상단 고정 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;​3.&amp;nbsp;설정&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;1)&amp;nbsp;php.ini에&amp;nbsp;아래&amp;nbsp;내용&amp;nbsp;변경&amp;nbsp;후,&amp;nbsp;아파치서버를&amp;nbsp;재시작합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[mail&amp;nbsp;function] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sendmail_path = &quot;C:/Sendmail/sendmail.exe -t&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;2)&amp;nbsp;c:/Sendmail에서&amp;nbsp;sendmail.ini&amp;nbsp;파일에&amp;nbsp;아래&amp;nbsp;내용을&amp;nbsp;추가합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;smtp_server=&amp;nbsp;(메일서버&amp;nbsp;주소) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;smtp_port=&amp;nbsp;(메일서버&amp;nbsp;포트번호&amp;nbsp;default&amp;nbsp;25) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;auth_username=&amp;nbsp;(메일서버&amp;nbsp;접속&amp;nbsp;이메일) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;auth_password=&amp;nbsp;(비밀번호)&lt;/p&gt;</description>
      <category>IT, 프로그램</category>
      <category>apm설정</category>
      <category>sendmail</category>
      <category>메일서버</category>
      <author>행복한 삶을 위하여</author>
      <guid isPermaLink="true">https://cosmos2024.tistory.com/7</guid>
      <comments>https://cosmos2024.tistory.com/7#entry7comment</comments>
      <pubDate>Thu, 26 Dec 2024 11:39:04 +0900</pubDate>
    </item>
    <item>
      <title>APM 웹서버 구축 - 4) phpMyAdmin 설치 및 설정</title>
      <link>https://cosmos2024.tistory.com/6</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오늘은 mariaDB의 테이블 및 데이터를 쉽게 관리할 수 있는 툴인 phpMyAdmin에 대해서 알아 보겠습니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;phpMyAdmin은 PHP로 만들어진 오프소스 도구이며 &lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;웹 상에서 DB를 쉽게 관리할 수 있도록 만들어진 툴로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; DB, 테이블, 필드, 열의 작성, 수정, 삭제 및 SQL 상태 실행, 사용자 및 사용자 권한관리 등 다양한 기능을 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.&amp;nbsp;홈페이지에서&amp;nbsp;프로그램을&amp;nbsp;다운로드합니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;주소&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.phpmyadmin.net/downloads/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.phpmyadmin.net/downloads/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2.&amp;nbsp;d:/phpMyAdmin&amp;nbsp;폴더에&amp;nbsp;압축된&amp;nbsp;파일을&amp;nbsp;풉니다.&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;3.&amp;nbsp;phpMyAdmin&amp;nbsp;루트폴더에&amp;nbsp;있는&amp;nbsp;config.sample.inc.php&amp;nbsp;파일을&amp;nbsp;복사&amp;nbsp;및&amp;nbsp;붙여넣기한&amp;nbsp;후&amp;nbsp; &lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;파일명을&amp;nbsp;config.inc.php&amp;nbsp;로&amp;nbsp;변경&amp;nbsp;후,&amp;nbsp;내용을&amp;nbsp;아래와&amp;nbsp;같이&amp;nbsp;편집합니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$cfg['McryptDisableWarning']&amp;nbsp;=&amp;nbsp;true; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$cfg['PmaNoRelation_DisableWarning']&amp;nbsp;=&amp;nbsp;true; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$cfg['ExecTimeLimit']&amp;nbsp;=&amp;nbsp;60; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$cfg['CheckConfigurationPermissions']&amp;nbsp;=&amp;nbsp;false; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$cfg['blowfish_secret']&amp;nbsp;=&amp;nbsp;'12345678'; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$cfg['Servers'][$i]['auth_type']&amp;nbsp;=&amp;nbsp;'http'; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$cfg['Servers'][$i]['host']&amp;nbsp;=&amp;nbsp;'localhost'; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$cfg['Servers'][$i]['AllowNoPassword']&amp;nbsp;=&amp;nbsp;'false'; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;4.&amp;nbsp;c:/php7/php.ini&amp;nbsp;파일의&amp;nbsp;내용을&amp;nbsp;수정합니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;;extension=mbstring.dll&amp;nbsp;&amp;rarr;&amp;nbsp;extension=mbstring.dll&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7124016057410808&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 반응형] 최상단 고정 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5.&amp;nbsp;보안을&amp;nbsp;위하여&amp;nbsp;특정&amp;nbsp;IP에서만&amp;nbsp;접속&amp;nbsp;가능하도록&amp;nbsp;httpd.conf&amp;nbsp;파일의&amp;nbsp;내용을&amp;nbsp;수정합니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;phpMyAdmin &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Alias&amp;nbsp;/phpMyAdmin&amp;nbsp;&quot;d:/phpMyAdmin&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Directory&amp;nbsp;&quot;d:/phpMyAdmin&quot;&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Require&amp;nbsp;all&amp;nbsp;denied &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Require&amp;nbsp;ip&amp;nbsp;127.0.0.1 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Directory&amp;gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;6.&amp;nbsp;아파치서버를&amp;nbsp;재시작합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;7.&amp;nbsp;웹&amp;nbsp;접속이&amp;nbsp;되는지&amp;nbsp;확인합니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;웹브라우저에서&amp;nbsp;http://localhost/db_control&amp;nbsp;입력 &lt;br /&gt;&lt;br /&gt;&lt;b&gt;8.&amp;nbsp;오류&amp;nbsp;발생시&amp;nbsp;조치&amp;nbsp;방법&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;1)&amp;nbsp;웹브라우저에서&amp;nbsp;phpMyAdmin을&amp;nbsp;입력하여&amp;nbsp;접속시&amp;nbsp;화면&amp;nbsp;상단에&amp;nbsp;Index&amp;nbsp;of&amp;nbsp;phpMyAdmin&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;표시되고&amp;nbsp;아래에&amp;nbsp;파일&amp;nbsp;리스트가&amp;nbsp;표시될&amp;nbsp;경우 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;폴더&amp;nbsp;내&amp;nbsp;전체&amp;nbsp;파일을&amp;nbsp;삭제&amp;nbsp;후,&amp;nbsp;새로&amp;nbsp;압축을&amp;nbsp;푼&amp;nbsp;후,&amp;nbsp;다시&amp;nbsp;웹&amp;nbsp;브라우저에서&amp;nbsp;접속해&amp;nbsp;봅니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;2)&amp;nbsp;웹브라우저에서&amp;nbsp;phpMyAdmin을&amp;nbsp;실행하고&amp;nbsp;가져오기&amp;nbsp;탭에서&amp;nbsp;sql&amp;nbsp;파일을&amp;nbsp;가져와서&amp;nbsp;테이블&amp;nbsp;및&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;필드를&amp;nbsp;생성하고자&amp;nbsp;할&amp;nbsp;때&amp;nbsp;default&amp;nbsp;size가&amp;nbsp;2MB여서&amp;nbsp;2MB&amp;nbsp;보다&amp;nbsp;큰&amp;nbsp;파일을&amp;nbsp;선택하면&amp;nbsp;오류가&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;발생할&amp;nbsp;경우 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(1)&amp;nbsp;php.ini에서&amp;nbsp;upload_max_filesize&amp;nbsp;=&amp;nbsp;500M,&amp;nbsp;post_max_size&amp;nbsp;=&amp;nbsp;500M으로&amp;nbsp;변경합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(2)&amp;nbsp;아파치&amp;nbsp;재시작&amp;nbsp;후,&amp;nbsp;phpMyAdmin에서&amp;nbsp;재실행합니다.&lt;/p&gt;</description>
      <category>IT, 프로그램</category>
      <category>APM</category>
      <category>apm설정</category>
      <category>DB관리툴</category>
      <category>phpmyadmin</category>
      <author>행복한 삶을 위하여</author>
      <guid isPermaLink="true">https://cosmos2024.tistory.com/6</guid>
      <comments>https://cosmos2024.tistory.com/6#entry6comment</comments>
      <pubDate>Wed, 25 Dec 2024 23:29:52 +0900</pubDate>
    </item>
    <item>
      <title>APM 웹서버 구축 - 3) PHP 설치 및 설정</title>
      <link>https://cosmos2024.tistory.com/5</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 대표적인 서버 사이드 스크립트 언어인 PHP 설치 및 설정 방법에 대해 살펴 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PHP는 전 세계 수 많은 웹 시스템의 기반이 되는 언어로 배열이 연관배열이라 자료구조가 간편하고 기본적으로 내장된 웹 관련 함수들이 많아서 웹 페이지 제작시 생산성이 높아서 많은 사용자와 사용처를 보유하고 있습니다.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 아래 홈페이지에서 PHP 프로그램을 다운로드합니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;주소&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://windows.php.net/download/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://windows.php.net/download/&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;VC15&amp;nbsp;x64&amp;nbsp;Thread&amp;nbsp;Safe&amp;nbsp;버전&amp;nbsp;다운로드 &lt;br /&gt;&lt;br /&gt;&lt;b&gt;2.&amp;nbsp;PHP&amp;nbsp;관련&amp;nbsp;프로그램을&amp;nbsp;설치합니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;1)&amp;nbsp;압축&amp;nbsp;파일을&amp;nbsp;해제&amp;nbsp;후&amp;nbsp;C:\php7&amp;nbsp;폴더에&amp;nbsp;저장합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;2)&amp;nbsp;파일명을&amp;nbsp;변경합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;php.ini-production&amp;nbsp;&amp;rarr;&amp;nbsp;php.ini &lt;br /&gt;&amp;nbsp;&amp;nbsp;3)&amp;nbsp;php.ini&amp;nbsp;파일을&amp;nbsp;열어서&amp;nbsp;아래와&amp;nbsp;같이&amp;nbsp;편집합니다&amp;nbsp;(메모장을&amp;nbsp;관리자&amp;nbsp;권한으로&amp;nbsp;실행) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;;extension_dir&amp;nbsp;=&amp;nbsp;&quot;./&quot;&amp;nbsp;&amp;rarr;&amp;nbsp;extension_dir&amp;nbsp;=&amp;nbsp;&quot;c:/php7/ext&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;phpmyadmin의&amp;nbsp;'가져오기'&amp;nbsp;파일&amp;nbsp;사이즈&amp;nbsp;크기&amp;nbsp;:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;post_max_size&amp;nbsp;=&amp;nbsp;500M &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;upload_max_filesize&amp;nbsp;=&amp;nbsp;500M &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;4)&amp;nbsp;Session&amp;nbsp;저장&amp;nbsp;폴더를&amp;nbsp;설정합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;session.save_path&amp;nbsp;=&amp;nbsp;&quot;D:/Session&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7124016057410808&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 반응형] 최상단 고정 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3.&amp;nbsp;Apache와&amp;nbsp;PHP&amp;nbsp;연동&amp;nbsp;부분을&amp;nbsp;설정합니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;1)&amp;nbsp;c:/Apache24/conf/httpd.conf&amp;nbsp;파일을&amp;nbsp;열어서&amp;nbsp;아래와&amp;nbsp;같이&amp;nbsp;편집합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(1)&amp;nbsp;&amp;lt;IfModule&amp;nbsp;dir_module&amp;gt;의&amp;nbsp;DirectoryIndex&amp;nbsp;에&amp;nbsp;index.php을&amp;nbsp;index.html&amp;nbsp;앞에&amp;nbsp;넣습니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(2)&amp;nbsp;파일의&amp;nbsp;맨&amp;nbsp;밑에&amp;nbsp;아래의&amp;nbsp;내용을&amp;nbsp;추가합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PHPIniDir&amp;nbsp;&quot;c:/php7&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LoadModule&amp;nbsp;php7_module&amp;nbsp;&quot;c:/php7/php7apache2_4.dll&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddType&amp;nbsp;application/x-httpd-php&amp;nbsp;.html&amp;nbsp;.php &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddHandler&amp;nbsp;application/x-httpd-php&amp;nbsp;.php &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;2)&amp;nbsp;아파치&amp;nbsp;서비스를&amp;nbsp;재시작합니다&amp;nbsp;(Win&amp;nbsp;+&amp;nbsp;X&amp;nbsp;&amp;rarr;&amp;nbsp;명령&amp;nbsp;프롬프트(관리자&amp;nbsp;모드)) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;httpd&amp;nbsp;-k&amp;nbsp;restart &lt;br /&gt;&lt;br /&gt;&lt;b&gt;4.&amp;nbsp;웹&amp;nbsp;브라우저를&amp;nbsp;열어서&amp;nbsp;접속&amp;nbsp;가능&amp;nbsp;여부를&amp;nbsp;확인합니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp;-&amp;nbsp;웹브라우저에서&amp;nbsp;http://localhost/phpinfo.php&amp;nbsp;접속 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;?&amp;nbsp;phpinfo();&amp;nbsp;?&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;rarr;&amp;nbsp;웹브라우저에&amp;nbsp;아무&amp;nbsp;것도&amp;nbsp;표시되지&amp;nbsp;않을&amp;nbsp;때에는 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;php.ini&amp;nbsp;파일에서&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;short_open_tag&amp;nbsp;=&amp;nbsp;Off&amp;nbsp;&amp;rarr;&amp;nbsp;short_open_tag&amp;nbsp;=&amp;nbsp;On&amp;nbsp;으로&amp;nbsp;수정&amp;nbsp;후&amp;nbsp;아파치서버를&amp;nbsp;재시작합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(짧은&amp;nbsp;태그(&amp;lt;?&amp;nbsp;...&amp;nbsp;?&amp;gt;)를&amp;nbsp;허용하지&amp;nbsp;않는&amp;nbsp;것이&amp;nbsp;PHP의&amp;nbsp;기본&amp;nbsp;설정임) &lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. 오류 발생시 해결방법&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;1)&amp;nbsp;Undefined&amp;nbsp;index &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;php.ini&amp;nbsp;파일에서&amp;nbsp;error_reporting&amp;nbsp;=&amp;nbsp;E_ALL&amp;nbsp;&amp;amp;&amp;nbsp;~E_DEPRECATED&amp;nbsp;&amp;amp;&amp;nbsp;~E_STRICT &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;rarr;&amp;nbsp;error_reporting&amp;nbsp;=&amp;nbsp;E_ALL&amp;nbsp;&amp;amp;&amp;nbsp;~E_DEPRECATED&amp;nbsp;&amp;amp;&amp;nbsp;~E_STRICT&amp;nbsp;&amp;amp;&amp;nbsp;~E_NOTICE&amp;nbsp;수정&amp;nbsp;후&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;아파치서버를&amp;nbsp;재시작합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;2)&amp;nbsp;openssl_encrypt()&amp;nbsp;함수에&amp;nbsp;오류가&amp;nbsp;날&amp;nbsp;때 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;php.ini&amp;nbsp;파일에서&amp;nbsp;;extension=openssl에서&amp;nbsp;세미콜론&amp;nbsp;삭제&amp;nbsp;후,&amp;nbsp;아파치&amp;nbsp;서버를&amp;nbsp;재시작합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;3)&amp;nbsp;Fatal&amp;nbsp;error:&amp;nbsp;Call&amp;nbsp;to&amp;nbsp;undefined&amp;nbsp;function&amp;nbsp;mb_strlen()&amp;nbsp;오류 &lt;br /&gt;&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;재시작합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;4)&amp;nbsp;현재시간을&amp;nbsp;구했을&amp;nbsp;때(date(&quot;Y-m-d&amp;nbsp;H:i:s&quot;);)&amp;nbsp;&amp;nbsp;9시간&amp;nbsp;늦은&amp;nbsp;결과가&amp;nbsp;나오는&amp;nbsp;경우&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;php.ini에&amp;nbsp;date.timezone&amp;nbsp;=Asia/Seoul로&amp;nbsp;설정합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;5)&amp;nbsp;Call&amp;nbsp;to&amp;nbsp;undefined&amp;nbsp;function&amp;nbsp;curl_init()&amp;nbsp;error&amp;nbsp;발생시 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(1)&amp;nbsp;php.ini의&amp;nbsp;;extension=curl에서&amp;nbsp;;&amp;nbsp;삭제합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(2)&amp;nbsp;libeay32.dll,&amp;nbsp;ssleay32.dll,&amp;nbsp;libssh2.dll&amp;nbsp;파일&amp;nbsp;C:\Apache24\bin&amp;nbsp;폴더에&amp;nbsp;Copy합니다.&lt;/p&gt;</description>
      <category>IT, 프로그램</category>
      <category>APM</category>
      <category>APM설치</category>
      <category>php</category>
      <category>php설정</category>
      <author>행복한 삶을 위하여</author>
      <guid isPermaLink="true">https://cosmos2024.tistory.com/5</guid>
      <comments>https://cosmos2024.tistory.com/5#entry5comment</comments>
      <pubDate>Wed, 25 Dec 2024 09:24:25 +0900</pubDate>
    </item>
    <item>
      <title>APM 웹서버 구축 - 2) MariaDB 설치 및 설정</title>
      <link>https://cosmos2024.tistory.com/4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 MariaDB 설치 및 설정방법에 대해서 살펴보고자 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MariaDB는 오픈 소스의 관계형 데이터베이스 관리시스템으로 MySQL과 동일한 소스 코드를 기반으로 하며 GPL v2 라이선스를 따릅니다. 오라클 MySQL의 라이선스 정책에 반발하여 만들어졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.&amp;nbsp;MariaDB&amp;nbsp;프로그램을&amp;nbsp;홈페이지에서&amp;nbsp;다운로드합니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;1)&amp;nbsp;&lt;a href=&quot;https://downloads.mariadb.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://downloads.mariadb.org/&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;2)&amp;nbsp;프로그램을&amp;nbsp;설치할&amp;nbsp;서버환경에&amp;nbsp;맞게&amp;nbsp;32bit,&amp;nbsp;64bit를&amp;nbsp;선택합니다. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;2.&amp;nbsp;다운받은&amp;nbsp;프로그램을&amp;nbsp;설치합니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;1)&amp;nbsp;다운로드&amp;nbsp;받은&amp;nbsp;파일을&amp;nbsp;클릭 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;라이선스&amp;nbsp;동의에&amp;nbsp;체크 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;2)&amp;nbsp;설치&amp;nbsp;위치를&amp;nbsp;지정합니다&amp;nbsp;(보통&amp;nbsp;C&amp;nbsp;드라이버) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;3)&amp;nbsp;root&amp;nbsp;계정의&amp;nbsp;비밀번호를&amp;nbsp;입력합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;4)&amp;nbsp;'다른&amp;nbsp;컴퓨터(remote&amp;nbsp;machines)에서는&amp;nbsp;root&amp;nbsp;계정으로&amp;nbsp;접속&amp;nbsp;가능&amp;nbsp;여부'는&amp;nbsp;체크하지&amp;nbsp;않습니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(root&amp;nbsp;계정은&amp;nbsp;로컬에서만&amp;nbsp;접속&amp;nbsp;가능) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;5)&amp;nbsp;'Use&amp;nbsp;UTF8&amp;nbsp;as&amp;nbsp;default&amp;nbsp;server's&amp;nbsp;character&amp;nbsp;set'을&amp;nbsp;체크해서&amp;nbsp;데이터베이스의&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;기본&amp;nbsp;캐릭터&amp;nbsp;셋을&amp;nbsp;UTF8로&amp;nbsp;지정합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XFzSO/btsLusCQxmT/Dr6NifYUcb3uz5uq1gcaI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XFzSO/btsLusCQxmT/Dr6NifYUcb3uz5uq1gcaI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XFzSO/btsLusCQxmT/Dr6NifYUcb3uz5uq1gcaI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXFzSO%2FbtsLusCQxmT%2FDr6NifYUcb3uz5uq1gcaI0%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;321&quot; height=&quot;254&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;254&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;6)&amp;nbsp;'Install&amp;nbsp;as&amp;nbsp;service'를&amp;nbsp;체크합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;윈도우즈&amp;nbsp;서비스로&amp;nbsp;동작하며&amp;nbsp;서비스&amp;nbsp;이름은&amp;nbsp;기본값인&amp;nbsp;&quot;MySQL&quot;을&amp;nbsp;그대로&amp;nbsp;사용합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;7)&amp;nbsp;'Enable&amp;nbsp;networking'을&amp;nbsp;체크합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;365&quot; data-origin-height=&quot;289&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wvT01/btsLsM3qJgV/2WP1pjkroh6CmoSxH2NX9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wvT01/btsLsM3qJgV/2WP1pjkroh6CmoSxH2NX9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wvT01/btsLsM3qJgV/2WP1pjkroh6CmoSxH2NX9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwvT01%2FbtsLsM3qJgV%2F2WP1pjkroh6CmoSxH2NX9k%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;365&quot; height=&quot;289&quot; data-origin-width=&quot;365&quot; data-origin-height=&quot;289&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;8)&amp;nbsp;'MariaDB&amp;nbsp;사용&amp;nbsp;정보를&amp;nbsp;제조사로&amp;nbsp;전송&amp;nbsp;여부'는&amp;nbsp;선택하지&amp;nbsp;않습니다&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;체크힐&amp;nbsp;경우&amp;nbsp;익명의&amp;nbsp;통계정보를&amp;nbsp;전송합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;297&quot; data-origin-height=&quot;234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cE8Rco/btsLtugT0oQ/yC8AuHjSLA0VzPQXAZlmW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cE8Rco/btsLtugT0oQ/yC8AuHjSLA0VzPQXAZlmW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cE8Rco/btsLtugT0oQ/yC8AuHjSLA0VzPQXAZlmW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcE8Rco%2FbtsLtugT0oQ%2FyC8AuHjSLA0VzPQXAZlmW0%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;297&quot; height=&quot;234&quot; data-origin-width=&quot;297&quot; data-origin-height=&quot;234&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;9)&amp;nbsp;설치할&amp;nbsp;준비가&amp;nbsp;완료된&amp;nbsp;경우&amp;nbsp;'Install'&amp;nbsp;버튼을&amp;nbsp;클릭합니다. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;​3.&amp;nbsp;윈도우즈&amp;nbsp;시작버튼을&amp;nbsp;눌러&amp;nbsp;설치된&amp;nbsp;MariaDB&amp;nbsp;프로그램을&amp;nbsp;찾아서&amp;nbsp;MySQL&amp;nbsp;Client를&amp;nbsp;실행합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;353&quot; data-origin-height=&quot;105&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drras5/btsLtKqsrus/wotNPbISQEaIGBUMkn4V1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drras5/btsLtKqsrus/wotNPbISQEaIGBUMkn4V1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drras5/btsLtKqsrus/wotNPbISQEaIGBUMkn4V1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdrras5%2FbtsLtKqsrus%2FwotNPbISQEaIGBUMkn4V1k%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;353&quot; height=&quot;105&quot; data-origin-width=&quot;353&quot; data-origin-height=&quot;105&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;4. 기본 설치된 데이터베이스를 확인합니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;root&amp;nbsp;비밀번호를&amp;nbsp;입력하고,&amp;nbsp;&quot;show&amp;nbsp;databases;&quot;&amp;nbsp;입력합니다. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;5.&amp;nbsp;php.ini&amp;nbsp;파일을&amp;nbsp;열어서&amp;nbsp;아래&amp;nbsp;내용을&amp;nbsp;수정&amp;nbsp;후&amp;nbsp;아파치서버를&amp;nbsp;재시작합니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;1)&amp;nbsp;;extension=mysql,&amp;nbsp;;extension=pdo_mysql에서&amp;nbsp;앞쪽의&amp;nbsp;세미클론&amp;nbsp;삭제 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;2)&amp;nbsp;명령&amp;nbsp;프롬프트(관리자&amp;nbsp;모드)에서&amp;nbsp;httpd.exe&amp;nbsp;-k&amp;nbsp;restart&amp;nbsp;입력 &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;*&amp;nbsp;MySQL&amp;nbsp;윈도우&amp;nbsp;서비스&amp;nbsp;중지하기 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;명령&amp;nbsp;프롬프트(관리자&amp;nbsp;모드)에서&amp;nbsp;net&amp;nbsp;stop&amp;nbsp;mysql&amp;nbsp;입력 &lt;br /&gt;&lt;br /&gt;&lt;b&gt;6.&amp;nbsp;재시작&amp;nbsp;:&amp;nbsp;제어판&amp;nbsp;&amp;rarr;&amp;nbsp;관리도구&amp;nbsp;&amp;rarr;&amp;nbsp;서비스&amp;nbsp;&amp;rarr;&amp;nbsp;MySQL에서&amp;nbsp;마우스&amp;nbsp;오른쪽&amp;nbsp;버튼&amp;nbsp;Click하여&amp;nbsp;다시&amp;nbsp;시작 &lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;합니다.&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;7.&amp;nbsp;제가&amp;nbsp;겪었던&amp;nbsp;문제&amp;nbsp;발생시&amp;nbsp;해결&amp;nbsp;방법은&amp;nbsp;아래와&amp;nbsp;같습니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;1)&amp;nbsp;Table&amp;nbsp;생성시&amp;nbsp;오류가&amp;nbsp;발생할&amp;nbsp;경우 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MySQL&amp;nbsp;메시지:&amp;nbsp;문서&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#1118&amp;nbsp;-&amp;nbsp;Row&amp;nbsp;size&amp;nbsp;too&amp;nbsp;large&amp;nbsp;(&amp;gt;&amp;nbsp;8126).&amp;nbsp;Changing&amp;nbsp;some&amp;nbsp;columns&amp;nbsp;to&amp;nbsp;TEXT&amp;nbsp;or&amp;nbsp;BLOB&amp;nbsp;may&amp;nbsp;help.&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;In&amp;nbsp;current&amp;nbsp;row&amp;nbsp;format,&amp;nbsp;BLOB&amp;nbsp;prefix&amp;nbsp;of&amp;nbsp;0&amp;nbsp;bytes&amp;nbsp;is&amp;nbsp;stored&amp;nbsp;inline. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;rarr;&amp;nbsp;c:/Program&amp;nbsp;Files/MariaDB&amp;nbsp;10.3/data/my.ini&amp;nbsp;파일에&amp;nbsp;아래&amp;nbsp;내용을&amp;nbsp;추가합니다. &lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[mysqld] &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;innodb_log_file_size&amp;nbsp;=&amp;nbsp;512M &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;innodb_strict_mode&amp;nbsp;=&amp;nbsp;0&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;2)&amp;nbsp;MariDB&amp;nbsp;10.3.20으로&amp;nbsp;업그레이드&amp;nbsp;후&amp;nbsp;Insert&amp;nbsp;문에서&amp;nbsp;오류가&amp;nbsp;발생할&amp;nbsp;경우 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;&amp;nbsp;DB&amp;nbsp;Table의&amp;nbsp;칼럼을&amp;nbsp;Integer&amp;nbsp;Type으로&amp;nbsp;만든&amp;nbsp;상태에서&amp;nbsp;데이터&amp;nbsp;저장&amp;nbsp;Insert문에&amp;nbsp;데이터가&amp;nbsp;없는&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;칼럼을&amp;nbsp;비워&amp;nbsp;놓을&amp;nbsp;경우&amp;nbsp;오류가&amp;nbsp;발생하여&amp;nbsp;SQL문에&amp;nbsp;문자열&amp;nbsp;형태('')&amp;nbsp;저장시&amp;nbsp;MariaDB&amp;nbsp;10.3.8에서 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;는&amp;nbsp;Warning만&amp;nbsp;발생했으나&amp;nbsp;10.3.20에서는&amp;nbsp;오류가&amp;nbsp;발생했습니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(데이터가&amp;nbsp;없는&amp;nbsp;상태에서&amp;nbsp;등록시&amp;nbsp;오류가&amp;nbsp;발생하여&amp;nbsp;''로&amp;nbsp;SQL문을&amp;nbsp;만들어&amp;nbsp;저장함) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;rarr;&amp;nbsp;c:/Program&amp;nbsp;Files/MariaDB&amp;nbsp;10.3/data/my.ini&amp;nbsp;파일에&amp;nbsp;아래&amp;nbsp;내용을&amp;nbsp;추가합니다. &lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[mysqld] &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT, 프로그램</category>
      <author>행복한 삶을 위하여</author>
      <guid isPermaLink="true">https://cosmos2024.tistory.com/4</guid>
      <comments>https://cosmos2024.tistory.com/4#entry4comment</comments>
      <pubDate>Tue, 24 Dec 2024 18:22:55 +0900</pubDate>
    </item>
    <item>
      <title>APM 웹서버 구축 - 1) Apache 설치 및 설정</title>
      <link>https://cosmos2024.tistory.com/3</link>
      <description>&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt; APM 즉 Apache, PHP, Maria DB를 사용하여 웹서버를 구축한 경험을 차례로 공유하고자 합니다. &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 웹서버 프로그램인 Apache 프로그램의 설치 및 설정방법에 대해서 살펴보고자 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Apache 프로그램은 아파치 소프트웨어 재단에서 관리하는 오픈 소스, 크로스 플랫폼으로 전세계에서 가자 인기있는 웹서버입니다 (2024년 기준 39.74%, 출처 hostadvice)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 아래 주소에서 아파치 최신버전을 다운받습니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;주소&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.apachelounge.com/download/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.apachelounge.com/download/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. C++ Redistributable Visual Studio 2015가 먼저 설치되어 있어야 하는데&amp;nbsp; &lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;이것이&amp;nbsp;없으면&amp;nbsp;VCRUNTIME140.dll&amp;nbsp;오류&amp;nbsp;발생할&amp;nbsp;수&amp;nbsp;있으므로&amp;nbsp;아래&amp;nbsp;주소에서&amp;nbsp;다운을&amp;nbsp;받습니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;주소&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.microsoft.com/ko-kr/download/details.aspx?id=53840&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.microsoft.com/ko-kr/download/details.aspx?id=53840&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(설치하고자&amp;nbsp;하는&amp;nbsp;컴퓨터의&amp;nbsp;환경에&amp;nbsp;따라서&amp;nbsp;32bit,&amp;nbsp;64bit&amp;nbsp;가려서&amp;nbsp;다운받습니다.) &lt;br /&gt;&lt;br /&gt;&lt;b&gt;​3. 다운받은 Apache 압축파일을 열어서 Apache24 폴더만 원하는 곳에 풀어 줍니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;예&amp;nbsp;:&amp;nbsp;&amp;nbsp;C:/Apache24 &lt;br /&gt;&lt;br /&gt;&lt;b&gt;​4. httpd.conf 파일을 열어서 아래 내용대로 수정합니다 (C:/Apache24/conf 에 위치)&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;디렉토리&amp;nbsp;기호인&amp;nbsp;\&amp;nbsp;는&amp;nbsp;가급적&amp;nbsp;/&amp;nbsp;로&amp;nbsp;변경하는&amp;nbsp;것이&amp;nbsp;좋습니다. &lt;br /&gt;&amp;nbsp; &amp;nbsp;1) ServerRoot 경로 변경&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Define&amp;nbsp;SRVROOT&amp;nbsp;&quot;c:/Apache24&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ServerRoot&amp;nbsp;&quot;${SRVROOT}&quot; &lt;br /&gt;&amp;nbsp; &amp;nbsp;2) 포트 변경 (Option) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Listen&amp;nbsp;80 &lt;br /&gt;&amp;nbsp; &amp;nbsp;3) 웹문서 저장위치 변경 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- DocumentRoot &quot;d:/WWW&quot; &lt;br /&gt;&amp;nbsp; &amp;nbsp;4) ServerName 변경 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- #ServerName&amp;nbsp;&lt;a href=&quot;http://www.example.com:80&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;http://www.example.com:80&lt;/a&gt;&amp;nbsp;&amp;rarr;&amp;nbsp;ServerName&amp;nbsp;127.0.0.1:80​&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7124016057410808&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 반응형] 최상단 고정 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;​5. 아파치 서비스를 윈도우 서비스에 등록합니다.&lt;/b&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; 1) Path를 등록합니다 (Win키 + R을 누르고 control 입력) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;시스템&amp;nbsp;&amp;rarr;&amp;nbsp;고급&amp;nbsp;시스템&amp;nbsp;설정&amp;nbsp;&amp;rarr;&amp;nbsp;고급&amp;nbsp;탭의&amp;nbsp;&quot;환경&amp;nbsp;변수(N)&quot;&amp;nbsp;단추&amp;nbsp;클릭&amp;nbsp;&amp;rarr;&amp;nbsp;시스템&amp;nbsp;변수(S)&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;rarr;&amp;nbsp;&quot;새로&amp;nbsp;만들기(N)&quot; &lt;br /&gt;&amp;nbsp; &amp;nbsp; 2) 명령 프롬프트를 관리자 권한으로 실행합니다 (Win키 + X 버튼을 눌러서 선택) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;PowerShell&amp;nbsp;로는&amp;nbsp;진행이&amp;nbsp;안될&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;gt;&amp;nbsp;설정&amp;nbsp;&amp;rarr;&amp;nbsp;개인설정&amp;nbsp;&amp;rarr;&amp;nbsp;작업표시줄로&amp;nbsp;진입해서&amp;nbsp;시작&amp;nbsp;단추를&amp;nbsp;마우스&amp;nbsp;오른쪽&amp;nbsp;단추로&amp;nbsp;클릭 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;명령&amp;nbsp;프롬프트&amp;nbsp;창에서&amp;nbsp;c:\Apache24\bin으로&amp;nbsp;이동 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;①&amp;nbsp;아파치&amp;nbsp;서비스&amp;nbsp;설치&amp;nbsp;:&amp;nbsp;httpd&amp;nbsp;-k&amp;nbsp;install &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;rarr;&amp;nbsp;방화벽&amp;nbsp;해제&amp;nbsp;관련&amp;nbsp;메시지가&amp;nbsp;뜨면&amp;nbsp;액세스&amp;nbsp;허용(A)&amp;nbsp;버튼을&amp;nbsp;눌러서&amp;nbsp;계속&amp;nbsp;진행합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;②&amp;nbsp;아파치&amp;nbsp;서비스&amp;nbsp;시작&amp;nbsp;:&amp;nbsp;httpd&amp;nbsp;-k&amp;nbsp;start &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;③&amp;nbsp;아파치&amp;nbsp;중지&amp;nbsp;:&amp;nbsp;httpd&amp;nbsp;-k&amp;nbsp;stop &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;④&amp;nbsp;아파치&amp;nbsp;서비스&amp;nbsp;재시작&amp;nbsp;:&amp;nbsp;httpd.exe&amp;nbsp;-k&amp;nbsp;restart &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;⑤&amp;nbsp;아파치&amp;nbsp;서비스&amp;nbsp;제거&amp;nbsp;:&amp;nbsp;httpd.exe&amp;nbsp;-k&amp;nbsp;uninstall &lt;br /&gt;&lt;b&gt;​ &lt;/b&gt;&lt;br /&gt;&lt;b&gt;6. 웹브라우저에서 접속이 가능한지 확인해 봅니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;http://127.0.0.1&lt;/p&gt;</description>
      <category>IT, 프로그램</category>
      <category>apache</category>
      <category>apm설정</category>
      <category>웹서버</category>
      <category>웹서버설정</category>
      <author>행복한 삶을 위하여</author>
      <guid isPermaLink="true">https://cosmos2024.tistory.com/3</guid>
      <comments>https://cosmos2024.tistory.com/3#entry3comment</comments>
      <pubDate>Tue, 24 Dec 2024 11:23:36 +0900</pubDate>
    </item>
    <item>
      <title>PHP) 다중 쿼리 전송 (mysqli_multi_query())</title>
      <link>https://cosmos2024.tistory.com/2</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 PHP에서 다중 쿼리를 전송하는 방법에 대해서 살펴보고자 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB에 다중 쿼리를 전송하고자 할 때 mysqli_multi_query를 사용하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 번에 처리되어 클라이언트와 서버간의 Roundtrip을 감소시켜 주어서 효율적입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼리문은 세미콜론으로 구분하여 구성하면 됩니다.&lt;br /&gt;(Result set을 반환하는 문과 그렇지 않은 문을 하나의 쿼리문 내에 둘 수 있습니다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;쿼리를 실행 후, 실행된 문에 의해 반환되는 모든 Result set을 가져오도록 설정해 주면 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;●&amp;nbsp;예제&lt;/b&gt; &lt;br /&gt;$conn&amp;nbsp;=&amp;nbsp;mysqli_connect(&quot;localhost&quot;,&amp;nbsp;&quot;id&quot;,&amp;nbsp;&quot;password&quot;,&amp;nbsp;&quot;db&quot;) &lt;br /&gt;&lt;br /&gt;//&amp;nbsp;다중&amp;nbsp;쿼리문 &lt;br /&gt;$query&amp;nbsp;=&amp;nbsp;&quot;select&amp;nbsp;count(*)&amp;nbsp;as&amp;nbsp;qty_data&amp;nbsp;from&amp;nbsp;test;&amp;nbsp;&quot;; &lt;br /&gt;$query.=&amp;nbsp;&quot;insert&amp;nbsp;into&amp;nbsp;test(num)&amp;nbsp;values&amp;nbsp;(1);&amp;nbsp;&quot;; &lt;br /&gt;$query.=&amp;nbsp;&quot;select&amp;nbsp;count(*)&amp;nbsp;as&amp;nbsp;qty_data&amp;nbsp;from&amp;nbsp;test;&amp;nbsp;&quot;; &lt;br /&gt;&lt;br /&gt;if(!$result&amp;nbsp;=&amp;nbsp;mysqli_multi_query($conn,&amp;nbsp;$query)){ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo(&quot;다중쿼리&amp;nbsp;실패&amp;nbsp;:&amp;nbsp;&quot;&amp;nbsp;.&amp;nbsp;$mysqli_errno($conn)&amp;nbsp;.&amp;nbsp;&quot;&amp;nbsp;-&amp;nbsp;&quot;&amp;nbsp;.&amp;nbsp;$mysqli_err($conn)); &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;do&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if($result2&amp;nbsp;=&amp;nbsp;mysqli_store_result($conn)){&amp;nbsp;//&amp;nbsp;마지막&amp;nbsp;쿼리의&amp;nbsp;result&amp;nbsp;set을&amp;nbsp;전송함&amp;nbsp;(오류일&amp;nbsp;경우&amp;nbsp;false) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var_dump(mysqli_fetch_all($result2,&amp;nbsp;MYSQLI_ASSOC)); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo(&quot;&amp;lt;br&amp;gt;&quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mysqli_free_result($result2); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;}&amp;nbsp;while&amp;nbsp;(mysqli_more_results($conn)&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;mysqli_next_result($conn)); &lt;br /&gt;​ &lt;br /&gt;&lt;b&gt;● 실행결과&lt;/b&gt; &lt;br /&gt;array(1)&amp;nbsp;{&amp;nbsp;[0]=&amp;gt;&amp;nbsp;array(1)&amp;nbsp;{&amp;nbsp;[&quot;qty_data&quot;]=&amp;gt;&amp;nbsp;string(2)&amp;nbsp;&quot;1&quot;&amp;nbsp;}&amp;nbsp;} &lt;br /&gt;array(1)&amp;nbsp;{&amp;nbsp;[0]=&amp;gt;&amp;nbsp;array(1)&amp;nbsp;{&amp;nbsp;[&quot;qty_data&quot;]=&amp;gt;&amp;nbsp;string(2)&amp;nbsp;&quot;2&quot;&amp;nbsp;}&amp;nbsp;}&lt;/p&gt;</description>
      <category>IT, 프로그램</category>
      <author>행복한 삶을 위하여</author>
      <guid isPermaLink="true">https://cosmos2024.tistory.com/2</guid>
      <comments>https://cosmos2024.tistory.com/2#entry2comment</comments>
      <pubDate>Mon, 23 Dec 2024 16:23:20 +0900</pubDate>
    </item>
    <item>
      <title>보안) Apache 웹서버 _ 불필요한 Method 제거, 웹서버 정보 변경</title>
      <link>https://cosmos2024.tistory.com/1</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 웹서버 보안 설정과 관련하여 살펴보고자 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹서버에&amp;nbsp;불필요한&amp;nbsp;메소드가&amp;nbsp;허용되어&amp;nbsp;있을&amp;nbsp;경우 &lt;br /&gt;TRACE / HTTP/1.1 로 요청 시 요청헤더의 값이 응답 값에 그대로 노출되는 문제점이 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;curl&amp;nbsp;-X&amp;nbsp;trace&amp;nbsp;http://127.0.0.1/&amp;nbsp;-vv&lt;/span&gt;&amp;nbsp;명령을&amp;nbsp;실행하면&amp;nbsp;아래와&amp;nbsp;같이&amp;nbsp; &lt;br /&gt;웹서버의&amp;nbsp;버전&amp;nbsp;등&amp;nbsp;중요한&amp;nbsp;정보가&amp;nbsp;노출되어&amp;nbsp;해킹의&amp;nbsp;빌미를&amp;nbsp;제공할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;675&quot; data-origin-height=&quot;559&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nZvsx/btsLuqrm0bW/01WYrlO20IuUk4AlvyHOL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nZvsx/btsLuqrm0bW/01WYrlO20IuUk4AlvyHOL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nZvsx/btsLuqrm0bW/01WYrlO20IuUk4AlvyHOL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnZvsx%2FbtsLuqrm0bW%2F01WYrlO20IuUk4AlvyHOL0%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;675&quot; height=&quot;559&quot; data-origin-width=&quot;675&quot; data-origin-height=&quot;559&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이를&amp;nbsp;방지하기&amp;nbsp;위해&amp;nbsp;httpd.conf&amp;nbsp;파일에&amp;nbsp;아래&amp;nbsp;내용을&amp;nbsp;추가했습니다. &lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;lt;Location&amp;nbsp;/&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;LimitExcept&amp;nbsp;GET&amp;nbsp;POST&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Order&amp;nbsp;deny,allow &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Deny&amp;nbsp;from&amp;nbsp;all &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/LimitExcept&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;lt;/Location&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;TraceEnable&amp;nbsp;off&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;내용 추가 후, 웹서버를 재가동시키니 아래와 같은 메시지 창이 뜨면서 정상 가동이 되지 않는군요.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJv7yk/btsLtaQlFys/nS05lwRUYL7HiIb4Vj3LyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJv7yk/btsLtaQlFys/nS05lwRUYL7HiIb4Vj3LyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJv7yk/btsLtaQlFys/nS05lwRUYL7HiIb4Vj3LyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJv7yk%2FbtsLtaQlFys%2FnS05lwRUYL7HiIb4Vj3LyK%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;510&quot; height=&quot;241&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;241&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;이벤트 뷰어를 열어 응용 프로그램 오류 내용을 확인해 보니 &lt;br /&gt;추가한 &amp;lt;Location&amp;gt; 안의 Order deny,allow 부분을 잘 못 입력했다는 것입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwfZVC/btsLssDTUuQ/o4cJT5ivyZoLy7OohQeZp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwfZVC/btsLssDTUuQ/o4cJT5ivyZoLy7OohQeZp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwfZVC/btsLssDTUuQ/o4cJT5ivyZoLy7OohQeZp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdwfZVC%2FbtsLssDTUuQ%2Fo4cJT5ivyZoLy7OohQeZp0%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;773&quot; height=&quot;280&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그래서&amp;nbsp;다른&amp;nbsp;오류&amp;nbsp;메시지를&amp;nbsp;보니 &lt;br /&gt;httpd.conf 파일에서 관련 모듈을 활성화시키지 않았다는 메시지가 보이네요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8JBHI/btsLsr56gbW/jZaEEQ25LUBSMOjZW1cs71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8JBHI/btsLsr56gbW/jZaEEQ25LUBSMOjZW1cs71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8JBHI/btsLsr56gbW/jZaEEQ25LUBSMOjZW1cs71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8JBHI%2FbtsLsr56gbW%2FjZaEEQ25LUBSMOjZW1cs71%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;773&quot; height=&quot;288&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;httpd.conf&amp;nbsp;파일&amp;nbsp;안의 &lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;LoadModule&amp;nbsp;access_compat_module&amp;nbsp;modules/mod_access_compat.so&lt;/span&gt;&amp;nbsp;을 &lt;br /&gt;활성화시킨 후, 웹서버를 재가동하니 정상적으로 작동하네요.&lt;br /&gt;&lt;br /&gt;다시&amp;nbsp;명령&amp;nbsp;프롬프트&amp;nbsp;창에서&amp;nbsp;curl&amp;nbsp;-X&amp;nbsp;trace&amp;nbsp;http://127.0.0.1/&amp;nbsp;-vv&amp;nbsp;명령&amp;nbsp;실행하니&amp;nbsp; &lt;br /&gt;아래와 같이 메시지가 표시되는군요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;543&quot; data-origin-height=&quot;399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvu6hl/btsLqUA5d8g/cO3kkKkzK7107Inj4NzO71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvu6hl/btsLqUA5d8g/cO3kkKkzK7107Inj4NzO71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvu6hl/btsLqUA5d8g/cO3kkKkzK7107Inj4NzO71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbvu6hl%2FbtsLqUA5d8g%2FcO3kkKkzK7107Inj4NzO71%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;543&quot; height=&quot;399&quot; data-origin-width=&quot;543&quot; data-origin-height=&quot;399&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;웹서버의 버전이 표시되기 때문에 좀 더 보완을 해야 할 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7124016057410808&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 반응형] 최상단 고정 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;httpd.conf&amp;nbsp;파일에&amp;nbsp;아래&amp;nbsp;내용을&amp;nbsp;추가&amp;nbsp;후,&amp;nbsp;웹서버를&amp;nbsp;재가동시켰습니다. &lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;ServerTokens&amp;nbsp;Prod&amp;nbsp;&amp;nbsp;(Prod/Min/OS/Full&amp;nbsp;옵션이&amp;nbsp;있음) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;ServerSignature&amp;nbsp;Off&amp;nbsp;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;다시&amp;nbsp;명령&amp;nbsp;프롬프트&amp;nbsp;창에서&amp;nbsp;curl&amp;nbsp;-X&amp;nbsp;trace&amp;nbsp;http://127.0.0.1/&amp;nbsp;-vv&amp;nbsp;명령&amp;nbsp;실행하니&amp;nbsp; &lt;br /&gt;아래와 같이 메시지가 표시되는 군요.&lt;br /&gt;원하는 대로 웹서버의 버전이 표시되지 않았습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;535&quot; data-origin-height=&quot;399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beOKBh/btsLrIttKQC/yzAaRHUYiP7Tv8sBF3G601/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beOKBh/btsLrIttKQC/yzAaRHUYiP7Tv8sBF3G601/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beOKBh/btsLrIttKQC/yzAaRHUYiP7Tv8sBF3G601/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeOKBh%2FbtsLrIttKQC%2FyzAaRHUYiP7Tv8sBF3G601%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;535&quot; height=&quot;399&quot; data-origin-width=&quot;535&quot; data-origin-height=&quot;399&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;그래도 조금 부족하네요.&lt;br /&gt;웹서버의 종류가 표시되기 때문입니다.&lt;br /&gt;웹서버의 종류를 실제와는 다르게 표시하는 방법은 아래와 같습니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1.&amp;nbsp;owasp-modsecurity-crs&amp;nbsp;설치&amp;nbsp;및&amp;nbsp;설&lt;/b&gt;정&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1)&amp;nbsp;&lt;a href=&quot;https://github.com/SpiderLabs/owasp-modsecurity-crs&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/SpiderLabs/owasp-modsecurity-crs&lt;/a&gt;&amp;nbsp;에서&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;owasp-modsecurity-crs-3.3-dev.zip&amp;nbsp;파일을&amp;nbsp;다운로드&amp;nbsp;받는다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2)&amp;nbsp;owasp-modsecurity-crs&amp;nbsp;설정 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;apache24/conf/owasp-modsecurity-crs&amp;nbsp;디렉토리를&amp;nbsp;만들고 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;압축파일에&amp;nbsp;있는&amp;nbsp;crs-setup.conf.example파일과&amp;nbsp;rules&amp;nbsp;디렉토리를&amp;nbsp;복사한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3)&amp;nbsp;파일명&amp;nbsp;변경&amp;nbsp;:&amp;nbsp;crs-setup.conf.example&amp;nbsp;&amp;rarr;&amp;nbsp;crs-setup.conf &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4)&amp;nbsp;crs-setup.conf&amp;nbsp;파일에&amp;nbsp;아래&amp;nbsp;내용을&amp;nbsp;추가한다. &lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SecRuleEngine&amp;nbsp;On &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SecDefaultAction&amp;nbsp;&quot;deny,&amp;nbsp;phase:2,&amp;nbsp;status:403&quot; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ServerTokens&amp;nbsp;Full &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ServerSignature&amp;nbsp;Off &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SecServerSignature&amp;nbsp;&quot;COSMOS&quot;&lt;/span&gt; &lt;br /&gt;​ &lt;br /&gt;&lt;b&gt;2.&amp;nbsp;mod_security&amp;nbsp;설치&amp;nbsp;및&amp;nbsp;설정&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1)&amp;nbsp;&lt;a href=&quot;https://www.apachelounge.com/download/에서&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.apachelounge.com/download/에서&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mod_security-2.9.7-win64-VS17.zip&amp;nbsp;파일을&amp;nbsp;다운로드&amp;nbsp;받는다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2)&amp;nbsp;apache24/modules에&amp;nbsp;mod_security2.so를&amp;nbsp;복사한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3)&amp;nbsp;apache24/bin에&amp;nbsp;yajl.dll을&amp;nbsp;복사한다. &lt;br /&gt;​ &lt;br /&gt;&lt;b&gt;3.&amp;nbsp;httpd.conf&amp;nbsp;설정&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1)&amp;nbsp;LoadModule&amp;nbsp;security2_module&amp;nbsp;modules/mod_security2.so&amp;nbsp;활성화한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2)&amp;nbsp;아래&amp;nbsp;내용을&amp;nbsp;추가한다. &lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;IfModule&amp;nbsp;security2_module&amp;gt;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Include&amp;nbsp;conf/owasp-modsecurity-crs/crs-setup.conf &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Include&amp;nbsp;conf/owasp-modsecurity-crs/rules/*.conf &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/IfModule&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;웹서버를&amp;nbsp;재가동&amp;nbsp;후,&amp;nbsp;curl&amp;nbsp;-X&amp;nbsp;trace&amp;nbsp;http://127.0.0.1/&amp;nbsp;-vv&amp;nbsp;명령&amp;nbsp;실행하니&amp;nbsp; &lt;br /&gt;아래와&amp;nbsp;같이 &lt;br /&gt;웹서버의 종류가 다르네 표시되네요! (COSMOS)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;527&quot; data-origin-height=&quot;401&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kUSPX/btsLrWL26jB/7DS5oc0iAAKLh3bA4OH3Nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kUSPX/btsLrWL26jB/7DS5oc0iAAKLh3bA4OH3Nk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kUSPX/btsLrWL26jB/7DS5oc0iAAKLh3bA4OH3Nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkUSPX%2FbtsLrWL26jB%2F7DS5oc0iAAKLh3bA4OH3Nk%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;527&quot; height=&quot;401&quot; data-origin-width=&quot;527&quot; data-origin-height=&quot;401&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>IT, 프로그램</category>
      <category>apache설정</category>
      <category>APM</category>
      <category>메서드</category>
      <category>보안</category>
      <category>보안설정</category>
      <category>웹서버보안</category>
      <category>웹서버설정</category>
      <author>행복한 삶을 위하여</author>
      <guid isPermaLink="true">https://cosmos2024.tistory.com/1</guid>
      <comments>https://cosmos2024.tistory.com/1#entry1comment</comments>
      <pubDate>Mon, 23 Dec 2024 14:16:33 +0900</pubDate>
    </item>
  </channel>
</rss>