<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>인생 코딩</title>
    <link>https://life-coding.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 11 Jul 2026 08:42:49 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>LifeCoding</managingEditor>
    <item>
      <title>vcpkg로 설치한 qtdhk, Qt Maintenance Tool로 설치한 Qt를 함께 쓸 수 있을까?</title>
      <link>https://life-coding.tistory.com/204</link>
      <description>&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;vcpkg로 설치한 Qt 라이브러리와 Qt Maintenance Tool(공식 Qt 설치 도구)로 설치한 Qt 라이브러리는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;기술적으로 동시에 시스템에 존재할 수 있지만, 일반적인 프로젝트에서 동시에 함께 사용하는 것은 권장되지 않으며, 여러 문제가 발생할 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;주요 이유와 주의점은 다음과 같습니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;경로 충돌 및 우선순위 문제&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CMake 프로젝트의 경우, vcpkg가 설치한 Qt가&lt;span&gt;&amp;nbsp;&lt;/span&gt;CMAKE_PREFIX_PATH&lt;span&gt;&amp;nbsp;&lt;/span&gt;등에서 우선적으로 인식되어, QtCreator에서 선택한 공식 Qt 버전 대신 vcpkg의 Qt가 자동으로 사용될 수 있습니다&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;QtCreator의 Kit 설정이나 Maintenance Tool로 설치한 Qt가 무시될 수 있습니다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Visual Studio 및 Qt VS Tools와의 호환성&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Qt VS Tools(Visual Studio용 Qt 확장)는 vcpkg로 설치한 Qt의 폴더 구조와 공식 Qt 설치의 구조가 다르기 때문에, vcpkg로 설치한 Qt와 완벽하게 호환되지 않을 수 있습니다&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;특히 디버그/릴리즈 라이브러리 경로, qmake.exe 위치, mkspecs 등에서 문제가 발생할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;라이브러리 버전 충돌&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 설치 방식으로 서로 다른 Qt 버전이 설치되어 있다면, 프로젝트에서 예기치 않은 라이브러리 버전이 링크되어 런타임 오류가 발생할 수 있습니다.&lt;/li&gt;
&lt;li&gt;특히 Qt의 바이너리 호환성 정책에 따라, 일부 버전 간에는 혼용이 불가능할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;폴더 구조 및 경로 문제&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: left;&quot;&gt;vcpkg로 설치한 Qt는 공식 Qt 설치와 폴더 구조와 경로가 다릅니다. 예를 들어, qmake.exe가 위치한 경로가 다르고, 라이브러리와 플러그인, mkspecs 등도 분리되어 있습니다&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;디버그/릴리즈 라이브러리 분리&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: left;&quot;&gt;vcpkg는 디버그와 릴리즈 라이브러리를 각각 다른 폴더에 저장하는 반면, 공식 Qt 설치에서는 동일 폴더에 저장하는 경우가 많아 빌드 환경에서 혼란이 생길 수 있습니다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실제 사용 방법&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;동시에 사용하는 것은 피하고, 하나의 방식(공식 설치 또는 vcpkg 설치)만 사용하는 것이 안정적입니다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;특정 프로젝트에서는 vcpkg의 Qt를, 다른 프로젝트에서는 공식 설치 Qt를 사용하는 방식으로 분리할 수 있지만, 환경 변수 및 빌드 설정에 주의해야 합니다&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결론:&lt;/b&gt;&lt;br /&gt;vcpkg로 설치한 Qt와 Qt Maintenance Tool로 설치한 Qt는 동시에 시스템에 존재할 수 있지만, 동일한 프로젝트에서 함께 사용하는 것은 권장되지 않으며, 빌드 및 실행 환경에서 예기치 않은 문제가 발생할 수 있습니다. 프로젝트별로 한 가지 설치 방식만 사용하는 것이 가장 안전합니다.&lt;/p&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://forum.qt.io/topic/157554/vs-tools-in-vs2022-do-not-work-with-vcpkg-installed-qt6&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://forum.qt.io/topic/157554/vs-tools-in-vs2022-do-not-work-with-vcpkg-installed-qt6&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/microsoft/vcpkg/issues/2643&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/microsoft/vcpkg/issues/2643&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://forum.qt.io/topic/96818/integrate-qt-vs-tools-with-vcpkg-installed-qt&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://forum.qt.io/topic/96818/integrate-qt-vs-tools-with-vcpkg-installed-qt&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.qtcentre.org/threads/71952-CMake-vcpkg-qt-takes-precedence-over-onlineinstaller-qt&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.qtcentre.org/threads/71952-CMake-vcpkg-qt-takes-precedence-over-onlineinstaller-qt&lt;/a&gt;&lt;/p&gt;</description>
      <category>개발/Qt</category>
      <category>qt</category>
      <category>vcpkg</category>
      <author>LifeCoding</author>
      <guid isPermaLink="true">https://life-coding.tistory.com/204</guid>
      <comments>https://life-coding.tistory.com/204#entry204comment</comments>
      <pubDate>Tue, 24 Jun 2025 02:23:50 +0900</pubDate>
    </item>
    <item>
      <title>vcpkg란</title>
      <link>https://life-coding.tistory.com/203</link>
      <description>&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;vcpkg는 마이크로소프트(Microsoft)와 C++ 커뮤니티가 유지&amp;middot;관리하는 오픈소스 C/C++ 패키지 관리자로, Windows, macOS, Linux 등 다양한 플랫폼에서 사용할 수 있습니다&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;Python의 pip, Node.js의 npm, Rust의 cargo와 비슷한 역할을 하며, C/C++ 개발 환경에서 라이브러리 의존성 관리를 크게 단순화합니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: oklch(0.304 0.04 213.681); text-align: start; background-color: #ffffff;&quot;&gt; vcpkg는 2016년에 처음 공개되었습니다. 공식적으로는 Microsoft가 CppCon 2016에서 처음 발표하였으며, 그 이후로 Windows, macOS, Linux 등 다양한 플랫폼에서 사용할 수 있는 C/C++ 패키지 관리자로 발전해왔습니다 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;vcpkg는 다음과 같은 특징이 있습니다:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;플랫폼 간 호환성&lt;/b&gt;: Windows, macOS, Linux에서 동일한 방식으로 라이브러리를 설치할 수 있습니다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;오픈소스 라이브러리 지원&lt;/b&gt;: 수천 개의 고품질 오픈소스 라이브러리를 쉽게 설치하고 관리할 수 있습니다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;직접 빌드&lt;/b&gt;: 라이브러리의 소스 코드를 직접 다운로드해 컴파일하는 방식을 사용하므로, 다양한 환경에서 동작하는 라이브러리를 얻을 수 있습니다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;빌드 시스템 통합&lt;/b&gt;: CMake, MSBuild 등 다양한 빌드 시스템과 자동으로 연동되어, 프로젝트에 라이브러리를 쉽게 추가할 수 있습니다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;버전 관리 및 의존성 관리&lt;/b&gt;: 라이브러리 버전 충돌이나 의존성 문제를 효과적으로 관리할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;프라이빗 레지스트리 지원&lt;/b&gt;: 내부적으로 사용하는 라이브러리도 별도의 레지스트리로 관리할 수 있습니다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;vcpkg를 사용하면, 예를 들어 명령 프롬프트에서 아래와 같이 라이브러리를 설치할 수 있습니다:&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot;&gt;
&lt;div style=&quot;background-color: oklch(0.963 0.007 106.523); color: oklch(0.93 0.003 106.451);&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: oklch(0.93 0.007 106.529); color: oklch(0.502 0.008 106.677);&quot; data-testid=&quot;code-language-indicator&quot;&gt;bash&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #4d4d4c;&quot;&gt;&lt;span style=&quot;color: #4d4d4c; text-align: right;&quot;&gt;&lt;span style=&quot;color: #4d4d4c;&quot;&gt;vcpkg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;color: #4d4d4c;&quot;&gt;install&lt;/span&gt;&lt;span&gt; vcpkg install qt6-base&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하면 qt6-base 라이브러리를 64비트 Windows 환경에 설치할 수 있습니다&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;정리하자면, vcpkg는 C/C++ 개발자가 다양한 라이브러리를 쉽게 설치&amp;middot;관리할 수 있도록 도와주는 플랫폼 간 패키지 관리 도구입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/vcpkg/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;vcpkg 설명서&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1750349762141&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;vcpkg 설명서&quot; data-og-description=&quot;vcpkg는 선도적인 플랫폼 간 C/C++ 패키지 관리자입니다. 수천 개의 고품질 오픈 소스 라이브러리에 액세스하여 애플리케이션을 강화하고 내부적으로 프라이빗 구성 요소 컬렉션을 공유합니다.&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-source-url=&quot;https://learn.microsoft.com/ko-kr/vcpkg/&quot; data-og-url=&quot;https://learn.microsoft.com/ko-kr/vcpkg/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bhoy3d/hyZcfCvtgh/yFa9BNB72958Fa4SDywelk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/vcpkg/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://learn.microsoft.com/ko-kr/vcpkg/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bhoy3d/hyZcfCvtgh/yFa9BNB72958Fa4SDywelk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;vcpkg 설명서&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;vcpkg는 선도적인 플랫폼 간 C/C++ 패키지 관리자입니다. 수천 개의 고품질 오픈 소스 라이브러리에 액세스하여 애플리케이션을 강화하고 내부적으로 프라이빗 구성 요소 컬렉션을 공유합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://jungwoong.tistory.com/77&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://jungwoong.tistory.com/77&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1750349854064&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Tool] vcpkg 설치 및 사용법&quot; data-og-description=&quot;vcpkg란 vcpkg는 Windows linux와 MacOs 에서 C와 C++ 라이브러리 관리를 도와줍니다. 자세한 설명은 아래의 링크를 통해서 알 수 있습니다. https://docs.microsoft.com/ko-kr/cpp/build/vcpkg?view=vs-2019 vcpkg: Windows, Linux &quot; data-og-host=&quot;jungwoong.tistory.com&quot; data-og-source-url=&quot;https://jungwoong.tistory.com/77&quot; data-og-url=&quot;https://jungwoong.tistory.com/77&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cYt1EI/hyZbsPu0PE/vEYjUkfkUCxLVsmbaAbzMk/img.png?width=637&amp;amp;height=553&amp;amp;face=0_0_637_553,https://scrap.kakaocdn.net/dn/cy9kUE/hyZcgIbxkX/zuICrfiyV3OPpqKFGtbm1k/img.png?width=637&amp;amp;height=553&amp;amp;face=0_0_637_553,https://scrap.kakaocdn.net/dn/bQ6Zy1/hyY8THRZ8F/7jxQT1SYvX2H58yGGGKWz0/img.png?width=949&amp;amp;height=682&amp;amp;face=0_0_949_682&quot;&gt;&lt;a href=&quot;https://jungwoong.tistory.com/77&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jungwoong.tistory.com/77&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cYt1EI/hyZbsPu0PE/vEYjUkfkUCxLVsmbaAbzMk/img.png?width=637&amp;amp;height=553&amp;amp;face=0_0_637_553,https://scrap.kakaocdn.net/dn/cy9kUE/hyZcgIbxkX/zuICrfiyV3OPpqKFGtbm1k/img.png?width=637&amp;amp;height=553&amp;amp;face=0_0_637_553,https://scrap.kakaocdn.net/dn/bQ6Zy1/hyY8THRZ8F/7jxQT1SYvX2H58yGGGKWz0/img.png?width=949&amp;amp;height=682&amp;amp;face=0_0_949_682');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Tool] vcpkg 설치 및 사용법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;vcpkg란 vcpkg는 Windows linux와 MacOs 에서 C와 C++ 라이브러리 관리를 도와줍니다. 자세한 설명은 아래의 링크를 통해서 알 수 있습니다. https://docs.microsoft.com/ko-kr/cpp/build/vcpkg?view=vs-2019 vcpkg: Windows, Linux&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jungwoong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@seongcheoljeon/Vcpkg&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://velog.io/@seongcheoljeon/Vcpkg&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1750349858616&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Vcpkg (Visual C++ Package Manager)&quot; data-og-description=&quot;vcpkg는 Microsoft에서 배포하고 C++ 커뮤니티에서 유지 및 관리하는 오픈 소스 C/C++ 패리지 관리자이다. C/C++ 개발자 환경의 고유한 문제를 해결하기 위해 처음부터 설계되었다.2016녕에 시작된 이 기&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@seongcheoljeon/Vcpkg&quot; data-og-url=&quot;https://velog.io/@seongcheoljeon/Vcpkg&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bg9wHV/hyY8UGJ51L/hRDVpwplDczakJ3UOUN4KK/img.jpg?width=686&amp;amp;height=386&amp;amp;face=0_0_686_386,https://scrap.kakaocdn.net/dn/BMCuf/hyZcmBDbwR/MAt8zMZLmuEIKiBSx4i7bK/img.jpg?width=686&amp;amp;height=386&amp;amp;face=0_0_686_386&quot;&gt;&lt;a href=&quot;https://velog.io/@seongcheoljeon/Vcpkg&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@seongcheoljeon/Vcpkg&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bg9wHV/hyY8UGJ51L/hRDVpwplDczakJ3UOUN4KK/img.jpg?width=686&amp;amp;height=386&amp;amp;face=0_0_686_386,https://scrap.kakaocdn.net/dn/BMCuf/hyZcmBDbwR/MAt8zMZLmuEIKiBSx4i7bK/img.jpg?width=686&amp;amp;height=386&amp;amp;face=0_0_686_386');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Vcpkg (Visual C++ Package Manager)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;vcpkg는 Microsoft에서 배포하고 C++ 커뮤니티에서 유지 및 관리하는 오픈 소스 C/C++ 패리지 관리자이다. C/C++ 개발자 환경의 고유한 문제를 해결하기 위해 처음부터 설계되었다.2016녕에 시작된 이 기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/C,C++</category>
      <category>C++</category>
      <category>vcpkg</category>
      <category>패키지관리자</category>
      <author>LifeCoding</author>
      <guid isPermaLink="true">https://life-coding.tistory.com/203</guid>
      <comments>https://life-coding.tistory.com/203#entry203comment</comments>
      <pubDate>Fri, 20 Jun 2025 01:18:46 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 시스템 사용자 계정 정리</title>
      <link>https://life-coding.tistory.com/194</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;사용자 계정 확인&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;전체 사용자 계정 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cat /etc/passwd&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;useradd를 이용해 등록된 사용자만 보기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;grep&amp;nbsp;/bin/bash&amp;nbsp;/etc/passwd&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;사용자 계정 설명&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;adm&lt;/h4&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;h4 data-ke-size=&quot;size20&quot;&gt;lp&lt;/h4&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;h4 data-ke-size=&quot;size20&quot;&gt;sync&lt;/h4&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;h4 data-ke-size=&quot;size20&quot;&gt;shutdown&lt;/h4&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;h4 data-ke-size=&quot;size20&quot;&gt;halt&lt;/h4&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;h4 data-ke-size=&quot;size20&quot;&gt;news&lt;/h4&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;h4 data-ke-size=&quot;size20&quot;&gt;uucp&lt;/h4&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;h4 data-ke-size=&quot;size20&quot;&gt;operator&lt;/h4&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;h4 data-ke-size=&quot;size20&quot;&gt;games&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;X11(X윈도우) 화면에서 게임을 할 때 사용하는 계정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;avahi-autoipd&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DNS 관련된 계정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;avahi-autoipd is a service provided by the &lt;b&gt;Avahi&lt;/b&gt; daemon on Linux, which implements network services discovery using the &lt;b&gt;mDNS/DNS-SD&lt;/b&gt; (Multicast DNS / DNS Service Discovery) protocol. Specifically, avahi-autoipd is responsible for assigning an &lt;b&gt;Automatic Private IP Addressing (APIPA)&lt;/b&gt; address to a network interface when it cannot obtain an IP address from a DHCP 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;avahi-autoipd is part of the Avahi service on Linux systems and is responsible for assigning link-local IP addresses (APIPA addresses) when a DHCP server is unavailable. It helps maintain basic network connectivity on local networks and is part of the broader Zero Configuration Networking (zeroconf) system.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;tss&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;암호화 키 생성, 플랫폼 무결성 검증과 관련된 TPM 소프트웨어 스택 관리용 계정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The tss user on a Linux system is a system user created to manage the &lt;b&gt;Trusted Platform Module (TPM)&lt;/b&gt; software stack. TPM is a hardware component that provides secure generation and storage of cryptographic keys, as well as platform integrity verification.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The tss user is associated with the &lt;b&gt;TrouSerS&lt;/b&gt; software (or other TPM-related software), which is the open-source implementation of the TPM Software Stack (TSS). This user is created to run the TPM-related services with minimal privileges for security purposes.&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;The tss user in Linux is a system account created to manage the TPM Software Stack (TSS) and run TPM-related services, ensuring secure interactions with the Trusted Platform Module (TPM). It provides essential security features for cryptography, encryption, and platform integrity in systems with TPM hardware.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;postfix&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메일 전송 관련 계정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The postfix user on a Linux system is a system account created for the &lt;b&gt;Postfix&lt;/b&gt; mail transfer agent (MTA). Postfix is a widely used open-source software for routing and delivering email. It&amp;rsquo;s designed to be secure, fast, and easy to configure, often serving as a replacement for the older Sendmail MTA.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The postfix user is used to run Postfix services and processes with minimal privileges, adhering to the principle of least privilege to enhance security.&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;The postfix user on Linux is a system account created to run the Postfix mail transfer agent (MTA). It ensures that Postfix's email processing tasks are handled securely by limiting privileges, as most Postfix processes run under the postfix user instead of root. This helps enhance the security of the mail server and minimizes the risk of exploitation.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;saslauth&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증 관련 계정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The saslauth user on a Linux system is a system account associated with the &lt;b&gt;Cyrus SASL (Simple Authentication and Security Layer)&lt;/b&gt; authentication library. SASL is a framework that provides authentication and data security services for network protocols such as SMTP, IMAP, and LDAP.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The saslauth user is created to run the &lt;b&gt;SASL authentication daemon&lt;/b&gt; (saslauthd), which handles authentication requests from various services and applications. This system account ensures that the saslauthd service runs with minimal privileges, adhering to security best practices.&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;The saslauth user on Linux is a system account used to run the &lt;b&gt;SASL authentication daemon (saslauthd)&lt;/b&gt;, which provides secure user authentication for various services like email, LDAP, and others. The saslauth user ensures that the saslauthd process runs with minimal privileges, enhancing the overall security of the system by reducing potential attack surfaces.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;polkitd&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템 전체 권한 관리용 계정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The polkitd user on a Linux system is a system account used by &lt;b&gt;Polkit&lt;/b&gt; (formerly known as &lt;b&gt;PolicyKit&lt;/b&gt;), which is a framework for managing system-wide privileges. Polkit is commonly used to handle authorization for actions that require elevated privileges (such as running administrative tasks) in a controlled and secure manner.&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;The polkitd user in Linux is a system account used to run the &lt;b&gt;Polkit daemon&lt;/b&gt; (polkitd), which is responsible for managing and making authorization decisions on privileged system actions. By running Polkit with minimal privileges under the polkitd user, the system enhances security while allowing non-root users to perform administrative tasks based on defined policies.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;nobody&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최소 권한이 필요한 프로세스용 계정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The nobody user on a Linux system is a &lt;b&gt;system account&lt;/b&gt; used for processes that do not require ownership by a specific user or for which minimal privileges are necessary. This account is commonly used to run services and processes that don&amp;rsquo;t need access to any critical system resources or files. By running these services under the nobody user, the system limits their access, improving security.&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;The nobody user on Linux is a &lt;b&gt;non-privileged system account&lt;/b&gt; used to run processes with minimal system access. It provides an extra layer of security by ensuring that services that don&amp;rsquo;t need high privileges can only interact with limited parts of the system. This user is commonly used for network-facing services, daemons, or temporary file ownership, and it operates with the least possible permissions to reduce security risks.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;named&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DNS 서버용 계정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The named user on a Linux system is a system account created for running the &lt;b&gt;BIND&lt;/b&gt; (Berkeley Internet Name Domain) service, which is one of the most common DNS (Domain Name System) server software packages. The &lt;b&gt;BIND DNS server&lt;/b&gt; (often called named, short for &lt;b&gt;name daemon&lt;/b&gt;) translates domain names into IP addresses and vice versa.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The named user ensures that the DNS server runs with limited privileges, adhering to the principle of least privilege, which enhances security by minimizing the potential damage that could occur if the DNS service were compromised.&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;The named user on Linux is a &lt;b&gt;system account&lt;/b&gt; created to run the &lt;b&gt;BIND DNS server&lt;/b&gt; daemon (named) with limited privileges. This enhances the security of the system by ensuring that the DNS service, which is often exposed to the internet, cannot access or modify sensitive files. BIND is one of the most widely used DNS server software packages, and running it under the named user follows the principle of least privilege to reduce security risks.:&lt;/p&gt;</description>
      <category>서버,데스크탑/리눅스(Linux)</category>
      <author>LifeCoding</author>
      <guid isPermaLink="true">https://life-coding.tistory.com/194</guid>
      <comments>https://life-coding.tistory.com/194#entry194comment</comments>
      <pubDate>Fri, 27 Sep 2024 21:32:36 +0900</pubDate>
    </item>
    <item>
      <title>[DB] MariaDB 보안 설정</title>
      <link>https://life-coding.tistory.com/191</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;DB 포트 변경&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 DB 포트가 아닌, 다른 포트로 변경하는게 보안상 더 안전하다.&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;1. 서버 접속 후 db 설정파일 열기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vi /etc/my.cnf.d/server.cnf&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;2. &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000; text-align: start;&quot;&gt;다음 설정 파일에서 [mysql] 섹션 바로 아래에 port 변경&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[mysqld]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;port=바꿀 포트 번호&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000; text-align: start;&quot;&gt;3. 포트번호 변경 후 저장하고 mariadb 재기동&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;systemctl restart mariadb&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;4. mariadb 실행중 포트 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;netstat -tnlp&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;DB 루트 패스워드 변경&lt;/h2&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;1. DB 접속&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysql -u root -p&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;2. 패스워드 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;SET&lt;/span&gt; PASSWORD &lt;span&gt;FOR&lt;/span&gt; &lt;span&gt;'root'&lt;/span&gt;@&lt;span&gt;'localhost'&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; PASSWORD(&lt;span&gt;'new_secure_password'&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;3. 권한 flush&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FLUSH PRIVILEGES;&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;4. 패스워드 포맷 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;USE mysql; &lt;span&gt;SELECT&lt;/span&gt; Host, &lt;span&gt;User&lt;/span&gt;, Password &lt;span&gt;FROM&lt;/span&gt; &lt;span&gt;user&lt;/span&gt; &lt;span&gt;WHERE&lt;/span&gt; &lt;span&gt;User&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;'root'&lt;/span&gt;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;사용자 계정 생성 &amp;amp; 권한 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;root계정은 외부 접속 못하게 한다. 사용자 계정도 가급적 내부 접속만 허용하게 한다.&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;1. 사용자 생성&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;# create user '계정'@'접속위치' identified by '패스워드';&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ex) create user 'test'@'127.0.0.1' identified by 'Password'; -- 내부접속만 허용&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ex) create user 'test2'@'%' identified by 'Password'; -- 외부접속 허용&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;2. 권한 주기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 권한 부여 (접속 위치에 %는 쓰지 말도록 하자. 가급적 localhost만 쓰거나, ip를 특정하는 것이 좋다.)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;grant all privileges on DB이름.테이블 to '계정'@'접속위치';&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ex) grant all privileges on testDB.* to 'test2'@'%';&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;ex) grant all privileges on testDB.* to 'test2'@'localhost';&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;usage (삭제하면 로그인조차 안됨) 권한 부여, 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;usage 권한 부여&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysql&amp;gt; GRANT USAGE ON *.* TO USER_NAME@HOST IDENTIFIED BY 'USER_NAME';&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;usage 권한 삭제&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysql&amp;gt; REVOKE USAGE ON *.* FROM USER_NAME@HOST;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 권한 적용&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;flush privileges;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. 권한 확인&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;show grants for '계정'@'접속위치';&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;외부접속 허용제거&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;가급적 모든 아이디의 외부 접속을 막고, 꼭 필요하다면 아이피를 특정하여 외부 접속을 허용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;% 모든아이피 허용제거&lt;br /&gt;mysql&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;DELETE FROM mysql.user WHERE Host=&amp;rsquo;%&amp;rsquo; AND User=&amp;rsquo;아이디&amp;rsquo;;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;특정ip허용 제거&lt;br /&gt;mysql&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;DELETE FROM mysql.user WHERE Host=&amp;rsquo;111.111.111.111&amp;prime; AND User=&amp;rsquo;아이디&amp;rsquo;;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;설정적용&lt;br /&gt;mysql&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;FLUSH privileges;&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;사용자 확인&lt;span style=&quot;background-color: #1e1e1e; color: #dcdcdc; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;select&amp;nbsp;host,&amp;nbsp;user,&amp;nbsp;password&amp;nbsp;from&amp;nbsp;mysql.user;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;DB 백업/복구, 자동백업(crontab)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해킹을 대비하여, 매일 DB 백업을 하도록 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- crontab에 db 백업 스크립트 등록하여, 자동으로 백업하도록 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 백업 파일이 쌓이면 디스크 full 날 수 있으므로, 특정 주기로 예전 백업은 삭제하도록 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://foxydog.tistory.com/94&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://foxydog.tistory.com/94&lt;/a&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;&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;&lt;a href=&quot;https://tipland.tistory.com/47&quot;&gt;https://tipland.tistory.com/47&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://da-new.tistory.com/237&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://da-new.tistory.com/237&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.servis.co.kr/index.php/2019/06/28/mysql-not-allowed-to-connect/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://blog.servis.co.kr/index.php/2019/06/28/mysql-not-allowed-to-connect/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://grmn.tistory.com/7&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://grmn.tistory.com/7&lt;/a&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;</description>
      <category>DB</category>
      <author>LifeCoding</author>
      <guid isPermaLink="true">https://life-coding.tistory.com/191</guid>
      <comments>https://life-coding.tistory.com/191#entry191comment</comments>
      <pubDate>Fri, 27 Sep 2024 19:36:01 +0900</pubDate>
    </item>
    <item>
      <title>[PHP] OPcache 정보 보기</title>
      <link>https://life-coding.tistory.com/174</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. OPcache 정보 보기&lt;/h4&gt;
&lt;pre id=&quot;code_1708173811597&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?php
$status = opcache_get_status();
echo json_encode($status, JSON_PRETTY_PRINT);
?&amp;gt;&lt;/code&gt;&lt;/pre&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;h4 data-ke-size=&quot;size20&quot;&gt;2. 항목 설명&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The opcache_get_status function in PHP returns an associative array containing information about the current status of the OPcache (Opcode Cache). Each key in the array represents a different aspect of the OPcache status. Here are some common items that you might find in the opcache_get_status results:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;opcache_enabled&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Description:&lt;/b&gt; Indicates whether OPcache is enabled or not.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Possible Values:&lt;/b&gt; true if enabled, false if disabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;cache_full&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Description:&lt;/b&gt; Indicates whether the OPcache shared memory is full.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Possible Values:&lt;/b&gt; true if the shared memory is full, false otherwise.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;restart_pending&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Description:&lt;/b&gt; Indicates whether a restart of the OPcache is pending.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Possible Values:&lt;/b&gt; true if a restart is pending, false otherwise.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;restart_in_progress&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Description:&lt;/b&gt; Indicates whether a restart of the OPcache is currently in progress.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Possible Values:&lt;/b&gt; true if a restart is in progress, false otherwise.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;memory_usage&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Description:&lt;/b&gt; Provides information about memory usage in the OPcache (unit : bytes).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Items:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;used_memory: Amount of memory used by the OPcache.&lt;/li&gt;
&lt;li&gt;free_memory: Amount of free memory in the OPcache.&lt;/li&gt;
&lt;li&gt;wasted_memory: Amount of memory wasted by fragmentation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;interned_strings_usage&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Description:&lt;/b&gt; Information about interned strings, which are unique string values stored in a single memory location to reduce duplication.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Items:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;buffer_size: Size of the interned strings buffer.&lt;/li&gt;
&lt;li&gt;used_memory: Amount of memory used by interned strings.&lt;/li&gt;
&lt;li&gt;free_memory: Amount of free memory in the interned strings buffer.&lt;/li&gt;
&lt;li&gt;number_of_strings: Number of interned strings.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;opcache_statistics&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Description:&lt;/b&gt; Provides statistical information about the OPcache.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Items:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;num_cached_scripts: Number of scripts cached by OPcache.&lt;/li&gt;
&lt;li&gt;num_cached_keys: Number of cache keys (unique script identifiers).&lt;/li&gt;
&lt;li&gt;max_cached_keys: Maximum number of cache keys allowed.&lt;/li&gt;
&lt;li&gt;hits: Number of cache hits.&lt;/li&gt;
&lt;li&gt;misses: Number of cache misses.&lt;/li&gt;
&lt;li&gt;blacklist_misses: Number of blacklist misses (scripts excluded from caching).&lt;/li&gt;
&lt;li&gt;blacklist_miss_ratio: Ratio of blacklist misses to total cache misses.&lt;/li&gt;
&lt;li&gt;opcache_hit_rate: Ratio of cache hits to total access attempts.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;These are some of the common items you might find in the opcache_get_status results. The exact list may vary depending on your PHP version and configuration. Always refer to the PHP documentation for the specific version you are using for the most accurate and up-to-date information.&lt;/p&gt;</description>
      <category>개발/PHP</category>
      <category>OPcache</category>
      <author>LifeCoding</author>
      <guid isPermaLink="true">https://life-coding.tistory.com/174</guid>
      <comments>https://life-coding.tistory.com/174#entry174comment</comments>
      <pubDate>Sat, 24 Feb 2024 23:26:19 +0900</pubDate>
    </item>
    <item>
      <title>[PHP] PHP의 철학</title>
      <link>https://life-coding.tistory.com/173</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;by&amp;nbsp;ChatGPT &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;실용성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PHP는&amp;nbsp;실용적이고&amp;nbsp;접근&amp;nbsp;가능한&amp;nbsp;스크립팅&amp;nbsp;언어로&amp;nbsp;설계되었습니다.&amp;nbsp;사용&amp;nbsp;편의성과&amp;nbsp;빠른&amp;nbsp;개발을&amp;nbsp;우선시하므로&amp;nbsp;웹&amp;nbsp;개발에&amp;nbsp;널리&amp;nbsp;사용됩니다.&amp;nbsp;구문은&amp;nbsp;상대적으로&amp;nbsp;간단하고&amp;nbsp;관대하므로&amp;nbsp;개발자는&amp;nbsp;복잡성을&amp;nbsp;최소화하면서&amp;nbsp;작업을&amp;nbsp;수행할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;2. 웹 중심&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PHP는&amp;nbsp;원래&amp;nbsp;웹&amp;nbsp;개발용으로&amp;nbsp;설계되었으며&amp;nbsp;동적&amp;nbsp;웹&amp;nbsp;페이지를&amp;nbsp;만드는&amp;nbsp;데&amp;nbsp;탁월합니다.&amp;nbsp;주요&amp;nbsp;사용&amp;nbsp;사례는&amp;nbsp;HTML&amp;nbsp;콘텐츠를&amp;nbsp;동적으로&amp;nbsp;생성하는&amp;nbsp;서버&amp;nbsp;측&amp;nbsp;스크립팅이며&amp;nbsp;웹&amp;nbsp;서버와&amp;nbsp;원활하게&amp;nbsp;통합됩니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;3. 아무것도 공유하지 않는 아키텍처&lt;/h4&gt;
&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;h4 data-ke-size=&quot;size20&quot;&gt;4. 오픈 소스 및 커뮤니티 중심&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PHP는 오픈 소스이며 개발은 커뮤니티 기여에 크게 의존합니다. PHP 커뮤니티는 개발자들이 토론, 버그 보고, 확장 기능 및 프레임워크 생성을 통해 언어 성장에 적극적으로 기여하는 협업 정신으로 잘 알려져 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 유연성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PHP는&amp;nbsp;유연성으로&amp;nbsp;유명합니다.&amp;nbsp;절차적&amp;nbsp;프로그래밍&amp;nbsp;패러다임과&amp;nbsp;객체&amp;nbsp;지향&amp;nbsp;프로그래밍&amp;nbsp;패러다임을&amp;nbsp;모두&amp;nbsp;지원하므로&amp;nbsp;개발자는&amp;nbsp;자신의&amp;nbsp;요구에&amp;nbsp;가장&amp;nbsp;적합한&amp;nbsp;스타일을&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. 상호 운용성&lt;/h4&gt;
&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;h4 data-ke-size=&quot;size20&quot;&gt;7. 진화와 적응성&lt;/h4&gt;
&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;h4 data-ke-size=&quot;size20&quot;&gt;8. 순수함보다 실용주의&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PHP는&amp;nbsp;프로그래밍&amp;nbsp;원칙을&amp;nbsp;엄격히&amp;nbsp;준수하는&amp;nbsp;것보다&amp;nbsp;실용적인&amp;nbsp;솔루션을&amp;nbsp;우선시하는&amp;nbsp;경우가&amp;nbsp;많습니다.&amp;nbsp;이러한&amp;nbsp;실용주의는&amp;nbsp;신속한&amp;nbsp;개발과&amp;nbsp;배포가&amp;nbsp;중요한&amp;nbsp;웹&amp;nbsp;개발&amp;nbsp;분야에서&amp;nbsp;인기를&amp;nbsp;얻는&amp;nbsp;데&amp;nbsp;기여했습니다. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발/PHP</category>
      <author>LifeCoding</author>
      <guid isPermaLink="true">https://life-coding.tistory.com/173</guid>
      <comments>https://life-coding.tistory.com/173#entry173comment</comments>
      <pubDate>Thu, 22 Feb 2024 19:18:21 +0900</pubDate>
    </item>
    <item>
      <title>[OS] 프로세스와 스레드 차이 (Process vs Thread)</title>
      <link>https://life-coding.tistory.com/171</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Process_(computing)&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;프로세스(Process)란&lt;/a&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;컴퓨팅에서 프로세스는 하나 이상의 스레드에 의해 실행되는 &lt;b&gt;컴퓨터 프로그램의 인스턴스&lt;/b&gt;입니다. (운영체제로부터 메모리/CPU 등의 자원을 할당받는 &lt;b&gt;작업의 단위&lt;/b&gt;입니다.)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프로세스는 프로그램 코드, 할당된 시스템 리소스, 물리적 및 논리적 액세스 권한, 실행 활동을 시작, 제어 및 조정하는 데이터 구조를 포함합니다. 프로세스는 최소한 하나의 스레드를 포함하며, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;OS에 따라&lt;span&gt; &lt;/span&gt;&lt;/span&gt;명령을 동시에 실행하는 여러 실행 스레드로 구성될 수 있습니다.&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;프로그램과의 차이&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;컴퓨터&amp;nbsp;프로그램은&amp;nbsp;일반적으로&amp;nbsp;디스크의&amp;nbsp;&lt;b&gt;파일에&amp;nbsp;저장된&amp;nbsp;명령의&amp;nbsp;수동적&amp;nbsp;모음&lt;/b&gt;인&amp;nbsp;반면,&amp;nbsp;프로세스는&amp;nbsp;&lt;b&gt;디스크에서&amp;nbsp;메모리로&amp;nbsp;로드된&amp;nbsp;후&amp;nbsp;해당&amp;nbsp;명령을&amp;nbsp;실행&lt;/b&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;많습니다.&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;프로세스 끼리는 자원을 공유하지 않습니다.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 프로세스는 자신만의 고유한 메모리와 자원을 할당받아 사용하기에, 타 프로세스와는 자원을 공유하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이에 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;프로세스의 문제점은?&lt;/h4&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;- 프로세스 사이에 통신이 어렵다는점 (IPC사용해야함)&lt;/p&gt;
&lt;figure id=&quot;og_1708155630591&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Process (computing) - Wikipedia&quot; data-og-description=&quot;From Wikipedia, the free encyclopedia Particular execution of a computer program Program vs. Process vs. Thread Scheduling, Preemption, Context Switching In computing, a process is the instance of a computer program that is being executed by one or many th&quot; data-og-host=&quot;en.wikipedia.org&quot; data-og-source-url=&quot;https://en.wikipedia.org/wiki/Process_(computing)&quot; data-og-url=&quot;https://en.wikipedia.org/wiki/Process_(computing)&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Cfh0N/hyVjjDJLQ0/Q0cx66A0aizKk90DGW0EN0/img.jpg?width=1200&amp;amp;height=693&amp;amp;face=0_0_1200_693,https://scrap.kakaocdn.net/dn/cJv35y/hyVjg76OFW/cMAWrGFNjP0iKFCyDqYemk/img.jpg?width=800&amp;amp;height=462&amp;amp;face=0_0_800_462,https://scrap.kakaocdn.net/dn/c2g78p/hyVm2tAsa1/aJHvQDVOKrYzLg2KkRAiDk/img.jpg?width=640&amp;amp;height=370&amp;amp;face=0_0_640_370&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Process_(computing)&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://en.wikipedia.org/wiki/Process_(computing)&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Cfh0N/hyVjjDJLQ0/Q0cx66A0aizKk90DGW0EN0/img.jpg?width=1200&amp;amp;height=693&amp;amp;face=0_0_1200_693,https://scrap.kakaocdn.net/dn/cJv35y/hyVjg76OFW/cMAWrGFNjP0iKFCyDqYemk/img.jpg?width=800&amp;amp;height=462&amp;amp;face=0_0_800_462,https://scrap.kakaocdn.net/dn/c2g78p/hyVm2tAsa1/aJHvQDVOKrYzLg2KkRAiDk/img.jpg?width=640&amp;amp;height=370&amp;amp;face=0_0_640_370');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Process (computing) - Wikipedia&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;From Wikipedia, the free encyclopedia Particular execution of a computer program Program vs. Process vs. Thread Scheduling, Preemption, Context Switching In computing, a process is the instance of a computer program that is being executed by one or many th&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;en.wikipedia.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Thread_(computing)&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;스레드(Thread)란&lt;/a&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터 과학에서 실행 스레드는 일반적으로 운영 체제의 일부인 스케줄러에 의해 독립적으로 관리될 수 있는 프로그래밍된 명령의 가장 작은 시퀀스입니다. (운영체제로부터 할당 받은 자원을 이용하는 &lt;b&gt;실행 단위&lt;/b&gt;입니다.)&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;스레드는 부모 프로세스의 자원을 공유합니다.&lt;/h4&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;단, 이로 인해 공유 자원의 &lt;b&gt;동기화 문제&lt;/b&gt;가 발생합니다. (한 스레드가 공유 자원을 변경하면, 다른 모든 스레드도 변경된 값을 사용하게 됨)&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;스레드의 출현 목적은?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;프로세스보다 크기가 작은 실행 단위 필요&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 프로세스의 생성 및 소멸에 따른 오버헤드 감소&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 빠른 컨텍스트 스위칭&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 프로세스들의 통신 시간&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;방법 어려움 해소&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1708155591217&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Thread (computing) - Wikipedia&quot; data-og-description=&quot;From Wikipedia, the free encyclopedia Smallest sequence of programmed instructions that can be managed independently by a scheduler A process with two threads of execution, running on one processor Program vs. Process vs. Thread Scheduling, Preemption, Con&quot; data-og-host=&quot;en.wikipedia.org&quot; data-og-source-url=&quot;https://en.wikipedia.org/wiki/Thread_(computing)&quot; data-og-url=&quot;https://en.wikipedia.org/wiki/Thread_(computing)&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/oHPXr/hyVjjqeyx9/1M1vqwivrQOiADQgtRqeNk/img.png?width=1200&amp;amp;height=1133&amp;amp;face=0_0_1200_1133,https://scrap.kakaocdn.net/dn/cF0hLl/hyVm0CwnvJ/hms2UjYvBxyedMRmsyINa0/img.png?width=800&amp;amp;height=756&amp;amp;face=0_0_800_756,https://scrap.kakaocdn.net/dn/5gfdf/hyVmX6RBgv/m9fygp5JQWXmt3Jk89V1L1/img.png?width=640&amp;amp;height=604&amp;amp;face=0_0_640_604&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Thread_(computing)&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://en.wikipedia.org/wiki/Thread_(computing)&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/oHPXr/hyVjjqeyx9/1M1vqwivrQOiADQgtRqeNk/img.png?width=1200&amp;amp;height=1133&amp;amp;face=0_0_1200_1133,https://scrap.kakaocdn.net/dn/cF0hLl/hyVm0CwnvJ/hms2UjYvBxyedMRmsyINa0/img.png?width=800&amp;amp;height=756&amp;amp;face=0_0_800_756,https://scrap.kakaocdn.net/dn/5gfdf/hyVmX6RBgv/m9fygp5JQWXmt3Jk89V1L1/img.png?width=640&amp;amp;height=604&amp;amp;face=0_0_640_604');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Thread (computing) - Wikipedia&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;From Wikipedia, the free encyclopedia Smallest sequence of programmed instructions that can be managed independently by a scheduler A process with two threads of execution, running on one processor Program vs. Process vs. Thread Scheduling, Preemption, Con&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;en.wikipedia.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;&lt;a href=&quot;https://zeroco.tistory.com/75&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://zeroco.tistory.com/75&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html&lt;/a&gt;&lt;/p&gt;</description>
      <category>OS</category>
      <category>스레드</category>
      <category>프로세스</category>
      <author>LifeCoding</author>
      <guid isPermaLink="true">https://life-coding.tistory.com/171</guid>
      <comments>https://life-coding.tistory.com/171#entry171comment</comments>
      <pubDate>Mon, 19 Feb 2024 18:05:08 +0900</pubDate>
    </item>
    <item>
      <title>[성능 테스트] JMeter 설치 &amp;amp; 사용하기</title>
      <link>https://life-coding.tistory.com/165</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;JMeter란&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성능 테스트와 측정을 위한 오픈소스 소프트웨어로, 100% 자바로 개발됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The&amp;nbsp;Apache&amp;nbsp;JMeter&amp;trade;&amp;nbsp;application&amp;nbsp;is&amp;nbsp;open&amp;nbsp;source&amp;nbsp;software,&amp;nbsp;a&amp;nbsp;100%&amp;nbsp;pure&amp;nbsp;Java&amp;nbsp;application&amp;nbsp;designed&amp;nbsp;to&amp;nbsp;load&amp;nbsp;test&amp;nbsp;functional&amp;nbsp;behavior&amp;nbsp;and&amp;nbsp;measure&amp;nbsp;performance.&amp;nbsp;It&amp;nbsp;was&amp;nbsp;originally&amp;nbsp;designed&amp;nbsp;for&amp;nbsp;testing&amp;nbsp;Web&amp;nbsp;Applications&amp;nbsp;but&amp;nbsp;has&amp;nbsp;since&amp;nbsp;expanded&amp;nbsp;to&amp;nbsp;other&amp;nbsp;test&amp;nbsp;functions.&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;1. 사전 준비&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Java Runtime 먼저 설치하기. Java가 없다면? jar 파일 실행 못함.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.java.com/en/download/manual.jsp&quot;&gt;https://www.java.com/en/download/manual.jsp&lt;/a&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;2.&amp;nbsp; JMeter 설치하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 링크 접속 후, Binaries에서 zip 파일 다운받아 압축 풀기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://jmeter.apache.org/download_jmeter.cgi&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://jmeter.apache.org/download_jmeter.cgi&lt;/a&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;3. JMeter 실행하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;압축 푼 폴더의 bin 폴더 안에 들어가서, 콘솔 창에 아래 명령어 입력하여 ApacheJMeter.jar 실행하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 콘솔 프로그램은 java.exe -jar [파일명.jar] 로 실행하고, GUI 프로그램은 javaw.exe -jar [파일명.jar]로 실행함&lt;/p&gt;
&lt;pre id=&quot;code_1707927395694&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;javaw.exe -jar ApacheJMeter.jar&lt;/code&gt;&lt;/pre&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;&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;&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 소프트웨어 (툴)/모니터링</category>
      <category>JMeter</category>
      <category>성능테스트</category>
      <author>LifeCoding</author>
      <guid isPermaLink="true">https://life-coding.tistory.com/165</guid>
      <comments>https://life-coding.tistory.com/165#entry165comment</comments>
      <pubDate>Sat, 17 Feb 2024 21:23:26 +0900</pubDate>
    </item>
    <item>
      <title>웹 서버(Web Server)란</title>
      <link>https://life-coding.tistory.com/166</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;웹 서버 (Web server) 란&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드웨어 측면과 소프트웨어 측면에서 정의 가능합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 하드웨어 측면에서는,&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 서버 소프트웨어와, 웹사이트를 구성하는 파일들(예를 들어 HTML 문서, 이미지, CSS, JavaScript 파일 등)을 저장하고 있는 컴퓨터입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 소프트웨어 측면에서는,&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP 서버입니다. HTTP 서버는 URL(웹 주소)와 HTTP 프로토콜을 이해하는 소프트웨어입니다. HTTP 서버는 도메인 네임을 통해 접속 가능하며, 요청된 URL에 해당하는 호스팅된 웹사이트의 컨텐츠를 최종 사용자의 장치에 전달합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;웹 서버 역할&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;HTTP 통신&lt;/b&gt;: HTTP 통신을 통해 사용자와 서버간 데이터 교류&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;정적 데이터 제공&lt;/b&gt;: HTTP 프로토콜을 통해 정적 콘텐츠를 클라이언트에게 제공&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;로깅&lt;/b&gt;: 보안 및 통계 목적으로 로그파일에 클라이언트의 요청 및 서버 응답 정보 로깅&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;가상호스팅&lt;/b&gt;: 하나의 IP주소를 사용해 많은 웹사이트(DNS)를 제공 가능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;ex)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://naver.com&quot;&gt;https://naver.com&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.naver.com&quot;&gt;https://www.naver.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;권한 부여&lt;/b&gt;: 웹 리소스 일부에 대해 접근 제어 가능&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;캐싱&lt;/b&gt;: 서버 응답 속도를 높이기 위해 정적 및 동적 컨텐츠 캐시 가능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;정적 데이터는 파일을 복사한 후 캐시서버에 저장해뒀다 사용&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;동적 데이터는 요청에 대한 결과를 짧은 시간동안 캐시했다가 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;대역폭 조절&lt;/b&gt;: 네트워크 포화를 방지하고 서버 다운을 방지하기 위해 응답 속도 제한&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;웹 서버의 종류&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Apache, NGINX, IIS, Google Web Server, CloudFlare 등.. 다양한 종류가 있습니다. 전통적으로 Apache와 IIS가 강자였는데, &lt;span style=&quot;background-color: #ffffff; color: #686868; text-align: start;&quot;&gt;2019년 이후로는 Nginx가 Apache, IIS보다 점유율이 향상되는 등 꾸준히 업데이트를 진행하며 발전중에 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Apache&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;무료 오픈소스 크로스플랫폼&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;웹 서버 소프트웨어&lt;/b&gt;입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #555555; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;프로세스 기반 접근 방식&lt;/b&gt;&lt;/span&gt;으로 하나의 스레드가 하나의 요청을 처리하는 구조&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;매 요청마다 스레드를 생성 및 할당해야 하기 때문에 리소스를 많이 잡아먹음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;NGINX&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아파치의 C10K &lt;b&gt;(Connection 10000 Problem)&lt;/b&gt; 문제를 해결하기 위해 만든 웹 서버 소프트웨어 입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #555555; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;이벤트 중심 접근 방식&lt;/b&gt;&lt;/span&gt;으로 하나의 스레드 내에서 여러 요청을 처리하는 구조&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;비동기 Event-Driven 구조 : Event Handler에서 비동기 방식으로 먼저 처리되는 요청을 진행&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;코어 모듈이 Apache보다 적은 리소스로도 많은 트래픽을 효율적으로 처리 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;C10K 문제란,&lt;/b&gt;&lt;br /&gt;서버 트래픽량이 높아져서 서버에 동시 연결된 커넥션이 많아졌을 때 더 이상 커넥션을 형성하지 못하는 문제.&lt;br /&gt;&lt;br /&gt;아파치에서는 커넥션마다 프로세스를 할당 하기에, 동시 연결된 커넥션이 10000개인 경우, 10000개의 프로세스가 할당되어야 하고, 프로세스마다 1M의 메모리를 사용한다면 10000M의 메모리 = 약 9.76G의 메모리가 필요해지는 등 메모리 부족 현상이 나타나 커넥션을 연결할 수 없는 문제가 발생함.&lt;br /&gt;&lt;br /&gt;이러한 구조적 문제를 해결하기 위해 적은 메모리와 프로세스로 대량의 동시 연결을 처리할 수 있는 비동기 이벤트 기반 구조의 NGINX 서버를 개발함.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;어떤 서버를 사용할까?&lt;/h3&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;.htacess 파일을 활용하거나 NGINX에게 없는 핵심 모듈을 사용할 경우 Apache를 사용하며, 빠른 정적 컨텐츠를 처리하고 싶고 대용량 트래픽을 처리하는 웹 사이트인 경우는 NGINX를 사용하면 됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;또한, 두 서버를 함께 사용해도 된다. Apache 앞단에 NGINX를 프록시 서버로 활용할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;NGINX에서 동시 커넥션 유지를 해주고 + static 리소스를 바로 제공해주면서, 동적 리소스가 필요한 요청만 Apache로 보낼 수 있음&lt;/li&gt;
&lt;li&gt;NGINX와 Apache가 같은 네트워크 안에 있는 경우, NGINX의 SSL 터미네이션 기능 활용이 가능. 클라이언트와 NGINX서버까지는 https 통신을 하고, NGINX와 Apache 사이에는 http 통신을 함으로써 Apache 서버가 복호화 과정을 감당하지 않도록 하여 부하를 줄임&lt;/li&gt;
&lt;/ul&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;a href=&quot;https://daram.tistory.com/532&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://daram.tistory.com/532&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bentist.tistory.com/80&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bentist.tistory.com/80&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ssdragon.tistory.com/60&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://ssdragon.tistory.com/60&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://sorjfkrh5078.tistory.com/289&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://sorjfkrh5078.tistory.com/289&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://idchowto.com/web-server-program-apache-vs-nginx/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://idchowto.com/web-server-program-apache-vs-nginx/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://jungyu09.tistory.com/12&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://jungyu09.tistory.com/12&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Web_mechanics/What_is_a_web_server&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Web_mechanics/What_is_a_web_server&lt;/a&gt;&lt;/p&gt;</description>
      <category>서버,데스크탑/Apache</category>
      <category>apache</category>
      <category>nginx</category>
      <category>웹서버</category>
      <author>LifeCoding</author>
      <guid isPermaLink="true">https://life-coding.tistory.com/166</guid>
      <comments>https://life-coding.tistory.com/166#entry166comment</comments>
      <pubDate>Fri, 16 Feb 2024 02:33:17 +0900</pubDate>
    </item>
    <item>
      <title>[아파치 로그 분석 툴] GoAccess 설치 &amp;amp; 실행하기</title>
      <link>https://life-coding.tistory.com/164</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://goaccess.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;goaccess&lt;/a&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;오픈 소스로된 실시간 웹 로그 분석기&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GoAccess&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;is an &lt;b&gt;open source&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;real-time&lt;/span&gt;&amp;nbsp;web log analyzer&lt;/b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;and interactive viewer that runs in a&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;terminal&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;in *nix systems or through your&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;browser&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;.&lt;/span&gt; &lt;/span&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;1. 설치&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1-1. 소스 다운받아서 수동 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://goaccess.io/download&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://goaccess.io/download&lt;/a&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1707891200944&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ wget https://tar.goaccess.io/goaccess-1.9.1.tar.gz
$ tar -xzvf goaccess-1.9.1.tar.gz
$ cd goaccess-1.9.1/
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
$ make install&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1-2. 패키지 매니저로 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지 매니저로 설치 시, 최신버전 설치가 안될 수 있음. 최신버전 설치를 위해서는 소스 다운받아서 수동 설치하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CentOS&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #f5f5f5; color: #4d4e53; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ yum install goaccess&lt;/code&gt;&lt;/pre&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;h3 data-ke-size=&quot;size23&quot;&gt;2. 실행&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://goaccess.io/get-started&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://goaccess.io/get-started&lt;/a&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2-1. 터미널 Output&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) goaccess 실행&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #f5f5f5; color: #4d4e53; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;goaccess /var/log/httpd/access.log -c&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 로그 포맷 선택 화면이 나옴. 화살표로 본인에게 맞는 설정으로 이동 후, 스페이스바 눌러 선택 (내 경우는 맨 처음 나오는 NCSA Combined Log Format 선택)&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;3) 로그 포맷이 다르면, 해당 메뉴로 이동하여 수정&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;4) 엔터 누르면 goaccess 실행됨&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;5) 내용 살펴보기&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;- 해당 메뉴에서 다음 페이지 정보 보고 싶으면 Page Up/Down 버튼 누름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 해당 메뉴에서 빠져 나오려면 q&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2-2. Static HTML Output&lt;/h4&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #f5f5f5; color: #4d4e53; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;goaccess /var/log/httpd/access.log -o report.html --log-format=COMBINED&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2-3. Real-Time HTML Output&lt;/h4&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #f5f5f5; color: #4d4e53; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;goaccess /var/log/httpd/access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html&lt;/code&gt;&lt;/pre&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;&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;a href=&quot;https://www.oss.kr/info_techtip/show/93661cc3-1f20-413e-b80c-c80164342b9b?page=6&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.oss.kr/info_techtip/show/93661cc3-1f20-413e-b80c-c80164342b9b?page=6&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/jogilsang/222123572581&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://m.blog.naver.com/jogilsang/222123572581&lt;/a&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;</description>
      <category>서버,데스크탑/Apache</category>
      <category>goaccess</category>
      <category>아파치로그분석</category>
      <category>웹로그분석</category>
      <author>LifeCoding</author>
      <guid isPermaLink="true">https://life-coding.tistory.com/164</guid>
      <comments>https://life-coding.tistory.com/164#entry164comment</comments>
      <pubDate>Wed, 14 Feb 2024 15:22:38 +0900</pubDate>
    </item>
  </channel>
</rss>