<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>전세계 4.5% 리눅스 유저!!</title>
    <link>https://gizmo80.tistory.com/</link>
    <description>최근 리눅스 데스크톱 점유율이 올라가서 
전세계 4.5% 리눅스 유저가 되었습니다~
리눅스 한번 써보세요~ 쓸만 합니다~ 
요즘에는 스팀 게임도 돌아 갑니다~ 
스팀덱도 리눅스 인걸 아시려나~ ㅎ
그리고 아이즈원 팬 이었습니다...</description>
    <language>ko</language>
    <pubDate>Sun, 10 May 2026 22:11:15 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>라면사리추가요</managingEditor>
    <image>
      <title>전세계 4.5% 리눅스 유저!!</title>
      <url>https://tistory1.daumcdn.net/tistory/1953285/attach/5c03987bc4b44ffbbaeb0cb49464afd6</url>
      <link>https://gizmo80.tistory.com</link>
    </image>
    <item>
      <title>[Linux]Thunderbird 백그라운드 실행</title>
      <link>https://gizmo80.tistory.com/134</link>
      <description>&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;systray-x라는 프로그램이고, Linux, Windows 둘다 호환이 되는거 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 리눅스에서 사용하기 때문에 리눅스 버전으로 소개 하고자 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지원하는 배포판은, openSuSE, Ubuntu, Debian, Fedora, Manjaro, Arch, MX가 있고, 당연히 한글은 지원 안한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KDE, GNOME을 지원하고, Wayland도 지원을 하는거 같지만 해보지는 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Ximi1970/systray-x&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Ximi1970/systray-x&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762309895538&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - Ximi1970/systray-x: SysTray-X: A system tray extension for Thunderbird. Needs both the addon AND the companion app inst&quot; data-og-description=&quot;SysTray-X: A system tray extension for Thunderbird. Needs both the addon AND the companion app installed to work. Will not work with TB flatpaks or snaps. - Ximi1970/systray-x&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Ximi1970/systray-x&quot; data-og-url=&quot;https://github.com/Ximi1970/systray-x&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cqr4Xp/hyZMLbPAop/k85zxTMIdyFVXPFnXCGbV0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/4CPrU/hyZMNOfRDD/qucEbneJ9qkR8wZkCWMHA1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Ximi1970/systray-x&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Ximi1970/systray-x&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cqr4Xp/hyZMLbPAop/k85zxTMIdyFVXPFnXCGbV0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/4CPrU/hyZMNOfRDD/qucEbneJ9qkR8wZkCWMHA1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;GitHub - Ximi1970/systray-x: SysTray-X: A system tray extension for Thunderbird. Needs both the addon AND the companion app inst&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SysTray-X: A system tray extension for Thunderbird. Needs both the addon AND the companion app installed to work. Will not work with TB flatpaks or snaps. - Ximi1970/systray-x&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안내 페이지가 죄다 영어라서 어지럽겠지만, 어렵지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예로 본인이 사용하고 있는 하모니카 8.0을 기준으로 설명을 해보겠다. 하모니카 8.0은 우분투 24.04 LTS를 베이스로 하고 있기 때문에, xUbuntu섹션에 버전별로 있는데, 24.04를 따라 하면 된다.&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;Remove the Thunderbird snap package:&lt;/p&gt;
&lt;div style=&quot;background-color: #151b23; color: #f0f6fc; text-align: start;&quot;&gt;
&lt;pre class=&quot;shell&quot; style=&quot;background-color: #151b23; color: #f0f6fc;&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;sudo apt remove thunderbird&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Install the deb Thunderbird repository:&lt;/p&gt;
&lt;div style=&quot;background-color: #151b23; color: #f0f6fc; text-align: start;&quot;&gt;
&lt;pre class=&quot;shell&quot; style=&quot;background-color: #151b23; color: #f0f6fc;&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;sudo add-apt-repository ppa:mozillateam/ppa
sudo nano /etc/apt/preferences.d/mozillateamppa&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Insert this into the preferences file (it blocks the snap package): (위 mozillateamppa에 아래 내용을 입력후 저장 해야 된다. )&lt;/p&gt;
&lt;div style=&quot;background-color: #151b23; color: #f0f6fc; text-align: start;&quot;&gt;
&lt;pre class=&quot;shell&quot; style=&quot;background-color: #151b23; color: #f0f6fc;&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;Package: thunderbird*
Pin: release o=LP-PPA-mozillateam
Pin-Priority: 1001&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Save the file.&lt;/p&gt;
&lt;p style=&quot;background-color: #0d1117; color: #f0f6fc; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Refresh the repositories and install the deb version of Thunderbird:&lt;/p&gt;
&lt;div style=&quot;background-color: #151b23; color: #f0f6fc; text-align: start;&quot;&gt;
&lt;pre class=&quot;properties&quot; style=&quot;background-color: #151b23; color: #f0f6fc;&quot;&gt;&lt;code&gt;sudo apt update
sudo apt install thunderbird&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Now install the SysTray-X repository:&lt;/p&gt;
&lt;div style=&quot;background-color: #151b23; color: #f0f6fc; text-align: start;&quot;&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;background-color: #151b23; color: #f0f6fc;&quot;&gt;&lt;code&gt;wget -q https://download.opensuse.org/repositories/home:/Ximi1970/xUbuntu_24.04/Release.key
sudo mv -f  Release.key  /etc/apt/trusted.gpg.d/Systray-x.Ximi1970.asc
sudo bash -c 'echo &quot;deb https://download.opensuse.org/repositories/home:/Ximi1970:/Mozilla:/Add-ons/xUbuntu_24.04 ./&quot; &amp;gt; /etc/apt/sources.list.d/systray-x.list'
sudo apt update&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 SysTray-X 설치를 하면 끝난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SysTray-X 배포판 별로 있기 때문에 잘 확인하고 설치 하면 되고, 나는 우분투 베이스 이기 때문에 GNOME으로 설치를 해준다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #151b23; color: #f0f6fc; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo apt install systray-x-gnome&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;설치하고 아무런 액션이 없다. 당황하지 말고 썬더 버드를 실행 하면 트레이 영역에 아이콘이 하나 뜨는걸 볼 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>App &amp;amp; Util</category>
      <category>linux</category>
      <category>Thunderbird</category>
      <category>리눅스</category>
      <category>백그라운드</category>
      <category>썬더버드</category>
      <category>종료 방지</category>
      <category>종료방지</category>
      <category>천둥새</category>
      <author>라면사리추가요</author>
      <guid isPermaLink="true">https://gizmo80.tistory.com/134</guid>
      <comments>https://gizmo80.tistory.com/134#entry134comment</comments>
      <pubDate>Wed, 5 Nov 2025 11:39:25 +0900</pubDate>
    </item>
    <item>
      <title>[Windows] 아웃룩 종료 방지</title>
      <link>https://gizmo80.tistory.com/133</link>
      <description>&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;개인이 만든 프로그램 이기는 하지만 현 시점까지는 잘 작동 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트 해본 아웃룩 버전은 회사 Office365에서 다운 받은 아웃룩 뿐이 테스트 안해봤고, 제작자도 최신 버전만 된다고 했기 때문에, 나머지 이전 버전들은 테스트 못해봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Palsternakka/OutlookWindowHook/releases/tag/v1.0.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Palsternakka/OutlookWindowHook/releases/tag/v1.0.0&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762309095809&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Release v1.0.0 &amp;middot; Palsternakka/OutlookWindowHook&quot; data-og-description=&quot;Sorry, something went wrong. No results found&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Palsternakka/OutlookWindowHook/releases/tag/v1.0.0&quot; data-og-url=&quot;https://github.com/Palsternakka/OutlookWindowHook/releases/tag/v1.0.0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Xquee/hyZM3oq0XR/23w55qJNosYFx6dVVTTGjk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/dNBl42/hyZMxclljQ/dybMZEHsPnnlcMN7pZoXlk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Palsternakka/OutlookWindowHook/releases/tag/v1.0.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Palsternakka/OutlookWindowHook/releases/tag/v1.0.0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Xquee/hyZM3oq0XR/23w55qJNosYFx6dVVTTGjk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/dNBl42/hyZMxclljQ/dybMZEHsPnnlcMN7pZoXlk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;Release v1.0.0 &amp;middot; Palsternakka/OutlookWindowHook&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Sorry, something went wrong. No results found&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 링크에서 OutlookWindowsHook-Installer.msi 다운 받아 설치 하고, 실행해 주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 실행하면 트레이 아이콘에 Outlook Window Hook 이라고 생기는데 오른쪽 클릭해서 Autostart 한번 클릭해 주면, 재부팅 할때 마다 자동 실행되고, 아웃룩을 실행하고 X 로 종료해도 종료되지 않고, 트레이에 남아 있는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>App &amp;amp; Util</category>
      <category>outlook</category>
      <category>Tray</category>
      <category>백그라운드</category>
      <category>아웃룩</category>
      <category>종료방지</category>
      <category>트레이</category>
      <category>트레이아이콘</category>
      <author>라면사리추가요</author>
      <guid isPermaLink="true">https://gizmo80.tistory.com/133</guid>
      <comments>https://gizmo80.tistory.com/133#entry133comment</comments>
      <pubDate>Wed, 5 Nov 2025 11:23:45 +0900</pubDate>
    </item>
    <item>
      <title>[Vue3]tui-editor vue3 wrapper</title>
      <link>https://gizmo80.tistory.com/125</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;2025-10-15 추가.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 Options API로 작성된 tui-editor wrapper를 이번에 사용할 일이 있어서 Composition로 바꿔 보았다.&lt;/p&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;javascript&quot; style=&quot;background-color: #151b23; color: #f0f6fc; text-align: start;&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;npm i @toast-ui/editor
npm i @toast-ui/editor-plugin-code-syntax-highlight
npm i @toast-ui/editor-plugin-color-syntax
npm i prismjs&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1760517135997&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
    &amp;lt;div class=&quot;toast-edit&quot; ref=&quot;tuiEditor&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script setup&amp;gt;
import &quot;@toast-ui/editor-plugin-code-syntax-highlight/dist/toastui-editor-plugin-code-syntax-highlight.css&quot;;
import &quot;tui-color-picker/dist/tui-color-picker.css&quot;;
import &quot;@toast-ui/editor-plugin-color-syntax/dist/toastui-editor-plugin-color-syntax.css&quot;;
import '@toast-ui/editor/dist/toastui-editor.css'; 
import '@toast-ui/editor/dist/toastui-editor-viewer.css';
import &quot;prismjs/themes/prism.css&quot;;

import colorSyntax from &quot;@toast-ui/editor-plugin-color-syntax&quot;;
import Prism from &quot;prismjs&quot;;
import &quot;prismjs/components/prism-c&quot;;
import &quot;prismjs/components/prism-cpp&quot;;
import &quot;prismjs/components/prism-java&quot;;
import &quot;prismjs/components/prism-python&quot;;
import &quot;@toast-ui/editor/dist/i18n/ko-kr&quot;;
import {Editor} from &quot;@toast-ui/editor&quot;;
import codeSyntaxHighlight from &quot;@toast-ui/editor-plugin-code-syntax-highlight&quot;;
import {onMounted, ref, watch} from &quot;vue&quot;;
import {consoleLog} from &quot;@/assets/js/common/common.js&quot;;

const emit = defineEmits([&quot;update:modelValue&quot;])
let tuiEditor = ref()
let editorText = ref(&quot;&quot;)

let editor = null

const props = defineProps({
    content: { type: String, default: &quot;&quot; },
    isViewer: { type: Boolean, default: false },
});

onMounted(() =&amp;gt; {

    doInit()

})

const setEditor = (isViewer) =&amp;gt; {

    editor = new Editor.factory({
        el: tuiEditor.value,
        height: '500px',
        viewer: isViewer,
        toolbarItems: [ //-- Toolbar 버튼,
            ['heading', 'bold', 'italic', 'strike'],
            ['hr', 'quote'],
            ['ul', 'ol', 'task', 'indent', 'outdent'],
            ['table', 'image', 'link'],
            ['code', 'codeblock'],
            ['scrollSync'],
        ],
        plugins: [
            colorSyntax,
            [codeSyntaxHighlight,{ highlighter: Prism }]
        ],
        initialValue: props.content,
        initialEditType: &quot;wysiwyg&quot;,
        language: &quot;en&quot;,
        events: {
            change: onChangeEditor,
        },
    })

}

/**
 * parant에 update:modelValue로 내용 전달.
 */
const onChangeEditor = () =&amp;gt; {

    editorText.value = editor.getHTML()
    emit(&quot;update:modelValue&quot;, editorText.value)
}

const doInit = () =&amp;gt; {
    consoleLog(&quot;Editor props.data&quot;, props.content)
    consoleLog(&quot;Editor props.isViewer&quot;, props.isViewer)
    setEditor(props.isViewer)

    consoleLog(&quot;Editor &quot;, editor)
    // editor.setHTML(props.data);
}

/**
 * viewer와 edit를 전환
 * @param isViewer edit: true, viewer: false
 */
const isViewMode = (isViewer) =&amp;gt; {
    consoleLog(&quot;isEditMode &quot;, isViewer)
    // editor.options.viewer = !isEdit

    editor.destroy() //-- 모드 전환을 위해 Destroy를 시킨다.
    setEditor(isViewer)
}

/**
 * emit을 통해서도 데이터를 전달 하지만,
 * 작성 또는 수정 완료후 getContents를 호출 하면,
 * 한번에 데이터를 다 받을수 있다.
 * @returns {UnwrapRef&amp;lt;string&amp;gt;}
 */
const getContents = () =&amp;gt; {
    return editorText.value
}

defineExpose({
    isViewMode,
    getContents
})
&amp;lt;/script&amp;gt;

&amp;lt;style scoped&amp;gt;
&amp;lt;/style&amp;gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tui-editor는 공식적으로 vue2만 지원을 해서 vue3로 된 자료 찾다가 아래 소스를 찾아서 적용해 보았다.&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
    &amp;lt;div class=&quot;toast-edit&quot; ref=&quot;tuiEditor&quot;&amp;gt;&amp;lt;/div&amp;gt;

&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
import &quot;prismjs/themes/prism.css&quot;;
import &quot;@toast-ui/editor-plugin-code-syntax-highlight/dist/toastui-editor-plugin-code-syntax-highlight.css&quot;;
import &quot;tui-color-picker/dist/tui-color-picker.css&quot;;
import &quot;@toast-ui/editor-plugin-color-syntax/dist/toastui-editor-plugin-color-syntax.css&quot;;
import '@toast-ui/editor/dist/toastui-editor.css'; // Editor's Style
import '@toast-ui/editor/dist/toastui-editor-viewer.css';

import colorSyntax from &quot;@toast-ui/editor-plugin-color-syntax&quot;;
import Prism from &quot;prismjs&quot;;
import &quot;prismjs/components/prism-c&quot;;
import &quot;prismjs/components/prism-cpp&quot;;
import &quot;prismjs/components/prism-java&quot;;
import &quot;prismjs/components/prism-python&quot;;
import &quot;@toast-ui/editor/dist/i18n/ko-kr&quot;;
import Editor from &quot;@toast-ui/editor&quot;;
import codeSyntaxHighlight from &quot;@toast-ui/editor-plugin-code-syntax-highlight&quot;;

let editor = null
// import api from &quot;../api&quot;;
export default {
    name: &quot;ToastEdtior&quot;,
    components: {
    },
    props: {
        data: {
            type: String,
            default: &quot;&quot;,
        },

    },
    data() {
        return {
            changedPrism: null,
            // editor: null,

        };
    },
    mounted() {
        this.changedPrism = Prism;

        this.setEditor();
        if (this.data) {
            try {
                editor.setMarkdown(this.data);
            } catch (e) {
                editor.setHTML(this.data);
            }
        }
    },
    methods: {
        setEditor(data) {
            editor = new Editor({
                el: this.$refs.tuiEditor,
                plugins: [
                    colorSyntax,
                    [codeSyntaxHighlight, { highlighter: this.changedPrism }],
                ],
                initialEditType: &quot;wysiwyg&quot;,
                language: &quot;ko&quot;,
                events: {
                    change: this.onChangeEditor,
                },
                // hooks: {
                    // addImageBlobHook: this.addImageBlobHook,
                // },
            });
        },

        // async addImageBlobHook(file, setText, type) {
        //     try {
        //         if (!file) return false;
        //
        //         // 이미지 제외 막기 처리하기
        //         if (file &amp;amp;&amp;amp; file.size &amp;gt; 5242880) {
        //             const size = (file.size / (1000 * 1000)).toFixed(1);
        //             alert(
        //                 `최대 업로드 사이즈(5 MB)를 초과 하였습니다.\n현재 사이즈 ${size}MB`
        //             );
        //
        //             return false;
        //         }
        //         // api 업로드 만들기
        //         const formData = new FormData();
        //         formData.append(&quot;image&quot;, file);
        //         const { data } = await api.uploadImageFile(formData);
        //         if (data.success === true) {
        //             setText(data.file_path, &quot;image&quot;);
        //         }
        //
        //         //
        //     } catch (e) {
        //         alert(&quot;파일 업로드에 실패하였습니다&quot;);
        //     }
        // },

        onChangeEditor() {
            this.editorText = editor.getMarkdown();

        },
    },
    watch: {
        // watch를 활용한 props 변경 감지
        data(newValue) {
            if (this.editorText !== newValue) {
                editor.setMarkdown(newValue);
            }
        },

        editorText(newValue, oldValue) {
            if (newValue !== oldValue) {
                this.$emit(&quot;setContent&quot;, editor.getMarkdown());
            }
        },
    },
};
&amp;lt;/script&amp;gt;

&amp;lt;style&amp;gt;

&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발 하신분은 data에 editor를 선언하고, 필요 할때 this.editor로 호출하게 개발을 하셨는데, 해당 소스를 가져와서 적용해보니 아래와 같은 오류가 났다. 그래서 이렇게 저렇게 테스트 해보다 editor객체를 멤버 변수로 빼서 테스트를 해보니 오류 없이 정상적으로 작동이 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같은 오류가 나오는 이유는 모르겠지만, 에디터에 값을 넣을때 오류가 난다. setHTML뿐 아니라, setMarkdown을 해도 동일한 오류가 난다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1699421661370&quot; class=&quot;css&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;index.js:833 Uncaught (in promise) RangeError: Applying a mismatched transaction
    at _EditorState.applyInner (index.js:833:19)
    at _EditorState.applyTransaction (index.js:797:45)
    at EditorView.dispatchTransaction (index.js:19588:46)
    at EditorView.dispatch (index.js:5506:33)
    at WysiwygEditor2.setModel (index.js:19676:19)
    at ToastUIEditorCore2.setHTML (index.js:22566:27)
    at Proxy.mounted (ToastEdtior.vue:51:29)
    at vue.runtime.esm-bundler.js:4625:88
    at callWithErrorHandling (vue.runtime.esm-bundler.js:1575:18)
    at callWithAsyncErrorHandling (vue.runtime.esm-bundler.js:1583:17)​&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;a href=&quot;https://loy124.tistory.com/393&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://loy124.tistory.com/393&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1699421171743&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;vue Toast UI Editor 적용기&quot; data-og-description=&quot;사내 프로젝트를 하던 도중 기존에 사용하던 에디터가 너무 오래되어 교체를 할 필요성이 생겨 에디터를 새로 적용하기로 하였고 고민하던 도중 nhn에서 운영하는 오픈소스인 Toast Ui를 활용하기&quot; data-og-host=&quot;loy124.tistory.com&quot; data-og-source-url=&quot;https://loy124.tistory.com/393&quot; data-og-url=&quot;https://loy124.tistory.com/393&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cbKIO8/hyUu21Xsek/NUsvWGE4i2vywoLiWRHRE0/img.png?width=800&amp;amp;height=438&amp;amp;face=0_0_800_438,https://scrap.kakaocdn.net/dn/btmQHN/hyUuYL1h3J/U2wvaar5FjD8HkOvK9dhs1/img.png?width=800&amp;amp;height=438&amp;amp;face=0_0_800_438,https://scrap.kakaocdn.net/dn/LhdKw/hyUuVV38jE/LeQDZFjPVyKCelTM2BgdEK/img.png?width=1303&amp;amp;height=675&amp;amp;face=0_0_1303_675&quot;&gt;&lt;a href=&quot;https://loy124.tistory.com/393&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://loy124.tistory.com/393&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cbKIO8/hyUu21Xsek/NUsvWGE4i2vywoLiWRHRE0/img.png?width=800&amp;amp;height=438&amp;amp;face=0_0_800_438,https://scrap.kakaocdn.net/dn/btmQHN/hyUuYL1h3J/U2wvaar5FjD8HkOvK9dhs1/img.png?width=800&amp;amp;height=438&amp;amp;face=0_0_800_438,https://scrap.kakaocdn.net/dn/LhdKw/hyUuVV38jE/LeQDZFjPVyKCelTM2BgdEK/img.png?width=1303&amp;amp;height=675&amp;amp;face=0_0_1303_675');&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;vue Toast UI Editor 적용기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;사내 프로젝트를 하던 도중 기존에 사용하던 에디터가 너무 오래되어 교체를 할 필요성이 생겨 에디터를 새로 적용하기로 하였고 고민하던 도중 nhn에서 운영하는 오픈소스인 Toast Ui를 활용하기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;loy124.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;</description>
      <category>JavaScript</category>
      <category>tui-editor</category>
      <category>tuieditor</category>
      <category>vue3</category>
      <author>라면사리추가요</author>
      <guid isPermaLink="true">https://gizmo80.tistory.com/125</guid>
      <comments>https://gizmo80.tistory.com/125#entry125comment</comments>
      <pubDate>Wed, 15 Oct 2025 17:41:40 +0900</pubDate>
    </item>
    <item>
      <title>간만에 Jenkins 삽질로그...ㅡㅡ;;;</title>
      <link>https://gizmo80.tistory.com/132</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;회사를 옮기면서 젠킨스 세팅을 하면서 Pipeline을 사용해 보고자 하는 와중에 역시 삽질을 하게 되어 같은 삽질러 분들의 삽질을&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좀 덜어 보고자 남깁니다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 파이브라인을 사용하면서 같이 사용한 플러그인은 애용하고 있는 Publish Over SSH 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git으로 소스 받아서 gradle로 war 파일 만들어서 서버에 war파일을 배포하는 방식으로 진행 했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글검색해서 나오는 소스중에 일단 맘에 드는 pipeline 소스로 진행을 했는데, 근데 아무리 해도 빌드 까지는 정상적으로 되나,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버로 war파일 전송이 되지 않아 처음에는 sourceFiles 쪽 이 잘못 된건가 싶어서 이리저리 바꿔 보았지만 역시...될리가 있다...ㅡㅡ;;; 그래서 console log도 찍어보고 하다 이상한걸 발견하게 되었는데,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stage를 Prepare, Build, Deploy 이렇게 3개로 나눠서 진행 하고 있었는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Build Stage에서 pwd를 했을때와, Deploy Stage pwd를 경로가 다른걸 발견 했습니다. 그래서 왜 그럴까 pipeline 스크립트를 다시 잘 보니 agent any 가 Deploy Stage에만 없길래 추가 해서 다시 해보니 바로~ 됩니다....&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 각 Stage에 있는 agent any를 다 지우고 pipeline 최상단에 하나만 남겨놓고 하니 매우 정상적으로 배포가 되었습니다...&lt;/p&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줄요약&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 서버로 .war 파일이 전송이 안된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Build Stage의 경로와 Deploy Stage 의 경로가 다르게 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. agent any를 pipeline 최상단만 빼고 나머지는 삭제.&lt;/p&gt;</description>
      <category>Server/Jenkins</category>
      <author>라면사리추가요</author>
      <guid isPermaLink="true">https://gizmo80.tistory.com/132</guid>
      <comments>https://gizmo80.tistory.com/132#entry132comment</comments>
      <pubDate>Wed, 11 Jun 2025 17:10:57 +0900</pubDate>
    </item>
    <item>
      <title>시놀로지 VPN 내부망 연결.</title>
      <link>https://gizmo80.tistory.com/131</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;시놀로지 NAS에서 OpenVPN 설정을 하고나서 외부나 폰으로 연결을 하게 되면 내부망 연결이 안된다.&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;생성 버튼을 클릭 하면 아래처럼 방화벽 규칙 편집이라는 화면이 나오는데 소스IP를 특정IP로 체크 하고 옆에 선택 버튼을 클릭한다.&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;932&quot; data-origin-height=&quot;808&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLQawT/btsLdZP0icV/wAkHLjMnSx2WYCctJOPKt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLQawT/btsLdZP0icV/wAkHLjMnSx2WYCctJOPKt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLQawT/btsLdZP0icV/wAkHLjMnSx2WYCctJOPKt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLQawT%2FbtsLdZP0icV%2FwAkHLjMnSx2WYCctJOPKt0%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;772&quot; height=&quot;669&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;808&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;898&quot; data-origin-height=&quot;516&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZiGmc/btsLdScjOug/daNQixsXM8sQ2K9kKZFSR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZiGmc/btsLdScjOug/daNQixsXM8sQ2K9kKZFSR0/img.png&quot; data-alt=&quot;소스IP 입력창&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZiGmc/btsLdScjOug/daNQixsXM8sQ2K9kKZFSR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZiGmc%2FbtsLdScjOug%2FdaNQixsXM8sQ2K9kKZFSR0%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;898&quot; height=&quot;516&quot; data-origin-width=&quot;898&quot; data-origin-height=&quot;516&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;소스IP 입력창&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;다음에는 VPNServer 앱을 열어서 VPN에 설정된 IP를 확인해야 된다.&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;1500&quot; data-origin-height=&quot;846&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dteYPD/btsLeoIwSuB/I3mDa5PQskiUk1za6hRSfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dteYPD/btsLeoIwSuB/I3mDa5PQskiUk1za6hRSfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dteYPD/btsLeoIwSuB/I3mDa5PQskiUk1za6hRSfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdteYPD%2FbtsLeoIwSuB%2FI3mDa5PQskiUk1za6hRSfk%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;1500&quot; height=&quot;846&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;846&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OpenVPN만 활성화 되어 있고, IP대역은 10.8.0.0 ~ 10.8.0.255로 되어 있는걸 볼수 있다. 다시 방화벽으로 가서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 소스IP 화면에 서브넷으로 선택을 하고 아래처럼 IP주소를 10.8.0.0 서브넷 마스크를 255.255.0.0 으로 입력 하면 된다. 만약 VPN에 ip 대역이 X.0.0.0 ~ X.0.0.255 라고 하면 서브넷 마스크는 255.0.0.0이 된다.&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;894&quot; data-origin-height=&quot;514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdcYpp/btsLfF9438L/sH3b80VJqfZbnc5AuffaB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdcYpp/btsLfF9438L/sH3b80VJqfZbnc5AuffaB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdcYpp/btsLfF9438L/sH3b80VJqfZbnc5AuffaB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdcYpp%2FbtsLfF9438L%2FsH3b80VJqfZbnc5AuffaB1%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;894&quot; height=&quot;514&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;514&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;VPN 연결을 해서 내부망 IP로 연결을 하면 정상적으로 연결이 되는걸 확인 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방법으로 시놀로지 NAS에 설치한 도커도 외부에서 연결이 가능 했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Server</category>
      <category>openvpn</category>
      <category>도커</category>
      <category>시놀로지</category>
      <category>시놀로지vpn</category>
      <author>라면사리추가요</author>
      <guid isPermaLink="true">https://gizmo80.tistory.com/131</guid>
      <comments>https://gizmo80.tistory.com/131#entry131comment</comments>
      <pubDate>Wed, 11 Dec 2024 14:40:39 +0900</pubDate>
    </item>
    <item>
      <title>[펌]JAVA_OPTS, JVM memory, HotSpot JVM</title>
      <link>https://gizmo80.tistory.com/130</link>
      <description>&lt;pre id=&quot;code_1721095977115&quot; class=&quot;routeros&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;JAVA_OPTS, JVM memory, HotSpot JVM 에 대하여&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처: &lt;a href=&quot;https://typing-has-no-ear.tistory.com/24&quot;&gt;https://typing-has-no-ear.tistory.com/24&lt;/a&gt; [두드려도듣진않는다:티스토리]&lt;/p&gt;</description>
      <category>Was</category>
      <author>라면사리추가요</author>
      <guid isPermaLink="true">https://gizmo80.tistory.com/130</guid>
      <comments>https://gizmo80.tistory.com/130#entry130comment</comments>
      <pubDate>Tue, 16 Jul 2024 11:13:06 +0900</pubDate>
    </item>
    <item>
      <title>이클립스 차세대 Theia IDE 실행 후기...</title>
      <link>https://gizmo80.tistory.com/129</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이클립스 차세대 IDE가 나왔다고 해서 다운 받아 실행 한번 해봤다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두둥~&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1047&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mAiMT/btsIpu6ysIH/3TW6RRbIiBtg4eRwtCGtVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mAiMT/btsIpu6ysIH/3TW6RRbIiBtg4eRwtCGtVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mAiMT/btsIpu6ysIH/3TW6RRbIiBtg4eRwtCGtVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmAiMT%2FbtsIpu6ysIH%2F3TW6RRbIiBtg4eRwtCGtVk%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;1920&quot; height=&quot;1047&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1047&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;그런데~ 너~ 어~ 무~ 익숙한...VSCode 화면이 나와서 웃음이 나왔다...이클립스 재단이 미친건가? 아니면 노린건가?? 라는 생각도 잠시 해보았지만... 뭐 아직 초창기 이니...앞으로 어떤 차별점을 가지고 발전할지 좀 지켜 보기로 했다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 아무리 그래도 이건...&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;279&quot; data-origin-height=&quot;181&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvWxpP/btsIqOCEUDl/i6O8Jhj9mUIpbd7xA1KeOK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvWxpP/btsIqOCEUDl/i6O8Jhj9mUIpbd7xA1KeOK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvWxpP/btsIqOCEUDl/i6O8Jhj9mUIpbd7xA1KeOK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvWxpP%2FbtsIqOCEUDl%2Fi6O8Jhj9mUIpbd7xA1KeOK%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;279&quot; height=&quot;181&quot; data-origin-width=&quot;279&quot; data-origin-height=&quot;181&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Eclipse</category>
      <category>theia</category>
      <category>theia ide</category>
      <category>이클립스 차세대 ide</category>
      <category>테이아</category>
      <category>테이아ide</category>
      <author>라면사리추가요</author>
      <guid isPermaLink="true">https://gizmo80.tistory.com/129</guid>
      <comments>https://gizmo80.tistory.com/129#entry129comment</comments>
      <pubDate>Mon, 8 Jul 2024 10:48:07 +0900</pubDate>
    </item>
    <item>
      <title>SSL 서버 테스트 사이트.</title>
      <link>https://gizmo80.tistory.com/128</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.ssllabs.com/ssltest/analyze.html?d=innodisk.inno-soft.co.kr&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.ssllabs.com/ssltest/analyze.html?d=www.naver.com&lt;/a&gt;&lt;/p&gt;</description>
      <category>Server</category>
      <author>라면사리추가요</author>
      <guid isPermaLink="true">https://gizmo80.tistory.com/128</guid>
      <comments>https://gizmo80.tistory.com/128#entry128comment</comments>
      <pubDate>Thu, 18 Jan 2024 15:39:03 +0900</pubDate>
    </item>
    <item>
      <title>ps -ux, netstat -ano</title>
      <link>https://gizmo80.tistory.com/127</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://lnsideout.tistory.com/entry/%ED%86%B0%EC%BA%A3%EC%97%90%EB%9F%AC%ED%95%B4%EA%B2%B0-javanetBindException-%EC%A3%BC%EC%86%8C%EA%B0%80-%EC%9D%B4%EB%AF%B8-%EC%82%AC%EC%9A%A9-%EC%A4%91%EC%9E%85%EB%8B%88%EB%8B%A4-Bind-failed&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://lnsideout.tistory.com/entry/%ED%86%B0%EC%BA%A3%EC%97%90%EB%9F%AC%ED%95%B4%EA%B2%B0-javanetBindException-%EC%A3%BC%EC%86%8C%EA%B0%80-%EC%9D%B4%EB%AF%B8-%EC%82%AC%EC%9A%A9-%EC%A4%91%EC%9E%85%EB%8B%88%EB%8B%A4-Bind-failed&lt;/a&gt;&lt;/p&gt;</description>
      <category>Linux</category>
      <author>라면사리추가요</author>
      <guid isPermaLink="true">https://gizmo80.tistory.com/127</guid>
      <comments>https://gizmo80.tistory.com/127#entry127comment</comments>
      <pubDate>Wed, 20 Dec 2023 10:38:24 +0900</pubDate>
    </item>
    <item>
      <title>Apache + Tomcat 연동위한 AJP와 IPv4 사용 설정시 주의점.</title>
      <link>https://gizmo80.tistory.com/126</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;언제나 그렇듯이 같은 업계 있는 분들이 삽질을 하실때 두어삽 이라도 도움이 되고자 남겨본다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Apache + Tomcat 연동이랑 IPv4랑 무슨 상관인가 싶겠지만... 아주 상관이 없는건 아니다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얼마전에 Apache + Tomcat(버전은 9.x) 연동을 해야 되는 경우가 생겨서 연동을 진행 하게 됬는데...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;worker설정하고, virtualhost도 설정해서 새로 추가한 Tomcat에 연결을 해줬다...&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;분명 worker 설정도 잘 되었고, virtualhost도 문제 없이 잘 되었고..AJP포트도 중복 없이 맞춰줬고...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당췌 원인을 찾을수 없었다...그렇게 서너시간 삽신과 대치하고 있었는데...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문득 Apache와 연동전에 사용자 로그인 로그 수집을 하면서 IP를 수집을 하는데 IPv6만 나와서 IPv4를 수집하기 위해 톰켓 환경변수에 -Djava.net.preferIPv4Stack=true를 추가 해줬던 기억이 났다...설마 설마 하면서 해당 부분은 주석처리 하고 다시 실행을 해봤더니...된다...ㅡㅡ;;;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아놔~;;;;;;;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼...이제 여기서 다시 고민을 했다 그럼 ip수집을 IPv6로 해야 되나? 싶은 찰나의 순간!! tomcat AJP설정 부분에 ip 머시기머시기를 봤던 기억이 나서 server.xml을 열어서 AJP 설정 부분을 봤다.&lt;/p&gt;
&lt;pre id=&quot;code_1702345257459&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!--  Define an AJP 1.3 Connector on port 8009  --&amp;gt;
    &amp;lt;Connector protocol=&quot;AJP/1.3&quot;
               address=&quot;::1&quot;
               port=&quot;8009&quot;
               redirectPort=&quot;8443&quot; /&amp;gt;&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;ajp 설정 검색을 좀 해봤더니 address=&quot;::1&quot; 이부분을 address=&quot;0.0.0.0&quot; 이렇게 IPv4형식으로 바꿔주면 될거 같아서 변경후,&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;결론:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Apache + 톰켓 연동시 IPv4 수집을 하려면 환경설정에 -Djava.net.preferIPv4Stack=true 값을 추가 하고, 톰켓 AJP 설정에서 address=&quot;::1&quot; 를 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;address=&quot;0.0.0.0&quot;로 변경 해야 된다.&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;ps. 삽신!! 우리 앞으로 보는일 없었으면 좋겠다..&lt;/p&gt;</description>
      <category>Was</category>
      <category>AJP</category>
      <category>apache+tomcat</category>
      <category>Djava.net.preferIPv4Stack=true</category>
      <author>라면사리추가요</author>
      <guid isPermaLink="true">https://gizmo80.tistory.com/126</guid>
      <comments>https://gizmo80.tistory.com/126#entry126comment</comments>
      <pubDate>Tue, 12 Dec 2023 10:48:27 +0900</pubDate>
    </item>
  </channel>
</rss>