<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>소소한 일상 및 업무TIP 다루기</title>
    <link>https://link2me.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 14 Jun 2026 17:39:42 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Link2Me</managingEditor>
    <image>
      <title>소소한 일상 및 업무TIP 다루기</title>
      <url>https://t1.daumcdn.net/cfile/tistory/114F584F515772CE2E</url>
      <link>https://link2me.tistory.com</link>
    </image>
    <item>
      <title>라즈베리파이5 입문</title>
      <link>https://link2me.tistory.com/2502</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;회사에서 라즈베리파이 5로 온도, 습도, 전력제어 등을 한다고 하는 분이 계서서 나도 한번 도전해보고 싶어서&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;라즈베리파이 5 베이직키트와 별도 미니타워형 케이스를 주문하고 DHT22 온습도 센서를 구입했다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;raspi_01.png&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;433&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Q834A/dJMcacPA2b8/TTDMfJrd4AkT9Mr6tf3bxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Q834A/dJMcacPA2b8/TTDMfJrd4AkT9Mr6tf3bxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Q834A/dJMcacPA2b8/TTDMfJrd4AkT9Mr6tf3bxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQ834A%2FdJMcacPA2b8%2FTTDMfJrd4AkT9Mr6tf3bxK%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;503&quot; height=&quot;433&quot; data-filename=&quot;raspi_01.png&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;433&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제일 왼쪽에 전원을 연결하고 가운데 단자에 모니터를 연결한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;raspi_02.png&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HLlvy/dJMcabiRHdP/SRhgKmculQBUaikrJg8SA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HLlvy/dJMcabiRHdP/SRhgKmculQBUaikrJg8SA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HLlvy/dJMcabiRHdP/SRhgKmculQBUaikrJg8SA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHLlvy%2FdJMcabiRHdP%2FSRhgKmculQBUaikrJg8SA0%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;400&quot; height=&quot;302&quot; data-filename=&quot;raspi_02.png&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;302&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;raspi_03.png&quot; data-origin-width=&quot;393&quot; data-origin-height=&quot;472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dNu08O/dJMcaiCe5yU/B8I5zRvlvxxft6Rmg75cy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dNu08O/dJMcaiCe5yU/B8I5zRvlvxxft6Rmg75cy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dNu08O/dJMcaiCe5yU/B8I5zRvlvxxft6Rmg75cy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdNu08O%2FdJMcaiCe5yU%2FB8I5zRvlvxxft6Rmg75cy1%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;393&quot; height=&quot;472&quot; data-filename=&quot;raspi_03.png&quot; data-origin-width=&quot;393&quot; data-origin-height=&quot;472&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;케이스 조립하느라고 동영상 열심히 보면서 조립 겨우 성공했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;USB 포트에 키보드와 마우스를 연결한다. 무선 마우스, 키보드를 사용하다가 매끄럽지 못해서 유선마우스 쓸만한 것과 키보드도 로지텍 유선키보드로 대체했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;꼽혀있는 USB에는 SD카드 32GB가 장착되어 있다. USB Reader 에서 SD카드를 빼서 케이스 바닥면에 있는 SD카드 장착하는 곳에 옮겨주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;미니타워형 케이스는 &lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.eleparts.co.kr/main/index&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.eleparts.co.kr/main/index&lt;/a&gt; 에서 구입을 했고, 라즈베리파이 5 베이직키트는 재고가 없는 거 같아서 쿠팡에서 구입했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&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;&lt;span style=&quot;color: #000000;&quot;&gt;구입해서 보니까 SD카드 대신에 SSD 를 사용하는 것이 더 낫겠다는 생각이 든다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SD카드&amp;nbsp;대신&amp;nbsp;SSD로&amp;nbsp;업그레이드&amp;nbsp;가능&lt;br /&gt;SD카드는&amp;nbsp;소모품이라&amp;nbsp;읽기/쓰기가&amp;nbsp;반복되면&amp;nbsp;수명이&amp;nbsp;다하거나&amp;nbsp;속도가&amp;nbsp;느려지는&amp;nbsp;단점이&amp;nbsp;있다.&amp;nbsp;&lt;br /&gt;라즈베리파이&amp;nbsp;5의&amp;nbsp;성능을&amp;nbsp;제대로&amp;nbsp;쓰고&amp;nbsp;싶다면&amp;nbsp;나중에&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;구성을&amp;nbsp;고려해&amp;nbsp;보라고&amp;nbsp;한다.&lt;br /&gt;-&amp;nbsp;USB&amp;nbsp;3.0&amp;nbsp;SSD&amp;nbsp;부팅:&amp;nbsp;외장&amp;nbsp;SSD를&amp;nbsp;USB&amp;nbsp;포트에&amp;nbsp;꽂고,&amp;nbsp;SD카드&amp;nbsp;없이&amp;nbsp;SSD만으로&amp;nbsp;부팅하도록&amp;nbsp;설정할&amp;nbsp;수&amp;nbsp;있다.&amp;nbsp;(속도가&amp;nbsp;수배&amp;nbsp;이상&amp;nbsp;빨라짐)&lt;br /&gt;-&amp;nbsp;NVMe&amp;nbsp;SSD&amp;nbsp;장착:&amp;nbsp;전용&amp;nbsp;확장&amp;nbsp;보드(NVMe&amp;nbsp;HAT)를&amp;nbsp;사서&amp;nbsp;조립하면&amp;nbsp;일반&amp;nbsp;PC&amp;nbsp;수준의&amp;nbsp;속도를&amp;nbsp;낼&amp;nbsp;수&amp;nbsp;있다.&lt;br /&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;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a href=&quot;https://www.raspberrypi.com/software/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.raspberrypi.com/software/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771115663685&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Raspberry Pi software &amp;ndash; Raspberry Pi&quot; data-og-description=&quot;From our operating system to our GitHub repos, explore the software that powers our technology&quot; data-og-host=&quot;www.raspberrypi.com&quot; data-og-source-url=&quot;https://www.raspberrypi.com/software/&quot; data-og-url=&quot;https://www.raspberrypi.com/software/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b0yk9z/dJMb8Qeir1S/IehpIzSmvjWmYMMvYWZqKK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/5gVwZ/dJMb8T9VHyh/D2Dk6KZAIP5hw1rqb8rcTk/img.png?width=1500&amp;amp;height=1690&amp;amp;face=0_0_1500_1690,https://scrap.kakaocdn.net/dn/L5jOV/dJMb8YXHIxZ/ynqyZgLToIBwHBcNb9yQI0/img.png?width=1500&amp;amp;height=1690&amp;amp;face=0_0_1500_1690&quot;&gt;&lt;a href=&quot;https://www.raspberrypi.com/software/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.raspberrypi.com/software/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b0yk9z/dJMb8Qeir1S/IehpIzSmvjWmYMMvYWZqKK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/5gVwZ/dJMb8T9VHyh/D2Dk6KZAIP5hw1rqb8rcTk/img.png?width=1500&amp;amp;height=1690&amp;amp;face=0_0_1500_1690,https://scrap.kakaocdn.net/dn/L5jOV/dJMb8YXHIxZ/ynqyZgLToIBwHBcNb9yQI0/img.png?width=1500&amp;amp;height=1690&amp;amp;face=0_0_1500_1690');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Raspberry Pi software &amp;ndash; Raspberry Pi&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;From our operating system to our GitHub repos, explore the software that powers our technology&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.raspberrypi.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 사이트에서 Windows 용 Raspberry&amp;nbsp;Pi&amp;nbsp;Imager&amp;nbsp;를&amp;nbsp;다운로드받고&amp;nbsp;준비된&amp;nbsp;SD카드를&amp;nbsp;장착하고&amp;nbsp;순서에&amp;nbsp;따라&amp;nbsp;진행한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;쓰기까지&amp;nbsp;완료되고&amp;nbsp;나면&amp;nbsp;USB&amp;nbsp;Reader&amp;nbsp;기를&amp;nbsp;라즈베리파이에&amp;nbsp;꼽으면&amp;nbsp;자동&amp;nbsp;설치가&amp;nbsp;된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 조건: Raspberry Pi Imager로 SD카드를 구울 때 **'설정 편집(Edit Settings)'**에서 SSH 활성화와 Wi-Fi 설정을 미리 완료했어야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;라즈베리파이에서는&amp;nbsp;su로&amp;nbsp;루트&amp;nbsp;계정에&amp;nbsp;직접&amp;nbsp;로그인하는&amp;nbsp;대신,&amp;nbsp;설정한&amp;nbsp;일반&amp;nbsp;사용자&amp;nbsp;계정에서&amp;nbsp;sudo를&amp;nbsp;앞에&amp;nbsp;붙여&amp;nbsp;관리자&amp;nbsp;권한을&amp;nbsp;행사하는&amp;nbsp;것이&amp;nbsp;기본&amp;nbsp;원칙이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉시&amp;nbsp;종료&amp;nbsp;(가장&amp;nbsp;권장)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;sudo shutdown -h now&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;라즈베리파이에&amp;nbsp;Node.js를&amp;nbsp;직접&amp;nbsp;설치하기보다,&amp;nbsp;버전을&amp;nbsp;쉽게&amp;nbsp;바꿀&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;**NVM(Node&amp;nbsp;Version&amp;nbsp;Manager)**을&amp;nbsp;사용하는&amp;nbsp;것을&amp;nbsp;강력히&amp;nbsp;추천.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;curl&amp;nbsp;-o-&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh&lt;/a&gt;&amp;nbsp;|&amp;nbsp;bash&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#&amp;nbsp;OS&amp;nbsp;버전&amp;nbsp;및&amp;nbsp;비트&amp;nbsp;확인&amp;nbsp;(라즈베리파이&amp;nbsp;5는&amp;nbsp;64비트가&amp;nbsp;권장됩니다)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;uname&amp;nbsp;-m&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#&amp;nbsp;Node.js&amp;nbsp;설치&amp;nbsp;여부&amp;nbsp;및&amp;nbsp;버전&amp;nbsp;확인&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;node&amp;nbsp;-v&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#&amp;nbsp;파이썬&amp;nbsp;버전&amp;nbsp;확인&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;python3&amp;nbsp;--version&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#&amp;nbsp;MQTT&amp;nbsp;통신을&amp;nbsp;위한&amp;nbsp;라이브러리&amp;nbsp;(Paho&amp;nbsp;MQTT)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pip&amp;nbsp;install&amp;nbsp;paho-mqtt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#&amp;nbsp;라즈베리파이&amp;nbsp;GPIO&amp;nbsp;제어&amp;nbsp;(라즈베리파이&amp;nbsp;5는&amp;nbsp;gpiod&amp;nbsp;권장)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pip&amp;nbsp;install&amp;nbsp;gpiod&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;dht22.JPG&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;340&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Uj7NC/dJMcafZPojV/ftK60Pz0h9Os2c0mfDD4hK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Uj7NC/dJMcafZPojV/ftK60Pz0h9Os2c0mfDD4hK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Uj7NC/dJMcafZPojV/ftK60Pz0h9Os2c0mfDD4hK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUj7NC%2FdJMcafZPojV%2FftK60Pz0h9Os2c0mfDD4hK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;372&quot; height=&quot;340&quot; data-filename=&quot;dht22.JPG&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;340&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;온도 습도 센서를 구입해서 연결하려고 했더니 핀이 개별로 연결해야 된다고 하고, 케이스도 없어서 이게 맞나 싶더라.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래서 다시 검색을 해보니 Zigbee 동글과 연결해서 사용하는 외관 케이스까지 깔끔한 온도 습도 센서가 있더라.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래서 동글 구매해서 이걸로 연결하려고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;raspi_temp.png&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xPv7W/dJMcacovKsU/v26YmHxlgSOHay0RwuQND1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xPv7W/dJMcacovKsU/v26YmHxlgSOHay0RwuQND1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xPv7W/dJMcacovKsU/v26YmHxlgSOHay0RwuQND1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxPv7W%2FdJMcacovKsU%2Fv26YmHxlgSOHay0RwuQND1%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;273&quot; height=&quot;330&quot; data-filename=&quot;raspi_temp.png&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;330&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>라즈베리파이</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2502</guid>
      <comments>https://link2me.tistory.com/2502#entry2502comment</comments>
      <pubDate>Sun, 15 Feb 2026 09:10:28 +0900</pubDate>
    </item>
    <item>
      <title>if 문 사용 주의사항</title>
      <link>https://link2me.tistory.com/2501</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; 조건식에 괄호 ( ) 사용하지 않음 &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;//&amp;nbsp;❌&amp;nbsp;잘못된&amp;nbsp;예&lt;br /&gt;if&amp;nbsp;(x&amp;nbsp;&amp;gt;&amp;nbsp;10)&amp;nbsp;{&lt;br /&gt;fmt.Println(&quot;크다&quot;)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//&amp;nbsp;✅&amp;nbsp;올바른&amp;nbsp;예&lt;br /&gt;if&amp;nbsp;x&amp;nbsp;&amp;gt;&amp;nbsp;10&amp;nbsp;{&lt;br /&gt;fmt.Println(&quot;크다&quot;)&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; 중괄호 { }는 반드시 같은 줄에 위치해야 함 &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;//&amp;nbsp;❌&amp;nbsp;잘못된&amp;nbsp;예&lt;br /&gt;if&amp;nbsp;x&amp;nbsp;&amp;gt;&amp;nbsp;10&amp;nbsp;&lt;br /&gt;{&lt;br /&gt;fmt.Println(&quot;크다&quot;)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//&amp;nbsp;✅&amp;nbsp;올바른&amp;nbsp;예&lt;br /&gt;if&amp;nbsp;x&amp;nbsp;&amp;gt;&amp;nbsp;10&amp;nbsp;{&lt;br /&gt;fmt.Println(&quot;크다&quot;)&lt;br /&gt;}&lt;br /&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; if 안에서 변수를 선언할 수 있음 &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if&amp;nbsp;n&amp;nbsp;:=&amp;nbsp;len(name);&amp;nbsp;n&amp;nbsp;&amp;gt;&amp;nbsp;3&amp;nbsp;{&lt;br /&gt;fmt.Println(&quot;이름이&amp;nbsp;너무&amp;nbsp;깁니다:&quot;,&amp;nbsp;n)&lt;br /&gt;}&amp;nbsp;else&amp;nbsp;{&lt;br /&gt;fmt.Println(&quot;이름&amp;nbsp;길이&amp;nbsp;OK:&quot;,&amp;nbsp;n)&lt;br /&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;else는 반드시 &lt;b&gt;같은 줄&lt;/b&gt;에 위치해야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;//&amp;nbsp;❌&amp;nbsp;잘못된&amp;nbsp;예&lt;br /&gt;if&amp;nbsp;x&amp;nbsp;&amp;gt;&amp;nbsp;10&amp;nbsp;{&lt;br /&gt;fmt.Println(&quot;크다&quot;)&lt;br /&gt;}&lt;br /&gt;else&amp;nbsp;{&lt;br /&gt;fmt.Println(&quot;작다&quot;)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//&amp;nbsp;✅&amp;nbsp;올바른&amp;nbsp;예&lt;br /&gt;if&amp;nbsp;x&amp;nbsp;&amp;gt;&amp;nbsp;10&amp;nbsp;{&lt;br /&gt;fmt.Println(&quot;크다&quot;)&lt;br /&gt;}&amp;nbsp;else&amp;nbsp;{&lt;br /&gt;fmt.Println(&quot;작다&quot;)&lt;br /&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; if문에서 여러 조건을 쓸 때는 &amp;amp;&amp;amp;, || 사용&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if&amp;nbsp;age&amp;nbsp;&amp;gt;&amp;nbsp;18&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;country&amp;nbsp;==&amp;nbsp;&quot;KR&quot;&amp;nbsp;{&lt;br /&gt;fmt.Println(&quot;성인입니다.&quot;)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if&amp;nbsp;score&amp;nbsp;&amp;lt;&amp;nbsp;60&amp;nbsp;||&amp;nbsp;attend&amp;nbsp;&amp;lt;&amp;nbsp;0.8&amp;nbsp;{&lt;br /&gt;fmt.Println(&quot;불합격&quot;)&lt;br /&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Golang/기본 문법</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2501</guid>
      <comments>https://link2me.tistory.com/2501#entry2501comment</comments>
      <pubDate>Wed, 8 Oct 2025 17:44:56 +0900</pubDate>
    </item>
    <item>
      <title>기본 타입은 모두 소문자</title>
      <link>https://link2me.tistory.com/2500</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Go의 기본 타입들은 모두 &lt;b&gt;소문자&lt;/b&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;&lt;span style=&quot;color: #000000;&quot;&gt;package&amp;nbsp;main&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;import&amp;nbsp;&quot;fmt&quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;func&amp;nbsp;main()&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;var&amp;nbsp;a&amp;nbsp;int&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;var&amp;nbsp;b&amp;nbsp;string&amp;nbsp;//&amp;nbsp;✅&amp;nbsp;소문자&amp;nbsp;string으로&amp;nbsp;수정&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;a&amp;nbsp;=&amp;nbsp;7&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;b&amp;nbsp;=&amp;nbsp;&quot;hello&quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;fmt.Println(&quot;a:&quot;,&amp;nbsp;a)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;fmt.Println(&quot;b:&quot;,&amp;nbsp;b)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;package&amp;nbsp;main&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;import&amp;nbsp;&quot;fmt&quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;var globalVar = &quot;전역 변수&quot; // 패키지 전역 변수 &amp;larr;&amp;nbsp; main 함수 밖에서 선언, 모든 함수에서 접근 가능&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;func&amp;nbsp;main()&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;var a int = 10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// 명시적 선언 : var 키워드와 type을 명시적으로 선언&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;var y = 10&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 타입을 생략하면 Go가 자동 추론 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;b := &quot;hello&quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// 짧은 선언 : 함수 내에서만 사용 가능 (var 없이 자동 타입 추론) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;const&amp;nbsp;PI&amp;nbsp;=&amp;nbsp;3.14159&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;상수&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;nums&amp;nbsp;:=&amp;nbsp;[]int{1,&amp;nbsp;2,&amp;nbsp;3,&amp;nbsp;4}&amp;nbsp;&amp;nbsp;//&amp;nbsp;슬라이스&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;person&amp;nbsp;:=&amp;nbsp;map[string]int{&quot;age&quot;:&amp;nbsp;30,&amp;nbsp;&quot;height&quot;:&amp;nbsp;175}&amp;nbsp;//&amp;nbsp;맵&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;fmt.Println(globalVar)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;fmt.Println(a,&amp;nbsp;b,&amp;nbsp;PI)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;fmt.Println(nums)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;fmt.Println(person)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;</description>
      <category>Golang/기본 문법</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2500</guid>
      <comments>https://link2me.tistory.com/2500#entry2500comment</comments>
      <pubDate>Wed, 8 Oct 2025 15:12:29 +0900</pubDate>
    </item>
    <item>
      <title>영혼의 언어는 행동</title>
      <link>https://link2me.tistory.com/2498</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;말을 예쁘게 하자.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; font-family: Nanum Gothic;&quot;&gt;결혼은 외부와 내부의 연합&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: Nanum Gothic;&quot;&gt;- 외부인의 환경과 조건을 안 볼 수는 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: Nanum Gothic;&quot;&gt;- 부모로서 가장 중요한 것은 안정감&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: Nanum Gothic;&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; font-family: Nanum Gothic;&quot;&gt;&lt;b&gt;여성들의 결혼 대상 1순위 덕목&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: Nanum Gothic;&quot;&gt;- 장모님과 아내가 원하는 건 안정감&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: Nanum Gothic;&quot;&gt;&amp;nbsp;1. 사회적 안정감 : 직장&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: Nanum Gothic;&quot;&gt;&amp;nbsp;2. 경제적 안정감 : 돈 얼마나 벌어?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: Nanum Gothic;&quot;&gt;&amp;nbsp;3. 정서적 안정감 : 나한테 꾸준히 잘 하느냐?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;&lt;b&gt;영혼의 언어는 &lt;span style=&quot;color: #ee2323;&quot;&gt;반복된 행동&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;관계에서 중요한 것은 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;예뻐 보이는 것&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&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;color: #000000; font-family: Nanum Gothic;&quot;&gt;나 조금 힘드네....&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: Nanum Gothic;&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;&lt;span style=&quot;color: #000000; font-family: Nanum Gothic;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>세상사</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2498</guid>
      <comments>https://link2me.tistory.com/2498#entry2498comment</comments>
      <pubDate>Wed, 8 Oct 2025 15:08:07 +0900</pubDate>
    </item>
    <item>
      <title>Claude Code 문제점 및 장점</title>
      <link>https://link2me.tistory.com/2499</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AI의 등장과 LLM의 발전으로 자연어로 대화하듯 코딩할 수 있는 세상이 도래되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개발자들은 이제 보일러플레이트 고드 작성, 단순한 함수 구현, 문서화 작업 등을 LLM에 맡기고, 시스템 아키텍처 설계, 비즈니스 로직 구현, 사용자 경험 개선 등 창의적이고 전략적인 업무에 시간을 투자해야 하는 시대가 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;chatGPT를 주로 사용하다가 코딩경력 40년된 분으로부터 claude code 가 좋다고 해서 claude 를 사용해보기 시작했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;chatGPT 와 다르게 claude 는 코드를 제대로 구현해주는 느낌을 받았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그러나 문제가 좀 있는 것은....&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;함수가 없어서 새로 구현해야 한다고 의견 제시를 하면 좋은데, 구현되어 있는 함수로 최대한 활용하여 코드를 구현하려는 못된 습성이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Web 에서 질문했을 때 무조건 새로운 대화창에 다시 문의하는 것이 대안이다. chatGPT에게 문의하면 오히려 문제가 해결될 수도 있다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러번 당해봐서 이제는 어떻게 해야 할지 알게 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;claude code 에서는 ESC 키를 눌러서 중단하고, 명확하게 요구사항을 다시 작성해서 요구하는 것이 좋다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;claude 는 Web 상에 코드를 붙여넣고 원하는 걸 구현 요청하다보니 토큰 소모가 claude code 보다 더 많은 거 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&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;&lt;span style=&quot;color: #000000;&quot;&gt;Back-End 코드를 구현하기 위해서는 먼저 테이블을 설계하고 테이블 구조를 claude에 알려줘야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테이블 설계는 chatGPT 와 claude 둘 다 활용하면서 진행해 봤다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테이블 설계를 한 후, 또는 설계된 테이블을 수정하면서 Spring Boot 에 필요한 RestController, Service, Mybatis mapper 등을 claude 가 알아서 구현해 준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JPA + QueryDSL 코드인 경우에도 잘 구현된 샘플이 매우 중요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;맨땅에서 헤딩하면서 잘 된 코드를 기대해서는 안된다. 잘 구현된 샘플코드가 매우 중요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;샘플코드는 Layout 등 템플릿 구조가 잘 설계된 코드를 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;잘 만들어진 템플릿을 구현하거나, 얻어서 테스트하고 내것으로 만드는 것이 중요한 거 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&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;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; claude code는 기존 구조를 스스로 파악해서 요청하는 신규 코드를 잘 구현&lt;/span&gt;한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Web 처럼 샘플코드를 찾아서 구조 설명하면서 이런 구조로 구현해 달라고 하지 않는 점이 장점이다. 경로만 잘 인식하도록 지정해주면 알아서 그 코드를 분석하고 신규 코드를 구현한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그런데 &lt;span style=&quot;color: #ee2323;&quot;&gt;구체적으로 요청하지 않으면 추론으로 쓸데없는 함수 구현을 많이 해주는 경향이 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;처음에는 명확하게 CRUD 만 구현할 것을 요청하는 것이 중요한 거 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그런 다음에 Front-End 코드를 구현할 사항을 정의하여 claude code 에 제공하고 구현 요청한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;당연히 관련된 백엔드 Controller 가 뭔지, 어떤 폴더에 있는지 알려줘야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Vue3 로 구현 시 잘 구현된 다른 폴더의 샘플을 제시하면 분석해서 순식간에 코드를 생성한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만, 코드가 완성도 있게 잘 구현되어 있기를 기대해서는 안되더라.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spring Boot 를 구동시키고, Vue3 를 구동시켜 테스트 하면서 하나씩 기능을 점검하고 추가하는 작업을 해야 원하는 결과를 빠르게 구현할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&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;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;백엔드&amp;nbsp;종료&amp;nbsp;완료.&amp;nbsp;이제&amp;nbsp;Edit&amp;nbsp;도구로&amp;nbsp;다시&amp;nbsp;시도합니다.&lt;br /&gt;●&amp;nbsp;Read(C:/Sample/spring/nindv/src/main/java/com/api/nindv/bw/service/DvInterviewService.java)&lt;br /&gt;&amp;nbsp;&amp;nbsp;⎿&amp;nbsp;&amp;nbsp;Read 10 lines&lt;br /&gt;●&amp;nbsp;Update(C:/Sample/spring/nindv/src/main/java/com/api/nindv/bw/service/DvInterviewService.java)&lt;br /&gt;&amp;nbsp;&amp;nbsp;⎿&amp;nbsp;&amp;nbsp;Error:&amp;nbsp;File&amp;nbsp;has&amp;nbsp;been&amp;nbsp;unexpectedly&amp;nbsp;modified.&amp;nbsp;Read&amp;nbsp;it&amp;nbsp;again&amp;nbsp;before&amp;nbsp;attempting&amp;nbsp;to&amp;nbsp;write&amp;nbsp;it.&lt;br /&gt;●&amp;nbsp;여전히&amp;nbsp;문제가&amp;nbsp;있습니다.&amp;nbsp;Claude&amp;nbsp;Code&amp;nbsp;내부&amp;nbsp;문제&amp;nbsp;같습니다.&lt;/b&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;&lt;span style=&quot;color: #000000;&quot;&gt;claude code 가 코드를 수정할 때 위 메시지가 나오면 무조건 claude code 내부 문제인 거 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이럴 때는 반드시 claude.md 로 현재까지 진행중인 것을 저장하고 claude code 를 재시작해서 시도해보자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그럼에도 안되면 Bash, sed 로 수정을 시도하더라.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만 Powershell, Python 으로 수정하면 파일이 깨지는 경우가 발생하므로 하기전에 반드시 git commit 부터 하고 나서 하는게 좋다.&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;color: #000000;&quot;&gt;claude code 를 사용하고 exit 하기 전에 반드시 &quot;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;claude.md 에 저장해줘. 그리고 다음에 이어서 할 수 있게 정리해줘&lt;/span&gt;&lt;/b&gt;&quot; 라고 하고 나서 exit 하자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Vue3, Spring Boot, Android git commit 해줘&quot;&lt;/b&gt;&lt;/span&gt; 라고 하자. 그러면 잘못 개발 진행되면 되돌릴 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Front-End 로 React 를 사용하면 React git commit 해줘 라고 하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코드를 대폭 수정해야 할 사항으로 진행하려고 한다면 반드시 git commit 을 먼저하고 나서 진행하는 것이 필수다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&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;&lt;span style=&quot;color: #000000;&quot;&gt;DB 연결 정보를 mcp mariadb 라고 claude code 에서 요청하면 해당 DB 접속정보를 만들어 낸다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그걸 반드시 테스트 해서 처리해야 한다. DB 테이블 저장 데이터, 테스트하는 user_id 등을 알려주고 테이블명 확인 요청 등을 하면서 데이터 잘못 저장하는지 확인 등 하면 좋다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그런데 신규 프로젝트를 생성하고 기존에 사용하던 .mcp.json 파일을 복사해서 DB 내용을 수정하고 claude Code 를 실행하면 접속이 자동으로 될 것으로 기대를 했으나 그렇지 않다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;몇번의 시행착오를 거치면서 알아낸 사실은 MCP 서버 자체의 env 파일은 다른 DB로 설정되어 있을 수 있으니 반드시 claude 에게 확인해서 정확한 접속이 되도록 설정을 하는 것이 중요하다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.3488%; text-align: center;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;width: 74.6512%; text-align: center;&quot;&gt;값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.3488%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.env 파일&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.6512%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;c:\DEV\mcp-servers\mariadb-mcp\nindv.env&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.3488%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DB_NAME&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.6512%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;nindv&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.3488%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.mcp.json 위치&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.6512%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;c:\AndroidStudioProjects\Logis\nindv\vue3\nindv-ui\.mcp.json&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.3488%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MCP 서버 이름&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.6512%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;mariadb-nindv&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.3488%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Claude Code 시작 위치&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.6512%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;c:\AndroidStudioProjects\Logis\nindv\vue3\nindv-ui&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.3488%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 쿼리&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.6512%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SELECT * FROM hr_members WHERE user_id = 'admin01';&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;color: #000000;&quot;&gt;Web 브라우저 콘솔 창에서 발생하는 로그를 일일히 붙여하면서 요청하는 것이 너무 귀찮아서 찾아보니 playwright mcp 를 설정해서 사용하면 편하다고 되어 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &quot;playwright를 사용해서 &lt;a style=&quot;color: #000000;&quot; href=&quot;https://example.com&quot;&gt;https://www.naver.com&lt;/a&gt; 에 접속하고 스크린샷을 찍어줘&quot; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &quot;playwright로 구글에서 'MCP'를 검색하고 결과를 가져와줘&quot; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;playwright를 이용해서 로그인 폼을 테스트하는 스크립트 만들어줘&quot; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;mcp playwright 로 스스로 Web 브라우저를 띄우고 알려준 user_id, pw 정보를 토대로 로그인 처리까지 하고 직접 콘솔 에러로그를 확인하면서 잘못된 것을 수정하고, 백엔드코드를 수정하는 걸 경험했다. 신세계를 경험하는 느낌이었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;일일이 설명하기 정말 귀찮은데 알아서 분석하는 것을 보니까 놀랍더라.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개발서버에서 개발한 코드를 CI/CD 로 자동으로 서버에 업로드하고 배포하는 걸 스크립트화 했더니 그 파일을 가지고 스스로 서버에 배포하면서 확인까지 하더라.&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;color: #000000;&quot;&gt;장점&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Vue3 프로젝트 폴더에서 백엔드 폴더 경로 알려주면 백엔드 파일도 같이 수정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; 한번에 Front-End 와 백엔드 코드를 개발하면서 진행하기 때문에 매우 편리하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 남들이 개발한 코드 분석하라고 하면 엄청 잘 한다. 세부적으로 잘하는 지 여부는 모르겠으나 전체 관점 로직 분석 짱.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. Github 등 공개된 오픈 소스 분석해서 내가 구현하고 싶은 걸 요청하는 거 정말 잘한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. 언어 상관없이 소스 분석 잘 한다. 그러니 내가 아는 Open 소스를 구하려고 하지 않아도 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5. 템플릿이 잘 구성된 코드 기반으로 살을 붙여가는 방식으로 코드 구현은 매우 좋은 거 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;6. 이미지 분석을 정말 잘한다. 설명하기 모호하면 캡쳐해서 이미지 경로 알려주고 설명 적어주는게 빠르다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp;이해를 잘못하고 엉뚱 한 걸 수정하면 이미지 캡쳐해서 저장하고 경로 알려주면 바로 이해하더라.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;7. &quot;Android 코틀린 앱의 채팅과 동일한 구조로 Vue3 채팅 메뉴를 구현해줘&quot; 라고 하면 Android kotlin 코드를 분석해서 Vue3 채팅 기능을 구현해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;8. 개발한 코드 산출물을 배포할 때 서버 환경 설정 등 정말 알아야 할게 많다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; 클로드 코드는 이런 걱정 전혀 할 필요없게 알아서 다 해준다. Git Bash 로 서버 접속할 수 있게만 해주면 알아서 서버 환경 설정하고 Windows11 에서 자동 배포 스크립트까지 만들고 에러 발생하면 에러 메시지 제공하면 수정하면서 금방 만든다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단점&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 분석을 100% 했을 거라고 기대하지만 막상 구현된 코드를 테스트하면 대략적인 흐름만 구현한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; 즉 디테일한 요구사항까지 분석해서 코드를 구현하지 않더라.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 하나의 프로젝트를 거의 완벽하게 구현한 코드를 95% 활용하고 싶어서 분석을 요청하면 대충 분석을 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; 기존 코드와 약간 다른 점, DB가 달라지는 점 등을 제대로 설명하기 위한 방법을 찾으려고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; mWeb 기능 @c:\DEV\Vue3\pchat-ui\ 프로젝트 참조해서 구현해줘. 라고 했더니 엉뚱하게 처리하더라.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; 제대로 분석 안했다고 하니까 그때서야 다시 분석하고 100% 그대로 복사하려는 경향을 보인다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; 결국 어떻게 알려줘야 제대로 할 것인가의 문제인 거 같다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. Spring Boot 는 백엔드 제어권을 내가 가지고 에러 메시지를 확인하면서 피드백해야 빠르다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; 제어권 넘기고 알아서 로그 분석하면서 할 것으로 기대하면 안된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. 중간에 변수명 변경한 것이 있으면 꼭 알려줘야 한다. 그리고 그와 관련된 모든 코드를 점검하라고 해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; 알아서 변경했겠거니 했다가 완전 맨붕상태 빠질 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; chatGPT는 마지막 파일을 Web 에 붙여넣으면 그 코드 기준으로 변수명을 업데이트하는데&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; claude 는 초기 읽어들인 변수명을 고집하는 경향이 있다. 그러므로 변수명 변경사항은 꼭 알려줘야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5. 전체 공통으로 영향을 주는 코드 파일이 있다. 하지만 무슨 문제가 생기면 이 파일도 수정해버리는 경향이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; 반드시 이 파일은 수정 불가라고 알려줘야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;6. 문제가 발생해서 에러 로그를 제공하면 문제 분석을 특정 부분으로 유추하지 못하고 엉뚱한 것부터 수정하려는 경향이 있다. 그러므로 이상한 분석을 하는 거 같으면 ESC 키를 눌러서 바로 중단하고 요청사항을 다시 적어 요청 수정해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;7. claude code 에서 이미지 경로를 알려주면 해당 이미지를 분석하고 그대로 구현하라고 하는 줄 알고 무조건 변경하는 경향이 있다. 이미지 경로를 알려주고, 여기서 원하는 것이 무엇인지 확인한 다음에 원하는 것이 정확하면 그때 수정하도록 하는 것이 중요하더라. Front-End 한 화면을 구현하기 위해서 이미지를 캡쳐하여 이미지 경로를 알려줄 때도 필요한 구체적인 요청을 먼저 확인한 다음에 개발 요청해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아직 claude code 사용 초보라서 모르는 사항이 많아 잘못 알고 있을 수도 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;claude code 를 사용하면서 chatGPT 에게 문의하는 비율은 10%도 안되는 거 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;claude code 발전 속도가 너무 대단한 거 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;바이브 코딩에 대한 유투브 소개 자료를 찾아보니, 설계를 잘하는 기술사는 바이브코딩 수혜자라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;점점 단순한 코딩만 하는 Junior 개발자의 역할은 AI 가 대신하고 기획하고, 설계할 줄 아는 인력에게 호재라고 할 수 있는 셈인가 보다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설계를 잘 한다는 것은 VOC 가 발생하지 않도록 신경써서 기획을 해야 하고, 지속 검토하면서 기획서를 완성시켜 가야 한다고 말할 수 있다. 이렇게 하면 무슨 문제가 발생할까, 저렇게 하면 무슨 문제가 발생할까 계속 검토하고 고민하면서 테스트하다보면 문제점 ZERO에 가까운 설계/기획서가 작성될 것이다. 출시후에도 민원처리부서의 요청사항, 고객의 소리 등을 분석하고 문제점을 찾아서 신속하게 대응하는 것 또한 매우 중요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코딩을 할 때에도 마찬가지이다. 디테일한 로직을 그리고 User의 관점에서 보는 눈을 길러야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;바이브코딩으로 해결하기 쉽지 않는 것이 보안 코딩이다. 질문자가 초보수준이면 답변도 초보 답변을 받을 수 밖에 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그럼 초보탈출은 어떻게 할 것인가? 인프런 강의 등을 듣고 직접 코딩 연습을 하듯이 타이핑을 했다면, 이제는 인프런 강의를 듣고 전체 로직을 이해하고 코딩은 AI에게 요청해서 제대로 구현했는지 확인하는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;중요한 정보라고 판단되는 것은 notion 에 기록하던, 블로그에 기록하든 정리를 해두는 것이 매우 중요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사람은 망각의 동물이라 배운 것을 금방 잊어버리게 된다. 기록해서 자주 반복하여 보거나, 코드를 직접 구현하면서 부딪쳐가면서 배우는 것이 기억에 오래도록 남는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전문가가 되려면 몸으로 부딪쳐 가면서 배우는 수밖에 없는 거 같다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아직 많이 부족하여 틈틈히 인프런 강의, fastcampus 강의를 수강하고 실습하고 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;배움에는 끝이 없다. 나이는 중요하지 않다. 노력하는 자만이 성장한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI TOOL</category>
      <category>ChatGPT</category>
      <category>claude</category>
      <category>claude code</category>
      <category>바이브 코딩</category>
      <category>바이브코딩</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2499</guid>
      <comments>https://link2me.tistory.com/2499#entry2499comment</comments>
      <pubDate>Sat, 20 Sep 2025 21:20:27 +0900</pubDate>
    </item>
    <item>
      <title>IntelliJ/IDEA 내 JDK 설정 확인</title>
      <link>https://link2me.tistory.com/2496</link>
      <description>&lt;h3 data-end=&quot;1688&quot; data-start=&quot;1656&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IntelliJ/IDEA 내 JDK 설정 확인&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1922&quot; data-start=&quot;1690&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1922&quot; data-start=&quot;1690&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;File &amp;gt; Project Structure &amp;gt; Project &amp;gt; Project SDK&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;File &amp;gt; Project Structure &amp;gt; Modules &amp;gt; Module SDK&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;File &amp;gt; Settings &amp;gt; Build, Execution, Deployment &amp;gt; Build Tools &amp;gt; Gradle &amp;gt; Gradle JVM&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모두 &lt;b&gt;Java 17&lt;/b&gt;로 설정되어야 합니다.&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;span style=&quot;color: #000000;&quot;&gt;$env:JAVA_HOME=&quot;C:\Program&amp;nbsp;Files\OpenLogic\jdk-17.0.14.7-hotspot&quot;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$env:PATH=&quot;$env:JAVA_HOME\bin;&quot;&amp;nbsp;+&amp;nbsp;$env:PATH&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;java&amp;nbsp;-version&lt;/span&gt;&lt;/p&gt;</description>
      <category>Spring Boot/IDEA</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2496</guid>
      <comments>https://link2me.tistory.com/2496#entry2496comment</comments>
      <pubDate>Thu, 12 Jun 2025 23:12:11 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot PostgreSQL 연동 오류</title>
      <link>https://link2me.tistory.com/2495</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;mariaDB 에서 PostgreSQL 로 변경하고 나서 데이터를 추가하니 이런 에러가 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PK 시퀀스가 자동으로 증가된 값을 인지하지 못해서 생기는 현상이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #fcf9f9; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #fcf9f9; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;2025&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;06&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;04T13:&lt;span style=&quot;color: #f9d465;&quot;&gt;32&lt;/span&gt;:&lt;span style=&quot;color: #f9d465;&quot;&gt;47.&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;652&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;09&lt;/span&gt;:&lt;span style=&quot;color: #f9d465;&quot;&gt;00&lt;/span&gt;&amp;nbsp;&amp;nbsp;WARN&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;22624&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;---&amp;nbsp;[mall]&amp;nbsp;[nio-8080-exec-6]&amp;nbsp;o.h.engine.jdbc.spi.SqlExceptionHelper&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;SQL&amp;nbsp;Error:&amp;nbsp;0,&amp;nbsp;SQLState:&amp;nbsp;23505&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;2025&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;06&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;04T13:&lt;span style=&quot;color: #f9d465;&quot;&gt;32&lt;/span&gt;:&lt;span style=&quot;color: #f9d465;&quot;&gt;47.&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;652&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;09&lt;/span&gt;:&lt;span style=&quot;color: #f9d465;&quot;&gt;00&lt;/span&gt;&amp;nbsp;ERROR&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;22624&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;---&amp;nbsp;[mall]&amp;nbsp;[nio-8080-exec-6]&amp;nbsp;o.h.engine.jdbc.spi.SqlExceptionHelper&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;오류:&amp;nbsp;중복된&amp;nbsp;키&amp;nbsp;값이&amp;nbsp;&quot;menu_orgchart_pkey&quot;&amp;nbsp;고유&amp;nbsp;제약&amp;nbsp;조건을&amp;nbsp;위반함&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;Detail:&amp;nbsp;(id)&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;7&lt;/span&gt;)&amp;nbsp;키가&amp;nbsp;이미&amp;nbsp;있습니다.&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;2025&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;06&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;04T13:&lt;span style=&quot;color: #f9d465;&quot;&gt;32&lt;/span&gt;:&lt;span style=&quot;color: #f9d465;&quot;&gt;47.&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;658&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;09&lt;/span&gt;:&lt;span style=&quot;color: #f9d465;&quot;&gt;00&lt;/span&gt;&amp;nbsp;ERROR&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;22624&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;---&amp;nbsp;[mall]&amp;nbsp;[nio-8080-exec-6]&amp;nbsp;c.m.s.a.m.a.s.filter.JWTCheckFilter&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;JWT&amp;nbsp;Check&amp;nbsp;Failed:&amp;nbsp;Request&amp;nbsp;processing&amp;nbsp;failed:&amp;nbsp;org.springframework.dao.DataIntegrityViolationException:&amp;nbsp;could&amp;nbsp;not&amp;nbsp;execute&amp;nbsp;statement&amp;nbsp;[오류:&amp;nbsp;중복된&amp;nbsp;키&amp;nbsp;값이&amp;nbsp;&quot;menu_orgchart_pkey&quot;&amp;nbsp;고유&amp;nbsp;제약&amp;nbsp;조건을&amp;nbsp;위반함&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;Detail:&amp;nbsp;(id)&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;7&lt;/span&gt;)&amp;nbsp;키가&amp;nbsp;이미&amp;nbsp;있습니다.]&amp;nbsp;[&lt;span style=&quot;color: #87a5f8;&quot;&gt;insert&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;into&lt;/span&gt;&amp;nbsp;menu_orgchart&amp;nbsp;(depth,name,parent_id,&lt;span style=&quot;color: #31e2f8;&quot;&gt;text&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;values&lt;/span&gt;&amp;nbsp;(?,?,?,?)];&amp;nbsp;SQL&amp;nbsp;[&lt;span style=&quot;color: #87a5f8;&quot;&gt;insert&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;into&lt;/span&gt;&amp;nbsp;menu_orgchart&amp;nbsp;(depth,name,parent_id,&lt;span style=&quot;color: #31e2f8;&quot;&gt;text&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;values&lt;/span&gt;&amp;nbsp;(?,?,?,?)];&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;constraint&lt;/span&gt;&amp;nbsp;[&lt;span style=&quot;color: #87a5f8;&quot;&gt;null&lt;/span&gt;]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;PostgreSQL 에 접속한 다음에 해당 DB에 접속한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어를 한번만 해주면 해결된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #fcf9f9; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #fcf9f9; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;DO&amp;nbsp;$$&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;DECLARE&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rec&amp;nbsp;RECORD;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;BEGIN&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;SERIAL,&amp;nbsp;BIGSERIAL&amp;nbsp;컬럼의&amp;nbsp;시퀀스와&amp;nbsp;테이블/컬럼&amp;nbsp;정보를&amp;nbsp;얻어서&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FOR&amp;nbsp;rec&amp;nbsp;IN&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;SELECT&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;s.relname&amp;nbsp;AS&amp;nbsp;sequence_name,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;t.relname&amp;nbsp;AS&amp;nbsp;table_name,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a.attname&amp;nbsp;AS&amp;nbsp;column_name&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;FROM&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;pg_class&amp;nbsp;s&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JOIN&amp;nbsp;pg_depend&amp;nbsp;d&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;d.objid&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;&amp;nbsp;s.oid&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JOIN&amp;nbsp;pg_class&amp;nbsp;t&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;d.refobjid&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;&amp;nbsp;t.oid&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JOIN&amp;nbsp;pg_attribute&amp;nbsp;a&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;a.attrelid&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;&amp;nbsp;t.oid&amp;nbsp;AND&amp;nbsp;a.attnum&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;&amp;nbsp;d.refobjsubid&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;WHERE&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;s.relkind&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'S'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;AND&amp;nbsp;d.deptype&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'a'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LOOP&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;setval을&amp;nbsp;수행&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EXECUTE&amp;nbsp;format(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'SELECT&amp;nbsp;setval('&lt;/span&gt;&lt;span style=&quot;color: #f4b235;&quot;&gt;'%I'&lt;/span&gt;&lt;span style=&quot;color: #f4b235;&quot;&gt;',&amp;nbsp;COALESCE((SELECT&amp;nbsp;MAX(%I)&amp;nbsp;FROM&amp;nbsp;%I),&amp;nbsp;1))'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;rec.sequence_name,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;rec.column_name,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;rec.table_name&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;END&amp;nbsp;LOOP;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;END$$;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring Boot/Basic</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2495</guid>
      <comments>https://link2me.tistory.com/2495#entry2495comment</comments>
      <pubDate>Wed, 4 Jun 2025 14:12:25 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot Entity 변수 일괄 변경 방법</title>
      <link>https://link2me.tistory.com/2494</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spring Boot 에서 MariaDB를 연동하여 테스트하고 있는데, PostgreSQL 로 변동하려면 칼럼을 전부 소문자로 변경해야 하더라. JPA 에서의 변수를 userID 이렇게 사용하던 걸 userId 로 변경해야 DB 칼럼에는 user_id 로 연동되어 처리된다.&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;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#############################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#########&amp;nbsp;RockeyOS&amp;nbsp;9.5&amp;nbsp;##########&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#############################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;ripgrep&amp;nbsp;설치&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;dnf&amp;nbsp;install&amp;nbsp;ripgrep&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;코드&amp;nbsp;일괄&amp;nbsp;변경&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;DB&amp;nbsp;테이블을&amp;nbsp;PostgreSQL&amp;nbsp;변경을&amp;nbsp;고려하여&amp;nbsp;칼럼명을&amp;nbsp;snake_case&amp;nbsp;로&amp;nbsp;변경하면서&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;members&amp;nbsp;테이블&amp;nbsp;칼럼을&amp;nbsp;일괄&amp;nbsp;변경하고&amp;nbsp;나서&amp;nbsp;관련된&amp;nbsp;Entity를&amp;nbsp;수정한다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;이후에&amp;nbsp;아래&amp;nbsp;코드로&amp;nbsp;관련된&amp;nbsp;함수&amp;nbsp;등을&amp;nbsp;일괄&amp;nbsp;변경&amp;nbsp;시도한다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;find&amp;nbsp;.&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;type&amp;nbsp;f&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;name&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;*.java&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;exec&lt;/span&gt;&amp;nbsp;sed&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;i&amp;nbsp;\&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;e&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'s/\buserID\b/userId/g'&lt;/span&gt;&amp;nbsp;\&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;e&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'s/\buserNM\b/userNm/g'&lt;/span&gt;&amp;nbsp;\&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;e&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'s/\btelNO\b/telNo/g'&lt;/span&gt;&amp;nbsp;\&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;e&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'s/\bmobileNO\b/mobileNo/g'&lt;/span&gt;&amp;nbsp;\&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;e&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'s/\bphoneSE\b/phoneSe/g'&lt;/span&gt;&amp;nbsp;\&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;e&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'s/\bcodeID\b/codeId/g'&lt;/span&gt;&amp;nbsp;\&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;e&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'s/\bregNO\b/regNo/g'&lt;/span&gt;&amp;nbsp;\&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{}&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;적용후&amp;nbsp;확인&amp;nbsp;명령어&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;rg&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'userID|userNM|telNO|mobileNO|phoneSE|codeID|regNO'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;glob&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'*.java'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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>Spring Boot/Basic</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2494</guid>
      <comments>https://link2me.tistory.com/2494#entry2494comment</comments>
      <pubDate>Fri, 30 May 2025 08:56:28 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot DB 칼럼 암호화 샘플</title>
      <link>https://link2me.tistory.com/2493</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DB 칼럼에 중요한 정보는 암호화 저장을 해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;처음에 평문으로 구성했던 칼럼을 암호화 업데이트 하기 위해서 아래와 같이 임시 적용한 코드를 적어둔다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;interface&lt;/span&gt;&amp;nbsp;MemberRepository&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;extends&lt;/span&gt;&amp;nbsp;JpaRepository&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;Member,&amp;nbsp;Long&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;모든&amp;nbsp;회원&amp;nbsp;평문&amp;nbsp;mobile_no만&amp;nbsp;조회&amp;nbsp;(필요에&amp;nbsp;따라&amp;nbsp;select&amp;nbsp;절&amp;nbsp;수정)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Query(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;SELECT&amp;nbsp;m&amp;nbsp;FROM&amp;nbsp;Member&amp;nbsp;m&amp;nbsp;WHERE&amp;nbsp;m.mobileNo&amp;nbsp;IS&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;AND&amp;nbsp;m.mobileNo&amp;nbsp;&amp;lt;&amp;gt;&amp;nbsp;''&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;Member&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;findAllWithMobileNo();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Service&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@RequiredArgsConstructor&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;&amp;nbsp;MemberMobileEncryptService&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;final&lt;/span&gt;&amp;nbsp;MemberRepository&amp;nbsp;memberRepository;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;final&lt;/span&gt;&amp;nbsp;EncryptService&amp;nbsp;encryptService;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Transactional&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;&amp;nbsp;encryptAllMobileNo()&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;userName&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;SafeDBKeyConfig.userName;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;tableName&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;SafeDBKeyConfig.tableName;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;columnName&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;SafeDBKeyConfig.columnName_mobileNo;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;1.&amp;nbsp;평문&amp;nbsp;mobile_no가&amp;nbsp;있는&amp;nbsp;회원&amp;nbsp;모두&amp;nbsp;조회&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;Member&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;memberList&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;memberRepository.findAllWithMobileNo();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;&amp;nbsp;updated&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;(Member&amp;nbsp;member&amp;nbsp;:&amp;nbsp;memberList)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;plainMobile&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;member.getMobileNo();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(plainMobile&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;null&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&amp;nbsp;plainMobile.isBlank())&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;continue&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;2.&amp;nbsp;암호화&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;encrypted&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;encryptService.encrypt(userName,&amp;nbsp;tableName,&amp;nbsp;columnName,&amp;nbsp;plainMobile);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;3.&amp;nbsp;update&amp;nbsp;(변경&amp;nbsp;감지,&amp;nbsp;JPA&amp;nbsp;자동&amp;nbsp;저장)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;member.setMobileNo(encrypted);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;updated&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;트랜잭션&amp;nbsp;끝나면&amp;nbsp;JPA&amp;nbsp;flush/commit&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;updated;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@SpringBootTest&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;&amp;nbsp;EncryptMobileNoTest&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Autowired&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;MemberMobileEncryptService&amp;nbsp;mobileEncryptService;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Test&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;void&lt;/span&gt;&amp;nbsp;testEncryptAllMobileNo()&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;&amp;nbsp;count&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;mobileEncryptService.encryptAllMobileNo();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;암호화&amp;nbsp;적용&amp;nbsp;회원&amp;nbsp;수:&amp;nbsp;&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;count);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring Boot/Security</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2493</guid>
      <comments>https://link2me.tistory.com/2493#entry2493comment</comments>
      <pubDate>Mon, 26 May 2025 13:44:16 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot 이미지 로딩 문제</title>
      <link>https://link2me.tistory.com/2492</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&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;&lt;span style=&quot;color: #000000;&quot;&gt;확장자&amp;nbsp;없는&amp;nbsp;요청을&amp;nbsp;아래와&amp;nbsp;같이&amp;nbsp;수정하고&amp;nbsp;정상동작함&lt;br /&gt;//&amp;nbsp;확장자&amp;nbsp;없는&amp;nbsp;요청&amp;nbsp;처리&amp;nbsp;(jpg,&amp;nbsp;png,&amp;nbsp;gif&amp;nbsp;등&amp;nbsp;순회&amp;nbsp;탐색)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;@GetMapping(&quot;/{memberId:[0-9]+}&quot;)&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;ResponseEntity&amp;lt;Resource&amp;gt;&amp;nbsp;getPhoto(@PathVariable&amp;nbsp;String&amp;nbsp;memberId)&lt;br /&gt;&lt;br /&gt;//&amp;nbsp;확장자&amp;nbsp;포함&amp;nbsp;요청&amp;nbsp;처리&amp;nbsp;(예:&amp;nbsp;/api/member/photo/10.png)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;@GetMapping(&quot;/{memberId}.{ext}&quot;)&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;ResponseEntity&amp;lt;Resource&amp;gt;&amp;nbsp;getPhotoWithExt&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring Boot/Basic</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2492</guid>
      <comments>https://link2me.tistory.com/2492#entry2492comment</comments>
      <pubDate>Sat, 24 May 2025 16:06:53 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot fetch join</title>
      <link>https://link2me.tistory.com/2491</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;fetch&amp;nbsp;join은&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;+&amp;nbsp;JPA&amp;nbsp;(Hibernate)&amp;nbsp;환경에서&amp;nbsp;지연&amp;nbsp;로딩(LAZY)&amp;nbsp;관계의&amp;nbsp;데이터를&amp;nbsp;한&amp;nbsp;번의&amp;nbsp;쿼리로&amp;nbsp;함께&amp;nbsp;조회할&amp;nbsp;때&amp;nbsp;사용하는&amp;nbsp;방법&lt;br /&gt;&lt;br /&gt;JPA에는&amp;nbsp;엔티티에&amp;nbsp;관계를&amp;nbsp;맵핑할&amp;nbsp;때&amp;nbsp;지연&amp;nbsp;로딩과&amp;nbsp;즉시&amp;nbsp;로딩&amp;nbsp;설정할&amp;nbsp;수&amp;nbsp;있다.&lt;br /&gt;일반&amp;nbsp;Join&amp;nbsp;:&amp;nbsp;연관&amp;nbsp;Entity에&amp;nbsp;Join을&amp;nbsp;걸어도&amp;nbsp;실제&amp;nbsp;쿼리에서&amp;nbsp;SELECT&amp;nbsp;하는&amp;nbsp;Entity는&amp;nbsp;오직&amp;nbsp;JPQL에서&amp;nbsp;조회하는&amp;nbsp;주체가&amp;nbsp;되는&amp;nbsp;Entity만&amp;nbsp;조회하여&amp;nbsp;영속화한다.&lt;br /&gt;Fetch&amp;nbsp;Join&amp;nbsp;:&amp;nbsp;조회의&amp;nbsp;주체가&amp;nbsp;되는&amp;nbsp;Entity&amp;nbsp;이외에&amp;nbsp;Fetch&amp;nbsp;Join이&amp;nbsp;걸린&amp;nbsp;연관&amp;nbsp;Entity도&amp;nbsp;함께&amp;nbsp;SELECT&amp;nbsp;하여&amp;nbsp;모두&amp;nbsp;영속화&lt;br /&gt;&lt;br /&gt;Member&amp;nbsp;Entity와&amp;nbsp;Team&amp;nbsp;Entity가&amp;nbsp;@ManyToOne&amp;nbsp;일&amp;nbsp;때&amp;nbsp;Entity&amp;nbsp;클래스에&amp;nbsp;서로의&amp;nbsp;관계를&amp;nbsp;표시해&amp;nbsp;준다.&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Getter&lt;br /&gt;@NoArgsConstructor(access&amp;nbsp;=&amp;nbsp;AccessLevel.PROTECTED)&lt;br /&gt;@ToString&lt;br /&gt;public&amp;nbsp;class&amp;nbsp;Member&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@GeneratedValue&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;=&amp;nbsp;&quot;member_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;Long&amp;nbsp;id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;String&amp;nbsp;username;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;int&amp;nbsp;age;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@ManyToOne(fetch&amp;nbsp;=&amp;nbsp;FetchType.LAZY)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@JoinColumn(name&amp;nbsp;=&amp;nbsp;&quot;team_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@ToString.Exclude&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;Team&amp;nbsp;team;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Fetch&amp;nbsp;Join&amp;nbsp;을&amp;nbsp;사용해야&amp;nbsp;하는&amp;nbsp;상황&lt;br /&gt;1.&amp;nbsp;@ManyToOne,&amp;nbsp;@OneToOne&amp;nbsp;연관&amp;nbsp;관계의&amp;nbsp;객체가&amp;nbsp;반복적으로&amp;nbsp;로딩될&amp;nbsp;때&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Query(&quot;SELECT&amp;nbsp;m&amp;nbsp;FROM&amp;nbsp;Member&amp;nbsp;m&amp;nbsp;JOIN&amp;nbsp;FETCH&amp;nbsp;m.team&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;Member&amp;gt;&amp;nbsp;findAll();&amp;nbsp;&amp;nbsp;//&amp;nbsp;N+1&amp;nbsp;문제&amp;nbsp;해결&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;JPQL&amp;nbsp;또는&amp;nbsp;QueryDSL로&amp;nbsp;다대일&amp;nbsp;관계를&amp;nbsp;한&amp;nbsp;번에&amp;nbsp;조회하고자&amp;nbsp;할&amp;nbsp;때&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;@ManyToOne,&amp;nbsp;@OneToOne&amp;nbsp;관계는&amp;nbsp;fetch&amp;nbsp;join으로&amp;nbsp;쉽게&amp;nbsp;한&amp;nbsp;쿼리에&amp;nbsp;묶을&amp;nbsp;수&amp;nbsp;있음&lt;br /&gt;&lt;br /&gt;Fetch&amp;nbsp;Join을&amp;nbsp;사용하면&amp;nbsp;안&amp;nbsp;되는&amp;nbsp;경우&lt;br /&gt;1.&amp;nbsp;컬렉션(@OneToMany,&amp;nbsp;@ManyToMany)에&amp;nbsp;페치&amp;nbsp;조인을&amp;nbsp;사용하면서&amp;nbsp;페이징이&amp;nbsp;필요한&amp;nbsp;경우&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;JPA는&amp;nbsp;fetch&amp;nbsp;join이&amp;nbsp;있는&amp;nbsp;경우&amp;nbsp;Pageable&amp;nbsp;정보를&amp;nbsp;무시하거나,&amp;nbsp;메모리에서&amp;nbsp;잘라내기&amp;nbsp;때문에&amp;nbsp;성능&amp;nbsp;이슈&amp;nbsp;발생&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;@BatchSize&amp;nbsp;또는&amp;nbsp;별도&amp;nbsp;쿼리&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;복수&amp;nbsp;개의&amp;nbsp;컬렉션을&amp;nbsp;동시에&amp;nbsp;Fetch&amp;nbsp;Join&amp;nbsp;할&amp;nbsp;때&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Query(&quot;SELECT&amp;nbsp;d&amp;nbsp;FROM&amp;nbsp;Department&amp;nbsp;d&amp;nbsp;JOIN&amp;nbsp;FETCH&amp;nbsp;d.employees&amp;nbsp;JOIN&amp;nbsp;FETCH&amp;nbsp;d.projects&quot;)&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;여러&amp;nbsp;컬렉션이&amp;nbsp;곱해져서&amp;nbsp;결과가&amp;nbsp;기하급수적으로&amp;nbsp;커질&amp;nbsp;수&amp;nbsp;있음&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;해결&amp;nbsp;방법:&amp;nbsp;컬렉션&amp;nbsp;하나만&amp;nbsp;fetch&amp;nbsp;join,&amp;nbsp;나머지는&amp;nbsp;batch&amp;nbsp;fetch&amp;nbsp;사용&lt;/span&gt;&lt;/p&gt;</description>
      <category>Spring Boot/Basic</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2491</guid>
      <comments>https://link2me.tistory.com/2491#entry2491comment</comments>
      <pubDate>Mon, 19 May 2025 14:56:50 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot 3.4.5 QueryDSL 예제 ProductSearch</title>
      <link>https://link2me.tistory.com/2489</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;성능 최적화 요소까지 완벽한 고려는 아니지만 코드는 많이 정리된 거 같아서 적어둔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;React 에서는 pk 값이 직접 노출되지 않도록 암호화처리하고, 대신에 no 를 넣어서 처리했다.&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;71&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;72&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;73&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;74&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;75&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;76&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;77&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;78&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;79&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;80&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;81&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;82&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;83&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;84&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;85&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;86&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;87&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;88&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;89&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;90&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;91&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;92&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Repository&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Transactional&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@RequiredArgsConstructor&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Log4j2&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;&amp;nbsp;ProductSearchImpl&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;implements&lt;/span&gt;&amp;nbsp;ProductSearch&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;final&lt;/span&gt;&amp;nbsp;JPAQueryFactory&amp;nbsp;queryFactory;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;final&lt;/span&gt;&amp;nbsp;CryptoUtil&amp;nbsp;cryptoUtil;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;Page&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;ProductDTO&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;searchList(PageRequestDTO&amp;nbsp;pageRequestDTO)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QProduct&amp;nbsp;product&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;QProduct.product;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QProductImage&amp;nbsp;productImage&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;QProductImage.productImage;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SearchConditionBuilder&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;Product&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;scb&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;SearchConditionBuilder&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;(Product.&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;product&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;where&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pageRequestDTO.getFilter().getWhere();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;keyword&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pageRequestDTO.getFilter().getKeyword();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OrderSpecifier&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;?&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;orderSpecifier&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;product.pno.desc();&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;기본값:&amp;nbsp;pno&amp;nbsp;내림차순&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(keyword&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;null&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;keyword.isBlank())&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;switch&lt;/span&gt;&amp;nbsp;(where)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;pname&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;scb.addLike(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;pname&quot;&lt;/span&gt;,&amp;nbsp;keyword);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;desc&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;scb.addLike(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;pdesc&quot;&lt;/span&gt;,&amp;nbsp;keyword);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;price&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;try&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;&amp;nbsp;minPrice&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;Integer.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;parseInt&lt;/span&gt;(keyword);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;scb.addGreaterThanEqual(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;price&quot;&lt;/span&gt;,&amp;nbsp;minPrice);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;orderSpecifier&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;product.price.asc();&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;가격&amp;nbsp;오름차순&amp;nbsp;정렬&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;catch&lt;/span&gt;&amp;nbsp;(NumberFormatException&amp;nbsp;e)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log.warn(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;가격&amp;nbsp;필터&amp;nbsp;숫자&amp;nbsp;변환&amp;nbsp;실패:&amp;nbsp;{}&quot;&lt;/span&gt;,&amp;nbsp;keyword);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BooleanBuilder&amp;nbsp;builder&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;scb.build();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Pageable&amp;nbsp;pageable&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;PageRequest.of(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;pageRequestDTO.getPage()&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;pageRequestDTO.getSize()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;Product&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;productList&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;queryFactory&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.selectFrom(product)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.leftJoin(product.imageList,&amp;nbsp;productImage).fetchJoin()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.where(product.delFlag.eq(&lt;span style=&quot;color: #2ce1bc;&quot;&gt;false&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.and(productImage.ord.eq(&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.and(builder))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.offset(pageable.getOffset())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.limit(pageable.getPageSize())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.orderBy(orderSpecifier)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.fetch();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;long&lt;/span&gt;&amp;nbsp;totalCount&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;queryFactory&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.select(product.count())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.from(product)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.leftJoin(product.imageList,&amp;nbsp;productImage)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.where(product.delFlag.eq(&lt;span style=&quot;color: #2ce1bc;&quot;&gt;false&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.and(productImage.ord.eq(&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.and(builder))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.fetchOne();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;ProductDTO&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;dtoList&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;IntStream.range(&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;,&amp;nbsp;productList.size())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.mapToObj(i&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Product&amp;nbsp;entity&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;productList.get(i);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;&amp;nbsp;no&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;)&amp;nbsp;(totalCount&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&amp;nbsp;(pageable.getPageNumber()&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;*&lt;/span&gt;&amp;nbsp;pageable.getPageSize())&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&amp;nbsp;i);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;toDTO(entity,&amp;nbsp;no);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;}).toList();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;PageImpl&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;(dtoList,&amp;nbsp;pageable,&amp;nbsp;totalCount);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;ProductDTO&amp;nbsp;toDTO(Product&amp;nbsp;product,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;&amp;nbsp;no)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;encryptedPno&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;cryptoUtil.encryptAES(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;valueOf&lt;/span&gt;(product.getPno()));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;fileNames&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;product.getImageList().stream()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.map(ProductImage::getFileName)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.toList();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;ProductDTO.builder()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.no(no)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.pno(encryptedPno)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.pname(product.getPname())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.price(product.getPrice())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.pdesc(product.getPdesc())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.uploadFileNames(fileNames)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.build();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;</description>
      <category>Spring Boot/Basic</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2489</guid>
      <comments>https://link2me.tistory.com/2489#entry2489comment</comments>
      <pubDate>Sun, 11 May 2025 12:47:35 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot 3.4.5 QueryDSL 예제 개선</title>
      <link>https://link2me.tistory.com/2488</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;QueryDSL 이전 게시글의 최적화 버전을 chatGPT 도움으로 변경한 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;71&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;72&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;73&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;74&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;75&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;76&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;77&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;78&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;79&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;80&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;81&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;82&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;83&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;84&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;85&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;86&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;87&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;88&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;89&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;90&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;91&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;92&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;93&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;94&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;95&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;96&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;97&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;98&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;99&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;100&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;101&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;102&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;103&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;104&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;105&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;106&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;107&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;108&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;109&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;110&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;111&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;112&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;113&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;114&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;115&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;116&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;117&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;118&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;119&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;120&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;121&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;122&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;123&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;124&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;125&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;126&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;127&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;128&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;129&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;130&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;131&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;132&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;133&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;134&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;135&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;136&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;137&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;138&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;139&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;140&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;141&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;142&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;com.querydsl.core.BooleanBuilder;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;com.querydsl.core.types.dsl.PathBuilder;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;com.querydsl.jpa.impl.JPAQuery;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;com.querydsl.jpa.impl.JPAQueryFactory;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;lombok.RequiredArgsConstructor;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;lombok.extern.log4j.Log4j2;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.data.domain.&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;*&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.stereotype.Service;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.transaction.annotation.Transactional;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.List;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.Map;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.Set;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.stream.Collectors;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.stream.IntStream;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Service&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Transactional&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Log4j2&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@RequiredArgsConstructor&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;생성자&amp;nbsp;자동&amp;nbsp;주입&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;&amp;nbsp;AccessLogSearchImpl&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;implements&lt;/span&gt;&amp;nbsp;AccessLogSearch&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;final&lt;/span&gt;&amp;nbsp;JPAQueryFactory&amp;nbsp;queryFactory;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;final&lt;/span&gt;&amp;nbsp;ErrorCodeRepository&amp;nbsp;errorCodeRepository;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;Page&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;AccessLogDTO&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;search1(PageRequestDTO&amp;nbsp;pageRequestDTO)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QAccessLog&amp;nbsp;accessLog&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;QAccessLog.accessLog;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BooleanBuilder&amp;nbsp;builder&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;BooleanBuilder();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;where&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pageRequestDTO.getFilter().getWhere();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;keyword&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pageRequestDTO.getFilter().getKeyword();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log.info(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;검색&amp;nbsp;필터&amp;nbsp;where&amp;nbsp;=&amp;nbsp;{},&amp;nbsp;keyword&amp;nbsp;=&amp;nbsp;{}&quot;&lt;/span&gt;,&amp;nbsp;where,&amp;nbsp;keyword);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(keyword&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;null&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;keyword.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;trim&lt;/span&gt;().isEmpty())&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;buildSearchCondition(builder,&amp;nbsp;accessLog,&amp;nbsp;where.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;trim&lt;/span&gt;(),&amp;nbsp;keyword.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;trim&lt;/span&gt;());&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Pageable&amp;nbsp;pageable&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;PageRequest.of(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pageRequestDTO.getPage()&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pageRequestDTO.getSize(),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sort.by(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;uid&quot;&lt;/span&gt;).descending()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JPAQuery&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;AccessLog&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;query&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;queryFactory&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.selectFrom(accessLog)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.where(builder)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.offset(pageable.getOffset())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.limit(pageable.getPageSize())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.orderBy(accessLog.uid.desc());&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;AccessLog&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;resultList&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;query.fetch();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;long&lt;/span&gt;&amp;nbsp;totalCount&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;queryFactory&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.select(accessLog.count())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.from(accessLog)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.where(builder)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.fetchOne();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;errorCode&amp;nbsp;메시지&amp;nbsp;전체&amp;nbsp;Map으로&amp;nbsp;미리&amp;nbsp;조회&amp;nbsp;(N+1&amp;nbsp;제거)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Map&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;Integer,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;errorMap&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;errorCodeRepository.findAll().stream()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.collect(Collectors.toMap(ErrorCode::getCodeId,&amp;nbsp;ErrorCode::getCodeNm));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;AccessLogDTO&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;dtoList&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;IntStream.range(&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;,&amp;nbsp;resultList.size())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.mapToObj(i&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AccessLog&amp;nbsp;entity&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;resultList.get(i);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;&amp;nbsp;no&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;)&amp;nbsp;(totalCount&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&amp;nbsp;(pageable.getPageNumber()&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;*&lt;/span&gt;&amp;nbsp;pageable.getPageSize())&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&amp;nbsp;i);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;toDTO(entity,&amp;nbsp;no,&amp;nbsp;errorMap);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;})&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.collect(Collectors.toList());&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;PageImpl&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;(dtoList,&amp;nbsp;pageable,&amp;nbsp;totalCount);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;void&lt;/span&gt;&amp;nbsp;buildSearchCondition(BooleanBuilder&amp;nbsp;builder,&amp;nbsp;QAccessLog&amp;nbsp;accessLog,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;where,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;keyword)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;switch&lt;/span&gt;&amp;nbsp;(where)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;userID&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;builder.and(accessLog.userid.containsIgnoreCase(keyword));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;userNM&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;builder.and(accessLog.userNM.containsIgnoreCase(keyword));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;ipaddr&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;builder.and(accessLog.ipaddr.containsIgnoreCase(keyword));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;route&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;builder.and(accessLog.route.stringValue().containsIgnoreCase(keyword));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;errorCode&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;Integer&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;codeIds&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;errorCodeRepository.findCodeIdsByCodeNmLike(keyword);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;codeIds.isEmpty())&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.and(accessLog.errCode.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;in&lt;/span&gt;(codeIds));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.and(accessLog.errCode.eq(&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;9999&lt;/span&gt;));&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;fallback&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;accessDate&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;[]&amp;nbsp;parts&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;keyword.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;split&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;/&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(parts.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;length&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;2&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;from&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;parts[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;].&lt;span style=&quot;color: #8ac7fd;&quot;&gt;trim&lt;/span&gt;();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;to&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;parts[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;].&lt;span style=&quot;color: #8ac7fd;&quot;&gt;trim&lt;/span&gt;();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(from.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;length&lt;/span&gt;()&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;8&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;to.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;length&lt;/span&gt;()&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;8&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(from.compareTo(to)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;temp&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;from;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;from&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;to;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;to&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;temp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.and(accessLog.date.between(from,&amp;nbsp;to));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.and(accessLog.date.startsWith(keyword));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;default&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;allowedFields&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;Set.of(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;userid&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;userNM&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;ipaddr&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;browser&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;os&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;date&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(allowedFields.contains(where))&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PathBuilder&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;AccessLog&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;pathBuilder&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;PathBuilder&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;(AccessLog.&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;accessLog&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.and(pathBuilder.getString(where).containsIgnoreCase(keyword));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log.warn(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&amp;nbsp;잘못된&amp;nbsp;where&amp;nbsp;필드명:&amp;nbsp;'{}'.&amp;nbsp;검색&amp;nbsp;조건&amp;nbsp;무시&quot;&lt;/span&gt;,&amp;nbsp;where);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;AccessLogDTO&amp;nbsp;toDTO(AccessLog&amp;nbsp;entity,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;&amp;nbsp;no,&amp;nbsp;Map&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;Integer,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;errorMap)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;errorMessage&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;errorCodeRepository&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.findMessageByCode(entity.getErrCode())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.orElse(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;valueOf&lt;/span&gt;(entity.getErrCode()));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;AccessLogDTO.builder()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.no(no)&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;&amp;nbsp;추가&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.uid(entity.getUid())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.ipaddr(MaskingUtil.ipAddressMasking(entity.getIpaddr()))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.date(InputSanitizer.displayDate(entity.getDate()))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.time(entity.getTime())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.OS(entity.getOs())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.browser(entity.getBrowser())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.userid(MaskingUtil.idMasking(entity.getUserid()))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.userNM(MaskingUtil.letterMasking(entity.getUserNM()))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.success(entity.getSuccess())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.route(entity.getRoute())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.errCode(entity.getErrCode())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.errorMessage(errorMap.getOrDefault(entity.getErrCode(),&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;valueOf&lt;/span&gt;(entity.getErrCode())))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.build();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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>Spring Boot/Basic</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2488</guid>
      <comments>https://link2me.tistory.com/2488#entry2488comment</comments>
      <pubDate>Sun, 4 May 2025 22:02:25 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot 3.4.5 QueryDSL 예제</title>
      <link>https://link2me.tistory.com/2487</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;접속로그를 동적 쿼리로 검색하는 걸 구현하는 예제를 적어둔다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;71&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;72&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;73&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;74&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;75&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;76&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;77&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;78&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;79&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;80&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;81&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;82&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;83&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;84&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;85&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;86&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;87&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;88&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;89&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;90&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;91&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;92&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;93&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;94&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;95&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;96&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;97&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;98&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;99&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;100&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;101&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;102&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;103&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;104&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;105&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;106&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;107&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;108&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;109&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;110&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;111&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;112&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;113&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;114&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;115&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;116&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;117&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;118&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;119&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;120&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;121&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;122&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;123&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;124&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;125&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;126&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;127&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;128&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;129&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;130&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;131&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;132&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;133&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;134&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;135&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;136&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Service&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Transactional&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Log4j2&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@RequiredArgsConstructor&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;생성자&amp;nbsp;자동&amp;nbsp;주입&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;&amp;nbsp;AccessLogSearchImpl&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;implements&lt;/span&gt;&amp;nbsp;AccessLogSearch&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;final&lt;/span&gt;&amp;nbsp;JPAQueryFactory&amp;nbsp;queryFactory;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;final&lt;/span&gt;&amp;nbsp;ErrorCodeRepository&amp;nbsp;errorCodeRepository;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;Page&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;AccessLogDTO&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;search1(PageRequestDTO&amp;nbsp;pageRequestDTO)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QAccessLog&amp;nbsp;accessLog&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;QAccessLog.accessLog;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BooleanBuilder&amp;nbsp;builder&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;BooleanBuilder();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;where&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pageRequestDTO.getFilter().getWhere();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;keyword&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pageRequestDTO.getFilter().getKeyword();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log.info(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;검색&amp;nbsp;필터&amp;nbsp;where&amp;nbsp;=&amp;nbsp;{},&amp;nbsp;keyword&amp;nbsp;=&amp;nbsp;{}&quot;&lt;/span&gt;,&amp;nbsp;where,&amp;nbsp;keyword);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(keyword&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;null&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;keyword.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;trim&lt;/span&gt;().isEmpty())&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;switch&lt;/span&gt;&amp;nbsp;(where)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;userID&quot;&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.and(accessLog.userid.containsIgnoreCase(keyword));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;userNM&quot;&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.and(accessLog.userNM.containsIgnoreCase(keyword));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;ipaddr&quot;&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.and(accessLog.ipaddr.containsIgnoreCase(keyword));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;route&quot;&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.and(accessLog.route.stringValue().containsIgnoreCase(keyword));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;errorCode&quot;&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.and(accessLog.errCode.stringValue().containsIgnoreCase(keyword));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;accessDate&quot;&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(keyword.contains(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;/&quot;&lt;/span&gt;))&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;[]&amp;nbsp;parts&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;keyword.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;split&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;/&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(parts.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;length&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;2&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;from&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;parts[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;].&lt;span style=&quot;color: #8ac7fd;&quot;&gt;trim&lt;/span&gt;();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;to&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;parts[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;].&lt;span style=&quot;color: #8ac7fd;&quot;&gt;trim&lt;/span&gt;();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log.info(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;accessDate&amp;nbsp;조건:&amp;nbsp;from&amp;nbsp;=&amp;nbsp;{},&amp;nbsp;to&amp;nbsp;=&amp;nbsp;{}&quot;&lt;/span&gt;,&amp;nbsp;from,&amp;nbsp;to);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(from.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;length&lt;/span&gt;()&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;8&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;to.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;length&lt;/span&gt;()&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;8&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;날짜&amp;nbsp;순서&amp;nbsp;보정&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(from.compareTo(to)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;temp&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;from;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;from&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;to;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;to&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;temp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log.info(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;accessDate&amp;nbsp;조건:&amp;nbsp;from&amp;nbsp;=&amp;nbsp;{},&amp;nbsp;to&amp;nbsp;=&amp;nbsp;{}&quot;&lt;/span&gt;,&amp;nbsp;from,&amp;nbsp;to);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.and(accessLog.date.between(from,&amp;nbsp;to));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.and(accessLog.date.startsWith(keyword));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;default&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;where가&amp;nbsp;명시되지&amp;nbsp;않은&amp;nbsp;컬럼이라면,&amp;nbsp;문자열&amp;nbsp;컬럼으로&amp;nbsp;간주하고&amp;nbsp;LIKE&amp;nbsp;처리&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;존재하지&amp;nbsp;않는&amp;nbsp;필드면&amp;nbsp;builder에&amp;nbsp;아무&amp;nbsp;조건도&amp;nbsp;추가하지&amp;nbsp;않음&amp;nbsp;&amp;rarr;&amp;nbsp;결과&amp;nbsp;없음&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;try&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PathBuilder&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;AccessLog&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;entityPath&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;PathBuilder&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;(AccessLog.&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;accessLog&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;유효한&amp;nbsp;필드인지&amp;nbsp;체크&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Field&amp;nbsp;field&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;AccessLog.&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;.getDeclaredField(where);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(field.getType().&lt;span style=&quot;color: #8ac7fd;&quot;&gt;equals&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;.&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;))&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.and(entityPath.getString(where).containsIgnoreCase(keyword));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log.warn(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&amp;nbsp;'{}'&amp;nbsp;필드는&amp;nbsp;문자열(String)이&amp;nbsp;아닙니다.&amp;nbsp;검색&amp;nbsp;제외됨&quot;&lt;/span&gt;,&amp;nbsp;where);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;catch&lt;/span&gt;&amp;nbsp;(NoSuchFieldException&amp;nbsp;e)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log.warn(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&amp;nbsp;존재하지&amp;nbsp;않는&amp;nbsp;where&amp;nbsp;필드명:&amp;nbsp;'{}'.&amp;nbsp;조건&amp;nbsp;제외&amp;nbsp;&amp;rarr;&amp;nbsp;결과&amp;nbsp;없음&amp;nbsp;처리&quot;&lt;/span&gt;,&amp;nbsp;where);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;builder에&amp;nbsp;조건&amp;nbsp;추가&amp;nbsp;안&amp;nbsp;함&amp;nbsp;&amp;rarr;&amp;nbsp;결과&amp;nbsp;없음&amp;nbsp;유도&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Pageable&amp;nbsp;pageable&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;PageRequest.of(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pageRequestDTO.getPage()&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pageRequestDTO.getSize(),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sort.by(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;uid&quot;&lt;/span&gt;).descending()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JPAQuery&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;AccessLog&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;query&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;queryFactory&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.selectFrom(accessLog)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.where(builder)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.offset(pageable.getOffset())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.limit(pageable.getPageSize())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.orderBy(accessLog.uid.desc());&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;AccessLog&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;resultList&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;query.fetch();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;long&lt;/span&gt;&amp;nbsp;totalCount&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;queryFactory&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.select(accessLog.count())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.from(accessLog)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.where(builder)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.fetchOne();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;AccessLogDTO&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;dtoList&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;IntStream.range(&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;,&amp;nbsp;resultList.size())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.mapToObj(i&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AccessLog&amp;nbsp;entity&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;resultList.get(i);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;&amp;nbsp;no&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;)&amp;nbsp;(totalCount&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&amp;nbsp;((pageable.getPageNumber())&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;*&lt;/span&gt;&amp;nbsp;pageable.getPageSize())&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&amp;nbsp;i);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;toDTO(entity,&amp;nbsp;no);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;})&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.collect(Collectors.toList());&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;PageImpl&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;(dtoList,&amp;nbsp;pageable,&amp;nbsp;totalCount);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;AccessLogDTO&amp;nbsp;toDTO(AccessLog&amp;nbsp;entity,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;&amp;nbsp;no)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;errorMessage&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;errorCodeRepository&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.findMessageByCode(entity.getErrCode())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.orElse(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;valueOf&lt;/span&gt;(entity.getErrCode()));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;AccessLogDTO.builder()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.no(no)&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;추가&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.uid(entity.getUid())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.ipaddr(MaskingUtil.ipAddressMasking(entity.getIpaddr()))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.date(InputSanitizer.displayDate(entity.getDate()))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.time(entity.getTime())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.OS(entity.getOs())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.browser(entity.getBrowser())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.userid(MaskingUtil.idMasking(entity.getUserid()))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.userNM(MaskingUtil.letterMasking(entity.getUserNM()))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.success(entity.getSuccess())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.route(entity.getRoute())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.errCode(entity.getErrCode())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.errorMessage(errorMessage)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.build();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;거의 동일한 코드를 최적화한 코드는 이 다음 게시글에 적어둘 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring Boot/Basic</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2487</guid>
      <comments>https://link2me.tistory.com/2487#entry2487comment</comments>
      <pubDate>Sun, 4 May 2025 21:56:35 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot 3.4.5 JOOQ TodoSearch 예제</title>
      <link>https://link2me.tistory.com/2486</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;QueryDSL 방식의 코드를 JOOQ 코드로 변경하는 방법으로 테스트하고 적어둔다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;720&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Service&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Transactional&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Log4j2&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@RequiredArgsConstructor&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;생성자&amp;nbsp;자동&amp;nbsp;주입&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;&amp;nbsp;TodoSearchImpl&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;implements&lt;/span&gt;&amp;nbsp;TodoSearch&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;final&lt;/span&gt;&amp;nbsp;DSLContext&amp;nbsp;dsl;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;Page&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;Todo&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;search1(PageRequestDTO&amp;nbsp;pageRequestDTO)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;keyword&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pageRequestDTO.getFilter().getKeyword();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;where&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pageRequestDTO.getFilter().getWhere();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Condition&amp;nbsp;condition&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;DSL.trueCondition();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;검색&amp;nbsp;조건&amp;nbsp;적용&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(keyword&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;null&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;keyword.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;trim&lt;/span&gt;().isEmpty())&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;switch&lt;/span&gt;&amp;nbsp;(where)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;title&quot;&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;condition&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;condition.and(TLB_TODO.TITLE.likeIgnoreCase(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;%&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;keyword&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;%&quot;&lt;/span&gt;));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;writer&quot;&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;condition&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;condition.and(TLB_TODO.WRITER.likeIgnoreCase(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;%&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;keyword&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;%&quot;&lt;/span&gt;));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;default&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;condition&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;condition.and(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TLB_TODO.TITLE.likeIgnoreCase(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;%&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;keyword&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;%&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.or(TLB_TODO.WRITER.likeIgnoreCase(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;%&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;keyword&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;%&quot;&lt;/span&gt;))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Pageable&amp;nbsp;pageable&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;PageRequest.of(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pageRequestDTO.getPage()&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pageRequestDTO.getSize(),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sort.by(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;tno&quot;&lt;/span&gt;).descending()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;실제&amp;nbsp;데이터&amp;nbsp;조회&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;Todo&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;content&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;dsl.selectFrom(TLB_TODO)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.where(condition)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.orderBy(TLB_TODO.TNO.desc())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.offset(pageable.getOffset())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.limit(pageable.getPageSize())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.fetch()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.map(record&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;Todo.builder()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.tno(record.getTno())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.title(record.getTitle())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.writer(record.getWriter())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.complete(record.getComplete())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.dueDate(record.getDueDate())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.build());&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;long&lt;/span&gt;&amp;nbsp;totalCount&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;dsl.selectCount()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.from(TLB_TODO)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.where(condition)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.fetchOne(&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;,&amp;nbsp;Long.&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;PageImpl&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;(content,&amp;nbsp;pageable,&amp;nbsp;totalCount);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;color: #000000;&quot;&gt;JOOQ Config&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;720&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.jooq.DSLContext;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.jooq.SQLDialect;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.jooq.impl.DSL;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.annotation.Bean;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.annotation.Configuration;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;javax.sql.DataSource;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Configuration&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;&amp;nbsp;JooqConfig&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Bean&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;DSLContext&amp;nbsp;dslContext(DataSource&amp;nbsp;dataSource)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;DSL.using(dataSource,&amp;nbsp;SQLDialect.MARIADB);&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;DB에&amp;nbsp;맞게&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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 style=&quot;color: #000000;&quot;&gt;build.gradle&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;QueryDSL 과 JOOQ 혼용 테스트를 위해서 2가지 모두 처리할 수 있도록 구성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;720&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;71&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;72&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;73&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;74&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;75&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;76&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;77&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;78&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;79&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;80&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;81&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;82&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;83&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;84&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;85&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;86&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;87&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;88&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;89&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;90&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;91&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;92&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;93&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;94&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;95&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;96&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;97&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;98&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;99&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;100&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;101&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;102&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;103&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;104&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;105&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;106&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;107&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;108&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;109&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;110&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;111&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;112&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;113&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;114&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;115&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;116&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;117&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;118&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;119&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;120&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;121&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;122&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;123&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;124&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;125&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;126&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;127&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;128&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;129&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;130&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;131&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;132&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;133&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;134&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;135&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;136&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;137&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;138&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;plugins&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'java'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.springframework.boot'&lt;/span&gt;&amp;nbsp;version&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'3.4.4'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'io.spring.dependency-management'&lt;/span&gt;&amp;nbsp;version&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'1.1.7'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'nu.studer.jooq'&lt;/span&gt;&amp;nbsp;version&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'8.2'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt; JOOQ용 플러그인&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;group&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'com.mansa.smartx.api'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;version&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'0.0.1-SNAPSHOT'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;java&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;toolchain&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;languageVersion&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;JavaLanguageVersion.of(&lt;span style=&quot;color: #2ce1bc;&quot;&gt;17&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;configurations&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;compileOnly&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;extendsFrom&amp;nbsp;annotationProcessor&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;repositories&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mavenCentral()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;ext&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;querydslDir&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;$buildDir/generated/querydsl&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;jooqDir&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;$buildDir/generated-src/jooq&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sourceSets&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;main&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;java&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;srcDir&amp;nbsp;querydslDir&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;srcDir&amp;nbsp;jooqDir&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;dependencies&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.springframework.boot:spring-boot-starter-data-jpa'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.springframework.boot:spring-boot-starter-thymeleaf'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.springframework.boot:spring-boot-starter-web'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;compileOnly&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.projectlombok:lombok'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;developmentOnly&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.springframework.boot:spring-boot-devtools'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;runtimeOnly&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.mariadb.jdbc:mariadb-java-client'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;annotationProcessor&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.projectlombok:lombok'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.modelmapper:modelmapper:3.2.2'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;QueryDSL&amp;nbsp;추가&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'com.querydsl:querydsl-jpa:5.0.0:jakarta'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;annotationProcessor&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;com.querydsl:querydsl-apt:5.0.0:jakarta&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;annotationProcessor&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;jakarta.annotation:jakarta.annotation-api&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;annotationProcessor&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;jakarta.persistence:jakarta.persistence-api&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&amp;nbsp;JOOQ&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;org.jooq:jooq:3.19.7&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;jooqGenerator&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;org.jooq:jooq-codegen:3.19.7&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;jooqGenerator&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;org.mariadb.jdbc:mariadb-java-client&quot;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'net.coobird:thumbnailator:0.4.20'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.springframework.boot:spring-boot-starter-security'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'com.google.code.gson:gson:2.12.1'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'io.jsonwebtoken:jjwt-api:0.12.6'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'io.jsonwebtoken:jjwt-impl:0.12.6'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'io.jsonwebtoken:jjwt-jackson:0.12.6'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.springframework.boot:spring-boot-starter-validation'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&amp;nbsp;P6Spy&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.hibernate.orm:hibernate-core:6.6.12.Final'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&amp;nbsp;최신&amp;nbsp;버전&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&amp;nbsp;Redis&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.springframework.boot:spring-boot-starter-data-redis'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;test&amp;nbsp;롬복&amp;nbsp;사용&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;testImplementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.springframework.boot:spring-boot-starter-test'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;testImplementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.springframework.security:spring-security-test'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;testCompileOnly&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.projectlombok:lombok'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;testAnnotationProcessor&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.projectlombok:lombok'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;testImplementation&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'jakarta.persistence:jakarta.persistence-api:3.1.0'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;testRuntimeOnly&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.junit.platform:junit-platform-launcher'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;tasks.named(&lt;span style=&quot;color: #dbb84a;&quot;&gt;'compileJava'&lt;/span&gt;,&amp;nbsp;JavaCompile).configure&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;options.annotationProcessorGeneratedSourcesDirectory&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;file(querydslDir)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;tasks.named(&lt;span style=&quot;color: #dbb84a;&quot;&gt;'test'&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;useJUnitPlatform()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;tasks.named(&lt;span style=&quot;color: #dbb84a;&quot;&gt;'clean'&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;delete&amp;nbsp;querydslDir&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;delete&amp;nbsp;jooqDir&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;jooq&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;version&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'3.19.7'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;configurations&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;main&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;generationTool&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;jdbc&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;driver&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.mariadb.jdbc.Driver'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&amp;nbsp;또는&amp;nbsp;PostgreSQL&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'jdbc:mariadb://localhost:3306/malldb'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;user&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'testfox'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;password&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'TestCodefox!!'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;generator&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;database&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'org.jooq.meta.mariadb.MariaDBDatabase'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&amp;nbsp;또는&amp;nbsp;postgres&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inputSchema&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'malldb'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&amp;nbsp;보통&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'yourdb'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;includes&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'.*'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;generate&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;deprecated&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;false&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;records&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;true&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;immutablePojos&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;true&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fluentSetters&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;true&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;target&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packageName&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'com.jpashop.api.jooq.generated'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;directory&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;jooqDir&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring Boot/Basic</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2486</guid>
      <comments>https://link2me.tistory.com/2486#entry2486comment</comments>
      <pubDate>Sat, 3 May 2025 14:59:04 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot 3.4.5 QueryDSL TodoSearch 예제</title>
      <link>https://link2me.tistory.com/2485</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;QueryDSL TodoSearch 에 대한 예제다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;interface&lt;/span&gt;&amp;nbsp;TodoRepository&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;extends&lt;/span&gt;&amp;nbsp;JpaRepository&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;Todo,&amp;nbsp;Long&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;,&amp;nbsp;TodoSearch&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;TodoSearch는&amp;nbsp;JpaRepository에&amp;nbsp;붙이면&amp;nbsp;안&amp;nbsp;되는&amp;nbsp;인터페이스&amp;nbsp;=&amp;gt;&amp;nbsp;TodoSearch는&amp;nbsp;커스텀&amp;nbsp;구현용&amp;nbsp;인터페이스&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;interface&lt;/span&gt;&amp;nbsp;TodoSearch&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Page&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;Todo&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;search1(PageRequestDTO&amp;nbsp;pageRequestDTO);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Service&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Transactional&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Log4j2&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@RequiredArgsConstructor&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;생성자&amp;nbsp;자동&amp;nbsp;주입&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;&amp;nbsp;TodoSearchImpl&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;implements&lt;/span&gt;&amp;nbsp;TodoSearch&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;TodoSearchImpl의&amp;nbsp;이름이&amp;nbsp;정확히&amp;nbsp;TodoSearch&amp;nbsp;+&amp;nbsp;Impl이면,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;Spring&amp;nbsp;Data&amp;nbsp;JPA는&amp;nbsp;자동으로&amp;nbsp;이를&amp;nbsp;Repository&amp;nbsp;구현으로&amp;nbsp;인식한다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;final&lt;/span&gt;&amp;nbsp;JPAQueryFactory&amp;nbsp;queryFactory;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;Page&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;Todo&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;search1(PageRequestDTO&amp;nbsp;pageRequestDTO)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QTodo&amp;nbsp;qTodo&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;QTodo.todo;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BooleanBuilder&amp;nbsp;builder&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;BooleanBuilder();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;keyword&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pageRequestDTO.getKeyword();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;where&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pageRequestDTO.getWhere();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;검색&amp;nbsp;조건&amp;nbsp;적용&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(keyword&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;null&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;keyword.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;trim&lt;/span&gt;().isEmpty())&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;switch&lt;/span&gt;&amp;nbsp;(where)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;title&quot;&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.and(qTodo.title.containsIgnoreCase(keyword));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;writer&quot;&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.and(qTodo.writer.containsIgnoreCase(keyword));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;default&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.and(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;qTodo.title.containsIgnoreCase(keyword)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.or(qTodo.writer.containsIgnoreCase(keyword))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Pageable&amp;nbsp;pageable&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;PageRequest.of(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pageRequestDTO.getPage()&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pageRequestDTO.getSize(),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sort.by(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;tno&quot;&lt;/span&gt;).descending()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JPAQuery&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;Todo&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;query&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;queryFactory&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.selectFrom(qTodo)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.where(builder)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.offset(pageable.getOffset())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.limit(pageable.getPageSize())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.orderBy(qTodo.tno.desc());&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;Todo&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;resultList&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;query.fetch();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;long&lt;/span&gt;&amp;nbsp;totalCount&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;queryFactory&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.select(qTodo.count())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.from(qTodo)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.where(builder)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.fetchOne();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;PageImpl&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;(resultList,&amp;nbsp;pageable,&amp;nbsp;totalCount);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;QueryDSL로&amp;nbsp;직접&amp;nbsp;selectFrom(qTodo)를&amp;nbsp;사용하는&amp;nbsp;경우,&amp;nbsp;기본&amp;nbsp;정렬이&amp;nbsp;적용되지&amp;nbsp;않으며,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Sort.by(&quot;tno&quot;).descending()과&amp;nbsp;같은&amp;nbsp;JPA&amp;nbsp;Pageable의&amp;nbsp;정렬&amp;nbsp;정보도&amp;nbsp;자동&amp;nbsp;적용되지&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;&lt;span style=&quot;color: #000000;&quot;&gt;JPAQuery&amp;lt;Todo&amp;gt;&amp;nbsp;query&amp;nbsp;=&amp;nbsp;queryFactory&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.selectFrom(qTodo)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.where(builder)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.offset(pageable.getOffset())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.limit(pageable.getPageSize())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.orderBy(qTodo.tno.desc());&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;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;lombok.AllArgsConstructor;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;lombok.Builder;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;lombok.Data;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;lombok.NoArgsConstructor;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;lombok.experimental.SuperBuilder;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Data&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@SuperBuilder&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;-&amp;nbsp;**상속&amp;nbsp;관계가&amp;nbsp;있는&amp;nbsp;클래스**에서&amp;nbsp;부모&amp;nbsp;클래스의&amp;nbsp;빌더&amp;nbsp;패턴을&amp;nbsp;지원하기&amp;nbsp;위해&amp;nbsp;사용된다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@AllArgsConstructor&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;모든&amp;nbsp;필드에&amp;nbsp;대해&amp;nbsp;값을&amp;nbsp;받아&amp;nbsp;전체&amp;nbsp;매개변수&amp;nbsp;생성자를&amp;nbsp;자동으로&amp;nbsp;생성한다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@NoArgsConstructor&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;&amp;nbsp;PageRequestDTO&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Builder.Default&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;값을&amp;nbsp;명시적으로&amp;nbsp;설정하지&amp;nbsp;않을&amp;nbsp;때만&amp;nbsp;기본값을&amp;nbsp;부여&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;&amp;nbsp;page&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Builder.Default&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;&amp;nbsp;size&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;10&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;Integer&amp;nbsp;blockSize;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;Integer로&amp;nbsp;변경&amp;nbsp;(null&amp;nbsp;체크&amp;nbsp;가능하게)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;where;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;검색&amp;nbsp;KEY&amp;nbsp;추가&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;keyword;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;검색어&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;&amp;nbsp;getBlockSize()&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;blockSize가&amp;nbsp;null이면&amp;nbsp;size와&amp;nbsp;동일하게&amp;nbsp;처리&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;(blockSize&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;null&lt;/span&gt;)&amp;nbsp;?&amp;nbsp;blockSize&amp;nbsp;:&amp;nbsp;size;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;react-querydsl-03.png&quot; data-origin-width=&quot;909&quot; data-origin-height=&quot;190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t7O47/btsNHeC8Xay/xEoSJX4jRhJFBkbprMh620/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t7O47/btsNHeC8Xay/xEoSJX4jRhJFBkbprMh620/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t7O47/btsNHeC8Xay/xEoSJX4jRhJFBkbprMh620/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft7O47%2FbtsNHeC8Xay%2FxEoSJX4jRhJFBkbprMh620%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;909&quot; height=&quot;190&quot; data-filename=&quot;react-querydsl-03.png&quot; data-origin-width=&quot;909&quot; data-origin-height=&quot;190&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Spring Boot/Basic</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2485</guid>
      <comments>https://link2me.tistory.com/2485#entry2485comment</comments>
      <pubDate>Thu, 1 May 2025 20:38:09 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot 3.4.5 QueryDSL 설정 오류 방지</title>
      <link>https://link2me.tistory.com/2484</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;온라인 강의 시점은 Spring Boot 버전이 2.X 이고 현재 내가 사용하는 Spring Boot 버전은 3.4.5 이다보니 오류가 발생해서 개고생을 해서 적어둔다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;chatGPT 도 엉터리로 답변을 해주는 통에 몇번의 시행착오를 거쳤다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;plugins&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'java'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'org.springframework.boot'&lt;/span&gt;&amp;nbsp;version&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'3.4.5'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'io.spring.dependency-management'&lt;/span&gt;&amp;nbsp;version&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'1.1.7'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;group&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'jpabook'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;version&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'0.0.1-SNAPSHOT'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;java&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;toolchain&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;languageVersion&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;JavaLanguageVersion.of(&lt;span style=&quot;color: #c10aff;&quot;&gt;17&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;configurations&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;compileOnly&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;extendsFrom&amp;nbsp;annotationProcessor&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;repositories&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mavenCentral()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;ext&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;querydslDir&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;$buildDir/generated/querydsl&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sourceSets.main.java.srcDir(querydslDir)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;dependencies&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'org.springframework.boot:spring-boot-starter-data-jpa'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'org.springframework.boot:spring-boot-starter-web'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;compileOnly&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'org.projectlombok:lombok'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;runtimeOnly&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'org.mariadb.jdbc:mariadb-java-client'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;annotationProcessor&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'org.projectlombok:lombok'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'com.querydsl:querydsl-jpa:5.0.0:jakarta'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;annotationProcessor&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;com.querydsl:querydsl-apt:5.0.0:jakarta&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;annotationProcessor&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'jakarta.annotation:jakarta.annotation-api'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;annotationProcessor&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;jakarta.persistence:jakarta.persistence-api&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;testImplementation&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'org.springframework.boot:spring-boot-starter-test'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;testImplementation&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'jakarta.persistence:jakarta.persistence-api:3.1.0'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;testRuntimeOnly&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'org.junit.platform:junit-platform-launcher'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;tasks.named(&lt;span style=&quot;color: #ffd500;&quot;&gt;'compileJava'&lt;/span&gt;,&amp;nbsp;JavaCompile).configure&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;options.annotationProcessorGeneratedSourcesDirectory&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;file(querydslDir)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;tasks.named(&lt;span style=&quot;color: #ffd500;&quot;&gt;'test'&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;useJUnitPlatform()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;tasks.named(&lt;span style=&quot;color: #ffd500;&quot;&gt;'clean'&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;delete&amp;nbsp;querydslDir&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;com.querydsl.jpa.impl.JPAQueryFactory;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;jakarta.persistence.EntityManager;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;jakarta.persistence.PersistenceContext;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.annotation.Bean;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.annotation.Configuration;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Configuration&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;&amp;nbsp;QueryDslConfig&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@PersistenceContext&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;EntityManager&amp;nbsp;entityManager;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Bean&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;JPAQueryFactory&amp;nbsp;jpaQueryFactory()&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;JPAQueryFactory(entityManager);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;QueryDSL을&amp;nbsp;사용할&amp;nbsp;때&amp;nbsp;반드시&amp;nbsp;JPAQueryFactory를&amp;nbsp;수동으로&amp;nbsp;Bean&amp;nbsp;등록해야&amp;nbsp;한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이&amp;nbsp;설정은&amp;nbsp;Spring이&amp;nbsp;애플리케이션&amp;nbsp;시작&amp;nbsp;시&amp;nbsp;JPAQueryFactory를&amp;nbsp;Bean으로&amp;nbsp;등록해준다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Spring Boot/Basic</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2484</guid>
      <comments>https://link2me.tistory.com/2484#entry2484comment</comments>
      <pubDate>Mon, 28 Apr 2025 20:47:13 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot 기반 회원 테이블</title>
      <link>https://link2me.tistory.com/2483</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spring Boot 기능을 익히면서 회원 테이블을 생성하고 칼럼을 추가하면서 기능을 테스트하고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #fcf9f9; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #fcf9f9; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;CREATE&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;TABLE&lt;/span&gt;&amp;nbsp;members&amp;nbsp;(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;member_id&amp;nbsp;bigint(&lt;span style=&quot;color: #f9d465;&quot;&gt;20&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;userID&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;60&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;userNM&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;30&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;access&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;int&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;2&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'접속상태'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;access_failed_count&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;int&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;2&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'로그인실패횟수'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;access_date&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;datetime&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'접속일자&amp;nbsp;및&amp;nbsp;시간'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;date&amp;nbsp;date&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'최근접속일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;regNO&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;int&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;5&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'팀서열'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;admin&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;int&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;2&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'관리자유무'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;passwd&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;120&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;salt&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;20&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;email&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;60&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;org_id&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;int&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;5&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'조직도ID'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;parent_id&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;int&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;5&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'조직도&amp;nbsp;parent_id'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;codeID&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;int&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;4&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'직위'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;telNO&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;16&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'유선전화'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;mobileNO&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;30&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'휴대폰번호'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;workrole&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;200&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'담당업무'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;chosung&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;10&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'초성'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;reg_date&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;timestamp&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;current_timestamp()&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'등록일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;phoneSE&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;80&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'deviceID'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;is_temp_password&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;int&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;2&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'임시비번할당(1)'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;passwd_change_date&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;datetime&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'비밀번호&amp;nbsp;변경일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;last_login_date&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;datetime&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'마지막성공로그인시간'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;display&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;int&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;2&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ENGINE&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;InnoDB&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;CHARSET&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;utf8mb3&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COLLATE&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;utf8mb3_general_ci;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ALTER&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;TABLE&lt;/span&gt;&amp;nbsp;members&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ADD&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;PRIMARY&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;&amp;nbsp;(member_id),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ADD&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;UNIQUE&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;&amp;nbsp;userID&amp;nbsp;(userID)&amp;nbsp;USING&amp;nbsp;BTREE;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ALTER&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;TABLE&lt;/span&gt;&amp;nbsp;members&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;MODIFY&lt;/span&gt;&amp;nbsp;member_id&amp;nbsp;bigint(&lt;span style=&quot;color: #f9d465;&quot;&gt;20&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;AUTO_INCREMENT&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;COMMIT;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;71&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;72&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;73&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;74&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;75&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;76&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;77&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;78&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;79&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;80&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;81&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;82&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;83&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;84&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;85&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;86&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;87&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;88&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;89&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;90&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;91&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;92&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;93&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;94&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;95&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;96&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;97&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;98&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;99&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;100&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;101&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;102&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;103&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;104&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;105&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;106&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;107&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;108&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;jakarta.persistence.&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;*&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;lombok.&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;*&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.time.LocalDate;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.time.LocalDateTime;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.ArrayList;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.List;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Entity&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Table(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;members&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Getter&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Setter&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@NoArgsConstructor&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@AllArgsConstructor&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Builder&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@ToString(exclude&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;roleList&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;&amp;nbsp;Member&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Id&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@GeneratedValue(strategy&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;GenerationType.IDENTITY)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;member_id&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;Long&amp;nbsp;memberId;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;userID&quot;&lt;/span&gt;,&amp;nbsp;nullable&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;false&lt;/span&gt;,&amp;nbsp;unique&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;true&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;length&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;60&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;userID;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;userNM&quot;&lt;/span&gt;,&amp;nbsp;nullable&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;false&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;length&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;30&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;userNM;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;regNO&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;&amp;nbsp;regNO;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;admin&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;&amp;nbsp;admin;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;passwd&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;length&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;120&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;passwd;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;salt&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;length&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;20&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;salt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;email&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;length&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;60&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;email;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;org_id&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;Integer&amp;nbsp;orgId;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;parent_id&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;Integer&amp;nbsp;parentId;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;codeID&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;Integer&amp;nbsp;codeID;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;telNO&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;length&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;16&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;telNO;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;mobileNO&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;length&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;30&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;mobileNO;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;workrole&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;length&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;200&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;workrole;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;access&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;Integer&amp;nbsp;access;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;chosung&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;length&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;10&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;chosung;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;access_failed_count&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;Integer&amp;nbsp;accessFailedCount;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;access_date&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;LocalDateTime&amp;nbsp;accessDate;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;reg_date&quot;&lt;/span&gt;,&amp;nbsp;columnDefinition&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;timestamp&amp;nbsp;default&amp;nbsp;current_timestamp&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;LocalDateTime&amp;nbsp;regDate;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;date&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;LocalDate&amp;nbsp;date;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;phoneSE&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;length&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;80&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;phoneSE;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;is_temp_password&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;Integer&amp;nbsp;isTempPassword;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;관리자&amp;nbsp;임시&amp;nbsp;비밀번호&amp;nbsp;할당&amp;nbsp;여부&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;passwd_change_date&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;LocalDateTime&amp;nbsp;passwdChangeDate;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;비밀번호&amp;nbsp;변경일자&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;last_login_date&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;LocalDateTime&amp;nbsp;lastLoginDate;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;display&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;Integer&amp;nbsp;display;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Builder.Default&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@OneToMany(mappedBy&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;member&quot;&lt;/span&gt;,&amp;nbsp;fetch&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;FetchType.LAZY,&amp;nbsp;cascade&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;CascadeType.ALL)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;List&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;MemberRoleList&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;roleList&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;ArrayList&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;void&lt;/span&gt;&amp;nbsp;addRole(MemberRoleList&amp;nbsp;role)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;this&lt;/span&gt;.roleList.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;add&lt;/span&gt;(role);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;void&lt;/span&gt;&amp;nbsp;clearRoles()&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;this&lt;/span&gt;.roleList.clear();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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>Spring Boot/Basic</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2483</guid>
      <comments>https://link2me.tistory.com/2483#entry2483comment</comments>
      <pubDate>Sat, 26 Apr 2025 09:03:41 +0900</pubDate>
    </item>
    <item>
      <title>PostgeSQL 15 설치 및 사용법</title>
      <link>https://link2me.tistory.com/2482</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;mariaDB 를 주로 사용하는데 PostgreSQL 를 설치 및 사용이 필요해서 설치하는 과정을 적은 스크립트를 적어둔다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #fcf9f9; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;71&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;72&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;73&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;74&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;75&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;76&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;77&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;78&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;79&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;80&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;81&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;82&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;83&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;84&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;85&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;86&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;87&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;88&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;89&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;90&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;91&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;92&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;93&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;94&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;95&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;96&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;97&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;98&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;99&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;100&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;101&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;102&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;103&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;104&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;105&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;106&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;107&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;108&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;109&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;110&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;111&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;112&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;113&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;114&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;115&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;116&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;117&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;118&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;119&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;120&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;121&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;122&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;123&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;124&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;125&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;126&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;127&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;128&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;129&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;130&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;131&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;132&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;133&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;134&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;135&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;136&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;137&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;138&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;139&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;140&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;141&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;142&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;143&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;144&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;145&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;146&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;147&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;148&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;149&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;150&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;151&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;152&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;153&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;154&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;155&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;156&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;157&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;158&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;159&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;160&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;161&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;162&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;163&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;164&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;165&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;166&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;167&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;168&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;169&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;170&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;171&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;172&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;173&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;174&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;175&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;176&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;177&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;178&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;179&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;180&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;181&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;182&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;183&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;184&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;185&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;186&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;187&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;188&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;189&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;190&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;191&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;192&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;193&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;194&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;195&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;196&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;197&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;198&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;199&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;200&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;201&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;202&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;203&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;204&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;205&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;206&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;207&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;208&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;209&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;210&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;211&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;212&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;213&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;214&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;215&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;216&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;217&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;218&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;219&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;220&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;221&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;222&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #fcf9f9; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;################################&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#####&amp;nbsp;PostgreSQL&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;15&lt;/span&gt;&amp;nbsp;버전&amp;nbsp;설치&amp;nbsp;#####&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;################################&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;Rocky&amp;nbsp;Linux&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;9.&lt;/span&gt;5에서&amp;nbsp;MariaDB와&amp;nbsp;PostgreSQL을&amp;nbsp;동시에&amp;nbsp;설치하고&amp;nbsp;운용하는&amp;nbsp;것은&amp;nbsp;완전히&amp;nbsp;가능&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;현재&amp;nbsp;설치된&amp;nbsp;PostgreSQL&amp;nbsp;버전&amp;nbsp;확인&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;dnf&amp;nbsp;list&amp;nbsp;installed&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;|&lt;/span&gt;&amp;nbsp;grep&amp;nbsp;postgres&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;rpm&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;qa&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;|&lt;/span&gt;&amp;nbsp;grep&amp;nbsp;postgres&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;PostgreSQL&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;13&lt;/span&gt;&amp;nbsp;삭제&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;sudo&amp;nbsp;dnf&amp;nbsp;remove&amp;nbsp;명령어로&amp;nbsp;하나씩&amp;nbsp;찾아서&amp;nbsp;삭제한다.&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;PostgreSQL&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;13&lt;/span&gt;&amp;nbsp;데이터&amp;nbsp;디렉터리&amp;nbsp;제거&amp;nbsp;(선택&amp;nbsp;사항)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;rm&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;rf&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;lib&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;pgsql&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;13&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;postgreSQL&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;15&lt;/span&gt;&amp;nbsp;저장소&amp;nbsp;추가&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;dnf&amp;nbsp;install&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;y&amp;nbsp;https:&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;download.postgresql.org&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;pub&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;repos&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;yum&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;reporpms&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;EL&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;x86_64&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;pgdg&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;redhat&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;repo&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;latest.noarch.rpm&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#기존&amp;nbsp;내장된&amp;nbsp;PostgreSQL&amp;nbsp;저장소&amp;nbsp;비활성화&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;dnf&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;qy&amp;nbsp;module&amp;nbsp;disable&amp;nbsp;postgresql&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;PostgreSQL&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;15&lt;/span&gt;&amp;nbsp;설치&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;dnf&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;y&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;update&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;dnf&amp;nbsp;install&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;y&amp;nbsp;postgresql15&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;server&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;PostgreSQL&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;15&lt;/span&gt;&amp;nbsp;데이터베이스&amp;nbsp;구성&amp;nbsp;초기화&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;postgresql&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;15&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;setup&amp;nbsp;initdb&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;PostgreSQL&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;15&lt;/span&gt;&amp;nbsp;실행&amp;nbsp;및&amp;nbsp;서비스&amp;nbsp;등록&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;systemctl&amp;nbsp;enable&amp;nbsp;postgresql&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;15&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;systemctl&amp;nbsp;start&amp;nbsp;postgresql&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;15&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;PostgreSQL&amp;nbsp;상태&amp;nbsp;확인&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;systemctl&amp;nbsp;status&amp;nbsp;postgresql&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;15&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;PostgreSQL&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;15&lt;/span&gt;&amp;nbsp;확인&amp;nbsp;및&amp;nbsp;유지&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;usr&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;pgsql&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;15&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;bin&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;psql&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;--version&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;PATH에&amp;nbsp;PostgreSQL&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;15&lt;/span&gt;&amp;nbsp;바이너리&amp;nbsp;추가&amp;nbsp;(권장)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;echo&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'export&amp;nbsp;PATH=/usr/pgsql-15/bin:$PATH'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;~&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;.bash_profile&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;source&amp;nbsp;~&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;.bash_profile&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;psql&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;--version&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#########################################################&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;PostgreSQL&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;15&lt;/span&gt;&amp;nbsp;암호화&amp;nbsp;설정&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;1.&lt;/span&gt;&amp;nbsp;postgres&amp;nbsp;사용자로&amp;nbsp;전환&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;i&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;u&amp;nbsp;postgres&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;2.&lt;/span&gt;&amp;nbsp;psql&amp;nbsp;실행&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;psql&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;3.&lt;/span&gt;&amp;nbsp;비밀번호&amp;nbsp;설정&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;\password&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f4b235;&quot;&gt;&quot;postgres&quot;&lt;/span&gt;&amp;nbsp;사용자의&amp;nbsp;새&amp;nbsp;암호:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;특정&amp;nbsp;비밀번호로&amp;nbsp;직접&amp;nbsp;지정:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ALTER&lt;/span&gt;&amp;nbsp;USER&amp;nbsp;postgres&amp;nbsp;WITH&amp;nbsp;PASSWORD&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'새비밀번호'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ALTER&lt;/span&gt;&amp;nbsp;USER&amp;nbsp;postgres&amp;nbsp;WITH&amp;nbsp;PASSWORD&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'Wonderfull!!'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;4.&lt;/span&gt;&amp;nbsp;종료&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;\q&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;변경&amp;nbsp;후&amp;nbsp;PostgreSQL&amp;nbsp;재시작:&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;반드시&amp;nbsp;root&amp;nbsp;권한으로&amp;nbsp;접속된&amp;nbsp;상태에서&amp;nbsp;실행&amp;nbsp;가능&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;systemctl&amp;nbsp;restart&amp;nbsp;postgresql&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;15&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#######################################################################&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;pgAdmin&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;4&lt;/span&gt;&amp;nbsp;Web&amp;nbsp;모드&amp;nbsp;설치&amp;nbsp;(Rocky&amp;nbsp;Linux&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;9.&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;5&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#######################################################################&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;1.&lt;/span&gt;&amp;nbsp;필수&amp;nbsp;패키지&amp;nbsp;설치&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;dnf&amp;nbsp;install&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;y&amp;nbsp;yum&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;utils&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;2.&lt;/span&gt;&amp;nbsp;pgAdmin&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;4&lt;/span&gt;&amp;nbsp;저장소&amp;nbsp;추가&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;rpm&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;i&amp;nbsp;https:&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;ftp.postgresql.org&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;pub&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;pgadmin&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;pgadmin4&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;yum&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;pgadmin4&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;redhat&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;repo&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;1.&lt;/span&gt;noarch.rpm&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;3.&lt;/span&gt;&amp;nbsp;시스템&amp;nbsp;패키지&amp;nbsp;목록&amp;nbsp;업데이트&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;dnf&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;update&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;y&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;4.&lt;/span&gt;&amp;nbsp;pgAdmin&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;4&lt;/span&gt;&amp;nbsp;설치&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;dnf&amp;nbsp;install&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;y&amp;nbsp;pgadmin4&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;5.&lt;/span&gt;&amp;nbsp;Apache&amp;nbsp;웹서버&amp;nbsp;시작&amp;nbsp;및&amp;nbsp;활성화&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;systemctl&amp;nbsp;enable&amp;nbsp;httpd&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;systemctl&amp;nbsp;start&amp;nbsp;httpd&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;6.&lt;/span&gt;&amp;nbsp;pgAdmin&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;4&lt;/span&gt;&amp;nbsp;웹&amp;nbsp;모드&amp;nbsp;설정&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;usr&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;pgadmin4&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;bin&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;setup&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;web.sh&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;rarr;&amp;nbsp;웹&amp;nbsp;접속용&amp;nbsp;이메일&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;비밀번호&amp;nbsp;입력&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;이&amp;nbsp;명령을&amp;nbsp;실행하면&amp;nbsp;관리자&amp;nbsp;이메일과&amp;nbsp;비밀번호를&amp;nbsp;설정하라는&amp;nbsp;메시지가&amp;nbsp;나타납니다.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;입력&amp;nbsp;후&amp;nbsp;Apache&amp;nbsp;웹서버가&amp;nbsp;자동으로&amp;nbsp;재시작됩니다.&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;7.&lt;/span&gt;&amp;nbsp;방화벽&amp;nbsp;설정&amp;nbsp;(HTTP&amp;nbsp;포트&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;80&lt;/span&gt;&amp;nbsp;허용)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;firewall&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;cmd&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;--permanent&amp;nbsp;--add-service=http&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;firewall&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;cmd&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;--reload&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;8.&lt;/span&gt;&amp;nbsp;pgAdmin&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;4&lt;/span&gt;&amp;nbsp;접속&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;웹&amp;nbsp;브라우저에서&amp;nbsp;다음&amp;nbsp;주소로&amp;nbsp;접속하세요:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;http:&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;&amp;lt;&lt;/span&gt;서버&amp;nbsp;IP&amp;nbsp;또는&amp;nbsp;도메인&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#######################################################################&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#######&amp;nbsp;실제&amp;nbsp;적용&amp;nbsp;예제&amp;nbsp;######&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#######################################################################&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;i&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;u&amp;nbsp;postgres&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;psql&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;DB&amp;nbsp;생성&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;create&lt;/span&gt;&amp;nbsp;database&amp;nbsp;malldb&amp;nbsp;ENCODING&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'UTF8'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;\c&amp;nbsp;malldb&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;테이블&amp;nbsp;생성&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;CREATE&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;TABLE&lt;/span&gt;&amp;nbsp;members&amp;nbsp;(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;member_id&amp;nbsp;BIGINT&amp;nbsp;GENERATED&amp;nbsp;ALWAYS&amp;nbsp;AS&amp;nbsp;IDENTITY&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;PRIMARY&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;userID&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;VARCHAR&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;60&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;UNIQUE&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;userNM&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;VARCHAR&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;30&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access&amp;nbsp;INTEGER&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;1&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access_failed_count&amp;nbsp;INTEGER&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;0&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access_date&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;TIMESTAMP&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;date&amp;nbsp;DATE&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;regNO&amp;nbsp;INTEGER&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;0&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;admin&amp;nbsp;INTEGER&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;0&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;passwd&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;VARCHAR&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;120&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;email&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;VARCHAR&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;60&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;orgId&amp;nbsp;INTEGER&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;0&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parent_id&amp;nbsp;INTEGER&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;0&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;codeID&amp;nbsp;INTEGER&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;0&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;telNO&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;VARCHAR&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;16&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mobileNO&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;VARCHAR&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;30&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;workrole&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;VARCHAR&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;200&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;chosung&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;VARCHAR&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;10&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reg_date&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;TIMESTAMP&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;CURRENT_TIMESTAMP,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;phoneSE&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;VARCHAR&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;80&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display&amp;nbsp;INTEGER&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;1&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org_id&amp;nbsp;INTEGER&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;주석&amp;nbsp;설정&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;COLUMN&amp;nbsp;members.access&amp;nbsp;IS&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'접속상태'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;COLUMN&amp;nbsp;members.access_failed_count&amp;nbsp;IS&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'로그인실패횟수'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;COLUMN&amp;nbsp;members.date&amp;nbsp;IS&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'최근접속일자'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;COLUMN&amp;nbsp;members.regNO&amp;nbsp;IS&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'팀서열'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;COLUMN&amp;nbsp;members.admin&amp;nbsp;IS&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'관리자유무'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;COLUMN&amp;nbsp;members.orgId&amp;nbsp;IS&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'조직도ID'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;COLUMN&amp;nbsp;members.parent_id&amp;nbsp;IS&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'조직도&amp;nbsp;parent_id'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;COLUMN&amp;nbsp;members.codeID&amp;nbsp;IS&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'직위'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;COLUMN&amp;nbsp;members.telNO&amp;nbsp;IS&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'유선전화'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;COLUMN&amp;nbsp;members.mobileNO&amp;nbsp;IS&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'휴대폰번호'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;COLUMN&amp;nbsp;members.workrole&amp;nbsp;IS&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'담당업무'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;COLUMN&amp;nbsp;members.chosung&amp;nbsp;IS&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'초성'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;COLUMN&amp;nbsp;members.reg_date&amp;nbsp;IS&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'등록일자'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;COLUMN&amp;nbsp;members.phoneSE&amp;nbsp;IS&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'deviceID'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;테이블&amp;nbsp;생성&amp;nbsp;확인&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;\dt&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;특정&amp;nbsp;테이블&amp;nbsp;구조&amp;nbsp;보기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;\d&amp;nbsp;members&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;해당&amp;nbsp;DB&amp;nbsp;접속&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;\c&amp;nbsp;malldb&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;인덱스&amp;nbsp;확인&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;\di&amp;nbsp;members&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;*&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;인덱스&amp;nbsp;추가&amp;nbsp;(CREATE&amp;nbsp;INDEX)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;CREATE&lt;/span&gt;&amp;nbsp;INDEX&amp;nbsp;idx_userid&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;members(userID);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;여러&amp;nbsp;칼럼&amp;nbsp;복합&amp;nbsp;인덱스&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;CREATE&lt;/span&gt;&amp;nbsp;INDEX&amp;nbsp;idx_userid_orgid&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;members(userID,&amp;nbsp;orgId);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;유니크&amp;nbsp;인덱스&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;CREATE&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;UNIQUE&lt;/span&gt;&amp;nbsp;INDEX&amp;nbsp;idx_userid_unique&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;members(userID);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;인덱스&amp;nbsp;삭제&amp;nbsp;(DROP&amp;nbsp;INDEX)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;기본&amp;nbsp;문법&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;DROP&amp;nbsp;INDEX&amp;nbsp;index_name;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DROP&lt;/span&gt;&amp;nbsp;INDEX&amp;nbsp;idx_userid;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;############################################################################&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;사용자&amp;nbsp;권한&amp;nbsp;부여&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;i&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;u&amp;nbsp;postgres&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;psql&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;1.&amp;nbsp;사용자&amp;nbsp;생성&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;CREATE&lt;/span&gt;&amp;nbsp;USER&amp;nbsp;codefox&amp;nbsp;WITH&amp;nbsp;PASSWORD&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'Wonderfull!!'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;2.&amp;nbsp;특정&amp;nbsp;데이터베이스에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;권한&amp;nbsp;부여&amp;nbsp;(예:&amp;nbsp;malldb)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;GRANT&amp;nbsp;ALL&amp;nbsp;PRIVILEGES&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;DATABASE&amp;nbsp;malldb&amp;nbsp;TO&amp;nbsp;codefox;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;3.&amp;nbsp;(선택)&amp;nbsp;해당&amp;nbsp;데이터베이스의&amp;nbsp;모든&amp;nbsp;테이블,&amp;nbsp;시퀀스,&amp;nbsp;함수에&amp;nbsp;대한&amp;nbsp;권한&amp;nbsp;부여&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;DB를&amp;nbsp;처음&amp;nbsp;생성한&amp;nbsp;경우에는&amp;nbsp;필요&amp;nbsp;없지만,&amp;nbsp;이후&amp;nbsp;객체&amp;nbsp;생성&amp;nbsp;시엔&amp;nbsp;아래도&amp;nbsp;고려해야&amp;nbsp;합니다&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;\c&amp;nbsp;malldb&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;해당&amp;nbsp;DB에&amp;nbsp;접속한&amp;nbsp;후&amp;nbsp;실행&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;GRANT&amp;nbsp;ALL&amp;nbsp;PRIVILEGES&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;ALL&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;TABLES&lt;/span&gt;&amp;nbsp;IN&amp;nbsp;SCHEMA&amp;nbsp;public&amp;nbsp;TO&amp;nbsp;codefox;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;GRANT&amp;nbsp;ALL&amp;nbsp;PRIVILEGES&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;ALL&amp;nbsp;SEQUENCES&amp;nbsp;IN&amp;nbsp;SCHEMA&amp;nbsp;public&amp;nbsp;TO&amp;nbsp;codefox;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;GRANT&amp;nbsp;ALL&amp;nbsp;PRIVILEGES&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;ALL&amp;nbsp;FUNCTIONS&amp;nbsp;IN&amp;nbsp;SCHEMA&amp;nbsp;public&amp;nbsp;TO&amp;nbsp;codefox;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;4.&amp;nbsp;(선택)&amp;nbsp;앞으로&amp;nbsp;생성되는&amp;nbsp;객체에도&amp;nbsp;권한&amp;nbsp;자동&amp;nbsp;부여&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ALTER&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;PRIVILEGES&amp;nbsp;IN&amp;nbsp;SCHEMA&amp;nbsp;public&amp;nbsp;GRANT&amp;nbsp;ALL&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;TABLES&lt;/span&gt;&amp;nbsp;TO&amp;nbsp;codefox;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ALTER&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;PRIVILEGES&amp;nbsp;IN&amp;nbsp;SCHEMA&amp;nbsp;public&amp;nbsp;GRANT&amp;nbsp;ALL&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;SEQUENCES&amp;nbsp;TO&amp;nbsp;codefox;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ALTER&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;PRIVILEGES&amp;nbsp;IN&amp;nbsp;SCHEMA&amp;nbsp;public&amp;nbsp;GRANT&amp;nbsp;ALL&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;FUNCTIONS&amp;nbsp;TO&amp;nbsp;codefox;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;--&amp;nbsp;5.&amp;nbsp;빠져나오기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;\q&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;exit&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#######################################################################&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;PATH&amp;nbsp;추가&amp;nbsp;(권장)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;echo&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'export&amp;nbsp;PATH=/usr/pgsql-15/bin:$PATH'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;~&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;.bash_profile&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;source&amp;nbsp;~&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;.bash_profile&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;DB&amp;nbsp;백업&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;i&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;u&amp;nbsp;postgres&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;pg_dump&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;U&amp;nbsp;postgres&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;d&amp;nbsp;malldb&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;F&amp;nbsp;p&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;-&lt;/span&gt;f&amp;nbsp;malldb.sql&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#&amp;nbsp;다운로드&amp;nbsp;받은&amp;nbsp;파일의&amp;nbsp;경로&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;cd&amp;nbsp;&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;lib&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;pgsql&lt;span style=&quot;color: #fcf9f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;#######################################################################&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;postgresql-01.png&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;293&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYeWNT/btsNthN2qeF/KmHuJ9I1nYWLXi74FkjrQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYeWNT/btsNthN2qeF/KmHuJ9I1nYWLXi74FkjrQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYeWNT/btsNthN2qeF/KmHuJ9I1nYWLXi74FkjrQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYeWNT%2FbtsNthN2qeF%2FKmHuJ9I1nYWLXi74FkjrQK%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;601&quot; height=&quot;293&quot; data-filename=&quot;postgresql-01.png&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;293&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>SQL</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2482</guid>
      <comments>https://link2me.tistory.com/2482#entry2482comment</comments>
      <pubDate>Mon, 21 Apr 2025 13:28:25 +0900</pubDate>
    </item>
    <item>
      <title>--add-opens java.base/java.lang=ALL-UNNAMED</title>
      <link>https://link2me.tistory.com/2481</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 찾을 수 없어서 개삽질을 한참했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;build.gralde 에 아래와 같이 추가를 하고 컴파일을 하면 에러가 계속 발생한다.&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;clean&quot;&gt;&lt;code&gt;// P6Spy
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
implementation 'org.hibernate.orm:hibernate-core:6.2.12.Final'&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 이걸 Disable 시켜도 동일해서 아래와 같이 해결했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;add_on-01.png&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;289&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IwhkQ/btsNhuSX9h8/E3VBLPQ0jo2i92K76oKlnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IwhkQ/btsNhuSX9h8/E3VBLPQ0jo2i92K76oKlnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IwhkQ/btsNhuSX9h8/E3VBLPQ0jo2i92K76oKlnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIwhkQ%2FbtsNhuSX9h8%2FE3VBLPQ0jo2i92K76oKlnk%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;410&quot; height=&quot;289&quot; data-filename=&quot;add_on-01.png&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;289&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;color: #000000;&quot;&gt;'Modify&amp;nbsp;options'&amp;nbsp;버튼을&amp;nbsp;눌러&amp;nbsp;'Add&amp;nbsp;VM&amp;nbsp;options'를&amp;nbsp;선택&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;add_on-02.png&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;693&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X75vw/btsNfqqZgGG/MfSpc9hFTBMiklyEvkzL90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X75vw/btsNfqqZgGG/MfSpc9hFTBMiklyEvkzL90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X75vw/btsNfqqZgGG/MfSpc9hFTBMiklyEvkzL90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX75vw%2FbtsNfqqZgGG%2FMfSpc9hFTBMiklyEvkzL90%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;802&quot; height=&quot;693&quot; data-filename=&quot;add_on-02.png&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;693&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;새벽에 잠도 못자고 뭐하는 개짓거리인지 ㅠㅠㅠ&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해결 되었는데 잠이 오려나 모르겠네.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Spring Boot/IDEA</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2481</guid>
      <comments>https://link2me.tistory.com/2481#entry2481comment</comments>
      <pubDate>Fri, 11 Apr 2025 01:53:23 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot 테스트 Class 자동 생성 단축키</title>
      <link>https://link2me.tistory.com/2480</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스프링부트에서 테스트 코드 Class 를 자동으로 생성하는 단축키&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;idea_shortkey-01.png&quot; data-origin-width=&quot;835&quot; data-origin-height=&quot;469&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/df6RFn/btsNd51QtxX/kIxU3uNUNJHeywpP10m7xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/df6RFn/btsNd51QtxX/kIxU3uNUNJHeywpP10m7xk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/df6RFn/btsNd51QtxX/kIxU3uNUNJHeywpP10m7xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdf6RFn%2FbtsNd51QtxX%2FkIxU3uNUNJHeywpP10m7xk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;835&quot; height=&quot;469&quot; data-filename=&quot;idea_shortkey-01.png&quot; data-origin-width=&quot;835&quot; data-origin-height=&quot;469&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;</description>
      <category>Spring Boot/IDEA</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2480</guid>
      <comments>https://link2me.tistory.com/2480#entry2480comment</comments>
      <pubDate>Thu, 10 Apr 2025 13:14:03 +0900</pubDate>
    </item>
    <item>
      <title>localdata.go.kr 전체자료 CSV 업로드 목적 테이블</title>
      <link>https://link2me.tistory.com/2479</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;전체 자료를 csv 파일로 받은 걸 업로드 목적으로 만든 테이블 구조이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 테이블과 동일한 구조인데 index 부분을 좀 더 추가했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총 자료 개수는 1100만개 정도되고, 운영 자료만 450만개 정도 되더라.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #fcf9f9; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #fcf9f9; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DROP&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;TABLE&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`LocaldataCSV`&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;CREATE&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;TABLE&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`LocaldataCSV`&lt;/span&gt;&amp;nbsp;(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`idx`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;int&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;11&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'번호'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`opnSvcNm`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;200&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'개방서비스명'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`opnSvcId`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;char&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;10&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'개방서비스ID'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`opnSfTeamCode`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;char&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;7&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'개방자치단체코드'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`mgtNo`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;40&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'관리번호'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`apvPermYmd`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;12&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'인허가일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`apvCancelYmd`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;12&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'인허가취소일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`trdStateGbn`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;5&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'영업상태코드'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`trdStateNm`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;100&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'영업상태명'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`dtlStateGbn`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;4&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'상세영업상태코드'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`dtlStateNm`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;255&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'상세영업상태명'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`dcbYmd`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;12&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'폐업일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`clgStdt`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;12&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'휴업시작일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`clgEnddt`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;12&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'휴업종료일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`ropnYmd`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;12&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'재개업일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`siteTel`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;100&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'전화번호'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`siteArea`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;18&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'소재지면적'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`sitePostNo`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;7&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'지번우편번호'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`siteWhlAddr`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;200&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'지번주소'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`rdnWhlAddr`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;200&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'도로명주소'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`rdnPostNo`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;7&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'도로명우편번호'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`bplcNm`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;100&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'사업장명'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`lastModTs`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;20&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'최종수정일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`updateGbn`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;char&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;1&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'데이터갱신구분'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`updateDt`&lt;/span&gt;&amp;nbsp;date&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'데이터갱신일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`uptaeNm`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;100&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'업태구분명'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`x`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;char&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;20&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'좌표정보(X)'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`y`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;char&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;20&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'좌표정보(Y)'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`display`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;tinyint&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;2&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;1&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`region`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;10&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'지역'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ENGINE&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;MyISAM&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;CHARSET&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;utf8&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COLLATE&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;utf8_general_ci&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f4b235;&quot;&gt;'Local&amp;nbsp;Data&amp;nbsp;Table'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ALTER&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;TABLE&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`LocaldataCSV`&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ADD&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;PRIMARY&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #f4b235;&quot;&gt;`idx`&lt;/span&gt;),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ADD&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;UNIQUE&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`mgtNo`&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #f4b235;&quot;&gt;`opnSfTeamCode`&lt;/span&gt;,&lt;span style=&quot;color: #f4b235;&quot;&gt;`mgtNo`&lt;/span&gt;,&lt;span style=&quot;color: #f4b235;&quot;&gt;`opnSvcId`&lt;/span&gt;)&amp;nbsp;USING&amp;nbsp;BTREE,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ADD&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`bplcNm_rdnWhlAddr`&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #f4b235;&quot;&gt;`bplcNm`&lt;/span&gt;,&lt;span style=&quot;color: #f4b235;&quot;&gt;`rdnWhlAddr`&lt;/span&gt;,&lt;span style=&quot;color: #f4b235;&quot;&gt;`trdStateGbn`&lt;/span&gt;),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ADD&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`region`&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #f4b235;&quot;&gt;`region`&lt;/span&gt;),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ADD&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`apvPermYmd`&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #f4b235;&quot;&gt;`apvPermYmd`&lt;/span&gt;),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ADD&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`roadAddress`&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #f4b235;&quot;&gt;`rdnWhlAddr`&lt;/span&gt;),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ADD&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`jiAddress`&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #f4b235;&quot;&gt;`siteWhlAddr`&lt;/span&gt;),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ADD&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`uptaeNm`&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #f4b235;&quot;&gt;`uptaeNm`&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ALTER&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;TABLE&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`LocaldataCSV`&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;MODIFY&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;`idx`&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;int&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;11&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;AUTO_INCREMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'번호'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;COMMIT;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블 구조 SQL 파일&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/2k0Ny/btsNfQBGutc/l7cO3UXdtKJKTnJrwcx7K0/LocaldataCSV.sql?attach=1&amp;amp;knm=tfile.sql&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;LocaldataCSV.sql&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 전체자료 csv 파일을 서버에 업로드하고 자료를 자동으로 읽어들이는 코드를 구현해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 개수가 너무 많아서 메모리 걱정도 되고 그렇지만 시도해보려고 한다.&lt;/p&gt;</description>
      <category>SQL</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2479</guid>
      <comments>https://link2me.tistory.com/2479#entry2479comment</comments>
      <pubDate>Wed, 9 Apr 2025 19:37:15 +0900</pubDate>
    </item>
    <item>
      <title>네이버 증권 뉴스 크롤링</title>
      <link>https://link2me.tistory.com/2477</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;네이버 증권 뉴스를 엑셀로 저장하는 코드 예제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0px; padding: 0px; border: medium; background-color: #1c1818; border-radius: 4px; height: 585px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 585px;&quot;&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f; height: 585px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0px; text-align: left; height: 585px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;requests&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;from&lt;/span&gt;&amp;nbsp;bs4&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;BeautifulSoup&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;pandas&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;as&lt;/span&gt;&amp;nbsp;pd&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;from&lt;/span&gt;&amp;nbsp;datetime&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;datetime&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;Importing&amp;nbsp;datetime&amp;nbsp;module&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;today&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;datetime.now().strftime(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;%Y-%m-%d&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;data&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;50&lt;/span&gt;):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;f&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://finance.naver.com/news/mainnews.naver?date={today}&amp;amp;page={i}&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;headers&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;{&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;User-Agent&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Mozilla/5.0&quot;&lt;/span&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;requests.get(url,&amp;nbsp;headers&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;headers)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response.raise_for_status()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;soup&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;BeautifulSoup(response.text,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;html.parser&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;articles&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;soup.select(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;.block1&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;article&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;articles:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;article.select_one(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;.articleSubject&amp;nbsp;&amp;gt;&amp;nbsp;a&quot;&lt;/span&gt;).text&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;link&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://finance.naver.com&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;article.select_one(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;.articleSubject&amp;nbsp;&amp;gt;&amp;nbsp;a&quot;&lt;/span&gt;).get(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;href&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;content&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;article.select_one(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;.articleSummary&quot;&lt;/span&gt;).contents[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;].strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;press&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;article.select_one(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;.press&quot;&lt;/span&gt;).text.strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;date&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;article.select_one(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;.wdate&quot;&lt;/span&gt;).text.strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data.append([title,&amp;nbsp;link,&amp;nbsp;content,&amp;nbsp;press,&amp;nbsp;date])&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;soup.select_one(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;.pgRR&quot;&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;is&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;None&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;df&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pd.DataFrame(data,&amp;nbsp;columns&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'제목'&lt;/span&gt;,&lt;span style=&quot;color: #dbb84a;&quot;&gt;'링크'&lt;/span&gt;,&lt;span style=&quot;color: #dbb84a;&quot;&gt;'내용'&lt;/span&gt;,&lt;span style=&quot;color: #dbb84a;&quot;&gt;'언론사'&lt;/span&gt;,&lt;span style=&quot;color: #dbb84a;&quot;&gt;'날짜'&lt;/span&gt;])&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;df.to_csv(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;naver_finance_news.csv&quot;&lt;/span&gt;,&amp;nbsp;index&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;False&lt;/span&gt;,&amp;nbsp;encoding&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;utf-8-sig&quot;&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;UTF-8&amp;nbsp;인코딩&amp;nbsp;설정&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Web 크롤링/Python Crawling</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2477</guid>
      <comments>https://link2me.tistory.com/2477#entry2477comment</comments>
      <pubDate>Sat, 5 Apr 2025 23:46:06 +0900</pubDate>
    </item>
    <item>
      <title>MDB for React 버전 문제?</title>
      <link>https://link2me.tistory.com/2475</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;mdb_react_navbar-01.png&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckheWM/btsM6tolt2S/yA1IHVSUSgiTwtv1WvKBCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckheWM/btsM6tolt2S/yA1IHVSUSgiTwtv1WvKBCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckheWM/btsM6tolt2S/yA1IHVSUSgiTwtv1WvKBCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckheWM%2FbtsM6tolt2S%2FyA1IHVSUSgiTwtv1WvKBCk%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;1125&quot; height=&quot;61&quot; data-filename=&quot;mdb_react_navbar-01.png&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개삽질을 해도 우측에 로그인/로그아웃 버튼이 보이도록 하는 것이 안된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;npm&amp;nbsp;install&amp;nbsp;mdb-react-ui-kit@7.2.0&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&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;&lt;span style=&quot;color: #000000;&quot;&gt;현재 최신버전이 9.0.0 이다. 8.0.0 버전으로 변경만 해도 동일하게 로그인/로그아웃 버튼이 Home 메뉴 아래로 가버린다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이걸 공개한 회사는 이런 현상이 발생한 것을 모르고 있는 걸까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;##################################################################################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;###&amp;nbsp;프로젝트&amp;nbsp;생성&amp;nbsp;및&amp;nbsp;모듈&amp;nbsp;설치&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;##################################################################################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;###&amp;nbsp;프로젝트&amp;nbsp;생성&amp;nbsp;:&amp;nbsp;대문자는&amp;nbsp;포함할&amp;nbsp;수&amp;nbsp;없다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;npx&amp;nbsp;create&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;app&amp;nbsp;mdb&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;cd&amp;nbsp;mdb&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;모듈&amp;nbsp;설치&amp;nbsp;==&amp;gt;&amp;nbsp;mdb가&amp;nbsp;최신버전을&amp;nbsp;지원하지&amp;nbsp;않기&amp;nbsp;때문에&amp;nbsp;아래&amp;nbsp;버전으로&amp;nbsp;설치&amp;nbsp;필요&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;npm&amp;nbsp;install&amp;nbsp;react&amp;nbsp;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;dom&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;npm&amp;nbsp;install&amp;nbsp;mdb&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;ui&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;kit@&lt;span style=&quot;color: #2ce1bc;&quot;&gt;7.&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;2.&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;npm&amp;nbsp;install&amp;nbsp;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;router&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;dom&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;npm&amp;nbsp;install&amp;nbsp;@fortawesome&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;fontawesome&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;free&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;npm&amp;nbsp;install&amp;nbsp;bootstrap&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;npm&amp;nbsp;install&amp;nbsp;axios&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;############################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;RSA&amp;nbsp;암호화&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;npm&amp;nbsp;install&amp;nbsp;jsencrypt&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;############################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;###&amp;nbsp;React&amp;nbsp;with&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;API&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;############################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;Redux&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;npm&amp;nbsp;install&amp;nbsp;@reduxjs&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;toolkit&amp;nbsp;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;redux&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;npm&amp;nbsp;install&amp;nbsp;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;cookie&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;##################################################################################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;기존&amp;nbsp;모듈&amp;nbsp;삭제하고&amp;nbsp;다시&amp;nbsp;설치&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;rm&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;rf&amp;nbsp;node_modules&amp;nbsp;package&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;lock.json&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;npm&amp;nbsp;install&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;GitHub&amp;nbsp;에&amp;nbsp;자료&amp;nbsp;업로드할&amp;nbsp;때에&amp;nbsp;node_modules&amp;nbsp;폴더는&amp;nbsp;제외시키고&amp;nbsp;업로드한다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;PowerShell에서는&amp;nbsp;rm&amp;nbsp;대신&amp;nbsp;Remove-Item&amp;nbsp;명령어를&amp;nbsp;사용&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;Remove&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Item&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Recurse&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Force&amp;nbsp;node_modules,&amp;nbsp;package&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;lock.json&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;##################################################################################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;##&amp;nbsp;index.js&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;##################################################################################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;import&amp;nbsp;React&amp;nbsp;from&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;react&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;import&amp;nbsp;ReactDOM&amp;nbsp;from&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;react-dom/client&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;import&amp;nbsp;{&amp;nbsp;BrowserRouter&amp;nbsp;}&amp;nbsp;from&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;react-router-dom&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;import&amp;nbsp;App&amp;nbsp;from&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;./App&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;import&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'mdb-react-ui-kit/dist/css/mdb.min.css'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;import&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'@fortawesome/fontawesome-free/css/all.min.css'&lt;/span&gt;;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&amp;nbsp;아이콘용&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;import&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'bootstrap/dist/css/bootstrap.min.css'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;import&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'bootstrap/dist/js/bootstrap.min.js'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;const&amp;nbsp;root&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;ReactDOM.createRoot(document.getElementById(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;root&quot;&lt;/span&gt;));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;root.render(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;App&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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>React/React</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2475</guid>
      <comments>https://link2me.tistory.com/2475#entry2475comment</comments>
      <pubDate>Thu, 3 Apr 2025 20:42:54 +0900</pubDate>
    </item>
    <item>
      <title>localdata.go.kr 테이블 구조</title>
      <link>https://link2me.tistory.com/2474</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;localdata.go.kr 에서 제공하는 API 자료를 저장하기 위한 테이블 구조이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #fcf9f9; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #fcf9f9; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DROP&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;TABLE&lt;/span&gt;&amp;nbsp;Localdata;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;CREATE&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;TABLE&lt;/span&gt;&amp;nbsp;Localdata&amp;nbsp;(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;idx&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;int&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;11&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'번호'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;opnSfTeamCode&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;char&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;7&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'개방자치단체코드'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;mgtNo&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;40&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'관리번호'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;opnSvcId&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;char&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;10&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'개방서비스ID'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;updateGbn&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;char&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;1&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'데이터갱신구분'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;apvPermYmd&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;12&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'인허가일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;uptaeNm&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;100&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'업태구분명'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;opnSvcNm&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;200&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'개방서비스명'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;bplcNm&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;100&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'사업장명'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;siteTel&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;100&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'전화번호'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;sitePostNo&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;7&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'지번우편번호'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;siteWhlAddr&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;200&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'지번주소'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;rdnPostNo&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;7&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'도로명우편번호'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;rdnWhlAddr&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;200&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'도로명주소'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;siteArea&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;18&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'소재지면적'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;apvCancelYmd&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;12&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'인허가취소일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;dcbYmd&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;12&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'폐업일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;clgStdt&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;12&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'휴업시작일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;clgEnddt&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;12&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'휴업종료일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;ropnYmd&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;12&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'재개업일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;trdStateGbn&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;5&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'영업상태코드'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;trdStateNm&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;100&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'영업상태명'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;dtlStateGbn&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;4&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'상세영업상태코드'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;dtlStateNm&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;255&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'상세영업상태명'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;x&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;char&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;20&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'좌표정보(X)'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;y&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;char&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;20&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'좌표정보(Y)'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;lastModTs&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;20&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'최종수정일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;updateDt&amp;nbsp;date&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'데이터갱신일자'&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;display&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;tinyint&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;2&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;1&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;region&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;10&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'지역'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ENGINE&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;MyISAM&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;CHARSET&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;utf8&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COLLATE&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;utf8_general_ci&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f4b235;&quot;&gt;'Local&amp;nbsp;Data&amp;nbsp;Table'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ALTER&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;TABLE&lt;/span&gt;&amp;nbsp;Localdata&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ADD&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;PRIMARY&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;&amp;nbsp;(idx),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ADD&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;UNIQUE&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;&amp;nbsp;mgtNo&amp;nbsp;(opnSfTeamCode,mgtNo,opnSvcId)&amp;nbsp;USING&amp;nbsp;BTREE,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ADD&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;&amp;nbsp;bplcNm_rdnWhlAddr&amp;nbsp;(bplcNm,rdnWhlAddr,trdStateGbn),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ADD&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;&amp;nbsp;region&amp;nbsp;(region),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ADD&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;&amp;nbsp;apvPermYmd&amp;nbsp;(apvPermYmd);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ALTER&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;TABLE&lt;/span&gt;&amp;nbsp;Localdata&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;MODIFY&lt;/span&gt;&amp;nbsp;idx&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;int&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;11&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;AUTO_INCREMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COMMENT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'번호'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;AUTO_INCREMENT&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;1&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;COMMIT;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;엔진은 InnoDB 로 변경해서 사용해도 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 테이블 구조 SQL 파일&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/oUHQV/btsM1eKHfnr/7SSY1vJf1ghT3vNRMTs8d1/Localdata.sql?attach=1&amp;amp;knm=tfile.sql&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Localdata.sql&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.localdata.go.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.localdata.go.kr/&lt;/a&gt; 사이트 접속해서 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;localdata_site-01.png&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mvrwn/btsM2WaYewH/QHypLteNpFU7xr5HdXEl2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mvrwn/btsM2WaYewH/QHypLteNpFU7xr5HdXEl2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mvrwn/btsM2WaYewH/QHypLteNpFU7xr5HdXEl2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmvrwn%2FbtsM2WaYewH%2FQHypLteNpFU7xr5HdXEl2K%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;545&quot; height=&quot;252&quot; data-filename=&quot;localdata_site-01.png&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;252&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;localdata_site-02.png&quot; data-origin-width=&quot;1164&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brN24Q/btsM1ngjRJP/MPU5ZUYny3OaKHsQudSaYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brN24Q/btsM1ngjRJP/MPU5ZUYny3OaKHsQudSaYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brN24Q/btsM1ngjRJP/MPU5ZUYny3OaKHsQudSaYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrN24Q%2FbtsM1ngjRJP%2FMPU5ZUYny3OaKHsQudSaYk%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;1164&quot; height=&quot;486&quot; data-filename=&quot;localdata_site-02.png&quot; data-origin-width=&quot;1164&quot; data-origin-height=&quot;486&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;localdata_site-03.png&quot; data-origin-width=&quot;1161&quot; data-origin-height=&quot;224&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2TJ9W/btsM0p0imNW/l8pNNiAkCT0l1fnKBUSdv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2TJ9W/btsM0p0imNW/l8pNNiAkCT0l1fnKBUSdv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2TJ9W/btsM0p0imNW/l8pNNiAkCT0l1fnKBUSdv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2TJ9W%2FbtsM0p0imNW%2Fl8pNNiAkCT0l1fnKBUSdv1%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;1161&quot; height=&quot;224&quot; data-filename=&quot;localdata_site-03.png&quot; data-origin-width=&quot;1161&quot; data-origin-height=&quot;224&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테이블 구조에 대한 설명이 나와있고 KEY 구현에 대한 사항도 언급되어 있다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>SQL</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2474</guid>
      <comments>https://link2me.tistory.com/2474#entry2474comment</comments>
      <pubDate>Sun, 30 Mar 2025 08:06:02 +0900</pubDate>
    </item>
    <item>
      <title>GitHub branch 변경 저장</title>
      <link>https://link2me.tistory.com/2472</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IntelliJ IDEA 에서 GitHub 로 자료를 업로드하다보니 잘못하여 작성한 자료가 전부 날라가는 현상을 겪었다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;git_reset-01.png&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCTFBa/btsMTJwY34s/wrdE1BfBxXPpDaoCJgTMFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCTFBa/btsMTJwY34s/wrdE1BfBxXPpDaoCJgTMFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCTFBa/btsMTJwY34s/wrdE1BfBxXPpDaoCJgTMFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCTFBa%2FbtsMTJwY34s%2FwrdE1BfBxXPpDaoCJgTMFK%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;892&quot; height=&quot;330&quot; data-filename=&quot;git_reset-01.png&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;330&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&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;&lt;span style=&quot;color: #000000;&quot;&gt;GitHub 에 첫번째 업로드를 stage01 로 업로드하고 다음 내용이 추가된 것은 stage02 로 업로드하기로 하고 시작했는데 업로드가 제대로 안되는 거다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;git branch stage02 로 새 브랜치를 생성만 하고, checkout 으로 해당 브랜치에 이동하지 않아서 생긴 문제였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#&amp;nbsp;stage01에&amp;nbsp;있는&amp;nbsp;최신&amp;nbsp;커밋을&amp;nbsp;stage02로도&amp;nbsp;가져오기&lt;br /&gt;git&amp;nbsp;checkout&amp;nbsp;stage02&lt;br /&gt;git&amp;nbsp;merge&amp;nbsp;stage01&lt;br /&gt;&lt;br /&gt;#&amp;nbsp;다시&amp;nbsp;PUSH&lt;br /&gt;git&amp;nbsp;push&amp;nbsp;-f&amp;nbsp;origin&amp;nbsp;stage02&lt;br /&gt;&lt;br /&gt;#&amp;nbsp;branch&amp;nbsp;를&amp;nbsp;만들면서&amp;nbsp;이동하려면&amp;nbsp;반드시&amp;nbsp;아래&amp;nbsp;명령어를&amp;nbsp;사용한다.&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;git&amp;nbsp;checkout&amp;nbsp;-b&amp;nbsp;stage02&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Git</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2472</guid>
      <comments>https://link2me.tistory.com/2472#entry2472comment</comments>
      <pubDate>Sun, 23 Mar 2025 16:03:45 +0900</pubDate>
    </item>
    <item>
      <title>방화벽(Firewalld)에서 8080 포트 직접 접근 차단</title>
      <link>https://link2me.tistory.com/2471</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Nginx&amp;nbsp;설정으로&amp;nbsp;8080&amp;nbsp;포트&amp;nbsp;접근을&amp;nbsp;차단&amp;nbsp;설정하면&amp;nbsp;문제가&amp;nbsp;발생하더라.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spring Boot 포트를 8080으로 설정해서 jar 파일을 구동시켰다.&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;nohup&amp;nbsp;java&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Xshare:off&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;jar&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;home&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spring&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;SpringJWT&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;SpringJWT&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0.&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0.&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;SNAPSHOT.jar&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;server.port&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;8080&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;log&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;springjwt.log&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;방화벽 설정을 아래와 같이 하면 &lt;a href=&quot;https://spb.abc.com:8080/api/pub-key&quot;&gt;https://spb.abc.com:8080/api/pub-key&lt;/a&gt; 와 같은 직접적인 접속을 허용하지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오로지 Front-End 언어(ex, React)에서 Back-End 를 호출하는 axios 라이브러리를 통한 접속만 허용한다.&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;ㅇ&amp;nbsp;현재&amp;nbsp;방화벽&amp;nbsp;설정&amp;nbsp;확인&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;firewall&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;cmd&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;list&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;all&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;ㅇ&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;8080&lt;/span&gt;&amp;nbsp;포트를&amp;nbsp;오직&amp;nbsp;로컬(Nginx)에서만&amp;nbsp;접근&amp;nbsp;가능하도록&amp;nbsp;설정&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;Nginx&amp;nbsp;프록시&amp;nbsp;서버만&amp;nbsp;8080&amp;nbsp;포트&amp;nbsp;접근&amp;nbsp;허용&amp;nbsp;(예:&amp;nbsp;127.0.0.1&amp;nbsp;또는&amp;nbsp;내부&amp;nbsp;IP)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;firewall&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;cmd&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;permanent&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;add&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;rich&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;rule&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'rule&amp;nbsp;family=&quot;ipv4&quot;&amp;nbsp;source&amp;nbsp;address=&quot;127.0.0.1&quot;&amp;nbsp;port&amp;nbsp;port=&quot;8080&quot;&amp;nbsp;protocol=&quot;tcp&quot;&amp;nbsp;accept'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;외부에서&amp;nbsp;8080&amp;nbsp;포트&amp;nbsp;접근&amp;nbsp;차단&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;firewall&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;cmd&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;permanent&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;add&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;rich&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;rule&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'rule&amp;nbsp;family=&quot;ipv4&quot;&amp;nbsp;port&amp;nbsp;port=&quot;8080&quot;&amp;nbsp;protocol=&quot;tcp&quot;&amp;nbsp;drop'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;방화벽&amp;nbsp;재적용&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;firewall&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;cmd&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;reload&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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 style=&quot;color: #000000;&quot;&gt;nginx.conf 설정 예제 파일&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제 클라우드 환경에서 동작 테스트한 스크립트이며 도메인만 다른 명칭으로 변경했다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉 abc 라고 된 부분만 실제 부분을 변경한 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;rocky linux 9.5 가 openssl 버전을 TLS 1.3 버전을 지원해서 아래와 같이 수정했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약 TLS 1.2 버전을 지원하면 ssl_ciphers 주석 부분을 살리고 이에 맞는 스크립트로 수정해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;71&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;72&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;73&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;74&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;75&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;76&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;77&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;78&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;79&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;80&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;81&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;82&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;83&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;84&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;85&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;86&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;87&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;88&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;89&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;90&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;91&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;92&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;93&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;94&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;95&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;96&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;97&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;worker_processes&amp;nbsp;auto;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;error_log&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;log&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;error.log&amp;nbsp;warn;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;pid&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;run&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx.pid;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;include&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;modules&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;enabled&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;*&lt;/span&gt;.conf;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;events&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;worker_connections&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1024&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;http&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;include&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;mime.types;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;default_type&amp;nbsp;application&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;octet&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;stream;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log_format&amp;nbsp;main&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'$remote_addr&amp;nbsp;-&amp;nbsp;$remote_user&amp;nbsp;[$time_local]&amp;nbsp;&quot;$request&quot;&amp;nbsp;'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'$status&amp;nbsp;$body_bytes_sent&amp;nbsp;&quot;$http_referer&quot;&amp;nbsp;'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'&quot;$http_user_agent&quot;&amp;nbsp;&quot;$http_x_forwarded_for&quot;'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access_log&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;log&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;access.log&amp;nbsp;main;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendfile&amp;nbsp;on;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;keepalive_timeout&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;65&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;시스템&amp;nbsp;정보&amp;nbsp;노출&amp;nbsp;제한&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server_tokens&amp;nbsp;off;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;디렉토리&amp;nbsp;검색&amp;nbsp;방지&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;autoindex&amp;nbsp;off;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssl_protocols&amp;nbsp;TLSv1.&lt;span style=&quot;color: #2ce1bc;&quot;&gt;3&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssl_ecdh_curve&amp;nbsp;X25519:prime256v1:secp384r1;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#ssl_ciphers&amp;nbsp;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssl_prefer_server_ciphers&amp;nbsp;off;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;Redirect&amp;nbsp;all&amp;nbsp;HTTP&amp;nbsp;traffic&amp;nbsp;to&amp;nbsp;HTTPS&amp;nbsp;for&amp;nbsp;spb.abc.com&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;listen&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;80&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server_name&amp;nbsp;spb.abc.com;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;301&lt;/span&gt;&amp;nbsp;https:&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb.abc.com$request_uri;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;Reverse&amp;nbsp;Proxy&amp;nbsp;for&amp;nbsp;spb.abc.com&amp;nbsp;with&amp;nbsp;React&amp;nbsp;static&amp;nbsp;files&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;listen&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;443&lt;/span&gt;&amp;nbsp;ssl;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server_name&amp;nbsp;spb.abc.com;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssl_certificate&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;letsencrypt&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;live&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb.abc.com&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;fullchain.pem;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssl_certificate_key&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;letsencrypt&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;live&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb.abc.com&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;privkey.pem;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssl_trusted_certificate&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;letsencrypt&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;live&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb.abc.com&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;chain.pem;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;include&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;letsencrypt&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;options&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;ssl&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;nginx.conf;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;error_log&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;log&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;error.log;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access_log&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;log&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;access.log&amp;nbsp;main;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;home&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;auth&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;build;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;index&amp;nbsp;index.html;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;location&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;try_files&amp;nbsp;$uri&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;index.html;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;limit_except&amp;nbsp;GET&amp;nbsp;POST&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;deny&amp;nbsp;all;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;location&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;static&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;root&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;home&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;auth&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;build&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;static;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;expires&amp;nbsp;30d;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;add_header&amp;nbsp;Cache&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Control&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;public,&amp;nbsp;max-age=2592000&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;location&amp;nbsp;~&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;*&lt;/span&gt;&amp;nbsp;\.(?:js&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;css&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;json&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;ico&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;png&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;jpg&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;jpeg&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;svg&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;woff&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;woff2&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;ttf&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;otf&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;eot&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;mp4&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;webm&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;ogv&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;ogg&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;mp3&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;wav&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;webp)$&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;expires&amp;nbsp;max;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;access_log&amp;nbsp;off;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;add_header&amp;nbsp;Cache&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Control&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;public&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;location&amp;nbsp;^~&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;api&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_pass&amp;nbsp;https:&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb.abc.com:&lt;span style=&quot;color: #2ce1bc;&quot;&gt;8080&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;api;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;Host&amp;nbsp;$host;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;X&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Real&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;IP&amp;nbsp;$remote_addr;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;X&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Forwarded&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;For&amp;nbsp;$proxy_add_x_forwarded_for;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;X&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Forwarded&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Proto&amp;nbsp;$scheme;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;location&amp;nbsp;^~&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;login&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_pass&amp;nbsp;https:&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb.abc.com:&lt;span style=&quot;color: #2ce1bc;&quot;&gt;8080&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;login;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;Host&amp;nbsp;$host;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;X&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Real&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;IP&amp;nbsp;$remote_addr;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;X&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Forwarded&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;For&amp;nbsp;$proxy_add_x_forwarded_for;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;X&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Forwarded&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Proto&amp;nbsp;$scheme;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;include&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;conf.d&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;*&lt;/span&gt;.conf;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;color: #000000;&quot;&gt;아래 내용은 chatGPT 도움을 받은 내용을 기록해 둔다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;location&amp;nbsp;^~&amp;nbsp;/api&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_pass&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://spb.abc.com:8080/api;&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://spb.abc.com:8080/api;&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;Host&amp;nbsp;$host;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;X-Real-IP&amp;nbsp;$remote_addr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;X-Forwarded-For&amp;nbsp;$proxy_add_x_forwarded_for;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;X-Forwarded-Proto&amp;nbsp;$scheme;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;이&amp;nbsp;설정은&amp;nbsp;Nginx가&amp;nbsp;/api&amp;nbsp;경로로&amp;nbsp;들어오는&amp;nbsp;요청을&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://spb.abc.com:8080/api로&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://spb.abc.com:8080/api로&lt;/a&gt;&amp;nbsp;프록시(Proxy)하는&amp;nbsp;역할을&amp;nbsp;한다.&lt;br /&gt;즉,&amp;nbsp;Front-End&amp;nbsp;가&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://spb.abc.com/api로&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://spb.abc.com/api로&lt;/a&gt;&amp;nbsp;요청을&amp;nbsp;보내면,&amp;nbsp;해당&amp;nbsp;요청이&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://spb.abc.com:8080/api로&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://spb.abc.com:8080/api로&lt;/a&gt;&amp;nbsp;전달된다.&lt;br /&gt;&lt;br /&gt;location&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;^~&lt;/b&gt;&lt;/span&gt;&amp;nbsp;/api&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/api로&amp;nbsp;시작하는&amp;nbsp;모든&amp;nbsp;요청을&amp;nbsp;처리한다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;^~&amp;nbsp;:&amp;nbsp;해당&amp;nbsp;경로가&amp;nbsp;요청&amp;nbsp;URL과&amp;nbsp;일치하면&amp;nbsp;더&amp;nbsp;이상&amp;nbsp;다른&amp;nbsp;location&amp;nbsp;블록을&amp;nbsp;검사하지&amp;nbsp;않음&amp;nbsp;(우선순위&amp;nbsp;높음).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;proxy_pass&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://spb.abc.com:8080/api;&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://spb.abc.com:8080/api;&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Nginx가&amp;nbsp;/api&amp;nbsp;요청을&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://spb.abc.com:8080/api로&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://spb.abc.com:8080/api로&lt;/a&gt;&amp;nbsp;전달한다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;예를&amp;nbsp;들어:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;React&amp;nbsp;요청:&amp;nbsp;&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://spb.abc.com/api/users&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://spb.abc.com/api/users&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Nginx가&amp;nbsp;전달하는&amp;nbsp;요청:&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://spb.abc.com:8080/api/users&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://spb.abc.com:8080/api/users&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_pass는&amp;nbsp;백엔드&amp;nbsp;서버(8080번&amp;nbsp;포트에서&amp;nbsp;실행&amp;nbsp;중인&amp;nbsp;API&amp;nbsp;서버)로&amp;nbsp;요청을&amp;nbsp;전달하는&amp;nbsp;역할을&amp;nbsp;한다.&lt;br /&gt;&lt;br /&gt;#&amp;nbsp;proxy_set_header&amp;nbsp;설정&lt;br /&gt;proxy_set_header&amp;nbsp;Host&amp;nbsp;$host;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;원본&amp;nbsp;요청의&amp;nbsp;Host&amp;nbsp;헤더를&amp;nbsp;유지한다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;기본적으로&amp;nbsp;proxy_pass를&amp;nbsp;사용하면&amp;nbsp;Nginx는&amp;nbsp;원래&amp;nbsp;요청의&amp;nbsp;Host&amp;nbsp;헤더를&amp;nbsp;변경할&amp;nbsp;수&amp;nbsp;있다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Host&amp;nbsp;헤더를&amp;nbsp;유지하면&amp;nbsp;백엔드&amp;nbsp;서버에서&amp;nbsp;도메인&amp;nbsp;정보를&amp;nbsp;유지한&amp;nbsp;채&amp;nbsp;요청을&amp;nbsp;처리할&amp;nbsp;수&amp;nbsp;있음.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;proxy_set_header&amp;nbsp;X-Real-IP&amp;nbsp;$remote_addr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;클라이언트(사용자)의&amp;nbsp;실제&amp;nbsp;IP&amp;nbsp;주소를&amp;nbsp;백엔드&amp;nbsp;서버로&amp;nbsp;전달한다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;예를&amp;nbsp;들어:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;클라이언트&amp;nbsp;IP:&amp;nbsp;123.45.67.89&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;백엔드&amp;nbsp;서버에서&amp;nbsp;보는&amp;nbsp;IP:&amp;nbsp;123.45.67.89&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Nginx가&amp;nbsp;백엔드&amp;nbsp;서버를&amp;nbsp;대신&amp;nbsp;호출하기&amp;nbsp;때문에,&amp;nbsp;백엔드에서는&amp;nbsp;보통&amp;nbsp;클라이언트의&amp;nbsp;IP를&amp;nbsp;127.0.0.1로&amp;nbsp;인식할&amp;nbsp;수&amp;nbsp;있다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;이&amp;nbsp;설정이&amp;nbsp;없으면&amp;nbsp;백엔드&amp;nbsp;서버는&amp;nbsp;모든&amp;nbsp;요청이&amp;nbsp;Nginx에서&amp;nbsp;온&amp;nbsp;것으로&amp;nbsp;인식할&amp;nbsp;수&amp;nbsp;있음.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;proxy_set_header&amp;nbsp;X-Forwarded-For&amp;nbsp;$proxy_add_x_forwarded_for;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;X-Forwarded-For&amp;nbsp;헤더는&amp;nbsp;클라이언트의&amp;nbsp;IP&amp;nbsp;주소를&amp;nbsp;보존하는&amp;nbsp;역할을&amp;nbsp;한다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;사용자가&amp;nbsp;여러&amp;nbsp;프록시를&amp;nbsp;거쳐&amp;nbsp;요청하는&amp;nbsp;경우:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;X-Forwarded-For:&amp;nbsp;123.45.67.89,&amp;nbsp;98.76.54.32,&amp;nbsp;192.168.1.10&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;123.45.67.89&amp;nbsp;&amp;rarr;&amp;nbsp;실제&amp;nbsp;클라이언트&amp;nbsp;IP&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;98.76.54.32&amp;nbsp;&amp;rarr;&amp;nbsp;중간&amp;nbsp;프록시&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;192.168.1.10&amp;nbsp;&amp;rarr;&amp;nbsp;마지막&amp;nbsp;프록시(Nginx)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;백엔드에서&amp;nbsp;로그를&amp;nbsp;분석할&amp;nbsp;때&amp;nbsp;실제&amp;nbsp;클라이언트의&amp;nbsp;IP를&amp;nbsp;확인할&amp;nbsp;수&amp;nbsp;있음.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;proxy_set_header&amp;nbsp;X-Forwarded-Proto&amp;nbsp;$scheme;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;클라이언트가&amp;nbsp;요청할&amp;nbsp;때&amp;nbsp;사용한&amp;nbsp;프로토콜(HTTP&amp;nbsp;또는&amp;nbsp;HTTPS)을&amp;nbsp;백엔드&amp;nbsp;서버에&amp;nbsp;전달한다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;예를&amp;nbsp;들어:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;클라이언트가&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://spb.abc.com/api&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://spb.abc.com/api&lt;/a&gt;&amp;nbsp;요청&amp;nbsp;&amp;rarr;&amp;nbsp;X-Forwarded-Proto:&amp;nbsp;https&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;클라이언트가&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;http://spb.abc.com/api&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;http://spb.abc.com/api&lt;/a&gt;&amp;nbsp;요청&amp;nbsp;&amp;rarr;&amp;nbsp;X-Forwarded-Proto:&amp;nbsp;http&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;백엔드에서&amp;nbsp;HTTPS&amp;nbsp;요청을&amp;nbsp;식별할&amp;nbsp;때&amp;nbsp;유용하다.&lt;br /&gt;&lt;br /&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;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;location&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;gis&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_pass&amp;nbsp;http:&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;192.&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;168.&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;123.&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;91&lt;/span&gt;:&lt;span style=&quot;color: #2ce1bc;&quot;&gt;18080&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_http_version&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1.&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;Host&amp;nbsp;$host;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;X&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Real&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;IP&amp;nbsp;$remote_addr;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;location&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;/gis&lt;/b&gt;&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/gis로&amp;nbsp;시작하는&amp;nbsp;모든&amp;nbsp;요청을&amp;nbsp;처리한다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;예를&amp;nbsp;들어:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;클라이언트&amp;nbsp;요청:&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://spb.abc.com/gis/map&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;http://spb.abc.com/gis/map&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Nginx가&amp;nbsp;전달하는&amp;nbsp;요청:&amp;nbsp;http://192.168.123.91:18080/map&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;nbsp;/gis는&amp;nbsp;프록시&amp;nbsp;서버에서&amp;nbsp;제거되므로,&amp;nbsp;백엔드&amp;nbsp;서버(192.168.123.91:18080)는&amp;nbsp;/map으로&amp;nbsp;요청을&amp;nbsp;받음.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;proxy_pass&amp;nbsp;http://192.168.123.91:18080;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;백엔드&amp;nbsp;서버(192.168.123.91:18080)로&amp;nbsp;요청을&amp;nbsp;전달한다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;예제:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;클라이언트&amp;nbsp;요청:&amp;nbsp;&lt;a href=&quot;http://spb.abc.com/gis/data&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;http://spb.abc.com/gis/data&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Nginx가&amp;nbsp;전달하는&amp;nbsp;요청:&amp;nbsp;http://192.168.123.91:18080/data&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/gis&amp;nbsp;경로는&amp;nbsp;자동으로&amp;nbsp;제거되며,&amp;nbsp;백엔드&amp;nbsp;서버가&amp;nbsp;그대로&amp;nbsp;요청을&amp;nbsp;처리할&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;설정됨.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;만약&amp;nbsp;/gis를&amp;nbsp;유지해야&amp;nbsp;한다면,&amp;nbsp;다음처럼&amp;nbsp;수정&amp;nbsp;필요&lt;br /&gt;proxy_pass&amp;nbsp;http://192.168.123.91:18080/gis;&lt;br /&gt;&lt;br /&gt;이렇게&amp;nbsp;하면&amp;nbsp;백엔드&amp;nbsp;서버에서&amp;nbsp;/gis/data&amp;nbsp;형태로&amp;nbsp;요청을&amp;nbsp;받게&amp;nbsp;된다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;proxy_http_version&amp;nbsp;1.1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;백엔드와의&amp;nbsp;통신에서&amp;nbsp;HTTP/1.1을&amp;nbsp;사용하도록&amp;nbsp;설정.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;기본적으로&amp;nbsp;Nginx는&amp;nbsp;HTTP/1.0을&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있음.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HTTP/1.1을&amp;nbsp;사용하면&amp;nbsp;WebSocket과&amp;nbsp;같은&amp;nbsp;기능을&amp;nbsp;지원할&amp;nbsp;수&amp;nbsp;있음.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;proxy_set_header&amp;nbsp;Host&amp;nbsp;$host;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;원본&amp;nbsp;요청의&amp;nbsp;Host&amp;nbsp;헤더를&amp;nbsp;유지하여&amp;nbsp;백엔드&amp;nbsp;서버로&amp;nbsp;전달한다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;예를&amp;nbsp;들어:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;클라이언트&amp;nbsp;요청&amp;nbsp;Host:&amp;nbsp;spb.abc.com&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;백엔드&amp;nbsp;서버에서&amp;nbsp;보는&amp;nbsp;Host:&amp;nbsp;spb.abc.com&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;백엔드가&amp;nbsp;요청을&amp;nbsp;받을&amp;nbsp;때&amp;nbsp;Nginx의&amp;nbsp;IP&amp;nbsp;대신&amp;nbsp;원본&amp;nbsp;도메인&amp;nbsp;정보를&amp;nbsp;유지할&amp;nbsp;수&amp;nbsp;있음.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;proxy_set_header&amp;nbsp;X-Real-IP&amp;nbsp;$remote_addr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;클라이언트의&amp;nbsp;실제&amp;nbsp;IP를&amp;nbsp;백엔드&amp;nbsp;서버에&amp;nbsp;전달한다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;기본적으로&amp;nbsp;Nginx가&amp;nbsp;백엔드에&amp;nbsp;요청을&amp;nbsp;전달할&amp;nbsp;때&amp;nbsp;자신(Nginx)의&amp;nbsp;IP로&amp;nbsp;요청을&amp;nbsp;보내기&amp;nbsp;때문에,&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;백엔드&amp;nbsp;서버에서는&amp;nbsp;클라이언트의&amp;nbsp;원래&amp;nbsp;IP를&amp;nbsp;확인할&amp;nbsp;수&amp;nbsp;없음.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;이&amp;nbsp;설정을&amp;nbsp;추가하면&amp;nbsp;백엔드가&amp;nbsp;원래&amp;nbsp;클라이언트의&amp;nbsp;IP를&amp;nbsp;알&amp;nbsp;수&amp;nbsp;있음.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Spring Boot/Security</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2471</guid>
      <comments>https://link2me.tistory.com/2471#entry2471comment</comments>
      <pubDate>Fri, 21 Mar 2025 08:09:03 +0900</pubDate>
    </item>
    <item>
      <title>implementation 'org.springframework.boot:spring-boot-starter-web'</title>
      <link>https://link2me.tistory.com/2470</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;implementation 'org.springframework.boot:spring-boot-starter-web' 라이브러리는 &lt;b&gt;Back-end&lt;/b&gt; 단에서 필요한 의존성입니다. React는 &lt;b&gt;Front-end&lt;/b&gt; 라이브러리로 JavaScript 기반에서 동작하며, 서버와의 통신은 보통 HTTP 요청(REST API) 또는 WebSocket을 사용합니다. 이 의존성은 Spring Boot에서 HTTP 요청을 처리하거나 RESTful API를 제공하기 위해 필요한 설정과 구성 요소(Web 관련 모듈 포함)를 포함하고 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;의존성의 역할&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;spring-boot-starter-web 의존성을 추가하면 다음과 같은 기능을 사용할 수 있습니다:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Spring MVC&lt;/b&gt;: 컨트롤러(endpoint)를 정의하기 위한 기능.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;내장 톰캣 서버&lt;/b&gt;: 애플리케이션을 실행하기 위한 웹 서버.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Jackson 라이브러리 포함&lt;/b&gt;: JSON 형식의 요청/응답 바인딩.&lt;/li&gt;
&lt;li&gt;기타 Spring Web 관련 설정 및 모듈.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 &lt;b&gt;React가 Front-end로 쓰이고, Back-end를 Spring Boot로 구현&lt;/b&gt;한다면 API 서버를 구축하기 위해 &lt;b&gt;반드시 필요&lt;/b&gt;합니다. React와 Spring Boot는 별개이지만, React에서 만들어진 요청을 Spring Boot가 처리하려면 spring-boot-starter-web 의존성은 필수입니다.&lt;/p&gt;</description>
      <category>Spring Boot/Basic</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2470</guid>
      <comments>https://link2me.tistory.com/2470#entry2470comment</comments>
      <pubDate>Thu, 20 Mar 2025 02:16:40 +0900</pubDate>
    </item>
    <item>
      <title>React 코드 비교를 통한 의미 이해</title>
      <link>https://link2me.tistory.com/2469</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Webstorm 에서 코드의 의미가 어떻게 다른지 AI에게 문의를 해봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;const&lt;/span&gt;&amp;nbsp;handleChangeTodo&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;(e)&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;todo[e.target.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;name&lt;/span&gt;]&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;e.target.value&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;e.target.name&amp;nbsp;:&amp;nbsp;입력&amp;nbsp;필드의&amp;nbsp;`name`&amp;nbsp;속성&amp;nbsp;값&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;e.target.value&amp;nbsp;:&amp;nbsp;사용자가&amp;nbsp;입력한&amp;nbsp;실제&amp;nbsp;데이터&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;setTodo({...todo})&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;위&amp;nbsp;코드와&amp;nbsp;아래&amp;nbsp;코드는&amp;nbsp;동일한&amp;nbsp;결과를&amp;nbsp;얻는가?&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;const&lt;/span&gt;&amp;nbsp;handleChangeTodo&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;(e)&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;setTodo((prevTodo)&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;({&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;...prevTodo,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;[e.target.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;name&lt;/span&gt;]:&amp;nbsp;e.target.value,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;};&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 코드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&amp;nbsp;여기서&amp;nbsp;`todo[e.target.name]&amp;nbsp;=&amp;nbsp;e.target.value`를&amp;nbsp;통해&amp;nbsp;기존&amp;nbsp;상태&amp;nbsp;객체인&amp;nbsp;`todo`를&amp;nbsp;**직접&amp;nbsp;수정**하고,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;이후&amp;nbsp;스프레드&amp;nbsp;연산자를&amp;nbsp;사용해&amp;nbsp;새로운&amp;nbsp;객체를&amp;nbsp;생성하여&amp;nbsp;`setTodo`를&amp;nbsp;호출하고&amp;nbsp;있다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&amp;nbsp;**문제점**:&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&amp;nbsp;React는&amp;nbsp;상태를&amp;nbsp;직접&amp;nbsp;수정하는&amp;nbsp;것을&amp;nbsp;권장하지&amp;nbsp;않는다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;직접&amp;nbsp;수정(`todo[e.target.name]&amp;nbsp;=&amp;nbsp;e.target.value`)&amp;nbsp;시&amp;nbsp;예상치&amp;nbsp;못한&amp;nbsp;상태&amp;nbsp;동작이나&amp;nbsp;렌더링&amp;nbsp;문제가&amp;nbsp;발생할&amp;nbsp;가능성이&amp;nbsp;있다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&amp;nbsp;객체&amp;nbsp;복사를&amp;nbsp;통해&amp;nbsp;새로운&amp;nbsp;상태를&amp;nbsp;생성한다고는&amp;nbsp;해도,&amp;nbsp;`todo`&amp;nbsp;객체는&amp;nbsp;이미&amp;nbsp;수정된&amp;nbsp;상태이므로&amp;nbsp;**불변성을&amp;nbsp;위반**한&amp;nbsp;상태가&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;&lt;span style=&quot;color: #000000;&quot;&gt;두번째 코드&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&amp;nbsp;이&amp;nbsp;코드는&amp;nbsp;`setTodo`에서&amp;nbsp;이전&amp;nbsp;상태(`prevTodo`)를&amp;nbsp;기반으로&amp;nbsp;새로운&amp;nbsp;상태를&amp;nbsp;생성한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;기존&amp;nbsp;상태(`prevTodo`)는&amp;nbsp;불변성을&amp;nbsp;유지한&amp;nbsp;채&amp;nbsp;동적으로&amp;nbsp;수정된&amp;nbsp;속성&amp;nbsp;값만&amp;nbsp;변경된다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&amp;nbsp;**장점**:&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&amp;nbsp;`prevTodo`는&amp;nbsp;최신&amp;nbsp;상태를&amp;nbsp;안전하게&amp;nbsp;참조하며,&amp;nbsp;새로운&amp;nbsp;객체를&amp;nbsp;생성하여&amp;nbsp;React의&amp;nbsp;상태&amp;nbsp;업데이트&amp;nbsp;방식에&amp;nbsp;맞춰&amp;nbsp;동작한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&amp;nbsp;이&amp;nbsp;방식은&amp;nbsp;React의&amp;nbsp;상태&amp;nbsp;불변성&amp;nbsp;원칙에&amp;nbsp;부합하며,&amp;nbsp;React의&amp;nbsp;상태&amp;nbsp;변경&amp;nbsp;및&amp;nbsp;렌더링&amp;nbsp;로직에서&amp;nbsp;**안전하게&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;&lt;span style=&quot;color: #000000;&quot;&gt;webstorm 에 연결해서 유료로 사용하는 AI 는 코드 내용 전체를 알기 때문에 chatGPT에 문의하는 것보다 설명의 정확도 좀 더 나은 거 같기도 하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만 chatGPT 를 통해서는 다양한 걸 문의하는 장점이 있는 거 같다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>React/React</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2469</guid>
      <comments>https://link2me.tistory.com/2469#entry2469comment</comments>
      <pubDate>Wed, 19 Mar 2025 16:26:16 +0900</pubDate>
    </item>
    <item>
      <title>서울 중구청 조직도 크롤링 Python 코드</title>
      <link>https://link2me.tistory.com/2468</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서울 중구청 조직도를 파싱처리하는 Python 코드이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;71&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;72&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;73&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;74&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;75&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;76&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;77&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;78&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;79&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;80&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;81&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;82&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;83&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;84&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;85&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;86&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;87&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;88&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;89&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;90&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;91&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;92&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;93&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;94&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;95&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;96&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;97&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;98&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;99&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;100&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;101&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;102&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;103&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;104&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;105&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;106&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;107&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;108&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;109&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;110&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;111&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;112&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;113&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;114&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;115&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;116&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;117&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;118&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;119&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;120&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;121&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;122&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;123&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;124&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;requests&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;from&lt;/span&gt;&amp;nbsp;bs4&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;BeautifulSoup&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;pandas&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;as&lt;/span&gt;&amp;nbsp;pd&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;re&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;def&lt;/span&gt;&amp;nbsp;crawl_orgchart_guchung(url):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;요청&amp;nbsp;및&amp;nbsp;응답&amp;nbsp;확인&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;headers&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;User-Agent&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Mozilla/5.0&amp;nbsp;(Windows&amp;nbsp;NT&amp;nbsp;10.0;&amp;nbsp;Win64;&amp;nbsp;x64)&amp;nbsp;AppleWebKit/537.36&amp;nbsp;(KHTML,&amp;nbsp;like&amp;nbsp;Gecko)&amp;nbsp;Chrome/91.0.4472.124&amp;nbsp;Safari/537.36&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;requests.get(url,&amp;nbsp;headers&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;headers)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;soup&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;BeautifulSoup(response.text,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;html.parser&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;데이터&amp;nbsp;저장&amp;nbsp;리스트&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;조직도의&amp;nbsp;범주에&amp;nbsp;해당하는&amp;nbsp;코드를&amp;nbsp;찾아낸다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;scope&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;soup.find(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;div&quot;&lt;/span&gt;,&amp;nbsp;class_&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;jg_organization_chart&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;print(scope)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;모든&amp;nbsp;href&amp;nbsp;속성값&amp;nbsp;추출&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;href_values&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[a.get(&lt;span style=&quot;color: #dbb84a;&quot;&gt;'href'&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;a&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;scope.find_all(&lt;span style=&quot;color: #dbb84a;&quot;&gt;'a'&lt;/span&gt;,&amp;nbsp;href&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;'#'&amp;nbsp;또는&amp;nbsp;'javascript:'&amp;nbsp;를&amp;nbsp;포함하지&amp;nbsp;않는&amp;nbsp;href만&amp;nbsp;필터링하고,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;'https://www.junggu.seoul.kr'이&amp;nbsp;포함되지&amp;nbsp;않으면&amp;nbsp;추가하여&amp;nbsp;완전한&amp;nbsp;URL로&amp;nbsp;반환&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;base_url&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.junggu.seoul.kr&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filtered_href&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;href&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;href.startswith(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.junggu.seoul.kr&quot;&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;base_url&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;href&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;href&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;href_values&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;not&lt;/span&gt;&amp;nbsp;href.startswith((&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;#&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;javascript:&quot;&lt;/span&gt;))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;&quot;dong&quot;&amp;nbsp;포함&amp;nbsp;여부에&amp;nbsp;따라&amp;nbsp;분리&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dong_href&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[href&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;href&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;filtered_href&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;dong&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;href]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;non_dong_href&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[href&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;href&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;filtered_href&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;dong&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;not&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;href]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[non_dong_href,&amp;nbsp;dong_href]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;data&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;def&lt;/span&gt;&amp;nbsp;crawl_orgchart_main(url):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;요청&amp;nbsp;및&amp;nbsp;응답&amp;nbsp;확인&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;headers&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;User-Agent&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Mozilla/5.0&amp;nbsp;(Windows&amp;nbsp;NT&amp;nbsp;10.0;&amp;nbsp;Win64;&amp;nbsp;x64)&amp;nbsp;AppleWebKit/537.36&amp;nbsp;(KHTML,&amp;nbsp;like&amp;nbsp;Gecko)&amp;nbsp;Chrome/91.0.4472.124&amp;nbsp;Safari/537.36&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;requests.get(url,&amp;nbsp;headers&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;headers)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;soup&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;BeautifulSoup(response.text,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;html.parser&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;데이터&amp;nbsp;저장&amp;nbsp;리스트&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;테이블&amp;nbsp;찾기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tables&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;soup.find_all(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;div&quot;&lt;/span&gt;,class_&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;tableScroll&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;table&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;tables:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;print(table)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rows&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;table.select(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;tbody&amp;nbsp;tr&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;print(rows)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;row&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;rows:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;team&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;row.find(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;th&quot;&lt;/span&gt;).text.strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;cols&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;row.find_all(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;td&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;len&lt;/span&gt;(cols)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;3&lt;/span&gt;:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;필요한&amp;nbsp;열&amp;nbsp;개수&amp;nbsp;확인&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;position&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;cols[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;].text.strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;phone&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;cols[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;].text.strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;duty&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;cols[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;2&lt;/span&gt;].text.strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data.append([team,&amp;nbsp;position,&amp;nbsp;phone,&amp;nbsp;duty])&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;데이터프레임&amp;nbsp;생성&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;columns&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;부서명&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;직위&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;전화번호&quot;&lt;/span&gt;,&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;담당업무&quot;&lt;/span&gt;]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pd.DataFrame(data,&amp;nbsp;columns&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;columns)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;df&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;def&lt;/span&gt;&amp;nbsp;crawl_orgchart_dong(url):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;요청&amp;nbsp;및&amp;nbsp;응답&amp;nbsp;확인&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;headers&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;User-Agent&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Mozilla/5.0&amp;nbsp;(Windows&amp;nbsp;NT&amp;nbsp;10.0;&amp;nbsp;Win64;&amp;nbsp;x64)&amp;nbsp;AppleWebKit/537.36&amp;nbsp;(KHTML,&amp;nbsp;like&amp;nbsp;Gecko)&amp;nbsp;Chrome/91.0.4472.124&amp;nbsp;Safari/537.36&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;requests.get(url,&amp;nbsp;headers&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;headers)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;soup&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;BeautifulSoup(response.text,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;html.parser&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;데이터&amp;nbsp;저장&amp;nbsp;리스트&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;조직도의&amp;nbsp;범주에&amp;nbsp;해당하는&amp;nbsp;코드를&amp;nbsp;찾아낸다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;scope&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;soup.find(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;div&quot;&lt;/span&gt;,&amp;nbsp;class_&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;member_list&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;테이블&amp;nbsp;찾기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rows&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;scope.select(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;table&amp;nbsp;tbody&amp;nbsp;tr&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;row&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;rows:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;team&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;row.find(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;th&quot;&lt;/span&gt;).text.strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cols&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;row.find_all(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;td&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;len&lt;/span&gt;(cols)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;3&lt;/span&gt;:&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;필요한&amp;nbsp;열&amp;nbsp;개수&amp;nbsp;확인&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;position&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&amp;nbsp;&quot;&lt;/span&gt;.join(cols[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;].stripped_strings)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;phone&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;cols[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;].get_text(separator&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&amp;nbsp;&quot;&lt;/span&gt;).strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;duty&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;cols[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;2&lt;/span&gt;].get_text(separator&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&amp;nbsp;&quot;&lt;/span&gt;).strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;data.append([team,&amp;nbsp;position,&amp;nbsp;phone,&amp;nbsp;duty])&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;데이터프레임&amp;nbsp;생성&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;columns&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;부서명&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;직위&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;전화번호&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;담당업무&quot;&lt;/span&gt;]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pd.DataFrame(data,&amp;nbsp;columns&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;columns)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;df&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;__name__&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;__main__&quot;&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url_main&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.junggu.seoul.kr/content.do?cmsid=14066&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df_main&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;crawl_orgchart_guchung(url_main)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;모든&amp;nbsp;URL에서&amp;nbsp;데이터&amp;nbsp;크롤링&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataframe_main&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[crawl_orgchart_main(url)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;url&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;df_main[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;]]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;데이터프레임&amp;nbsp;병합&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df_combined&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pd.concat(dataframe_main,&amp;nbsp;ignore_index&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;두&amp;nbsp;데이터프레임을&amp;nbsp;합치기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;not&lt;/span&gt;&amp;nbsp;df_combined.empty:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;print&lt;/span&gt;(df_combined)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df_combined.to_csv(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;서울중구청.csv&quot;&lt;/span&gt;,&amp;nbsp;index&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;False&lt;/span&gt;,&amp;nbsp;encoding&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;utf-8-sig&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataframe_dong&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[crawl_orgchart_dong(url)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;url&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;df_main[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;]]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;데이터프레임&amp;nbsp;병합&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df_dong_combined&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pd.concat(dataframe_dong,&amp;nbsp;ignore_index&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;두&amp;nbsp;데이터프레임을&amp;nbsp;합치기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;not&lt;/span&gt;&amp;nbsp;df_dong_combined.empty:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;print&lt;/span&gt;(df_dong_combined)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df_dong_combined.to_csv(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;서울중구청_동주민센터.csv&quot;&lt;/span&gt;,&amp;nbsp;index&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;False&lt;/span&gt;,&amp;nbsp;encoding&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;utf-8-sig&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;총 3단계의 과정으로 진행하는 코드이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자료를 추출하는 과정에 대한 설명은 생략한다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Web 크롤링/Python Crawling</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2468</guid>
      <comments>https://link2me.tistory.com/2468#entry2468comment</comments>
      <pubDate>Sun, 16 Mar 2025 17:54:38 +0900</pubDate>
    </item>
    <item>
      <title>[Webstorm] 함수 자동 완성 단축키</title>
      <link>https://link2me.tistory.com/2467</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;WebStorm(웹스톰)의&amp;nbsp;경우&amp;nbsp;JavaScript&amp;nbsp;개발을&amp;nbsp;목적으로한&amp;nbsp;IDE이기&amp;nbsp;때문에&amp;nbsp;기본&amp;nbsp;환경으로도&amp;nbsp;개발하는데&amp;nbsp;충분하다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;WebStorm 에서 자동 완성하는 단축키를 적어둔다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;rsf 를 입력하고 엔터키를 치면 함수형 컴포넌트가 자동완성된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Webstorm_autocomplete-01.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cenHEh/btsMMlvOutD/Z4Ksg9GA9rjkJHYcJWwJ0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cenHEh/btsMMlvOutD/Z4Ksg9GA9rjkJHYcJWwJ0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cenHEh/btsMMlvOutD/Z4Ksg9GA9rjkJHYcJWwJ0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcenHEh%2FbtsMMlvOutD%2FZ4Ksg9GA9rjkJHYcJWwJ0K%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;600&quot; height=&quot;246&quot; data-filename=&quot;Webstorm_autocomplete-01.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;246&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Webstorm_autocomplete-02.png&quot; data-origin-width=&quot;452&quot; data-origin-height=&quot;341&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KHlI7/btsMKEjpPZ1/8JBKpn1k7ECtD48h5Pc100/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KHlI7/btsMKEjpPZ1/8JBKpn1k7ECtD48h5Pc100/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KHlI7/btsMKEjpPZ1/8JBKpn1k7ECtD48h5Pc100/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKHlI7%2FbtsMKEjpPZ1%2F8JBKpn1k7ECtD48h5Pc100%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;452&quot; height=&quot;341&quot; data-filename=&quot;Webstorm_autocomplete-02.png&quot; data-origin-width=&quot;452&quot; data-origin-height=&quot;341&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;단축키 : rsc Tab키 또는 rsc 엔터키&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Webstorm_autocomplete-03.png&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;331&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4u8gW/btsMM3nYNpU/s3K7NrOHXzMx0hzK7Ev6GK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4u8gW/btsMM3nYNpU/s3K7NrOHXzMx0hzK7Ev6GK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4u8gW/btsMM3nYNpU/s3K7NrOHXzMx0hzK7Ev6GK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4u8gW%2FbtsMM3nYNpU%2Fs3K7NrOHXzMx0hzK7Ev6GK%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;581&quot; height=&quot;331&quot; data-filename=&quot;Webstorm_autocomplete-03.png&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;331&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;</description>
      <category>React/React TOOL&amp;amp;TIP</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2467</guid>
      <comments>https://link2me.tistory.com/2467#entry2467comment</comments>
      <pubDate>Sat, 15 Mar 2025 07:36:01 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot 배포(Deploy) 스크립트</title>
      <link>https://link2me.tistory.com/2466</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Rocky 9.5 리눅스 환경에서 스프링부트 실행을 위해 준비한 스크립트이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;71&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;72&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;73&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;74&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;75&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;76&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;77&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;78&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;79&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;80&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;81&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;82&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;83&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;84&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;85&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;86&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;87&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;88&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;89&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;90&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;91&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;92&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;93&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;94&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;95&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;96&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;97&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;98&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;99&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;100&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;101&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;102&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;103&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;104&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;105&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;106&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;107&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;108&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;109&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;110&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;111&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;112&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;113&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;114&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;115&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;116&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;117&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;118&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;119&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;120&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;121&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;122&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;123&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;124&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;125&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;126&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;127&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;128&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;129&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;130&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;131&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;132&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;133&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;134&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;135&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;136&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;137&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;138&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;139&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;140&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;141&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;142&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;143&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;144&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;145&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;146&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;147&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;148&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;149&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;150&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;##############################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#########&amp;nbsp;RockeyOS&amp;nbsp;9.5&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;설치&amp;nbsp;######&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;##############################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;스크립트는&amp;nbsp;반드시&amp;nbsp;관리자&amp;nbsp;권한에서&amp;nbsp;실행해야&amp;nbsp;한다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;openssl&amp;nbsp;버전&amp;nbsp;확인&amp;nbsp;=&amp;gt;&amp;nbsp;TLS&amp;nbsp;1.3&amp;nbsp;지원&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;openssl&amp;nbsp;version&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;dnf&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;y&amp;nbsp;install&amp;nbsp;expat&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;devel&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;시스템&amp;nbsp;업데이트&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;dnf&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;y&amp;nbsp;update&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;dnf&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;y&amp;nbsp;install&amp;nbsp;wget&amp;nbsp;unzip&amp;nbsp;mc&amp;nbsp;git&amp;nbsp;nmap&amp;nbsp;curl&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;SSL&amp;nbsp;관련&amp;nbsp;패키지&amp;nbsp;설치&amp;nbsp;확인&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;dnf&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;y&amp;nbsp;install&amp;nbsp;openssl&amp;nbsp;openssl&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;devel&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;####################################################################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;방화벽&amp;nbsp;데몬&amp;nbsp;시작&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;systemctl&amp;nbsp;start&amp;nbsp;firewalld&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;서버&amp;nbsp;부팅&amp;nbsp;시&amp;nbsp;firewalld&amp;nbsp;데몬&amp;nbsp;자동&amp;nbsp;시작&amp;nbsp;설정&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;systemctl&amp;nbsp;enable&amp;nbsp;firewalld&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;firewall&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;cmd&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;permanent&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;add&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;service&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;http&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;firewall&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;cmd&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;permanent&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;add&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;service&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;https&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;firewall&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;cmd&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;permanent&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;add&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;service&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;mysql&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;firewall&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;cmd&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;permanent&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;zone&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;public&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;add&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;port&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;3306&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;tcp&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;firewall&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;cmd&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;permanent&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;zone&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;public&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;add&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;port&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;8080&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;tcp&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;firewall&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;cmd&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;permanent&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;zone&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;public&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;add&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;port&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;3000&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;tcp&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;firewall&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;cmd&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;reload&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;firewall&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;cmd&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;list&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;all&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;####################################################################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;tomcat&amp;nbsp;배포&amp;nbsp;사전&amp;nbsp;조건&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;1.&amp;nbsp;JAVA가&amp;nbsp;설치되어&amp;nbsp;있어야&amp;nbsp;한다.&amp;nbsp;(톰캣&amp;nbsp;9는&amp;nbsp;자바&amp;nbsp;11&amp;nbsp;이상이&amp;nbsp;필요)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;jar&amp;nbsp;파일은&amp;nbsp;내부&amp;nbsp;톰캣이&amp;nbsp;있기에&amp;nbsp;따로&amp;nbsp;톰캣을&amp;nbsp;설치하지&amp;nbsp;않아도&amp;nbsp;된다.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;####################################################################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;1.&amp;nbsp;기본&amp;nbsp;패키지&amp;nbsp;업데이트&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;dnf&amp;nbsp;update&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;y&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;2.&amp;nbsp;Java&amp;nbsp;17&amp;nbsp;버전&amp;nbsp;설치&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;dnf&amp;nbsp;install&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;y&amp;nbsp;java&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;17&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;openjdk&amp;nbsp;java&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;17&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;openjdk&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;devel&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;java&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;version&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;3.&amp;nbsp;Java&amp;nbsp;환경&amp;nbsp;변수&amp;nbsp;설정&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;echo&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;export&amp;nbsp;JAVA_HOME=/usr/lib/jvm/java-17-openjdk&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&amp;nbsp;sudo&amp;nbsp;tee&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;a&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;profile.d&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;java.sh&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;echo&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;export&amp;nbsp;PATH=\$JAVA_HOME/bin:\$PATH&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&amp;nbsp;sudo&amp;nbsp;tee&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;a&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;profile.d&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;java.sh&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;source&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;profile.d&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;java.sh&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;여러개&amp;nbsp;설치되어&amp;nbsp;있는&amp;nbsp;자바&amp;nbsp;버전&amp;nbsp;선택하기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;alternatives&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;config&amp;nbsp;java&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;4.&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;실행&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;아래&amp;nbsp;명령어를&amp;nbsp;수행하여&amp;nbsp;실행되는&amp;nbsp;메시지를&amp;nbsp;직접&amp;nbsp;육안으로&amp;nbsp;확인한다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;java&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;jar&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;jar파일명&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;java&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Xshare:off&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;jar&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;home&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spring&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;SpringJWT&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;SpringJWT&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0.&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0.&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;SNAPSHOT.jar&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;5.&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;애플리케이션&amp;nbsp;실행&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;애플리케이션&amp;nbsp;실행&amp;nbsp;(백그라운드)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;노트북에서&amp;nbsp;빌드(build)한&amp;nbsp;파일을&amp;nbsp;리눅스&amp;nbsp;서버로&amp;nbsp;업로드하고&amp;nbsp;아래와&amp;nbsp;같이&amp;nbsp;실행한다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;nohup&amp;nbsp;java&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Xshare:off&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;jar&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;home&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spring&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;SpringJWT&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;SpringJWT&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0.&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0.&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;SNAPSHOT.jar&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;server.port&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;8080&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;log&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;springjwt.log&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;필요한&amp;nbsp;Apache&amp;nbsp;모듈&amp;nbsp;활성화&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;systemctl&amp;nbsp;restart&amp;nbsp;httpd&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;####################################################################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;프로세스&amp;nbsp;확인&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;ps&amp;nbsp;aux&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&amp;nbsp;grep&amp;nbsp;SpringJWT&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;프로세스&amp;nbsp;종료&amp;nbsp;(필요&amp;nbsp;시)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;kill&amp;nbsp;$(ps&amp;nbsp;aux&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&amp;nbsp;grep&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'SpringJWT'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&amp;nbsp;awk&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'{print&amp;nbsp;$2}'&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;종료&amp;nbsp;프로세스&amp;nbsp;작성&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;vi&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;usr&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;bin&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;kill_8080.sh&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#!/bin/bash&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;8080&amp;nbsp;포트&amp;nbsp;사용&amp;nbsp;중인&amp;nbsp;프로세스&amp;nbsp;확인&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;PID&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;$(lsof&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;i&amp;nbsp;:&lt;span style=&quot;color: #2ce1bc;&quot;&gt;8080&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;t)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;[&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;n&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;$PID&quot;&lt;/span&gt;&amp;nbsp;];&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;then&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;echo&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;8080&amp;nbsp;포트에서&amp;nbsp;실행&amp;nbsp;중인&amp;nbsp;프로세스(PID:&amp;nbsp;$PID)&amp;nbsp;종료&amp;nbsp;중...&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;kill&amp;nbsp;$PID&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sleep&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;프로세스가&amp;nbsp;종료되지&amp;nbsp;않았으면&amp;nbsp;강제&amp;nbsp;종료&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;ps&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;p&amp;nbsp;$PID&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;dev&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;null;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;then&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;echo&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;⚠️&amp;nbsp;정상&amp;nbsp;종료되지&amp;nbsp;않아&amp;nbsp;강제&amp;nbsp;종료&amp;nbsp;진행...&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;kill&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;9&lt;/span&gt;&amp;nbsp;$PID&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;fi&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;echo&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;8080&amp;nbsp;포트&amp;nbsp;프로세스&amp;nbsp;종료&amp;nbsp;완료.&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;echo&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;ℹ️&amp;nbsp;8080&amp;nbsp;포트에서&amp;nbsp;실행&amp;nbsp;중인&amp;nbsp;프로세스가&amp;nbsp;없습니다.&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;fi&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;저장(wq)하고&amp;nbsp;빠져나온다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;실행권한&amp;nbsp;부여&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;chmod&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;x&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;usr&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;bin&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;kill_8080.sh&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;스크립트&amp;nbsp;실행&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;usr&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;bin&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;kill_8080.sh&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;####################################################################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;systemd&amp;nbsp;서비스&amp;nbsp;등록&amp;nbsp;(서버&amp;nbsp;부팅&amp;nbsp;후&amp;nbsp;자동&amp;nbsp;실행)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;vi&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;systemd&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;system&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;springjwt.service&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;[Unit]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;Description&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;Spring&amp;nbsp;Boot&amp;nbsp;Application&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&amp;nbsp;SpringJWT&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;After&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;network.target&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;[Service]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;User&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;apache&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;Group&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;apache&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;ExecStart&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;usr&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;bin&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;java&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Xshare:off&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;jar&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;home&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spring&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;SpringJWT&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;SpringJWT&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0.&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0.&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;SNAPSHOT.jar&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;SuccessExitStatus&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;143&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;Restart&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;always&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;RestartSec&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;5&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;StandardOutput&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;file:&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;log&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;springjwt.log&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;StandardError&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;file:&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;log&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;springjwt.log&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;[Install]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;WantedBy&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;multi&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;user.target&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#저장(wq)하고&amp;nbsp;빠져나온다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;systemd&amp;nbsp;데몬&amp;nbsp;리로드&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;systemctl&amp;nbsp;daemon&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;reload&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;서비스&amp;nbsp;등록&amp;nbsp;및&amp;nbsp;실행&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;systemctl&amp;nbsp;enable&amp;nbsp;springjwt&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;systemctl&amp;nbsp;start&amp;nbsp;springjwt&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;실행&amp;nbsp;상태&amp;nbsp;확인&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;systemctl&amp;nbsp;status&amp;nbsp;springjwt&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;서비스&amp;nbsp;중지&amp;nbsp;(필요&amp;nbsp;시)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;systemctl&amp;nbsp;stop&amp;nbsp;springjwt&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;실행&amp;nbsp;로그&amp;nbsp;확인&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;cat&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;log&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;springjwt.log&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;####################################################################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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>Spring Boot/Basic</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2466</guid>
      <comments>https://link2me.tistory.com/2466#entry2466comment</comments>
      <pubDate>Fri, 14 Mar 2025 14:27:30 +0900</pubDate>
    </item>
    <item>
      <title>React 배포를 위한 nginx 설정</title>
      <link>https://link2me.tistory.com/2465</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;React 샘플 프로젝트 배포를 Apache 로 설정하려다가 포기했다. 이미 환경설정이 PHP로 VirtualHost 설정이 되어 있어서 문제가 되는가 싶어 Apache stop 을 시키고 nginx 설치를 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;71&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;72&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;73&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;74&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;75&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;76&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;77&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;78&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;79&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;80&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;81&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;82&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;83&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;84&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;85&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;worker_processes&amp;nbsp;auto;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;error_log&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;log&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;error.log&amp;nbsp;warn;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;pid&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;run&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx.pid;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;include&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;modules&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;enabled&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;*&lt;/span&gt;.conf;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;events&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;worker_connections&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1024&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;http&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;include&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;mime.types;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;default_type&amp;nbsp;application&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;octet&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;stream;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log_format&amp;nbsp;main&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'$remote_addr&amp;nbsp;-&amp;nbsp;$remote_user&amp;nbsp;[$time_local]&amp;nbsp;&quot;$request&quot;&amp;nbsp;'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'$status&amp;nbsp;$body_bytes_sent&amp;nbsp;&quot;$http_referer&quot;&amp;nbsp;'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'&quot;$http_user_agent&quot;&amp;nbsp;&quot;$http_x_forwarded_for&quot;'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access_log&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;log&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;access.log&amp;nbsp;main;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendfile&amp;nbsp;on;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;keepalive_timeout&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;65&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;시스템&amp;nbsp;정보&amp;nbsp;노출&amp;nbsp;제한&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server_tokens&amp;nbsp;off;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;디렉토리&amp;nbsp;검색&amp;nbsp;방지&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;autoindex&amp;nbsp;off;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssl_protocols&amp;nbsp;TLSv1.&lt;span style=&quot;color: #2ce1bc;&quot;&gt;3&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssl_ciphers&amp;nbsp;ECDHE&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;ECDSA&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;AES128&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;GCM&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;SHA256:ECDHE&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;RSA&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;AES128&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;GCM&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;SHA256:ECDHE&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;ECDSA&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;AES256&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;GCM&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;SHA384:ECDHE&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;RSA&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;AES256&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;GCM&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;SHA384:ECDHE&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;ECDSA&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;CHACHA20&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;POLY1305:ECDHE&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;RSA&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;CHACHA20&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;POLY1305:DHE&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;RSA&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;AES128&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;GCM&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;SHA256:DHE&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;RSA&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;AES256&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;GCM&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;SHA384:DHE&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;RSA&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;CHACHA20&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;POLY1305;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssl_prefer_server_ciphers&amp;nbsp;off;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;Redirect&amp;nbsp;all&amp;nbsp;HTTP&amp;nbsp;traffic&amp;nbsp;to&amp;nbsp;HTTPS&amp;nbsp;for&amp;nbsp;spb.abc.com&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;listen&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;80&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server_name&amp;nbsp;spb.abc.com;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;301&lt;/span&gt;&amp;nbsp;https:&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb.abc.com$request_uri;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;Reverse&amp;nbsp;Proxy&amp;nbsp;for&amp;nbsp;spb.abc.com&amp;nbsp;with&amp;nbsp;React&amp;nbsp;static&amp;nbsp;files&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;listen&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;443&lt;/span&gt;&amp;nbsp;ssl;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server_name&amp;nbsp;spb.abc.com;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssl_certificate&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;letsencrypt&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;live&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb.abc.com&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;fullchain.pem;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssl_certificate_key&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;letsencrypt&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;live&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb.abc.com&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;privkey.pem;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssl_trusted_certificate&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;letsencrypt&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;live&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb.abc.com&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;chain.pem;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;include&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;letsencrypt&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;options&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;ssl&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;nginx.conf;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;error_log&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;log&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;error.log;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access_log&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;log&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;access.log&amp;nbsp;main;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;home&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;auth&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;build;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;index&amp;nbsp;index.html;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;location&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;try_files&amp;nbsp;$uri&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;index.html;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;limit_except&amp;nbsp;GET&amp;nbsp;POST&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;deny&amp;nbsp;all;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;location&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;static&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;root&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;home&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;auth&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;build;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;expires&amp;nbsp;30d;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;add_header&amp;nbsp;Cache&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Control&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;public,&amp;nbsp;max-age=2592000&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;location&amp;nbsp;~&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;*&lt;/span&gt;&amp;nbsp;\.(?:js&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;css&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;json&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;ico&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;png&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;jpg&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;jpeg&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;svg&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;woff&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;woff2&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;ttf&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;otf&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;eot&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;mp4&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;webm&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;ogv&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;ogg&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;mp3&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;wav&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;webp)$&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;expires&amp;nbsp;max;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;access_log&amp;nbsp;off;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;add_header&amp;nbsp;Cache&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Control&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;public&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;add_header&amp;nbsp;X&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Frame&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Options&amp;nbsp;SAMEORIGIN;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;add_header&amp;nbsp;X&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Content&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Type&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Options&amp;nbsp;nosniff;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;add_header&amp;nbsp;X&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;XSS&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Protection&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;1;&amp;nbsp;mode=block&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;add_header&amp;nbsp;Referrer&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Policy&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;no-referrer-when-downgrade&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;include&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;conf.d&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;*&lt;/span&gt;.conf;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;color: #000000;&quot;&gt;Rocky Linux 9.5 가 TLS 1.3을 지원하기 때문에 1.3버전만 명시했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래 스크립트는 nginx 설치과정부터 설명한 내역이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;71&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;72&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;73&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;74&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;75&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;76&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;77&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;78&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;79&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;80&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;81&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;82&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;83&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;84&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;85&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;86&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;87&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;88&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;89&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;90&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;91&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;92&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;93&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;94&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;95&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;96&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;97&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;98&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;99&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;100&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;101&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;102&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;103&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;104&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;105&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;106&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;107&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;108&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;109&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;110&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;111&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;112&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;113&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;114&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;115&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;116&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;117&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;118&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;119&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;120&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;121&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;122&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;123&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;124&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;125&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;126&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;127&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;128&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;129&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;130&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;131&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;132&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;133&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;134&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;135&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;136&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;137&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;138&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;139&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;140&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;141&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;142&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;143&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;144&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;145&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;146&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;147&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;148&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;149&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;150&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;151&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;152&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;153&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;154&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;155&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;156&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;####################################################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;Apache를&amp;nbsp;설치한&amp;nbsp;경우에는&amp;nbsp;아파치&amp;nbsp;동작&amp;nbsp;중지&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;systemctl&amp;nbsp;stop&amp;nbsp;httpd&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;####################################################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;nginx&amp;nbsp;설치&amp;nbsp;과정&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;####################################################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;패키지&amp;nbsp;관리자&amp;nbsp;업데이트&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;dnf&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;y&amp;nbsp;update&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;NGINX&amp;nbsp;RPM&amp;nbsp;패키지&amp;nbsp;도구(dnf,&amp;nbsp;yum)로&amp;nbsp;설치하는&amp;nbsp;방법&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;dnf&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;y&amp;nbsp;install&amp;nbsp;yum&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;utils&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;NGINX&amp;nbsp;공식&amp;nbsp;저장소를&amp;nbsp;추가&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;vi&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;yum.repos.d&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx.repo&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;[nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;stable]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;name&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;nginx&amp;nbsp;stable&amp;nbsp;repo&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;baseurl&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;http:&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx.org&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;packages&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;centos&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;$releasever&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;$basearch&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;gpgcheck&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;enabled&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;gpgkey&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;https:&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx.org&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;keys&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx_signing.key&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;module_hotfixes&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;true&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;[nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;mainline]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;name&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;nginx&amp;nbsp;mainline&amp;nbsp;repo&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;baseurl&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;http:&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx.org&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;packages&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;mainline&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;centos&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;$releasever&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;$basearch&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;gpgcheck&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;enabled&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;gpgkey&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;https:&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx.org&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;keys&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx_signing.key&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;module_hotfixes&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;true&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#wq(저장하고&amp;nbsp;빠져나오기)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;NGINX&amp;nbsp;최신&amp;nbsp;버전과&amp;nbsp;버그&amp;nbsp;수정을&amp;nbsp;포함하는&amp;nbsp;mainline&amp;nbsp;버전을&amp;nbsp;사용하려면&amp;nbsp;다음&amp;nbsp;명령어를&amp;nbsp;실행&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;yum&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;config&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;manager&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;enable&amp;nbsp;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;mainline&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;&amp;nbsp;버그&amp;nbsp;수정만&amp;nbsp;포함한&amp;nbsp;안정&amp;nbsp;버전을&amp;nbsp;사용하려면&amp;nbsp;다음&amp;nbsp;명령어을&amp;nbsp;실행&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;yum&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;config&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;manager&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;enable&amp;nbsp;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;stable&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;NGINX&amp;nbsp;패키지&amp;nbsp;설치&amp;nbsp;==&amp;gt;&amp;nbsp;NGINX&amp;nbsp;공식&amp;nbsp;저장소에서&amp;nbsp;최신&amp;nbsp;버전의&amp;nbsp;NGINX&amp;nbsp;패키지를&amp;nbsp;다운로드하고&amp;nbsp;설치&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;dnf&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;y&amp;nbsp;install&amp;nbsp;nginx&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;NGINX&amp;nbsp;버전&amp;nbsp;확인&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;nginx&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;v&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;####################################################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;nginx&amp;nbsp;데몬&amp;nbsp;실행&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;####################################################################&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;systemctl&amp;nbsp;start&amp;nbsp;nginx&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;systemctl&amp;nbsp;enable&amp;nbsp;nginx&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;systemctl&amp;nbsp;status&amp;nbsp;nginx&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;환경파일&amp;nbsp;수정&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;vi&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx.conf&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;worker_processes&amp;nbsp;auto;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;error_log&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;log&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;error.log&amp;nbsp;warn;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;pid&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;run&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx.pid;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;include&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;modules&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;enabled&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;*&lt;/span&gt;.conf;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;events&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;worker_connections&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1024&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;http&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;include&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;mime.types;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;default_type&amp;nbsp;application&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;octet&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;stream;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log_format&amp;nbsp;main&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'$remote_addr&amp;nbsp;-&amp;nbsp;$remote_user&amp;nbsp;[$time_local]&amp;nbsp;&quot;$request&quot;&amp;nbsp;'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'$status&amp;nbsp;$body_bytes_sent&amp;nbsp;&quot;$http_referer&quot;&amp;nbsp;'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'&quot;$http_user_agent&quot;&amp;nbsp;&quot;$http_x_forwarded_for&quot;'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access_log&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;log&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;access.log&amp;nbsp;main;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendfile&amp;nbsp;on;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;keepalive_timeout&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;65&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;시스템&amp;nbsp;정보&amp;nbsp;노출&amp;nbsp;제한&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server_tokens&amp;nbsp;off;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;디렉토리&amp;nbsp;검색&amp;nbsp;방지&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;autoindex&amp;nbsp;off;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssl_protocols&amp;nbsp;TLSv1.&lt;span style=&quot;color: #2ce1bc;&quot;&gt;3&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssl_ciphers&amp;nbsp;ECDHE&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;ECDSA&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;AES128&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;GCM&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;SHA256:ECDHE&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;RSA&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;AES128&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;GCM&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;SHA256:ECDHE&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;ECDSA&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;AES256&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;GCM&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;SHA384:ECDHE&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;RSA&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;AES256&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;GCM&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;SHA384:ECDHE&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;ECDSA&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;CHACHA20&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;POLY1305:ECDHE&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;RSA&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;CHACHA20&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;POLY1305:DHE&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;RSA&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;AES128&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;GCM&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;SHA256:DHE&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;RSA&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;AES256&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;GCM&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;SHA384:DHE&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;RSA&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;CHACHA20&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;POLY1305;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssl_prefer_server_ciphers&amp;nbsp;off;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;Redirect&amp;nbsp;all&amp;nbsp;HTTP&amp;nbsp;traffic&amp;nbsp;to&amp;nbsp;HTTPS&amp;nbsp;for&amp;nbsp;spb.abc.com&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;listen&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;80&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server_name&amp;nbsp;spb.abc.com;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;301&lt;/span&gt;&amp;nbsp;https:&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb.abc.com$request_uri;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;Reverse&amp;nbsp;Proxy&amp;nbsp;for&amp;nbsp;spb.abc.com&amp;nbsp;with&amp;nbsp;React&amp;nbsp;static&amp;nbsp;files&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;listen&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;443&lt;/span&gt;&amp;nbsp;ssl;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server_name&amp;nbsp;spb.abc.com;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssl_certificate&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;letsencrypt&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;live&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb.abc.com&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;fullchain.pem;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssl_certificate_key&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;letsencrypt&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;live&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb.abc.com&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;privkey.pem;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssl_trusted_certificate&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;letsencrypt&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;live&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb.abc.com&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;chain.pem;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;include&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;letsencrypt&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;options&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;ssl&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;nginx.conf;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;error_log&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;log&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;error.log;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access_log&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;var&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;log&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;spb&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;access.log&amp;nbsp;main;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;home&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;auth&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;build;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;index&amp;nbsp;index.html;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;location&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;try_files&amp;nbsp;$uri&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;index.html;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;limit_except&amp;nbsp;GET&amp;nbsp;POST&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;deny&amp;nbsp;all;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;location&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;static&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;root&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;home&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;auth&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;build;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;expires&amp;nbsp;30d;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;add_header&amp;nbsp;Cache&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Control&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;public,&amp;nbsp;max-age=2592000&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;location&amp;nbsp;~&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;*&lt;/span&gt;&amp;nbsp;\.(?:js&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;css&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;json&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;ico&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;png&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;jpg&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;jpeg&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;svg&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;woff&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;woff2&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;ttf&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;otf&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;eot&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;mp4&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;webm&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;ogv&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;ogg&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;mp3&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;wav&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;webp)$&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;expires&amp;nbsp;max;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;access_log&amp;nbsp;off;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;add_header&amp;nbsp;Cache&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Control&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;public&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;add_header&amp;nbsp;X&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Frame&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Options&amp;nbsp;SAMEORIGIN;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;add_header&amp;nbsp;X&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Content&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Type&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Options&amp;nbsp;nosniff;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;add_header&amp;nbsp;X&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;XSS&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Protection&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;1;&amp;nbsp;mode=block&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;add_header&amp;nbsp;Referrer&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;Policy&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;no-referrer-when-downgrade&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;include&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;nginx&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;conf.d&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;*&lt;/span&gt;.conf;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;저장하고&amp;nbsp;나온다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;설정&amp;nbsp;테스트&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;sudo&amp;nbsp;nginx&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;t&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#설정&amp;nbsp;반영&amp;nbsp;및&amp;nbsp;Nginx&amp;nbsp;재시작&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;systemctl&amp;nbsp;restart&amp;nbsp;nginx&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#Ownership&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;chown&amp;nbsp;nginx:nginx&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;R&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;home&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;react&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;auth&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;build&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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 style=&quot;color: #000000;&quot;&gt;React 빌드 및 nginx 재시작&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;react_build-01.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oU8xm/btsMJIyyy0V/mmQsPQ3f0oKDkTvTm9sPqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oU8xm/btsMJIyyy0V/mmQsPQ3f0oKDkTvTm9sPqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oU8xm/btsMJIyyy0V/mmQsPQ3f0oKDkTvTm9sPqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoU8xm%2FbtsMJIyyy0V%2FmmQsPQ3f0oKDkTvTm9sPqK%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;600&quot; height=&quot;586&quot; data-filename=&quot;react_build-01.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;586&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;react_build-02.png&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRz3BT/btsMKqKJofr/wsGqIna6yFr8SGUkFpHvk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRz3BT/btsMKqKJofr/wsGqIna6yFr8SGUkFpHvk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRz3BT/btsMKqKJofr/wsGqIna6yFr8SGUkFpHvk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRz3BT%2FbtsMKqKJofr%2FwsGqIna6yFr8SGUkFpHvk1%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;476&quot; height=&quot;229&quot; data-filename=&quot;react_build-02.png&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;229&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;</description>
      <category>React/React</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2465</guid>
      <comments>https://link2me.tistory.com/2465#entry2465comment</comments>
      <pubDate>Thu, 13 Mar 2025 23:03:20 +0900</pubDate>
    </item>
    <item>
      <title>React 에서 axios 로 Spring Boot public-key 호출</title>
      <link>https://link2me.tistory.com/2464</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;React 에서 axios 를 통해서 백엔드에서 키를 호출하는 방법에 대해 기록한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;71&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;72&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;73&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;74&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;75&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;76&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;77&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;78&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;79&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;80&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;81&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;82&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;83&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;84&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;85&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;86&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;87&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;88&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;89&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;90&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;91&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;92&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;93&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;94&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;95&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;96&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;97&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;98&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;99&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;100&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;101&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;102&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;103&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;104&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;105&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;106&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;107&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;108&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;109&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;110&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;111&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;112&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;113&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;114&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;115&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;116&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;117&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;118&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;119&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;120&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;121&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;122&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;123&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;124&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;125&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;126&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;127&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;128&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;129&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;130&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;131&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;132&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;133&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;134&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;135&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;React&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;react&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;{useState,&amp;nbsp;useEffect,&amp;nbsp;useRef}&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;react&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;{Link,&amp;nbsp;useNavigate}&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;react-router-dom&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;axios&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;axios&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;{&amp;nbsp;JSEncrypt&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;jsencrypt&quot;&lt;/span&gt;;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;npm&amp;nbsp;install&amp;nbsp;jsencrypt&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;const&lt;/span&gt;&amp;nbsp;Signup&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;()&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//const&amp;nbsp;baseUrl&amp;nbsp;=&amp;nbsp;process.env.REACT_APP_API_BASE_URL&amp;nbsp;||&amp;nbsp;&quot;http://localhost:8080&quot;;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;const&lt;/span&gt;&amp;nbsp;baseUrl&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://spb.abc.com:8080&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;const&lt;/span&gt;&amp;nbsp;navigate&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;useNavigate();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;const&lt;/span&gt;&amp;nbsp;initData&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;userID:&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;''&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;password:&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;''&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;const&lt;/span&gt;&amp;nbsp;[publicKey,&amp;nbsp;setPublicKey]&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;useState(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;const&lt;/span&gt;&amp;nbsp;[sessionId,&amp;nbsp;setSessionId]&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;useState(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&quot;&lt;/span&gt;);&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;세션&amp;nbsp;ID&amp;nbsp;저장&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;const&lt;/span&gt;&amp;nbsp;isFetched&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;useRef(&lt;span style=&quot;color: #2ce1bc;&quot;&gt;false&lt;/span&gt;);&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;실행&amp;nbsp;여부&amp;nbsp;체크&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;useEffect(()&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(isFetched.current)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;isFetched.current&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;true&lt;/span&gt;;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;console&lt;/span&gt;.log(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot; &amp;nbsp;공개키&amp;nbsp;요청&amp;nbsp;실행됨&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;백엔드에서&amp;nbsp;공개키&amp;nbsp;가져오기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;axios.get(baseUrl&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;/api/public-key&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.then(response&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;console&lt;/span&gt;.log(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot; &amp;nbsp;공개키&amp;nbsp;응답:&quot;&lt;/span&gt;,&amp;nbsp;response.data);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setPublicKey(response.data.publicKey);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setSessionId(response.data.sessionId);&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;세션&amp;nbsp;ID&amp;nbsp;저장&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;})&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;span style=&quot;color: #f1a5a5;&quot;&gt;catch&lt;/span&gt;(error&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;console&lt;/span&gt;.error(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;공개키&amp;nbsp;가져오기&amp;nbsp;실패&quot;&lt;/span&gt;,&amp;nbsp;error));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&amp;nbsp;[]);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;const&lt;/span&gt;&amp;nbsp;encrypt&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;JSEncrypt();&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;Start&amp;nbsp;our&amp;nbsp;encryptor.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;encrypt.setPublicKey(publicKey);&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;Assign&amp;nbsp;our&amp;nbsp;encryptor&amp;nbsp;to&amp;nbsp;utilize&amp;nbsp;the&amp;nbsp;public&amp;nbsp;key.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;const&lt;/span&gt;&amp;nbsp;[formData,&amp;nbsp;setFormData]&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;useState(initData);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;const&lt;/span&gt;&amp;nbsp;[users,&amp;nbsp;setUsers]&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;useState([]);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;첫번째&amp;nbsp;원소&amp;nbsp;:&amp;nbsp;현재&amp;nbsp;상태,&amp;nbsp;두번재&amp;nbsp;원소&amp;nbsp;:&amp;nbsp;상태를&amp;nbsp;바꾸어&amp;nbsp;주는&amp;nbsp;함수&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;const&lt;/span&gt;&amp;nbsp;[error,&amp;nbsp;setError]&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;useState(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;null&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;const&lt;/span&gt;&amp;nbsp;onChangeInput&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;(e)&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setFormData({&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;...formData,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;[e.target.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;name&lt;/span&gt;]:&amp;nbsp;e.target.value&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;e.target.name&amp;nbsp;은&amp;nbsp;해당&amp;nbsp;input의&amp;nbsp;name을&amp;nbsp;가리킨다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//console.log(formData);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;const&lt;/span&gt;&amp;nbsp;submitForm&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;(e)&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.preventDefault();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;sessionId)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;console&lt;/span&gt;.error(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;세션&amp;nbsp;ID가&amp;nbsp;없습니다.&amp;nbsp;공개키를&amp;nbsp;다시&amp;nbsp;요청하세요.&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;setError(&lt;span style=&quot;color: #f1a5a5;&quot;&gt;true&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;const&lt;/span&gt;&amp;nbsp;params&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;username:&amp;nbsp;formData.userID,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;password:&amp;nbsp;encrypt.encrypt(formData.password),&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;비밀번호&amp;nbsp;암호화&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//password:&amp;nbsp;formData.password,&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;sessionId:&amp;nbsp;sessionId&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;세션&amp;nbsp;ID&amp;nbsp;포함&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;console&lt;/span&gt;.log(params);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;axios.post(baseUrl&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'/login'&lt;/span&gt;,&amp;nbsp;params)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;.then((res)&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;console&lt;/span&gt;.log(res);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(res.status&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;200&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;console&lt;/span&gt;.log(res.data);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;localStorage.setItem(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;accessToken&quot;&lt;/span&gt;,&amp;nbsp;res.data.token);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;axios.defaults.headers.common[&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Authorization&quot;&lt;/span&gt;]&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Bearer&amp;nbsp;&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;res.data.token;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;navigate(&lt;span style=&quot;color: #dbb84a;&quot;&gt;'/'&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;console&lt;/span&gt;.log(res.data.message);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setError(&lt;span style=&quot;color: #f1a5a5;&quot;&gt;true&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;})&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;span style=&quot;color: #f1a5a5;&quot;&gt;catch&lt;/span&gt;(error&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;console&lt;/span&gt;.log(error.response)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;div&amp;nbsp;className&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;container&amp;nbsp;h-100&amp;nbsp;mt-5&quot;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;div&amp;nbsp;className&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;row&amp;nbsp;d-flex&amp;nbsp;justify-content-center&amp;nbsp;align-items-center&amp;nbsp;h-100&quot;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;div&amp;nbsp;className&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;col-12&amp;nbsp;col-md-9&amp;nbsp;col-lg-7&amp;nbsp;col-xl-6&quot;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;div&amp;nbsp;className&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;card&quot;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;div&amp;nbsp;className&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;card-body&amp;nbsp;p-5&quot;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;h2&amp;nbsp;className&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;text-uppercase&amp;nbsp;text-center&amp;nbsp;mb-5&quot;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;로그인&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;h2&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;form&amp;nbsp;onSubmit&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;{submitForm}&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;div&amp;nbsp;className&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;form-outline&amp;nbsp;mb-4&quot;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;label&amp;nbsp;className&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;form-label&quot;&lt;/span&gt;&amp;nbsp;htmlFor&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;userID&quot;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;userID&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;label&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;input&amp;nbsp;type&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;text&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;userID&quot;&lt;/span&gt;&amp;nbsp;onChange&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;{onChangeInput}&amp;nbsp;id&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;userID&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;className&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;form-control&amp;nbsp;form-control-lg&quot;&lt;/span&gt;&amp;nbsp;value&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;{formData.userID}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;required&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;div&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;div&amp;nbsp;className&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;form-outline&amp;nbsp;mb-4&quot;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;label&amp;nbsp;className&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;form-label&quot;&lt;/span&gt;&amp;nbsp;htmlFor&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;password&quot;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;Password&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;label&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;input&amp;nbsp;type&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;password&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;password&quot;&lt;/span&gt;&amp;nbsp;onChange&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;{onChangeInput}&amp;nbsp;id&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;password&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;className&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;form-control&amp;nbsp;form-control-lg&quot;&lt;/span&gt;&amp;nbsp;value&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;{formData.password}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;required&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;div&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;error&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;div&amp;nbsp;className&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;alert&amp;nbsp;alert-danger&quot;&lt;/span&gt;&amp;nbsp;role&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;alert&quot;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;로그인&amp;nbsp;정보를&amp;nbsp;다시&amp;nbsp;한번&amp;nbsp;확인하세요&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;div&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;div&amp;nbsp;className&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;d-flex&amp;nbsp;justify-content-center&quot;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;button&amp;nbsp;type&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;submit&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;className&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;btn&amp;nbsp;btn-primary&amp;nbsp;btn-block&amp;nbsp;btn-lg&amp;nbsp;gradient-custom-3&amp;nbsp;text-body&quot;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;로그인&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;button&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;div&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;p&amp;nbsp;className&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;text-center&amp;nbsp;text-muted&amp;nbsp;mt-5&amp;nbsp;mb-0&quot;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;Link&amp;nbsp;to&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;/register&quot;&lt;/span&gt;&amp;nbsp;className&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;fw-bold&amp;nbsp;text-body&quot;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;u&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;회원가입&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;u&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;Link&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;p&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;form&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;div&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;div&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;div&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;div&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;/&lt;/span&gt;div&lt;span style=&quot;color: #bc2e40;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;export&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;default&lt;/span&gt;&amp;nbsp;Signup&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;color: #000000;&quot;&gt;백엔드 : Spring Boot 설정 파일&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;71&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;72&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;73&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;74&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;75&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;76&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;77&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;78&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;79&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;80&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;81&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;82&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;83&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;84&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;85&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;86&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;87&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;88&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;89&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;90&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;91&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;92&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;93&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;94&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;95&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;96&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;97&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;98&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;99&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;100&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;101&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;102&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;103&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;104&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;105&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;106&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;107&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;108&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;109&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;110&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;111&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;112&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;113&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;114&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;115&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;116&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;117&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;118&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;119&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;120&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;121&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;122&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;123&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;124&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;125&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;126&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;127&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;128&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;129&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;130&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;131&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;132&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;133&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;134&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;135&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;136&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;137&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;138&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;139&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;140&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;141&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;142&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;143&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;144&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;145&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;146&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;147&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;148&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;149&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;150&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;151&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;152&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;153&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;154&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;155&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;156&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;157&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;158&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.example.springjwt.config;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.annotation.Configuration;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.web.servlet.config.annotation.CorsRegistry;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.web.servlet.config.annotation.WebMvcConfigurer;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Configuration&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;&amp;nbsp;CorsMvcConfig&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;implements&lt;/span&gt;&amp;nbsp;WebMvcConfigurer&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;void&lt;/span&gt;&amp;nbsp;addCorsMappings(CorsRegistry&amp;nbsp;corsRegistry)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;corsRegistry.addMapping(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;/**&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.allowedOrigins(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://spb.abc.com&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;http://localhost:3000&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;정확한&amp;nbsp;출처&amp;nbsp;지정&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.allowedMethods(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;GET&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;POST&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;PUT&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;DELETE&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;OPTIONS&quot;&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;허용할&amp;nbsp;메서드&amp;nbsp;명확히&amp;nbsp;설정&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.allowCredentials(&lt;span style=&quot;color: #2ce1bc;&quot;&gt;true&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;인증&amp;nbsp;정보&amp;nbsp;포함&amp;nbsp;허용&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.allowedHeaders(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Authorization&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Content-Type&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Cache-Control&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;*&amp;nbsp;이&amp;nbsp;설정을&amp;nbsp;유지하려면&amp;nbsp;SecurityConfig.java에서&amp;nbsp;.cors()&amp;nbsp;설정을&amp;nbsp;제거해야&amp;nbsp;한다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;*&amp;nbsp;(권장)&amp;nbsp;WebMvcConfigurer를&amp;nbsp;삭제하고,&amp;nbsp;SecurityConfig.java에서&amp;nbsp;CORS를&amp;nbsp;관리하는&amp;nbsp;것이&amp;nbsp;좋다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.example.springjwt.config;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;com.example.springjwt.jwt.CustomLogoutFilter;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;com.example.springjwt.jwt.JWTFilter;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;com.example.springjwt.jwt.JWTUtil;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;com.example.springjwt.jwt.LoginFilter;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;com.example.springjwt.repository.RefreshRepository;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;com.example.springjwt.service.RSAService;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;jakarta.servlet.http.HttpServletRequest;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.annotation.Bean;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.annotation.Configuration;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.security.authentication.AuthenticationManager;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.security.config.annotation.web.builders.HttpSecurity;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.security.config.http.SessionCreationPolicy;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.security.web.SecurityFilterChain;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.security.web.authentication.logout.LogoutFilter;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.web.cors.CorsConfiguration;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.web.cors.CorsConfigurationSource;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.Arrays;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.Collections;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Configuration&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@EnableWebSecurity&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;&amp;nbsp;SecurityConfig&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;AuthenticationManager&amp;nbsp;가&amp;nbsp;인자로&amp;nbsp;받을&amp;nbsp;AuthenticationConfiguraion&amp;nbsp;객체&amp;nbsp;생성자&amp;nbsp;주입&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;final&lt;/span&gt;&amp;nbsp;AuthenticationConfiguration&amp;nbsp;authenticationConfiguration;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;final&lt;/span&gt;&amp;nbsp;JWTUtil&amp;nbsp;jwtUtil;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;final&lt;/span&gt;&amp;nbsp;RefreshRepository&amp;nbsp;refreshRepository;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;final&lt;/span&gt;&amp;nbsp;RSAService&amp;nbsp;rsaService;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;SecurityConfig(AuthenticationConfiguration&amp;nbsp;authenticationConfiguration,&amp;nbsp;JWTUtil&amp;nbsp;jwtUtil,&amp;nbsp;RefreshRepository&amp;nbsp;refreshRepository,&amp;nbsp;RSAService&amp;nbsp;rsaService)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;this&lt;/span&gt;.authenticationConfiguration&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;authenticationConfiguration;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;this&lt;/span&gt;.jwtUtil&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;jwtUtil;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;this&lt;/span&gt;.refreshRepository&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;refreshRepository;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;this&lt;/span&gt;.rsaService&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;rsaService;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//AuthenticationManager&amp;nbsp;Bean&amp;nbsp;등록&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Bean&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;AuthenticationManager&amp;nbsp;authenticationManager(AuthenticationConfiguration&amp;nbsp;configuration)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;throws&lt;/span&gt;&amp;nbsp;Exception&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;configuration.getAuthenticationManager();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Bean&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;BCryptPasswordEncoder&amp;nbsp;bCryptPasswordEncoder()&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;BCryptPasswordEncoder();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Bean&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;SecurityFilterChain&amp;nbsp;securityFilterChain(HttpSecurity&amp;nbsp;http)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;throws&lt;/span&gt;&amp;nbsp;Exception&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.cors((corsCustomizer&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;corsCustomizer.configurationSource(&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;CorsConfigurationSource()&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;CorsConfiguration&amp;nbsp;getCorsConfiguration(HttpServletRequest&amp;nbsp;request)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CorsConfiguration&amp;nbsp;configuration&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;CorsConfiguration();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;configuration.setAllowedOriginPatterns(Arrays.asList(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://spb.abc.com&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;http://localhost:3000&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;));&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;allowedOrigins(&quot;*&quot;)을&amp;nbsp;사용하지&amp;nbsp;않고,&amp;nbsp;구체적인&amp;nbsp;출처를&amp;nbsp;명시&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;configuration.setAllowCredentials(&lt;span style=&quot;color: #2ce1bc;&quot;&gt;true&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;allowedMethods(&quot;*&quot;)&amp;nbsp;대신&amp;nbsp;GET,&amp;nbsp;POST,&amp;nbsp;PUT,&amp;nbsp;DELETE,&amp;nbsp;OPTIONS를&amp;nbsp;명확하게&amp;nbsp;설정&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;configuration.setAllowedMethods(Collections.singletonList(&quot;*&quot;));&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;configuration.setAllowedMethods(Arrays.asList(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;GET&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;POST&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;PUT&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;DELETE&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;OPTIONS&quot;&lt;/span&gt;));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;allowedHeaders(&quot;*&quot;)&amp;nbsp;대신&amp;nbsp;Authorization,&amp;nbsp;Content-Type,&amp;nbsp;Cache-Control을&amp;nbsp;지정&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;configuration.setAllowedHeaders(Collections.singletonList(&quot;*&quot;));&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;configuration.setAllowedHeaders(Arrays.asList(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Authorization&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Content-Type&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Cache-Control&quot;&lt;/span&gt;));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;configuration.setExposedHeaders(Collections.singletonList(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Authorization&quot;&lt;/span&gt;));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;configuration.setMaxAge(3600L);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;configuration;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;})));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//csrf&amp;nbsp;disable&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.csrf((auth)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;auth.disable());&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//From&amp;nbsp;로그인&amp;nbsp;방식&amp;nbsp;disable&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.formLogin((auth)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;auth.disable());&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//http&amp;nbsp;basic&amp;nbsp;인증&amp;nbsp;방식&amp;nbsp;disable&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.httpBasic((auth)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;auth.disable());&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//경로별&amp;nbsp;인가&amp;nbsp;작업&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.authorizeHttpRequests((auth)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;auth&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.requestMatchers(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;/api/join&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;/login&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;/&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;/api/public-key&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;/api/pub-key&quot;&lt;/span&gt;).permitAll()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.requestMatchers(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;/admin&quot;&lt;/span&gt;).hasRole(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;ADMIN&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.requestMatchers(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;/reissue&quot;&lt;/span&gt;).permitAll()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.anyRequest().authenticated());&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.addFilterBefore(&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;JWTFilter(jwtUtil),&amp;nbsp;LoginFilter.&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.addFilterAt(&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;LoginFilter(authenticationManager(authenticationConfiguration),&amp;nbsp;jwtUtil,&amp;nbsp;refreshRepository,&amp;nbsp;rsaService),&amp;nbsp;UsernamePasswordAuthenticationFilter.&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.addFilterBefore(&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;CustomLogoutFilter(jwtUtil,&amp;nbsp;refreshRepository),&amp;nbsp;LogoutFilter.&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//세션&amp;nbsp;설정&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.sessionManagement((session)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;session&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.sessionCreationPolicy(SessionCreationPolicy.STATELESS));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.csrf((auth)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;auth.disable());&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;http.build();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.example.springjwt.controller;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;com.example.springjwt.dto.JoinDTO;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;com.example.springjwt.service.JoinService;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;com.example.springjwt.service.RSAService;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;jakarta.servlet.http.HttpServletRequest;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.beans.factory.annotation.Autowired;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.web.bind.annotation.&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;*&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.Map;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.UUID;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@RestController&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@RequestMapping(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;/api&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;&amp;nbsp;AuthController&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;final&lt;/span&gt;&amp;nbsp;RSAService&amp;nbsp;rsaService;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;final&lt;/span&gt;&amp;nbsp;JoinService&amp;nbsp;joinService;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Autowired&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;AuthController(RSAService&amp;nbsp;rsaService,&amp;nbsp;JoinService&amp;nbsp;joinService)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;this&lt;/span&gt;.rsaService&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;rsaService;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;this&lt;/span&gt;.joinService&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;joinService;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;회원&amp;nbsp;가입용&amp;nbsp;공개키&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@GetMapping(&quot;/pub-key&quot;)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;Map&amp;lt;String,&amp;nbsp;String&amp;gt;&amp;nbsp;getPubKey()&amp;nbsp;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;Map.of(&quot;publicKey&quot;,&amp;nbsp;rsaService.getPubKey());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@GetMapping(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;/pub-key&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;Map&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;getPubKey(HttpServletRequest&amp;nbsp;request)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;clientIp&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;getClientIp(request);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;&amp;nbsp;clientPort&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;request.getRemotePort();&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;✅&amp;nbsp;클라이언트&amp;nbsp;포트&amp;nbsp;가져오기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot; &amp;nbsp;클라이언트&amp;nbsp;IP:&amp;nbsp;&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;clientIp&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&amp;nbsp;|&amp;nbsp;포트:&amp;nbsp;&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;clientPort);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;Map.of(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;publicKey&quot;&lt;/span&gt;,&amp;nbsp;rsaService.getPubKey());&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;getClientIp(HttpServletRequest&amp;nbsp;request)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;ip&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;request.getHeader(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;X-Forwarded-For&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(ip&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;null&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&amp;nbsp;ip.isEmpty()&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;unknown&quot;&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;equalsIgnoreCase&lt;/span&gt;(ip))&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;ip&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;request.getRemoteAddr();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;ip;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;로그인&amp;nbsp;용&amp;nbsp;공개키&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@GetMapping(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;/public-key&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;Map&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;getPublicKey()&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;sessionId&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;UUID.randomUUID().&lt;span style=&quot;color: #8ac7fd;&quot;&gt;toString&lt;/span&gt;();&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;클라이언트마다&amp;nbsp;새로운&amp;nbsp;세션&amp;nbsp;ID&amp;nbsp;생성&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;publicKey&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;rsaService.generateNewPublicKey(sessionId);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;Map.of(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;sessionId&quot;&lt;/span&gt;,&amp;nbsp;sessionId,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;publicKey&quot;&lt;/span&gt;,&amp;nbsp;publicKey);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@PostMapping(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;/join&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;Map&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;joinProcess(@RequestBody&amp;nbsp;JoinDTO&amp;nbsp;joinDTO)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;joinService.joinProcess(joinDTO,&amp;nbsp;rsaService.getPriKey());&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;Map.of(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;message&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;회원가입&amp;nbsp;성공&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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>Spring Boot/Security</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2464</guid>
      <comments>https://link2me.tistory.com/2464#entry2464comment</comments>
      <pubDate>Sun, 9 Mar 2025 13:24:58 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot SSL 인증서 적용</title>
      <link>https://link2me.tistory.com/2463</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Windows 11 노트북에서 접속할 때는 인증서가 필요없이도 잘 접속이 되는데 도메인 URL을 통해 접속하는 리눅스 서버에서 443 포트로 접속하는 통신을 하려면 인증서가 필요하다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;spring_boot_security-03.png&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIVsqw/btsMFEPw002/6vzMymbSDOKUlbdMWQpik1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIVsqw/btsMFEPw002/6vzMymbSDOKUlbdMWQpik1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIVsqw/btsMFEPw002/6vzMymbSDOKUlbdMWQpik1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIVsqw%2FbtsMFEPw002%2F6vzMymbSDOKUlbdMWQpik1%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;802&quot; height=&quot;314&quot; data-filename=&quot;spring_boot_security-03.png&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#&amp;nbsp;SSL&amp;nbsp;인증서&amp;nbsp;로컬&amp;nbsp;시스템에&amp;nbsp;등록&amp;nbsp;(Rocky&amp;nbsp;9)&lt;br /&gt;PKCS12 (Public Key Cryptograhic Standards)의 줄임말로 패스워드로 보호된 형식으로써, 여러 인증서 및 키를 포함할 수 있다. Java뿐만 아니라 여러 플랫폼에서 사용 가능하다.&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Letsencrypt 에서 얻는 키를 이용하여 생성하면 된다.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#&amp;nbsp;PKC12생성하기&amp;nbsp;:&amp;nbsp;Java&amp;nbsp;KeyStore&amp;nbsp;(keystore.p12)로&amp;nbsp;변환&lt;br /&gt;SSL 인증서를 Spring Boot에 추가하여 HTTPS를 8080 포트에서 활성화하려면, 다음 단계를 따라 Java KeyStore (JKS) 또는 PKCS12 포맷으로 변환하고 설정해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;&lt;b&gt;openssl&amp;nbsp;pkcs12&amp;nbsp;-export&amp;nbsp;-in&amp;nbsp;cert1.pem&amp;nbsp;-inkey&amp;nbsp;privkey1.pem&amp;nbsp;-out&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;keystore.p12&lt;/span&gt;&amp;nbsp;-name&amp;nbsp;tomcat&amp;nbsp;-password&amp;nbsp;pass:changeit&lt;/b&gt;&lt;br /&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;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;-export:&amp;nbsp;PKCS12&amp;nbsp;파일을&amp;nbsp;생성&lt;br /&gt;-in cert1.pem&amp;nbsp; &amp;rarr; 공개 인증서 파일&lt;br /&gt;-inkey privkey1.pem &lt;span style=&quot;color: #000000;&quot;&gt; &amp;rarr; &lt;/span&gt;개인 키 파일&lt;br /&gt;-out keystore.p12 &lt;span style=&quot;color: #000000;&quot;&gt; &amp;rarr; &lt;/span&gt;변환된 인증서 저장 위치&lt;br /&gt;-name tomcat &lt;span style=&quot;color: #000000;&quot;&gt; &amp;rarr; &lt;/span&gt;별칭(alias) 설정&lt;br /&gt;-password pass:changeit&amp;nbsp; &lt;span style=&quot;color: #000000;&quot;&gt; &amp;rarr; &lt;/span&gt;비밀번호 설정 (Spring Boot 설정에서 동일하게 사용해야 함)&lt;br /&gt;&lt;br /&gt;생성된 인증서를 위의 3번과 같이 Windows 11 환경의 IntelliJ IDEA 구동한&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;spring boot 프로젝트의 resources 폴더&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에 넣고 build 해서 생성된 파일을 리눅스 시스템에 업로드하면 된다.&lt;br /&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring Boot/Security</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2463</guid>
      <comments>https://link2me.tistory.com/2463#entry2463comment</comments>
      <pubDate>Sun, 9 Mar 2025 12:54:29 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot Security 적용 예시 화면</title>
      <link>https://link2me.tistory.com/2462</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spring Boot Security 를 적용한 예시 화면이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로그인을 누르면 공개키 정보를 서버에서 가져오는 걸 콘솔화면에 출력되도록 설정하고 확인하는 과정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;spring_boot_security-01.png&quot; data-origin-width=&quot;1636&quot; data-origin-height=&quot;574&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkZcTW/btsMFsavwOa/20eJL6uMtFKc5WxtEfiulk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkZcTW/btsMFsavwOa/20eJL6uMtFKc5WxtEfiulk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkZcTW/btsMFsavwOa/20eJL6uMtFKc5WxtEfiulk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkZcTW%2FbtsMFsavwOa%2F20eJL6uMtFKc5WxtEfiulk%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;1636&quot; height=&quot;574&quot; data-filename=&quot;spring_boot_security-01.png&quot; data-origin-width=&quot;1636&quot; data-origin-height=&quot;574&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로그인 정보를 입력하고 이후 결과 화면을 보면&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;spring_boot_security-02.png&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;326&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FFuAA/btsMEQpxTml/wkrIgRltiWhw53vGpQADPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FFuAA/btsMEQpxTml/wkrIgRltiWhw53vGpQADPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FFuAA/btsMEQpxTml/wkrIgRltiWhw53vGpQADPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFFuAA%2FbtsMEQpxTml%2FwkrIgRltiWhw53vGpQADPK%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;932&quot; height=&quot;326&quot; data-filename=&quot;spring_boot_security-02.png&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;326&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아이디 정보와 비밀번호가 RSA 암호화된 것을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;sessionId 는 RSA 암호화/복호화 KEY 쌍을 사용자별로 일정시간동안만 유지될 수 있도록 구현했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로그인이 정상적으로 잘 되면 accessToken 정보를 반환하도록 테스트 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JWT 토큰에 대한 강좌는 &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=NPRh2v7PTZg&amp;amp;list=PLJkjrxxiBSFCcOjy0AAVGNtIa08VLk1EJ&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=NPRh2v7PTZg&amp;amp;list=PLJkjrxxiBSFCcOjy0AAVGNtIa08VLk1EJ&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=NPRh2v7PTZg&amp;amp;list=PLJkjrxxiBSFCcOjy0AAVGNtIa08VLk1EJ&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/gvuB6/hyYm0OsuQ6/CLS8FHkPB3FhwCK46iQkT1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/byYpy0/hyYm26CjUL/k4e85tVktlQzykUaGBGQ40/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;스프링 시큐리티 JWT 1 : 실습 목표 및 간단한 동작 원리&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/NPRh2v7PTZg&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;강좌 시리즈가 설명이 너무 잘 되어 있어서 이 동영상 강좌를 따라서 연습했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 동영상 강좌는 Front-End 에 대한 부분은 POSTMan Web 사이트를 이용하여 테스트를 하기 때문에 실제 환경 구성과는 거리가 있을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Windows 11 환경에서 인털리전스 IDEA 툴과 VSCode 로 Spring Boot 예제와 React 예제를 만들어서 구현 테스트 하는 것까지는 어렵지 않게 구현하는데 성공했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라우드 서버에 올리는 걸 테스트 하면서 삽질을 엄청나게 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;React http://localhost:3000, Spring Boot http://localhost:8080 으로 기본 설정되기 때문에 윈도우에서 둘 간에 어려움없이 개발 테스트를 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만 Rocky 9.5 Linux 서버가 있는 환경에서 구동 테스트를 시도했더니 엄청난 난관에 부딪치게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문제에 부딪치면 밤을 세워서라도 해결하고픈 욕망 때문에 어젯밤을 꼴딱 샜다. 그리고 해결하고 정리를 하면서 기록을 해두고 있다. 지금 이 순간에는 알지만, 시간이 지나면 금방 잊어버리게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&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;&lt;span style=&quot;color: #000000;&quot;&gt;JMeter 로 로그인 처리하는 방법을 배우면서 토큰 인증에 대한 이해가 필요했고, 토큰 인증에 대한 이해를 위해서 샘플 코드를 직접 구현하고 실 사이트에서 테스트해보고, 다시 Spring Boot 환경 구성을 해보면서 결과를 얻으려고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지금 정리하는 것은 Spring Boot 를 단계적으로 배워서 정리하는 것이 아니라 골인 지점에 대한 구현을 단기 속성으로 하고 나서 거꾸로 Spring Boot 동영상 강좌를 듣고 있는 중이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PHP 로 구현한 Secure Coding 코드 기반으로 보안 검증을 몇년간 받아보면서 시큐어코딩에 대한 이해도가 높아졌고, 그걸 기반으로 React 와 Spring Boot 기반의 RSA 암호화/복호화 코드를 구현 테스트 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Javascript 에서 RSA 암호화로 패스워드(password)를 암호화해서 전송하고, 서버단에서 RSA 암호화 문자열을 복호화하여 DB에 있는 정보와 일치 여부를 확인한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이처럼 이종 언어간에 RSA 암호화/복호화하는 방법으로 결과가 성공이어야 한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구글링으로 구한 RSA 암호화/복호화 샘플이 이종 언어간에 제대로 동작되지 않는 걸 많이 경험한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Andorid 앱에서 RSA 암호화를 하고, Back-End 언어어서 RSA 복호화 처리를 하는 걸 구현해야만 보안 검증에 통과되기 때문에 이때도 수많은 삽질을 했었고, 이종 언어간에 동작하는 함수를 구현해서 사용했었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;chatGPT 가 나날이 발전하여 많은 도움을 받고 있지만, 잘못된 정보를 전달하기도 해서 시행착오를 많이 겪는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Android APP 에서 구현해서 사용했던 함수를 Spring Boot 용으로 변환 요청을 했더니 엉터리로 결과를 반환한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이종 언어로 결과 반환을 요청하면 대부분 실패된 결과를 제공하더라.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Spring Boot/Security</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2462</guid>
      <comments>https://link2me.tistory.com/2462#entry2462comment</comments>
      <pubDate>Sat, 8 Mar 2025 10:07:17 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot Build 하기</title>
      <link>https://link2me.tistory.com/2461</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인텔리전트 IDEA 툴에서 빌드하는 방법이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;spring_boot_build-01.png&quot; data-origin-width=&quot;573&quot; data-origin-height=&quot;501&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bu1hTJ/btsMEw5WsYi/b5C4RJAWE7MuOcG3cDnq90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bu1hTJ/btsMEw5WsYi/b5C4RJAWE7MuOcG3cDnq90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bu1hTJ/btsMEw5WsYi/b5C4RJAWE7MuOcG3cDnq90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbu1hTJ%2FbtsMEw5WsYi%2Fb5C4RJAWE7MuOcG3cDnq90%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;573&quot; height=&quot;501&quot; data-filename=&quot;spring_boot_build-01.png&quot; data-origin-width=&quot;573&quot; data-origin-height=&quot;501&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;빌드된 파일은 아래 경로에서 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;spring_boot_build-02.png&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tsdof/btsMFtNZhNz/65KqN0VItBh3ho6ybTFfIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tsdof/btsMFtNZhNz/65KqN0VItBh3ho6ybTFfIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tsdof/btsMFtNZhNz/65KqN0VItBh3ho6ybTFfIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftsdof%2FbtsMFtNZhNz%2F65KqN0VItBh3ho6ybTFfIK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;321&quot; height=&quot;104&quot; data-filename=&quot;spring_boot_build-02.png&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;104&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;윈도우에서 빌드한 파일을 리눅스 서버(Rocky Linux 9.5)에 업로드 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;spring_boot_build-03.png&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxkgAu/btsMEZs5eKa/9XybIwykDsKqRGkcltOx10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxkgAu/btsMEZs5eKa/9XybIwykDsKqRGkcltOx10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxkgAu/btsMEZs5eKa/9XybIwykDsKqRGkcltOx10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxkgAu%2FbtsMEZs5eKa%2F9XybIwykDsKqRGkcltOx10%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;630&quot; height=&quot;110&quot; data-filename=&quot;spring_boot_build-03.png&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;빌드된 파일은 java -jar 빌드파일명.jar 명령어를 입력하여 실행할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;spring_boot_build-04.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;707&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RWJYI/btsMEqybfh0/9NGA2EQ3sb7kzTH5vizAAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RWJYI/btsMEqybfh0/9NGA2EQ3sb7kzTH5vizAAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RWJYI/btsMEqybfh0/9NGA2EQ3sb7kzTH5vizAAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRWJYI%2FbtsMEqybfh0%2F9NGA2EQ3sb7kzTH5vizAAk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;707&quot; data-filename=&quot;spring_boot_build-04.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;707&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구동중에 에러가 발생하면 메시지가 출력되며, 출력된 메시지를 분석해서 에러 원인을 제거해 나가면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring Boot/IDEA</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2461</guid>
      <comments>https://link2me.tistory.com/2461#entry2461comment</comments>
      <pubDate>Sat, 8 Mar 2025 09:35:00 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot RSA 암호화/복호화 함수</title>
      <link>https://link2me.tistory.com/2460</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래 함수는 Javascript 에서 암호화된 문자열을 PHP 언어에서 복호화 성공한 암호화 KEY 문자열과 복호화 KEY 문자열을 가지고 테스트 진행했다. 함수가 제대로 동작되는 걸 확인했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Android Java 코드로 RSA 암호화/복호화 함수 구현 것을 chatGPT에게 변환 요청한 것은 성공되지 못하고 실패했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;chatGPT가 이기종 언어에서 구현한 코드를 변환 요청하면 대부분 실패하는 거 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Front-End 언어에서 암호화하고 Spring Boot 에서 복호화가 정상적으로 되어야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;71&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;72&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;73&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;74&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;75&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;76&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;77&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;78&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;79&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;80&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;81&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;82&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;83&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;84&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;85&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.example.springjwt.util;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.stereotype.Component;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;javax.crypto.Cipher;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.nio.charset.StandardCharsets;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.security.&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;*&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.security.spec.PKCS8EncodedKeySpec;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.security.spec.X509EncodedKeySpec;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.Base64;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Component&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;&amp;nbsp;RSAUtil&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;2048비트&amp;nbsp;RSA&amp;nbsp;키&amp;nbsp;쌍&amp;nbsp;생성&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;KeyPair&amp;nbsp;generateRSAKeyPair()&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;try&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;KeyPairGenerator&amp;nbsp;keyPairGenerator&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;KeyPairGenerator.getInstance(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;RSA&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;keyPairGenerator.initialize(&lt;span style=&quot;color: #2ce1bc;&quot;&gt;2048&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;keyPairGenerator.generateKeyPair();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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: #f1a5a5;&quot;&gt;catch&lt;/span&gt;&amp;nbsp;(NoSuchAlgorithmException&amp;nbsp;e)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;RuntimeException(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Failed&amp;nbsp;to&amp;nbsp;generate&amp;nbsp;RSA&amp;nbsp;key&amp;nbsp;pair&quot;&lt;/span&gt;,&amp;nbsp;e);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Base64&amp;nbsp;인코딩된&amp;nbsp;공개키&amp;nbsp;문자열을&amp;nbsp;PublicKey&amp;nbsp;객체로&amp;nbsp;변환&amp;nbsp;(X.509)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;PublicKey&amp;nbsp;getPublicKeyFromBase64(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;base64PublicKey)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;try&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;byte&lt;/span&gt;[]&amp;nbsp;decodedKey&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;Base64.getDecoder().decode(base64PublicKey);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;KeyFactory&amp;nbsp;keyFactory&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;KeyFactory.getInstance(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;RSA&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;keyFactory.generatePublic(&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;X509EncodedKeySpec(decodedKey));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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: #f1a5a5;&quot;&gt;catch&lt;/span&gt;&amp;nbsp;(Exception&amp;nbsp;e)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;RuntimeException(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Failed&amp;nbsp;to&amp;nbsp;retrieve&amp;nbsp;public&amp;nbsp;key&amp;nbsp;from&amp;nbsp;Base64&quot;&lt;/span&gt;,&amp;nbsp;e);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Base64&amp;nbsp;인코딩된&amp;nbsp;개인키&amp;nbsp;문자열을&amp;nbsp;PrivateKey&amp;nbsp;객체로&amp;nbsp;변환&amp;nbsp;(PKCS8)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;PrivateKey&amp;nbsp;getPrivateKeyFromBase64(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;base64PrivateKey)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;try&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;byte&lt;/span&gt;[]&amp;nbsp;decodedKey&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;Base64.getDecoder().decode(base64PrivateKey);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;KeyFactory&amp;nbsp;keyFactory&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;KeyFactory.getInstance(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;RSA&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;keyFactory.generatePrivate(&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;PKCS8EncodedKeySpec(decodedKey));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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: #f1a5a5;&quot;&gt;catch&lt;/span&gt;&amp;nbsp;(Exception&amp;nbsp;e)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;RuntimeException(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Failed&amp;nbsp;to&amp;nbsp;retrieve&amp;nbsp;private&amp;nbsp;key&amp;nbsp;from&amp;nbsp;Base64&quot;&lt;/span&gt;,&amp;nbsp;e);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Base64&amp;nbsp;인코딩된&amp;nbsp;공개키&amp;nbsp;문자열을&amp;nbsp;받아&amp;nbsp;RSA&amp;nbsp;암호화&amp;nbsp;수행&amp;nbsp;(RSA/ECB/PKCS1Padding&amp;nbsp;사용)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;encryptRSA(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;plainText,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;base64PublicKey)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;try&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;PublicKey&amp;nbsp;publicKey&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;getPublicKeyFromBase64(base64PublicKey);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;Cipher&amp;nbsp;cipher&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;Cipher.getInstance(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;RSA/ECB/PKCS1Padding&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;cipher.init(Cipher.ENCRYPT_MODE,&amp;nbsp;publicKey);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;byte&lt;/span&gt;[]&amp;nbsp;encryptedBytes&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;Base64.getEncoder().encodeToString(encryptedBytes);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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: #f1a5a5;&quot;&gt;catch&lt;/span&gt;&amp;nbsp;(Exception&amp;nbsp;e)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;RuntimeException(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;RSA&amp;nbsp;encryption&amp;nbsp;failed&quot;&lt;/span&gt;,&amp;nbsp;e);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Base64&amp;nbsp;인코딩된&amp;nbsp;개인키&amp;nbsp;문자열을&amp;nbsp;받아&amp;nbsp;RSA&amp;nbsp;복호화&amp;nbsp;수행&amp;nbsp;(RSA/ECB/PKCS1Padding&amp;nbsp;사용)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;decryptRSA(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;encryptedText,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;base64PrivateKey)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;try&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;PrivateKey&amp;nbsp;privateKey&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;getPrivateKeyFromBase64(base64PrivateKey);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;Cipher&amp;nbsp;cipher&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;Cipher.getInstance(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;RSA/ECB/PKCS1Padding&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;cipher.init(Cipher.DECRYPT_MODE,&amp;nbsp;privateKey);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;byte&lt;/span&gt;[]&amp;nbsp;decryptedBytes&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;cipher.doFinal(Base64.getDecoder().decode(encryptedText));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;(decryptedBytes,&amp;nbsp;StandardCharsets.UTF_8);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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: #f1a5a5;&quot;&gt;catch&lt;/span&gt;&amp;nbsp;(Exception&amp;nbsp;e)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;RuntimeException(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;RSA&amp;nbsp;decryption&amp;nbsp;failed&quot;&lt;/span&gt;,&amp;nbsp;e);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트 하는 방법은 아래와 같이 파일을 추가해서 하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RSA Key 쌍을 생성하지 않아도 된다. RSA Key 쌍을 Linux 시스템에서 파일로 생성한 것으로 테스트를 진행했고 잘 동작되는 걸 확인했다.&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.example.springjwt.util;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.boot.CommandLineRunner;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.stereotype.Component;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.security.KeyPair;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.security.PrivateKey;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.security.PublicKey;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Component&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;class&lt;/span&gt;&amp;nbsp;RSAUtilRunner&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;implements&lt;/span&gt;&amp;nbsp;CommandLineRunner&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;final&lt;/span&gt;&amp;nbsp;RSAUtil&amp;nbsp;rsaUtil;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;RSAUtilRunner(RSAUtil&amp;nbsp;rsaUtil)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;this&lt;/span&gt;.rsaUtil&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;rsaUtil;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;void&lt;/span&gt;&amp;nbsp;run(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;...&amp;nbsp;args)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;throws&lt;/span&gt;&amp;nbsp;Exception&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;1.&amp;nbsp;RSA&amp;nbsp;키&amp;nbsp;쌍&amp;nbsp;생성&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KeyPair&amp;nbsp;keyPair&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;rsaUtil.generateRSAKeyPair();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PublicKey&amp;nbsp;publicKey&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;keyPair.getPublic();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PrivateKey&amp;nbsp;privateKey&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;keyPair.getPrivate();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;2.&amp;nbsp;Base64로&amp;nbsp;인코딩하여&amp;nbsp;키&amp;nbsp;출력&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;base64PublicKey&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;java.util.Base64.getEncoder().encodeToString(publicKey.getEncoded());&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;base64PrivateKey&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;java.util.Base64.getEncoder().encodeToString(privateKey.getEncoded());&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;-----&amp;nbsp;RSA&amp;nbsp;키&amp;nbsp;쌍&amp;nbsp;생성&amp;nbsp;완료&amp;nbsp;-----&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;공개키&amp;nbsp;(Base64):&amp;nbsp;&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;base64PublicKey);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;개인키&amp;nbsp;(Base64):&amp;nbsp;&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;base64PrivateKey);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;3.&amp;nbsp;암호화&amp;nbsp;테스트&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;originalText&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Hello,&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;with&amp;nbsp;RSA!&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;\n원본&amp;nbsp;텍스트:&amp;nbsp;&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;originalText);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;encryptedText&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;rsaUtil.encryptRSA(originalText,&amp;nbsp;base64PublicKey);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;암호화된&amp;nbsp;텍스트:&amp;nbsp;&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;encryptedText);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;4.&amp;nbsp;복호화&amp;nbsp;테스트&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;decryptedText&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;rsaUtil.decryptRSA(encryptedText,&amp;nbsp;base64PrivateKey);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;복호화된&amp;nbsp;텍스트:&amp;nbsp;&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;decryptedText);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;color: #000000;&quot;&gt;다음에는 실제 React 에서 비밀번호를 암호화해서 전송하고, Spring Boot 에서 복호화 성공 여부를 확인하려고 한다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Spring Boot/Security</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2460</guid>
      <comments>https://link2me.tistory.com/2460#entry2460comment</comments>
      <pubDate>Tue, 4 Mar 2025 16:28:59 +0900</pubDate>
    </item>
    <item>
      <title>강동구청 조직도 크롤링</title>
      <link>https://link2me.tistory.com/2459</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;강동구청 조직도 크롤링 소스코드이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;requests&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;from&lt;/span&gt;&amp;nbsp;bs4&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;BeautifulSoup&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;pandas&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;as&lt;/span&gt;&amp;nbsp;pd&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;re&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;def&lt;/span&gt;&amp;nbsp;crawl_orgchart():&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.gangdong.go.kr/web/newportal/empSearch/list&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;headers&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;{&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;User-Agent&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Mozilla/5.0&amp;nbsp;(Windows&amp;nbsp;NT&amp;nbsp;10.0;&amp;nbsp;Win64;&amp;nbsp;x64)&quot;&lt;/span&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;requests.get(url,&amp;nbsp;headers&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;headers)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;response.status_code&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;200&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Failed&amp;nbsp;to&amp;nbsp;retrieve&amp;nbsp;page&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;None&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;soup&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;BeautifulSoup(response.text,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;html.parser&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;departments&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;soup.select(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;h4.title-green&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tables&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;soup.select(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;table&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;dept,&amp;nbsp;table&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;zip(departments,&amp;nbsp;tables):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;department_name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;dept.text.strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;괄호가&amp;nbsp;포함되어&amp;nbsp;있으면&amp;nbsp;괄호&amp;nbsp;이전&amp;nbsp;글자만&amp;nbsp;추출&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;(&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;department_name:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;department_name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;re.split(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;\\(&quot;&lt;/span&gt;,&amp;nbsp;department_name)[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;].strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;'FAX'&amp;nbsp;이전까지의&amp;nbsp;글자만&amp;nbsp;추출&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;department_name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;re.split(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;FAX&quot;&lt;/span&gt;,&amp;nbsp;department_name,&amp;nbsp;flags&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;re.IGNORECASE)[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;].strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;table_rows&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;table.select(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;tbody&amp;nbsp;tr&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;row&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;table_rows:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;columns&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;row.find_all(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;td&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;len&lt;/span&gt;(columns)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;3&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;position&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;columns[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;].text.strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;phone&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;columns[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;].text.strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;duty&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;columns[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;2&lt;/span&gt;].text.strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;전화번호가&amp;nbsp;없는&amp;nbsp;행은&amp;nbsp;제외&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;not&lt;/span&gt;&amp;nbsp;phone:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;전화번호가&amp;nbsp;2줄&amp;nbsp;이상이면&amp;nbsp;한&amp;nbsp;칸&amp;nbsp;공백으로&amp;nbsp;띄우고&amp;nbsp;한&amp;nbsp;줄로&amp;nbsp;변환&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;phone&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&amp;nbsp;&quot;&lt;/span&gt;.join(phone.splitlines()).strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;여러&amp;nbsp;줄인&amp;nbsp;경우&amp;nbsp;한&amp;nbsp;칸&amp;nbsp;공백으로&amp;nbsp;띄우고&amp;nbsp;한&amp;nbsp;줄로&amp;nbsp;변환&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;duty&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&amp;nbsp;&quot;&lt;/span&gt;.join(duty.splitlines()).strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;담당업무가&amp;nbsp;1줄이고&amp;nbsp;첫&amp;nbsp;글자가&amp;nbsp;'-'이면&amp;nbsp;'o'로&amp;nbsp;변경&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;duty.startswith(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;-&quot;&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;and&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;\n&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;not&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;duty:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;duty&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;o&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;duty[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;:]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data.append({&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;부서명&quot;&lt;/span&gt;:&amp;nbsp;department_name,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;직위&quot;&lt;/span&gt;:&amp;nbsp;position,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;전화번호&quot;&lt;/span&gt;:&amp;nbsp;phone,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;담당업무&quot;&lt;/span&gt;:&amp;nbsp;duty&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;})&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pd.DataFrame(data)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;df&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;__name__&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;__main__&quot;&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;crawl_orgchart()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;df&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;is&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;not&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;None&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;print&lt;/span&gt;(df)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df.to_csv(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;강동구청_조직도.csv&quot;&lt;/span&gt;,&amp;nbsp;index&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;False&lt;/span&gt;,&amp;nbsp;encoding&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;utf-8-sig&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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>Web 크롤링/Python Crawling</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2459</guid>
      <comments>https://link2me.tistory.com/2459#entry2459comment</comments>
      <pubDate>Sun, 2 Mar 2025 00:10:57 +0900</pubDate>
    </item>
    <item>
      <title>종로구청 조직도 크롤링</title>
      <link>https://link2me.tistory.com/2458</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;종로구청 조직도 크롤링 소스코드이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;71&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;72&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;73&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;74&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;75&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;76&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;77&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;78&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;79&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;80&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;81&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;82&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;83&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;84&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;85&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;86&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;87&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;88&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;89&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;90&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;91&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;92&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;93&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;94&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;95&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;96&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;97&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;98&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;99&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;100&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;101&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;102&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;103&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;104&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;105&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;106&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;107&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;108&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;109&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;110&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;111&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;112&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;113&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;114&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;115&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;116&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;117&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;118&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;119&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;120&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;121&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;122&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;123&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;124&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;125&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;126&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;127&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;128&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;129&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;130&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;131&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;132&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;133&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;134&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;135&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;136&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;137&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;138&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;139&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;140&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;141&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;142&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;143&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;144&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;145&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;146&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;147&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;148&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;149&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;150&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;151&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;152&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;153&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;154&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;requests&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;from&lt;/span&gt;&amp;nbsp;bs4&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;BeautifulSoup&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;pandas&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;as&lt;/span&gt;&amp;nbsp;pd&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;re&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;def&lt;/span&gt;&amp;nbsp;crawl_orgchart_main(url):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;요청&amp;nbsp;및&amp;nbsp;응답&amp;nbsp;확인&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;headers&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;User-Agent&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Mozilla/5.0&amp;nbsp;(Windows&amp;nbsp;NT&amp;nbsp;10.0;&amp;nbsp;Win64;&amp;nbsp;x64)&amp;nbsp;AppleWebKit/537.36&amp;nbsp;(KHTML,&amp;nbsp;like&amp;nbsp;Gecko)&amp;nbsp;Chrome/91.0.4472.124&amp;nbsp;Safari/537.36&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;requests.get(url,&amp;nbsp;headers&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;headers)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;soup&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;BeautifulSoup(response.text,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;html.parser&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;데이터&amp;nbsp;저장&amp;nbsp;리스트&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;&quot;org_list&quot;&amp;nbsp;내부&amp;nbsp;정보&amp;nbsp;추출&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org_list&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;soup.select(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;.org_list&amp;nbsp;ul&amp;nbsp;li&amp;nbsp;a&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;org&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;org_list:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;org.find(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;em&quot;&lt;/span&gt;).get_text(strip&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;org.find(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;em&quot;&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;re.split(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;\\d&quot;&lt;/span&gt;,&amp;nbsp;name)[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;].strip()&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;숫자&amp;nbsp;제거하여&amp;nbsp;이름만&amp;nbsp;추출&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;duty&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;org.find(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;span&quot;&lt;/span&gt;).get_text(strip&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;org.find(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;span&quot;&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;phone&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;org.find(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;p&quot;&lt;/span&gt;).get_text(strip&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;org.find(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;p&quot;&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;position&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;name&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;and&lt;/span&gt;&amp;nbsp;duty:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;data.append([duty,&amp;nbsp;position,phone,&amp;nbsp;name])&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;&quot;modal-table&quot;&amp;nbsp;내부&amp;nbsp;정보&amp;nbsp;추출&amp;nbsp;(부구청장,&amp;nbsp;비서실&amp;nbsp;등)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;modal_tables&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;soup.select(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;.modal-table&amp;nbsp;tbody&amp;nbsp;tr&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;row&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;modal_tables:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cols&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;row.find_all(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;td&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;len&lt;/span&gt;(cols)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;3&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;cols[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;].get_text(strip&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;이름&amp;nbsp;=&amp;gt;&amp;nbsp;부서명&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;duty&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;cols[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;].get_text(strip&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;담당업무&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;phone&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;cols[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;2&lt;/span&gt;].get_text(strip&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;연락처&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;position&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;data.append([duty,&amp;nbsp;position,phone,&amp;nbsp;name])&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;데이터프레임&amp;nbsp;생성&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;columns&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;부서명&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;직위&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;전화번호&quot;&lt;/span&gt;,&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;담당업무&quot;&lt;/span&gt;]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pd.DataFrame(data,&amp;nbsp;columns&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;columns)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;df&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;def&lt;/span&gt;&amp;nbsp;crawl_orgchart(url):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;요청&amp;nbsp;및&amp;nbsp;응답&amp;nbsp;확인&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;headers&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;User-Agent&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Mozilla/5.0&amp;nbsp;(Windows&amp;nbsp;NT&amp;nbsp;10.0;&amp;nbsp;Win64;&amp;nbsp;x64)&amp;nbsp;AppleWebKit/537.36&amp;nbsp;(KHTML,&amp;nbsp;like&amp;nbsp;Gecko)&amp;nbsp;Chrome/91.0.4472.124&amp;nbsp;Safari/537.36&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;requests.get(url,&amp;nbsp;headers&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;headers)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;soup&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;BeautifulSoup(response.text,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;html.parser&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;데이터&amp;nbsp;저장&amp;nbsp;리스트&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;&quot;organization&quot;&amp;nbsp;내부&amp;nbsp;정보&amp;nbsp;추출&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;organization&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;soup.select_one(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;.organization&amp;nbsp;ul&amp;nbsp;li&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;organization:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;department&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;organization.find(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;dt&quot;&lt;/span&gt;).get_text(strip&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;organization.find(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;dt&quot;&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name_position_parts&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;organization.find(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;dd&quot;&lt;/span&gt;).get_text(strip&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;,&amp;nbsp;separator&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&amp;nbsp;&quot;&lt;/span&gt;).split(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&amp;nbsp;&quot;&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;organization.find(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;dd&quot;&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;[]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name_position&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;name_position_parts[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;]&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;len&lt;/span&gt;(name_position_parts)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;name_position_parts[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;]&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;name_position_parts&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&quot;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;name_position&amp;nbsp;=&amp;nbsp;organization.find(&quot;dd&quot;).get_text(strip=True,&amp;nbsp;separator=&quot;&amp;nbsp;&quot;).split(&quot;&amp;nbsp;&quot;)[1]&amp;nbsp;if&amp;nbsp;organization.find(&quot;dd&quot;)&amp;nbsp;else&amp;nbsp;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;phone_tag&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;organization.select_one(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;.telnum&amp;nbsp;a&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;phone&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;phone_tag.get_text(strip&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;phone_tag&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;duty_position_parts&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;organization.find(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;dd&quot;&lt;/span&gt;).get_text(strip&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;,&amp;nbsp;separator&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&amp;nbsp;&quot;&lt;/span&gt;).split(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&amp;nbsp;&quot;&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;organization.find(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;dd&quot;&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;[]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;duty&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&amp;nbsp;&quot;&lt;/span&gt;.join(duty_position_parts[:&lt;span style=&quot;color: #2ce1bc;&quot;&gt;2&lt;/span&gt;])&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;len&lt;/span&gt;(duty_position_parts)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;duty_position_parts[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;]&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;duty_position_parts&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data.append([department,&amp;nbsp;name_position,&amp;nbsp;phone,&amp;nbsp;duty])&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;departments&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;soup.select(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;.text_area.depart-team&amp;nbsp;.mb5&amp;nbsp;.table_type1&amp;nbsp;tbody&amp;nbsp;tr&amp;nbsp;th&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tables&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;soup.select(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;.table_type1.mt20&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;테이블&amp;nbsp;데이터&amp;nbsp;추출&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;dept,&amp;nbsp;table&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;zip(departments,&amp;nbsp;tables):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;department_name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;dept.text.strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;table_rows&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;table.select(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;tbody&amp;nbsp;tr&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;row&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;table_rows:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;columns&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;row.find_all(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;td&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;len&lt;/span&gt;(columns)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;3&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;position&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;columns[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;].get_text(strip&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;직위&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;duty&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;columns[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;].get_text(strip&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;담당업무&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;phone&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;columns[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;2&lt;/span&gt;].get_text(strip&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;행정전화번호&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data.append([department_name,&amp;nbsp;position,&amp;nbsp;phone,&amp;nbsp;duty])&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;columns&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;부서명&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;직위&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;전화번호&quot;&lt;/span&gt;,&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;담당업무&quot;&lt;/span&gt;]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pd.DataFrame(data,&amp;nbsp;columns&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;columns)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;df&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;__name__&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;__main__&quot;&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url_main&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/Main.do?menuId=1917&amp;amp;menuNo=1917&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df_main&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;crawl_orgchart_main(url_main)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;not&lt;/span&gt;&amp;nbsp;df_main.empty:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;print&lt;/span&gt;(df_main)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df_main.to_csv(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;종로구청_main.csv&quot;&lt;/span&gt;,&amp;nbsp;index&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;False&lt;/span&gt;,&amp;nbsp;encoding&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;utf-8-sig&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;urls&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002110000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30001900000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002340000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002350000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002360000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002430000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002440000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002450000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002460000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002470000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002480000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002490000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002500000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002510000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002520000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002530000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002540000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002710000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002720000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002730000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002740000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002750000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002760000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002770000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002780000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002790000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002550000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002560000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002570000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002580000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002590000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002600000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002800000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002810000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002820000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002830000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002310000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30001530000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30000370000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/portal/deptGuidance.do?menuId=1892&amp;amp;deptId=30002320000&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;모든&amp;nbsp;URL에서&amp;nbsp;데이터&amp;nbsp;크롤링&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataframes&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[crawl_orgchart(url)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;url&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;urls]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;데이터프레임&amp;nbsp;병합&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df_combined&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pd.concat(dataframes,&amp;nbsp;ignore_index&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;두&amp;nbsp;데이터프레임을&amp;nbsp;합치기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;not&lt;/span&gt;&amp;nbsp;df_combined.empty:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;print&lt;/span&gt;(df_combined)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df_combined.to_csv(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;종로구청.csv&quot;&lt;/span&gt;,&amp;nbsp;index&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;False&lt;/span&gt;,&amp;nbsp;encoding&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;utf-8-sig&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;크롤링하는 방법에 대한 설명은 생략한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jongro_python_crawling-01.png&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;113&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEHrKC/btsMyUTDMOO/svlDAu7cLkn2HAjRFFBKa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEHrKC/btsMyUTDMOO/svlDAu7cLkn2HAjRFFBKa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEHrKC/btsMyUTDMOO/svlDAu7cLkn2HAjRFFBKa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEHrKC%2FbtsMyUTDMOO%2FsvlDAu7cLkn2HAjRFFBKa1%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;526&quot; height=&quot;113&quot; data-filename=&quot;jongro_python_crawling-01.png&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;113&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;조직도를 누르면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.jongno.go.kr/Main.do?menuId=1917&amp;amp;menuNo=1917&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.jongno.go.kr/Main.do?menuId=1917&amp;amp;menuNo=1917&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1740835961196&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;조직도&amp;lt;구청&amp;lt;종로구 안내&amp;lt;종로소개&amp;lt; 
		
		종로구&quot; data-og-description=&quot;조직도 ※ 해당 부서/동주민센터를 누르시면 부서별/동주민센터별 홈페이지를 보실 수 있습니다. 7국,&amp;nbsp;1소, 1사무국, 1담당관, 40과 구청 &amp;gt; 조직도 수정 221017 --&amp;gt; 본 저작물은 공공누리 「제 1유형:&quot; data-og-host=&quot;www.jongno.go.kr&quot; data-og-source-url=&quot;https://www.jongno.go.kr/Main.do?menuId=1917&amp;amp;menuNo=1917&quot; data-og-url=&quot;https://www.jongno.go.kr/Main.do?menuId=1917&amp;amp;menuNo=1917&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.jongno.go.kr/Main.do?menuId=1917&amp;amp;menuNo=1917&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.jongno.go.kr/Main.do?menuId=1917&amp;amp;menuNo=1917&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;조직도&amp;lt;구청&amp;lt;종로구 안내&amp;lt;종로소개&amp;lt; 종로구&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;조직도 ※ 해당 부서/동주민센터를 누르시면 부서별/동주민센터별 홈페이지를 보실 수 있습니다. 7국,&amp;nbsp;1소, 1사무국, 1담당관, 40과 구청 &amp;gt; 조직도 수정 221017 --&amp;gt; 본 저작물은 공공누리 「제 1유형:&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.jongno.go.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&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;&lt;span style=&quot;color: #000000;&quot;&gt;크롤링 하는데 빠진 자료도 있을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Web 크롤링/Python Crawling</category>
      <category>종로구청</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2458</guid>
      <comments>https://link2me.tistory.com/2458#entry2458comment</comments>
      <pubDate>Sat, 1 Mar 2025 22:34:15 +0900</pubDate>
    </item>
    <item>
      <title>IntelliJ IDEA Auto Import 설정</title>
      <link>https://link2me.tistory.com/2457</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인텔리제이 IDEA 사용 시 Auto Import 기능은 반드시 설정해야 코딩시 편하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Import 해야 할 대상이 2개 이상인 경우를 제외하고, 1개인 것은 자동으로 모두 추가/제거를 해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Intellij_IDEA_auto_import-01.png&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;735&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bETJfS/btsMzZNBaYQ/alzKKxFm6qymyP2rGAbfBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bETJfS/btsMzZNBaYQ/alzKKxFm6qymyP2rGAbfBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bETJfS/btsMzZNBaYQ/alzKKxFm6qymyP2rGAbfBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbETJfS%2FbtsMzZNBaYQ%2FalzKKxFm6qymyP2rGAbfBK%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;984&quot; height=&quot;735&quot; data-filename=&quot;Intellij_IDEA_auto_import-01.png&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;735&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;</description>
      <category>Spring Boot/IDEA</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2457</guid>
      <comments>https://link2me.tistory.com/2457#entry2457comment</comments>
      <pubDate>Sat, 1 Mar 2025 22:10:12 +0900</pubDate>
    </item>
    <item>
      <title>Build Gradle Update</title>
      <link>https://link2me.tistory.com/2456</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;build gradle 을 변경하고 나면 업데이트 처리를 해줘야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;idea_gradle-01.png&quot; data-origin-width=&quot;1737&quot; data-origin-height=&quot;882&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c40NN0/btsMzeX0rum/7hUjTscuyqXhOf1wx3G2p1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c40NN0/btsMzeX0rum/7hUjTscuyqXhOf1wx3G2p1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c40NN0/btsMzeX0rum/7hUjTscuyqXhOf1wx3G2p1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc40NN0%2FbtsMzeX0rum%2F7hUjTscuyqXhOf1wx3G2p1%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;1737&quot; height=&quot;882&quot; data-filename=&quot;idea_gradle-01.png&quot; data-origin-width=&quot;1737&quot; data-origin-height=&quot;882&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Spring Boot/IDEA</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2456</guid>
      <comments>https://link2me.tistory.com/2456#entry2456comment</comments>
      <pubDate>Thu, 27 Feb 2025 22:37:57 +0900</pubDate>
    </item>
    <item>
      <title>JMeter content-type 인식 문제</title>
      <link>https://link2me.tistory.com/2455</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PHP의&amp;nbsp;$_POST&amp;nbsp;변수는&amp;nbsp;application/x-www-form-urlencoded&amp;nbsp;또는&amp;nbsp;multipart/form-data&amp;nbsp;형식의&amp;nbsp;데이터를&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;&lt;span style=&quot;color: #000000;&quot;&gt;로그인 처리하는 파일에서 코드 구조가&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-31.png&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;283&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAGo0q/btsMtsC1nwi/rQqcKE9YLFSqaVdrFJ4Mb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAGo0q/btsMtsC1nwi/rQqcKE9YLFSqaVdrFJ4Mb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAGo0q/btsMtsC1nwi/rQqcKE9YLFSqaVdrFJ4Mb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAGo0q%2FbtsMtsC1nwi%2FrQqcKE9YLFSqaVdrFJ4Mb1%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;1223&quot; height=&quot;283&quot; data-filename=&quot;jmeter_login-31.png&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;283&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;로 되어 있다면 application/json 으로 Content-Type를 넘기면 안된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Content-Type:application/x-www-form-urlencoded 로 설정해야 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-32-2.png&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cT3ksN/btsMtcmU7Yt/yOUVdz9jb2kDEF9w1twaR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cT3ksN/btsMtcmU7Yt/yOUVdz9jb2kDEF9w1twaR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cT3ksN/btsMtcmU7Yt/yOUVdz9jb2kDEF9w1twaR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcT3ksN%2FbtsMtcmU7Yt%2FyOUVdz9jb2kDEF9w1twaR1%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;1476&quot; height=&quot;380&quot; data-filename=&quot;jmeter_login-32-2.png&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;380&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JMeter에서&amp;nbsp;JSON을&amp;nbsp;Body&amp;nbsp;Data로&amp;nbsp;보낼&amp;nbsp;경우,&amp;nbsp;$_POST가&amp;nbsp;아니라&amp;nbsp;php://input을&amp;nbsp;통해&amp;nbsp;데이터를&amp;nbsp;읽어야&amp;nbsp;한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-32-1.png&quot; data-origin-width=&quot;1401&quot; data-origin-height=&quot;574&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WMDrI/btsMs6fO6lc/njGekSoGmrdGZwRnl5bOzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WMDrI/btsMs6fO6lc/njGekSoGmrdGZwRnl5bOzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WMDrI/btsMs6fO6lc/njGekSoGmrdGZwRnl5bOzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWMDrI%2FbtsMs6fO6lc%2FnjGekSoGmrdGZwRnl5bOzK%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;1401&quot; height=&quot;574&quot; data-filename=&quot;jmeter_login-32-1.png&quot; data-origin-width=&quot;1401&quot; data-origin-height=&quot;574&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-32.png&quot; data-origin-width=&quot;1484&quot; data-origin-height=&quot;374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btT05t/btsMtsC1Czd/G1kfG7NUp7eX2k1kpim920/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btT05t/btsMtsC1Czd/G1kfG7NUp7eX2k1kpim920/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btT05t/btsMtsC1Czd/G1kfG7NUp7eX2k1kpim920/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtT05t%2FbtsMtsC1Czd%2FG1kfG7NUp7eX2k1kpim920%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;1484&quot; height=&quot;374&quot; data-filename=&quot;jmeter_login-32.png&quot; data-origin-width=&quot;1484&quot; data-origin-height=&quot;374&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;와 같이 데이터를 넘기면 로그인 결과 처리를 하는 파일 구조도 아래와 같이 변경되어야 JSON 으로 넘어온 데이터를 인식하고 처리한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #d9d5d5; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #d9d5d5; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #a86af6;&quot;&gt;&amp;lt;?php&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;(&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;isset&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$_SESSION&lt;/span&gt;))&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;session_start();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;jwt&amp;nbsp;라이브러리&amp;nbsp;사용&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;use&amp;nbsp;\Firebase\JWT\JWT;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;error_reporting(&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;JSON&amp;nbsp;데이터를&amp;nbsp;가져오기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$json_data&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;file_get_contents(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;php://input&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;JSON을&amp;nbsp;PHP&amp;nbsp;배열로&amp;nbsp;변환&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$data&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;json_decode(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$json_data&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;true&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;isset&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$data&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'userID'&lt;/span&gt;])&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;empty&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$data&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'userID'&lt;/span&gt;])&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;isset&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$data&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'password'&lt;/span&gt;])&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;empty&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$data&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'password'&lt;/span&gt;]))&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;require_once&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'path.php'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;require_once&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$g&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'path_config'&lt;/span&gt;].&lt;span style=&quot;color: #dbb84a;&quot;&gt;'config.php'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;require_once&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$g&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'path_class'&lt;/span&gt;].&lt;span style=&quot;color: #dbb84a;&quot;&gt;'dbconnect.php'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;require_once&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$g&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'path_class'&lt;/span&gt;].&lt;span style=&quot;color: #dbb84a;&quot;&gt;'loginClass.php'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;require_once&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$g&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'path_root'&lt;/span&gt;].&lt;span style=&quot;color: #dbb84a;&quot;&gt;'vendor/autoload.php'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@extract(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$data&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$c&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;LoginClass();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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 style=&quot;color: #000000;&quot;&gt;POST&amp;nbsp;요청이&amp;nbsp;application/json&amp;nbsp;방식으로&amp;nbsp;보내진&amp;nbsp;경우&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rarr;&amp;nbsp;$_POST['userID']로&amp;nbsp;접근&amp;nbsp;불가능&amp;nbsp;❌&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rarr;&amp;nbsp;file_get_contents(&quot;php://input&quot;)를&amp;nbsp;사용해야&amp;nbsp;데이터&amp;nbsp;수신&amp;nbsp;가능&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;POST&amp;nbsp;요청이&amp;nbsp;application/x-www-form-urlencoded&amp;nbsp;방식으로&amp;nbsp;보내진&amp;nbsp;경우&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rarr;&amp;nbsp;$_POST['userID']로&amp;nbsp;접근&amp;nbsp;가능&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rarr;&amp;nbsp;JSON이&amp;nbsp;아니라&amp;nbsp;key-value&amp;nbsp;쌍으로&amp;nbsp;데이터를&amp;nbsp;전송해야&amp;nbsp;함&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Web 프로그램/JMeter</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2455</guid>
      <comments>https://link2me.tistory.com/2455#entry2455comment</comments>
      <pubDate>Mon, 24 Feb 2025 13:59:41 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot MariaDB 연결</title>
      <link>https://link2me.tistory.com/2454</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;spring_initial-01.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;592&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biFUMD/btsMtsI4VRW/NbGvYKVCQa68QMHJtHXjvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biFUMD/btsMtsI4VRW/NbGvYKVCQa68QMHJtHXjvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biFUMD/btsMtsI4VRW/NbGvYKVCQa68QMHJtHXjvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiFUMD%2FbtsMtsI4VRW%2FNbGvYKVCQa68QMHJtHXjvK%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;1000&quot; height=&quot;592&quot; data-filename=&quot;spring_initial-01.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;592&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위와 같이 설정하고 Generate 하면 파일이 zip 으로 만들어진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 파일을 C 드라이브 폴더에 압축을 풀고 Intellij IDEA 툴로 접속한 다음 MariaDB 연결을 위한 설정을 해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;처음부터 MariaDB Driver를 선택해야 하는데 실수한 것이라는 걸 뒤늦게 알았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spring Boot 에서 MariaDB 연결&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;spring_boot_mariadb-01.png&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tb0xH/btsMushhbs5/mZZU8FvKoiTxVNkYVJ8la0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tb0xH/btsMushhbs5/mZZU8FvKoiTxVNkYVJ8la0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tb0xH/btsMushhbs5/mZZU8FvKoiTxVNkYVJ8la0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftb0xH%2FbtsMushhbs5%2FmZZU8FvKoiTxVNkYVJ8la0%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;766&quot; height=&quot;404&quot; data-filename=&quot;spring_boot_mariadb-01.png&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안정적인 버전은 3.3.3 이라고 권고하고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MariaDB Driver 를 선택하면 설치된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;spring_boot_mariadb-02.png&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;796&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/esqFZU/btsMslDWK0o/m52LD1ZUNMFqDIvKKDuAA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/esqFZU/btsMslDWK0o/m52LD1ZUNMFqDIvKKDuAA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/esqFZU/btsMslDWK0o/m52LD1ZUNMFqDIvKKDuAA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FesqFZU%2FbtsMslDWK0o%2Fm52LD1ZUNMFqDIvKKDuAA1%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;704&quot; height=&quot;796&quot; data-filename=&quot;spring_boot_mariadb-02.png&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;796&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;application.yml 파일을 새로 생성하여 아래와 같이 추가해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ddl-auto : create 는 처음에는 이렇게 설정하지만, 나중에는 none 으로 변경해야 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;spring_boot_mariadb-03.png&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnv7Rc/btsMueQ3AGp/Bfab7zLXslfvAosY8SMS40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnv7Rc/btsMueQ3AGp/Bfab7zLXslfvAosY8SMS40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnv7Rc/btsMueQ3AGp/Bfab7zLXslfvAosY8SMS40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbnv7Rc%2FbtsMueQ3AGp%2FBfab7zLXslfvAosY8SMS40%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;548&quot; height=&quot;364&quot; data-filename=&quot;spring_boot_mariadb-03.png&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;364&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MariaDB를 설치하고 MariaDB 연결이 제대로 된 것인지 확인한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;spring_boot_mariadb-05.png&quot; data-origin-width=&quot;391&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckEBiM/btsMt7j5oHs/SwKD30qRuLsfvDRPl1kh7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckEBiM/btsMt7j5oHs/SwKD30qRuLsfvDRPl1kh7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckEBiM/btsMt7j5oHs/SwKD30qRuLsfvDRPl1kh7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckEBiM%2FbtsMt7j5oHs%2FSwKD30qRuLsfvDRPl1kh7k%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;391&quot; height=&quot;241&quot; data-filename=&quot;spring_boot_mariadb-05.png&quot; data-origin-width=&quot;391&quot; data-origin-height=&quot;241&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MariaDB 를 선택하고 아래와 같이 설정해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;spring_boot_mariadb-04.png&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;693&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clqJRv/btsMtr4ppQd/o9BiUt5Ef9NcFFscHZ8Fy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clqJRv/btsMtr4ppQd/o9BiUt5Ef9NcFFscHZ8Fy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clqJRv/btsMtr4ppQd/o9BiUt5Ef9NcFFscHZ8Fy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclqJRv%2FbtsMtr4ppQd%2Fo9BiUt5Ef9NcFFscHZ8Fy1%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;802&quot; height=&quot;693&quot; data-filename=&quot;spring_boot_mariadb-04.png&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;693&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 Run 을 했을 때 에러가 발생하지 않고 제대로 동작되는 걸 확인해야 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;spring_initial-02.png&quot; data-origin-width=&quot;1245&quot; data-origin-height=&quot;945&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOdUxz/btsMr0Uzrmm/wLe7qEMEBGcI5KS7N2RT40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOdUxz/btsMr0Uzrmm/wLe7qEMEBGcI5KS7N2RT40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOdUxz/btsMr0Uzrmm/wLe7qEMEBGcI5KS7N2RT40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOdUxz%2FbtsMr0Uzrmm%2FwLe7qEMEBGcI5KS7N2RT40%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;1245&quot; height=&quot;945&quot; data-filename=&quot;spring_initial-02.png&quot; data-origin-width=&quot;1245&quot; data-origin-height=&quot;945&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;</description>
      <category>Spring Boot/Basic</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2454</guid>
      <comments>https://link2me.tistory.com/2454#entry2454comment</comments>
      <pubDate>Sat, 22 Feb 2025 23:23:17 +0900</pubDate>
    </item>
    <item>
      <title>JMeter real-time RSA 암호화 로그인 방법</title>
      <link>https://link2me.tistory.com/2453</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RSA 암호화/복화화 시 실시간으로 KEY 조합이어야 할 경우에는 어떻게 접근해야 할까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실시간이라는 의미는 매번 접속할 때마다 RSA 암호화/복화화 KEY가 달라진다는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HDD 에 저장된 Public KEY, Private KEY 가 아니라 메모리 상에서 접속시마다 생성하는 KEY 쌍이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최근의 보안검증에서는 이런 걸 요구하고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해킹 시도를 원천 차단하고자 하는 것이 목적이기 때문일 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #d9d5d5; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #d9d5d5; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #a86af6;&quot;&gt;&amp;lt;?php&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;(&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;isset&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$_SESSION&lt;/span&gt;))&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;session_start();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;require_once&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'path.php'&lt;/span&gt;;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;root&amp;nbsp;폴더를&amp;nbsp;기준으로&amp;nbsp;상대적인&amp;nbsp;경로&amp;nbsp;자동&amp;nbsp;구하기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;require_once&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$g&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'path_root'&lt;/span&gt;].&lt;span style=&quot;color: #dbb84a;&quot;&gt;'deviceChk.php'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;require_once&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$g&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'path_config'&lt;/span&gt;].&lt;span style=&quot;color: #dbb84a;&quot;&gt;'config.php'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;require_once&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$g&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'path_class'&lt;/span&gt;].&lt;span style=&quot;color: #dbb84a;&quot;&gt;'dbconnect.php'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;require_once&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$g&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'path_class'&lt;/span&gt;].&lt;span style=&quot;color: #dbb84a;&quot;&gt;'loginClass.php'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$c&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;LoginClass();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$salt&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;sha1(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;rand&lt;/span&gt;());&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$salt&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;substr&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$salt&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;20&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$key&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$c&lt;/span&gt;-&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;rsa_generate_keys(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$salt&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$pubkey&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$c&lt;/span&gt;-&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;rsa_publickey(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$key&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'pub_key'&lt;/span&gt;]);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$prikey&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$c&lt;/span&gt;-&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;rsa_privatekey(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$key&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'pri_key'&lt;/span&gt;]);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$_SESSION&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'prikey'&lt;/span&gt;]&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$prikey&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$_SESSION&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'salt'&lt;/span&gt;]&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$salt&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;JSON&amp;nbsp;응답으로&amp;nbsp;공개키&amp;nbsp;전달&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;header&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;'Content-Type:&amp;nbsp;application/json'&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;echo&lt;/span&gt;&amp;nbsp;json_encode([&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;pub_key&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$pubkey&lt;/span&gt;]);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;/*&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;echo&amp;nbsp;json_encode([&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;pub_key&quot;&amp;nbsp;=&amp;gt;&amp;nbsp;$pubkey,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;session_id&quot;&amp;nbsp;=&amp;gt;&amp;nbsp;session_id(),&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;prikey&quot;&amp;nbsp;=&amp;gt;&amp;nbsp;isset($_SESSION['prikey'])&amp;nbsp;?&amp;nbsp;$_SESSION['prikey']&amp;nbsp;:&amp;nbsp;&quot;NOT_SET&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;salt&quot;&amp;nbsp;=&amp;gt;&amp;nbsp;isset($_SESSION['salt'])&amp;nbsp;?&amp;nbsp;$_SESSION['salt']&amp;nbsp;:&amp;nbsp;&quot;NOT_SET&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;]);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #a86af6;&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;위 코드와 같이 PHP SESSION 으로 Private KEY를 전달한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;KEY 쌍을 생성할 때 salt 를 적용하면 변화가 더욱 심해진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이런 점을 감안해서 JMeter 에서 암호화 로그인을 성공하기 위한 과정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-21.png&quot; data-origin-width=&quot;2028&quot; data-origin-height=&quot;761&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzyhSF/btsMtRBywub/scglzOtR1AidS11wxACdr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzyhSF/btsMtRBywub/scglzOtR1AidS11wxACdr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzyhSF/btsMtRBywub/scglzOtR1AidS11wxACdr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzyhSF%2FbtsMtRBywub%2FscglzOtR1AidS11wxACdr1%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;2028&quot; height=&quot;761&quot; data-filename=&quot;jmeter_login-21.png&quot; data-origin-width=&quot;2028&quot; data-origin-height=&quot;761&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;처음부터 부하를 많이 주는 테스트를 하면 안되고 로그인까지 정상적으로 되는지 확인해야 하기 때문에 1로 설정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-22.png&quot; data-origin-width=&quot;2022&quot; data-origin-height=&quot;752&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgzigq/btsMr0muKeH/4diTxmkohKIRY93iWQ7aw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgzigq/btsMr0muKeH/4diTxmkohKIRY93iWQ7aw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgzigq/btsMr0muKeH/4diTxmkohKIRY93iWQ7aw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbgzigq%2FbtsMr0muKeH%2F4diTxmkohKIRY93iWQ7aw0%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;2022&quot; height=&quot;752&quot; data-filename=&quot;jmeter_login-22.png&quot; data-origin-width=&quot;2022&quot; data-origin-height=&quot;752&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JSON Path expression 을 왜 이렇게 설정했는지는 위 PHP 소스코드를 보면 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 data 배열 하단에 pub_key 로 생성하면 $.data.pub_key 로 변경해줘야 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-22-1.png&quot; data-origin-width=&quot;2020&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsvW7g/btsMs9bGt8A/b0Q0CDaUlcTcZvkSJBC7B0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsvW7g/btsMs9bGt8A/b0Q0CDaUlcTcZvkSJBC7B0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsvW7g/btsMs9bGt8A/b0Q0CDaUlcTcZvkSJBC7B0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdsvW7g%2FbtsMs9bGt8A%2Fb0Q0CDaUlcTcZvkSJBC7B0%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;2020&quot; height=&quot;768&quot; data-filename=&quot;jmeter_login-22-1.png&quot; data-origin-width=&quot;2020&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PHP SESSION 을 변수에 담아서 저장하기 위한 과정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;매번 HTTP Request 추가하여 실행될 때 마다 다른 PHPSESSID 가 생성될 수 있으니 필요한 곳에 값을 전달하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-22-2.png&quot; data-origin-width=&quot;2015&quot; data-origin-height=&quot;758&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btWt4n/btsMr1MxwkX/tSMA95mEX1nDwi0R0W8RQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btWt4n/btsMr1MxwkX/tSMA95mEX1nDwi0R0W8RQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btWt4n/btsMr1MxwkX/tSMA95mEX1nDwi0R0W8RQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtWt4n%2FbtsMr1MxwkX%2FtSMA95mEX1nDwi0R0W8RQk%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;2015&quot; height=&quot;758&quot; data-filename=&quot;jmeter_login-22-2.png&quot; data-origin-width=&quot;2015&quot; data-origin-height=&quot;758&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추출한 PHP SESSION 값을 변수에 저장하는 과정이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-22-3.png&quot; data-origin-width=&quot;2010&quot; data-origin-height=&quot;795&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mSntE/btsMsjMWRKG/KVbktkwB7zU4LqzekWdAeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mSntE/btsMsjMWRKG/KVbktkwB7zU4LqzekWdAeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mSntE/btsMsjMWRKG/KVbktkwB7zU4LqzekWdAeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmSntE%2FbtsMsjMWRKG%2FKVbktkwB7zU4LqzekWdAeK%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;2010&quot; height=&quot;795&quot; data-filename=&quot;jmeter_login-22-3.png&quot; data-origin-width=&quot;2010&quot; data-origin-height=&quot;795&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공개키 가져오는 과정이다. JSR223 PreProcess 를 사용하여 변수를 가져와 암호화된 비밀번호를 생성할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-23.png&quot; data-origin-width=&quot;2011&quot; data-origin-height=&quot;753&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blWTah/btsMtt8KwPH/g1opsNgk1S8ZigQffLj1Xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blWTah/btsMtt8KwPH/g1opsNgk1S8ZigQffLj1Xk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blWTah/btsMtt8KwPH/g1opsNgk1S8ZigQffLj1Xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblWTah%2FbtsMtt8KwPH%2Fg1opsNgk1S8ZigQffLj1Xk%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;2011&quot; height=&quot;753&quot; data-filename=&quot;jmeter_login-23.png&quot; data-origin-width=&quot;2011&quot; data-origin-height=&quot;753&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-23-1.png&quot; data-origin-width=&quot;2010&quot; data-origin-height=&quot;751&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b74Xkr/btsMsmP8Ie7/8FkJzaMqKvVZQ5MhtYv9L0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b74Xkr/btsMsmP8Ie7/8FkJzaMqKvVZQ5MhtYv9L0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b74Xkr/btsMsmP8Ie7/8FkJzaMqKvVZQ5MhtYv9L0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb74Xkr%2FbtsMsmP8Ie7%2F8FkJzaMqKvVZQ5MhtYv9L0%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;2010&quot; height=&quot;751&quot; data-filename=&quot;jmeter_login-23-1.png&quot; data-origin-width=&quot;2010&quot; data-origin-height=&quot;751&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-23-2.png&quot; data-origin-width=&quot;2019&quot; data-origin-height=&quot;1175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wrv7A/btsMtEPLamE/sFMJmMyfUiDOsrwoXhuHl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wrv7A/btsMtEPLamE/sFMJmMyfUiDOsrwoXhuHl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wrv7A/btsMtEPLamE/sFMJmMyfUiDOsrwoXhuHl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwrv7A%2FbtsMtEPLamE%2FsFMJmMyfUiDOsrwoXhuHl0%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;2019&quot; height=&quot;1175&quot; data-filename=&quot;jmeter_login-23-2.png&quot; data-origin-width=&quot;2019&quot; data-origin-height=&quot;1175&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;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.security.KeyFactory&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.security.spec.X509EncodedKeySpec&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.security.PublicKey&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;javax.crypto.Cipher&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.apache.commons.codec.binary.Base64&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;JSON&amp;nbsp;Extractor에서&amp;nbsp;추출한&amp;nbsp;공개&amp;nbsp;키&amp;nbsp;가져오기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;publicKeyString&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;vars.get(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;pubkey&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;Debugging:&amp;nbsp;JMeter&amp;nbsp;log에서&amp;nbsp;확인&amp;nbsp;가능&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;log.info(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Extracted&amp;nbsp;Public&amp;nbsp;Key:&amp;nbsp;&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;publicKeyString);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(publicKeyString&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;null&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&amp;nbsp;publicKeyString.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;equals&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;NOT_FOUND&quot;&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&amp;nbsp;publicKeyString.isEmpty())&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;RuntimeException(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Public&amp;nbsp;Key&amp;nbsp;not&amp;nbsp;found&amp;nbsp;in&amp;nbsp;response!&amp;nbsp;Check&amp;nbsp;JSON&amp;nbsp;Extractor.&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;암호화할&amp;nbsp;비밀번호&amp;nbsp;가져오기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;password&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;vars.get(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;password&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;공개&amp;nbsp;키&amp;nbsp;복원&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;byte&lt;/span&gt;[]&amp;nbsp;keyBytes&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;Base64.decodeBase64(publicKeyString);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;X509EncodedKeySpec&amp;nbsp;spec&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;X509EncodedKeySpec(keyBytes);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;KeyFactory&amp;nbsp;keyFactory&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;KeyFactory.getInstance(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;RSA&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;PublicKey&amp;nbsp;publicKey&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;keyFactory.generatePublic(spec);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;RSA&amp;nbsp;암호화&amp;nbsp;수행&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;Cipher&amp;nbsp;cipher&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;Cipher.getInstance(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;RSA/ECB/PKCS1Padding&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;cipher.init(Cipher.ENCRYPT_MODE,&amp;nbsp;publicKey);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;byte&lt;/span&gt;[]&amp;nbsp;encryptedBytes&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;cipher.doFinal(password.getBytes(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;Base64로&amp;nbsp;인코딩&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;encryptedPassword&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;Base64.encodeBase64String(encryptedBytes);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;JMeter&amp;nbsp;변수&amp;nbsp;저장&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;vars.put(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;encryptedPassword&quot;&lt;/span&gt;,&amp;nbsp;encryptedPassword);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;log.info(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Encrypted&amp;nbsp;Password:&amp;nbsp;&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;encryptedPassword);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;color: #000000;&quot;&gt;로그인할 때 userID와 password 를 앞에서 생성한 encryptedPassword 를 입력변수로 전달한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Front-End 단의 코드는 필요없고, Back-End 단의 PHP 가 POST 변수로 받는 부분을 고려하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-24.png&quot; data-origin-width=&quot;2022&quot; data-origin-height=&quot;760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yC0GC/btsMrkS27Tk/VK5aw3zdbaSmJ4OoxVGLKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yC0GC/btsMrkS27Tk/VK5aw3zdbaSmJ4OoxVGLKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yC0GC/btsMrkS27Tk/VK5aw3zdbaSmJ4OoxVGLKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyC0GC%2FbtsMrkS27Tk%2FVK5aw3zdbaSmJ4OoxVGLKk%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;2022&quot; height=&quot;760&quot; data-filename=&quot;jmeter_login-24.png&quot; data-origin-width=&quot;2022&quot; data-origin-height=&quot;760&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Header 메시지는 웹브라우저의 개발자모드에서 확인한 사항을 적어둔다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Cookie 에 앞에서 추출한 PHPSESSID를 변수로 적어준다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-24-1.png&quot; data-origin-width=&quot;2013&quot; data-origin-height=&quot;766&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHNBN9/btsMsN1egAL/AHiwlctcfyh8CUdFwXgs61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHNBN9/btsMsN1egAL/AHiwlctcfyh8CUdFwXgs61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHNBN9/btsMsN1egAL/AHiwlctcfyh8CUdFwXgs61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHNBN9%2FbtsMsN1egAL%2FAHiwlctcfyh8CUdFwXgs61%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;2013&quot; height=&quot;766&quot; data-filename=&quot;jmeter_login-24-1.png&quot; data-origin-width=&quot;2013&quot; data-origin-height=&quot;766&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-24-2.png&quot; data-origin-width=&quot;2015&quot; data-origin-height=&quot;756&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XkhCq/btsMug8TXoG/1KN31XkpvAJpEa0ntkfwwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XkhCq/btsMug8TXoG/1KN31XkpvAJpEa0ntkfwwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XkhCq/btsMug8TXoG/1KN31XkpvAJpEa0ntkfwwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXkhCq%2FbtsMug8TXoG%2F1KN31XkpvAJpEa0ntkfwwk%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;2015&quot; height=&quot;756&quot; data-filename=&quot;jmeter_login-24-2.png&quot; data-origin-width=&quot;2015&quot; data-origin-height=&quot;756&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;토큰 추출 관련 PHP 소스코드&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #d9d5d5; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;71&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;72&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;73&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;74&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;75&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;76&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;77&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;78&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;79&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;80&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;81&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;82&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;83&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;84&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;85&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;86&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;87&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;88&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;89&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;90&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;91&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;92&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;93&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;94&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;95&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;96&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #d9d5d5; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #a86af6;&quot;&gt;&amp;lt;?php&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;(&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;isset&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$_SESSION&lt;/span&gt;))&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;session_start();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;error_reporting(&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;header&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;'Content-Type:&amp;nbsp;application/json'&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;/*&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;echo&amp;nbsp;json_encode([&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;session_id&quot;&amp;nbsp;=&amp;gt;&amp;nbsp;session_id(),&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;prikey&quot;&amp;nbsp;=&amp;gt;&amp;nbsp;isset($_SESSION['prikey'])&amp;nbsp;?&amp;nbsp;$_SESSION['prikey']&amp;nbsp;:&amp;nbsp;&quot;NOT_SET&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;salt&quot;&amp;nbsp;=&amp;gt;&amp;nbsp;isset($_SESSION['salt'])&amp;nbsp;?&amp;nbsp;$_SESSION['salt']&amp;nbsp;:&amp;nbsp;&quot;NOT_SET&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;]);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;exit;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;jwt&amp;nbsp;라이브러리&amp;nbsp;사용&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;use&amp;nbsp;\Firebase\JWT\JWT;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;파일을&amp;nbsp;직접&amp;nbsp;실행하는&amp;nbsp;비정상적&amp;nbsp;동작을&amp;nbsp;방지&amp;nbsp;하기&amp;nbsp;위한&amp;nbsp;목적&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;isset&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$_POST&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$_SERVER&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'REQUEST_METHOD'&lt;/span&gt;]&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;POST&quot;&lt;/span&gt;){&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@extract(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$_POST&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;isset&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$userID&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;empty&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$userID&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;isset&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$password&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;empty&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$password&lt;/span&gt;))&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;require_once&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'path.php'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;require_once&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$g&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'path_config'&lt;/span&gt;].&lt;span style=&quot;color: #dbb84a;&quot;&gt;'config.php'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;require_once&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$g&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'path_class'&lt;/span&gt;].&lt;span style=&quot;color: #dbb84a;&quot;&gt;'dbconnect.php'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;require_once&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$g&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'path_class'&lt;/span&gt;].&lt;span style=&quot;color: #dbb84a;&quot;&gt;'loginClass.php'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;require_once&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$g&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'path_root'&lt;/span&gt;].&lt;span style=&quot;color: #dbb84a;&quot;&gt;'vendor/autoload.php'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$c&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;LoginClass();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$private_key&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$_SESSION&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'prikey'&lt;/span&gt;];&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$salt&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$_SESSION&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'salt'&lt;/span&gt;];&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$password&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$c&lt;/span&gt;-&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;rsa_decrypt_key(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$password&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$private_key&lt;/span&gt;,&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$salt&lt;/span&gt;);&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;RSA&amp;nbsp;패스워드&amp;nbsp;복호화&amp;nbsp;기능&amp;nbsp;구현&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$rs&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$c&lt;/span&gt;-&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;LoginSuccessChk(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$userID&lt;/span&gt;,&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$password&lt;/span&gt;);&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;개발&amp;nbsp;서버&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$rs&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;int&lt;/span&gt;)&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$rs&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;switch&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$rs&lt;/span&gt;){&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;11&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;로그인&amp;nbsp;허용&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$user&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$c&lt;/span&gt;-&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;getUser(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$userID&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$password&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$user&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;false&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$issuedAt&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;time&lt;/span&gt;();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$expirationTime&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$issuedAt&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;3600&lt;/span&gt;;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;1시간&amp;nbsp;유효&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$user&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'admin'&lt;/span&gt;]&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$user&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'admin'&lt;/span&gt;]&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;2&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$payload&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;array&lt;/span&gt;(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'iat'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$issuedAt&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;exp&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$expirationTime&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;userID&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$user&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'userID'&lt;/span&gt;],&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;userNM&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$user&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'userNM'&lt;/span&gt;],&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;access&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$user&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'access'&lt;/span&gt;],&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;usrIDX&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$user&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'idx'&lt;/span&gt;],&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;orgId&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$user&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'orgId'&lt;/span&gt;],&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;authID&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$user&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'admin'&lt;/span&gt;],&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$rs&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;21&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$payload&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;array&lt;/span&gt;(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'iat'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$issuedAt&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;exp&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$expirationTime&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;userID&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$user&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'userID'&lt;/span&gt;],&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;userNM&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$user&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'userNM'&lt;/span&gt;],&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;access&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$user&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'access'&lt;/span&gt;],&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;usrIDX&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$user&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'idx'&lt;/span&gt;],&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;orgId&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$user&lt;/span&gt;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;'orgId'&lt;/span&gt;],&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;JWT&amp;nbsp;생성&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$token&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;JWT::encode(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$payload&lt;/span&gt;,&amp;nbsp;SECRET_KEY,&amp;nbsp;ALGORITHM);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;세션&amp;nbsp;및&amp;nbsp;쿠키&amp;nbsp;저장&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//$_SESSION['token']&amp;nbsp;=&amp;nbsp;$token;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setcookie(&lt;span style=&quot;color: #dbb84a;&quot;&gt;'token'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$token&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;time&lt;/span&gt;()&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;3600&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'/'&lt;/span&gt;);&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;1시간&amp;nbsp;동안&amp;nbsp;쿠키&amp;nbsp;저장&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;header&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;'Content-Type:&amp;nbsp;application/json'&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;echo&lt;/span&gt;&amp;nbsp;json_encode(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;array&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;'token'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$token&lt;/span&gt;));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;echo&lt;/span&gt;&amp;nbsp;json_encode(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;array&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;'result'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'-3'&lt;/span&gt;));&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;체크&amp;nbsp;필요&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;default&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;echo&lt;/span&gt;&amp;nbsp;json_encode(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;array&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;'result'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;$rs&lt;/span&gt;));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;break&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;입력받은&amp;nbsp;데이터에&amp;nbsp;문제가&amp;nbsp;있을&amp;nbsp;경우&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;echo&lt;/span&gt;&amp;nbsp;json_encode(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;array&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;'result'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'-2'&lt;/span&gt;));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;비정상적인&amp;nbsp;접속인&amp;nbsp;경우&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;echo&lt;/span&gt;&amp;nbsp;json_encode(&lt;span style=&quot;color: #8ac7fd;&quot;&gt;array&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;'result'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;'-3'&lt;/span&gt;));&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;loginChk.php&amp;nbsp;파일을&amp;nbsp;직접&amp;nbsp;실행할&amp;nbsp;경우에는&amp;nbsp;화면에&amp;nbsp;0을&amp;nbsp;찍어준다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;exit&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #a86af6;&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;span style=&quot;color: #000000;&quot;&gt;로그인 이후의 파일에 접근하는 과정 설명 그림이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-25.png&quot; data-origin-width=&quot;2020&quot; data-origin-height=&quot;755&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bupK4s/btsMrEcD6Vw/bEys5Z3BfEUefLHFFVmjPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bupK4s/btsMrEcD6Vw/bEys5Z3BfEUefLHFFVmjPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bupK4s/btsMrEcD6Vw/bEys5Z3BfEUefLHFFVmjPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbupK4s%2FbtsMrEcD6Vw%2FbEys5Z3BfEUefLHFFVmjPk%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;2020&quot; height=&quot;755&quot; data-filename=&quot;jmeter_login-25.png&quot; data-origin-width=&quot;2020&quot; data-origin-height=&quot;755&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-25-1.png&quot; data-origin-width=&quot;2016&quot; data-origin-height=&quot;757&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wPGo5/btsMtqjUxA9/vrJuAAkOStbDzZgExbjQh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wPGo5/btsMtqjUxA9/vrJuAAkOStbDzZgExbjQh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wPGo5/btsMtqjUxA9/vrJuAAkOStbDzZgExbjQh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwPGo5%2FbtsMtqjUxA9%2FvrJuAAkOStbDzZgExbjQh1%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;2016&quot; height=&quot;757&quot; data-filename=&quot;jmeter_login-25-1.png&quot; data-origin-width=&quot;2016&quot; data-origin-height=&quot;757&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-25-2.png&quot; data-origin-width=&quot;2013&quot; data-origin-height=&quot;1015&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfjXrH/btsMtd6cU9L/k1A4tsMggnsHKcBCOWOZi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfjXrH/btsMtd6cU9L/k1A4tsMggnsHKcBCOWOZi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfjXrH/btsMtd6cU9L/k1A4tsMggnsHKcBCOWOZi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfjXrH%2FbtsMtd6cU9L%2Fk1A4tsMggnsHKcBCOWOZi1%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;2013&quot; height=&quot;1015&quot; data-filename=&quot;jmeter_login-25-2.png&quot; data-origin-width=&quot;2013&quot; data-origin-height=&quot;1015&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-25-3.png&quot; data-origin-width=&quot;2021&quot; data-origin-height=&quot;751&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJM8Ud/btsMrGhe1x7/Ued8a2v4665YkoFXEAKjd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJM8Ud/btsMrGhe1x7/Ued8a2v4665YkoFXEAKjd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJM8Ud/btsMrGhe1x7/Ued8a2v4665YkoFXEAKjd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJM8Ud%2FbtsMrGhe1x7%2FUed8a2v4665YkoFXEAKjd0%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;2021&quot; height=&quot;751&quot; data-filename=&quot;jmeter_login-25-3.png&quot; data-origin-width=&quot;2021&quot; data-origin-height=&quot;751&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 정도면 충분한 설명은 되었다고 본다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;소스코드를 분석하면서 JMeter 스크립트 과정을 작성해야 하는 거 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;본문내에 광고가 떠서 가독성을 떨어뜨리는 거 같아서 광고를 삭제시켰다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;블로그 접속빈도가 떨어져서 광고를 클릭할 가능성도 매우 낮다고 보기 때문이고, 정보 전달의 목적에 충실하자는 의도도 있다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Web 프로그램/JMeter</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2453</guid>
      <comments>https://link2me.tistory.com/2453#entry2453comment</comments>
      <pubDate>Sat, 22 Feb 2025 03:15:40 +0900</pubDate>
    </item>
    <item>
      <title>JMeter RSA 암호화 로그인 방법</title>
      <link>https://link2me.tistory.com/2452</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JMeter 에서 RSA 암호화 로그인 방법을 찾으려고 개고생을 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구글링으로 원하는 답을 구하지 못했고 chatGPT도 엉터리 답변 때문에 수많은 시간을 낭비했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Javascript 에서 jsencrypt.min.js 라이브러리를 활용하여 RSA 암호화를 하기 때문에 이 코드 찾는 방법에 수많은 시간을 허비 했던 것이 가장 큰 오류중의 하나였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; &lt;span style=&quot;color: #000000;&quot;&gt;이기종 언어간에 RSA 암호화/복호화 가능하기 때문에 &lt;/span&gt; Java에서 제공하는 RSA 암호화 로직을 활용하면 된다.&lt;/b&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;&lt;span style=&quot;color: #000000;&quot;&gt;자세한 설명은 생략하고 이미지 순서에 따라 처리하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;처음에는 로그인이 성공하는지 확인하기 위한 목적이니 2번과 같이 1회로 한정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-11.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;836&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/edG5Db/btsMo2LLcer/kzGnV1g4qQruh8Ot6aXSpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/edG5Db/btsMo2LLcer/kzGnV1g4qQruh8Ot6aXSpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/edG5Db/btsMo2LLcer/kzGnV1g4qQruh8Ot6aXSpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FedG5Db%2FbtsMo2LLcer%2FkzGnV1g4qQruh8Ot6aXSpK%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;2029&quot; height=&quot;836&quot; data-filename=&quot;jmeter_login-11.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;836&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;- 공개키를 JSON 으로 반환하도록 처리해야 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-12.png&quot; data-origin-width=&quot;2022&quot; data-origin-height=&quot;716&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/68HAU/btsMplYxzv0/3HOuypYk0TWVgw1QzWceIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/68HAU/btsMplYxzv0/3HOuypYk0TWVgw1QzWceIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/68HAU/btsMplYxzv0/3HOuypYk0TWVgw1QzWceIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F68HAU%2FbtsMplYxzv0%2F3HOuypYk0TWVgw1QzWceIK%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;2022&quot; height=&quot;716&quot; data-filename=&quot;jmeter_login-12.png&quot; data-origin-width=&quot;2022&quot; data-origin-height=&quot;716&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JSON 으로 제공된 pub_key 를 추출하여 pubkey 변수에 저장하기 위한 목적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 크게 삽질한 것은 JSR223 PreProcessor 부분이다. 바로 변수로 저장할 수 있는 줄 알고 했는데 ㅠㅠㅠ&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-12-1.png&quot; data-origin-width=&quot;2024&quot; data-origin-height=&quot;698&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VHtKN/btsMqcfBQUO/pk9NqxdmQezLdLp7xvsfrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VHtKN/btsMqcfBQUO/pk9NqxdmQezLdLp7xvsfrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VHtKN/btsMqcfBQUO/pk9NqxdmQezLdLp7xvsfrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVHtKN%2FbtsMqcfBQUO%2Fpk9NqxdmQezLdLp7xvsfrK%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;2024&quot; height=&quot;698&quot; data-filename=&quot;jmeter_login-12-1.png&quot; data-origin-width=&quot;2024&quot; data-origin-height=&quot;698&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수를 저장하기 위해서 HTTP Request 를 추가하고 pubkey 변수를 입력받도록 파라미터를 아래와 같이 지정한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-13.png&quot; data-origin-width=&quot;2019&quot; data-origin-height=&quot;717&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DnD9I/btsMpRQkduw/YWPNu4zlejf2WwpFN80j61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DnD9I/btsMpRQkduw/YWPNu4zlejf2WwpFN80j61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DnD9I/btsMpRQkduw/YWPNu4zlejf2WwpFN80j61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDnD9I%2FbtsMpRQkduw%2FYWPNu4zlejf2WwpFN80j61%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;2019&quot; height=&quot;717&quot; data-filename=&quot;jmeter_login-13.png&quot; data-origin-width=&quot;2019&quot; data-origin-height=&quot;717&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-13-1.png&quot; data-origin-width=&quot;2008&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pJMfF/btsMpjNibNh/hqwAOSktly5adiTFH6ywuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pJMfF/btsMpjNibNh/hqwAOSktly5adiTFH6ywuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pJMfF/btsMpjNibNh/hqwAOSktly5adiTFH6ywuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpJMfF%2FbtsMpjNibNh%2FhqwAOSktly5adiTFH6ywuK%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;2008&quot; height=&quot;330&quot; data-filename=&quot;jmeter_login-13-1.png&quot; data-origin-width=&quot;2008&quot; data-origin-height=&quot;330&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-13-2.png&quot; data-origin-width=&quot;2017&quot; data-origin-height=&quot;1201&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c38h6M/btsMrlbBLZG/A2xAKbWnsyp535YjNuYZz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c38h6M/btsMrlbBLZG/A2xAKbWnsyp535YjNuYZz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c38h6M/btsMrlbBLZG/A2xAKbWnsyp535YjNuYZz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc38h6M%2FbtsMrlbBLZG%2FA2xAKbWnsyp535YjNuYZz1%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;2017&quot; height=&quot;1201&quot; data-filename=&quot;jmeter_login-13-2.png&quot; data-origin-width=&quot;2017&quot; data-origin-height=&quot;1201&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;21번 항목의 코드 내용이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래 코드에서 vars.get(&quot;pubkey&quot;) 의 &lt;b&gt;pubkey&lt;/b&gt; 가 입력변수이다.&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.security.KeyFactory&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.security.spec.X509EncodedKeySpec&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.security.PublicKey&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;javax.crypto.Cipher&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.apache.commons.codec.binary.Base64&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;JSON&amp;nbsp;Extractor에서&amp;nbsp;추출한&amp;nbsp;공개&amp;nbsp;키&amp;nbsp;가져오기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;publicKeyString&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;vars.get(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;pubkey&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;Debugging:&amp;nbsp;JMeter&amp;nbsp;log에서&amp;nbsp;확인&amp;nbsp;가능&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;log.info(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Extracted&amp;nbsp;Public&amp;nbsp;Key:&amp;nbsp;&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;publicKeyString);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(publicKeyString&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;null&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&amp;nbsp;publicKeyString.&lt;span style=&quot;color: #8ac7fd;&quot;&gt;equals&lt;/span&gt;(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;NOT_FOUND&quot;&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;|&lt;/span&gt;&amp;nbsp;publicKeyString.isEmpty())&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;RuntimeException(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Public&amp;nbsp;Key&amp;nbsp;not&amp;nbsp;found&amp;nbsp;in&amp;nbsp;response!&amp;nbsp;Check&amp;nbsp;JSON&amp;nbsp;Extractor.&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;암호화할&amp;nbsp;비밀번호&amp;nbsp;가져오기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;password&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;vars.get(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;password&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;공개&amp;nbsp;키&amp;nbsp;복원&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;byte&lt;/span&gt;[]&amp;nbsp;keyBytes&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;Base64.decodeBase64(publicKeyString);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;X509EncodedKeySpec&amp;nbsp;spec&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;new&lt;/span&gt;&amp;nbsp;X509EncodedKeySpec(keyBytes);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;KeyFactory&amp;nbsp;keyFactory&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;KeyFactory.getInstance(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;RSA&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;PublicKey&amp;nbsp;publicKey&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;keyFactory.generatePublic(spec);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;RSA&amp;nbsp;암호화&amp;nbsp;수행&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;Cipher&amp;nbsp;cipher&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;Cipher.getInstance(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;RSA/ECB/PKCS1Padding&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;cipher.init(Cipher.ENCRYPT_MODE,&amp;nbsp;publicKey);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;byte&lt;/span&gt;[]&amp;nbsp;encryptedBytes&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;cipher.doFinal(password.getBytes(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;Base64로&amp;nbsp;인코딩&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;String&lt;/span&gt;&amp;nbsp;encryptedPassword&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;Base64.encodeBase64String(encryptedBytes);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #6bc46b;&quot;&gt;//&amp;nbsp;JMeter&amp;nbsp;변수&amp;nbsp;저장&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;vars.put(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;encryptedPassword&quot;&lt;/span&gt;,&amp;nbsp;encryptedPassword);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;log.info(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Encrypted&amp;nbsp;Password:&amp;nbsp;&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;+&lt;/span&gt;&amp;nbsp;encryptedPassword);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Java 에서의 RSA 암호화가 다른 언어에서 복호화가 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Javascript 에서는 jsencrypt.min.js 라이브러리를 활용하여 RSA 암호화가 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만 JMeter 에서는 javascript 암호화를 지원하지 않기 때문에 Java RSA 암호화를 활용하는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;vars.put(&quot; &lt;span style=&quot;color: #dbb84a;&quot;&gt;encryptedPassword&lt;/span&gt; &quot;) 가 아래 그림에서 패스워드 입력값이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-14.png&quot; data-origin-width=&quot;2019&quot; data-origin-height=&quot;676&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c57DWY/btsMqumYOxu/rI4DawjXKKBC9UlCMmrox0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c57DWY/btsMqumYOxu/rI4DawjXKKBC9UlCMmrox0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c57DWY/btsMqumYOxu/rI4DawjXKKBC9UlCMmrox0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc57DWY%2FbtsMqumYOxu%2FrI4DawjXKKBC9UlCMmrox0%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;2019&quot; height=&quot;676&quot; data-filename=&quot;jmeter_login-14.png&quot; data-origin-width=&quot;2019&quot; data-origin-height=&quot;676&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;나머지 사항은 이전 게시글 내용과 이미지를 참조하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RSA 암호화 시 KEY 쌍이 실시간으로 변경되는 경우에 대한 처리는 아직 테스트하지 못했다. &amp;rarr; 테스트 성공했다. 이 경우는 다른 게시글에서 올리겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RSA 암호화/복호화 시 사용할 KEY 쌍이 일정시간동안 변경되지 않는 방식인 경우를 테스트 후 성공했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-15.png&quot; data-origin-width=&quot;2015&quot; data-origin-height=&quot;973&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYTFMK/btsMqMgxVsg/25luP4NOjtgB8QAVKc1zm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYTFMK/btsMqMgxVsg/25luP4NOjtgB8QAVKc1zm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYTFMK/btsMqMgxVsg/25luP4NOjtgB8QAVKc1zm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYTFMK%2FbtsMqMgxVsg%2F25luP4NOjtgB8QAVKc1zm1%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;2015&quot; height=&quot;973&quot; data-filename=&quot;jmeter_login-15.png&quot; data-origin-width=&quot;2015&quot; data-origin-height=&quot;973&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-15-1.png&quot; data-origin-width=&quot;2023&quot; data-origin-height=&quot;1095&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dVmL3E/btsMqljlAtM/2XcV0z1LSPD9BRSV2KQnnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dVmL3E/btsMqljlAtM/2XcV0z1LSPD9BRSV2KQnnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dVmL3E/btsMqljlAtM/2XcV0z1LSPD9BRSV2KQnnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdVmL3E%2FbtsMqljlAtM%2F2XcV0z1LSPD9BRSV2KQnnk%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;2023&quot; height=&quot;1095&quot; data-filename=&quot;jmeter_login-15-1.png&quot; data-origin-width=&quot;2023&quot; data-origin-height=&quot;1095&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;chatGPT 에게 제대로 된 답변을 알려줬다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-16.png&quot; data-origin-width=&quot;1118&quot; data-origin-height=&quot;484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WdIpO/btsMqYVfYfO/VXKiOxL8xqacKrwjW0ukT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WdIpO/btsMqYVfYfO/VXKiOxL8xqacKrwjW0ukT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WdIpO/btsMqYVfYfO/VXKiOxL8xqacKrwjW0ukT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWdIpO%2FbtsMqYVfYfO%2FVXKiOxL8xqacKrwjW0ukT1%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;1118&quot; height=&quot;484&quot; data-filename=&quot;jmeter_login-16.png&quot; data-origin-width=&quot;1118&quot; data-origin-height=&quot;484&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Web 프로그램/JMeter</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2452</guid>
      <comments>https://link2me.tistory.com/2452#entry2452comment</comments>
      <pubDate>Fri, 21 Feb 2025 01:06:14 +0900</pubDate>
    </item>
    <item>
      <title>JMeter token 인증 로그인 및 그 이후 설정</title>
      <link>https://link2me.tistory.com/2451</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저 token 인증을 할 환경을 구축해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JWT 토큰 인증 환경 구성 이해하는데 시간이 좀 걸렸다. 이 부분은 필요하면 나중에 설명하겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설명은 그림 위주로 설명을 할 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로그인 처리 없이 JMeter 부하테스트하는 것은 어렵지 않게 찾을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;처음에는 Thread 숫자를 1로 놓고 확인해야 한다. Loop Count 도 1로 설정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2번 Thread Group 이라는 명칭을 주의깊게 보자. 앞으로 반복되는 이미지에서 2번 위치에 표기되는 항목 명칭을 보면 이해가 빠르게 될 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Threads&amp;nbsp;Group&lt;br /&gt;-&amp;nbsp;continue&amp;nbsp;:&amp;nbsp;에러가&amp;nbsp;발생해도&amp;nbsp;테스트를&amp;nbsp;계속&amp;nbsp;진행&lt;br /&gt;-&amp;nbsp;Start&amp;nbsp;Next&amp;nbsp;Thread&amp;nbsp;Loop&amp;nbsp;:&amp;nbsp;현재&amp;nbsp;쓰레드의&amp;nbsp;루프를&amp;nbsp;종료하고&amp;nbsp;다음&amp;nbsp;루프를&amp;nbsp;시작&lt;br /&gt;-&amp;nbsp;Stop&amp;nbsp;Thread&amp;nbsp;:&amp;nbsp;에러가&amp;nbsp;발생한&amp;nbsp;쓰레드만&amp;nbsp;종료&lt;br /&gt;-&amp;nbsp;Stop&amp;nbsp;Test&amp;nbsp;Now&amp;nbsp;:&amp;nbsp;현재&amp;nbsp;실행중인&amp;nbsp;모든&amp;nbsp;샘플러를&amp;nbsp;강제로&amp;nbsp;중지하고&amp;nbsp;테스트를&amp;nbsp;즉시&amp;nbsp;종료&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-01.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zgQIC/btsMoG1Y3KC/KKru9itx9Cfk9eOsGPZUg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zgQIC/btsMoG1Y3KC/KKru9itx9Cfk9eOsGPZUg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zgQIC/btsMoG1Y3KC/KKru9itx9Cfk9eOsGPZUg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzgQIC%2FbtsMoG1Y3KC%2FKKru9itx9Cfk9eOsGPZUg0%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;2029&quot; height=&quot;1270&quot; data-filename=&quot;jmeter_login-01.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;목표&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- HTTP 요청을 통해 로그인 API 호출&lt;br /&gt;- JSON 응답에서 토큰 추출&lt;br /&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;&lt;span style=&quot;color: #000000;&quot;&gt;HTTP Request 추가하고, Name을 로그인으로 변경했다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-02-1.png&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byAKNY/btsMpBMdbG4/cyTJbLRrHwJ1cwxOoR1rek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byAKNY/btsMpBMdbG4/cyTJbLRrHwJ1cwxOoR1rek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byAKNY/btsMpBMdbG4/cyTJbLRrHwJ1cwxOoR1rek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyAKNY%2FbtsMpBMdbG4%2FcyTJbLRrHwJ1cwxOoR1rek%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;1208&quot; height=&quot;104&quot; data-filename=&quot;jmeter_login-02-1.png&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;104&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-02.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bINYNo/btsMnOsPclw/NhXn65M3JPmjFycga2pp0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bINYNo/btsMnOsPclw/NhXn65M3JPmjFycga2pp0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bINYNo/btsMnOsPclw/NhXn65M3JPmjFycga2pp0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbINYNo%2FbtsMnOsPclw%2FNhXn65M3JPmjFycga2pp0K%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;2029&quot; height=&quot;1270&quot; data-filename=&quot;jmeter_login-02.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Path 에 도메인 주소를 적어줬다. Virtual Host 로 여러개 설정한 환경에서 테스트해보니 첫번째 URL을 인식하더라.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래서 테스트하고 싶은 도메인을 상단으로 올리고 클라우드 서버를 재기동해줬다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;7번 항목은 loginView.php 에서는 RSA 암호화를 하고 jwtLoginChk.php 파일에서는 RSA 복호화를 한 다음에 로그인에 성공하면 jwt 토큰인증을 생성하도록 처리한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만 JMeter 에서 RSA 암호화 생성하고 로그인처리하는 것은 쉽지 않는 거 같아서 jwtLoginChk2.php 파일을 생성하고 RSA 복호화처리하는 부분을 주석처리하고 8번 userID, password 를 입력받아 토큰 생성을 하도록 임시 변통했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;JMeter에서는&amp;nbsp;JavaScript를&amp;nbsp;직접&amp;nbsp;실행할&amp;nbsp;수&amp;nbsp;없으므로,&amp;nbsp;사전에&amp;nbsp;암호화된&amp;nbsp;값으로&amp;nbsp;요청해야&amp;nbsp;한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만 Java 코드로 RSA 암호화하는 방법이 있더라. 다른 언어를 같이 다뤄보지 않았으면 해결방법 찾기가 쉽지 않을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로그인 하위에 HTTP Header Manager 를 추가한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;12번 항목에 나오는 사항은 실행을 했을 때 반환하는 결과를 보고 찾아서 입력하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-03.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kOFtC/btsMo33zxgv/kTJvcr1T3bp0SK1bO4sxV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kOFtC/btsMo33zxgv/kTJvcr1T3bp0SK1bO4sxV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kOFtC/btsMo33zxgv/kTJvcr1T3bp0SK1bO4sxV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkOFtC%2FbtsMo33zxgv%2FkTJvcr1T3bp0SK1bO4sxV0%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;2029&quot; height=&quot;1270&quot; data-filename=&quot;jmeter_login-03.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로그인 결과로 반환하는 JSON 메시지에서 토큰을 자동 추출하기 위한 과정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-04.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3Ut8Q/btsMojMGDpG/Unfju0DSGH1KH6XXYNMCNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3Ut8Q/btsMojMGDpG/Unfju0DSGH1KH6XXYNMCNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3Ut8Q/btsMojMGDpG/Unfju0DSGH1KH6XXYNMCNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3Ut8Q%2FbtsMojMGDpG%2FUnfju0DSGH1KH6XXYNMCNk%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;2029&quot; height=&quot;1270&quot; data-filename=&quot;jmeter_login-04.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JSON&amp;nbsp;응답에서&amp;nbsp;토큰&amp;nbsp;추출&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;JSON&amp;nbsp;Extractor&amp;nbsp;추가&amp;nbsp;(HTTP&amp;nbsp;Request&amp;nbsp;하위에&amp;nbsp;추가)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Names&amp;nbsp;of&amp;nbsp;created&amp;nbsp;variables:&amp;nbsp;authToken&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JSON Path expressions: $.token &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Match&amp;nbsp;No:&amp;nbsp;1&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Default&amp;nbsp;Value:&amp;nbsp;NOT_FOUND&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;color: #ee2323;&quot;&gt;&lt;b&gt;로그인&amp;nbsp;후&amp;nbsp;쿠키/세션&amp;nbsp;처리&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;로그인 성공 시, 응답 헤더에 Set-Cookie가 포함될 수 있다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;HTTP Cookie Manager를 추가하여 이후 요청에서도 쿠키를 유지해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-05.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfT7sz/btsMnERDmPJ/7eE1kC18zvYQZsMQ5Tunv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfT7sz/btsMnERDmPJ/7eE1kC18zvYQZsMQ5Tunv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfT7sz/btsMnERDmPJ/7eE1kC18zvYQZsMQ5Tunv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfT7sz%2FbtsMnERDmPJ%2F7eE1kC18zvYQZsMQ5Tunv0%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;2029&quot; height=&quot;1270&quot; data-filename=&quot;jmeter_login-05.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토큰이 잘 생성되고 있는지 확인하기 위해 View Results Tree 를 추가해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-06-1.png&quot; data-origin-width=&quot;983&quot; data-origin-height=&quot;282&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPdLGc/btsMpTsnqSs/HvEqWN6oJOrlAUJzVzjXPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPdLGc/btsMpTsnqSs/HvEqWN6oJOrlAUJzVzjXPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPdLGc/btsMpTsnqSs/HvEqWN6oJOrlAUJzVzjXPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPdLGc%2FbtsMpTsnqSs%2FHvEqWN6oJOrlAUJzVzjXPK%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;983&quot; height=&quot;282&quot; data-filename=&quot;jmeter_login-06-1.png&quot; data-origin-width=&quot;983&quot; data-origin-height=&quot;282&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-06.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TfEGX/btsMn6GTewD/Sh51QP97Pmwxhvm8C60HUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TfEGX/btsMn6GTewD/Sh51QP97Pmwxhvm8C60HUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TfEGX/btsMn6GTewD/Sh51QP97Pmwxhvm8C60HUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTfEGX%2FbtsMn6GTewD%2FSh51QP97Pmwxhvm8C60HUk%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;2029&quot; height=&quot;1270&quot; data-filename=&quot;jmeter_login-06.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JSON&amp;nbsp;응답&amp;nbsp;확인&amp;nbsp;및&amp;nbsp;토큰&amp;nbsp;추출&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;View&amp;nbsp;Results&amp;nbsp;Tree에서&amp;nbsp;응답&amp;nbsp;확인&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;JSON&amp;nbsp;응답이&amp;nbsp;오면&amp;nbsp;JSON&amp;nbsp;Extractor&amp;nbsp;추가하여&amp;nbsp;$.token&amp;nbsp;값&amp;nbsp;추출&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-07.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzHfjk/btsMpJpQTXK/ERt0z5dPvplQVRjpFMs4W0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzHfjk/btsMpJpQTXK/ERt0z5dPvplQVRjpFMs4W0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzHfjk/btsMpJpQTXK/ERt0z5dPvplQVRjpFMs4W0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzHfjk%2FbtsMpJpQTXK%2FERt0z5dPvplQVRjpFMs4W0%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;2029&quot; height=&quot;1270&quot; data-filename=&quot;jmeter_login-07.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Debug Sampler 에서 값이 잘 추출되고 있는지 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-07-1.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rW6DI/btsMpprEg4W/ZCmWHtxTwPDgIkdWDRc3xK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rW6DI/btsMpprEg4W/ZCmWHtxTwPDgIkdWDRc3xK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rW6DI/btsMpprEg4W/ZCmWHtxTwPDgIkdWDRc3xK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrW6DI%2FbtsMpprEg4W%2FZCmWHtxTwPDgIkdWDRc3xK%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;2029&quot; height=&quot;1270&quot; data-filename=&quot;jmeter_login-07-1.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 이후의 URL 에 접속 테스트 설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-08.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bY1kNI/btsMp92WDJQ/LdJN2O8YIWmkzco11Z0VI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bY1kNI/btsMp92WDJQ/LdJN2O8YIWmkzco11Z0VI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bY1kNI/btsMp92WDJQ/LdJN2O8YIWmkzco11Z0VI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbY1kNI%2FbtsMp92WDJQ%2FLdJN2O8YIWmkzco11Z0VI0%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;2029&quot; height=&quot;1270&quot; data-filename=&quot;jmeter_login-08.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-08-1.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dIx57R/btsMpLH0aGF/aFQVJ6LcnvYTBG5pKHckzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dIx57R/btsMpLH0aGF/aFQVJ6LcnvYTBG5pKHckzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dIx57R/btsMpLH0aGF/aFQVJ6LcnvYTBG5pKHckzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdIx57R%2FbtsMpLH0aGF%2FaFQVJ6LcnvYTBG5pKHckzk%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;2029&quot; height=&quot;1270&quot; data-filename=&quot;jmeter_login-08-1.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-08-0.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;655&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n377l/btsMoyiJBPp/QNUK9XOwx3eKCzfabTzuf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n377l/btsMoyiJBPp/QNUK9XOwx3eKCzfabTzuf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n377l/btsMoyiJBPp/QNUK9XOwx3eKCzfabTzuf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn377l%2FbtsMoyiJBPp%2FQNUK9XOwx3eKCzfabTzuf1%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;1169&quot; height=&quot;655&quot; data-filename=&quot;jmeter_login-08-0.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;655&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-08-2.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yL3Ys/btsMn9wJiYv/KcWKIqkT9zpAJEl1TzvoYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yL3Ys/btsMn9wJiYv/KcWKIqkT9zpAJEl1TzvoYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yL3Ys/btsMn9wJiYv/KcWKIqkT9zpAJEl1TzvoYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyL3Ys%2FbtsMn9wJiYv%2FKcWKIqkT9zpAJEl1TzvoYK%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;2029&quot; height=&quot;1270&quot; data-filename=&quot;jmeter_login-08-2.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jmeter_login-08-3.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dSBONC/btsMpULC5jD/wJf41Lngxpk7A9ZJJWy57k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dSBONC/btsMpULC5jD/wJf41Lngxpk7A9ZJJWy57k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dSBONC/btsMpULC5jD/wJf41Lngxpk7A9ZJJWy57k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdSBONC%2FbtsMpULC5jD%2FwJf41Lngxpk7A9ZJJWy57k%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;2029&quot; height=&quot;1270&quot; data-filename=&quot;jmeter_login-08-3.png&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;1270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Label:&amp;nbsp;요청했던&amp;nbsp;Request&amp;nbsp;Sampler의&amp;nbsp;이름&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Samples:&amp;nbsp;서버에&amp;nbsp;요청한&amp;nbsp;횟수&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Average:&amp;nbsp;평균응답시간(ms)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Min:&amp;nbsp;최소응답시간(ms)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Max:&amp;nbsp;최대응답시간(ms&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Std.Dev.:&amp;nbsp;표준편차&amp;nbsp;요청에&amp;nbsp;대한&amp;nbsp;응답시간이&amp;nbsp;일정하고&amp;nbsp;안정적인가를&amp;nbsp;확인한다.&amp;nbsp;값이&amp;nbsp;적을수록&amp;nbsp;안정적이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Error:&amp;nbsp;Error율(%)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Throughput:&amp;nbsp;처리량(&amp;nbsp;초당&amp;nbsp;처리건수)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;KB/sec:&amp;nbsp;처리량(초당&amp;nbsp;처리&amp;nbsp;KB)&lt;/span&gt;&lt;/p&gt;</description>
      <category>Web 프로그램/JMeter</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2451</guid>
      <comments>https://link2me.tistory.com/2451#entry2451comment</comments>
      <pubDate>Wed, 19 Feb 2025 20:47:09 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 종로구청 동주민센터 크롤링</title>
      <link>https://link2me.tistory.com/2450</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #ffffff; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;requests&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;from&lt;/span&gt;&amp;nbsp;bs4&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;BeautifulSoup&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;import&lt;/span&gt;&amp;nbsp;pandas&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;as&lt;/span&gt;&amp;nbsp;pd&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;def&lt;/span&gt;&amp;nbsp;crawl_orgchart(url):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;요청&amp;nbsp;및&amp;nbsp;응답&amp;nbsp;확인&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;headers&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;User-Agent&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;Mozilla/5.0&amp;nbsp;(Windows&amp;nbsp;NT&amp;nbsp;10.0;&amp;nbsp;Win64;&amp;nbsp;x64)&amp;nbsp;AppleWebKit/537.36&amp;nbsp;(KHTML,&amp;nbsp;like&amp;nbsp;Gecko)&amp;nbsp;Chrome/91.0.4472.124&amp;nbsp;Safari/537.36&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;requests.get(url,&amp;nbsp;headers&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;headers)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;soup&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;BeautifulSoup(response.text,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;html.parser&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;데이터&amp;nbsp;저장&amp;nbsp;리스트&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;departments&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;soup.select(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;.contents_db&amp;nbsp;h5.tit_05&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tables&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;soup.select(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;.contents_db&amp;nbsp;table&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;테이블&amp;nbsp;데이터&amp;nbsp;추출&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;dept,&amp;nbsp;table&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;zip(departments,&amp;nbsp;tables):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;department_name&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;dept.text.strip()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;table_rows&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;table.select(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;tbody&amp;nbsp;tr&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;row&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;table_rows:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;columns&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;row.find_all(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;td&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;len&lt;/span&gt;(columns)&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #2ce1bc;&quot;&gt;3&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;position&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;columns[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;0&lt;/span&gt;].get_text(strip&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;직위&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;duty&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;columns[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;1&lt;/span&gt;].get_text(strip&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;담당업무&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;phone&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;columns[&lt;span style=&quot;color: #2ce1bc;&quot;&gt;2&lt;/span&gt;].get_text(strip&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;행정전화번호&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data.append([department_name,&amp;nbsp;position,&amp;nbsp;phone,&amp;nbsp;duty])&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;columns&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;부서명&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;직위&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;전화번호&quot;&lt;/span&gt;,&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;담당업무&quot;&lt;/span&gt;]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pd.DataFrame(data,&amp;nbsp;columns&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;columns)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;return&lt;/span&gt;&amp;nbsp;df&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;__name__&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;__main__&quot;&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;urls&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/dong/member/findEmpList.do?menuId=218292&amp;amp;menuNo=218292&amp;amp;dong=01&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/dong/member/findEmpList.do?menuId=228292&amp;amp;menuNo=228292&amp;amp;dong=02&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/dong/member/findEmpList.do?menuId=238292&amp;amp;menuNo=238292&amp;amp;dong=03&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/dong/member/findEmpList.do?menuId=248292&amp;amp;menuNo=248292&amp;amp;dong=04&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/dong/member/findEmpList.do?menuId=258292&amp;amp;menuNo=258292&amp;amp;dong=05&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/dong/member/findEmpList.do?menuId=268292&amp;amp;menuNo=268292&amp;amp;dong=06&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/dong/member/findEmpList.do?menuId=278292&amp;amp;menuNo=278292&amp;amp;dong=07&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/dong/member/findEmpList.do?menuId=288292&amp;amp;menuNo=288292&amp;amp;dong=08&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/dong/member/findEmpList.do?menuId=298292&amp;amp;menuNo=298292&amp;amp;dong=09&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/dong/member/findEmpList.do?menuId=308292&amp;amp;menuNo=308292&amp;amp;dong=10&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/dong/member/findEmpList.do?menuId=318292&amp;amp;menuNo=318292&amp;amp;dong=11&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/dong/member/findEmpList.do?menuId=328292&amp;amp;menuNo=328292&amp;amp;dong=12&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/dong/member/findEmpList.do?menuId=348292&amp;amp;menuNo=348292&amp;amp;dong=14&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/dong/member/findEmpList.do?menuId=358292&amp;amp;menuNo=358292&amp;amp;dong=15&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/dong/member/findEmpList.do?menuId=368292&amp;amp;menuNo=368292&amp;amp;dong=16&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/dong/member/findEmpList.do?menuId=378292&amp;amp;menuNo=378292&amp;amp;dong=17&quot;&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;https://www.jongno.go.kr/dong/member/findEmpList.do?menuId=388292&amp;amp;menuNo=388292&amp;amp;dong=18&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;모든&amp;nbsp;URL에서&amp;nbsp;데이터&amp;nbsp;크롤링&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataframes&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[crawl_orgchart(url)&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;for&lt;/span&gt;&amp;nbsp;url&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;in&lt;/span&gt;&amp;nbsp;urls]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;데이터프레임&amp;nbsp;병합&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df_combined&amp;nbsp;&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pd.concat(dataframes,&amp;nbsp;ignore_index&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;True&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #6bc46b;&quot;&gt;#&amp;nbsp;두&amp;nbsp;데이터프레임을&amp;nbsp;합치기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;not&lt;/span&gt;&amp;nbsp;df_combined.empty:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;print&lt;/span&gt;(df_combined)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df_combined.to_csv(&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;종로구청_동주민센터.csv&quot;&lt;/span&gt;,&amp;nbsp;index&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #8ac7fd;&quot;&gt;False&lt;/span&gt;,&amp;nbsp;encoding&lt;span style=&quot;color: #bb86f9;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f1a5a5;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #dbb84a;&quot;&gt;&quot;utf-8-sig&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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>Web 크롤링/Python Crawling</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2450</guid>
      <comments>https://link2me.tistory.com/2450#entry2450comment</comments>
      <pubDate>Tue, 18 Feb 2025 14:21:44 +0900</pubDate>
    </item>
    <item>
      <title>PHP Treeview with MySQL and jQuery 예제</title>
      <link>https://link2me.tistory.com/2448</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PHP 에서 DB 와 연결해서 TreeView 처리하는 코드 예제이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Treeview 의 깊이를 좁게 처리하기 위해서 style 을 수정했다.&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;57&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;58&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;59&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;60&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;61&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;62&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;63&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;64&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;65&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;66&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;67&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;68&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;69&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;70&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;71&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;72&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;73&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;74&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;75&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;76&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;77&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;78&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;79&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;80&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;81&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;82&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;83&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;84&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff7e00;&quot;&gt;&amp;lt;?php&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;error_reporting(&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;);&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;경고&amp;nbsp;출력&amp;nbsp;없애기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;//*&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;ini_set(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;display_startup_errors&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;ini_set(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;display_errors&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;error_reporting(E_ALL);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;require_once&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'path.php'&lt;/span&gt;;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;root&amp;nbsp;폴더를&amp;nbsp;기준으로&amp;nbsp;상대적인&amp;nbsp;경로&amp;nbsp;자동&amp;nbsp;구하기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;require_once&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$g&lt;/span&gt;[&lt;span style=&quot;color: #ffd500;&quot;&gt;'path_root'&lt;/span&gt;].&lt;span style=&quot;color: #ffd500;&quot;&gt;'sessionChk.php'&lt;/span&gt;;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;세션&amp;nbsp;체크&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;require_once&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$g&lt;/span&gt;[&lt;span style=&quot;color: #ffd500;&quot;&gt;'path_config'&lt;/span&gt;].&lt;span style=&quot;color: #ffd500;&quot;&gt;'config.php'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;require_once&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$g&lt;/span&gt;[&lt;span style=&quot;color: #ffd500;&quot;&gt;'path_class'&lt;/span&gt;].&lt;span style=&quot;color: #ffd500;&quot;&gt;'dbconnect.php'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;require_once&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$g&lt;/span&gt;[&lt;span style=&quot;color: #ffd500;&quot;&gt;'path_class'&lt;/span&gt;].&lt;span style=&quot;color: #ffd500;&quot;&gt;'adminClass.php'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$a&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;new&lt;/span&gt;&amp;nbsp;adminClass();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$dbInstance&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;new&lt;/span&gt;&amp;nbsp;DBDataClass();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$db&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$dbInstance&lt;/span&gt;-&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;db;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;date_default_timezone_set(&lt;span style=&quot;color: #ffd500;&quot;&gt;'Asia/Seoul'&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;Function&amp;nbsp;to&amp;nbsp;fetch&amp;nbsp;categories&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;function&lt;/span&gt;&amp;nbsp;fetchCategories(&lt;span style=&quot;color: #4be6fa;&quot;&gt;$parent_id&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;null&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$db&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$stmt&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$db&lt;/span&gt;-&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;prepare(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;categories&amp;nbsp;WHERE&amp;nbsp;parent_id&amp;nbsp;&quot;&lt;/span&gt;&amp;nbsp;.&amp;nbsp;(&lt;span style=&quot;color: #4be6fa;&quot;&gt;$parent_id&lt;/span&gt;&amp;nbsp;?&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;=&amp;nbsp;:parent_id&quot;&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;IS&amp;nbsp;NULL&quot;&lt;/span&gt;));&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #4be6fa;&quot;&gt;$parent_id&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$stmt&lt;/span&gt;-&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;bindParam(&lt;span style=&quot;color: #ffd500;&quot;&gt;':parent_id'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$parent_id&lt;/span&gt;,&amp;nbsp;PDO::PARAM_INT);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$stmt&lt;/span&gt;-&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;execute();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$stmt&lt;/span&gt;-&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;fetchAll(PDO::FETCH_ASSOC);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;Recursive&amp;nbsp;function&amp;nbsp;to&amp;nbsp;build&amp;nbsp;tree&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;function&lt;/span&gt;&amp;nbsp;buildTree(&lt;span style=&quot;color: #4be6fa;&quot;&gt;$parent_id&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;null&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$db&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$categories&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;fetchCategories(&lt;span style=&quot;color: #4be6fa;&quot;&gt;$parent_id&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$db&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #4be6fa;&quot;&gt;count&lt;/span&gt;(&lt;span style=&quot;color: #4be6fa;&quot;&gt;$categories&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;echo&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'&amp;lt;ul&amp;nbsp;class=&quot;nested&quot;&amp;gt;'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;(&lt;span style=&quot;color: #4be6fa;&quot;&gt;$categories&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;as&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$category&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;echo&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'&amp;lt;li&amp;nbsp;data-id=&quot;'&lt;/span&gt;&amp;nbsp;.&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$category&lt;/span&gt;[&lt;span style=&quot;color: #ffd500;&quot;&gt;'id'&lt;/span&gt;]&amp;nbsp;.&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'&quot;&amp;gt;'&lt;/span&gt;&amp;nbsp;.&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$category&lt;/span&gt;[&lt;span style=&quot;color: #ffd500;&quot;&gt;'name'&lt;/span&gt;];&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&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;buildTree(&lt;span style=&quot;color: #4be6fa;&quot;&gt;$category&lt;/span&gt;[&lt;span style=&quot;color: #ffd500;&quot;&gt;'id'&lt;/span&gt;],&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$db&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;echo&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'&amp;lt;/li&amp;gt;'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;echo&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'&amp;lt;/ul&amp;gt;'&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff7e00;&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;!DOCTYPE&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;html&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;lang&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;en&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;meta&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;charset&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;meta&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;viewport&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;content&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;width=device-width,&amp;nbsp;initial-scale=1.0&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;PHP&amp;nbsp;Treeview&amp;nbsp;with&amp;nbsp;MySQL&amp;nbsp;and&amp;nbsp;jQuery&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ul&amp;nbsp;&lt;/span&gt;{&lt;span style=&quot;color: #4be6fa;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #4be6fa;&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;list-style-type&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #e083ff;&quot;&gt;&amp;nbsp;none&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #4be6fa;&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;padding-left&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #e083ff;&quot;&gt;&amp;nbsp;10px&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #e083ff;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #e083ff;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;}&lt;span style=&quot;color: #ff3399;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;li&amp;nbsp;&lt;/span&gt;{&lt;span style=&quot;color: #4be6fa;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #4be6fa;&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;cursor&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #e083ff;&quot;&gt;&amp;nbsp;pointer&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #4be6fa;&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;padding&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #e083ff;&quot;&gt;&amp;nbsp;5px&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #e083ff;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #e083ff;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;}&lt;span style=&quot;color: #ff3399;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.nested&amp;nbsp;&lt;/span&gt;{&lt;span style=&quot;color: #4be6fa;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #4be6fa;&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;display&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #e083ff;&quot;&gt;&amp;nbsp;none&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #999999;&quot;&gt;/*&amp;nbsp;기본적으로&amp;nbsp;닫힌&amp;nbsp;상태&amp;nbsp;*/&lt;/span&gt;&lt;span style=&quot;color: #e083ff;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #e083ff;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;script&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;src&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;https://code.jquery.com/jquery-3.7.1.min.js&quot;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;Category&amp;nbsp;Treeview&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;div&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;treeview&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff7e00;&quot;&gt;&amp;lt;?php&lt;/span&gt;&amp;nbsp;buildTree(&lt;span style=&quot;color: #4be6fa;&quot;&gt;null&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;$db&lt;/span&gt;);&amp;nbsp;&lt;span style=&quot;color: #ff7e00;&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;span style=&quot;color: #4be6fa;&quot;&gt;document&lt;/span&gt;).ready(&lt;span style=&quot;color: #ff3399;&quot;&gt;function&lt;/span&gt;&amp;nbsp;()&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;Initially&amp;nbsp;hide&amp;nbsp;all&amp;nbsp;nested&amp;nbsp;lists&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;.nested&quot;&lt;/span&gt;).show();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;Toggle&amp;nbsp;visibility&amp;nbsp;on&amp;nbsp;click&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;#treeview&amp;nbsp;li&quot;&lt;/span&gt;).click(&lt;span style=&quot;color: #ff3399;&quot;&gt;function&lt;/span&gt;&amp;nbsp;(e)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;span style=&quot;color: #4be6fa;&quot;&gt;this&lt;/span&gt;).children(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;ul&quot;&lt;/span&gt;).slideToggle();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.stopPropagation();&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;Prevent&amp;nbsp;event&amp;nbsp;bubbling&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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 style=&quot;color: #000000;&quot;&gt;MySQL 테이블 구조&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #fcf9f9; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #1c1818; border-radius: 4px;&quot; width=&quot;700&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #fcf9f9; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;CREATE&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;TABLE&lt;/span&gt;&amp;nbsp;categories&amp;nbsp;(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;id&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;int&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;11&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;name&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;varchar&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;255&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;,&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;parent_id&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;int&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;11&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ENGINE&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;InnoDB&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DEFAULT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;CHARSET&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;utf8mb3&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;COLLATE&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;utf8mb3_general_ci;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;INSERT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;INTO&lt;/span&gt;&amp;nbsp;categories&amp;nbsp;(id,&amp;nbsp;name,&amp;nbsp;parent_id)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;VALUES&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;1&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'Electronics'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;2&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'Laptops'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;1&lt;/span&gt;),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;3&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'Smartphones'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;1&lt;/span&gt;),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;4&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'Dell'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;2&lt;/span&gt;),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;5&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'HP'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;2&lt;/span&gt;),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;6&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'Samsung'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;3&lt;/span&gt;),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;7&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #f4b235;&quot;&gt;'Apple'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #f9d465;&quot;&gt;3&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ALTER&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;TABLE&lt;/span&gt;&amp;nbsp;categories&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ADD&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;PRIMARY&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;&amp;nbsp;(id),&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ADD&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;&amp;nbsp;parent_id&amp;nbsp;(parent_id);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ALTER&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;TABLE&lt;/span&gt;&amp;nbsp;categories&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;MODIFY&lt;/span&gt;&amp;nbsp;id&amp;nbsp;&lt;span style=&quot;color: #31e2f8;&quot;&gt;int&lt;/span&gt;(&lt;span style=&quot;color: #f9d465;&quot;&gt;11&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;AUTO_INCREMENT&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;AUTO_INCREMENT&lt;/span&gt;&lt;span style=&quot;color: #31e2f8;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f9d465;&quot;&gt;8&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ALTER&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;TABLE&lt;/span&gt;&amp;nbsp;categories&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ADD&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;CONSTRAINT&lt;/span&gt;&amp;nbsp;categories_ibfk_1&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;FOREIGN&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;KEY&lt;/span&gt;&amp;nbsp;(parent_id)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;REFERENCES&lt;/span&gt;&amp;nbsp;categories&amp;nbsp;(id)&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;ON&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;DELETE&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #87a5f8;&quot;&gt;CASCADE&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;COMMIT;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/b2AmS3/btsL3X389jz/EdgGgxFiyljuCCFgSYU9D0/categories.sql?attach=1&amp;amp;knm=tfile.sql&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;categories.sql&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Web 프로그램/메뉴 만들기</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2448</guid>
      <comments>https://link2me.tistory.com/2448#entry2448comment</comments>
      <pubDate>Fri, 31 Jan 2025 21:33:21 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 파일 인코딩 변환</title>
      <link>https://link2me.tistory.com/2447</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;리눅스에서 제공하는 파일 인코딩 변환을 사용해봤는데 모두 ANSI 로 된 인코딩 모드를 UTF-8 로 변환하는 걸 제대로 처리하지 못한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Rocky Linux 9.5 및 CentOS 7.9 에서 모두 해봤는데 한글이 깨져서 변환처리를 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;파일을 나누어서 EditPlus 가 읽어들일 수 있는 용량 크기로 만들어서 인코딩 모드를 변환하는 것이 가장 확실한 방법이다.&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>SQL</category>
      <category>EditPlus</category>
      <category>파일 인코딩 변환</category>
      <author>Link2Me</author>
      <guid isPermaLink="true">https://link2me.tistory.com/2447</guid>
      <comments>https://link2me.tistory.com/2447#entry2447comment</comments>
      <pubDate>Mon, 20 Jan 2025 09:24:07 +0900</pubDate>
    </item>
  </channel>
</rss>