<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>dBack</title>
    <link>https://denodo1.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 10 Apr 2026 10:02:49 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>denodo</managingEditor>
    <image>
      <title>dBack</title>
      <url>https://t1.daumcdn.net/cfile/tistory/2728B05055D6B5F204</url>
      <link>https://denodo1.tistory.com</link>
    </image>
    <item>
      <title>MariaDB 인증(Authentication) 방식에 대한 변경 및 주의 사항</title>
      <link>https://denodo1.tistory.com/362</link>
      <description>&lt;div style=&quot;color: #222222; text-align: start;&quot;&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaDB - main.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bF0sYQ/btsF2Gmj2Bb/fGskDMkyxcZxVrlK5KIKKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bF0sYQ/btsF2Gmj2Bb/fGskDMkyxcZxVrlK5KIKKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bF0sYQ/btsF2Gmj2Bb/fGskDMkyxcZxVrlK5KIKKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbF0sYQ%2FbtsF2Gmj2Bb%2FfGskDMkyxcZxVrlK5KIKKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; data-filename=&quot;MariaDB - main.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div style=&quot;background-color: #e3f2fd;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;공식&amp;nbsp;문서&amp;nbsp;참고&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;a href=&quot;https://mariadb.com/kb/en/authentication-from-mariadb-104/&quot;&gt;https://mariadb.com/kb/en/authentication-from-mariadb-104/&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;하여 작성을 하였으며, MariaDB 10.4 이상부터는 작업을 보다 쉽고 직관적으로 만들기 위해 인증 프로세스에 여러 변경 사항을 도입했다고 합니다. 그중 가장 이슈가 되는 부분은 바로 ROOT 패스워드 입력 없이 Unix_socket 방식을 이용하여 바로 DB에 접속하는 방식을 말합니다. 먼저 이것을 설명하기 위해 바로 테스트를 진행해보도록 하겠습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #e8f5e9;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #009a87; color: #ffffff;&quot;&gt;&lt;b&gt;[테스트&amp;nbsp;환경]&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;□&amp;nbsp;&lt;b&gt;OS&lt;/b&gt;&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;Rocky&amp;nbsp;Linux&amp;nbsp;release&amp;nbsp;8.5&amp;nbsp;(Green&amp;nbsp;Obsidian)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;□&amp;nbsp;&lt;b&gt;DB&lt;/b&gt;&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;10.3.28-MariaDB&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;□&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;DB&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;10.4.24-MariaDB [10.4.X 이상]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;□&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;DB&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;10.6.7-MariaDB&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;◇ 먼저 설치 직 후에는 패스워드가 설정되어 있지 않기 때문에 플러그인 상관없이 바로 접근이 됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 01.png&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;592&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tlJdn/btsF2T6LQrb/UnCIkZkj6rVeNHRoZLuvS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tlJdn/btsF2T6LQrb/UnCIkZkj6rVeNHRoZLuvS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tlJdn/btsF2T6LQrb/UnCIkZkj6rVeNHRoZLuvS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtlJdn%2FbtsF2T6LQrb%2FUnCIkZkj6rVeNHRoZLuvS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;861&quot; height=&quot;592&quot; data-filename=&quot;MariaA - 01.png&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;592&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;◇&amp;nbsp;보안 및 패스워드 설정을 위해 [&lt;span style=&quot;color: #ef5369;&quot;&gt;# mysql(mariadb)-secure-installation&lt;/span&gt;] 실행의 차이점&lt;/b&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 02.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KdkWE/btsF1dyL1j8/O4opU51Yw5xeYw73KZ91k1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KdkWE/btsF1dyL1j8/O4opU51Yw5xeYw73KZ91k1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KdkWE/btsF1dyL1j8/O4opU51Yw5xeYw73KZ91k1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKdkWE%2FbtsF1dyL1j8%2FO4opU51Yw5xeYw73KZ91k1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;862&quot; height=&quot;594&quot; data-filename=&quot;MariaA - 02.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;594&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size18&quot;&gt;이후 아래와 같이 각 버전에 루트 인증을 시도해보면 다음과 같은 결과가 나옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;h&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #1a5490; color: #ffffff;&quot;&gt;&lt;b&gt;■ MariaDB 10.3 버전에서 루트(Root)로그인 인증&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div style=&quot;background-color: #f9fbe7;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[root@Rocky85&amp;nbsp;~]#&amp;nbsp;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;mysql&amp;nbsp;-u&amp;nbsp;root&amp;nbsp;-p&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;Enter password:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;[패스워드 없이 엔터만 누를 경우]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;[인증 불가]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 01.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;259&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kxUw2/btsF10k6T2n/86kSLRanGV9bKQYQumezxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kxUw2/btsF10k6T2n/86kSLRanGV9bKQYQumezxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kxUw2/btsF10k6T2n/86kSLRanGV9bKQYQumezxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkxUw2%2FbtsF10k6T2n%2F86kSLRanGV9bKQYQumezxk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;862&quot; height=&quot;259&quot; data-filename=&quot;MariaA - 01.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;259&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h2 id=&quot;h_1&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #1a5490; color: #ffffff;&quot;&gt;&lt;b&gt;■ MariaDB 10.4 이상 버전에서 루트(Root)로그인 인증[Unix_socket 방식]&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div style=&quot;background-color: #f9fbe7;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[root@Rocky85&amp;nbsp;~]#&amp;nbsp;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;mysql&amp;nbsp;-u&amp;nbsp;root&amp;nbsp;-p&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Enter password:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;[패스워드 없이 엔터만 누를 경우]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Welcome&amp;nbsp;to&amp;nbsp;the&amp;nbsp;MariaDB&amp;nbsp;monitor.&amp;nbsp;&amp;nbsp;Commands&amp;nbsp;end&amp;nbsp;with&amp;nbsp;;&amp;nbsp;or&amp;nbsp;\g.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Your&amp;nbsp;MariaDB&amp;nbsp;connection&amp;nbsp;id&amp;nbsp;is&amp;nbsp;19&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Server version: 10.4.24-MariaDB MariaDB Server&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;[패스워드 인증 없이 바로 DB 접속]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 02.png&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;289&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4kxt2/btsF0Iltmur/gmGutBo7Vduda80K6GltD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4kxt2/btsF0Iltmur/gmGutBo7Vduda80K6GltD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4kxt2/btsF0Iltmur/gmGutBo7Vduda80K6GltD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4kxt2%2FbtsF0Iltmur%2FgmGutBo7Vduda80K6GltD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;861&quot; height=&quot;289&quot; data-filename=&quot;MariaA - 02.png&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;289&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;◇&amp;nbsp;아래는 로그인 인증 플러그인 비교&lt;/b&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 05.png&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;593&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cx1YtB/btsF2FVc63Q/bYkn8wBcYFOdyYjX1jN6q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cx1YtB/btsF2FVc63Q/bYkn8wBcYFOdyYjX1jN6q0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cx1YtB/btsF2FVc63Q/bYkn8wBcYFOdyYjX1jN6q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcx1YtB%2FbtsF2FVc63Q%2FbYkn8wBcYFOdyYjX1jN6q0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;860&quot; height=&quot;593&quot; data-filename=&quot;MariaA - 05.png&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;593&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size18&quot;&gt;여기서 위 결과값을 비교를 해보았을 때 이상한 부분이 보이지 않나요? 네.. 바로 10.4.X 버전의 Plugin 부분을 보면 [mysql_native_password]으로 패스워드 인증 방식으로 되어 있지만 막상 [# mysql -u root -p]해보면 패스워드 없이 엔터만 눌러도 바로 DB로 접속되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;문서를 자세히 보면 왜 이렇게 되는지 이유를 알 수 있는데요.&lt;/p&gt;
&lt;div style=&quot;background-color: #e8f5e9;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ef5369; color: #ffffff;&quot;&gt;※(중요)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;모든 사용자 계정, 암호, 인증방식 권한은 이제 [&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;mysql.global_priv&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;] 테이블에 저장됩니다.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;[ mysql.user ]테이블은 여전히 존재하며, 이전과 정확히 동일한 컬럼 집합을 가지고 있지만 이제는&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;u&gt;&lt;b&gt;[&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;mysql.global_priv&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;]테이블을 참조하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;뷰(View)&lt;/span&gt;를 하는 역할로 바뀌게 됩니다.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 06.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;928&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmj9VG/btsF2yaMLmu/gZX5qXXIb219e4UbsvOWd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmj9VG/btsF2yaMLmu/gZX5qXXIb219e4UbsvOWd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmj9VG/btsF2yaMLmu/gZX5qXXIb219e4UbsvOWd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcmj9VG%2FbtsF2yaMLmu%2FgZX5qXXIb219e4UbsvOWd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;862&quot; height=&quot;928&quot; data-filename=&quot;MariaA - 06.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;928&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div style=&quot;background-color: #e3f2fd;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #006dd7; color: #ffffff;&quot;&gt;[설명]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;원래 이 기술은 Otto Kek&amp;auml;l&amp;auml;inen개발자 분께서 Debian MariaDB 패키지에서 개척했으며 이미 MariaDB 10.0부터 리눅스 데비안[Debian]에서 사용되어 왔다고 합니다. CentOS/RedHat 배포판에서는 10.4 버전부터 적용을 하기 시작했습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;[ Unix_socket ]을 사용하는 것은 시스템 ROOT 사용자인 경우 암호 없이 root@localhost로 로그인할 수 있음을 의미&lt;/b&gt;합니다. 그럼 왜 이렇게 적용을 했을까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;① 콘솔에서 DB에 접속하는 것은 시스템 ROOT 권한이 있는 사용자가 내부(Localhost)에만 접속을 하므로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;패스워드에는 의미가 없다는 뜻&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;② 패스워드가 없다는 뜻은 MariaDB ROOT 암호 재설정에 대한 설명서가 필요하지 않음, 즉 잊어버릴 염&lt;/b&gt;&lt;b&gt;려&lt;/b&gt;&lt;b&gt;가&amp;nbsp;없습니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;③ 암호가 없으니 일반 텍스트로 암호를 저장할 필요가 없어 노출될 일이 없다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;④&amp;nbsp;접속하기 편하다. [ # sudo mysql ] 명령어를 통해 바로 접속 할 수 있다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;가 개발자의 뜻이지만.. 과연 보안담당자들은 어떻게 볼까요. 우리가 데이터베이스에 접근을 할 때 서버가 내부 환경이면 문제가 없겠지만 웹이나 DB서버가 분리가 되어 있을 경우는 어쩔 수 없이 외부 아이피에서 접근을 해야 하는 경우가 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;보안에 취약하여 서버의 ROOT가 탈취를 당하면 데이터베이스도 자유롭게 접근이 가능하므로 이것 자체를 취약점&lt;/b&gt;로 봅니다.&lt;/p&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 id=&quot;h_2&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #1a5490; color: #ffffff;&quot;&gt;&lt;b&gt;■ 이전 패스워드 인증 밥벙으로 설정하기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이미 MariaDB를 설치 하고 root@localhost 사용자 계정이 이미 unix_socket 인증을 사용하는 경우&lt;/p&gt;
&lt;div style=&quot;background-color: #f9fbe7;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;MariaDB [mysql]&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;ALTER USER&lt;span&gt;&amp;nbsp;&lt;/span&gt;root@localhost IDENTIFIED VIA mysql_native_password USING PASSWORD(&quot;&lt;span style=&quot;color: #8a3db6;&quot;&gt;패스워드&lt;/span&gt;&quot;);&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 08.png&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;410&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dYhr08/btsF15fAOBH/QbbAGkNfSpOmHZd3nj3IO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dYhr08/btsF15fAOBH/QbbAGkNfSpOmHZd3nj3IO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dYhr08/btsF15fAOBH/QbbAGkNfSpOmHZd3nj3IO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdYhr08%2FbtsF15fAOBH%2FQbbAGkNfSpOmHZd3nj3IO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;861&quot; height=&quot;410&quot; data-filename=&quot;MariaA - 08.png&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;410&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 09.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T8hbz/btsF1IdWief/KfLiqTQ3wKKNaBF9kg2Aw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T8hbz/btsF1IdWief/KfLiqTQ3wKKNaBF9kg2Aw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T8hbz/btsF1IdWief/KfLiqTQ3wKKNaBF9kg2Aw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT8hbz%2FbtsF1IdWief%2FKfLiqTQ3wKKNaBF9kg2Aw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;862&quot; height=&quot;290&quot; data-filename=&quot;MariaA - 09.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;290&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;※ 또하나의 방법은 [ mysql_install_db (mariadb-install-db) ]를 이용한 방법입니다. 하지만 MariaDB 설치 직후 바로 실행하면 자동으로 계정을 생성하기 때문에 제외하였습니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;문서 자료&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://mariadb.com/kb/en/mysql_install_db/&quot;&gt;https://mariadb.com/kb/en/mysql_install_db/&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 id=&quot;h_3&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #1a5490; color: #ffffff;&quot;&gt;&lt;b&gt;■ 다시 [ Unix_socket ] 인증 방식으로 설정하기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div style=&quot;background-color: #f9fbe7;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;MariaDB [mysql]&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;ALTER&amp;nbsp;USER&amp;nbsp;root@localhost&amp;nbsp;IDENTIFIED&amp;nbsp;VIA&amp;nbsp;unix_socket;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 10.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;515&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGXury/btsF2PckqCH/soMfu37q70M2t19x5UCZPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGXury/btsF2PckqCH/soMfu37q70M2t19x5UCZPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGXury/btsF2PckqCH/soMfu37q70M2t19x5UCZPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGXury%2FbtsF2PckqCH%2FsoMfu37q70M2t19x5UCZPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;862&quot; height=&quot;515&quot; data-filename=&quot;MariaA - 10.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;515&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 11.png&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVBEqX/btsF2PXFTb7/E4fcQy0Ivlwm3vP6fW1Js0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVBEqX/btsF2PXFTb7/E4fcQy0Ivlwm3vP6fW1Js0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVBEqX/btsF2PXFTb7/E4fcQy0Ivlwm3vP6fW1Js0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVBEqX%2FbtsF2PXFTb7%2FE4fcQy0Ivlwm3vP6fW1Js0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;861&quot; height=&quot;214&quot; data-filename=&quot;MariaA - 11.png&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 id=&quot;h_4&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #1a5490; color: #ffffff;&quot;&gt;&lt;b&gt;■ 원격 서버[클라이언트 프로그램]에서 MariaDB접속 시 반응&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;① 원격 호스트 IP를 추가하고 Unix_socket 설정했을 때 암호 없이 접근이 가능한지 테스트&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f9fbe7;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;MariaDB [mysql]&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;grant all privileges on *.* to 'root'@'&lt;span style=&quot;color: #8a3db6;&quot;&gt;원격지IP&lt;/span&gt;' identified by '&lt;span style=&quot;color: #8a3db6;&quot;&gt;패스워드&lt;/span&gt;';&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;MariaDB&amp;nbsp;[mysql]&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;ALTER USER root@&lt;span style=&quot;color: #8a3db6;&quot;&gt;원격지IP&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;IDENTIFIED VIA unix_socket;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 12.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTeqQi/btsF3fhw4b1/6gr9Az78UisL8sDtawAffK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTeqQi/btsF3fhw4b1/6gr9Az78UisL8sDtawAffK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTeqQi/btsF3fhw4b1/6gr9Az78UisL8sDtawAffK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTeqQi%2FbtsF3fhw4b1%2F6gr9Az78UisL8sDtawAffK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;862&quot; height=&quot;364&quot; data-filename=&quot;MariaA - 12.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;364&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 13.png&quot; data-origin-width=&quot;866&quot; data-origin-height=&quot;570&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lciSF/btsF3fPmAtT/onr0sF7KzRBw0KqCuGfYVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lciSF/btsF3fPmAtT/onr0sF7KzRBw0KqCuGfYVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lciSF/btsF3fPmAtT/onr0sF7KzRBw0KqCuGfYVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlciSF%2FbtsF3fPmAtT%2Fonr0sF7KzRBw0KqCuGfYVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;866&quot; height=&quot;570&quot; data-filename=&quot;MariaA - 13.png&quot; data-origin-width=&quot;866&quot; data-origin-height=&quot;570&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 14.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5WD4L/btsF1umJuqV/Gg5evaj3g9Q5N8jnXVWtg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5WD4L/btsF1umJuqV/Gg5evaj3g9Q5N8jnXVWtg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5WD4L/btsF1umJuqV/Gg5evaj3g9Q5N8jnXVWtg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5WD4L%2FbtsF1umJuqV%2FGg5evaj3g9Q5N8jnXVWtg1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;862&quot; height=&quot;124&quot; data-filename=&quot;MariaA - 14.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;124&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;② 패스워드 인증으로 변경 후 접속 테스트&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f9fbe7;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;MariaDB [mysql]&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;ALTER USER root@192.168.150.1 IDENTIFIED VIA mysql_native_password USING PASSWORD(&quot;&lt;span style=&quot;color: #8a3db6;&quot;&gt;패스워드&lt;/span&gt;&quot;);&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 15.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kZusa/btsF2Gfxwp6/R6IobRTbXF0MFVjOqkRJuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kZusa/btsF2Gfxwp6/R6IobRTbXF0MFVjOqkRJuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kZusa/btsF2Gfxwp6/R6IobRTbXF0MFVjOqkRJuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkZusa%2FbtsF2Gfxwp6%2FR6IobRTbXF0MFVjOqkRJuk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;862&quot; height=&quot;350&quot; data-filename=&quot;MariaA - 15.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 16.png&quot; data-origin-width=&quot;866&quot; data-origin-height=&quot;775&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RHu8h/btsF04vdv57/04PymBXJ1NR12gWR3HezNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RHu8h/btsF04vdv57/04PymBXJ1NR12gWR3HezNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RHu8h/btsF04vdv57/04PymBXJ1NR12gWR3HezNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRHu8h%2FbtsF04vdv57%2F04PymBXJ1NR12gWR3HezNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;866&quot; height=&quot;775&quot; data-filename=&quot;MariaA - 16.png&quot; data-origin-width=&quot;866&quot; data-origin-height=&quot;775&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 18.png&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XZFgH/btsF1rp0E4i/SwtJFzlVva2g0veP96CkY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XZFgH/btsF1rp0E4i/SwtJFzlVva2g0veP96CkY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XZFgH/btsF1rp0E4i/SwtJFzlVva2g0veP96CkY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXZFgH%2FbtsF1rp0E4i%2FSwtJFzlVva2g0veP96CkY0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;861&quot; height=&quot;216&quot; data-filename=&quot;MariaA - 18.png&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div style=&quot;background-color: #e8f5e9;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ef5369; color: #ffffff;&quot;&gt;[결론]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #009a87; color: #ffffff;&quot;&gt;&lt;b&gt;원격은 무조건 패스워드 인증으로만 접근이 가능하다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 id=&quot;h_5&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #1a5490; color: #ffffff;&quot;&gt;&lt;b&gt;■ 실수로 ROOT 권한에 문제가 생기거나 패스워드를 잊어버렸을 경우&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff;&quot;&gt;&lt;b&gt;◇ ROOT 계정을 삭제했을 경우[예시]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f9fbe7;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;MariaDB&amp;nbsp;[mysql]&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;drop&amp;nbsp;user&amp;nbsp;root@localhost;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 19.png&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ao02k/btsF2QCdMV0/0JD8DHPw129kBKqsBZxJ0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ao02k/btsF2QCdMV0/0JD8DHPw129kBKqsBZxJ0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ao02k/btsF2QCdMV0/0JD8DHPw129kBKqsBZxJ0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAo02k%2FbtsF2QCdMV0%2F0JD8DHPw129kBKqsBZxJ0k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;861&quot; height=&quot;184&quot; data-filename=&quot;MariaA - 19.png&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size18&quot;&gt;만약 다른 계정 중에 모든 권한이 있는 일반 계정이 있다면 우회 접속하여 다시 생성하면 되겠지만, ROOT계정만으로 관리를 했다면 지금과 같은 곤란한 상황이 발생할 수 있습니다.&lt;/p&gt;
&lt;div style=&quot;background-color: #e8f5e9;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;u&gt;복원을 하기 위해서는 MariaDB를 실행을 할 때 [&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;--skip-grant-tables&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;] 이용&lt;/u&gt;합니다. 리눅스 싱글 부팅하는 것과 비슷한 원리입니다. 다만 우리는 대부분 RPM으로 설치하면 기본적으로 [ systemctl ]을 이용하여 MariaDB를 중지 실행을 하기 때문에 실제 실행 위치를 모를 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #f9fbe7;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[root@Rocky85 mysql]#&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;systemctl status mariadb&lt;/span&gt;&amp;nbsp; [스테이터스를 이용하여 스크립트 실행 로드 확인]&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 20.png&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;365&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biYCUn/btsF2SUk0zr/7B05viHCndWKprWLuRHLm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biYCUn/btsF2SUk0zr/7B05viHCndWKprWLuRHLm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biYCUn/btsF2SUk0zr/7B05viHCndWKprWLuRHLm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiYCUn%2FbtsF2SUk0zr%2F7B05viHCndWKprWLuRHLm1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;863&quot; height=&quot;365&quot; data-filename=&quot;MariaA - 20.png&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;365&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div style=&quot;background-color: #f9fbe7;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Loaded :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;/usr/lib/systemd/system/mariadb.service&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[root@Rocky85 mysql]#&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;vi /usr/lib/systemd/system/mariadb.service&lt;/span&gt;&amp;nbsp; [스크립트 파일 열기]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;ExecStart&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;부분을 확인해보면 어떤 경로에서 Mariadb를 실행하는지 알 수 있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 21.png&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;304&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CMB9l/btsF0sC7JNe/YoXOkQ2kMAwTUQGfeMMbIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CMB9l/btsF0sC7JNe/YoXOkQ2kMAwTUQGfeMMbIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CMB9l/btsF0sC7JNe/YoXOkQ2kMAwTUQGfeMMbIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCMB9l%2FbtsF0sC7JNe%2FYoXOkQ2kMAwTUQGfeMMbIK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;861&quot; height=&quot;304&quot; data-filename=&quot;MariaA - 21.png&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;304&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ee2323; color: #ffffff;&quot;&gt;&lt;b&gt;예외상황 발생①&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f3e5f5;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[root@Rocky85 mysql]#&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;/usr/sbin/mysqld --skip-grant-tables &amp;amp; [실행 오류]&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;2022-03-23&amp;nbsp;22:39:53&amp;nbsp;0&amp;nbsp;[Note]&amp;nbsp;/usr/sbin/mysqld&amp;nbsp;(mysqld&amp;nbsp;10.4.24-MariaDB)&amp;nbsp;starting&amp;nbsp;as&amp;nbsp;process&amp;nbsp;1889&amp;nbsp;...&lt;br /&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;/usr/sbin/mysqld:&amp;nbsp;Please&amp;nbsp;consult&amp;nbsp;the&amp;nbsp;Knowledge&amp;nbsp;Base&amp;nbsp;to&amp;nbsp;find&amp;nbsp;out&amp;nbsp;how&amp;nbsp;to&amp;nbsp;run&amp;nbsp;mysqld&amp;nbsp;as&amp;nbsp;root!&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;2022-03-23&amp;nbsp;22:39:53&amp;nbsp;0&amp;nbsp;[ERROR]&amp;nbsp;Aborting&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;아.. 이렇게 하면 권한 때문에 실행이 안됩니다.&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;기본 설치 data경로가 [/var/lib/mysql/] mysql 권한으로 실행되므로 다음과 같이 시스템 권한을 mysql 유저 권한으로 변경합니다. 혹시나 Passwd를 확인하여 mysql 계정이 로그인이 가능한지 확인합니다.&lt;/p&gt;
&lt;div style=&quot;background-color: #f9fbe7;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[root@Rocky85&amp;nbsp;~]#&amp;nbsp;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;cat&amp;nbsp;/etc/passwd&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;mysql&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;mysql:x:27:27:MySQL Server:/var/lib/mysql:&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;/sbin/nologin&lt;/span&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;[nologin을 /bin/bash로 변경]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[root@Rocky85&amp;nbsp;~]#&amp;nbsp;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;vi&amp;nbsp;/etc/passwd&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 22.png&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;619&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4jG6J/btsF2RHSF7b/baqI6f4PVhNFEIkgNWid30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4jG6J/btsF2RHSF7b/baqI6f4PVhNFEIkgNWid30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4jG6J/btsF2RHSF7b/baqI6f4PVhNFEIkgNWid30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4jG6J%2FbtsF2RHSF7b%2FbaqI6f4PVhNFEIkgNWid30%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;854&quot; height=&quot;619&quot; data-filename=&quot;MariaA - 22.png&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;619&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div style=&quot;background-color: #f9fbe7;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[root@Rocky85 ~]#&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;su - mysql&lt;/span&gt;&amp;nbsp; [시스템 권한 유저(mysql)로 로그인]&lt;/b&gt;&lt;br /&gt;[mysql@Rocky85 ~]$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;/usr/sbin/mysqld --skip-grant-tables &amp;amp;&amp;nbsp; [&lt;b&gt;실행 오류&lt;/b&gt;]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ef5369; color: #ffffff;&quot;&gt;&lt;b&gt;예외상황 발생②&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f3e5f5;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;2022-03-24&amp;nbsp;&amp;nbsp;0:13:28 0 [ERROR] InnoDB: Missing MLOG_CHECKPOINT at 61021 between the checkpoint 61021 and the end 61030.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;2022-03-24&amp;nbsp;&amp;nbsp;0:13:28&amp;nbsp;0&amp;nbsp;[ERROR]&amp;nbsp;InnoDB:&amp;nbsp;Plugin&amp;nbsp;initialization&amp;nbsp;aborted&amp;nbsp;with&amp;nbsp;error&amp;nbsp;Generic&amp;nbsp;error&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 23.png&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;469&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bL43kT/btsF13B8HHl/6Wlg9XeGuKDBvNpMAPby5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bL43kT/btsF13B8HHl/6Wlg9XeGuKDBvNpMAPby5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bL43kT/btsF13B8HHl/6Wlg9XeGuKDBvNpMAPby5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbL43kT%2FbtsF13B8HHl%2F6Wlg9XeGuKDBvNpMAPby5k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;854&quot; height=&quot;469&quot; data-filename=&quot;MariaA - 23.png&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;469&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size18&quot;&gt;테스트한다고 강제로 죽였다가 살렸다가 반복했더니 ib_logfile 데이터가 충돌 나는 문제가 발생했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그렇게 심각한 문제는 아니므로 다음과 같이 조치를 합니다.&lt;br /&gt;&lt;b&gt;데이터 파일이 있는 경로에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;ib_logfile을 이름을 변경(권고)&lt;/span&gt;, 또는 삭제를 합니다.&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f9fbe7;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[mysql@Rocky85 ~]$&amp;nbsp;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;cd /var/lib/mysql/&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[mysql@Rocky85 ~]$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;mv ib_logfile0 ib_logfile0.bak&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[mysql@Rocky85 ~]$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;mv ib_logfile1 ib_logfile1.bak&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 24.png&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;305&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yzO6s/btsF2QIYeJu/MbsO0ZOOTQ7Eaoz501kNjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yzO6s/btsF2QIYeJu/MbsO0ZOOTQ7Eaoz501kNjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yzO6s/btsF2QIYeJu/MbsO0ZOOTQ7Eaoz501kNjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyzO6s%2FbtsF2QIYeJu%2FMbsO0ZOOTQ7Eaoz501kNjk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;856&quot; height=&quot;305&quot; data-filename=&quot;MariaA - 24.png&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;305&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #009a87; color: #ffffff;&quot;&gt;&lt;b&gt;DB실행&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #e8f5e9;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[mysql@Rocky85 ~]$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;/usr/sbin/mysqld --skip-grant-tables &amp;amp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;[MariaDB 실행]&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;아래와 같이 정상적으로 Mysql이 실행되신 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;※ 세팅 방법에 따라 실행 권한이나 구동 방법이 다를 수 있습니다!&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 25.png&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sSzh2/btsF2R2domE/ZopzTZMv2KF5cC2CanOOWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sSzh2/btsF2R2domE/ZopzTZMv2KF5cC2CanOOWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sSzh2/btsF2R2domE/ZopzTZMv2KF5cC2CanOOWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsSzh2%2FbtsF2R2domE%2FZopzTZMv2KF5cC2CanOOWK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;853&quot; height=&quot;634&quot; data-filename=&quot;MariaA - 25.png&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;634&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size18&quot;&gt;이제 다시 MariaDB 접속을 시도합니다.&lt;/p&gt;
&lt;div style=&quot;background-color: #f9fbe7;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[mysql@Rocky85 ~]$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;mysql -u root -p&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Enter password:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;[패스워드 미입력(엔터)]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;MariaDB [(none)]&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;FLUSH PRIVILEGES;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;[접속 후 바로 해당 명령어 입력]&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 26.png&quot; data-origin-width=&quot;855&quot; data-origin-height=&quot;380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6fjUF/btsF1A8a05j/K4TsBfiuovEdJomVjEqsCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6fjUF/btsF1A8a05j/K4TsBfiuovEdJomVjEqsCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6fjUF/btsF1A8a05j/K4TsBfiuovEdJomVjEqsCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6fjUF%2FbtsF1A8a05j%2FK4TsBfiuovEdJomVjEqsCk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;855&quot; height=&quot;380&quot; data-filename=&quot;MariaA - 26.png&quot; data-origin-width=&quot;855&quot; data-origin-height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div style=&quot;background-color: #f9fbe7;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;MariaDB [(none)]&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;grant all privileges on *.* to 'root'@'localhost' identified by '&lt;span style=&quot;color: #8a3db6;&quot;&gt;패스워드&lt;/span&gt;';&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 28.png&quot; data-origin-width=&quot;855&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9rJkc/btsF1LuZHKw/idxG48UFFl7R8QxXvKu2Tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9rJkc/btsF1LuZHKw/idxG48UFFl7R8QxXvKu2Tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9rJkc/btsF1LuZHKw/idxG48UFFl7R8QxXvKu2Tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9rJkc%2FbtsF1LuZHKw%2FidxG48UFFl7R8QxXvKu2Tk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;855&quot; height=&quot;590&quot; data-filename=&quot;MariaA - 28.png&quot; data-origin-width=&quot;855&quot; data-origin-height=&quot;590&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;이제 종료를 하고 기존에 실행했던 MariaDB를 중지하고 시스템 ROOT권한으로 돌아온 후에 정상적인 방법으로 다시 구동하여 root@localhost 접속이 되는지 확인합니다. 혹시나 DB가 중지가 되지 않으면 강제 종료[ kill ] 한 후에 시도를 하면 됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MariaA - 30.png&quot; data-origin-width=&quot;855&quot; data-origin-height=&quot;424&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FOLex/btsF2vd4cOs/du1rMk9TeeOCMVYsyLCXl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FOLex/btsF2vd4cOs/du1rMk9TeeOCMVYsyLCXl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FOLex/btsF2vd4cOs/du1rMk9TeeOCMVYsyLCXl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFOLex%2FbtsF2vd4cOs%2Fdu1rMk9TeeOCMVYsyLCXl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;855&quot; height=&quot;424&quot; data-filename=&quot;MariaA - 30.png&quot; data-origin-width=&quot;855&quot; data-origin-height=&quot;424&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;※ 10.6.X 버전에서도 동일하게 되는 것을 확인하였습니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;MariaDB가 아무리 Mysql기반으로 개발이 되었지만, 계속 업데이트하면서 변하는 부분이 생기네요. 덕분에 일주일 동안 많은 시행착오를 겪으면서 좋은 경험을 하게 되었습니다. 계정을 변경하거나 삭제할 경우는 꼭 다른 계정을 생성 또는 기존 다른 유저에게 모든 권한을 부여한 후에 진행하시기 바랍니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Database/Mysql, MariaDB</category>
      <author>denodo</author>
      <guid isPermaLink="true">https://denodo1.tistory.com/362</guid>
      <comments>https://denodo1.tistory.com/362#entry362comment</comments>
      <pubDate>Sat, 23 Mar 2024 14:30:45 +0900</pubDate>
    </item>
    <item>
      <title>mariadb, mysqlDB root password 초기화</title>
      <link>https://denodo1.tistory.com/361</link>
      <description>&lt;h2 id=&quot;identify-the-server-version&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서버 버전 확인&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;실행 중인 MySQL 또는 MariaDB 서버 버전에 따라 다른 명령어로 루트 암호를 복구해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;google_ads_iframe_/21732118914,21786717481/linuxize_com-box-3_0__container__&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음 명령을 실행하여 서버 버전을 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;ada&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;mysql --version&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시스템에 MySQL이 설치되어 있는 경우 출력은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;mysql  Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using  EditLine wrapper&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;또는 MariaDB에 대해 다음과 같이 출력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;mysql  Ver 15.1 Distrib 10.3.32-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2&lt;/code&gt;&lt;/pre&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;h2 id=&quot;how-to-reset-mysql-or-mariadb-root-password&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;MySQL 또는 MariaDB 루트 비밀번호를 재설정하는 방법&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;MySQL/MariaDB 루트 비밀번호를 재설정하려면 다음 단계를 수행합니다.&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;h3 id=&quot;1-stop-the-mysqlmariadb-service&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. MySQL/MariaDB 서비스 중지&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;만일 mysql이나 mariaDB가 기동 중에 있을 경우, 루트 암호를 변경하려면 먼저 MySQL 서버를 중지해야 합니다.&amp;nbsp;&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;pre class=&quot;arduino&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;sudo systemctl stop mysql&lt;/code&gt;&lt;/pre&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;h3 id=&quot;2-start-the-mysqlmariadb-server-without-loading-the-grant-tables&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. 그랜트 테이블을 로드하지 않고 MySQL/MariaDB 서버를 시작합니다.&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그랜트 테이블을 로드하지 않고 데이터베이스 서버를 시작합니다:&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;1c&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;sudo mysqld_safe --skip-grant-tables &amp;amp;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위의 명령 끝에&amp;nbsp;있는 &amp;amp;(앰퍼샌드)는 프로그램이 백그라운드에서 실행&amp;nbsp;되도록 하므로 쉘을 계속 사용할 수 있습니다.&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;--skip-grant-tables옵션을 사용하면 누구나 암호 없이 데이터베이스 서버에 연결할 수 있습니다.&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;h3 id=&quot;3-log-in-to-the-mysql-shell&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3. MySQL 셸에 로그인&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이제 루트 사용자로 데이터베이스 서버에 연결할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;mysql -u root&lt;/code&gt;&lt;/pre&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;h3 id=&quot;4-set-a-new-root-password&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4. 새 루트 비밀번호 설정&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;MySQL 5.7.5 및 이전 버전 또는 MariaDB 10.1.20 및 이전 버전인 경우&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;sql&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MY_NEW_PASSWORD');
FLUSH PRIVILEGES;&lt;/code&gt;&lt;/pre&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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;MySQL 5.7.6 이상 또는 MariaDB 10.1.20 이상인 경우&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;MariaDB&amp;gt; ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEW_PASSWORD';
MariaDB&amp;gt; FLUSH PRIVILEGES;&lt;/code&gt;&lt;/pre&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ALTER USER문이 수행되지 않고 아래와 같이 오류가 발생하면 UPDATE 문을 수행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1711171544555&quot; class=&quot;routeros&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
ERROR 1290 (HY000): The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement&lt;/code&gt;&lt;/pre&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오류 발생 시 아래 SQL문을 수행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;MariaDB&amp;gt; UPDATE mysql.user SET authentication_string = PASSWORD('NEW_PASSWORD')
WHERE User = 'root' AND Host = 'localhost';

MariaDB&amp;gt; FLUSH PRIVILEGES;&lt;/code&gt;&lt;/pre&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;h3 id=&quot;5-stop-and-start-the-database-server-normally&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;5. 데이터베이스 서버를 정상적으로 중지 및 시작&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이제 루트 암호가 설정되었으므로 데이터베이스 서버를 중지하고 정상적으로 시작합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;arduino&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;$ mysqladmin -u root -p shutdown&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;새 루트 암호를 입력하라는 메시지가 표시됩니다. 암호를 입력하면 데이터베이스 서버를 정상적으로 중지합니다.&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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;데이터베이스 기동&lt;/b&gt;&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;MySQL의 경우 다음을 입력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1711171544557&quot; class=&quot;crmsh&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;sudo systemctl start mysql&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;MariaDB의 경우 다음을 입력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1711171544557&quot; class=&quot;crmsh&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;sudo systemctl start mariadb&lt;/code&gt;&lt;/pre&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;***&amp;nbsp; 참고 ***&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;WSL 에서 &amp;nbsp;sudo systemctl start mysql, sudo systemctl start mariadb 명령어로 DB 기동 시 아래 오류가 발생하면&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #dddddd;&quot;&gt;ERROR&amp;nbsp;2002&amp;nbsp;(HY000):&amp;nbsp;Can't&amp;nbsp;connect&amp;nbsp;to&amp;nbsp;local&amp;nbsp;MySQL&amp;nbsp;server&amp;nbsp;through&amp;nbsp;socket&amp;nbsp;'/var/run/mysqld/mysqld.sock'&amp;nbsp;(2)&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #dddddd;&quot;&gt;System&amp;nbsp;has&amp;nbsp;not&amp;nbsp;been&amp;nbsp;booted&amp;nbsp;with&amp;nbsp;systemd&amp;nbsp;as&amp;nbsp;init&amp;nbsp;system&amp;nbsp;(PID&amp;nbsp;1).&amp;nbsp;Can't&amp;nbsp;operate.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #dddddd;&quot;&gt;Failed&amp;nbsp;to&amp;nbsp;connect&amp;nbsp;to&amp;nbsp;bus:&amp;nbsp;Host&amp;nbsp;is&amp;nbsp;down&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래 명령어로 DB를 기동한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;awk&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&lt;code&gt;sudo /etc/init.d/mysql start&lt;/code&gt;&lt;/pre&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;6-verify-the-password&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;6. 비밀번호 확인&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;새 루트 암호가 올바르게 적용되었는지 확인하려면 다음을 입력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;sudo mysql -u root -p&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;새 루트 암호를 입력하라는 메시지가 표시됩니다. 입력하면 데이터베이스 서버에 로그인 합니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Database/Mysql, MariaDB</category>
      <author>denodo</author>
      <guid isPermaLink="true">https://denodo1.tistory.com/361</guid>
      <comments>https://denodo1.tistory.com/361#entry361comment</comments>
      <pubDate>Sat, 23 Mar 2024 14:25:57 +0900</pubDate>
    </item>
    <item>
      <title>[Mysql] Time to Seconds 과 Seconds to time.</title>
      <link>https://denodo1.tistory.com/360</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #1990b8;&quot;&gt;SELECT&lt;/span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt; TIME_TO_SEC&lt;/span&gt;&lt;span style=&quot;color: #5f6364;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2f9c0a;&quot;&gt;'05:15:40'&lt;/span&gt;&lt;span style=&quot;color: #5f6364;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #5f6364;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Sample Output:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysql&amp;gt; SELECT TIME_TO_SEC('05:15:40');&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+-------------------------+&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;| TIME_TO_SEC('05:15:40') |&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+-------------------------+&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;|&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;18940 |&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+-------------------------+&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1 row in set (0.02 sec)&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;mysql&amp;gt; SELECT SEC_TO_TIME(18940);&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; SEC_TO_TIME(18940)&amp;nbsp; |&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+-------------------------+&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;|&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 05:15:40 |&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+-------------------------+&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1 row in set (0.02 sec)&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;a href=&quot;https://www.w3resource.com/mysql/date-and-time-functions/mysql-time_to_sec-function.php&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.w3resource.com/mysql/date-and-time-functions/mysql-time_to_sec-function.php&lt;/a&gt;&lt;/p&gt;</description>
      <category>Database/Mysql, MariaDB</category>
      <category>mysql</category>
      <category>SecondsToTime</category>
      <category>TimeToSeconds</category>
      <author>denodo</author>
      <guid isPermaLink="true">https://denodo1.tistory.com/360</guid>
      <comments>https://denodo1.tistory.com/360#entry360comment</comments>
      <pubDate>Tue, 24 Aug 2021 15:32:54 +0900</pubDate>
    </item>
    <item>
      <title>[Javascript] Format date to MM/dd/yyyy</title>
      <link>https://denodo1.tistory.com/359</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;var&amp;nbsp;date&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Date('2010-10-11T00:00:00+05:30'); &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;console.log(&amp;nbsp;((date.getMonth()&amp;nbsp;&amp;gt;&amp;nbsp;8)&amp;nbsp;?&amp;nbsp;(date.getMonth()&amp;nbsp;+&amp;nbsp;1)&amp;nbsp;:&amp;nbsp;('0'&amp;nbsp;+&amp;nbsp;(date.getMonth()&amp;nbsp;+&amp;nbsp;1)))&amp;nbsp;+&amp;nbsp;'/'&amp;nbsp;+&amp;nbsp;((date.getDate()&amp;nbsp;&amp;gt;&amp;nbsp;9)&amp;nbsp;?&amp;nbsp;date.getDate()&amp;nbsp;:&amp;nbsp;('0'&amp;nbsp;+&amp;nbsp;date.getDate()))&amp;nbsp;+&amp;nbsp;'/'&amp;nbsp;+&amp;nbsp;date.getFullYear()&amp;nbsp;);&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;출처: &lt;a href=&quot;https://stackoverflow.com/questions/11591854/format-date-to-mm-dd-yyyy-in-javascript&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/11591854/format-date-to-mm-dd-yyyy-in-javascript&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Client Standard/JavaScript &amp;amp; jQuery</category>
      <author>denodo</author>
      <guid isPermaLink="true">https://denodo1.tistory.com/359</guid>
      <comments>https://denodo1.tistory.com/359#entry359comment</comments>
      <pubDate>Tue, 24 Aug 2021 15:27:23 +0900</pubDate>
    </item>
    <item>
      <title>[OpenSSL] .pem to .der</title>
      <link>https://denodo1.tistory.com/358</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;외부 인증기관에서 인증서를 전달받지 않고, 내부적으로 사용할 RSA 키 페어가 필요하다면 아래 설명된 절차를 통해서 간단하게 키 페어를 만들어 낼 수 있다.&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;RSA key pair 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;openssl genrsa -des3 -out private.&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;pem&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #009999;&quot;&gt;2048&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;private.pem파일을 열어보면&lt;span&gt;&amp;nbsp;&lt;/span&gt;-----BEGIN RSA PRIVATE KEY-----&lt;span&gt;&amp;nbsp;&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;Private key에 포함된 정보 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RSA private key로부터 public key를 만들어 낼 수 있다. 어떻게 그게 가능한지 보기 위해서 아래 명령어를 사용해보자.&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;color: #000000;&quot;&gt;openssl rsa -text -&lt;/span&gt;&lt;span style=&quot;color: #286491;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; private.&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;pem&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;해당 .pem 파일로 필요한 .der 파일을 명령어로 만들 수 있다.&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;openssl rsa -in &lt;b&gt;private.pem&lt;/b&gt; -outform der -out &lt;b&gt;private.der&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Server Enterprise/Doc</category>
      <author>denodo</author>
      <guid isPermaLink="true">https://denodo1.tistory.com/358</guid>
      <comments>https://denodo1.tistory.com/358#entry358comment</comments>
      <pubDate>Thu, 12 Aug 2021 11:49:27 +0900</pubDate>
    </item>
    <item>
      <title>[Springboot] AWS S3 Cloud Front</title>
      <link>https://denodo1.tistory.com/357</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;1. CloudFront&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CloudFront는 정적, 동적 컨텐츠를 빠르게 응답하기 위한 캐시 기능을 제공하는 CDN 서비스입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캐싱을 지원하기 때문에 S3에 저장된 컨텐츠를 직접 접근하지 않아도 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 S3의 비용이 감소하며, 더 빠른 응답을 지원하므로 꼭 함께 적용해주는 것이 좋습니다.&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;b&gt;&lt;span&gt;2. 퍼블리싱&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;src/main/resources/templates/gallery.html&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1628735978043&quot; class=&quot;html xml&quot; style=&quot;overflow: auto hidden; padding: 10px; margin: 5px 0px; max-width: 100%; border: 1px solid darkcyan; font: 400 12px / 21.6px 'Lucida Console'; background-color: #2b2b2b; border-radius: 10px; color: #000000; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;파일 업로드&amp;lt;/h1&amp;gt; &amp;lt;hr&amp;gt;

    &amp;lt;form th:action=&quot;@{/gallery}&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&amp;gt;
        제목 : &amp;lt;input type=&quot;text&quot; name=&quot;title&quot;&amp;gt; &amp;lt;br&amp;gt;
        파일 : &amp;lt;input type=&quot;file&quot; name=&quot;file&quot;&amp;gt; &amp;lt;br&amp;gt;
        &amp;lt;button&amp;gt;등록하기&amp;lt;/button&amp;gt;
    &amp;lt;/form&amp;gt;

    &amp;lt;hr&amp;gt;

    &amp;lt;div th:each=&quot;gallery : ${galleryList}&quot;&amp;gt;
        &amp;lt;div style=&quot;margin-bottom: 30px&quot;&amp;gt;
            &amp;lt;p th:inline=&quot;text&quot;&amp;gt;제목 : [[${gallery.title}]]&amp;lt;/p&amp;gt;
            &amp;lt;img th:src=&quot;${gallery.imgFullPath}&quot; style=&quot;width: 500px; height: 300px;&quot;&amp;gt;
        &amp;lt;/div&amp;gt;

        &amp;lt;form th:action=&quot;@{/gallery}&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&amp;gt;
            &amp;lt;input type=&quot;hidden&quot; name=&quot;id&quot; th:value=&quot;${gallery.id}&quot;&amp;gt;
            &amp;lt;input type=&quot;hidden&quot; name=&quot;title&quot; th:value=&quot;${gallery.title}&quot;&amp;gt;
            &amp;lt;input type=&quot;hidden&quot; name=&quot;filePath&quot; th:value=&quot;${gallery.filePath}&quot;&amp;gt;
            파일 : &amp;lt;input type=&quot;file&quot; name=&quot;file&quot;&amp;gt; &amp;lt;br&amp;gt;
            &amp;lt;button&amp;gt;수정하기&amp;lt;/button&amp;gt;
        &amp;lt;/form&amp;gt;
        &amp;lt;hr&amp;gt;
    &amp;lt;/div&amp;gt;

&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존에 존재하던 gallery.html 파일에 갤러리 정보를 노출하는 영역과 수정 영역을 추가했습니다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #008000;&quot;&gt;hidden&amp;nbsp;&lt;/span&gt;값인 id, title, filePath는 이미지 수정시 사용하는 값이므로 같이 넘겨줍니다.&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;b&gt;&lt;span&gt;3. 이미지 조회&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;1]&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;이미지 조회 -&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Controller&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;src/main/java/com/victolee/s3exam/controller/GalleryController.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1628735978043&quot; class=&quot;java&quot; style=&quot;overflow: auto hidden; padding: 10px; margin: 5px 0px; max-width: 100%; border: 1px solid darkcyan; font: 400 12px / 21.6px 'Lucida Console'; background-color: #2b2b2b; border-radius: 10px; color: #000000; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@GetMapping(&quot;/gallery&quot;)
public String dispWrite(Model model) {
    List&amp;lt;GalleryDto&amp;gt; galleryDtoList = galleryService.getList();

    model.addAttribute(&quot;galleryList&quot;, galleryDtoList);

    return &quot;/gallery&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존에 존재하던&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #008299;&quot;&gt;dispWrite()&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메서드를 수정하여, 갤러리 목록을 가져옵니다.&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;b&gt;&lt;span&gt;2]&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;이미지 조회 -&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;S3Service&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S3에 이미지를 조회하는 방법으로&amp;nbsp;&lt;u&gt;&lt;a href=&quot;https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#getObject-com.amazonaws.services.s3.model.GetObjectRequest-java.io.File-&quot;&gt;AmazonS3Client.getObject()&lt;/a&gt;&lt;/u&gt;&amp;nbsp;메서드가 있지만, 이는 S3에 직접 요청하여 객체를 가져옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 S3에 직접 접근하는 것이 아닌, CloudFront을 통해 캐싱된 이미지를 가져올 것이므로 해당 메서드를 사용하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;src/main/java/com/victolee/s3exam/service/S3Service.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1628735978044&quot; class=&quot;java&quot; style=&quot;overflow: auto hidden; padding: 10px; margin: 5px 0px; max-width: 100%; border: 1px solid darkcyan; font: 400 12px / 21.6px 'Lucida Console'; background-color: #2b2b2b; border-radius: 10px; color: #000000; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static final String CLOUD_FRONT_DOMAIN_NAME = &quot;dq582wpwqowa9.cloudfront.net&quot;;

...

public String upload(MultipartFile file) throws IOException {
    String fileName = file.getOriginalFilename();

    s3Client.putObject(new PutObjectRequest(bucket, fileName, file.getInputStream(), null)
            .withCannedAcl(CannedAccessControlList.PublicRead));

    return fileName;
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존에 존재하던&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #008299;&quot;&gt;upload()&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메서드를 수정합니다.&lt;/li&gt;
&lt;li&gt;
&lt;pre id=&quot;code_1628735978044&quot; class=&quot;java&quot; style=&quot;overflow: auto hidden; padding: 10px; margin: 5px 0px; max-width: 100%; border: 1px solid darkcyan; font: 12px / 21.6px 'Lucida Console'; background-color: #2b2b2b; border-radius: 10px;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CLOUD_FRONT_DOMAIN_NAME&lt;/code&gt;&lt;/pre&gt;
&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;b&gt;&lt;span&gt;3]&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;이미지 조회 - GalleryService&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;src/main/java/com/victolee/s3exam/service/GalleryService.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1628735978044&quot; class=&quot;java&quot; style=&quot;overflow: auto hidden; padding: 10px; margin: 5px 0px; max-width: 100%; border: 1px solid darkcyan; font: 400 12px / 21.6px 'Lucida Console'; background-color: #2b2b2b; border-radius: 10px; color: #000000; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public List&amp;lt;GalleryDto&amp;gt; getList() {
    List&amp;lt;GalleryEntity&amp;gt; galleryEntityList = galleryRepository.findAll();
    List&amp;lt;GalleryDto&amp;gt; galleryDtoList = new ArrayList&amp;lt;&amp;gt;();

    for (GalleryEntity galleryEntity : galleryEntityList) {
        galleryDtoList.add(convertEntityToDto(galleryEntity));
    }

    return galleryDtoList;
}

private GalleryDto convertEntityToDto(GalleryEntity galleryEntity) {
    return GalleryDto.builder()
            .id(galleryEntity.getId())
            .title(galleryEntity.getTitle())
            .filePath(galleryEntity.getFilePath())
            .imgFullPath(&quot;https://&quot; + s3Service.CLOUD_FRONT_DOMAIN_NAME + &quot;/&quot; + galleryEntity.getFilePath())
            .build();
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;convertEntityToDto()&lt;/span&gt;&amp;nbsp;메서드는 Controller &amp;lt;--&amp;gt; Service 통신 간에 dto 객체를 사용하기 위해, repository로 부터 얻은 entity 객체를 dto로 변환하는 메서드입니다.&amp;nbsp;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;pre id=&quot;code_1628735978044&quot; class=&quot;java&quot; style=&quot;overflow: auto hidden; padding: 10px; margin: 5px 0px; max-width: 100%; border: 1px solid darkcyan; font: 12px / 21.6px 'Lucida Console'; background-color: #2b2b2b; border-radius: 10px;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.imgFullPath(&quot;https://&quot; + s3Service.CLOUD_FRONT_DOMAIN_NAME + &quot;/&quot; + galleryEntity.getFilePath())​&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;앞에서도 언급했지만 파일을 업로드할 때, 파일명만 DB에 저장하므로 이는 S3 객체의 key 값이 됩니다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #008299;&quot;&gt;s3Service&lt;/span&gt;에 정의된 상수(&lt;span style=&quot;color: #660e7a;&quot;&gt;CLOUD_FRONT_DOMAIN_NAME)&lt;/span&gt;를 불러와서 &quot;CloudFront URL&amp;nbsp;+ key&quot;를 조합하여 이미지 full path를 dto에 정의합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&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;b&gt;&lt;span&gt;4]&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;이미지 조회 - GalleryDto&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;src/main/java/com/victolee/s3exam/dto/GalleryDto.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1628735978045&quot; class=&quot;java&quot; style=&quot;overflow: auto hidden; padding: 10px; margin: 5px 0px; max-width: 100%; border: 1px solid darkcyan; font: 400 12px / 21.6px 'Lucida Console'; background-color: #2b2b2b; border-radius: 10px; color: #000000; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private String imgFullPath;

...

@Builder
public GalleryDto(Long id, String title, String filePath, String imgFullPath) {
    this.id = id;
    this.title = title;
    this.filePath = filePath;
    this.imgFullPath = imgFullPath;
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;멤버 변수&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #008299;&quot;&gt;imgFullPath&lt;/span&gt;를 추가하고, 빌더에도 정의해줍니다.&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;b&gt;&lt;span&gt;6]&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;이미지 조회 -&amp;nbsp;&lt;/span&gt;&lt;span&gt;GalleryRepository&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;src/main/java/com/victolee/s3exam/domain/repository/GalleryRepository.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1628735978045&quot; class=&quot;java&quot; style=&quot;overflow: auto hidden; padding: 10px; margin: 5px 0px; max-width: 100%; border: 1px solid darkcyan; font: 400 12px / 21.6px 'Lucida Console'; background-color: #2b2b2b; border-radius: 10px; color: #000000; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public interface GalleryRepository extends JpaRepository&amp;lt;GalleryEntity, Long&amp;gt; {
    @Override
    List&amp;lt;GalleryEntity&amp;gt; findAll();
}&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;&lt;b&gt;&lt;span&gt;5]&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;이미지 조회 -&amp;nbsp;&lt;/span&gt;&lt;span&gt;테스트&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993B04495E3693F604&quot; width=&quot;900&quot; height=&quot;410&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;409&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tUaXP/btrbW11cCh9/3sWOaBlyux3IxAlBVxPFuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tUaXP/btrbW11cCh9/3sWOaBlyux3IxAlBVxPFuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tUaXP/btrbW11cCh9/3sWOaBlyux3IxAlBVxPFuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993B04495E3693F604&quot; width=&quot;900&quot; height=&quot;410&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;409&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지를 업로드하고 개발자도구로 src 애트리뷰트를 확인해보면 CloudFront URL로부터 이미지를 가져온 것을 확인할 수 있습니다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9970414F5E36948E31&quot; width=&quot;741&quot; height=&quot;611&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;610&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4MQP1/btrbOsMVUcB/qV1gZdsfNfDkYfDZRRBXmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4MQP1/btrbOsMVUcB/qV1gZdsfNfDkYfDZRRBXmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4MQP1/btrbOsMVUcB/qV1gZdsfNfDkYfDZRRBXmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9970414F5E36948E31&quot; width=&quot;741&quot; height=&quot;611&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;610&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;개발자 도구 - Network&quot; 탭에서 Response Headers 정보를 살펴보면 cloudfront에서 Cache가 Hit된 것을 확인할 수 있습니다.&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;b&gt;&lt;span&gt;4. 이미지 수정/삭제&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지 수정은 업로드와 마찬가지로&amp;nbsp;&lt;a href=&quot;https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#putObject-com.amazonaws.services.s3.model.PutObjectRequest-&quot;&gt;&lt;span style=&quot;color: #008299;&quot;&gt;putObject()&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메서드를 사용하여 객체를 수정합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 아무런 코드를 수정하지 않고 S3 이미지를 수정할 수 있습니다.&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;&lt;span&gt;&amp;nbsp;&lt;/span&gt;S3에는 정상적으로 수정된 이미지로 업로드가 되지만 CloudFront는 캐시되어 있는 상태이므로 페이지에 새로운 이미지로&amp;nbsp;반영되지 않습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CloudFront 배포 설정에 따라 캐싱되는 시간에 차이가 있는데, 기본 값은 1일 입니다.&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;고유한 파일명(객체의 key)으로&amp;nbsp;S3에 업로드&lt;/li&gt;
&lt;li&gt;업로드 시, 해당 키의 객체가 존재하면 삭제 후 업로드&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;1]&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;이미지 수정/삭제&amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Controller&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;src/main/java/com/victolee/s3exam/controller/GalleryController.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1628735978047&quot; class=&quot;java&quot; style=&quot;overflow: auto hidden; padding: 10px; margin: 5px 0px; max-width: 100%; border: 1px solid darkcyan; font: 400 12px / 21.6px 'Lucida Console'; background-color: #2b2b2b; border-radius: 10px; color: #000000; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@PostMapping(&quot;/gallery&quot;)
public String execWrite(GalleryDto galleryDto, MultipartFile file) throws IOException {
    String imgPath = s3Service.upload(galleryDto.getFilePath(), file);
    ...
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #008299;&quot;&gt;service.upload()&lt;/span&gt;를 호출할 때, 기존의 파일명을 파라미터로 전달합니다.&lt;/li&gt;
&lt;li&gt;이 값은 gallery.html에 hidden 값으로 정의되어 있습니다.&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;b&gt;&lt;span&gt;2]&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;이미지 조회 -&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;S3Service&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;src/main/java/com/victolee/s3exam/service/S3Service.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1628735978048&quot; class=&quot;java&quot; style=&quot;overflow: auto hidden; padding: 10px; margin: 5px 0px; max-width: 100%; border: 1px solid darkcyan; font: 400 12px / 21.6px 'Lucida Console'; background-color: #2b2b2b; border-radius: 10px; color: #000000; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public String upload(String currentFilePath, MultipartFile file) throws IOException {
    // 고유한 key 값을 갖기위해 현재 시간을 postfix로 붙여줌
    SimpleDateFormat date = new SimpleDateFormat(&quot;yyyymmddHHmmss&quot;);
    String fileName = file.getOriginalFilename() + &quot;-&quot; + date.format(new Date());

    // key가 존재하면 기존 파일은 삭제
    if (&quot;&quot;.equals(currentFilePath) == false &amp;amp;&amp;amp; currentFilePath != null) {
        boolean isExistObject = s3Client.doesObjectExist(bucket, currentFilePath);

        if (isExistObject == true) {
            s3Client.deleteObject(bucket, currentFilePath);
        }
    }

    // 파일 업로드
    s3Client.putObject(new PutObjectRequest(bucket, fileName, file.getInputStream(), null)
            .withCannedAcl(CannedAccessControlList.PublicRead));

    return fileName;
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #008299;&quot;&gt;fileName&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;변수&lt;/li&gt;
&lt;li&gt;
&lt;pre id=&quot;code_1628735978048&quot; class=&quot;java&quot; style=&quot;overflow: auto hidden; padding: 10px; margin: 5px 0px; max-width: 100%; border: 1px solid darkcyan; font: 12px / 21.6px 'Lucida Console'; background-color: #2b2b2b; border-radius: 10px;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;doesObjectExist()&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre id=&quot;code_1628735978048&quot; class=&quot;java&quot; style=&quot;overflow: auto hidden; padding: 10px; margin: 5px 0px; max-width: 100%; border: 1px solid darkcyan; font: 12px / 21.6px 'Lucida Console'; background-color: #2b2b2b; border-radius: 10px;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;putObject()&lt;/code&gt;&lt;/pre&gt;
&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;b&gt;&lt;span&gt;2] 테스트&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;1) 기존 파일&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99334F3F5E36B8AB16&quot; width=&quot;900&quot; height=&quot;462&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;461&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCmDnM/btrbR3Mwr7w/tmTJDQHwdRqORBS7c53slK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCmDnM/btrbR3Mwr7w/tmTJDQHwdRqORBS7c53slK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCmDnM/btrbR3Mwr7w/tmTJDQHwdRqORBS7c53slK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99334F3F5E36B8AB16&quot; width=&quot;900&quot; height=&quot;462&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;461&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 수정 업로드&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F23C3E5E36B8BC12&quot; width=&quot;900&quot; height=&quot;463&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;463&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Tyq7U/btrbR5DzUaC/krtVQW8YyHvTihxnccc7Y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Tyq7U/btrbR5DzUaC/krtVQW8YyHvTihxnccc7Y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Tyq7U/btrbR5DzUaC/krtVQW8YyHvTihxnccc7Y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F23C3E5E36B8BC12&quot; width=&quot;900&quot; height=&quot;463&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;463&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동일한 파일명이지만 다른 그림을 업로드 했을 때, postfix로 인해서 CloudFront의 Cache가 적용되지 않은 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB에도 잘 key값이 잘 반영되었네요.&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;b&gt;3) S3에서 delete 되었는지 확인&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F2343D5E36B8C815&quot; width=&quot;900&quot; height=&quot;280&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;280&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3stfQ/btrbOKfSHhI/O6G0ZAiNHlXkaVPxE4Ei6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3stfQ/btrbOKfSHhI/O6G0ZAiNHlXkaVPxE4Ei6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3stfQ/btrbOKfSHhI/O6G0ZAiNHlXkaVPxE4Ei6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F2343D5E36B8C815&quot; width=&quot;900&quot; height=&quot;280&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;280&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신규/수정 업로드를 각각 수행했지만, 최종적으로는 마지막에 업로드한 파일만 존재하고 있는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상으로 Cloud Front를 적용했을 때 S3에 파일 업로드/조회 하는 방법에 대해 알아보았습니다.&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;size14&quot;&gt;출처: &lt;a href=&quot;https://victorydntmd.tistory.com/336&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://victorydntmd.tistory.com/336&lt;/a&gt;&lt;/p&gt;</description>
      <category>Server Enterprise/Spring</category>
      <category>AWS</category>
      <category>file</category>
      <category>S3</category>
      <category>Spring</category>
      <category>springboot</category>
      <category>upload</category>
      <category>연동</category>
      <author>denodo</author>
      <guid isPermaLink="true">https://denodo1.tistory.com/357</guid>
      <comments>https://denodo1.tistory.com/357#entry357comment</comments>
      <pubDate>Thu, 12 Aug 2021 11:41:51 +0900</pubDate>
    </item>
    <item>
      <title>[Gradle] cache 삭제</title>
      <link>https://denodo1.tistory.com/356</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;build를 해도 계속 예전의 에러를 출력해내었다. 알아본 결과 gradle에 남아있는 cache 문제였다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;C:\\Users\\사용자\\.gradle\\cache&lt;span&gt;&amp;nbsp;&lt;/span&gt;내부의 폴더 삭제&lt;/li&gt;
&lt;li&gt;./gradlew build --refresh-dependencies&lt;span&gt;&amp;nbsp;&lt;/span&gt;혹은 재빌드&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>Server Enterprise/Gradle &amp;amp; Maven</category>
      <author>denodo</author>
      <guid isPermaLink="true">https://denodo1.tistory.com/356</guid>
      <comments>https://denodo1.tistory.com/356#entry356comment</comments>
      <pubDate>Thu, 12 Aug 2021 11:36:13 +0900</pubDate>
    </item>
    <item>
      <title>[Mysql] count over PARTITION BY</title>
      <link>https://denodo1.tistory.com/355</link>
      <description>&lt;p&gt;&lt;b&gt;SQL 집계함수&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;SQL에서는 집계함수를 많이 사용합니다.&lt;/p&gt;
&lt;p&gt;GROUP BY와 함께 COUNT, SUM 등을 많이 사용하게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;집계의 예제를 다시 살펴보겠습니다.&lt;/p&gt;
&lt;p&gt;다음은 GROUP BY와 COUNT를 사용해, 나라별 인원 집계를 내려본 것입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1618367192435&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; padding: 20px; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT Country, COUNT(*)
FROM customers
GROUP BY Country;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 쿼리의 실행 결과 중 상위 5개는 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwwTqm%2FbtqxmMchJ2J%2FlL8msLbi5BH8XkgCPT62m0%2Fimg.png&quot; width=&quot;209&quot; height=&quot;134&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;215&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHDPwg/btq2BDOQKwn/NB53rDND88UE1nPphCMPWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHDPwg/btq2BDOQKwn/NB53rDND88UE1nPphCMPWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHDPwg/btq2BDOQKwn/NB53rDND88UE1nPphCMPWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwwTqm%2FbtqxmMchJ2J%2FlL8msLbi5BH8XkgCPT62m0%2Fimg.png&quot; width=&quot;209&quot; height=&quot;134&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;215&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;만약 데이터에 숫자인 컬럼이 있었다면, SUM이나 AVG도 사용해 볼 수 있을 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;윈도우 함수&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;윈도우 함수는 이 GROUP BY와 비슷하지만, 집계가 없는 것이라고 생각하면 됩니다.&lt;/p&gt;
&lt;p&gt;행과 행간의 관계를 쉽게 정의 하기 위해 만든 함수입니다.&lt;/p&gt;
&lt;p&gt;따라서 SQL에서 지원하는 집계 함수 외에도, RANK나 ROW_NUMBER와 같은 윈도우 전용 함수가 나왔습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;윈도우 함수는 보통 OVER 괄호 안에 PARTITION BY 또는 ORDER BY를 사용하게 됩니다.&lt;/p&gt;
&lt;p&gt;아래는 나라에 따른 인원을 COUNT했지만, 집계는 하지 않은 예제입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1618367192435&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; padding: 20px; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT Country, 
    Count(*) OVER (PARTITION BY Country) AS cnt
FROM customers&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 쿼리의 결과 중 상위 10개는 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM51hT%2FbtqxoQdW4G7%2F6PHJqIVkMnhjPNUiSeWT40%2Fimg.png&quot; width=&quot;191&quot; height=&quot;275&quot; data-origin-width=&quot;271&quot; data-origin-height=&quot;390&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NUDAr/btq2x4z1XFV/Nx6qVT4YqnnppCAdc8qev1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NUDAr/btq2x4z1XFV/Nx6qVT4YqnnppCAdc8qev1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NUDAr/btq2x4z1XFV/Nx6qVT4YqnnppCAdc8qev1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM51hT%2FbtqxoQdW4G7%2F6PHJqIVkMnhjPNUiSeWT40%2Fimg.png&quot; width=&quot;191&quot; height=&quot;275&quot; data-origin-width=&quot;271&quot; data-origin-height=&quot;390&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;결과를 보면 아시겠지만, Country값이 같으면 cnt가 같습니다.&lt;/p&gt;
&lt;p&gt;하지만 GROUP BY를 사용할때와는 다르게, 행을 집계하지는 않았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;RANK&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;앞서 RANK와 ROW_NUMBER는 윈도우 함수 전용이라고 언급했습니다.&lt;/p&gt;
&lt;p&gt;위의 결과에 RANK를 적용해 어느 나라의 사람이 많은지 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;참고로, 윈도우 함수는 중첩해서 사용할 수는 없습니다.&lt;/p&gt;
&lt;p&gt;하지만 서브쿼리는 사용 가능하기에 아래와 같은 예제를 실행해볼 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1618367192436&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; padding: 20px; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT Country, cnt, 
    RANK() OVER (ORDER BY cnt DESC) AS rnk 
FROM(
    SELECT Country, 
        Count(*) OVER (PARTITION BY Country) AS cnt
    FROM customers
) AS counts;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;FROM안에 있는 SELECT문은 바로 위에 있는 예제입니다.&lt;/p&gt;
&lt;p&gt;위 쿼리의 결과 중 상위 10개는 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdco94A%2FbtqxoPF8aZj%2FcargXjfVv5LC7VnZY82qC1%2Fimg.png&quot; width=&quot;204&quot; height=&quot;239&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;384&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KAZyZ/btq2uVcpqWx/pdz8FNVUFh3QjOVj4dKrp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KAZyZ/btq2uVcpqWx/pdz8FNVUFh3QjOVj4dKrp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KAZyZ/btq2uVcpqWx/pdz8FNVUFh3QjOVj4dKrp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdco94A%2FbtqxoPF8aZj%2FcargXjfVv5LC7VnZY82qC1%2Fimg.png&quot; width=&quot;204&quot; height=&quot;239&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;384&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;미국에 Customer가 제일 많아 USA가 최 상위로 나오게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위를 조금 더 실용적으로 표현해보기 위해 집계와 윈도우를 함께 사용해보겠습니다.&lt;/p&gt;
&lt;p&gt;다음은 내부 윈도우함수를 GROUP BY를 사용한 집계로 바꿔본 것입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1618367192436&quot; class=&quot;html xml&quot; style=&quot;box-sizing: inherit; overflow: auto; font-family: monospace, monospace; font-size: medium; padding: 20px; background: rgba(0, 0, 0, 0.05); color: rgba(34, 85, 51, 0.87); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *, RANK() OVER (ORDER BY cnt DESC) AS rnk 
FROM(
	SELECT Country, Count(*) AS cnt
	FROM customers
    GROUP BY Country
) AS counts;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 쿼리의 결과 중 상위 10개는 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5RuFj%2FbtqxnnDlTFH%2FL8811Q1kxwawTFbz52AE9K%2Fimg.png&quot; width=&quot;218&quot; height=&quot;242&quot; data-origin-width=&quot;349&quot; data-origin-height=&quot;387&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mT9nt/btq2yt7i7TO/PlEvxBa4z1mxqEGGnBFaKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mT9nt/btq2yt7i7TO/PlEvxBa4z1mxqEGGnBFaKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mT9nt/btq2yt7i7TO/PlEvxBa4z1mxqEGGnBFaKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5RuFj%2FbtqxnnDlTFH%2FL8811Q1kxwawTFbz52AE9K%2Fimg.png&quot; width=&quot;218&quot; height=&quot;242&quot; data-origin-width=&quot;349&quot; data-origin-height=&quot;387&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실제 쿼리 사용&lt;/p&gt;
&lt;p&gt;SELECT&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;COUNT(*) OVER(PARTITION BY &lt;span style=&quot;color: #ee2323;&quot;&gt;B.r_no, B.r_g_no&lt;/span&gt;) -- 2컬럼별 항목 갯수 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;COUNT(*)&amp;nbsp;OVER(PARTITION&amp;nbsp;BY&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;B.r_no&lt;/span&gt;) -- 1컬럼별 항목 갯수&lt;br /&gt;&amp;nbsp;&amp;nbsp;FROM A &lt;br /&gt;&amp;nbsp;&amp;nbsp;JOIN B ON B.no = A.no AND B.r_no = A.r_no &lt;br /&gt;&amp;nbsp;&amp;nbsp;JOIN C ON C.no = B.no AND C.r_g_no = B.r_g_no &lt;br /&gt;&amp;nbsp;WHERE A.no = 1001 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AND&amp;nbsp;A.cstmr_no&amp;nbsp;=&amp;nbsp;1&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;출처: &lt;a href=&quot;https://jyoondev.tistory.com/89&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;jyoondev.tistory.com/89&lt;/a&gt;&lt;/p&gt;</description>
      <category>Database/Mysql, MariaDB</category>
      <category>mariadb</category>
      <category>mysql</category>
      <category>Over</category>
      <category>over PARTITION BY</category>
      <category>PARTITION BY</category>
      <author>denodo</author>
      <guid isPermaLink="true">https://denodo1.tistory.com/355</guid>
      <comments>https://denodo1.tistory.com/355#entry355comment</comments>
      <pubDate>Wed, 14 Apr 2021 11:28:36 +0900</pubDate>
    </item>
    <item>
      <title>(1292): Truncated incorrect DOUBLE value</title>
      <link>https://denodo1.tistory.com/354</link>
      <description>&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;// code_se: VARCHAR2(100)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;INSERT INTO&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; tb_blog( &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;blog_no &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;, blog_nm &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ...&lt;br /&gt;)&amp;nbsp;VALUES&amp;nbsp;(&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (SELECT cd FROM tb_code sa WHERE code_se = &lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; , ''&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ...&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;강제로 Integer를 Insert 문에 넣지 못하는 에러 코드 이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(SELECT cd FROM tb_code sa WHERE code_se =&lt;span style=&quot;color: #006dd7;&quot;&gt; '&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;1'&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;로 바꾸면 에러 나지 않는다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Database/Mysql, MariaDB</category>
      <author>denodo</author>
      <guid isPermaLink="true">https://denodo1.tistory.com/354</guid>
      <comments>https://denodo1.tistory.com/354#entry354comment</comments>
      <pubDate>Thu, 19 Nov 2020 16:38:11 +0900</pubDate>
    </item>
    <item>
      <title>[Mysql] DUPLICATE KEY UPDATE for multiple rows insert in single query</title>
      <link>https://denodo1.tistory.com/353</link>
      <description>&lt;p&gt;MySQL/MariaDB 사용시 Multi rows insert duplicate key update (merge) 문 예시 입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;INSERT INTO&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #ee2323;&quot;&gt;temp_table&lt;/span&gt; (&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;temp_seq&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; , name&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; , blabla&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; ) VALUES&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (1, '임시이름1', '어쩌고')&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #333333;&quot;&gt;(2, '임시이름2', '저쩌고')&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #333333;&quot;&gt;(3, '임시이름3', '블라')&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #333333;&quot;&gt;(4, '임시이름4', '블라')&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; ON&amp;nbsp;DUPLICATE&amp;nbsp;KEY &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; UPDATE &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #333333;&quot;&gt;name &lt;/span&gt;= VALUES(&lt;span style=&quot;color: #333333;&quot;&gt;name&lt;/span&gt;) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; , &lt;span style=&quot;color: #333333;&quot;&gt;blabla&lt;/span&gt;= VALUES(&lt;span style=&quot;color: #333333;&quot;&gt;blabla&lt;/span&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 하위는 임시&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; , updt_no = VALUES(regist_no) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; , updt_dt = VALUES(regist_dt)&lt;/p&gt;
&lt;p&gt;;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;참조: &lt;a href=&quot;https://stackoverflow.com/questions/2714587/mysql-on-duplicate-key-update-for-multiple-rows-insert-in-single-query&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;stackoverflow.com/questions/2714587/mysql-on-duplicate-key-update-for-multiple-rows-insert-in-single-query&lt;/a&gt;&lt;/p&gt;</description>
      <category>Database/Mysql, MariaDB</category>
      <category>duplicate</category>
      <category>insert</category>
      <category>mariadb</category>
      <category>merge</category>
      <category>Multiple</category>
      <category>mysql</category>
      <category>Update</category>
      <author>denodo</author>
      <guid isPermaLink="true">https://denodo1.tistory.com/353</guid>
      <comments>https://denodo1.tistory.com/353#entry353comment</comments>
      <pubDate>Wed, 18 Nov 2020 15:16:30 +0900</pubDate>
    </item>
  </channel>
</rss>