<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://asadal.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://asadal.github.io/" rel="alternate" type="text/html" /><updated>2026-05-17T00:03:56+00:00</updated><id>https://asadal.github.io/feed.xml</id><title type="html">gretele</title><subtitle>life is short. run.</subtitle><entry><title type="html">백준 1629 - 곱셈</title><link href="https://asadal.github.io/2022-05-12-%EA%B3%B1%EC%85%88/" rel="alternate" type="text/html" title="백준 1629 - 곱셈" /><published>2022-05-12T00:00:00+00:00</published><updated>2022-05-12T00:00:00+00:00</updated><id>https://asadal.github.io/%EA%B3%B1%EC%85%88</id><content type="html" xml:base="https://asadal.github.io/2022-05-12-%EA%B3%B1%EC%85%88/"><![CDATA[<h5 id="문제">문제</h5>

<blockquote>
  <p>자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오.</p>
</blockquote>

<h5 id="입력">입력</h5>

<blockquote>
  <p>첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.</p>
</blockquote>

<h5 id="출력">출력</h5>

<blockquote>
  <p>첫째 줄에 A를 B번 곱한 수를 C로 나눈 나머지를 출력한다.</p>
</blockquote>

<p>분할정복 문제다. 문제만 보고 <code class="language-plaintext highlighter-rouge">a**b%c</code> 식으로 순진하게 풀었다간 100% 시간초과가 나온다. 어떻게 풀지 몰라서 한참 헤맸다.</p>

<p>핵심은 간단하다. 반으로 쪼개 미리 계산한 다음, 둘을 다시 곱해주면 된다. 이때 <code class="language-plaintext highlighter-rouge">b</code>가 중요한데, 홀수냐 짝수냐에 따라 다르다.</p>

<ul>
  <li>짝수라면, 반을 나눠 계산한 다음 둘을 곱해주면 된다. 즉 <code class="language-plaintext highlighter-rouge">a**(b//2)</code>를 먼저 계산하고, 이를  <code class="language-plaintext highlighter-rouge">(a**(b//2))*(a**(b//2))</code> 식으로 두 번 곱한 다음 <code class="language-plaintext highlighter-rouge">%2</code>를 써서 나머지를 구하면 된다.</li>
  <li>홀수라면, 위와 같이 계산하되 <code class="language-plaintext highlighter-rouge">%2</code>를 하기 전에 둘을 곱한 값에 <code class="language-plaintext highlighter-rouge">a</code>를 한 번 더 곱해준다.</li>
</ul>

<p>그러니까, <code class="language-plaintext highlighter-rouge">a = 10, b = 10, c = 12</code>라면</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">((</span><span class="mi">10</span><span class="o">**</span><span class="mi">5</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="mi">10</span><span class="o">**</span><span class="mi">5</span><span class="p">))</span> <span class="o">%</span> <span class="mi">12</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">a = 10, b = 11, c = 12</code>라면</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">((</span><span class="mi">10</span><span class="o">**</span><span class="mi">5</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="mi">10</span><span class="o">**</span><span class="mi">5</span><span class="p">)</span> <span class="o">*</span> <span class="mi">10</span><span class="p">)</span> <span class="o">%</span> <span class="mi">12</span>
</code></pre></div></div>

<p>가 된다.</p>

<p>이렇게 함수를 만들어 재귀로 돌며 푸는 것이 핵심.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">sys</span>
<span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">sys</span><span class="p">.</span><span class="n">stdin</span><span class="p">.</span><span class="n">readline</span><span class="p">().</span><span class="n">split</span><span class="p">())</span>

<span class="k">def</span> <span class="nf">power</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
    <span class="k">if</span> <span class="n">b</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
        <span class="k">return</span> <span class="n">a</span><span class="o">%</span><span class="n">c</span> <span class="c1"># b가 1이면 a를 나눈 나머지를 바로 리턴.
</span>    <span class="k">else</span><span class="p">:</span>
        <span class="n">tmp</span> <span class="o">=</span> <span class="n">power</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="o">//</span><span class="mi">2</span><span class="p">)</span> <span class="c1"># a의 (b//2)근을 먼저 구한다.
</span>        <span class="k">if</span> <span class="n">b</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="c1"># b가 짝수면
</span>            <span class="k">return</span> <span class="p">(</span><span class="n">tmp</span><span class="o">*</span><span class="n">tmp</span><span class="p">)</span><span class="o">%</span><span class="n">c</span> <span class="c1"># tmp를 두 번 곱해주고 c로 나눈 나머지를 반환
</span>        <span class="k">else</span><span class="p">:</span> <span class="c1"># b가 홀수면
</span>            <span class="k">return</span> <span class="p">(</span><span class="n">tmp</span><span class="o">*</span><span class="n">tmp</span><span class="o">*</span><span class="n">a</span><span class="p">)</span><span class="o">%</span><span class="n">c</span> <span class="c1"># tmp를 두 번 곱한 값에 a를 한 번 더 곱한 다음, c로 나눈 나머지를 반환
</span>
<span class="k">print</span><span class="p">(</span><span class="n">power</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">))</span>
</code></pre></div></div>

<p>[<a href="https://www.acmicpc.net/problem/1629">문제 보기</a>]</p>]]></content><author><name>asadal</name></author><category term="python" /><category term="파이썬" /><category term="백준" /><category term="곱셈" /><category term="분할정복" /><summary type="html"><![CDATA[문제]]></summary></entry><entry><title type="html">백준 1629 - 곱셈</title><link href="https://asadal.github.io/2022-05-12-%EA%B3%B1%EC%85%88/" rel="alternate" type="text/html" title="백준 1629 - 곱셈" /><published>2022-05-12T00:00:00+00:00</published><updated>2022-05-12T00:00:00+00:00</updated><id>https://asadal.github.io/%EA%B3%B1%EC%85%88</id><content type="html" xml:base="https://asadal.github.io/2022-05-12-%EA%B3%B1%EC%85%88/"><![CDATA[<h5 id="문제">문제</h5>

<blockquote>
  <p>자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오.</p>
</blockquote>

<h5 id="입력">입력</h5>

<blockquote>
  <p>첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.</p>
</blockquote>

<h5 id="출력">출력</h5>

<blockquote>
  <p>첫째 줄에 A를 B번 곱한 수를 C로 나눈 나머지를 출력한다.</p>
</blockquote>

<p>분할정복 문제다. 문제만 보고 <code class="language-plaintext highlighter-rouge">a**b%c</code> 식으로 순진하게 풀었다간 100% 시간초과가 나온다. 어떻게 풀지 몰라서 한참 헤맸다.</p>

<p>핵심은 간단하다. 반으로 쪼개 미리 계산한 다음, 둘을 다시 곱해주면 된다. 이때 <code class="language-plaintext highlighter-rouge">b</code>가 중요한데, 홀수냐 짝수냐에 따라 다르다.</p>

<ul>
  <li>짝수라면, 반을 나눠 계산한 다음 둘을 곱해주면 된다. 즉 <code class="language-plaintext highlighter-rouge">a**(b//2)</code>를 먼저 계산하고, 이를  <code class="language-plaintext highlighter-rouge">(a**(b//2))*(a**(b//2))</code> 식으로 두 번 곱한 다음 <code class="language-plaintext highlighter-rouge">%2</code>를 써서 나머지를 구하면 된다.</li>
  <li>홀수라면, 위와 같이 계산하되 <code class="language-plaintext highlighter-rouge">%2</code>를 하기 전에 둘을 곱한 값에 <code class="language-plaintext highlighter-rouge">a</code>를 한 번 더 곱해준다.</li>
</ul>

<p>그러니까, <code class="language-plaintext highlighter-rouge">a = 10, b = 10, c = 12</code>라면</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">((</span><span class="mi">10</span><span class="o">**</span><span class="mi">5</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="mi">10</span><span class="o">**</span><span class="mi">5</span><span class="p">))</span> <span class="o">%</span> <span class="mi">12</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">a = 10, b = 11, c = 12</code>라면</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">((</span><span class="mi">10</span><span class="o">**</span><span class="mi">5</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="mi">10</span><span class="o">**</span><span class="mi">5</span><span class="p">)</span> <span class="o">*</span> <span class="mi">10</span><span class="p">)</span> <span class="o">%</span> <span class="mi">12</span>
</code></pre></div></div>

<p>가 된다.</p>

<p>이렇게 함수를 만들어 재귀로 돌며 푸는 것이 핵심.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">sys</span>
<span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">sys</span><span class="p">.</span><span class="n">stdin</span><span class="p">.</span><span class="n">readline</span><span class="p">().</span><span class="n">split</span><span class="p">())</span>

<span class="k">def</span> <span class="nf">power</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
    <span class="k">if</span> <span class="n">b</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
        <span class="k">return</span> <span class="n">a</span><span class="o">%</span><span class="n">c</span> <span class="c1"># b가 1이면 a를 나눈 나머지를 바로 리턴.
</span>    <span class="k">else</span><span class="p">:</span>
        <span class="n">tmp</span> <span class="o">=</span> <span class="n">power</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="o">//</span><span class="mi">2</span><span class="p">)</span> <span class="c1"># a의 (b//2)근을 먼저 구한다.
</span>        <span class="k">if</span> <span class="n">b</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="c1"># b가 짝수면
</span>            <span class="k">return</span> <span class="p">(</span><span class="n">tmp</span><span class="o">*</span><span class="n">tmp</span><span class="p">)</span><span class="o">%</span><span class="n">c</span> <span class="c1"># tmp를 두 번 곱해주고 c로 나눈 나머지를 반환
</span>        <span class="k">else</span><span class="p">:</span> <span class="c1"># b가 홀수면
</span>            <span class="k">return</span> <span class="p">(</span><span class="n">tmp</span><span class="o">*</span><span class="n">tmp</span><span class="o">*</span><span class="n">a</span><span class="p">)</span><span class="o">%</span><span class="n">c</span> <span class="c1"># tmp를 두 번 곱한 값에 a를 한 번 더 곱한 다음, c로 나눈 나머지를 반환
</span>
<span class="k">print</span><span class="p">(</span><span class="n">power</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">))</span>
</code></pre></div></div>

<p>[<a href="https://www.acmicpc.net/problem/1629">문제 보기</a>]</p>]]></content><author><name>asadal</name></author><category term="python" /><category term="파이썬" /><category term="백준" /><category term="곱셈" /><category term="분할정복" /><summary type="html"><![CDATA[문제]]></summary></entry><entry><title type="html">백준 2309 - 일곱 난쟁이</title><link href="https://asadal.github.io/2022-04-22-%EC%9D%BC%EA%B3%B1-%EB%82%9C%EC%9F%81%EC%9D%B4/" rel="alternate" type="text/html" title="백준 2309 - 일곱 난쟁이" /><published>2022-04-22T00:00:00+00:00</published><updated>2022-04-22T00:00:00+00:00</updated><id>https://asadal.github.io/%EC%9D%BC%EA%B3%B1%20%EB%82%9C%EC%9F%81%EC%9D%B4</id><content type="html" xml:base="https://asadal.github.io/2022-04-22-%EC%9D%BC%EA%B3%B1-%EB%82%9C%EC%9F%81%EC%9D%B4/"><![CDATA[<h5 id="문제">문제</h5>

<blockquote>
  <p>왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌 아홉 명이었던 것이다.</p>

  <p>아홉 명의 난쟁이는 모두 자신이 “백설 공주와 일곱 난쟁이”의 주인공이라고 주장했다. 뛰어난 수학적 직관력을 가지고 있던 백설공주는, 다행스럽게도 일곱 난쟁이의 키의 합이 100이 됨을 기억해 냈다.</p>

  <p>아홉 난쟁이의 키가 주어졌을 때, 백설공주를 도와 일곱 난쟁이를 찾는 프로그램을 작성하시오.</p>
</blockquote>

<h5 id="입력">입력</h5>

<blockquote>
  <p>아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.</p>
</blockquote>

<h5 id="출력">출력</h5>

<blockquote>
  <p>일곱 난쟁이의 키를 오름차순으로 출력한다. 일곱 난쟁이를 찾을 수 없는 경우는 없다.</p>
</blockquote>

<p>브루트포스 알고리즘. 처음부터 끝까지 무식하게 대입하는 방법이다.</p>

<p>핵심은 9개 숫자 가운데 포함되지 않는 두 수를 찾아내 빼는 것. 그걸 파악하고 나면 푸는 건 어렵지 않다.</p>

<div class="language-py highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">l</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="nb">input</span><span class="p">())</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">9</span><span class="p">)]</span>
<span class="n">total</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="n">l</span><span class="p">)</span>
<span class="n">m</span><span class="p">,</span> <span class="n">n</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">9</span><span class="p">):</span>
  <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">9</span><span class="p">):</span>
    <span class="k">if</span> <span class="n">total</span> <span class="o">-</span> <span class="p">(</span><span class="n">l</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">+</span><span class="n">l</span><span class="p">[</span><span class="n">j</span><span class="p">])</span> <span class="o">==</span> <span class="mi">100</span> <span class="ow">and</span> <span class="n">l</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">!=</span> <span class="n">l</span><span class="p">[</span><span class="n">j</span><span class="p">]:</span>
        <span class="n">m</span> <span class="o">=</span> <span class="n">l</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
        <span class="n">n</span><span class="o">=</span> <span class="n">l</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
        <span class="k">break</span>
<span class="n">l</span><span class="p">.</span><span class="n">remove</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
<span class="n">l</span><span class="p">.</span><span class="n">remove</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
<span class="n">ans</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">l</span><span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="o">*</span><span class="n">ans</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s">'</span><span class="se">\n</span><span class="s">'</span><span class="p">)</span>
</code></pre></div></div>

<p>[<a href="https://www.acmicpc.net/problem/2309">문제 보기</a>]</p>]]></content><author><name>asadal</name></author><category term="python" /><category term="파이썬" /><category term="백준" /><category term="브루트포스" /><category term="정렬" /><summary type="html"><![CDATA[문제]]></summary></entry><entry><title type="html">[파이썬] break, continue, pass</title><link href="https://asadal.github.io/2022-03-23-break,-continue,-pass/" rel="alternate" type="text/html" title="[파이썬] break, continue, pass" /><published>2022-03-23T00:00:00+00:00</published><updated>2022-03-23T00:00:00+00:00</updated><id>https://asadal.github.io/break,%20continue,%20pass</id><content type="html" xml:base="https://asadal.github.io/2022-03-23-break,-continue,-pass/"><![CDATA[<h5 id="파이썬-반복문에서-break-continue-pass의-차이">파이썬 반복문에서 break, continue, pass의 차이</h5>

<p>알고보면 간단하지만, 초보 입장에선 늘 헷갈리는 명령어가 이거다. <code class="language-plaintext highlighter-rouge">break</code>와 <code class="language-plaintext highlighter-rouge">pass</code>, <code class="language-plaintext highlighter-rouge">continue</code> 세 가지. 셋 다 반복문에서 쓰이는데 경우에 따라 반복문을 종료하거나, 건너뛰거나, 그대로 이어가도록 해주는 역할을 한다. break는 상대적으로 명확하지만 pass와 continue는 한동안 안 쓰다보면 금세 헷갈리곤 하더라. 이참에 정리해두는 게 좋을 듯.</p>

<h4 id="1-break">1. break</h4>

<p>break 선언문은 그 뜻에서 보듯 역할이 명확하다. 그 즉시 반복문을 끝내고 빠져나오는 역할.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">):</span>
  <span class="k">if</span> <span class="n">num</span> <span class="o">==</span> <span class="mi">5</span><span class="p">:</span>
    <span class="k">break</span>
  <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"이번 숫자는 </span><span class="si">{</span><span class="n">num</span><span class="si">}</span><span class="s">입니다."</span><span class="p">)</span>
</code></pre></div></div>

<p>이 반복문을 돌렸을 때 결과는 아래와 같다.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="s">"이번 숫자는 0입니다."</span>
<span class="s">"이번 숫자는 1입니다."</span>
<span class="s">"이번 숫자는 2입니다."</span>
<span class="s">"이번 숫자는 3입니다."</span>
<span class="s">"이번 숫자는 4입니다."</span>
</code></pre></div></div>

<p>반복문이 0부터 10까지 차례로 값을 보내다 5가 나오면 자동으로 반복문을 끝내고 빠져나온다. 아래는 비밀번호 입력창을 for문과 break로 구현한 예시.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">for</span> <span class="k">pass</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">):</span> <span class="c1"># 입력 기회는 3번 제공.
</span>	<span class="n">passwd</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s">"</span><span class="se">\n</span><span class="s">비밀번호를 입력하세요: "</span><span class="p">)</span>
  <span class="k">if</span> <span class="n">passwd</span> <span class="o">==</span> <span class="s">'Python'</span><span class="p">:</span>
    <span class="k">print</span><span class="p">(</span><span class="s">"비밀번호가 일치합니다.</span><span class="se">\n</span><span class="s">다음 단계로 진행하세요."</span><span class="p">)</span>
    <span class="n">beak</span>
  <span class="k">else</span><span class="p">:</span>
    <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"비밀번호가 일치하지 않습니다. </span><span class="si">{</span><span class="k">pass</span><span class="si">}</span><span class="s">회 시도했습니다."</span><span class="p">)</span>
</code></pre></div></div>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">비밀번호를</span> <span class="n">입력하세요</span><span class="p">:</span> <span class="n">Java</span>
<span class="n">비밀번호가</span> <span class="n">일치하지</span> <span class="n">않습니다</span><span class="p">.</span> <span class="mi">1</span><span class="n">회</span> <span class="n">시도했습니다</span><span class="p">.</span>

<span class="n">비밀번호를</span> <span class="n">입력하세요</span><span class="p">:</span> <span class="n">Python</span>
<span class="n">비밀번호가</span> <span class="n">일치합니다</span><span class="p">.</span>
<span class="n">다음</span> <span class="n">단계로</span> <span class="n">진행하세요</span><span class="p">.</span>
</code></pre></div></div>

<h4 id="2-continue">2. continue</h4>

<p>continue와 pass 모두 반복문을 계속 이어가는 의미를 담은 것 같지만, 둘의 쓰임새는 다르다. 반복문 중간에 continue 선언문을 만나면 그 자리에서 더 진행하지 않고 반복문 처음으로 돌아간다. 설명이 어렵지만 예문을 보면 쉽게 이해할 수 있다.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">):</span>
  <span class="k">if</span> <span class="n">num</span> <span class="o">==</span> <span class="mi">5</span><span class="p">:</span>
    <span class="k">continue</span>
  <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"이번 숫자는 </span><span class="si">{</span><span class="n">num</span><span class="si">}</span><span class="s">입니다."</span><span class="p">)</span>
</code></pre></div></div>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">0</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">1</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">2</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">3</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">4</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">6</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">7</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">8</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">9</span><span class="n">입니다</span><span class="p">.</span>
</code></pre></div></div>

<p>0부터 9까지 돌다가 num 값이 5가 되면 아래로 내려가지 않고 반복문으로 돌아가 다음 인자를 진행한다. 그래서 숫자 5가 인자로 주어졌을 땐 print 출력 결과가 빠졌다.</p>

<h4 id="3-pass">3. pass</h4>

<p>pass는 continue처럼 그 자리에서 멈추고 다음 반복문을 진행하는 게 아니라 그대로 아래로 통과하는 선언문이다. 위와 같은 코드에서 continue를 pass로 바꾸면 결과는 아래와 같다.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">):</span>
  <span class="k">if</span> <span class="n">num</span> <span class="o">==</span> <span class="mi">5</span><span class="p">:</span>
    <span class="k">pass</span>
  <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"이번 숫자는 </span><span class="si">{</span><span class="n">num</span><span class="si">}</span><span class="s">입니다."</span><span class="p">)</span>
</code></pre></div></div>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">0</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">1</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">2</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">3</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">4</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">5</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">6</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">7</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">8</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">9</span><span class="n">입니다</span><span class="p">.</span>
</code></pre></div></div>

<p>continue와 달리 pass는 반복문 처음으로 돌아가지 않고 해당 반복문을 그대로 실행한다. 즉, 아무 것도 하지 않고 해당 반복문을 계속 이어간다. 그래서 5 인자가 주어졌을 때도 그 뒤에 이어지는 print 명령을 실행한다.</p>

<p>한 반복문에서 contunue와 pass를 함께 써보면 그 차이를 보다 명확히 알 수 있다.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">5</span><span class="p">):</span>
    <span class="k">pass</span>
    <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"이번 숫자는 </span><span class="si">{</span><span class="n">num</span><span class="si">}</span><span class="s">입니다."</span><span class="p">)</span>
    <span class="k">print</span><span class="p">(</span><span class="s">"이것은 'pass' 뒤에 인쇄되는 문구입니다."</span><span class="p">)</span>
    <span class="k">continue</span>
    <span class="k">print</span><span class="p">(</span><span class="s">"이것은 'continue' 뒤에 인쇄되는 문구입니다."</span><span class="p">)</span>
</code></pre></div></div>

<div class="language-py highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">0</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이것은</span> <span class="s">'pass'</span> <span class="n">뒤에</span> <span class="n">인쇄되는</span> <span class="n">문구입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">1</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이것은</span> <span class="s">'pass'</span> <span class="n">뒤에</span> <span class="n">인쇄되는</span> <span class="n">문구입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">2</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이것은</span> <span class="s">'pass'</span> <span class="n">뒤에</span> <span class="n">인쇄되는</span> <span class="n">문구입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">3</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이것은</span> <span class="s">'pass'</span> <span class="n">뒤에</span> <span class="n">인쇄되는</span> <span class="n">문구입니다</span><span class="p">.</span>
<span class="n">이번</span> <span class="n">숫자는</span> <span class="mi">4</span><span class="n">입니다</span><span class="p">.</span>
<span class="n">이것은</span> <span class="s">'pass'</span> <span class="n">뒤에</span> <span class="n">인쇄되는</span> <span class="n">문구입니다</span><span class="p">.</span>
</code></pre></div></div>

<p>반복문이 continue를 만나면 진행을 멈추고 처음으로 돌아가 다음 반복문을 실행한다. 그러니 반복문이 끝날 때까지 continue 뒤에 붙은 print 명령은 실행되지 않는다.</p>

<p>그렇다면…</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">):</span>
  <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"이번 숫자는 </span><span class="si">{</span><span class="n">num</span><span class="si">}</span><span class="s">입니다."</span><span class="p">)</span>
</code></pre></div></div>

<p>라고 하면 되지 왜 굳이 중간에 pass가 포함된 조건문을 붙였을까.</p>

<p>pass는 대개 나중에 쓸 함수 자리를 미리 만들어둘 때 쓴다. 코드를 제대로 실행하기 위해 <code class="language-plaintext highlighter-rouge">def</code>를 사용해 함수를 정의해둬야 하는데, 지금 당장은 다른 코드 작업을 먼저 해야 할 때 함수 자리를 ‘찜’해두는 것이다.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">get_title</span><span class="p">():</span>
  <span class="k">pass</span>
</code></pre></div></div>

<p>일단 함수 자리를 지정해두고 코드는 나중에 짜자. 다른 코드를 먼저 짜면서 실행해봐도 pass가 들어 있는 함수는 에러를 내지 않는다. pass 없이 <code class="language-plaintext highlighter-rouge">def get_title():</code>만 입력해두면 중간에 코드를 디버깅할 때 저 위치에서 오류를 뱉어내므로 진행이 안 된다.</p>

<p>반복문에서 예외처리를 할 때도 pass를 쓴다. 요건 다음에 예제를… :)</p>]]></content><author><name>asadal</name></author><category term="python" /><category term="파이썬" /><category term="break" /><category term="pass" /><category term="continue" /><summary type="html"><![CDATA[파이썬 반복문에서 break, continue, pass의 차이]]></summary></entry><entry><title type="html">구글 클라우드 플랫폼에서 워드프레스 SSH 접속</title><link href="https://asadal.github.io/2022-01-28-%EA%B5%AC%EA%B8%80-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%ED%94%8C%EB%9E%AB%ED%8F%BC%EC%97%90-%EC%84%A4%EC%B9%98%ED%95%9C-%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4%EC%97%90-SSH-%EC%A0%91%EC%86%8D/" rel="alternate" type="text/html" title="구글 클라우드 플랫폼에서 워드프레스 SSH 접속" /><published>2022-01-28T00:00:00+00:00</published><updated>2022-01-28T00:00:00+00:00</updated><id>https://asadal.github.io/%EA%B5%AC%EA%B8%80%20%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C%20%ED%94%8C%EB%9E%AB%ED%8F%BC%EC%97%90%20%EC%84%A4%EC%B9%98%ED%95%9C%20%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4%EC%97%90%20SSH%20%EC%A0%91%EC%86%8D</id><content type="html" xml:base="https://asadal.github.io/2022-01-28-%EA%B5%AC%EA%B8%80-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%ED%94%8C%EB%9E%AB%ED%8F%BC%EC%97%90-%EC%84%A4%EC%B9%98%ED%95%9C-%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4%EC%97%90-SSH-%EC%A0%91%EC%86%8D/"><![CDATA[<p>낡은 노트북에 우분투를 깔아 개인용 웹서버로 바꾸고 워드프레스를 설치해 써 왔다. 그러다 사내 웹진 개설에 따른 보안 문제로, <a href="https://console.cloud.google.com/">구글 클라우드 플랫폼</a>으로 갈아탔다. 클릭 몇 번으로 간단히 가상머신 환경으로 워드프레스를 설치할 수 있어 무척 쉽고 편리하다.</p>

<p>그런데 문제가 생겼다. 고유주소를 기본(일반)이 아닌 다른 방식으로 설정하니 접속 오류가 발생했다. 아파치 웹서버 설정을 바꿔주면 해결되는 문제인데, 구글 클라우드 서비스에 SSH 접속하는 방법을 모르겠다. 처음 써보니 당연하지.</p>

<p>구글링해 보니 간단하네. 갈 수록 희미해지는 기억 탓에, 기록을 위해 남겨둔다.</p>

<ol>
  <li>
    <p>구글 클라우드 플랫폼에서 내 프로젝트로 접속한 뒤 ‘Compute Engine’으로 들어간다.</p>
  </li>
  <li>
    <p>‘VM 인스턴스’에서 워드프레스를 골라 ‘SSH 접속’ 선택.</p>
  </li>
  <li>
    <p>‘apache2.conf’ 파일 열기.</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo nano /etc/apache2/apache2.conf
</code></pre></div>    </div>
  </li>
  <li>
    <p>‘&lt;Directory /var/www/&gt;’ 항목의 ‘AllowOverride’를 ‘NONE’에서 ‘ALL’로 수정.</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;Directory /var/www/&gt;
	Options Indexes FollowSymLinks
	AllowOverride ALL
	Require all granted
&lt;/Directory&gt;
</code></pre></div>    </div>
  </li>
  <li>
    <p>아파치 서버 재시작.</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo service apache2 restart
</code></pre></div>    </div>
  </li>
</ol>

<p>이제 고유주소를 다른 형식으로 바꿔도 제대로 접속된다. :)</p>]]></content><author><name>asadal</name></author><category term="GCP" /><category term="워드프레스" /><category term="구글 클라우드 플랫폼" /><category term="WP" /><category term="Wordpress" /><category term="SSH" /><summary type="html"><![CDATA[낡은 노트북에 우분투를 깔아 개인용 웹서버로 바꾸고 워드프레스를 설치해 써 왔다. 그러다 사내 웹진 개설에 따른 보안 문제로, 구글 클라우드 플랫폼으로 갈아탔다. 클릭 몇 번으로 간단히 가상머신 환경으로 워드프레스를 설치할 수 있어 무척 쉽고 편리하다.]]></summary></entry><entry><title type="html">구글 클라우드 플랫폼에서 워드프레스 SSH 접속</title><link href="https://asadal.github.io/2022-01-28-%EA%B5%AC%EA%B8%80-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%ED%94%8C%EB%9E%AB%ED%8F%BC%EC%97%90-%EC%84%A4%EC%B9%98%ED%95%9C-%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4%EC%97%90-SSH-%EC%A0%91%EC%86%8D/" rel="alternate" type="text/html" title="구글 클라우드 플랫폼에서 워드프레스 SSH 접속" /><published>2022-01-28T00:00:00+00:00</published><updated>2022-01-28T00:00:00+00:00</updated><id>https://asadal.github.io/%EA%B5%AC%EA%B8%80%20%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C%20%ED%94%8C%EB%9E%AB%ED%8F%BC%EC%97%90%20%EC%84%A4%EC%B9%98%ED%95%9C%20%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4%EC%97%90%20SSH%20%EC%A0%91%EC%86%8D</id><content type="html" xml:base="https://asadal.github.io/2022-01-28-%EA%B5%AC%EA%B8%80-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%ED%94%8C%EB%9E%AB%ED%8F%BC%EC%97%90-%EC%84%A4%EC%B9%98%ED%95%9C-%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4%EC%97%90-SSH-%EC%A0%91%EC%86%8D/"><![CDATA[<p>낡은 노트북에 우분투를 깔아 개인용 웹서버로 바꾸고 워드프레스를 설치해 써 왔다. 그러다 사내 웹진 개설에 따른 보안 문제로, <a href="https://console.cloud.google.com/">구글 클라우드 플랫폼</a>으로 갈아탔다. 클릭 몇 번으로 간단히 가상머신 환경으로 워드프레스를 설치할 수 있어 무척 쉽고 편리하다.</p>

<p>그런데 문제가 생겼다. 고유주소를 기본(일반)이 아닌 다른 방식으로 설정하니 접속 오류가 발생했다. 아파치 웹서버 설정을 바꿔주면 해결되는 문제인데, 구글 클라우드 서비스에 SSH 접속하는 방법을 모르겠다. 처음 써보니 당연하지.</p>

<p>구글링해 보니 간단하네. 갈 수록 희미해지는 기억 탓에, 기록을 위해 남겨둔다.</p>

<ol>
  <li>
    <p>구글 클라우드 플랫폼에서 내 프로젝트로 접속한 뒤 ‘Compute Engine’으로 들어간다.</p>
  </li>
  <li>
    <p>‘VM 인스턴스’에서 워드프레스를 골라 ‘SSH 접속’ 선택.</p>
  </li>
  <li>
    <p>‘apache2.conf’ 파일 열기.</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo nano /etc/apache2/apache2.conf
</code></pre></div>    </div>
  </li>
  <li>
    <p>‘&lt;Directory /var/www/&gt;’ 항목의 ‘AllowOverride’를 ‘NONE’에서 ‘ALL’로 수정.</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;Directory /var/www/&gt;
	Options Indexes FollowSymLinks
	AllowOverride ALL
	Require all granted
&lt;/Directory&gt;
</code></pre></div>    </div>
  </li>
  <li>
    <p>아파치 서버 재시작.</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo service apache2 restart
</code></pre></div>    </div>
  </li>
</ol>

<p>이제 고유주소를 다른 형식으로 바꿔도 제대로 접속된다. :)</p>]]></content><author><name>asadal</name></author><category term="GCP" /><category term="워드프레스" /><category term="구글 클라우드 플랫폼" /><category term="WP" /><category term="Wordpress" /><category term="SSH" /><summary type="html"><![CDATA[낡은 노트북에 우분투를 깔아 개인용 웹서버로 바꾸고 워드프레스를 설치해 써 왔다. 그러다 사내 웹진 개설에 따른 보안 문제로, 구글 클라우드 플랫폼으로 갈아탔다. 클릭 몇 번으로 간단히 가상머신 환경으로 워드프레스를 설치할 수 있어 무척 쉽고 편리하다.]]></summary></entry><entry><title type="html">우분투용 Docker, MySQL, Apache2, PHP8.1</title><link href="https://asadal.github.io/2022-01-06-apache2,-mysql,-php/" rel="alternate" type="text/html" title="우분투용 Docker, MySQL, Apache2, PHP8.1" /><published>2022-01-06T00:00:00+00:00</published><updated>2022-01-06T00:00:00+00:00</updated><id>https://asadal.github.io/apache2,%20mysql,%20php</id><content type="html" xml:base="https://asadal.github.io/2022-01-06-apache2,-mysql,-php/"><![CDATA[<h1 id="도커">도커</h1>

<h3 id="시작">시작</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo service docker start
$ sudo docker-compose up -d
</code></pre></div></div>

<h3 id="동작-중인-컨테이너-확인">동작 중인 컨테이너 확인</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ docker ps
</code></pre></div></div>

<h3 id="정지된-컨테이너-확인">정지된 컨테이너 확인</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ docker ps -a
</code></pre></div></div>

<h3 id="시작-시-자동-실행">시작 시 자동 실행</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo systemctl enable docker.service 
$ sudo systemctl enable containerd.service
</code></pre></div></div>

<h3 id="컨테이너-실행-중지">컨테이너 실행 중지</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ docker stop [
</code></pre></div></div>

<h3 id="컨테이너-삭제">컨테이너 삭제</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ docker rm [컨테이너ID]
</code></pre></div></div>

<h3 id="컨테이너-여러-개-삭제">컨테이너 여러 개 삭제</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ docker rm [컨테이너ID], [컨테이너ID]
</code></pre></div></div>

<h3 id="컨테이너-모두-삭제">컨테이너 모두 삭제</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ docker rm `docker ps -a -q`
</code></pre></div></div>

<h3 id="현재-이미지-확인">현재 이미지 확인</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ docker images
</code></pre></div></div>

<h3 id="이미지-삭제">이미지 삭제</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ docker rmi [이미지ID]
</code></pre></div></div>

<h3 id="컨테이너를-삭제하기-전에-이미지를-삭제할-경우">컨테이너를 삭제하기 전에 이미지를 삭제할 경우</h3>

<h4 id="-f를-붙이면-컨테이너도-강제-삭제">-f를 붙이면 컨테이너도 강제 삭제</h4>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ docker rmi -f [이미지ID]
</code></pre></div></div>

<hr />

<h1 id="mysql">MySQL</h1>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ mysql -u root -i
</code></pre></div></div>

<h3 id="모든-권한-부여">모든 권한 부여</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># MySQL 7 이하
mysql&gt; grant all privileges on [DB이름].* to '계정ID'@'%' identified by '비밀번호' with grant option; # 계정 생성 &amp; 모든 권한 부여
mysql&gt; flush privileges;
# MySQL 8
mysql&gt; create  user '계정ID'@'%' identified by '비밀번호'; # 계정 생성
mysql&gt; grant all privileges on [DB이름].* to '계정ID'@'%' with grant option;
mysql&gt; flush privileges;
</code></pre></div></div>

<hr />

<h1 id="apache2">Apache2</h1>

<h3 id="시작-중지-재시작-상태-보기">시작, 중지, 재시작, 상태 보기</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo service apache2 start
$ sudo service apache2 stop
$ sudo service apache2 restart
$ sudo service apache2 status
</code></pre></div></div>

<hr />

<h1 id="php-81">PHP 8.1</h1>

<h3 id="설치">설치</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt isntall php8.1-common php8.1-cli -y
</code></pre></div></div>

<h3 id="버전-확인">버전 확인</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>php -v # Show PHP version
php -m # Show PHP modules loaded.
</code></pre></div></div>

<h3 id="서버-api-설치">서버 API 설치</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt install php8.1-fpm libapache2-mod-php8.1
</code></pre></div></div>

<h3 id="확장-프로그램-설치">확장 프로그램 설치</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt install php8.1-{bcmath,bz2,cgi,cli,curl,dba,dev,enchant,fpm,gd,gmp,imap,interbase,intl,ldap,mbstring,mysql,odbc,opcache,pgsql,phpdbg,pspell,readline,snmp,soap,sqlite3,sybase,tidy,xml,xmlrpc,zip,,xsl}
</code></pre></div></div>

<h3 id="php81-시작재시작">PHP8.1 시작/재시작</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo service php8.1-fpm start
sudo service php8.1-fpm restart
</code></pre></div></div>

<h3 id="시작-시-자동-실행-1">시작 시 자동 실행</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo systemctl enable apache2.service # Apache2
sudo systemctl enable mysql # MySQL
sudo systemctl enable php8.1-fpm # PHP
</code></pre></div></div>]]></content><author><name>asadal</name></author><category term="python" /><category term="파이썬" /><category term="백준" /><category term="순열" /><category term="permutations" /><category term="factorial" /><summary type="html"><![CDATA[도커]]></summary></entry><entry><title type="html">우분투에 워드프레스 설치하기</title><link href="https://asadal.github.io/2021-11-28-%EC%9A%B0%EB%B6%84%ED%88%AC%EC%97%90-%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/" rel="alternate" type="text/html" title="우분투에 워드프레스 설치하기" /><published>2021-11-28T00:00:00+00:00</published><updated>2021-11-28T00:00:00+00:00</updated><id>https://asadal.github.io/%EC%9A%B0%EB%B6%84%ED%88%AC%EC%97%90%20%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4%20%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0</id><content type="html" xml:base="https://asadal.github.io/2021-11-28-%EC%9A%B0%EB%B6%84%ED%88%AC%EC%97%90-%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/"><![CDATA[<h5 id="우분투2004-lts--apache2--mysql--php74--wordpress">우분투20.04 LTS + Apache2 + MySQL + PHP7.4 + Wordpress</h5>

<p>이틀을 꼬박 날렸다.</p>

<p>AWS 프리 티어는 얼마 쓰지 않은 것 같은데 벌써 무료 용량이 다 찼다고 알림이 왔다. 속 편하게 유료로 쓸까 하다가, 테스트 웹사이트를 굳이 유료로 쓸 건 없다 싶어 대안을 찾았다. 10년도 더 된 구닥다리 노트북을 밀고 우분투를 깔기로 했다. 리눅스 기반이니 간단한 웹서버는 구축할 수 있으리라 여겼다.</p>

<p>서버 관련 지식이 전무하기에, 웬만한 건 구글링으로 해결했다. 여러 블로그를 뒤져가며 하나씩 따라하다보니 사이트가 만들어졌다. 시행착오가 좀 있었지만 결국 개설했다.</p>

<p>순서는 이렇다.</p>

<ul>
  <li>USB 부팅 디스크 + 우분투 ISO</li>
  <li>노트북에 우분투 설치</li>
  <li>Apache2 + MySQL + PHP7.4(AMP) 설치</li>
  <li>워드프레스 설치</li>
</ul>

<p>중간에 설정할 것들도 많고 오류도 잡아줘야 한다. 다음에 다시 작업할 때를 대비해 대략 순서를 기록해 둔다.</p>

<ul>
  <li>
    <p>우분투 부팅 USB + ISO 준비.</p>
  </li>
  <li>
    <p>USB로 부팅해 우분투 설치</p>
  </li>
  <li>
    <p>우분투에 APM 설치</p>
  </li>
  <li>
    <ul>
      <li>
        <p>우분투 패키지 업데이트</p>

        <ul>
          <li>
            <ul>
              <li>
                <p>등록된 저장소 내 패키지 정보를 최신으로 업데이트</p>

                <ul>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo apt update
</code></pre></div>                    </div>
                  </li>
                  <li>
                    <p>시스템에 설치된 패키지 업그레이드</p>
                  </li>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo apt upgrade
</code></pre></div>                    </div>
                  </li>
                  <li>
                    <p>불필요한 패키지 자동 삭제</p>
                  </li>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo apt autoremove
</code></pre></div>                    </div>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <p>Apache2 설치</p>
          </li>
          <li>
            <ul>
              <li>
                <p>Apache2 설치</p>

                <ul>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo apt install apache2
</code></pre></div>                    </div>
                  </li>
                  <li>
                    <p>아파치 서버 시작</p>
                  </li>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo service apache2 start
</code></pre></div>                    </div>
                  </li>
                  <li>
                    <p>아파치 서버 중지</p>
                  </li>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo service apache2 stop
</code></pre></div>                    </div>
                  </li>
                  <li>
                    <p>아파치 서버 재시작</p>
                  </li>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo service apache2 restart
</code></pre></div>                    </div>
                  </li>
                  <li>
                    <p>부팅할 때마다 자동 실행</p>
                  </li>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo update-rc.d apache2 defaults
</code></pre></div>                    </div>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <p>MySQL 설치</p>
          </li>
          <li>
            <ul>
              <li>
                <p>MySQL 설치</p>

                <ul>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo apt install mysql-server
</code></pre></div>                    </div>
                  </li>
                  <li>
                    <p>보안 스크립트 실행</p>
                  </li>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo mysql_secure_installation
</code></pre></div>                    </div>
                  </li>
                  <li>
                    <p>재부팅 시 자동 실행 설정</p>
                  </li>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo update-rc.d -f mysql defaults
</code></pre></div>                    </div>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <p>PHP 7.4 설치 (Aphache와 MySQL 먼저 설치한 뒤 PHP 설치해야 함)</p>
          </li>
          <li>
            <ul>
              <li>PHP 7.4 설치. Apache2와 MySQL 모듈도 함께 설치</li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li>
    <ul>
      <li>
        <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    $ sudo apt install php libapache2-mod-php-mysql
</code></pre></div>        </div>

        <p>​</p>

        <ul>
          <li>
            <p>PHP 익스텐션 목록 보기</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ apt list php-* php7.4-*
</code></pre></div>            </div>
          </li>
          <li>
            <p>기본 익스텐션 설치</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo apt install php-{bz2,imagick,imap,intl,gd,mbstring,pspell,curl,readline,xml,xmlrpc,zip}
</code></pre></div>            </div>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li>
    <ul>
      <li>
        <p>워드프레스 필수 패키지 설치</p>

        <ul>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo systemctl enable php7.4-fpm
</code></pre></div>            </div>
          </li>
          <li>
            <p>재부팅시 자동 시작 설정</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo systemctl start php7.4-fpm
</code></pre></div>            </div>
          </li>
          <li>
            <p>설정 적용</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo systemctl reload php7.4-fpm
</code></pre></div>            </div>
          </li>
          <li>
            <p>php.ini 설정</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo nano /etc/php/7.4/fpm/php.ini
</code></pre></div>            </div>
          </li>
          <li>
            <p>아래 항목 찾아서 수정</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  short_open_tag = On
  memory_limit = 256M
  cgi.fix_pathinfo = 0
  upload_max_filesize = 100M
  post_max_size = 101M
  max_execution_time = 360
  date.timezone = Asia/Seoul
</code></pre></div>            </div>
          </li>
          <li>
            <p>index.php 생성</p>
          </li>
          <li>
            <ul>
              <li>
                <p>‘/var/www/html’로 이동해 index.php 만들고 내용 입력</p>

                <ul>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ cd /var/www/html
  $ sudo nano index.php
  &lt;?php
  phpinfo();
  저장
</code></pre></div>                    </div>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <p>php-gd 라이브러리 설치</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $sudo apt-get install php-gd
</code></pre></div>            </div>
          </li>
          <li>
            <p>mod_rewrite 활성화</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo a2enmod rewrite
</code></pre></div>            </div>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li>
    <ul>
      <li>
        <p>MySQL 로그인</p>

        <ul>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ mysql -u root -p
</code></pre></div>            </div>
          </li>
          <li>
            <p>wordpress 데이터베이스 생성</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  MySQL&gt; CREATE DATABASE wordpress;
</code></pre></div>            </div>
          </li>
          <li>
            <p>ID &amp; PW 설정</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  MySQL&gt; CREATE USER 'asadal'@'localhost' IDENTIFIED BY 'password_here';
</code></pre></div>            </div>
          </li>
          <li>
            <p>asadal 에게 DB 권한 부여</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  MySQL&gt; GRANT ALL ON wordpress.* TO 'asadal'@'localhost' WITH GRANT OPTION;
</code></pre></div>            </div>
          </li>
          <li>
            <p>저장 후 빠져나오기</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  MySQL&gt; FLUSH PRIVILEGES;
  MySQL&gt; EXIT;
</code></pre></div>            </div>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li>
    <p>Wordpress 최신 한글 버전 설치</p>
  </li>
  <li>
    <ul>
      <li>
        <p>파일 다운로드</p>

        <ul>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo wget https://ko.wordpress.org/latest-ko_KR.tar.gz
</code></pre></div>            </div>
          </li>
          <li>
            <p>압축 해제</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo tar -xvzf latest-ko_KR.tar.gz
</code></pre></div>            </div>
          </li>
          <li>
            <p>압축 파일 삭제</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo rm -rf /var/www/html/wordpress/latest-ko_KR.tar.gz
</code></pre></div>            </div>
          </li>
          <li>
            <p>루트 폴더로 워드프레스 파일 이동</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo mv /var/www/html/wordpress/* /var/www/html/
</code></pre></div>            </div>
          </li>
          <li>
            <p>wordpress 폴더 삭제</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo rm -rf /var/www/html/wordpress
</code></pre></div>            </div>
          </li>
          <li>
            <p>루트 폴더로 이동</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ cd /var/www/html
</code></pre></div>            </div>
          </li>
          <li>
            <p>권한 부여</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  sudo chown -R www-data:www-data /var/www/html/
  sudo chmod -R 755 /var/www/html/
</code></pre></div>            </div>
          </li>
          <li>
            <p>Apache2 재시작</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo service apache2 restart
</code></pre></div>            </div>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li>
    <p>Wordpress 설정</p>
  </li>
  <li>
    <ul>
      <li>
        <p>http://127.0.0.1 접속해 워드프레스 설치 완료</p>

        <ul>
          <li>
            <p>도메인 연결</p>
          </li>
          <li>
            <ul>
              <li>
                <p>아래 파일로 접속</p>

                <ul>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo nano /etc/apache2/sites-enabled/000-default.conf
</code></pre></div>                    </div>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <p>도메인 연결 설정</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  ; 도메인 연결(http://www.cloudflare.com 접속해 사전 설정)
  ServerName asadal.ga 
  ServerAdmin asadal@hani.co.kr
  ServerAlias www.asadal.ga
  DocumentRoot /var/www/html
</code></pre></div>            </div>
          </li>
          <li>
            <p>wp-config.php 파일 수정</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo nano /var/www/html/wp-config.php
</code></pre></div>            </div>
          </li>
          <li>
            <p>sFTP 연결 모드 우회 설정</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  define('FS_METHOD', 'direct');
</code></pre></div>            </div>
          </li>
          <li>
            <p>참고 : 기본 wp-config.php 설정</p>
          </li>
          <li>
            <ul>
              <li>랜덤키 발생 사이트 : https://api.wordpress.org/secret-key/1.1/salt/</li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li>
    <ul>
      <li>
        <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    define('DB_NAME', 'wordpress');
    define('DB_USER', 'asadal');
    define('DB_PASSWORD', 'password_here');
    define('FS_METHOD', 'direct');
    define('AUTH_KEY',         '*+B12Um|BC@Jj4[rxz&gt;7GmV$_Gydplm]e_DH=**{HmdBO&amp;et~{60?-]buAH[|}0A');
    define('SECURE_AUTH_KEY',  '}@zH6`5ucI+D)J:-ttBXK~UAuEp8Zkv,exwJsN^yqExkbHW|=BP+0-K;m]a9moa4');
    define('LOGGED_IN_KEY',    'RVk%SCn`vKteLoI+$@Ip9eO+Wzd&lt;-gC M?+m3kUfpe}LyWETlN ENnmm)~x/}10[');
    define('NONCE_KEY',        '3_iup&lt;b|+xUW$K0&lt;p&lt;&gt;[c^Bm1o*:kI]e3M`fS1p#FC |s=*5lSbo|b9I+H?wz+I}');
    define('AUTH_SALT',        '8-@O*c2WU-;83+dC&gt;B[c60&gt;GpWu`VWz^`+iZexB&gt;f ZyTE[sN4{#X[W$uR9y77Wc');
    define('SECURE_AUTH_SALT', 'CU(3ZT*x8nA5xiV)hV&amp;iJ_N+8b%%cOxn&amp;;TY8kpigfyHY7NeAE|Q~ep f+6Og7&amp;B');
    define('LOGGED_IN_SALT',   'Uzp!iS_^}kZY-Pw@-+v?D=%m4D1+xI.N1DpCP{v)x+ap:LIp&amp;+EwMkH5@dvmKAr3');
    define('NONCE_SALT',       'yDfpy+/:9F0@9i,&gt;[JogZ+81{+-LiRz1a+a/.0zI+dTIWy|;m%T-.4fgu2-G|=PF');
</code></pre></div>        </div>
      </li>
      <li>wp-config.php 기본 설정(추가)</li>
    </ul>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/** Memory Limit */
define( 'WP_MEMORY_LIMIT', '256M' );
  
/** Multisite */
define( 'WP_ALLOW_MULTISITE', true );
</code></pre></div>    </div>

    <ul>
      <li>
        <ul>
          <li>참고 : 멀티사이트 추가하기 : https://avada.tistory.com/2138</li>
        </ul>
      </li>
      <li>참고 : 워드프레스 글 저장시 ‘응답이 유효한 JSON 응답이 아닙니다’ 오류가 날 때
        <ul>
          <li>
            <ul>
              <li>https://h-sk.net/forums/topic/144811/</li>
            </ul>
          </li>
          <li>
            <p>참고 : 포트포워딩</p>
          </li>
          <li>
            <ul>
              <li>https://m.blog.naver.com/seoulworkshop/221265052717
                <ul>
                  <li>https://www.thewordcracker.com/basic/how-to-install-wordpress-in-local-computers/</li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

<p>참고 :</p>

<ul>
  <li>https://yoshikixdrum.tistory.com/214</li>
  <li>https://blog.wsgvet.com/ubuntu-20-04-install-wordpress-php7-4/</li>
  <li>https://swiftcoding.org/wp-config-file</li>
</ul>]]></content><author><name>asadal</name></author><category term="우분투" /><category term="ubuntu" /><category term="Apache2" /><category term="워드프레스" /><category term="wordpress" /><category term="MySQL" /><category term="PHP7.4" /><summary type="html"><![CDATA[우분투20.04 LTS + Apache2 + MySQL + PHP7.4 + Wordpress]]></summary></entry><entry><title type="html">우분투에 워드프레스 설치하기</title><link href="https://asadal.github.io/2021-11-28-%EC%9A%B0%EB%B6%84%ED%88%AC%EC%97%90-%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/" rel="alternate" type="text/html" title="우분투에 워드프레스 설치하기" /><published>2021-11-28T00:00:00+00:00</published><updated>2021-11-28T00:00:00+00:00</updated><id>https://asadal.github.io/%EC%9A%B0%EB%B6%84%ED%88%AC%EC%97%90%20%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4%20%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0</id><content type="html" xml:base="https://asadal.github.io/2021-11-28-%EC%9A%B0%EB%B6%84%ED%88%AC%EC%97%90-%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/"><![CDATA[<h5 id="우분투2004-lts--apache2--mysql--php74--wordpress">우분투20.04 LTS + Apache2 + MySQL + PHP7.4 + Wordpress</h5>

<p>이틀을 꼬박 날렸다.</p>

<p>AWS 프리 티어는 얼마 쓰지 않은 것 같은데 벌써 무료 용량이 다 찼다고 알림이 왔다. 속 편하게 유료로 쓸까 하다가, 테스트 웹사이트를 굳이 유료로 쓸 건 없다 싶어 대안을 찾았다. 10년도 더 된 구닥다리 노트북을 밀고 우분투를 깔기로 했다. 리눅스 기반이니 간단한 웹서버는 구축할 수 있으리라 여겼다.</p>

<p>서버 관련 지식이 전무하기에, 웬만한 건 구글링으로 해결했다. 여러 블로그를 뒤져가며 하나씩 따라하다보니 사이트가 만들어졌다. 시행착오가 좀 있었지만 결국 개설했다.</p>

<p>순서는 이렇다.</p>

<ul>
  <li>USB 부팅 디스크 + 우분투 ISO</li>
  <li>노트북에 우분투 설치</li>
  <li>Apache2 + MySQL + PHP7.4(AMP) 설치</li>
  <li>워드프레스 설치</li>
</ul>

<p>중간에 설정할 것들도 많고 오류도 잡아줘야 한다. 다음에 다시 작업할 때를 대비해 대략 순서를 기록해 둔다.</p>

<ul>
  <li>
    <p>우분투 부팅 USB + ISO 준비.</p>
  </li>
  <li>
    <p>USB로 부팅해 우분투 설치</p>
  </li>
  <li>
    <p>우분투에 APM 설치</p>
  </li>
  <li>
    <ul>
      <li>
        <p>우분투 패키지 업데이트</p>

        <ul>
          <li>
            <ul>
              <li>
                <p>등록된 저장소 내 패키지 정보를 최신으로 업데이트</p>

                <ul>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo apt update
</code></pre></div>                    </div>
                  </li>
                  <li>
                    <p>시스템에 설치된 패키지 업그레이드</p>
                  </li>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo apt upgrade
</code></pre></div>                    </div>
                  </li>
                  <li>
                    <p>불필요한 패키지 자동 삭제</p>
                  </li>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo apt autoremove
</code></pre></div>                    </div>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <p>Apache2 설치</p>
          </li>
          <li>
            <ul>
              <li>
                <p>Apache2 설치</p>

                <ul>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo apt install apache2
</code></pre></div>                    </div>
                  </li>
                  <li>
                    <p>아파치 서버 시작</p>
                  </li>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo service apache2 start
</code></pre></div>                    </div>
                  </li>
                  <li>
                    <p>아파치 서버 중지</p>
                  </li>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo service apache2 stop
</code></pre></div>                    </div>
                  </li>
                  <li>
                    <p>아파치 서버 재시작</p>
                  </li>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo service apache2 restart
</code></pre></div>                    </div>
                  </li>
                  <li>
                    <p>부팅할 때마다 자동 실행</p>
                  </li>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo update-rc.d apache2 defaults
</code></pre></div>                    </div>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <p>MySQL 설치</p>
          </li>
          <li>
            <ul>
              <li>
                <p>MySQL 설치</p>

                <ul>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo apt install mysql-server
</code></pre></div>                    </div>
                  </li>
                  <li>
                    <p>보안 스크립트 실행</p>
                  </li>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo mysql_secure_installation
</code></pre></div>                    </div>
                  </li>
                  <li>
                    <p>재부팅 시 자동 실행 설정</p>
                  </li>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo update-rc.d -f mysql defaults
</code></pre></div>                    </div>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <p>PHP 7.4 설치 (Aphache와 MySQL 먼저 설치한 뒤 PHP 설치해야 함)</p>
          </li>
          <li>
            <ul>
              <li>PHP 7.4 설치. Apache2와 MySQL 모듈도 함께 설치</li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li>
    <ul>
      <li>
        <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    $ sudo apt install php libapache2-mod-php-mysql
</code></pre></div>        </div>

        <p>​</p>

        <ul>
          <li>
            <p>PHP 익스텐션 목록 보기</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ apt list php-* php7.4-*
</code></pre></div>            </div>
          </li>
          <li>
            <p>기본 익스텐션 설치</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo apt install php-{bz2,imagick,imap,intl,gd,mbstring,pspell,curl,readline,xml,xmlrpc,zip}
</code></pre></div>            </div>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li>
    <ul>
      <li>
        <p>워드프레스 필수 패키지 설치</p>

        <ul>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo systemctl enable php7.4-fpm
</code></pre></div>            </div>
          </li>
          <li>
            <p>재부팅시 자동 시작 설정</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo systemctl start php7.4-fpm
</code></pre></div>            </div>
          </li>
          <li>
            <p>설정 적용</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo systemctl reload php7.4-fpm
</code></pre></div>            </div>
          </li>
          <li>
            <p>php.ini 설정</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo nano /etc/php/7.4/fpm/php.ini
</code></pre></div>            </div>
          </li>
          <li>
            <p>아래 항목 찾아서 수정</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  short_open_tag = On
  memory_limit = 256M
  cgi.fix_pathinfo = 0
  upload_max_filesize = 100M
  post_max_size = 101M
  max_execution_time = 360
  date.timezone = Asia/Seoul
</code></pre></div>            </div>
          </li>
          <li>
            <p>index.php 생성</p>
          </li>
          <li>
            <ul>
              <li>
                <p>‘/var/www/html’로 이동해 index.php 만들고 내용 입력</p>

                <ul>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ cd /var/www/html
  $ sudo nano index.php
  &lt;?php
  phpinfo();
  저장
</code></pre></div>                    </div>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <p>php-gd 라이브러리 설치</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $sudo apt-get install php-gd
</code></pre></div>            </div>
          </li>
          <li>
            <p>mod_rewrite 활성화</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo a2enmod rewrite
</code></pre></div>            </div>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li>
    <ul>
      <li>
        <p>MySQL 로그인</p>

        <ul>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ mysql -u root -p
</code></pre></div>            </div>
          </li>
          <li>
            <p>wordpress 데이터베이스 생성</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  MySQL&gt; CREATE DATABASE wordpress;
</code></pre></div>            </div>
          </li>
          <li>
            <p>ID &amp; PW 설정</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  MySQL&gt; CREATE USER 'asadal'@'localhost' IDENTIFIED BY 'password_here';
</code></pre></div>            </div>
          </li>
          <li>
            <p>asadal 에게 DB 권한 부여</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  MySQL&gt; GRANT ALL ON wordpress.* TO 'asadal'@'localhost' WITH GRANT OPTION;
</code></pre></div>            </div>
          </li>
          <li>
            <p>저장 후 빠져나오기</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  MySQL&gt; FLUSH PRIVILEGES;
  MySQL&gt; EXIT;
</code></pre></div>            </div>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li>
    <p>Wordpress 최신 한글 버전 설치</p>
  </li>
  <li>
    <ul>
      <li>
        <p>파일 다운로드</p>

        <ul>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo wget https://ko.wordpress.org/latest-ko_KR.tar.gz
</code></pre></div>            </div>
          </li>
          <li>
            <p>압축 해제</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo tar -xvzf latest-ko_KR.tar.gz
</code></pre></div>            </div>
          </li>
          <li>
            <p>압축 파일 삭제</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo rm -rf /var/www/html/wordpress/latest-ko_KR.tar.gz
</code></pre></div>            </div>
          </li>
          <li>
            <p>루트 폴더로 워드프레스 파일 이동</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo mv /var/www/html/wordpress/* /var/www/html/
</code></pre></div>            </div>
          </li>
          <li>
            <p>wordpress 폴더 삭제</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo rm -rf /var/www/html/wordpress
</code></pre></div>            </div>
          </li>
          <li>
            <p>루트 폴더로 이동</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ cd /var/www/html
</code></pre></div>            </div>
          </li>
          <li>
            <p>권한 부여</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  sudo chown -R www-data:www-data /var/www/html/
  sudo chmod -R 755 /var/www/html/
</code></pre></div>            </div>
          </li>
          <li>
            <p>Apache2 재시작</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo service apache2 restart
</code></pre></div>            </div>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li>
    <p>Wordpress 설정</p>
  </li>
  <li>
    <ul>
      <li>
        <p>http://127.0.0.1 접속해 워드프레스 설치 완료</p>

        <ul>
          <li>
            <p>도메인 연결</p>
          </li>
          <li>
            <ul>
              <li>
                <p>아래 파일로 접속</p>

                <ul>
                  <li>
                    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo nano /etc/apache2/sites-enabled/000-default.conf
</code></pre></div>                    </div>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <p>도메인 연결 설정</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  ; 도메인 연결(http://www.cloudflare.com 접속해 사전 설정)
  ServerName asadal.ga 
  ServerAdmin asadal@hani.co.kr
  ServerAlias www.asadal.ga
  DocumentRoot /var/www/html
</code></pre></div>            </div>
          </li>
          <li>
            <p>wp-config.php 파일 수정</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ sudo nano /var/www/html/wp-config.php
</code></pre></div>            </div>
          </li>
          <li>
            <p>sFTP 연결 모드 우회 설정</p>
          </li>
          <li>
            <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  define('FS_METHOD', 'direct');
</code></pre></div>            </div>
          </li>
          <li>
            <p>참고 : 기본 wp-config.php 설정</p>
          </li>
          <li>
            <ul>
              <li>랜덤키 발생 사이트 : https://api.wordpress.org/secret-key/1.1/salt/</li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li>
    <ul>
      <li>
        <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    define('DB_NAME', 'wordpress');
    define('DB_USER', 'asadal');
    define('DB_PASSWORD', 'password_here');
    define('FS_METHOD', 'direct');
    define('AUTH_KEY',         '*+B12Um|BC@Jj4[rxz&gt;7GmV$_Gydplm]e_DH=**{HmdBO&amp;et~{60?-]buAH[|}0A');
    define('SECURE_AUTH_KEY',  '}@zH6`5ucI+D)J:-ttBXK~UAuEp8Zkv,exwJsN^yqExkbHW|=BP+0-K;m]a9moa4');
    define('LOGGED_IN_KEY',    'RVk%SCn`vKteLoI+$@Ip9eO+Wzd&lt;-gC M?+m3kUfpe}LyWETlN ENnmm)~x/}10[');
    define('NONCE_KEY',        '3_iup&lt;b|+xUW$K0&lt;p&lt;&gt;[c^Bm1o*:kI]e3M`fS1p#FC |s=*5lSbo|b9I+H?wz+I}');
    define('AUTH_SALT',        '8-@O*c2WU-;83+dC&gt;B[c60&gt;GpWu`VWz^`+iZexB&gt;f ZyTE[sN4{#X[W$uR9y77Wc');
    define('SECURE_AUTH_SALT', 'CU(3ZT*x8nA5xiV)hV&amp;iJ_N+8b%%cOxn&amp;;TY8kpigfyHY7NeAE|Q~ep f+6Og7&amp;B');
    define('LOGGED_IN_SALT',   'Uzp!iS_^}kZY-Pw@-+v?D=%m4D1+xI.N1DpCP{v)x+ap:LIp&amp;+EwMkH5@dvmKAr3');
    define('NONCE_SALT',       'yDfpy+/:9F0@9i,&gt;[JogZ+81{+-LiRz1a+a/.0zI+dTIWy|;m%T-.4fgu2-G|=PF');
</code></pre></div>        </div>
      </li>
      <li>wp-config.php 기본 설정(추가)</li>
    </ul>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/** Memory Limit */
define( 'WP_MEMORY_LIMIT', '256M' );
  
/** Multisite */
define( 'WP_ALLOW_MULTISITE', true );
</code></pre></div>    </div>

    <ul>
      <li>
        <ul>
          <li>참고 : 멀티사이트 추가하기 : https://avada.tistory.com/2138</li>
        </ul>
      </li>
      <li>참고 : 워드프레스 글 저장시 ‘응답이 유효한 JSON 응답이 아닙니다’ 오류가 날 때
        <ul>
          <li>
            <ul>
              <li>https://h-sk.net/forums/topic/144811/</li>
            </ul>
          </li>
          <li>
            <p>참고 : 포트포워딩</p>
          </li>
          <li>
            <ul>
              <li>https://m.blog.naver.com/seoulworkshop/221265052717
                <ul>
                  <li>https://www.thewordcracker.com/basic/how-to-install-wordpress-in-local-computers/</li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

<p>참고 :</p>

<ul>
  <li>https://yoshikixdrum.tistory.com/214</li>
  <li>https://blog.wsgvet.com/ubuntu-20-04-install-wordpress-php7-4/</li>
  <li>https://swiftcoding.org/wp-config-file</li>
</ul>]]></content><author><name>asadal</name></author><category term="우분투" /><category term="ubuntu" /><category term="Apache2" /><category term="워드프레스" /><category term="wordpress" /><category term="MySQL" /><category term="PHP7.4" /><summary type="html"><![CDATA[우분투20.04 LTS + Apache2 + MySQL + PHP7.4 + Wordpress]]></summary></entry><entry><title type="html">아마존웹서비스(AWS)에 워드프레스 설치하기</title><link href="https://asadal.github.io/2021-11-26-AWS%EC%97%90-%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%84%9C-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/" rel="alternate" type="text/html" title="아마존웹서비스(AWS)에 워드프레스 설치하기" /><published>2021-11-26T00:00:00+00:00</published><updated>2021-11-26T00:00:00+00:00</updated><id>https://asadal.github.io/AWS%EC%97%90%20%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%84%9C%20%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0</id><content type="html" xml:base="https://asadal.github.io/2021-11-26-AWS%EC%97%90-%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%84%9C-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/"><![CDATA[<h4 id="준비">준비</h4>

<p>아마존웹서비스(AWS)에 워드프레스를 설치했다. 그러면서 많이 배웠다. :)</p>

<p>서버 관련 지식은 전무하다. 무엇부터 시작해야 할지 몰라 막막했다. 다행히 구글 검색으로 AWS 공식 자습서를 찾았다. 절반은 성공했다.</p>

<ul>
  <li><a href="https://aws.amazon.com/ko/getting-started/hands-on/deploy-wordpress-with-amazon-rds/">Amazon RDS에서 WordPress 배포</a></li>
</ul>

<h4 id="설치">설치</h4>

<p>처음부터 하나씩 따라가면 크게 문제될 것 없다. MySQL 데이터베이스를 만들고→엘라스틱 컴퓨트 클라우드(EC2)에서 서버 인스턴스를 만든 다음→관계형 데이터베이스(RDS)를 구성하고→워드프레스를 내려받아 설치하고 기본 설정을 잡아주면 된다. 한글과 캡처화면으로 잘 소개돼 있어, 따라하기 어렵지 않다.</p>

<p>몇 가지 난관이 있다. SSH 접속을 위해 터미널을 사용해야 한다. 기본적인 터미널 사용법을 숙지하고 있어야 한다. 모르는 명령어는 구글에 물어보면 된다. SSH 키도 잘 보관해둬야 한다. 터미널에서 키가 보관된 폴더로 찾아들어가 SSH 접속을 시도해야 서버에 접속할 수 있다.</p>

<h4 id="문제-해결">문제 해결</h4>

<h5 id="sftp-접속창-제거">sFTP 접속창 제거</h5>

<p>워드프레스를 설치하고 나면, 테마와 플러그인을 설치해야 한다. 여기서 첫 번째 난관에 부딪힌다. 마음에 드는 테마나 플러그인을 고르고 ‘설치’를 누르면 난데없이 FTP 접속 창이 뜬다. 어라? 바로 설치가 돼야지. 내가 무슨 수로 AWS 서버에 FTP(또는 sFTP)로 접속한단 말인가.</p>

<p>파일질라 같은 프로그램을 활용해 접속하는 방법도 있지만, 터미널에 충실하기로 한다. 구글링을 해보니, AWS 서버 설정을 바꿔주면 이 과정을 건너뛰고 곧바로 플러그인·테마 설치 단계로 넘어갈 수 있다고 한다.</p>

<p>터미널로 SSH 접속한 다음, 아래 명령어를 넣어주면 된다.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo chown -R apache:apache /var/www/html
</code></pre></div></div>

<p>그런 다음 서버 재부팅.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo service httpd restart
</code></pre></div></div>

<p>이제 플러그인이나 테마를 설치할 때 FTP 접속창이 안 뜬다.</p>

<h5 id="블록-편집기-저장-오류">블록 편집기 저장 오류</h5>

<p>곧이어 닥친 문제. 워드프레스 블록 편집기에서 글을 작성한 다음 저장 또는 발행하려 하면 저장이 안 되고 <code class="language-plaintext highlighter-rouge">json</code> 어쩌고 하며 에러가 뜬다. 구글링을 통해 ‘고전 편집기를 쓰라’는 둥 몇 가지 원인과 해결책을 찾았지만, 좀 복잡했고. 내가 찾은 해법은 WP가 지정해 둔 기본 글 주소를 쓰는 것. 주소 체계를 바꾸니 잘 저장되고 발행됐다. <code class="language-plaintext highlighter-rouge">설정→고유주소</code>에서 ‘사용자 정의 구조’를 쓰지 말라는 얘기.</p>

<h5 id="업로드-용량-제한-확대">업로드 용량 제한 확대</h5>

<p>이번엔 사진이 안 올라간다. WP 기본값이 파일 업로드 용량을 최대 2MB로 제한했기 때문이다. 이걸 서버에서 풀어줘야 하는데, 한참 헤맸다. 플러그인을 쓰는 방법도 있다고 하는데 나는 잘 안 됐다. 결국 찾은 방법은 AWS 서버의 <code class="language-plaintext highlighter-rouge">php.ini</code> 파일을 수정하는 것이었다. 아래처럼.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo nano /etc/php.ini # php.ini 파일 편집 모드로 들어간다.
upload_max_filesize = 100M # 한 번에 올리는 최대 파일 크기를 100MB로.
post_upload_max = 100M # 포스트 맥스 크기도 함께 올려줘야 한다.
$ sudo service httpd reload # 서버 재부팅
</code></pre></div></div>

<p>처음엔 <code class="language-plaintext highlighter-rouge">upload_max_filesize</code>만 조정해줬는데, 아무리 재부팅을 해도 적용이 안 됐다. 한참 구글링하다 거의 포기한 상태였는데, WP 대시보드 ‘사이트 건강 상태’ 메뉴에서 답을 주더라. <code class="language-plaintext highlighter-rouge">post_upload_max</code> 크기가 <code class="language-plaintext highlighter-rouge">upload_max_filesize</code>보다 작아서 파일 저장에 문제가 생길 수 있다고. 둘을 같은 크기로 맞춰주니 대용량 파일도 잘 올라간다.</p>

<h5 id="이미지-편집-오류">이미지 편집 오류</h5>

<p>이미지 편집 시 적용이 안 되고 에러가 뜨는 현상도 있다. 이건 <code class="language-plaintext highlighter-rouge">호스팅 제공업체에서 PHP를 설정할 때 그래픽 관련 GD라이브러리를 제대로 설치하지 않았기 때문</code>이라고 한다. 아무튼 서버에 GD 라이브러리를 설치해야 한다는 얘긴데.</p>

<p>역시 SSH 접속 후 아래 명령어를 넣으면 된다.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo yum install php-gd
</code></pre></div></div>

<h5 id="php-업데이트">PHP 업데이트</h5>

<p>처음 AWS 안내에 따라 WP를 설치하면 PHP7.2 버전이 활성화된다. 그래서 보안에 취약하니 어쩌니 하며 대시보드에서 계속 경고를 띄운다. 7.4 이상 버전으로 업그레이드 하란다. 이것도 방법을 몰라 한참 헤맸다. 그래도 찾아내 해결했다. <a href="https://stackoverflow.com/questions/69750798/refusing-because-php8-0-could-cause-an-invalid-combination">여기</a>를 참고했다.</p>

<p>SSH 접속 후 아래 명령어를 넣는다.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo amazon-linux-extras | grep php # 현재 활성화된 PHP 버전 확인(7.2)
</code></pre></div></div>

<p>아마 이런 화면이 뜰 것이다.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> 15  php7.2                          enabled    \
 17  **lamp-mariadb10.2-php7.2=latest  enabled**      \
  _  php7.3                          available    \
  _  php7.4                          available    [ =stable ]
  _  php8.0                          available    [ =stable ]
</code></pre></div></div>

<p>활성화된 PHP 버전들을 먼저 비활성화한다.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo amazon-linux-extras disable php7.2
$ sudo amazon-linux-extras disable lamp-mariadb10.2-php7.2
</code></pre></div></div>

<p>이제 PHP 상위 버전을 활성화하고 관련 파일들을 설치해주면 된다.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo amazon-linux-extras enable php7.4
sudo yum install php php7.4-{pear,cgi,common,curl,mbstring,gd,mysqlnd,gettext,bcmath,json,xml,fpm,intl,zip,imap}
</code></pre></div></div>

<p>요걸로 PHP 업데이트도 끝.</p>

<p>이제 플러그인과 테마를 하나씩 설치해가며 제 모양을 갖춰나가는 것만 남았다. AWS에 워드프레스 설치하고 기본 문제 해결하는 건 요기까지. :)</p>

<덧> AWS EC2 Free Tier로는 금세 용량이 차더라. 이것저것 방법을 궁리하다, 데스크톱에 우분투를 깔고 Apache2, MySQL, PHP 설치하고 워드프레스를 직접 깔았다. 켁, 또 다른 세계를 경험했다. 이에 비하면 AWS 설정은 새발의 피. 그 과정은 다음 포스트에서 소개할 예정. (배운 점 : 애플 없인 살아도 구글 없인 못 살 듯. ㅠ.ㅜ)
</덧>]]></content><author><name>asadal</name></author><category term="아마존웹서비스" /><category term="AWS" /><category term="wordpress" /><category term="워드프레스" /><category term="EC2" /><category term="RDS" /><summary type="html"><![CDATA[준비]]></summary></entry></feed>