<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>so's devlog</title>
    <link>https://sozerodev.tistory.com/</link>
    <description>무슨 생각을 해.. 그냥 하는거지</description>
    <language>ko</language>
    <pubDate>Sun, 16 Aug 2026 12:18:47 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>sovelop</managingEditor>
    <image>
      <title>so's devlog</title>
      <url>https://tistory1.daumcdn.net/tistory/3154180/attach/4c56275f70ba409e9a5faffcb8b36caf</url>
      <link>https://sozerodev.tistory.com</link>
    </image>
    <item>
      <title>nginx에서 특정 ip차단하기</title>
      <link>https://sozerodev.tistory.com/224</link>
      <description>&lt;p&gt;특정 ip에서 자꾸 괴랄한 요청을 해오길래 ip조회를 해보니 요상한 나라들 곳곳에서 조회가 들어왔다.&lt;br&gt;아마 vpn으로 ip주소를 바꿔가며 요청한 것으로 추측됨. 어차피 404라 냅둬도 되겠지만&lt;br&gt;일단 매우 찝찝하니 보이는데로 다 차단을 넣자.&lt;/p&gt;
&lt;h1&gt;nignx 전체로그 및 에러로그 확인방법&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;# 전체 로그 확인
cat /var/log/nginx/access.log

# 특정 로그 확인
grep &amp;quot;검색할문자열&amp;quot; /var/log/nginx/access.log


# 에러 로그 확인
cat /var/log/nginx/error.log&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;위의 결과물에서 맨 앞에 숫자가 request한 ip의 주소이다.&lt;/p&gt;
&lt;h1&gt;nginx에서 특정 목록 삭제&lt;/h1&gt;
&lt;h2&gt;차단 ip주소 목록 작성&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;# /etc/nginx/deny.conf
deny 차단할ip주소1;
deny 차단할ip주소2;
...&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;Nginx 설정에서 &lt;code&gt;include&lt;/code&gt; 사용&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;http {
    # 전역적으로 차단을 적용하려면 http 블록 내에 include
    include /etc/nginx/deny.conf;

    server {
        listen 80;
        server_name example.com;

        # 또는 server 블록 내부에서만 적용하고 싶다면 이 위치에서 include
        # include /etc/nginx/deny.conf;

        location / {
            try_files $uri $uri/ =404;
        }
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;h1&gt;설정 반영&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;# 1. 설정 문법 검사
sudo nginx -t


# 2. Nginx 재시작
sudo systemctl reload nginx&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;이렇게 하면 &lt;code&gt;deny.conf&lt;/code&gt; 를 수정 후 nginx를 reload하기만 하면 바로 차단된 ip가 반영된다. &lt;/p&gt;</description>
      <author>sovelop</author>
      <guid isPermaLink="true">https://sozerodev.tistory.com/224</guid>
      <comments>https://sozerodev.tistory.com/224#entry224comment</comments>
      <pubDate>Thu, 6 Mar 2025 14:05:06 +0900</pubDate>
    </item>
    <item>
      <title>vscode에서 ec2 인스턴스 접속</title>
      <link>https://sozerodev.tistory.com/223</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;배포 환경에서 디버깅을 통해 진짜 최종 테스트를 해보고싶은데 방법이 없을까 보던 중..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vim으로 디버깅환경을 셋팅해보자니 약간 배보다 배꼽이 커질거같고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좀 간단하게 볼 수 없을까... 하다가...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1231&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zdobI/btsLeihuZ69/yp796kQipUkeRgcwONAQRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zdobI/btsLeihuZ69/yp796kQipUkeRgcwONAQRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zdobI/btsLeihuZ69/yp796kQipUkeRgcwONAQRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzdobI%2FbtsLeihuZ69%2Fyp796kQipUkeRgcwONAQRK%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;1231&quot; height=&quot;598&quot; data-origin-width=&quot;1231&quot; data-origin-height=&quot;598&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;ec2 인스턴스를 vscode에서 열 수 있다니 짱인걸.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 시작된 방법 찾기~!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 위에꺼를 설치해주고 시작합시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 ctrl/command + p 에서 &lt;code&gt;Remote-SSH:Settings&lt;/code&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;ssh접속 정보를 적은 config파일의 경로를 넣어줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1279&quot; data-origin-height=&quot;638&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dswmo1/btsLgfpTlJW/1wKik2Qi9SnGGHi9VJKxIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dswmo1/btsLgfpTlJW/1wKik2Qi9SnGGHi9VJKxIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dswmo1/btsLgfpTlJW/1wKik2Qi9SnGGHi9VJKxIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdswmo1%2FbtsLgfpTlJW%2F1wKik2Qi9SnGGHi9VJKxIK%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;1279&quot; height=&quot;638&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1279&quot; data-origin-height=&quot;638&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;Host {아무이름!!!but @}
    HostName ec2-xxxxxxxx.compute.amazonaws.com
    User 유저명
    IdentityFile ~/.ssh/내pem파일.pem
    
    
Host {아무이름2!!!but @}
    HostName ec2-yyyyyyyyyy.compute.amazonaws.com
    User 유저명
    IdentityFile ~/.ssh/내pem파일.pem&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에는 config파일의 작성 예시이고요. 접속정보는 여러개 추가할 수 있어요~&lt;/p&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;Host에 아무 이름이라고 강조한 이유는&lt;br /&gt;내가 &lt;i&gt;&lt;b&gt;{계정명@호스트url}&lt;/b&gt; &lt;/i&gt;을 적었다가 자꾸 접속이 안돼서 화가 났기 때문. ㅋㅋㅋ..ㅋ...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(아 왜안되는건데~ 1시간 소리지르다가 엥 혹시 하고 지웠더니 바로 돼서 허탈했네요)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우의 경우 pem파일의 권한을 처리할 때 permission denied에러가 뜰 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맨 하단의 첫번째 링크 참고해서 해결했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 접속하면 당연한 말이지만 .vscode/launch.json을 잘 작성해서 웹서버가 돌아갈 수 있게 잘 구워준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vscode의 PORTS부분에 보면 Forwarded Address가 127.0.0.1:5001이라 내 로컬 브라우저에서 저 주소로 접속해도 잘 들어가진다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1524&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djnNyO/btsLfVkTyFu/o3IsviLF0weopVLgoFN6p1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djnNyO/btsLfVkTyFu/o3IsviLF0weopVLgoFN6p1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djnNyO/btsLfVkTyFu/o3IsviLF0weopVLgoFN6p1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjnNyO%2FbtsLfVkTyFu%2Fo3IsviLF0weopVLgoFN6p1%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;1524&quot; height=&quot;191&quot; data-origin-width=&quot;1524&quot; data-origin-height=&quot;191&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;
&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;blob&quot; data-origin-width=&quot;1914&quot; data-origin-height=&quot;1034&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/And6R/btsLem5qcA3/DvVnKkgmbOFIHR0tt28FM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/And6R/btsLem5qcA3/DvVnKkgmbOFIHR0tt28FM0/img.png&quot; data-alt=&quot;vscode는 ec2 인스턴스 접속&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/And6R/btsLem5qcA3/DvVnKkgmbOFIHR0tt28FM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAnd6R%2FbtsLem5qcA3%2FDvVnKkgmbOFIHR0tt28FM0%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;1914&quot; height=&quot;1034&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1914&quot; data-origin-height=&quot;1034&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;vscode는 ec2 인스턴스 접속&lt;/figcaption&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;브라우저에서 127.0.0.1:5001로 접속하면 터미널에서 로그가 뜨는걸 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;굳~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;도움받음&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ongamedev.tistory.com/494&quot;&gt;https://ongamedev.tistory.com/494&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1733906742795&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Windows에서의 ssh 인증 파일 permission 문제 해결 방법&quot; data-og-description=&quot;해당 파일 &amp;quot;속성&amp;quot;에서 &amp;quot;보안&amp;quot;탭을 선택 후 &amp;quot;고급&amp;quot;버튼을 선택합니다. 그리고 &amp;quot;상속 사용 안 함&amp;quot;을 선택 후 &amp;quot;이 개체에서 상속된 사용 권한을 모두 제거합니다.&amp;quot;를 선택합니다. 기존 사용자 리스트&quot; data-og-host=&quot;ongamedev.tistory.com&quot; data-og-source-url=&quot;https://ongamedev.tistory.com/494&quot; data-og-url=&quot;https://ongamedev.tistory.com/494&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/NT948/hyXKjtNtjx/xRUziWqoNOufVr1FAlaKaK/img.png?width=400&amp;amp;height=366&amp;amp;face=0_0_400_366,https://scrap.kakaocdn.net/dn/bWDCNX/hyXKjUSNvo/JkXK5arJPNVegNkLFGCQmk/img.png?width=400&amp;amp;height=366&amp;amp;face=0_0_400_366,https://scrap.kakaocdn.net/dn/bbJyVF/hyXKtDa0bX/NzKcJc1gLBqFUtkkPPeTE1/img.png?width=785&amp;amp;height=280&amp;amp;face=0_0_785_280&quot;&gt;&lt;a href=&quot;https://ongamedev.tistory.com/494&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ongamedev.tistory.com/494&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/NT948/hyXKjtNtjx/xRUziWqoNOufVr1FAlaKaK/img.png?width=400&amp;amp;height=366&amp;amp;face=0_0_400_366,https://scrap.kakaocdn.net/dn/bWDCNX/hyXKjUSNvo/JkXK5arJPNVegNkLFGCQmk/img.png?width=400&amp;amp;height=366&amp;amp;face=0_0_400_366,https://scrap.kakaocdn.net/dn/bbJyVF/hyXKtDa0bX/NzKcJc1gLBqFUtkkPPeTE1/img.png?width=785&amp;amp;height=280&amp;amp;face=0_0_785_280');&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;Windows에서의 ssh 인증 파일 permission 문제 해결 방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;해당 파일 &quot;속성&quot;에서 &quot;보안&quot;탭을 선택 후 &quot;고급&quot;버튼을 선택합니다. 그리고 &quot;상속 사용 안 함&quot;을 선택 후 &quot;이 개체에서 상속된 사용 권한을 모두 제거합니다.&quot;를 선택합니다. 기존 사용자 리스트&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ongamedev.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://gre-eny.tistory.com/344&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://gre-eny.tistory.com/344&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1733906783622&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[AWS] VSCode에서 AWS EC2 instance 원격 접속하기(Remote)&quot; data-og-description=&quot;Windows 환경의 VSCode에서 AWS EC2에 원격접속을 해보자. 이 포스팅은 EC2와 접속에 필요한 .pem키는 이미 있다고 가정하고 진행한다. vscode extension: Remote Development 설치하기 ctrl + shift + X 단축키로 MarketPl&quot; data-og-host=&quot;gre-eny.tistory.com&quot; data-og-source-url=&quot;https://gre-eny.tistory.com/344&quot; data-og-url=&quot;https://gre-eny.tistory.com/344&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/j6FK3/hyXKrZDY2z/SVKKz2uoc3tnMXXLB8Abkk/img.png?width=800&amp;amp;height=326&amp;amp;face=0_0_800_326,https://scrap.kakaocdn.net/dn/esoc3W/hyXKtb595G/0GFzO1ChKdBjdYTXMVaf6k/img.png?width=800&amp;amp;height=326&amp;amp;face=0_0_800_326&quot;&gt;&lt;a href=&quot;https://gre-eny.tistory.com/344&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://gre-eny.tistory.com/344&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/j6FK3/hyXKrZDY2z/SVKKz2uoc3tnMXXLB8Abkk/img.png?width=800&amp;amp;height=326&amp;amp;face=0_0_800_326,https://scrap.kakaocdn.net/dn/esoc3W/hyXKtb595G/0GFzO1ChKdBjdYTXMVaf6k/img.png?width=800&amp;amp;height=326&amp;amp;face=0_0_800_326');&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;[AWS] VSCode에서 AWS EC2 instance 원격 접속하기(Remote)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Windows 환경의 VSCode에서 AWS EC2에 원격접속을 해보자. 이 포스팅은 EC2와 접속에 필요한 .pem키는 이미 있다고 가정하고 진행한다. vscode extension: Remote Development 설치하기 ctrl + shift + X 단축키로 MarketPl&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;gre-eny.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Back-up/etc</category>
      <author>sovelop</author>
      <guid isPermaLink="true">https://sozerodev.tistory.com/223</guid>
      <comments>https://sozerodev.tistory.com/223#entry223comment</comments>
      <pubDate>Wed, 11 Dec 2024 17:57:06 +0900</pubDate>
    </item>
    <item>
      <title>vue2 를 Docker 컨테이너에서 개발하기</title>
      <link>https://sozerodev.tistory.com/221</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매번 새로운 컴퓨터에서 개발환경 셋팅하기가 귀찮다... 도커면 셋팅 과정이 훨씬 간단해지지 않을까?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라는 생각에서 출발&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각지 못하게 &lt;code&gt;vscode&lt;/code&gt; 를 통해 쉽게 도커 환경을 셋팅했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회사에서 개발환경이 &lt;code&gt;vue2&lt;/code&gt;, &lt;code&gt;node12&lt;/code&gt; 버전을 사용 중이었다. 그러나 노드 12버전은 지원이 종료되었기 때문에 vscode를 통해 도커를 셋팅하려면 그래도 노드 14버전은 써야할 것 같았다. 다행스럽게도 Vue2는 node 14까지 지원한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vue.config.js를 몇번 수정하니 node 14에서도 개발이 가능했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 vscode에서 확장패키지를 몇개 설치 필요하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Docker - Microsoft&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1181&quot; data-origin-height=&quot;195&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G92PZ/btsGaZsAksk/lZWjH6NBkhZD1ngEgWcj7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G92PZ/btsGaZsAksk/lZWjH6NBkhZD1ngEgWcj7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G92PZ/btsGaZsAksk/lZWjH6NBkhZD1ngEgWcj7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG92PZ%2FbtsGaZsAksk%2FlZWjH6NBkhZD1ngEgWcj7k%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;1181&quot; height=&quot;195&quot; data-origin-width=&quot;1181&quot; data-origin-height=&quot;195&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; 2. Dev Containers - Microsft&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PDTXg/btsGa0dWCYF/ZDb1Ypj9jDpKJMyDbJHBKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PDTXg/btsGa0dWCYF/ZDb1Ypj9jDpKJMyDbJHBKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PDTXg/btsGa0dWCYF/ZDb1Ypj9jDpKJMyDbJHBKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPDTXg%2FbtsGa0dWCYF%2FZDb1Ypj9jDpKJMyDbJHBKk%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;1104&quot; height=&quot;214&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;214&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;Dev Containers 패키지를 설치한 후 ctrl+shift+p 를 통해&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dev Containers: Add Dev Container Configuration Files 를 통해 셋팅을 하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동으로 &lt;b&gt;.devcontainer&lt;/b&gt; 폴더가 생기며 그 하위에 &lt;b&gt;.devcontainer.json&lt;/b&gt; 파일이 생성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 .devcontainer.json과 Docker파일을 다음과 같이 작성했다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;// .devcontainer/devcontainer.json
{
    &quot;name&quot;: &quot;let-docker&quot;,
    &quot;dockerFile&quot;: &quot;Dockerfile&quot;, // Dockerfile이 루트에 있다면 ../Dockerfile로 해도 된다
    &quot;forwardPorts&quot;: [8081], // npm run serve/start 시 사용되는 포트로 사용
    &quot;customizations&quot;: {
        &quot;vscode&quot;: {
            &quot;settings&quot;: {},
            &quot;extensions&quot;: [
                &quot;dbaeumer.vscode-eslint&quot;
            ]
        }
    },
    &quot;postCreateCommand&quot;: &quot;npm install&quot;,
    &quot;remoteUser&quot;: &quot;usr&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;# Dockerfile
FROM node:14
RUN apt update &amp;amp;&amp;amp; apt install -y less man-db sudo
ARG USERNAME=usr
RUN echo $USERNAME ALL=\(root\) NOPASSWD:ALL &amp;gt; /etc/sudoers.d/$USERNAME \
&amp;amp;&amp;amp; chmod 0440 /etc/sudoers.d/$USERNAME
ENV DEVCONTAINER=true
RUN npm uninstall -g @vue/cli
RUN npm install -g @vue/cli
RUN npm rebuild node-sass&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 셋팅해서 끝은 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vscode를 통해 기껏 컨테이너 개발환경을 구축해도 코드를 수정하면 바로 수정(hot reload)이 되어야 할텐데 그게 되지 않았다.&lt;/p&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;code&gt;vue.config.js&lt;/code&gt; 를 좀 수정해줘야 했다.&lt;/p&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;module.exports = {
  ...
  ...,
  configureWebpack: {
        devServer: {
          watchOptions: {
            poll: true, // Enable polling
            ignored: /node_modules/, 
          },
        },
    },
  ...

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vWhKD/btsF8lX8u3B/4EKeB4CvF8SuZHpupAVW0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vWhKD/btsF8lX8u3B/4EKeB4CvF8SuZHpupAVW0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vWhKD/btsF8lX8u3B/4EKeB4CvF8SuZHpupAVW0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvWhKD%2FbtsF8lX8u3B%2F4EKeB4CvF8SuZHpupAVW0K%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;652&quot; height=&quot;82&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vscode에서 ctrl+shift+p 에서 Dev Containers:Open Folder in Container...를 통해 새창을 열고 개발하면 된다.&lt;/p&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;br /&gt;하지만 일반 로컬에서 개발하는 것보다 reload가 조금 느린 것 같다.&lt;br /&gt;그래도 여러 프로젝트에서 버전을 왔다갔다 해야하는 경우라면 도커 컨테이너로 개발환경을 셋팅하는게 확실히 편해보인다.&lt;/p&gt;</description>
      <category>Error</category>
      <author>sovelop</author>
      <guid isPermaLink="true">https://sozerodev.tistory.com/221</guid>
      <comments>https://sozerodev.tistory.com/221#entry221comment</comments>
      <pubDate>Thu, 28 Mar 2024 16:04:29 +0900</pubDate>
    </item>
    <item>
      <title>[python] 에러 발생 시 로그로 남길 때는 꼬옥 traceback을 써주기</title>
      <link>https://sozerodev.tistory.com/220</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;logging 을 import하여 exc_info를 로그로 남길 수도 있겠지만..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 에러가 발생했을 때 마다 slack으로 정확히 어떤 파일의 몇번째 줄에서 문제가 발생했는지 알림을 받고 싶었다.&lt;/p&gt;
&lt;/blockquote&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;code&gt;traceback&lt;/code&gt; 모듈을 사용해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;201&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BcjTC/btsC4o3rKP4/PSV33EiD6p6YrGp0gYvnL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BcjTC/btsC4o3rKP4/PSV33EiD6p6YrGp0gYvnL1/img.png&quot; data-alt=&quot;히힛 신난다~ 이제 로그 파일 매번 열어서 찾아보지 않아도 된다~&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BcjTC/btsC4o3rKP4/PSV33EiD6p6YrGp0gYvnL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBcjTC%2FbtsC4o3rKP4%2FPSV33EiD6p6YrGp0gYvnL1%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;577&quot; height=&quot;201&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;201&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;히힛 신난다~ 이제 로그 파일 매번 열어서 찾아보지 않아도 된다~&lt;/figcaption&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;traceback은 파이썬의 표준 라이브러리에 포함된 모듈이므로 별도 설치가 필요없다. :D&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(구버전 파이썬을 써야만 하는 상황이라 버전 안맞을까봐 걱정할 필요가 없다!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에러 정보를 콘솔에 출력(print) 하려면&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;traceback.print_exc()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 변수에 예외정보를 담으려면?&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;try:
    test = &quot;이건 테스트지&quot;
    print(test[100]) # test 문자열의 100번째 인덱스는 없으니 에러가 발생하지요

except Exception as e:
	import traceback
    exception_str = traceback.format_exc()

    # 슬랙에 에러 정보를 알리는 함수
    alert_slack(eception_str, ...)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;exception_str 함수에는&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;string index out of range Traceback (most recent call last):
  File &quot;D:\dev\test.py&quot;, line 85, in my_func
    print(test[100])
IndexError: string index out of range&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 어떤 파일의 몇번째 줄, 어떤 함수의 어떤 부분에서 문제가 생겼는지에 대한 에러 정보를 담을 수 있다. :)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정말 편하고 쉬운데 이걸 왜 이제야 썼나~&lt;/p&gt;</description>
      <category>파이썬 문법</category>
      <author>sovelop</author>
      <guid isPermaLink="true">https://sozerodev.tistory.com/220</guid>
      <comments>https://sozerodev.tistory.com/220#entry220comment</comments>
      <pubDate>Fri, 5 Jan 2024 11:12:56 +0900</pubDate>
    </item>
    <item>
      <title>mysql deadlock (디비 멈춤) 해결법</title>
      <link>https://sozerodev.tistory.com/219</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysql에서 데이터를 조회하는 도중 갑자기 디비가 멈췄다. 띠용.. @-@&lt;/p&gt;
&lt;/blockquote&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;db에서 &lt;code&gt;deadlock&lt;/code&gt; 를 발견함.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;472&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tNRgY/btsAJwJmshv/Qq8c3qzT6mKgSB8ons3UXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tNRgY/btsAJwJmshv/Qq8c3qzT6mKgSB8ons3UXk/img.png&quot; data-alt=&quot;D..ead...lock이요?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tNRgY/btsAJwJmshv/Qq8c3qzT6mKgSB8ons3UXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtNRgY%2FbtsAJwJmshv%2FQq8c3qzT6mKgSB8ons3UXk%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;472&quot; height=&quot;60&quot; data-origin-width=&quot;472&quot; data-origin-height=&quot;60&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;D..ead...lock이요?&lt;/figcaption&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;왜냐하면 Update ~ 를 친 후에 멈췄기 때문...  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 급하게 해결하려면..&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;show processlist&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 조회된 데이터 가운데 time이 많이 걸린 행이 있을 것이다. 그 행의 id를 찾아 죽이자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;kill {id}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실사용중에도 데드락이 발생할 수 있으니..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 데드락이 발생했는지,데드락 발생시 알아서 process를 kill하는 방법을 알아봐야 할 듯 하다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Server/sql</category>
      <author>sovelop</author>
      <guid isPermaLink="true">https://sozerodev.tistory.com/219</guid>
      <comments>https://sozerodev.tistory.com/219#entry219comment</comments>
      <pubDate>Wed, 22 Nov 2023 10:11:01 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 딕셔너리는 추가 순서를 보장한다.</title>
      <link>https://sozerodev.tistory.com/218</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;api를 만들 때 리스트로 만드는 것 보다 딕셔너리를 주로 많이 쓰게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;내가 파이썬을 처음 배웠던 시절에는 딕셔너리 자료형이 순서를 보장하지 않는다고 했던 것이 기억나 가급적 순서보장이 필요할 땐 리스트를 주로 썼었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;근데 아무리봐도 리스트보단 딕셔너리를 쓰는 것이 더 나아보이는 상황이 종종 있었는데 이것이 또 순서가 보장되었으면 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다고 키값을 요소로 가지는 리스트와 딕셔너리를 둘다 쓰긴 싫었는데...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다행스럽게 파이썬 3.6버전부턴 키 추가 순서가 보장된다! &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.hwahae.co.kr/all/tech/6662&quot;&gt;https://blog.hwahae.co.kr/all/tech/6662&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1699430780614&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Python3.6 부터는 Dict가 순서를 기억한다. &amp;ndash; 화해 블로그 | 기술 블로그&quot; data-og-description=&quot;Python3.6 화해 개발팀에서는 닥블(닥치고 블로그)이라는 소모임을 운영하고 있습니다. 최근 닥블 활동으로 화해팀의 백엔드 플랫폼에서 사용 중인 Python 딕셔너리에 대해 새로 알게 된 내용을 정&quot; data-og-host=&quot;blog-wp.hwahae.co.kr&quot; data-og-source-url=&quot;https://blog.hwahae.co.kr/all/tech/6662&quot; data-og-url=&quot;https://blog-wp.hwahae.co.kr/all/tech/6662/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sBrSh/hyUuVBNqTr/i7kyLqJmRdQ4Ki3YBDAzf1/img.jpg?width=1050&amp;amp;height=660&amp;amp;face=0_0_1050_660,https://scrap.kakaocdn.net/dn/btGNmj/hyUrEaBRTT/cbGgEHJd57RqyzkJ4DKEw1/img.jpg?width=1420&amp;amp;height=1056&amp;amp;face=0_0_1420_1056,https://scrap.kakaocdn.net/dn/cc3oDP/hyUrttnlB7/NlN7VfDF5nwTnDtkwk4T10/img.jpg?width=1420&amp;amp;height=1056&amp;amp;face=0_0_1420_1056&quot;&gt;&lt;a href=&quot;https://blog.hwahae.co.kr/all/tech/6662&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.hwahae.co.kr/all/tech/6662&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sBrSh/hyUuVBNqTr/i7kyLqJmRdQ4Ki3YBDAzf1/img.jpg?width=1050&amp;amp;height=660&amp;amp;face=0_0_1050_660,https://scrap.kakaocdn.net/dn/btGNmj/hyUrEaBRTT/cbGgEHJd57RqyzkJ4DKEw1/img.jpg?width=1420&amp;amp;height=1056&amp;amp;face=0_0_1420_1056,https://scrap.kakaocdn.net/dn/cc3oDP/hyUrttnlB7/NlN7VfDF5nwTnDtkwk4T10/img.jpg?width=1420&amp;amp;height=1056&amp;amp;face=0_0_1420_1056');&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;Python3.6 부터는 Dict가 순서를 기억한다. &amp;ndash; 화해 블로그 | 기술 블로그&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Python3.6 화해 개발팀에서는 닥블(닥치고 블로그)이라는 소모임을 운영하고 있습니다. 최근 닥블 활동으로 화해팀의 백엔드 플랫폼에서 사용 중인 Python 딕셔너리에 대해 새로 알게 된 내용을 정&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog-wp.hwahae.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>파이썬 문법</category>
      <author>sovelop</author>
      <guid isPermaLink="true">https://sozerodev.tistory.com/218</guid>
      <comments>https://sozerodev.tistory.com/218#entry218comment</comments>
      <pubDate>Wed, 8 Nov 2023 17:06:31 +0900</pubDate>
    </item>
    <item>
      <title>putty 대신에 쓸만한 ssh, ftp 툴(window, mac) 추천</title>
      <link>https://sozerodev.tistory.com/217</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;putty 너무 못생겨서 못쓰겠어요(?)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;325&quot; data-origin-height=&quot;155&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7eNqk/btszk8Xvr9N/ph9uurUIt17nPWOVlT090K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7eNqk/btszk8Xvr9N/ph9uurUIt17nPWOVlT090K/img.jpg&quot; data-alt=&quot;진짜 못생겼어요...&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7eNqk/btszk8Xvr9N/ph9uurUIt17nPWOVlT090K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7eNqk%2Fbtszk8Xvr9N%2Fph9uurUIt17nPWOVlT090K%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;325&quot; height=&quot;155&quot; data-origin-width=&quot;325&quot; data-origin-height=&quot;155&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;진짜 못생겼어요...&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쓰는 툴은 어느정도 아름다워야 쓸 맛이 난다고요.. putty말고 쓸만한 툴을 추천한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;putty는 디자인을 제외하고도 ftp는 별도로 파일질라를 다운받아야 하기 때문에 여간 불편한 것이 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;나는 유료를 좋아하지 않기 때문에 무료만 추천한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;밑의 소개하는 툴들은 모두 ssh, ftp둘다 사용이 가능하다.&lt;/p&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1&gt;윈도우 - Mobaxterm&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우 환경이라면 &lt;a href=&quot;https://mobaxterm.mobatek.net/&quot;&gt;Mobaxterm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dof4Nl/btszlmnNYvV/DVhKCvkz8jJk04WDr6KpJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dof4Nl/btszlmnNYvV/DVhKCvkz8jJk04WDr6KpJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dof4Nl/btszlmnNYvV/DVhKCvkz8jJk04WDr6KpJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdof4Nl%2FbtszlmnNYvV%2FDVhKCvkz8jJk04WDr6KpJ1%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;768&quot; height=&quot;443&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;443&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;기존에 putty를 썼다면 mobaxterm에 지금껏 연결했던 클라우드 접속 정보를 연동할 수도 있다.&lt;/p&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1&gt;Max, 윈도우, ios, ... - Termius&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맥 환경이라면 &lt;a href=&quot;https://termius.com/&quot;&gt;Termius&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2038&quot; data-origin-height=&quot;1336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PW2Za/btszj4BquGA/0QTlm0Skiyslq84eMCk5o1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PW2Za/btszj4BquGA/0QTlm0Skiyslq84eMCk5o1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PW2Za/btszj4BquGA/0QTlm0Skiyslq84eMCk5o1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPW2Za%2Fbtszj4BquGA%2F0QTlm0Skiyslq84eMCk5o1%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;2038&quot; height=&quot;1336&quot; data-origin-width=&quot;2038&quot; data-origin-height=&quot;1336&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Mobaxterm에 비하면 훨씬 현대적이고 깔끔하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Termius의 경우 App store에서 다운로드 가능하며 물론 물론 아이패드에서도 사용이 가능하다는 엄청난 장점이 있다.&lt;br /&gt;사실 Termius는 윈도우에서도 사용 가능하기 때문에 더더욱 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아름다운 ui... 아주 마음에 든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인적으로 Termius전에 Mobaxterm을 먼저 사용했기에 윈도우에서는 Mobaxterm을 사용하기는 하는데 큰 이유는 없고 그냥 익숙해서..^^,,&lt;/p&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;이제 putty + 파일질라 조합을 벗어나보자고...~&amp;nbsp;&lt;/p&gt;</description>
      <category>Back-up/etc</category>
      <author>sovelop</author>
      <guid isPermaLink="true">https://sozerodev.tistory.com/217</guid>
      <comments>https://sozerodev.tistory.com/217#entry217comment</comments>
      <pubDate>Sat, 28 Oct 2023 17:34:19 +0900</pubDate>
    </item>
    <item>
      <title>python으로 openai api 사용해보기 (feat. 옵션값-temperature, top_p 설정)</title>
      <link>https://sozerodev.tistory.com/216</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;파이썬으로 openai에 요청하여 응답을 받아보자! 간지나는 무언가를 만들 수 있을 것만 같아요..?&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예전에는 request를 통해서 openai에 요청하고 그랬는데 다시 알아보니 openai의 공식 python 관련 라이브러리가 따로 있었다.&lt;br /&gt;정말 top-notch&amp;amp;full-fledged 개발자라면 자기 입맛에 맞게 requests를 사용해서 이것저것 할 수 있겠지만&lt;br /&gt;나는 그냥 편하게 openai에서 직접 업데이트하고 호환성을 맞춰주는 라이브러리를 사용하겠다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;코드 보기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 어떤 녀석을 쓸거냐면...&lt;br /&gt;코드는 얼추 이렇다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;import openai

openai.api_key='{당신이 발급받은 openai key}'

def request_openai(input_text):
    try:
            chat_completion = openai.ChatCompletion.create(
                model=&quot;gpt-3.5-turbo&quot;, 
                messages=[
                    {
                        &quot;role&quot;: &quot;system&quot;, # 사용하려는 용도가 어떤 것인지... 기계에게 너는 어떤 역할이라는 것을 알려줘라
                        &quot;content&quot;: &quot;You're a machine for ~~ write anything you want&quot;
                    },
                    {
                        &quot;role&quot;: &quot;assistant&quot;, # 부가적으로 필요한 것이 무엇인지 알려줘라(필수는 아님)
                        &quot;content&quot;: &quot;Something is bla bla...&quot;
                    },
                    {
                        &quot;role&quot;: &quot;user&quot;, 
                        &quot;content&quot;: f&quot;Answer this question. {input_text}&quot;
                    }
                ],
                temperature=0
            )

            return jsonify({
                &quot;code&quot;: True,
                &quot;result&quot;: chat_completion.choices[0].message.content
            }), 200

        except Exception as e:
            print(e)
            if e.code == &quot;context_length_exceeded&quot;:
                return jsonify({
                    &quot;code&quot;: False,
                    &quot;message&quot;: &quot;요청 가능 token수 초과&quot;,
                    &quot;error_code&quot;: &quot;context_length_exceeded&quot;
                }), 500

            if cnt&amp;gt;5:
                return jsonify({
                    &quot;code&quot;: False,
                    &quot;message&quot;: &quot;open ai 에러입니다. 잠시 후 다시 사용해주세요.&quot;
                }), 500

            time.sleep(5)

            return request_openai(input_text, cnt+1)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;message(구 prompt)&lt;/code&gt; 에 굳이 영어를 쓴건 아무래도 영어가 조금이라도 더 이해가 좋고 빠르지 않을까 싶어서다.. 어차피 한국어로 질문하면 한국어로 답을 하니 나는 영어로 지시했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여담으로 얼마 전에 open ai 서버가 터진 일이 있었다. 자그마치 3시간 넘게 작동이 안됐었는데...&lt;br /&gt;만약 openai 서버가 지금 잘 작동하는지 아닌지 확인하려면 &lt;a href=&quot;https://status.openai.com/&quot;&gt;OpenAI Status&lt;/a&gt; 에서 확인할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1061&quot; data-origin-height=&quot;686&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oeDEk/btszcGVwz0W/aagacds0XVokJEVKkSlw81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oeDEk/btszcGVwz0W/aagacds0XVokJEVKkSlw81/img.png&quot; data-alt=&quot;자그마치 3시간이 넘게 터진 API 서버..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oeDEk/btszcGVwz0W/aagacds0XVokJEVKkSlw81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoeDEk%2FbtszcGVwz0W%2Faagacds0XVokJEVKkSlw81%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;1061&quot; height=&quot;686&quot; data-origin-width=&quot;1061&quot; data-origin-height=&quot;686&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;자그마치 3시간이 넘게 터진 API 서버..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;물론 openai 서버 문제로 인해 응답을 못받으면 아마 500에러가 돌아왔던걸로 기억하는데.. 일단 바로 고쳐질 수 도 있으니 나는 &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;try excep를 통해 &lt;/span&gt;오류가 생겼을 때 5번까지는 계속 시도하게 코드를 짰다. 문제가 없는데 어쩌다 한번씩 응답이 제대로 안오는 경우도 있기 때문&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;openai의 옵션값 &lt;code&gt;temperature&lt;/code&gt;와 &lt;code&gt;top_p&lt;/code&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 옵션값으로 중요한 부분이 &lt;code&gt;temperature&lt;/code&gt;와 &lt;code&gt;top_p&lt;/code&gt;가 있다. 이 값에 따라 대답하는 형식이 많이 달라질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단히 말해 &lt;b&gt;temperature&lt;/b&gt;는 말을 현학적으로 해주는 지수를 높여준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;`creativity`를 조절하거나 텍스트 생성을 무작위로 뽑는 지수를 높여준다. 예를 들어 temperature지수가 0.7보다 높을 경우 다양하고 현학적으로 말을 뱉는 반면, 낮은 지수인 0.2가 되면 좀더 확정적이고 사용자의 질문에 초점을 맞춰서 답을 하게 된다. 이러한 경우 채팅의 경우 temperature를 높이고, 기술번역을 하는 경우에는 temperature를 낮추는게 좋아보인다.&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;top_p&lt;/b&gt;의 경우&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://city-kim.tistory.com/12&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;다음 글&lt;/a&gt;이 잘 정리되어있으니 참고...!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단히 말하면 답변을 몇 개 받을 지 정하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;숫자가 작아질수록 답변의 variation...다양성이 낮춰진다고 보면 될 것 같다.&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-origin-width=&quot;608&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bow5bc/btszfY8Ew2H/dRkUAEfXWQksozMfT97VP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bow5bc/btszfY8Ew2H/dRkUAEfXWQksozMfT97VP0/img.png&quot; data-alt=&quot;간단참고&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bow5bc/btszfY8Ew2H/dRkUAEfXWQksozMfT97VP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbow5bc%2FbtszfY8Ew2H%2FdRkUAEfXWQksozMfT97VP0%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;608&quot; height=&quot;512&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;간단참고&lt;/figcaption&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;a href=&quot;https://platform.openai.com/playground&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;OpenAI Playground&lt;/a&gt;가 있으니&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여길 참고해서 편하게 써보면 되겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;참고&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://community.openai.com/t/cheat-sheet-mastering-temperature-and-top-p-in-chatgpt-api-a-few-tips-and-tricks-on-controlling-the-creativity-deterministic-output-of-prompt-responses/172683&quot;&gt;https://community.openai.com/t/cheat-sheet-mastering-temperature-and-top-p-in-chatgpt-api-a-few-tips-and-tricks-on-controlling-the-creativity-deterministic-output-of-prompt-responses/172683&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1698372890367&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;⛺️ Cheat Sheet: Mastering Temperature and Top_p in ChatGPT API (a few tips and tricks on controlling the creativity/determin&quot; data-og-description=&quot;Hello everyone! Ok, I admit had help from OpenAi with this. But what I &amp;ldquo;helped&amp;rdquo; put together I think can greatly improve the results and costs of using OpenAi within your apps and plugins, specially for those looking to guide internal prompts for plugi&quot; data-og-host=&quot;community.openai.com&quot; data-og-source-url=&quot;https://community.openai.com/t/cheat-sheet-mastering-temperature-and-top-p-in-chatgpt-api-a-few-tips-and-tricks-on-controlling-the-creativity-deterministic-output-of-prompt-responses/172683&quot; data-og-url=&quot;https://community.openai.com/t/cheat-sheet-mastering-temperature-and-top-p-in-chatgpt-api-a-few-tips-and-tricks-on-controlling-the-creativity-deterministic-output-of-prompt-responses/172683&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bza8ie/hyUkcSrym2/l2Vu6baY7svKRKi2wNqd00/img.png?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260,https://scrap.kakaocdn.net/dn/bSt4rz/hyUkaf23j7/ZpxeUywwjKoTy7mbLVC6Wk/img.png?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260,https://scrap.kakaocdn.net/dn/dlL1U7/hyUkh7hc4f/GJb8ieIwKU3SlRAkVENDc1/img.png?width=690&amp;amp;height=345&amp;amp;face=0_0_690_345&quot;&gt;&lt;a href=&quot;https://community.openai.com/t/cheat-sheet-mastering-temperature-and-top-p-in-chatgpt-api-a-few-tips-and-tricks-on-controlling-the-creativity-deterministic-output-of-prompt-responses/172683&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://community.openai.com/t/cheat-sheet-mastering-temperature-and-top-p-in-chatgpt-api-a-few-tips-and-tricks-on-controlling-the-creativity-deterministic-output-of-prompt-responses/172683&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bza8ie/hyUkcSrym2/l2Vu6baY7svKRKi2wNqd00/img.png?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260,https://scrap.kakaocdn.net/dn/bSt4rz/hyUkaf23j7/ZpxeUywwjKoTy7mbLVC6Wk/img.png?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260,https://scrap.kakaocdn.net/dn/dlL1U7/hyUkh7hc4f/GJb8ieIwKU3SlRAkVENDc1/img.png?width=690&amp;amp;height=345&amp;amp;face=0_0_690_345');&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;⛺️ Cheat Sheet: Mastering Temperature and Top_p in ChatGPT API (a few tips and tricks on controlling the creativity/determin&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Hello everyone! Ok, I admit had help from OpenAi with this. But what I &amp;ldquo;helped&amp;rdquo; put together I think can greatly improve the results and costs of using OpenAi within your apps and plugins, specially for those looking to guide internal prompts for plugi&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;community.openai.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://platform.openai.com/docs/guides/gpt/chat-completions-api&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://platform.openai.com/docs/guides/gpt/chat-completions-api&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1698372923415&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;OpenAI Platform&quot; data-og-description=&quot;Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform.&quot; data-og-host=&quot;platform.openai.com&quot; data-og-source-url=&quot;https://platform.openai.com/docs/guides/gpt/chat-completions-api&quot; data-og-url=&quot;https://platform.openai.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bpxc7K/hyUkirzgYu/DIKaacAjSK97JMtOMRJT60/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bStcZY/hyUlvqBOA6/v8FOapEK2uipnjXXmM0cQ1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://platform.openai.com/docs/guides/gpt/chat-completions-api&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://platform.openai.com/docs/guides/gpt/chat-completions-api&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bpxc7K/hyUkirzgYu/DIKaacAjSK97JMtOMRJT60/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bStcZY/hyUlvqBOA6/v8FOapEK2uipnjXXmM0cQ1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;OpenAI Platform&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;platform.openai.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Back-up/etc</category>
      <author>sovelop</author>
      <guid isPermaLink="true">https://sozerodev.tistory.com/216</guid>
      <comments>https://sozerodev.tistory.com/216#entry216comment</comments>
      <pubDate>Fri, 27 Oct 2023 11:28:04 +0900</pubDate>
    </item>
    <item>
      <title>아주 간단하게 Nginx vs Apache 정리</title>
      <link>https://sozerodev.tistory.com/215</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대충 누군가 셋팅해놨던 아파치와 Nginx만을 써보다가 이제 Nginx Configuration에 대해 좀더 알아봐야겠다 생각했다.&lt;br /&gt;언제까지나 남이 셋팅해준 서버에 기대며 살 순 없으니까... 그것이..개발자니까..(우웁..)&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;548&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3hz0a/btsyIHFGlYu/YmKxufmNVfOjs5XlBCTph0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3hz0a/btsyIHFGlYu/YmKxufmNVfOjs5XlBCTph0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3hz0a/btsyIHFGlYu/YmKxufmNVfOjs5XlBCTph0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3hz0a%2FbtsyIHFGlYu%2FYmKxufmNVfOjs5XlBCTph0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;548&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;548&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대충 웹서버하면 원픽으로 떠오르던 것이 &lt;code&gt;아파치&lt;/code&gt; 였는데 어느 순간부터 &lt;code&gt;Nginx&lt;/code&gt; 가 급부상하기 시작했을까.&lt;br /&gt;무슨 차이가 있길래 Nginx라는 녀석이 아파치를 앞질러서 급부상하기 시작했나?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 말하자면 Nginx는 아파치보다 큰 트래픽에 훨씬 유용하다고 볼 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;예를 들어 1000명의 사용자가 동시에 서버에 http 요청을 보내는 경우를 생각해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;아파치의 경우 1000명에 맞춰서 1000개의 멀티프로세스 쓰레드를 생성해야 하는 반면,&lt;br /&gt;Nginx는 하나의 프로세스로 1000명의 요청을 동시에 수행할 수 있다.&lt;br /&gt;Nginx는 &lt;b&gt;비동기로 응답&lt;/b&gt;을 해주는 시스템이기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 &lt;b&gt;더 적은 자원을 통해 더 효율적으로&lt;/b&gt; 시스템을 돌릴 수 있게 된다.&lt;br /&gt;요즘에는 점점 서버를 클라우드에서 운용하는 경우가 늘고 있는데, 비싼 서버비용을 조금이라도 아끼려면 자원을 조금이라도 더 아껴야 하는 상황에서 단연코 Nginx가 아파치보다 더 나은 이점을 가질 수 있다고 볼 수 있겠다.&lt;/p&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;br /&gt;예를 들어 아파치의 경우 configuration셋팅이 좀더 다양하고 추후에 관련 모듈을 추가할 때 좀더 용이한 반면,&lt;br /&gt;Nginx는 이미 기본셋팅이 많이 되어 있어서 크게 손볼 것은 없다는 장점은 가지지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 다시 말하면 뭔가를 건드려서 추가하기는 쉽지 않다는 점이 있겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아파치의 경우 여러 플랫폼에 사용될 목적(회사 인프라넷이라든가,,자료 공유용이라든가..) 으로 만들어졌기 때문에 오직 웹서버만을 위해 만들어진 Nginx와 비교했을 때 태생적으로 느릴 수 밖에 없겠다.&lt;/p&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;참고&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.howtogeek.com/devops/apache-vs-nginx-which-web-server-is-the-better-choice/&quot;&gt;https://www.howtogeek.com/devops/apache-vs-nginx-which-web-server-is-the-better-choice/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1697552604843&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Apache vs. Nginx: Which Web Server Is the Better Choice?&quot; data-og-description=&quot;Nginx and Apache combined serve over 50% of the web.&quot; data-og-host=&quot;www.howtogeek.com&quot; data-og-source-url=&quot;https://www.howtogeek.com/devops/apache-vs-nginx-which-web-server-is-the-better-choice/&quot; data-og-url=&quot;https://www.howtogeek.com/devops/apache-vs-nginx-which-web-server-is-the-better-choice/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/d4D1Iq/hyUgUpJNdp/HKB1GMrPvB1oICRappJp51/img.png?width=700&amp;amp;height=300&amp;amp;face=0_0_700_300,https://scrap.kakaocdn.net/dn/X6aGh/hyUgV919TE/BSO1ckWOCVKCLvYoNzkfV1/img.png?width=700&amp;amp;height=300&amp;amp;face=0_0_700_300&quot;&gt;&lt;a href=&quot;https://www.howtogeek.com/devops/apache-vs-nginx-which-web-server-is-the-better-choice/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.howtogeek.com/devops/apache-vs-nginx-which-web-server-is-the-better-choice/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/d4D1Iq/hyUgUpJNdp/HKB1GMrPvB1oICRappJp51/img.png?width=700&amp;amp;height=300&amp;amp;face=0_0_700_300,https://scrap.kakaocdn.net/dn/X6aGh/hyUgV919TE/BSO1ckWOCVKCLvYoNzkfV1/img.png?width=700&amp;amp;height=300&amp;amp;face=0_0_700_300');&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;Apache vs. Nginx: Which Web Server Is the Better Choice?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Nginx and Apache combined serve over 50% of the web.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.howtogeek.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.sumologic.com/blog/nginx-vs-apache/&quot;&gt;https://www.sumologic.com/blog/nginx-vs-apache/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1697552604944&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;NGINX vs Apache: An Honest Guide | Sumo Logic&quot; data-og-description=&quot;NGINX vs Apache. Understanding these differences is essential for making the right choice when deciding between NGINX and Apache as a Web hosting solution.&quot; data-og-host=&quot;www.sumologic.com&quot; data-og-source-url=&quot;https://www.sumologic.com/blog/nginx-vs-apache/&quot; data-og-url=&quot;https://www.sumologic.com/blog/nginx-vs-apache/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dV8dyH/hyUgHRtB3z/LOZdFjzoisIoPE8zyQg010/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cguqvz/hyUgQ1W77u/1tXcU7AUKmcvkPobLVuhc1/img.jpg?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418&quot;&gt;&lt;a href=&quot;https://www.sumologic.com/blog/nginx-vs-apache/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.sumologic.com/blog/nginx-vs-apache/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dV8dyH/hyUgHRtB3z/LOZdFjzoisIoPE8zyQg010/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cguqvz/hyUgQ1W77u/1tXcU7AUKmcvkPobLVuhc1/img.jpg?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418');&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;NGINX vs Apache: An Honest Guide | Sumo Logic&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;NGINX vs Apache. Understanding these differences is essential for making the right choice when deciding between NGINX and Apache as a Web hosting solution.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.sumologic.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Server</category>
      <author>sovelop</author>
      <guid isPermaLink="true">https://sozerodev.tistory.com/215</guid>
      <comments>https://sozerodev.tistory.com/215#entry215comment</comments>
      <pubDate>Tue, 17 Oct 2023 23:23:30 +0900</pubDate>
    </item>
    <item>
      <title>[Nginx] Failed to parse PID from file /run/nginx.pid: Invalid argument 해결법</title>
      <link>https://sozerodev.tistory.com/214</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;sudo systemctl nginx status&lt;/code&gt; 를 눌렀을 때 괜히 이런 찝찝한 화면이 나온다면?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;75&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R5x8f/btsyttirD1V/qTK3xwD4IT7vI2l3BUYfZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R5x8f/btsyttirD1V/qTK3xwD4IT7vI2l3BUYfZK/img.png&quot; data-alt=&quot;너 뭔데....왜 나온건데...&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R5x8f/btsyttirD1V/qTK3xwD4IT7vI2l3BUYfZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR5x8f%2FbtsyttirD1V%2FqTK3xwD4IT7vI2l3BUYfZK%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;761&quot; height=&quot;75&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;75&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;너 뭔데....왜 나온건데...&lt;/figcaption&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;처음엔 nginx.conf 파일의 pid경로가 /run/nginx.pid; 가 아닌 /var/run/nginx.pid로 바꿔줘야 하나? 했는데 그건 아니고...&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;334&quot; data-origin-height=&quot;59&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvzt1m/btsytZ2rC1e/gZqpkQUQtQ5I0J4IH6z021/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvzt1m/btsytZ2rC1e/gZqpkQUQtQ5I0J4IH6z021/img.png&quot; data-alt=&quot;왜냐하면 /var/run이나 /run이나 같은겁니다 같은거.. symbolic link되어 있어요~&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvzt1m/btsytZ2rC1e/gZqpkQUQtQ5I0J4IH6z021/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbvzt1m%2FbtsytZ2rC1e%2FgZqpkQUQtQ5I0J4IH6z021%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;334&quot; height=&quot;59&quot; data-origin-width=&quot;334&quot; data-origin-height=&quot;59&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;왜냐하면 /var/run이나 /run이나 같은겁니다 같은거.. symbolic link되어 있어요~&lt;/figcaption&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;sudo vi /usr/lib/systemd/nginx.service&lt;/code&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;code&gt;ExecStartPost=/bin/sleep 1&lt;/code&gt; 를 추가해주면 끝난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 다시&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1697434638840&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl daemon-reload
systemctl restart nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 통해 nginx를 재부팅해주면 끝.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;65&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0v67O/btsyCh8sfXO/KFMUZwJLxQSsxciSSldNU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0v67O/btsyCh8sfXO/KFMUZwJLxQSsxciSSldNU1/img.png&quot; data-alt=&quot;없어졌다!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0v67O/btsyCh8sfXO/KFMUZwJLxQSsxciSSldNU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0v67O%2FbtsyCh8sfXO%2FKFMUZwJLxQSsxciSSldNU1%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;742&quot; height=&quot;65&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;65&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;없어졌다!&lt;/figcaption&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;심각한 에러는 아닌데 그냥 찝찝하니까 없애준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&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.webconn.tech/kb/failed-to-parse-pid-from-file-run-nginx-pid-invalid-argument&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.webconn.tech/kb/failed-to-parse-pid-from-file-run-nginx-pid-invalid-argument&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1697434587644&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;NGINX error: Failed to parse PID from file /run/nginx.pid: Invalid argument | Webconn&quot; data-og-description=&quot;The nginx service status is active, but an error message is Failed to parse PID from file /run/nginx.pid: Invalid argument. Steps to resolve.&quot; data-og-host=&quot;www.webconn.tech&quot; data-og-source-url=&quot;https://www.webconn.tech/kb/failed-to-parse-pid-from-file-run-nginx-pid-invalid-argument&quot; data-og-url=&quot;https://www.webconn.tech/kb/failed-to-parse-pid-from-file-run-nginx-pid-invalid-argument&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Mg0yX/hyUd1jgLS5/H01LL9GD953nqn8cbxbc3K/img.png?width=209&amp;amp;height=242&amp;amp;face=0_0_209_242,https://scrap.kakaocdn.net/dn/bGuhcP/hyUdXVvjBv/hwOKykDHJixA084kuskLGk/img.png?width=209&amp;amp;height=242&amp;amp;face=0_0_209_242,https://scrap.kakaocdn.net/dn/bY20jg/hyUdPC9oSg/VvDy0i0yaHZg1hJTo5FPy0/img.png?width=1216&amp;amp;height=684&amp;amp;face=0_0_1216_684&quot;&gt;&lt;a href=&quot;https://www.webconn.tech/kb/failed-to-parse-pid-from-file-run-nginx-pid-invalid-argument&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.webconn.tech/kb/failed-to-parse-pid-from-file-run-nginx-pid-invalid-argument&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Mg0yX/hyUd1jgLS5/H01LL9GD953nqn8cbxbc3K/img.png?width=209&amp;amp;height=242&amp;amp;face=0_0_209_242,https://scrap.kakaocdn.net/dn/bGuhcP/hyUdXVvjBv/hwOKykDHJixA084kuskLGk/img.png?width=209&amp;amp;height=242&amp;amp;face=0_0_209_242,https://scrap.kakaocdn.net/dn/bY20jg/hyUdPC9oSg/VvDy0i0yaHZg1hJTo5FPy0/img.png?width=1216&amp;amp;height=684&amp;amp;face=0_0_1216_684');&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;NGINX error: Failed to parse PID from file /run/nginx.pid: Invalid argument | Webconn&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The nginx service status is active, but an error message is Failed to parse PID from file /run/nginx.pid: Invalid argument. Steps to resolve.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.webconn.tech&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Server</category>
      <author>sovelop</author>
      <guid isPermaLink="true">https://sozerodev.tistory.com/214</guid>
      <comments>https://sozerodev.tistory.com/214#entry214comment</comments>
      <pubDate>Mon, 16 Oct 2023 14:38:08 +0900</pubDate>
    </item>
  </channel>
</rss>