<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>우왕좌왕 개발세계</title>
    <link>https://khaynugn.tistory.com/</link>
    <description>나처럼 우왕좌왕할 사람들을 위해 기록을 시작했습니다</description>
    <language>ko</language>
    <pubDate>Thu, 9 Apr 2026 08:33:56 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>khaynugn</managingEditor>
    <image>
      <title>우왕좌왕 개발세계</title>
      <url>https://tistory1.daumcdn.net/tistory/5721699/attach/18aa4ebc643246418931ac0ba5297245</url>
      <link>https://khaynugn.tistory.com</link>
    </image>
    <item>
      <title>[MySQL] 오류해결 : Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_unicode_ci,IMPLICIT) for operation '='</title>
      <link>https://khaynugn.tistory.com/27</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;발생&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새 테이블을 추가하고 다른 테이블과 조인하려고 하는데 아래와 같은 에러가 발생&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_unicode_ci,IMPLICIT) for operation '='&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;원인&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 테이블과 새 테이블의 Collate 값이 달라서 발생&lt;/p&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;b&gt;해결&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1683089491779&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER TABLE {테이블명} CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>DBMS/MySQL</category>
      <category>collate</category>
      <category>collations</category>
      <category>error</category>
      <category>Illegal mix</category>
      <category>MySQL</category>
      <category>Unicode</category>
      <category>utf8mb4</category>
      <author>khaynugn</author>
      <guid isPermaLink="true">https://khaynugn.tistory.com/27</guid>
      <comments>https://khaynugn.tistory.com/27#entry27comment</comments>
      <pubDate>Wed, 3 May 2023 13:52:15 +0900</pubDate>
    </item>
    <item>
      <title>[NestJS] 간단한 미들웨어를 만들어 IP 차단하기</title>
      <link>https://khaynugn.tistory.com/26</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;미들웨어 파일 생성&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1683088629341&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// ./middleware/IpFilterMiddleware.ts

import { Injectable, NestMiddleware, UnauthorizedException } from '@nestjs/common';
import { NextFunction, Request, Response } from 'express';

@Injectable()
export class IpFilterMiddleware implements NestMiddleware {
    async use(req: Request, res: Response, next: NextFunction) {
      const ipAddress = req.headers['cf-connecting-ip'];

      if (ipAddress == '차단하고 싶은 IP') {
        throw new UnauthorizedException('invalid ip');
      }

      next();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;AppModule에 미들웨어 주입&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1683088814815&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// ./app.module.ts

import { MiddlewareConsumer, NestModule } from '@nestjs/common';
import { IpFilterMiddleware } from './middleware/IpFilterMiddleware';

@Module({
  imports: [...],
  controllers: [...],
  providers: [...],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(IpFilterMiddleware).forRoutes('/**');
  }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Language/Javascript</category>
      <category>ip block</category>
      <category>ip filter</category>
      <category>JavaScript</category>
      <category>middleware</category>
      <category>nestjs</category>
      <author>khaynugn</author>
      <guid isPermaLink="true">https://khaynugn.tistory.com/26</guid>
      <comments>https://khaynugn.tistory.com/26#entry26comment</comments>
      <pubDate>Wed, 3 May 2023 13:44:02 +0900</pubDate>
    </item>
    <item>
      <title>[Git] Push 되돌리기</title>
      <link>https://khaynugn.tistory.com/25</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.&amp;nbsp; 아래 명령어를 통해 되돌리고 싶은 시점의 커밋번호 확인&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1681181906698&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git log --oneline&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;br /&gt;&lt;b&gt;2. 커밋 시점으로 리셋&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1681181939896&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git reset --hard {커밋번호}&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;br /&gt;&lt;b&gt;추가) 아래 명령어로 푸쉬내역까지 되돌릴 수 있음&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1681181980092&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git push -f origin master&lt;/code&gt;&lt;/pre&gt;</description>
      <category>DevOps/Git</category>
      <category>Git</category>
      <category>Push</category>
      <category>rollback</category>
      <category>깃</category>
      <category>되돌리기</category>
      <category>리셋</category>
      <category>취소</category>
      <category>푸쉬</category>
      <author>khaynugn</author>
      <guid isPermaLink="true">https://khaynugn.tistory.com/25</guid>
      <comments>https://khaynugn.tistory.com/25#entry25comment</comments>
      <pubDate>Tue, 11 Apr 2023 12:01:09 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 패스워드 없이 sudo 권한 사용</title>
      <link>https://khaynugn.tistory.com/24</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. /etc/sudoers 파일 편집&lt;/p&gt;
&lt;pre id=&quot;code_1681108252457&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vi /etc/sudoers.d&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 아래 내용 추가 후 저장&lt;/p&gt;
&lt;pre id=&quot;code_1681108376597&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...

{사용자명} ALL=NOPASSWD: ALL&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Server/Linux</category>
      <category>Linux</category>
      <category>password</category>
      <category>sudo</category>
      <category>sudoers</category>
      <category>권한</category>
      <category>리눅스</category>
      <category>비밀번호</category>
      <category>패스워드</category>
      <author>khaynugn</author>
      <guid isPermaLink="true">https://khaynugn.tistory.com/24</guid>
      <comments>https://khaynugn.tistory.com/24#entry24comment</comments>
      <pubDate>Mon, 10 Apr 2023 15:32:50 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 파일&amp;amp;디렉토리의 소유권 변경하는 명령어</title>
      <link>https://khaynugn.tistory.com/23</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;파일 소유권 변경&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1681107815960&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chown {소유권자}:{그룹식별자} {파일명}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;디렉토리 소유권 변경&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1681107856929&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chown {소유권자}:{그룹식별자} {디렉토리명}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;디렉토리 소유권 변경 (하위 디렉토리까지)&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1681107898344&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chown -R {소유권자}:{그룹식별자} {디렉토리명}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Server/Linux</category>
      <category>디렉토리</category>
      <category>리눅스</category>
      <category>변경</category>
      <category>소유권</category>
      <category>파일</category>
      <author>khaynugn</author>
      <guid isPermaLink="true">https://khaynugn.tistory.com/23</guid>
      <comments>https://khaynugn.tistory.com/23#entry23comment</comments>
      <pubDate>Mon, 10 Apr 2023 15:26:11 +0900</pubDate>
    </item>
    <item>
      <title>[Javascript] axios 라이브러리 사용시 timeout 설정하기</title>
      <link>https://khaynugn.tistory.com/22</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;axios 라이브러리는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;기본적으로 timeout이 설정되지 않으므로,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;아래와 같이&lt;/span&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;&lt;span&gt; 'setT&lt;/span&gt;imeout' 옵션을 지정해주는게 안전하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;GET&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1680770306341&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const baseURI = 'https://apitest.com/test'
axios.get(baseURI, { setTimeout: 1000 }); // 1초&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;POST&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1680770618202&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const baseURI = 'https://apitest.com/test'
const body = {
  key: 'value'
};
axios.post(baseURI, body, { setTimeout: 5000 }); // 5초&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Language/Javascript</category>
      <author>khaynugn</author>
      <guid isPermaLink="true">https://khaynugn.tistory.com/22</guid>
      <comments>https://khaynugn.tistory.com/22#entry22comment</comments>
      <pubDate>Thu, 6 Apr 2023 17:46:27 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL] 각 행 별로 점수 비율 구하기</title>
      <link>https://khaynugn.tistory.com/21</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;백분율로 구하기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 점수(score) 대비 각 사용자별 점수(score)를 백분율로 나타내기&lt;/p&gt;
&lt;pre id=&quot;code_1680769480759&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT name
     , score
     , ROUND(CONVERT(float, score) / SUM(score) OVER(), 2) * 100 AS score_percent
FROM users&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DBMS/MySQL</category>
      <category>MySQL</category>
      <category>백분율</category>
      <category>비율</category>
      <category>퍼센트</category>
      <author>khaynugn</author>
      <guid isPermaLink="true">https://khaynugn.tistory.com/21</guid>
      <comments>https://khaynugn.tistory.com/21#entry21comment</comments>
      <pubDate>Thu, 6 Apr 2023 17:27:32 +0900</pubDate>
    </item>
    <item>
      <title>[Go] pprof로 프로그램 CPU, 메모리 사용 정보 분석하기</title>
      <link>https://khaynugn.tistory.com/20</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 시각화 된 자료로 보기 위해 graphviz 설치&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1676855763618&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt install graphviz&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 코드 작성&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1676855813956&quot; class=&quot;go&quot; data-ke-language=&quot;go&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package main

import (
    &quot;http&quot;
    _ &quot;net/http/pprof&quot; // 링크해준다.
    ...
)

func main() {
    ...
    
    go func() {
     http.ListenAndServe(&quot;localhost:6060&quot;, nil)	// 6060 포트를 열어준다.
    }()
    
    ...
}&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. go tool을 이용하여 프로파일링&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU 사용정보 분석 (20초)&lt;/p&gt;
&lt;pre id=&quot;code_1676857020594&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;go tool pprof http://localhost:6060/debug/pprof/profile?seconds=20&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;메모리 사용정보 분석 (20초)&lt;/p&gt;
&lt;pre id=&quot;code_1676857057472&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;go tool pprof -png http://localhost:6060/debug/pprof/heap?seconds=20 &amp;gt; heap.pn&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;pre id=&quot;code_1676857179426&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;go tool pprof -http=:9999 /root/pprof/pprof.__debug_bin.alloc_objects.alloc_space.inuse_objects.inuse_space.001.pb.gz&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Language/Go</category>
      <category>go</category>
      <category>Go cpu</category>
      <category>Go memory</category>
      <category>Go memory leak</category>
      <category>Go pprof</category>
      <category>Go profiling</category>
      <category>Go tool</category>
      <category>Go 메모리 누수</category>
      <category>golang</category>
      <author>khaynugn</author>
      <guid isPermaLink="true">https://khaynugn.tistory.com/20</guid>
      <comments>https://khaynugn.tistory.com/20#entry20comment</comments>
      <pubDate>Mon, 20 Feb 2023 11:06:16 +0900</pubDate>
    </item>
    <item>
      <title>[VSCode] 자바스크립트 확장 플러그인 ESLint &amp;amp; Prettier 사용법</title>
      <link>https://khaynugn.tistory.com/19</link>
      <description>&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;플러그인명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;ESLint&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;문법 상 오류 방지 및 교정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Prettier&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. VSCode에서 확장 플러그인 설치&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;VSCode extensions에서 'ESLint', 'Prettier' 검색 후 설치 (Node.js 필요)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 터미널에서 필수 플러그인 설치&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1677719300170&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* 1. 필수 플러그인 설치 */
yarn add -D eslint prettier

/* 2. config 파일 생성 (프로젝트 root 위치에 생성됨) */
npx eslint --init // 개발환경에 맞게 대답 선택 (아래 질문들은 보기와 같이 선택 권장)
  How would you like to use ESLint?
  &amp;gt; To check syntax and find problems

  What format do you want your config file to be in?
  &amp;gt; Javascript

  Would you like to install them now?
  &amp;gt; Yes

  Which package manager do you want to use?
  &amp;gt; Yarn

/* 3. 기타 플러그인 설치 */
yarn add -D eslint-config-prettier // eslint의 코드 스타일 규칙을 비활성화 (prettier와 conflict 방지)
yarn add -D eslint-plugin-prettier // prettier를 eslint 플러그인으로 추가 (포맷오류를 eslint 오류로 출력)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;yarn을 통한 설치를 권장하나, npm으로 설치를 원하는 경우 위 코드에서 &amp;lsquo;yarn add&amp;rsquo; 를 &amp;lsquo;npm install&amp;rsquo; 로 변경해서 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 프로젝트 루트 경로에 있는 '.eslintrc.js' 파일 일부 수정&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1677719314878&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* .eslintrc.js */

module.exports = {
  env: {
    browser: true,
    node: true, // Node.js 전역 변수 및 Node.js 범위 지정
    es2022: true, // ECMAScript 2022 전역 추가, ecmaVersion 파서 옵션을 13으로 설정
  },
  ignorePatterns: ['node_modules/'], // 해당 폴더는 형식 무시
  extends: [
    'eslint:recommended',
    'plugin:@typescript-eslint/recommended',
    'plugin:prettier/recommended', // eslint와 prettier 간 충돌 방지
  ],
  parser: '@typescript-eslint/parser',
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module',
  },
  plugins: ['@typescript-eslint', 'prettier'],
  rules: {
    'prettier/prettier': ['warn'], // prettier 형식에 맞지 않을 경우 경고로 표시
		@typescript-eslint/no-var-requires': 'off', // typescript: 변수 requires 사용 제한
  },
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 프로젝트 루트 경로에 .prettierrc.js 파일 생성&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1677719326732&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* .prettierrc.js */

module.exports = {
  &quot;printWidth&quot;: 80, // 한 줄 최대 문자 수
  &quot;tabWidth&quot;: 2, // 들여쓰기 너비
  &quot;semi&quot;: true, // 문장 끝 세미콜론 사용 여부
  &quot;useTabs&quot;: false, // 탭 사용 여부
  &quot;singleQuote&quot;: true, // 작은 따옴표로 통일 여부
  &quot;bracketSpacing&quot;: true, // 중괄호 양 끝에 공백 추가 여부
  &quot;trailingComma&quot;: &quot;all&quot;, // 꼬리 콤마 사용
  &quot;arrowParens&quot;: &quot;avoid&quot;, // 화살표 함수 단일 인자 시, 괄호 생략
  &quot;proseWrap&quot;: &quot;preserve&quot;, // 마크다운 포매팅 제외
  &quot;endOfLine&quot;: &quot;auto&quot;, // 개행문자 유지 (혼합일 경우, 첫 줄 개행문자로 통일)
  &quot;vueIndentScriptAndStyle&quot;: true, // vue: 파일에서 태그 안에 있는 코드 개행
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;추후 해당 파일 내용 수정 시 VSCode를 재시작해야 기존 규칙과 충돌이 나지 않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. 저장 시 포맷에 맞게 자동 변환 기능 활성화 (VSCode 설정 파일 수정)&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Command+Shift+P &amp;gt; Open Settings.json(JSON)&lt;/p&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;/* settings.json */

...
&quot;files.autoSave&quot;: &quot;onFocusChange&quot;,
&quot;editor.formatOnSave&quot;: true, // 저장시 자동으로 포맷팅
&quot;editor.defaultFormatter&quot;: &quot;esbenp.prettier-vscode&quot;, // 기본 포맷터를 prettier로 설정
// &quot;editor.codeActionsOnSave&quot;: { // eslint에 의한 자동 수정 활성화 (필요한 경우 추가)
//   &quot;source.fixAll.eslint&quot;: true
// },
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;6. 안전한 적용을 위해 VSCode 완전히 종료 후 다시 시작&lt;/b&gt;&lt;/h2&gt;</description>
      <category>IDE/VSCode</category>
      <category>Code Formatter</category>
      <category>eslint</category>
      <category>Extentions</category>
      <category>javascript extentions</category>
      <category>plugin</category>
      <category>prettier</category>
      <category>vscode</category>
      <category>코드포맷터</category>
      <category>확장프로그램</category>
      <category>확장플러그인</category>
      <author>khaynugn</author>
      <guid isPermaLink="true">https://khaynugn.tistory.com/19</guid>
      <comments>https://khaynugn.tistory.com/19#entry19comment</comments>
      <pubDate>Wed, 15 Feb 2023 13:50:50 +0900</pubDate>
    </item>
    <item>
      <title>[Nginx] 프록시 설정하는 방법</title>
      <link>https://khaynugn.tistory.com/18</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. conf 파일 수정 (/etc/nginx/nginx.conf)&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1676429784214&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;server {
	listen80 default_server;
	...

	location / {
		proxy_http_version 1.1; 		#추가
		proxy_pass http://127.0.0.1:3300;	#추가
	}

	...
}&lt;/code&gt;&lt;/pre&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;b&gt;2. 서버 네트워크, 방화벽 설정&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1676429845741&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 네트워크 연결 설정
setsebool -P httpd_can_network_connect 1

# 방화벽 설정
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --reload&lt;/code&gt;&lt;/pre&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;b&gt;3. 설정을 마쳤는데도 &quot;permission denied connecting to upstream&quot; 오류 발생시&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1676429878601&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
sudo semodule -i mynginx.pp&lt;/code&gt;&lt;/pre&gt;</description>
      <category>DevOps/Nginx</category>
      <author>khaynugn</author>
      <guid isPermaLink="true">https://khaynugn.tistory.com/18</guid>
      <comments>https://khaynugn.tistory.com/18#entry18comment</comments>
      <pubDate>Wed, 15 Feb 2023 11:59:34 +0900</pubDate>
    </item>
  </channel>
</rss>